.ost-fp-box {
    border: 1px solid rgba(0,0,0,.12);
    padding: 24px;
    margin: 24px 0;
    background: #FAF6F1;
}
.ost-fp-form {
    margin-top: 20px;
}
.ost-fp-form p {
    margin: 0 0 14px;
}
.ost-fp-form input[type="text"],
.ost-fp-form input[type="email"],
.ost-fp-form input[type="password"],
.ost-fp-form input[type="url"],
.ost-fp-form input[type="date"],
.ost-fp-form input[type="number"],
.ost-fp-form textarea,
.ost-fp-form select {
    width: 100%;
    max-width: 520px;
    min-height: 48px;
    box-sizing: border-box;
    border: 1px solid rgba(0,0,0,.18);
    border-radius: 0;
    background: rgba(255,255,255,.72);
    color: inherit;
    padding: 12px 14px;
    font: inherit;
    line-height: 1.35;
    box-shadow: none;
    appearance: auto;
}
.ost-fp-form textarea {
    min-height: 132px;
    resize: vertical;
}
.ost-fp-form input[type="text"]:focus,
.ost-fp-form input[type="email"]:focus,
.ost-fp-form input[type="password"]:focus,
.ost-fp-form input[type="url"]:focus,
.ost-fp-form input[type="date"]:focus,
.ost-fp-form input[type="number"]:focus,
.ost-fp-form textarea:focus,
.ost-fp-form select:focus {
    outline: none;
    border-color: rgba(0,0,0,.42);
    background: #fff;
}
.ost-fp-form input::placeholder,
.ost-fp-form textarea::placeholder {
    opacity: .72;
}
.ost-fp-sr-only {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    padding: 0 !important;
    margin: -1px !important;
    overflow: hidden !important;
    clip: rect(0,0,0,0) !important;
    white-space: nowrap !important;
    border: 0 !important;
}
.ost-fp-checkbox {
    display: block;
    margin: 12px 0;
}
.ost-fp-button {
    margin-top: 16px;
}

/* Primary Fourth Pleat buttons are self-contained and do not rely on theme button defaults. */
.button.ost-fp-button,
.button.ost-fp-button:hover,
.button.ost-fp-button:focus {
    --btn-bg-color: #272727 !important;
    --btn-color: #FAF6F1 !important;
    --btn-border-color: #272727 !important;
    background: #272727 !important;
    background-color: #272727 !important;
    border-color: #272727 !important;
    color: #FAF6F1 !important;
}
.ost-fp-muted {
    opacity: .72;
}
.ost-fp-notice {
    display: flex;
    align-items: center;
    min-height: 48px;
    padding: 12px 14px;
    margin: 16px 0;
    border-left: 4px solid #D8CEC3;
    background: #F3ECE4;
    box-sizing: border-box;
}
.ost-fp-notice p {
    margin: 0;
    line-height: 1.45;
}
body.ost-fp-page .ost-fp-notice p {
    margin: 0 !important;
    padding: 0 !important;
}
/* v0.8.8 — shared dynamic notice motion wrapper. Spacing sits on the
   neutral measured wrapper so HeightMotion can animate from/to zero cleanly. */
.ost-fp-notice-motion-wrap {
    display: block;
    margin: 16px 0;
    padding: 0;
}
.ost-fp-notice-motion-wrap > .ost-fp-notice {
    margin: 0 !important;
}
.ost-fp-notice-motion-wrap[hidden] {
    display: none !important;
}
.ost-fp-success,
.ost-fp-error {
    border-left-color: #D8CEC3;
    background: #F3ECE4;
}
.ost-fp-pleat-image-wrap {
    margin: 18px 0;
}
.ost-fp-pleat-image {
    display: block;
    width: 140px;
    max-width: 100%;
    height: 140px;
    object-fit: contain;
}
.ost-fp-pleats {
    display: flex;
    gap: 8px;
    align-items: flex-end;
    margin: 18px 0;
}
.ost-fp-pleat {
    display: inline-block;
    width: 22px;
    height: 56px;
    border-radius: 2px 2px 0 0;
    transform: skewX(-10deg);
    border: 1px solid rgba(0,0,0,.22);
}
.ost-fp-pleat.active {
    background: rgba(0,0,0,.78);
}
.ost-fp-pleat.inactive {
    background: rgba(0,0,0,.08);
}
.ost-fp-history {
    width: 100%;
    border-collapse: collapse;
    margin-top: 12px;
}
.ost-fp-history th,
.ost-fp-history td {
    border-bottom: 1px solid rgba(0,0,0,.12);
    padding: 8px;
    text-align: left;
}
.ost-fp-cards-front {
    display: flex;
    flex-wrap: wrap;
    gap: 16px;
    margin: 20px 0 28px;
}
.ost-fp-card {
    background: rgba(255,255,255,.68);
    border: 1px solid rgba(0,0,0,.12);
    padding: 18px 20px;
    min-width: 140px;
}
.ost-fp-card strong {
    display: block;
    font-size: 28px;
    line-height: 1.2;
}
.ost-fp-card span {
    opacity: .72;
}

/* Fourth Pleat front-end Select2 alignment and inherited form styling. */
.ost-fp-form .select2-container {
    width: 100% !important;
    max-width: 520px !important;
    box-sizing: border-box !important;
}
.ost-fp-form .select2-container .select2-selection--single {
    width: 100% !important;
    min-height: 48px !important;
    box-sizing: border-box !important;
    border: 1px solid rgba(0,0,0,.18) !important;
    border-radius: 0 !important;
    background: rgba(255,255,255,.72) !important;
    color: inherit !important;
    box-shadow: none !important;
    display: flex !important;
    align-items: center !important;
}
.ost-fp-form .select2-container .select2-selection--single .select2-selection__rendered {
    line-height: normal !important;
    padding-left: 14px !important;
    padding-inline-start: 14px !important;
    padding-right: 34px !important;
    padding-inline-end: 34px !important;
    font-weight: 300 !important;
    color: inherit !important;
}
.ost-fp-form .select2-container .select2-selection--single .select2-selection__arrow {
    height: 48px !important;
    right: 8px !important;
}
.ost-fp-form .select2-container--focus .select2-selection--single,
.ost-fp-form .select2-container--open .select2-selection--single {
    border-color: rgba(0,0,0,.42) !important;
    background: #fff !important;
}
body.ost-fp-page .select2-container--open .select2-dropdown .select2-search--dropdown {
    padding-left: 14px !important;
    padding-right: 14px !important;
}
body.ost-fp-page .select2-container--open .select2-dropdown .select2-search__field {
    padding-left: 14px !important;
    padding-right: 14px !important;
    box-sizing: border-box !important;
}
body.ost-fp-page .select2-container--open .select2-dropdown .select2-results__option {
    padding-left: 14px !important;
    padding-right: 14px !important;
}

/* Fourth Pleat native select alignment hardening. Some themes add select text indents or
   non-standard padding; this restores the same inset as the other Ostavae form fields. */
.ost-fp-box .ost-fp-form select,
body.ost-fp-page .ost-fp-box .ost-fp-form select,
body.ost-fp-page .ost-fp-form select {
    padding-left: 14px !important;
    padding-inline-start: 14px !important;
    padding-right: 34px !important;
    padding-inline-end: 34px !important;
    text-indent: 0 !important;
    line-height: normal !important;
    font-weight: 300 !important;
    box-sizing: border-box !important;
}
.ost-fp-box .ost-fp-form select option,
body.ost-fp-page .ost-fp-form select option {
    padding-left: 14px !important;
    padding-right: 14px !important;
    text-indent: 0 !important;
    font-weight: 300 !important;
}
body.ost-fp-page .select2-container .select2-selection--single .select2-selection__rendered,
body.ost-fp-page .select2-selection__rendered,
.ost-fp-box .select2-selection__rendered {
    padding-left: 14px !important;
    padding-inline-start: 14px !important;
    padding-right: 34px !important;
    padding-inline-end: 34px !important;
    text-indent: 0 !important;
    line-height: normal !important;
    font-weight: 300 !important;
}
body.ost-fp-page .select2-container--open .select2-dropdown .select2-results__option,
body.ost-fp-page .select2-results__option {
    padding-left: 14px !important;
    padding-inline-start: 14px !important;
    padding-right: 14px !important;
    padding-inline-end: 14px !important;
    text-indent: 0 !important;
    font-weight: 300 !important;
}


/* v0.3.29: fine adjustment for Fourth Pleat select text and dropdown content. */
body.ost-fp-page .ost-fp-form select,
body.ost-fp-page .select2-container .select2-selection--single .select2-selection__rendered,
body.ost-fp-page .select2-selection__rendered,
.ost-fp-box .select2-selection__rendered {
    padding-left: 10px !important;
    padding-inline-start: 10px !important;
}
body.ost-fp-page .select2-container--open .select2-dropdown .select2-search--dropdown,
body.ost-fp-page .select2-container--open .select2-dropdown .select2-search__field,
body.ost-fp-page .select2-container--open .select2-dropdown .select2-results__option,
body.ost-fp-page .select2-results__option,
.ost-fp-box .ost-fp-form select option,
body.ost-fp-page .ost-fp-form select option {
    padding-left: 10px !important;
    padding-inline-start: 10px !important;
}

.ost-fp-reporting {
    margin-top: 24px;
}
.ost-fp-report-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 16px;
    margin: 16px 0 24px;
}
.ost-fp-report-panel {
    border: 1px solid rgba(0,0,0,.12);
    background: rgba(255,255,255,.5);
    padding: 16px;
}
.ost-fp-report-panel h4 {
    margin: 0 0 10px;
}
.ost-fp-report-table {
    width: 100%;
    border-collapse: collapse;
}
.ost-fp-report-table th,
.ost-fp-report-table td {
    border-bottom: 1px solid rgba(0,0,0,.10);
    padding: 8px 0;
    text-align: left;
    vertical-align: top;
}
.ost-fp-report-table td {
    text-align: right;
    width: 56px;
}
.ost-fp-report-table tr:last-child th,
.ost-fp-report-table tr:last-child td {
    border-bottom: 0;
}


/* v0.3.29: Partner Portal counter alignment. */
.ost-fp-partner-portal .ost-fp-cards-front .ost-fp-card {
    text-align: center !important;
}
.ost-fp-partner-portal .ost-fp-cards-front .ost-fp-card strong,
.ost-fp-partner-portal .ost-fp-cards-front .ost-fp-card span {
    display: block !important;
    width: 100% !important;
    text-align: center !important;
}
.ost-fp-partner-portal .ost-fp-report-table td {
    width: 72px !important;
    padding-left: 12px !important;
    padding-right: 12px !important;
    text-align: center !important;
}

/* v0.3.30: Fourth Pleat select alignment and Partner Portal activity label spacing. */
.ost-fp-box .ost-fp-form select,
body.ost-fp-page .ost-fp-box .ost-fp-form select,
body.ost-fp-page .ost-fp-form select {
    padding-left: 8px !important;
    padding-inline-start: 8px !important;
    text-indent: -2px !important;
}
.ost-fp-box .ost-fp-form select option,
body.ost-fp-page .ost-fp-form select option,
body.ost-fp-page .select2-container--open .select2-dropdown .select2-search--dropdown,
body.ost-fp-page .select2-container--open .select2-dropdown .select2-search__field,
body.ost-fp-page .select2-container--open .select2-dropdown .select2-results__option,
body.ost-fp-page .select2-results__option {
    padding-left: 8px !important;
    padding-inline-start: 8px !important;
}
body.ost-fp-page .select2-container .select2-selection--single .select2-selection__rendered,
body.ost-fp-page .select2-selection__rendered,
.ost-fp-box .select2-selection__rendered {
    padding-left: 8px !important;
    padding-inline-start: 8px !important;
    text-indent: -2px !important;
}
.ost-fp-partner-portal .ost-fp-report-panel h4,
.ost-fp-partner-portal .ost-fp-report-table th {
    padding-left: 8px !important;
    box-sizing: border-box !important;
}

/* v0.3.31: restore Fourth Pleat select inset now that the selector target applies reliably. */
.ost-fp-box .ost-fp-form select,
body.ost-fp-page .ost-fp-box .ost-fp-form select,
body.ost-fp-page .ost-fp-form select,
body.ost-fp-page .select2-container .select2-selection--single .select2-selection__rendered,
body.ost-fp-page .select2-selection__rendered,
.ost-fp-box .select2-selection__rendered {
    padding-left: 14px !important;
    padding-inline-start: 14px !important;
    text-indent: 0 !important;
}
.ost-fp-box .ost-fp-form select option,
body.ost-fp-page .ost-fp-form select option,
body.ost-fp-page .select2-container--open .select2-dropdown .select2-search--dropdown,
body.ost-fp-page .select2-container--open .select2-dropdown .select2-search__field,
body.ost-fp-page .select2-container--open .select2-dropdown .select2-results__option,
body.ost-fp-page .select2-results__option {
    padding-left: 14px !important;
    padding-inline-start: 14px !important;
    text-indent: 0 !important;
}

/* v0.3.31: Fourth Pleat checkbox formatting aligned to Ostavae checkout controls. */
.ost-fp-form input[type="checkbox"] {
    appearance: none !important;
    -webkit-appearance: none !important;
    width: 18px !important;
    height: 18px !important;
    min-width: 18px !important;
    min-height: 18px !important;
    border: 1px solid #272727 !important;
    background-color: transparent !important;
    margin: 0 10px 0 0 !important;
    vertical-align: middle !important;
    box-sizing: border-box !important;
    box-shadow: none !important;
}
.ost-fp-form input[type="checkbox"]:checked {
    background-color: #272727 !important;
    border-color: #272727 !important;
    background-image:
        linear-gradient(45deg, transparent 45%, #FAF6F1 45%, #FAF6F1 55%, transparent 55%),
        linear-gradient(-45deg, transparent 45%, #FAF6F1 45%, #FAF6F1 55%, transparent 55%) !important;
    background-size: 6px 10px, 10px 6px !important;
    background-position: 7px 3px, 3px 8px !important;
    background-repeat: no-repeat !important;
}
.ost-fp-form .ost-fp-checkbox {
    display: flex !important;
    align-items: flex-start !important;
    line-height: 1.45 !important;
}
.ost-fp-benefit-list {
    margin: 14px 0 0;
    padding-left: 20px;
}
.ost-fp-benefit-list li {
    margin: 0 0 8px;
}

/* v0.3.32: tighten Fourth Pleat checkbox styling and suppress theme/native checkbox glyphs. */
.ost-fp-form label.ost-fp-checkbox,
.ost-fp-box .ost-fp-form label.ost-fp-checkbox,
body.ost-fp-page .ost-fp-form label.ost-fp-checkbox {
    display: flex !important;
    align-items: flex-start !important;
    gap: 0 !important;
    position: relative !important;
    line-height: 1.45 !important;
    color: #272727 !important;
    font-weight: 300 !important;
}

.ost-fp-form label.ost-fp-checkbox::before,
.ost-fp-form label.ost-fp-checkbox::after,
.ost-fp-form label.ost-fp-checkbox span::before,
.ost-fp-form label.ost-fp-checkbox span::after,
.ost-fp-form input[type="checkbox"]::before,
.ost-fp-form input[type="checkbox"]::after,
body.ost-fp-page .ost-fp-form label.ost-fp-checkbox::before,
body.ost-fp-page .ost-fp-form label.ost-fp-checkbox::after,
body.ost-fp-page .ost-fp-form label.ost-fp-checkbox span::before,
body.ost-fp-page .ost-fp-form label.ost-fp-checkbox span::after,
body.ost-fp-page .ost-fp-form input[type="checkbox"]::before,
body.ost-fp-page .ost-fp-form input[type="checkbox"]::after {
    content: none !important;
    display: none !important;
    width: 0 !important;
    height: 0 !important;
    background: none !important;
    border: none !important;
    box-shadow: none !important;
}

.ost-fp-form input[type="checkbox"],
.ost-fp-box .ost-fp-form input[type="checkbox"],
body.ost-fp-page .ost-fp-form input[type="checkbox"] {
    appearance: none !important;
    -webkit-appearance: none !important;
    accent-color: initial !important;
    width: 18px !important;
    height: 18px !important;
    min-width: 18px !important;
    min-height: 18px !important;
    flex: 0 0 18px !important;
    border: 1px solid #272727 !important;
    border-radius: 0 !important;
    background: transparent !important;
    background-color: transparent !important;
    background-image: none !important;
    margin: 2px 10px 0 0 !important;
    padding: 0 !important;
    vertical-align: middle !important;
    box-sizing: border-box !important;
    box-shadow: none !important;
    outline: none !important;
}

.ost-fp-form input[type="checkbox"]:checked,
.ost-fp-box .ost-fp-form input[type="checkbox"]:checked,
body.ost-fp-page .ost-fp-form input[type="checkbox"]:checked {
    background-color: #272727 !important;
    border-color: #272727 !important;
    background-image:
        linear-gradient(45deg, transparent 45%, #FAF6F1 45%, #FAF6F1 55%, transparent 55%),
        linear-gradient(-45deg, transparent 45%, #FAF6F1 45%, #FAF6F1 55%, transparent 55%) !important;
    background-size: 6px 10px, 10px 6px !important;
    background-position: 7px 3px, 3px 8px !important;
    background-repeat: no-repeat !important;
}

.ost-fp-form input[type="checkbox"]:focus,
.ost-fp-box .ost-fp-form input[type="checkbox"]:focus,
body.ost-fp-page .ost-fp-form input[type="checkbox"]:focus {
    border-color: #272727 !important;
    box-shadow: none !important;
}


/* v0.3.33: custom-rendered Fourth Pleat checkbox control.
   Native input is visually hidden and the visible box is drawn from span markup.
   This avoids Rey/Woo/browser glyph overlays on the native checkbox. */
.ost-fp-form label.ost-fp-checkbox,
.ost-fp-box .ost-fp-form label.ost-fp-checkbox,
body.ost-fp-page .ost-fp-form label.ost-fp-checkbox {
    display: flex !important;
    align-items: flex-start !important;
    position: relative !important;
    margin: 0 0 8px 0 !important;
    padding: 0 !important;
    gap: 0 !important;
    color: #272727 !important;
    font-size: 16px !important;
    font-weight: 300 !important;
    line-height: 1.45 !important;
}

.ost-fp-form label.ost-fp-checkbox::before,
.ost-fp-form label.ost-fp-checkbox::after,
.ost-fp-form label.ost-fp-checkbox .ost-fp-checkbox-box::before,
.ost-fp-form label.ost-fp-checkbox .ost-fp-checkbox-box::after,
body.ost-fp-page .ost-fp-form label.ost-fp-checkbox::before,
body.ost-fp-page .ost-fp-form label.ost-fp-checkbox::after,
body.ost-fp-page .ost-fp-form label.ost-fp-checkbox .ost-fp-checkbox-box::before,
body.ost-fp-page .ost-fp-form label.ost-fp-checkbox .ost-fp-checkbox-box::after {
    content: none !important;
    display: none !important;
}

.ost-fp-form input.ost-fp-checkbox-input,
.ost-fp-box .ost-fp-form input.ost-fp-checkbox-input,
body.ost-fp-page .ost-fp-form input.ost-fp-checkbox-input {
    position: absolute !important;
    opacity: 0 !important;
    width: 1px !important;
    height: 1px !important;
    min-width: 1px !important;
    min-height: 1px !important;
    margin: 0 !important;
    padding: 0 !important;
    border: 0 !important;
    background: transparent !important;
    background-image: none !important;
    appearance: none !important;
    -webkit-appearance: none !important;
    pointer-events: none !important;
}

.ost-fp-form .ost-fp-checkbox-box,
.ost-fp-box .ost-fp-form .ost-fp-checkbox-box,
body.ost-fp-page .ost-fp-form .ost-fp-checkbox-box {
    display: inline-block !important;
    width: 18px !important;
    height: 18px !important;
    min-width: 18px !important;
    min-height: 18px !important;
    flex: 0 0 18px !important;
    box-sizing: border-box !important;
    border: 1px solid #272727 !important;
    border-radius: 0 !important;
    background: transparent !important;
    background-color: transparent !important;
    background-image: none !important;
    margin: 2px 10px 0 0 !important;
    padding: 0 !important;
    box-shadow: none !important;
}

.ost-fp-form input.ost-fp-checkbox-input:checked + .ost-fp-checkbox-box,
.ost-fp-box .ost-fp-form input.ost-fp-checkbox-input:checked + .ost-fp-checkbox-box,
body.ost-fp-page .ost-fp-form input.ost-fp-checkbox-input:checked + .ost-fp-checkbox-box {
    background-color: #272727 !important;
    border-color: #272727 !important;
    background-image:
        linear-gradient(45deg, transparent 45%, #FAF6F1 45%, #FAF6F1 55%, transparent 55%),
        linear-gradient(-45deg, transparent 45%, #FAF6F1 45%, #FAF6F1 55%, transparent 55%) !important;
    background-size: 6px 10px, 10px 6px !important;
    background-position: 7px 3px, 3px 8px !important;
    background-repeat: no-repeat !important;
}

.ost-fp-form input.ost-fp-checkbox-input:focus-visible + .ost-fp-checkbox-box,
.ost-fp-box .ost-fp-form input.ost-fp-checkbox-input:focus-visible + .ost-fp-checkbox-box,
body.ost-fp-page .ost-fp-form input.ost-fp-checkbox-input:focus-visible + .ost-fp-checkbox-box {
    outline: 1px solid #272727 !important;
    outline-offset: 2px !important;
}

.ost-fp-form .ost-fp-checkbox-text,
.ost-fp-box .ost-fp-form .ost-fp-checkbox-text,
body.ost-fp-page .ost-fp-form .ost-fp-checkbox-text {
    display: block !important;
    flex: 1 1 auto !important;
    font-size: 16px !important;
    font-weight: 300 !important;
    line-height: 1.45 !important;
    color: #272727 !important;
}

/* v0.5.6: immutable consent/preference states stay visibly checked without looking disabled. */
.ost-fp-form label.ost-fp-checkbox-locked,
.ost-fp-box .ost-fp-form label.ost-fp-checkbox-locked,
body.ost-fp-page .ost-fp-form label.ost-fp-checkbox-locked {
    cursor: default !important;
    opacity: 1 !important;
    color: #272727 !important;
}
.ost-fp-form label.ost-fp-checkbox-locked .ost-fp-checkbox-box,
.ost-fp-box .ost-fp-form label.ost-fp-checkbox-locked .ost-fp-checkbox-box,
body.ost-fp-page .ost-fp-form label.ost-fp-checkbox-locked .ost-fp-checkbox-box,
.ost-fp-form label.ost-fp-checkbox-locked .ost-fp-checkbox-text,
.ost-fp-box .ost-fp-form label.ost-fp-checkbox-locked .ost-fp-checkbox-text,
body.ost-fp-page .ost-fp-form label.ost-fp-checkbox-locked .ost-fp-checkbox-text {
    opacity: 1 !important;
    color: #272727 !important;
}
.ost-fp-form input.ost-fp-checkbox-input:disabled + .ost-fp-checkbox-box,
.ost-fp-box .ost-fp-form input.ost-fp-checkbox-input:disabled + .ost-fp-checkbox-box,
body.ost-fp-page .ost-fp-form input.ost-fp-checkbox-input:disabled + .ost-fp-checkbox-box {
    opacity: 1 !important;
}

/* Fourth Pleat contextual My Account gateway. */
.ost-fp-myaccount-context {
    margin-bottom: 24px;
}
.ost-fp-myaccount-context h2 {
    margin-top: 0;
}
body.ost-fp-context-partner .woocommerce #customer_login .u-column2,
body.ost-fp-context-partner .woocommerce .u-columns .u-column2,
body.ost-fp-context-partner .woocommerce .col2-set .col-2,
body.ost-fp-context-partner .woocommerce-form-register,
body.ost-fp-context-partner .woocommerce-form-register-toggle,
body.ost-fp-context-member .woocommerce #customer_login .u-column2,
body.ost-fp-context-member .woocommerce .u-columns .u-column2,
body.ost-fp-context-member .woocommerce .col2-set .col-2,
body.ost-fp-context-member .woocommerce-form-register,
body.ost-fp-context-member .woocommerce-form-register-toggle {
    display: none !important;
}
body.ost-fp-context-partner .woocommerce #customer_login .u-column1,
body.ost-fp-context-partner .woocommerce .u-columns .u-column1,
body.ost-fp-context-partner .woocommerce .col2-set .col-1,
body.ost-fp-context-member .woocommerce #customer_login .u-column1,
body.ost-fp-context-member .woocommerce .u-columns .u-column1,
body.ost-fp-context-member .woocommerce .col2-set .col-1 {
    width: 100% !important;
    max-width: 100% !important;
    float: none !important;
}
.ost-fp-myaccount-return {
    margin: -8px 0 24px;
}

/* Fourth Pleat MVP member dashboard summary. */
.ost-fp-summary-table {
    width: 100%;
    max-width: 640px;
    border-collapse: collapse;
    margin-top: 18px;
}
.ost-fp-summary-table th,
.ost-fp-summary-table td {
    border-bottom: 1px solid rgba(0,0,0,.12);
    padding: 9px 0;
    text-align: left;
    vertical-align: top;
    font-weight: 300;
}
.ost-fp-summary-table th {
    width: 150px;
    padding-right: 18px;
    opacity: .72;
}
.ost-fp-about p:last-child {
    margin-bottom: 0;
}

/* Fourth Pleat sign-out link */
.ost-fp-signout {
    margin-top: 18px;
}

/* v0.3.41: MVP formatting clean-up. */
body.ost-fp-page .ost-fp-pleat-image,
.ost-fp-box .ost-fp-pleat-image {
    width: 105px !important;
    height: 105px !important;
}

body.ost-fp-page .ost-fp-box table:not(.form-table),
body.ost-fp-page .ost-fp-box table:not(.form-table) thead,
body.ost-fp-page .ost-fp-box table:not(.form-table) tbody,
body.ost-fp-page .ost-fp-box table:not(.form-table) tr,
body.ost-fp-page .ost-fp-box table:not(.form-table) th,
body.ost-fp-page .ost-fp-box table:not(.form-table) td,
.ost-fp-box .ost-fp-summary-table,
.ost-fp-box .ost-fp-summary-table tbody,
.ost-fp-box .ost-fp-summary-table tr,
.ost-fp-box .ost-fp-summary-table th,
.ost-fp-box .ost-fp-summary-table td,
.ost-fp-box .ost-fp-report-table,
.ost-fp-box .ost-fp-report-table tbody,
.ost-fp-box .ost-fp-report-table tr,
.ost-fp-box .ost-fp-report-table th,
.ost-fp-box .ost-fp-report-table td,
.ost-fp-box .ost-fp-history,
.ost-fp-box .ost-fp-history tbody,
.ost-fp-box .ost-fp-history tr,
.ost-fp-box .ost-fp-history th,
.ost-fp-box .ost-fp-history td {
    background: transparent !important;
    background-color: transparent !important;
    box-shadow: none !important;
}

body.ost-fp-page .ost-fp-box table:not(.form-table) th,
body.ost-fp-page .ost-fp-box table:not(.form-table) td,
.ost-fp-box .ost-fp-summary-table th,
.ost-fp-box .ost-fp-summary-table td,
.ost-fp-box .ost-fp-report-table th,
.ost-fp-box .ost-fp-report-table td,
.ost-fp-box .ost-fp-history th,
.ost-fp-box .ost-fp-history td {
    padding-left: 10px !important;
    padding-right: 10px !important;
    box-sizing: border-box !important;
}

.ost-fp-box .ost-fp-summary-table th {
    padding-right: 10px !important;
}

.ost-fp-partner-portal .ost-fp-report-panel h4,
.ost-fp-partner-portal .ost-fp-report-table th {
    padding-left: 10px !important;
}


/* v0.3.42: make all Fourth Pleat table headings visually authoritative. */
body.ost-fp-page .ost-fp-box table:not(.form-table) th,
.ost-fp-box .ost-fp-summary-table th,
.ost-fp-box .ost-fp-report-table th,
.ost-fp-box .ost-fp-history th {
    font-weight: 600 !important;
    opacity: 1 !important;
    color: #272727 !important;
}

body.ost-fp-page .ost-fp-box table:not(.form-table) thead th,
.ost-fp-box .ost-fp-report-table thead th,
.ost-fp-box .ost-fp-history thead th {
    font-weight: 600 !important;
    opacity: 1 !important;
    color: #272727 !important;
}

/* v0.3.54 front-end account and portal polish corrections. */
.ost-fp-front-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 20px;
    margin: 0 0 20px;
}
.ost-fp-front-header h3 {
    margin-top: 0;
    margin-bottom: 6px;
}
.ost-fp-front-header-line p {
    margin-top: 0;
    margin-bottom: 0;
}
.ost-fp-front-header-line .ost-fp-partner-identity {
    margin-top: 6px;
}
.ost-fp-front-header .ost-fp-signout {
    margin-top: 2px;
    white-space: nowrap;
}
.ost-fp-empty-state {
    opacity: .72;
    margin: 0;
    padding: 12px 0;
}
@media (max-width: 640px) {
    .ost-fp-front-header {
        display: block;
    }
    .ost-fp-front-header .ost-fp-signout {
        margin-top: 12px;
    }
}

/* v0.3.57: Partner portal activity report panel heading alignment. */
.ost-fp-partner-portal .ost-fp-report-panel {
    text-align: left !important;
}
.ost-fp-partner-portal .ost-fp-report-panel h4 {
    margin-left: 0 !important;
    padding-left: 0 !important;
    text-align: left !important;
    box-sizing: border-box !important;
}
.ost-fp-partner-portal .ost-fp-report-panel .ost-fp-empty-state {
    padding-left: 0 !important;
    text-align: left !important;
}
.ost-fp-partner-portal .ost-fp-report-panel .ost-fp-report-table th {
    padding-left: 0 !important;
    text-align: left !important;
}
.ost-fp-partner-portal .ost-fp-report-panel .ost-fp-report-table td {
    text-align: right !important;
}

/* v0.4.0 — Credit voucher display */
.ost-fp-credit-panel h3 {
    margin-top: 0;
}
.ost-fp-credit-code {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    align-items: center;
}
.ost-fp-credit-code code {
    padding: 4px 8px;
    background: rgba(255,255,255,.7);
    border: 1px solid rgba(0,0,0,.12);
}
.ost-fp-credit-panel .ost-fp-credit-code {
    margin-bottom: 0 !important;
}
.ost-fp-credit-panel .ost-fp-credit-validity {
    margin: 6px 0 0 !important;
}
.ost-fp-inline-form {
    margin: 10px 0 0;
}
.ost-fp-credit-history {
    margin-top: 12px;
}

/* v0.4.7 — Integrated Fourth Pleat / WooCommerce coupon choice */
.ost-fp-credit-alternative {
    margin-top: 14px;
    margin-bottom: 16px;
}
.ost-fp-alternative-coupon-form {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    align-items: center;
    margin-top: 12px;
}
.ost-fp-alternative-coupon-form .input-text {
    width: min(100%, 280px);
}


/* v0.4.8 — Checkout credit spacing and alternative coupon alignment */
.ost-fp-credit-checkout .ost-fp-inline-form {
    margin: 6px 0 0;
}
.ost-fp-credit-checkout .ost-fp-inline-form .ost-fp-button {
    margin-top: 0 !important;
}
.ost-fp-credit-checkout .ost-fp-credit-alternative {
    margin-top: 28px;
}
.ost-fp-credit-checkout .ost-fp-credit-alternative > p {
    margin: 0 !important;
}
.ost-fp-credit-checkout .ost-fp-alternative-coupon-form {
    align-items: center;
}
.ost-fp-credit-checkout .ost-fp-alternative-coupon-form .input-text,
.ost-fp-credit-checkout .ost-fp-alternative-coupon-form .ost-fp-button {
    margin-top: 0 !important;
    margin-bottom: 0 !important;
}
.ost-fp-credit-checkout .ost-fp-alternative-coupon-form .ost-fp-button {
    align-self: center;
}


/* v0.4.13 — Alternative coupon instruction uses standard site text tone */
.ost-fp-credit-checkout .ost-fp-credit-alternative-applied {
    opacity: 1;
    color: #272727 !important;
}


/* v0.4.17 — Checkout credit notice matches Ostavae WooCommerce notice styling */
.ost-fp-credit-checkout {
    width: 100% !important;
    max-width: 100% !important;
    margin: 0 0 40px 0 !important;
    padding: 20px !important;
    box-sizing: border-box !important;
    background: #F3ECE4 !important;
    background-color: #F3ECE4 !important;
    border: none !important;
    border-left: 4px solid #D8CEC3 !important;
    color: #272727 !important;
    line-height: 1.5 !important;
}
.ost-fp-credit-checkout > p:first-child {
    margin-top: 0 !important;
}
.ost-fp-credit-checkout > p:last-child {
    margin-bottom: 0 !important;
}
.ost-fp-credit-alternative-panel {
    display: none;
}

/* v0.4.18 — Fourth Pleat credit choice in the Rey/WooCommerce cart slide-out */
.ost-fp-credit-mini-cart {
    width: 100% !important;
    max-width: 100% !important;
    margin: 16px 0 !important;
    padding: 18px !important;
    box-sizing: border-box !important;
    background: #F3ECE4 !important;
    background-color: #F3ECE4 !important;
    border: none !important;
    border-left: 4px solid #D8CEC3 !important;
    color: #272727 !important;
    line-height: 1.5 !important;
}
.ost-fp-credit-mini-cart > p:first-of-type {
    margin-top: 0 !important;
}
.ost-fp-credit-mini-cart > p:last-child,
.ost-fp-credit-mini-cart .ost-fp-mini-cart-alternative-applied {
    margin-bottom: 0 !important;
}
.ost-fp-credit-mini-cart .ost-fp-button {
    margin-top: 4px !important;
}
.ost-fp-mini-cart-alternative {
    margin-top: 24px !important;
}
.ost-fp-mini-cart-alternative > p {
    margin: 0 !important;
}
.ost-fp-mini-cart-alternative-panel {
    display: none;
}
.ost-fp-mini-cart-alternative-form {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px;
    margin-top: 12px;
}
.ost-fp-mini-cart-alternative-form .input-text {
    flex: 1 1 180px;
    min-width: 0;
    width: auto !important;
    margin: 0 !important;
}
.ost-fp-mini-cart-alternative-form .ost-fp-button {
    flex: 0 0 auto;
    margin: 0 !important;
}
.ost-fp-mini-cart-feedback {
    display: none;
    margin: 0 0 12px 0;
    color: #272727;
}
.ost-fp-mini-cart-feedback:not(:empty) {
    display: block;
}
.ost-fp-mini-cart-feedback.is-error {
    color: #B84A42;
}
.ost-fp-credit-mini-cart.is-loading {
    opacity: .72;
}
.ost-fp-native-coupon-hidden {
    display: none !important;
}

/* v0.4.20 — Standard Rey mini-cart coupon control uses the Ostavae notice-box language */
.ost-fp-native-mini-cart-coupon-toggle-wrap {
    width: 100% !important;
    max-width: 100% !important;
    margin: 16px 0 !important;
    padding: 18px !important;
    box-sizing: border-box !important;
    background: #F3ECE4 !important;
    background-color: #F3ECE4 !important;
    border: none !important;
    border-left: 4px solid #D8CEC3 !important;
    color: #272727 !important;
    line-height: 1.5 !important;
}

/* When Rey reveals its native form, the trigger and form read as one continuous notice box. */
.ost-fp-native-mini-cart-coupon-toggle-wrap.is-expanded {
    margin-bottom: 0 !important;
    padding-bottom: 12px !important;
}

.ost-fp-native-mini-cart-coupon-toggle-wrap .ost-fp-native-mini-cart-coupon-toggle {
    color: #272727 !important;
    opacity: 1 !important;
}

.ost-fp-native-mini-cart-coupon-form {
    width: 100% !important;
    max-width: 100% !important;
    margin: 0 0 16px 0 !important;
    padding: 0 18px 18px 18px !important;
    box-sizing: border-box !important;
    background: #F3ECE4 !important;
    background-color: #F3ECE4 !important;
    border: none !important;
    border-left: 4px solid #D8CEC3 !important;
    color: #272727 !important;
}

/* Preserve Rey's own form layout and reveal/collapse behaviour; only normalise spacing inside the box. */
.ost-fp-native-mini-cart-coupon-form .form-row,
.ost-fp-native-mini-cart-coupon-form p {
    margin-top: 0 !important;
}

.ost-fp-native-mini-cart-coupon-form input,
.ost-fp-native-mini-cart-coupon-form button {
    opacity: 1 !important;
}

/* v0.4.20 — Native Rey coupon trigger: box owns layout; inner action text owns the sleev-link underline. */
.ost-fp-native-mini-cart-coupon-toggle-wrap .ost-fp-native-mini-cart-coupon-toggle,
.ost-fp-native-mini-cart-coupon-toggle-wrap .ost-fp-native-mini-cart-coupon-toggle:hover,
.ost-fp-native-mini-cart-coupon-toggle-wrap .ost-fp-native-mini-cart-coupon-toggle:focus {
    position: static !important;
    display: inline !important;
    padding: 0 !important;
    margin: 0 !important;
    border: none !important;
    background: none !important;
    background-image: none !important;
    box-shadow: none !important;
    text-decoration: none !important;
    color: #272727 !important;
}

.ost-fp-native-mini-cart-coupon-toggle-wrap .ost-fp-native-mini-cart-coupon-toggle::before,
.ost-fp-native-mini-cart-coupon-toggle-wrap .ost-fp-native-mini-cart-coupon-toggle::after,
.ost-fp-native-mini-cart-coupon-toggle-wrap .ost-fp-native-mini-cart-coupon-toggle:hover::before,
.ost-fp-native-mini-cart-coupon-toggle-wrap .ost-fp-native-mini-cart-coupon-toggle:hover::after {
    content: none !important;
    display: none !important;
}


/* v0.4.24 — Standard cart-panel coupon prompt matches Ostavae body text */
.ost-fp-native-mini-cart-coupon-toggle-wrap .ost-fp-native-mini-cart-coupon-toggle,
.ost-fp-native-mini-cart-coupon-toggle-wrap .ost-fp-native-mini-cart-coupon-link-text {
    font-size: 16px !important;
    font-weight: 300 !important;
    line-height: 1.5 !important;
    color: #272727 !important;
    opacity: 1 !important;
}


/* v0.4.27 — Animate Rey's confirmed native coupon reveal state without intercepting its JavaScript.
   Live DOM confirmation: .rey-toggleCoupon-content receives/removes the --visible class. */
.ost-fp-native-mini-cart-coupon-toggle-wrap > .rey-toggleCoupon-content {
    display: grid !important;
    grid-template-rows: 0fr;
    opacity: 0;
    visibility: hidden;
    overflow: hidden;
    transition:
        grid-template-rows 400ms ease,
        opacity 280ms ease,
        visibility 0s linear 400ms;
}

.ost-fp-native-mini-cart-coupon-toggle-wrap > .rey-toggleCoupon-content > * {
    min-height: 0 !important;
    overflow: hidden;
}

.ost-fp-native-mini-cart-coupon-toggle-wrap > .rey-toggleCoupon-content.--visible {
    grid-template-rows: 1fr;
    opacity: 1;
    visibility: visible;
    transition:
        grid-template-rows 400ms ease,
        opacity 280ms ease,
        visibility 0s linear 0s;
}

/* v0.4.31 — Allow the full activation URL on WooCommerce order confirmation to wrap on narrow screens. */
.ost-fp-order-invite .ost-fp-small,
.ost-fp-order-invite .ost-fp-small a {
    max-width: 100%;
    overflow-wrap: anywhere;
    word-break: break-word;
}

/* v0.4.32 — password requirement guidance aligned with My Account registration. */
.ost-fp-form .ost-fp-password-requirements {
    width: 100%;
    max-width: 520px;
    margin: -6px 0 14px;
    font-size: 13px;
    line-height: 1.45;
    opacity: .72;
}

/* v0.4.62: R3 preference persistence fix and restrained single-list benefit presentation. */
.ost-fp-benefit-status-list {
    margin-top: 16px;
}
.ost-fp-benefit-status-item {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    margin: 0 0 9px;
    color: #272727;
}
.ost-fp-benefit-status-item:last-child {
    margin-bottom: 0;
}
.ost-fp-benefit-status-mark {
    display: inline-flex;
    flex: 0 0 16px;
    width: 16px;
    min-height: 1.45em;
    align-items: flex-start;
    justify-content: flex-start;
    font-weight: 400;
    line-height: 1.45;
}
.ost-fp-benefit-status-item.is-paused {
    color: rgba(39,39,39,.42);
}
.ost-fp-preference-row {
    padding: 4px 0;
    border-bottom: 0;
}
.ost-fp-preference-row .ost-fp-checkbox {
    margin: 0;
}
.ost-fp-preference-row .ost-fp-checkbox-text strong {
    font-weight: 500;
}
/* v0.8.8 — canonical master/subordinate preference hierarchy. */
.ost-fp-preference-master {
    padding: 4px 0 10px;
}
.ost-fp-preference-master .ost-fp-checkbox-text {
    font-weight: 500 !important;
}
.ost-fp-preference-subordinate {
    padding: 4px 0 4px 28px;
}

/* R4 account and portal accordion structure */
.ost-fp-accordion {
    margin-top: 24px;
    border-top: 1px solid rgba(39,39,39,.18);
}
.ost-fp-accordion-item {
    margin: 0;
    border-bottom: 1px solid rgba(39,39,39,.18);
}
.ost-fp-accordion-summary {
    list-style: none;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 20px;
    padding: 18px 0;
    cursor: pointer;
    font-weight: 400;
}
.ost-fp-accordion-summary::-webkit-details-marker { display: none; }
.ost-fp-accordion-icon {
    width: 10px;
    height: 10px;
    border-right: 1px solid currentColor;
    border-bottom: 1px solid currentColor;
    transform: rotate(45deg);
    transition: transform .2s ease;
    flex: 0 0 auto;
}
.ost-fp-accordion-item[open] > .ost-fp-accordion-summary .ost-fp-accordion-icon {
    transform: rotate(225deg);
}
.ost-fp-accordion-panel {
    padding: 2px 0 22px;
}
.ost-fp-accordion-panel > .ost-fp-box,
.ost-fp-accordion-panel .ost-fp-box {
    margin: 0;
    padding: 0;
    border: 0;
    box-shadow: none;
    background: transparent;
}
.ost-fp-accordion-panel h3:first-child { margin-top: 0; }
.ost-fp-simple-list { margin: 12px 0; }
.ost-fp-simple-list-row {
    display: flex;
    gap: 10px;
    align-items: baseline;
    padding: 5px 0;
}
.ost-fp-close-confirmation {
    margin-top: 0;
    padding-top: 0;
    border-top: 0;
}
.ost-fp-close-credit-list {
    margin: 10px 0 0;
}
.ost-fp-close-form {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    align-items: center;
    margin-top: 20px;
}
.ost-fp-close-form .ost-fp-button,
.ost-fp-close-form .ost-fp-button-secondary {
    margin-top: 0 !important;
}
.ost-fp-button-secondary {
    background: transparent !important;
    color: #272727 !important;
    border: 1px solid #272727 !important;
}
.ost-fp-product-access-note {
    margin: 16px 0 30px;
    padding: 12px 16px;
    background: #F3ECE4;
    border-left: 4px solid #D8CEC3;
    position: relative;
    z-index: 2;
    pointer-events: auto;
}
.ost-fp-product-access-note p { margin: 0; }
.ost-fp-product-access-note p + p { margin-top: 6px; }

/* v0.4.79 — use the site's global sleev-link treatment directly; retain only interaction safeguards here. */
.ost-fp-product-access-note a.ost-fp-product-access-link {
    z-index: 3;
    pointer-events: auto !important;
    cursor: pointer;
}


/* v0.4.66 — align Fourth Pleat page typography and accordion behaviour with the Ostavae site system. */
.ost-fp-box,
.ost-fp-box p,
.ost-fp-box li,
.ost-fp-box td,
.ost-fp-box th,
.ost-fp-box label,
.ost-fp-box h1,
.ost-fp-box h2,
.ost-fp-box h3,
.ost-fp-box h4,
.ost-fp-box h5,
.ost-fp-box h6,
.ost-fp-box strong,
.ost-fp-box b,
.ost-fp-box input:not([type="submit"]):not([type="button"]),
.ost-fp-box textarea,
.ost-fp-box select {
    font-weight: 300 !important;
}

/* The page itself owns spacing. Fourth Pleat page shells no longer add a framed card around the page content. */
/* Override earlier table emphasis so front-end Fourth Pleat content uses the same light site typography. */
body.ost-fp-page .ost-fp-box table:not(.form-table) th,
body.ost-fp-page .ost-fp-box table:not(.form-table) thead th,
.ost-fp-box .ost-fp-summary-table th,
.ost-fp-box .ost-fp-report-table th,
.ost-fp-box .ost-fp-report-table thead th,
.ost-fp-box .ost-fp-history th,
.ost-fp-box .ost-fp-history thead th {
    font-weight: 300 !important;
}

/* Fourth Pleat workspace/page shells are never framed cards. Keep this independent of
   body-class detection so newly added workspaces inherit the established shell standard. */
.ost-fp-box[data-ost-fp-account-context],
body.ost-fp-page .ost-fp-box[data-ost-fp-account-context] {
    border: 0 !important;
    padding: 0 !important;
    margin: 0 !important;
    background: transparent !important;
    box-shadow: none !important;
}

.ost-fp-accordion-summary {
    width: 100%;
    font-weight: 300 !important;
}

/* Site-consistent plus/minus accordion control. */
.ost-fp-accordion-icon {
    position: relative;
    width: 13px;
    height: 13px;
    border: 0;
    transform: none;
    transition: none;
}
.ost-fp-accordion-icon::before,
.ost-fp-accordion-icon::after {
    content: "";
    position: absolute;
    left: 50%;
    top: 50%;
    background: currentColor;
    transform: translate(-50%, -50%);
    transition: opacity .22s ease, transform .22s ease;
}
.ost-fp-accordion-icon::before {
    width: 13px;
    height: 1px;
}
.ost-fp-accordion-icon::after {
    width: 1px;
    height: 13px;
}
.ost-fp-accordion-item[open] > .ost-fp-accordion-summary .ost-fp-accordion-icon {
    transform: none;
}
.ost-fp-accordion-item[open] > .ost-fp-accordion-summary .ost-fp-accordion-icon::after {
    opacity: 0;
    transform: translate(-50%, -50%) scaleY(0);
}

.ost-fp-accordion-panel {
    transition: height .42s cubic-bezier(.65,0,.35,1), opacity .32s ease;
    will-change: height;
}

@media (prefers-reduced-motion: reduce) {
    .ost-fp-accordion-panel,
    .ost-fp-accordion-icon::before,
    .ost-fp-accordion-icon::after {
        transition: none !important;
    }
}


/* v0.4.67 — align Fourth Pleat accordions with the site product/help accordion system. */
.ost-fp-accordion {
    --ost-fp-accordion-duration: 520;
    --ost-fp-scroll-offset: 100;
}

.ost-fp-accordion-summary {
    font-size: 20px;
    line-height: 1.35;
    padding: 20px 0;
}

.ost-fp-accordion-icon {
    width: 10px;
    height: 10px;
}

.ost-fp-accordion-icon::before {
    width: 10px;
    height: 1px;
}

.ost-fp-accordion-icon::after {
    width: 1px;
    height: 10px;
}

.ost-fp-accordion-panel {
    overflow: hidden;
    transition: height .52s cubic-bezier(.65,0,.35,1), opacity .32s ease;
    will-change: height;
}

.ost-fp-accordion-panel-inner {
    padding: 2px 0 22px;
}

/* The animated inner wrapper owns panel spacing. */
.ost-fp-accordion-panel {
    padding: 0;
}

@media (max-width: 767px) {
    .ost-fp-accordion-summary {
        font-size: 20px;
    }
}


/* v0.4.68 — final R4 accordion presentation corrections. */
.ost-fp-accordion-summary {
    font-size: 19px;
}

@media (max-width: 767px) {
    .ost-fp-accordion-summary {
        font-size: 19px;
    }
}

/* Use the same literal +/- characters as the site's other accordions. */
.ost-fp-accordion-icon {
    width: auto;
    height: auto;
    min-width: 10px;
    font-size: 13px;
    line-height: 1;
    font-weight: 300 !important;
    text-align: center;
    flex: 0 0 auto;
}
.ost-fp-accordion-icon::before,
.ost-fp-accordion-icon::after {
    content: none !important;
    display: none !important;
}

/* Defined outer edge for the primary member state table. */
.ost-fp-summary-table {
    border: 1px solid #D8CEC3;
}


/* v0.4.69 — R4 accordion/table presentation refinement. */
.ost-fp-accordion-summary {
    font-size: 18px;
}

@media (max-width: 767px) {
    .ost-fp-accordion-summary {
        font-size: 18px;
    }
}

/* Match the standard literal +/- treatment used by the site accordions. */
.ost-fp-accordion-icon {
    min-width: 12px;
    font-size: 15px;
    line-height: 1;
    font-weight: 300 !important;
}

/* Site-aligned Fourth Pleat accordion dividers. */
.ost-fp-accordion {
    border-top-color: #E8DDD1;
}
.ost-fp-accordion-item {
    border-bottom-color: #E8DDD1;
}

/* Current state table: controlled outer edge and lighter internal cell dividers. */
body.ost-fp-page .ost-fp-box .ost-fp-summary-table {
    border-collapse: separate !important;
    border-spacing: 0 !important;
    border: 1px solid #D8CEC3 !important;
}
body.ost-fp-page .ost-fp-box .ost-fp-summary-table th,
body.ost-fp-page .ost-fp-box .ost-fp-summary-table td {
    border: 0 !important;
    border-bottom: 1px solid #E8DDD1 !important;
}
body.ost-fp-page .ost-fp-box .ost-fp-summary-table th {
    border-right: 1px solid #E8DDD1 !important;
}
body.ost-fp-page .ost-fp-box .ost-fp-summary-table tr:last-child th,
body.ost-fp-page .ost-fp-box .ost-fp-summary-table tr:last-child td {
    border-bottom: 0 !important;
}


/* v0.4.72 — R4 accordion control-size refinement. */
/* Main Fourth Pleat accordion uses the site's standard literal +/- characters at the agreed size. */
.ost-fp-accordion-icon {
    min-width: 14px;
    font-size: 19px;
    line-height: 1;
    font-weight: 300 !important;
}

/* Apply one table-border system across all Fourth Pleat front-end data tables. */
body.ost-fp-page .ost-fp-box table:not(.form-table),
.ost-fp-box .ost-fp-summary-table,
.ost-fp-box .ost-fp-report-table,
.ost-fp-box .ost-fp-history {
    border-collapse: separate !important;
    border-spacing: 0 !important;
    border: 1px solid #D8CEC3 !important;
}

body.ost-fp-page .ost-fp-box table:not(.form-table) th,
body.ost-fp-page .ost-fp-box table:not(.form-table) td,
.ost-fp-box .ost-fp-summary-table th,
.ost-fp-box .ost-fp-summary-table td,
.ost-fp-box .ost-fp-report-table th,
.ost-fp-box .ost-fp-report-table td,
.ost-fp-box .ost-fp-history th,
.ost-fp-box .ost-fp-history td {
    border: 0 !important;
    border-right: 1px solid #E8DDD1 !important;
    border-bottom: 1px solid #E8DDD1 !important;
}

body.ost-fp-page .ost-fp-box table:not(.form-table) tr > *:last-child,
.ost-fp-box .ost-fp-summary-table tr > *:last-child,
.ost-fp-box .ost-fp-report-table tr > *:last-child,
.ost-fp-box .ost-fp-history tr > *:last-child {
    border-right: 0 !important;
}

body.ost-fp-page .ost-fp-box table:not(.form-table) > tbody:last-child > tr:last-child > *,
body.ost-fp-page .ost-fp-box table:not(.form-table) > tfoot:last-child > tr:last-child > *,
.ost-fp-box .ost-fp-summary-table > tbody:last-child > tr:last-child > *,
.ost-fp-box .ost-fp-report-table > tbody:last-child > tr:last-child > *,
.ost-fp-box .ost-fp-history > tbody:last-child > tr:last-child > * {
    border-bottom: 0 !important;
}

/* Credit history: replace the native disclosure arrow with the original line-drawn +/- control. */
.ost-fp-credit-history > summary {
    list-style: none;
    display: flex;
    align-items: center;
    gap: 8px;
    cursor: pointer;
}
.ost-fp-credit-history > summary::-webkit-details-marker {
    display: none;
}
.ost-fp-credit-history > summary::before {
    content: "";
    position: relative;
    display: inline-block;
    width: 13px;
    height: 13px;
    flex: 0 0 13px;
    background:
        linear-gradient(currentColor, currentColor) center / 13px 1px no-repeat,
        linear-gradient(currentColor, currentColor) center / 1px 13px no-repeat;
}
.ost-fp-credit-history[open] > summary::before {
    background:
        linear-gradient(currentColor, currentColor) center / 13px 1px no-repeat;
}


/* v0.5.0 — R5 partner directory and profile presentation. */
.ost-fp-directory {
    margin: 24px 0;
}
.ost-fp-directory .ost-fp-front-header {
    margin-bottom: 22px;
}
.ost-fp-directory-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 24px;
}
.ost-fp-directory-card {
    border: 1px solid #D8CEC3;
    background: #FAF6F1;
    min-width: 0;
}
.ost-fp-directory-card-image,
.ost-fp-directory-card-image img,
.ost-fp-directory-hero,
.ost-fp-directory-hero img {
    display: block;
    width: 100%;
}
.ost-fp-directory-card-image {
    aspect-ratio: 4 / 3;
    overflow: hidden;
}
.ost-fp-directory-card-image img {
    height: 100%;
    object-fit: cover;
}
.ost-fp-directory-card-body {
    padding: 22px 24px 24px;
}
.ost-fp-directory-card-body h3,
.ost-fp-directory-profile-body h2 {
    margin-top: 0;
}
.ost-fp-directory-meta {
    margin: 6px 0 14px;
    opacity: .72;
}
.ost-fp-directory-access {
    margin: 14px 0;
}
.ost-fp-directory-card .ost-fp-button,
.ost-fp-directory-profile .ost-fp-button,
.ost-fp-directory-profile .ost-fp-button-secondary {
    margin-top: 4px;
}
.ost-fp-directory-back {
    margin: 0 0 18px;
}
.ost-fp-directory-hero {
    max-height: 560px;
    overflow: hidden;
}
.ost-fp-directory-hero img {
    max-height: 560px;
    object-fit: cover;
}
.ost-fp-directory-profile-body {
    margin-top: 0;
}
.ost-fp-directory-logo {
    margin: 0 0 18px;
}
.ost-fp-directory-logo img {
    display: block;
    width: auto;
    max-width: 180px;
    max-height: 72px;
    object-fit: contain;
}
.ost-fp-directory-connection {
    margin-top: 24px;
    padding-top: 22px;
    border-top: 1px solid #E8DDD1;
}
.ost-fp-directory-connected {
    margin-bottom: 8px;
}
.ost-fp-inline-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 12px;
}
.ost-fp-inline-actions .ost-fp-button,
.ost-fp-inline-actions .ost-fp-button-secondary {
    margin-top: 0;
}

@media (max-width: 767px) {
    .ost-fp-directory-grid {
        grid-template-columns: 1fr;
        gap: 20px;
    }
    .ost-fp-directory-card-body {
        padding: 20px;
    }
    .ost-fp-directory-hero,
    .ost-fp-directory-hero img {
        max-height: 420px;
    }
}

/* v0.5.1 — R5 RC2 directory navigation and multi-location portal refinements. */
.ost-fp-member-nav {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 20px;
    margin: 0 0 24px;
    padding: 0 0 12px;
    border-bottom: 1px solid #E8DDD1;
}
.ost-fp-member-nav-links {
    display: flex;
    align-items: center;
    gap: 10px;
}
.ost-fp-member-nav-current {
    font-weight: 400;
}
.ost-fp-member-nav-separator {
    opacity: .45;
}
.ost-fp-member-nav-signout {
    white-space: nowrap;
}
.ost-fp-directory-unavailable,
.ost-fp-directory-empty {
    margin-top: 0;
}
.ost-fp-directory-profile-body {
    padding: 0;
    border: 0;
    background: transparent;
}
.ost-fp-directory-connect-note {
    margin-top: 12px;
}
.ost-fp-partner-location-selector {
    display: flex;
    flex-wrap: wrap;
    align-items: end;
    gap: 10px 12px;
    margin: 6px 0 24px;
}
.ost-fp-partner-location-selector label {
    flex: 0 0 100%;
}
.ost-fp-partner-location-selector select {
    min-height: 44px;
    min-width: 280px;
    max-width: 520px;
}
.ost-fp-partner-location-selector .ost-fp-button-secondary {
    margin-top: 0;
}
@media (max-width: 767px) {
    .ost-fp-member-nav {
        align-items: flex-start;
    }
    .ost-fp-partner-location-selector select {
        width: 100%;
        min-width: 0;
    }
}


/* v0.5.4 — R5 product-qualification inline disclosure refinement. */
.ost-fp-product-access-toggle {
    cursor: pointer;
}
.ost-fp-product-access-details {
    height: 0;
    opacity: 0;
    overflow: hidden;
    transition: height .52s cubic-bezier(.65,0,.35,1), opacity .32s ease;
}
.ost-fp-product-access-details p {
    margin-top: 8px !important;
}
@media (prefers-reduced-motion: reduce) {
    .ost-fp-product-access-details {
        transition: none !important;
    }
}
.ost-fp-partner-location-selector .ost-fp-button-secondary {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    min-height: 44px;
    height: 44px;
    box-sizing: border-box;
    margin: 0 !important;
    padding-top: 0 !important;
    padding-bottom: 0 !important;
}

/* v0.5.8 — R5 final presentation close-out. */
.ost-fp-portal-access-action {
    margin: 20px 0 24px;
}
.ost-fp-portal-access-action .ost-fp-button {
    margin-top: 0 !important;
}
.ost-fp-myaccount-context.ost-fp-notice {
    margin-top: 24px;
    margin-bottom: 28px;
}


/* v0.6.38 — consolidated pending presentation corrections. */
body.ost-fp-page .ost-fp-close-form {
    margin-bottom: 24px !important;
}

/* v0.6.0 — R6 Standard Return Pathway, partner benefits, and Courtesy operations. */
.ost-fp-operational-list,
.ost-fp-partner-benefits,
.ost-fp-courtesy-deployments {
    display: grid;
    gap: 16px;
}
.ost-fp-operational-item,
.ost-fp-benefit-item,
.ost-fp-courtesy-item,
.ost-fp-return-pathway {
    padding: 18px 0;
    border-bottom: 1px solid #E8DDD1;
}
.ost-fp-operational-item:first-child,
.ost-fp-benefit-item:first-child,
.ost-fp-courtesy-item:first-child,
.ost-fp-return-pathway:first-child {
    padding-top: 0;
}
.ost-fp-operational-item:last-child,
.ost-fp-benefit-item:last-child,
.ost-fp-courtesy-item:last-child,
.ost-fp-return-pathway:last-child {
    border-bottom: 0;
    padding-bottom: 0;
}
.ost-fp-operational-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 12px;
}
.ost-fp-inline-disclosure {
    margin-top: 10px;
}
.ost-fp-inline-disclosure > summary {
    cursor: pointer;
    list-style: none;
    display: inline-block;
}
.ost-fp-inline-disclosure > summary::-webkit-details-marker {
    display: none;
}
.ost-fp-inline-disclosure-panel {
    height: 0;
    opacity: 0;
    overflow: hidden;
    transition: height .52s cubic-bezier(.65,0,.35,1), opacity .32s ease;
}
.ost-fp-inline-disclosure-panel > :first-child {
    margin-top: 12px;
}
.ost-fp-inline-disclosure[open] .ost-fp-inline-disclosure-panel {
    opacity: 1;
}
.ost-fp-booking-claim {
    margin-top: 14px;
}
.ost-fp-member-partner-return {
    margin-top: 8px;
}
.ost-fp-reporting-grid-r6 {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 14px;
}
@media (max-width: 767px) {
    .ost-fp-reporting-grid-r6 {
        grid-template-columns: 1fr;
    }
}
@media (prefers-reduced-motion: reduce) {
    .ost-fp-inline-disclosure-panel {
        transition: none !important;
    }
}

/* v0.6.1 — R6 correction build: platform form system, operational hierarchy, and arrival-qualified booking controls. */

/* Fourth Pleat-wide front-end field shell aligned to the established Ostavae/Rey form geometry. */
body.ost-fp-page .ost-fp-form {
    --ost-fp-field-height: calc(2.5625rem + 2px);
    --ost-fp-field-gap: 14px;
}
body.ost-fp-page .ost-fp-form p {
    margin-top: 0 !important;
    margin-bottom: var(--ost-fp-field-gap) !important;
}
body.ost-fp-page .ost-fp-field {
    position: relative;
    width: 100%;
    max-width: 520px;
    margin: 0 0 var(--ost-fp-field-gap);
    box-sizing: border-box;
}
body.ost-fp-page .ost-fp-field--date {
    max-width: 260px;
}
body.ost-fp-page .ost-fp-field input:not([type="checkbox"]):not([type="radio"]),
body.ost-fp-page .ost-fp-field select,
body.ost-fp-page .ost-fp-field textarea,
body.ost-fp-page .ost-fp-form input[type="text"],
body.ost-fp-page .ost-fp-form input[type="email"],
body.ost-fp-page .ost-fp-form input[type="password"],
body.ost-fp-page .ost-fp-form input[type="url"],
body.ost-fp-page .ost-fp-form input[type="date"],
body.ost-fp-page .ost-fp-form input[type="datetime-local"],
body.ost-fp-page .ost-fp-form input[type="time"],
body.ost-fp-page .ost-fp-form input[type="number"],
body.ost-fp-page .ost-fp-form select,
body.ost-fp-page .ost-fp-form textarea {
    width: 100% !important;
    max-width: 520px !important;
    height: var(--ost-fp-field-height) !important;
    min-height: var(--ost-fp-field-height) !important;
    padding: .625rem .8125rem !important;
    background-color: rgba(255,255,255,.45) !important;
    border: 1px solid #E8DDD1 !important;
    border-radius: 2px !important;
    box-shadow: none !important;
    color: #272727 !important;
    font-size: 16px !important;
    font-weight: 300 !important;
    line-height: 1.4 !important;
    box-sizing: border-box !important;
    transition: .15s var(--easeoutcubic, ease-out) !important;
    transition-property: border-color, box-shadow, background-color !important;
}
body.ost-fp-page .ost-fp-field--date input,
body.ost-fp-page .ost-fp-form input[type="date"],
body.ost-fp-page .ost-fp-form input[type="datetime-local"],
body.ost-fp-page .ost-fp-form input[type="time"] {
    max-width: 260px !important;
}
body.ost-fp-page .ost-fp-field--textarea,
body.ost-fp-page .ost-fp-field--textarea textarea,
body.ost-fp-page .ost-fp-form textarea {
    height: auto !important;
    min-height: 132px !important;
}
body.ost-fp-page .ost-fp-field input:focus,
body.ost-fp-page .ost-fp-field select:focus,
body.ost-fp-page .ost-fp-field textarea:focus,
body.ost-fp-page .ost-fp-form input:focus,
body.ost-fp-page .ost-fp-form select:focus,
body.ost-fp-page .ost-fp-form textarea:focus {
    outline: 0 !important;
    border-color: #D8CEC3 !important;
    background-color: rgba(255,255,255,.45) !important;
}
body.ost-fp-page .ost-fp-floating-label {
    position: absolute;
    top: calc(50% - .5em);
    left: 15px;
    z-index: 2;
    margin: 0 !important;
    padding: 0 !important;
    color: #272727;
    font-size: 13px;
    font-weight: 300;
    line-height: 1;
    opacity: .7;
    pointer-events: none;
    transform: translate(0,0);
    transition: transform .2s var(--easeoutcubic, ease-out), opacity .2s ease, font-size .2s ease;
}
body.ost-fp-page .ost-fp-field.--has-value .ost-fp-floating-label,
body.ost-fp-page .ost-fp-field:focus-within .ost-fp-floating-label {
    pointer-events: auto;
    transform: translate(0,-1.7em);
    color: #272727;
    opacity: 1;
    background-color: #FAF6F1;
    font-size: 12px;
    padding-left: .2em !important;
    padding-right: .2em !important;
}
body.ost-fp-page .ost-fp-field--textarea .ost-fp-floating-label {
    top: 15px;
}
body.ost-fp-page .ost-fp-field--textarea.--has-value .ost-fp-floating-label,
body.ost-fp-page .ost-fp-field--textarea:focus-within .ost-fp-floating-label {
    transform: translate(0,-1.45em);
}
body.ost-fp-page .ost-fp-field + .ost-fp-field {
    margin-top: 0;
}

/* Preserve checkbox/radio labels as conventional single-line controls. */
body.ost-fp-page .ost-fp-form .ost-fp-checkbox,
body.ost-fp-page .ost-fp-form label:has(input[type="checkbox"]),
body.ost-fp-page .ost-fp-form label:has(input[type="radio"]) {
    position: static;
}

/* Fourth Pleat hierarchy: accordion titles lead; internal/table-card titles use weight rather than larger type. */
body.ost-fp-page .ost-fp-accordion-summary {
    font-size: 18px !important;
    font-weight: 300 !important;
}
body.ost-fp-page .ost-fp-accordion-panel h3,
body.ost-fp-page .ost-fp-accordion-panel h4,
body.ost-fp-page .ost-fp-report-panel h4,
body.ost-fp-page .ost-fp-section-subheading,
body.ost-fp-page .ost-fp-operational-item h4,
body.ost-fp-page .ost-fp-benefit-item h4,
body.ost-fp-page .ost-fp-partner-benefits > h3,
body.ost-fp-page .ost-fp-return-pathway > h3,
body.ost-fp-page .ost-fp-place-communication-preferences > h3 {
    font-size: 17px !important;
    font-weight: 400 !important;
    line-height: 1.4 !important;
    color: #272727 !important;
}
body.ost-fp-page .ost-fp-report-table th,
body.ost-fp-page .ost-fp-summary-table th,
body.ost-fp-page .ost-fp-history th {
    font-size: 16px !important;
    font-weight: 400 !important;
}
body.ost-fp-page .ost-fp-section-subheading {
    margin: 24px 0 10px !important;
}
body.ost-fp-page .ost-fp-operational-paused {
    display: inline-flex;
    align-items: center;
    min-height: 36px;
    font-size: 16px;
    font-weight: 300;
}
body.ost-fp-page .ost-fp-cancel-booking-form {
    margin-top: 10px;
}
body.ost-fp-page .ost-fp-booking-claim > summary {
    text-decoration: none !important;
}
body.ost-fp-page .ost-fp-booking-claim-status {
    margin-top: 12px;
}

@media (prefers-reduced-motion: reduce) {
    body.ost-fp-page .ost-fp-floating-label {
        transition: none !important;
    }
}


/* v0.6.2 — R6 D11/D12: dedicated partner Actions workspace, server-side table controls and restrained portal summary. */
body.ost-fp-page .ost-fp-actions-summary {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 16px 26px;
    margin: 18px 0 22px;
    padding: 14px 10px;
    border-top: 1px solid #E8DDD1;
    border-bottom: 1px solid #E8DDD1;
}
body.ost-fp-page .ost-fp-actions-summary > div {
    display: inline-flex;
    align-items: baseline;
    gap: 7px;
}
body.ost-fp-page .ost-fp-actions-summary strong {
    font-size: 17px;
    font-weight: 400;
}
body.ost-fp-page .ost-fp-actions-summary span,
body.ost-fp-page .ost-fp-actions-summary a {
    font-size: 16px;
    font-weight: 300;
}
body.ost-fp-page .ost-fp-actions-summary > a {
    margin-left: auto;
}
body.ost-fp-page .ost-fp-actions-tabs {
    display: flex;
    flex-wrap: wrap;
    gap: 18px;
    margin: 8px 0 22px;
    padding-bottom: 10px;
    border-bottom: 1px solid #E8DDD1;
}
body.ost-fp-page .ost-fp-actions-tab {
    font-size: 16px;
    font-weight: 300;
    white-space: nowrap;
}
body.ost-fp-page .ost-fp-actions-tab.is-current {
    font-weight: 400;
}
body.ost-fp-page .ost-fp-actions-tab > span {
    font-weight: inherit;
}
body.ost-fp-page .ost-fp-actions-filter {
    display: flex;
    align-items: flex-end;
    flex-wrap: wrap;
    gap: 14px;
    margin-bottom: 20px;
}
body.ost-fp-page .ost-fp-actions-filter > .ost-fp-field {
    margin-bottom: 0;
}
body.ost-fp-page .ost-fp-actions-filter > .ost-fp-field:first-of-type {
    flex: 1 1 320px;
    max-width: 520px;
}
body.ost-fp-page .ost-fp-actions-filter .ost-fp-inline-actions {
    margin: 0 !important;
    min-height: var(--ost-fp-field-height);
    align-items: center;
}
body.ost-fp-page .ost-fp-actions-table-wrap {
    width: 100%;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
}
body.ost-fp-page .ost-fp-actions-table {
    width: 100%;
    min-width: 880px;
    border-collapse: collapse;
    table-layout: auto;
}
body.ost-fp-page .ost-fp-actions-table th,
body.ost-fp-page .ost-fp-actions-table td {
    padding: 12px 11px !important;
    text-align: left;
    vertical-align: top;
    font-size: 16px !important;
    font-weight: 300 !important;
}
body.ost-fp-page .ost-fp-actions-table th {
    font-weight: 400 !important;
    white-space: nowrap;
}
body.ost-fp-page .ost-fp-actions-table .ost-fp-table-sort {
    font-weight: 400;
}
body.ost-fp-page .ost-fp-actions-cell {
    min-width: 340px;
}
body.ost-fp-page .ost-fp-actions-cell .ost-fp-inline-actions {
    margin-top: 0;
}
body.ost-fp-page .ost-fp-actions-cell .ost-fp-table-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-actions-cell .ost-fp-table-actions > form {
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-actions-cell .ost-fp-table-action {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    width: auto !important;
    min-width: 0 !important;
    min-height: 36px !important;
    height: 36px !important;
    margin: 0 !important;
    padding: 0 14px !important;
    font-size: 14px !important;
    font-weight: 400 !important;
    line-height: 1 !important;
    letter-spacing: 0 !important;
    text-transform: uppercase !important;
    cursor: pointer !important;
    white-space: nowrap;
}
body.ost-fp-page .ost-fp-actions-edit-panel {
    min-width: 330px;
    margin-top: 10px;
}
body.ost-fp-page .ost-fp-actions-edit-panel[hidden] {
    display: none !important;
}
body.ost-fp-page .ost-fp-actions-pagination {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    gap: 12px;
    margin-top: 18px;
    font-size: 15px;
    font-weight: 300;
}
body.ost-fp-page .ost-fp-page-links {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 9px;
}
body.ost-fp-page .ost-fp-page-links .page-numbers {
    display: inline-block;
    font-weight: 300;
}
body.ost-fp-page .ost-fp-page-links .page-numbers.current {
    font-weight: 400;
}
@media (max-width: 767px) {
    body.ost-fp-page .ost-fp-actions-summary > a {
        width: 100%;
        margin-left: 0;
    }
    body.ost-fp-page .ost-fp-actions-filter {
        display: block;
    }
    body.ost-fp-page .ost-fp-actions-filter > .ost-fp-field {
        margin-bottom: 14px;
    }
}

/* v0.6.4 — R6 D14-D16 formatting close-out and reusable confirmation interaction. */
body.ost-fp-page .ost-fp-actions-edit-panel {
    overflow: hidden;
    transition: height 520ms cubic-bezier(.22,1,.36,1), opacity 420ms ease;
}
body.ost-fp-page .ost-fp-actions-edit-panel[hidden] {
    display: none !important;
}
.ost-fp-confirm-modal[hidden] {
    display: none !important;
}
.ost-fp-confirm-modal {
    position: fixed;
    inset: 0;
    z-index: 999999;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 24px;
    box-sizing: border-box;
}
.ost-fp-confirm-backdrop {
    position: absolute;
    inset: 0;
    background: rgba(39,39,39,.46);
}
.ost-fp-confirm-dialog {
    position: relative;
    width: min(520px, 100%);
    max-height: calc(100vh - 48px);
    overflow: auto;
    box-sizing: border-box;
    padding: 24px;
    border: 1px solid #E8DDD1;
    background: #FAF6F1;
    box-shadow: 0 18px 52px rgba(39,39,39,.18);
}
.ost-fp-confirm-dialog h2 {
    margin: 0 0 12px !important;
    font-size: 17px !important;
    line-height: 1.4 !important;
    font-weight: 400 !important;
    color: #272727 !important;
}
.ost-fp-confirm-dialog p {
    margin: 0 !important;
    font-size: 16px !important;
    line-height: 1.5 !important;
    font-weight: 300 !important;
    color: #272727 !important;
}
.ost-fp-confirm-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 22px;
}
.ost-fp-confirm-actions .ost-fp-button,
.ost-fp-confirm-actions .ost-fp-button-secondary {
    margin: 0 !important;
}
.ost-fp-confirm-actions [data-ost-fp-confirm-accept][hidden] {
    display: none !important;
}
@media (max-width: 520px) {
    .ost-fp-confirm-modal {
        padding: 16px;
    }
    .ost-fp-confirm-dialog {
        padding: 20px;
    }
}
@media (prefers-reduced-motion: reduce) {
    body.ost-fp-page .ost-fp-actions-edit-panel {
        transition: none !important;
    }
}

/* v0.6.5 — R6 D19: direct-booking claim form uses the Fourth Pleat field system explicitly. */
body.ost-fp-page .ost-fp-booking-claim-form {
    width: 100%;
    max-width: 520px;
}
body.ost-fp-page .ost-fp-booking-claim-form .ost-fp-field {
    width: 100%;
}
body.ost-fp-page .ost-fp-booking-claim-form .ost-fp-form-actions {
    margin-top: 0 !important;
    margin-bottom: 0 !important;
}


/* v0.6.6 — R6 D19-D20 portal spacing and Book Direct continuation. */
body.ost-fp-page .ost-fp-partner-portal .ost-fp-reporting {
    margin-top: 0;
}
body.ost-fp-page .ost-fp-partner-portal .ost-fp-reporting > p:first-child {
    margin-top: 0;
}
body.ost-fp-page .ost-fp-booking-continuation {
    margin-top: 24px;
    overflow: hidden;
    transition: height 520ms cubic-bezier(.22,1,.36,1), opacity 420ms ease;
}
body.ost-fp-page .ost-fp-booking-continuation[hidden] {
    display: none !important;
}
body.ost-fp-page .ost-fp-booking-continuation-instruction {
    margin: 0 0 18px;
}
body.ost-fp-page .ost-fp-booking-continuation > h4 {
    margin: 0 0 14px;
    font-size: 17px !important;
    font-weight: 400 !important;
    line-height: 1.4 !important;
}
body.ost-fp-page [data-ost-fp-book-direct][aria-busy="true"] {
    opacity: .72;
    pointer-events: none;
}

/* v0.6.7 — R6 D20A-D21 manual continuation and retained-tab positioning. */
body.ost-fp-page .ost-fp-booking-manual-prompt {
    margin: 10px 0 0;
}
body.ost-fp-page .ost-fp-booking-continuation {
    scroll-margin-top: 110px;
}

/* v0.6.9 — R6 D22-D31 functional/presentation iteration. */
body.ost-fp-page .ost-fp-actions-summary {
    background: #F3ECE4;
}

body.ost-fp-page .ost-fp-compact-action {
    min-height: 36px;
    height: 36px;
    padding: 0 14px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

body.ost-fp-page .ost-fp-return-initial[hidden],
body.ost-fp-page [data-ost-fp-return-initial][hidden],
body.ost-fp-page .ost-fp-reopen-booking[hidden] {
    display: none !important;
}

body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-front-header {
    margin-bottom: 18px;
}
body.ost-fp-page .ost-fp-touchpoint-group {
    margin-top: 28px;
}
body.ost-fp-page .ost-fp-touchpoint-group > h2,
body.ost-fp-page .ost-fp-touchpoint-card > h3 {
    font-size: 17px;
    font-weight: 400;
}
body.ost-fp-page .ost-fp-touchpoint-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 18px;
}
body.ost-fp-page .ost-fp-touchpoint-card {
    border: 1px solid #E8DDD1;
    padding: 20px;
    box-sizing: border-box;
}
body.ost-fp-page .ost-fp-touchpoint-layout {
    display: grid;
    grid-template-columns: 150px minmax(0, 1fr);
    gap: 20px;
    align-items: start;
    margin-top: 16px;
}
body.ost-fp-page .ost-fp-touchpoint-qr {
    width: 150px;
    min-height: 150px;
}
body.ost-fp-page .ost-fp-touchpoint-qr svg {
    display: block;
    width: 150px;
    height: 150px;
}
body.ost-fp-page .ost-fp-touchpoint-label {
    margin: 0 0 5px;
    font-weight: 400;
}
body.ost-fp-page .ost-fp-touchpoint-url code {
    overflow-wrap: anywhere;
    white-space: normal;
}
body.ost-fp-page .ost-fp-password-setup-notice {
    gap: 24px;
    flex-wrap: wrap;
    justify-content: flex-start;
}
body.ost-fp-page .ost-fp-password-setup-notice > p:first-child {
    flex: 0 1 auto;
    max-width: 980px;
}
body.ost-fp-page .ost-fp-password-setup-notice > p:last-child {
    flex: 0 0 auto;
}
body.ost-fp-page .ost-fp-password-setup-notice .button {
    margin-top: 0;
}
@media (max-width: 760px) {
    body.ost-fp-page .ost-fp-password-setup-notice { align-items: flex-start; gap: 14px; }
    body.ost-fp-page .ost-fp-password-setup-notice > p:first-child,
    body.ost-fp-page .ost-fp-password-setup-notice > p:last-child { flex-basis: 100%; }
    body.ost-fp-page .ost-fp-touchpoint-grid { grid-template-columns: 1fr; }
    body.ost-fp-page .ost-fp-touchpoint-layout { grid-template-columns: 1fr; }
}


/* v0.6.13 — R6 D27/D35/D36: modal stability, relationship provenance, scalable Directory table. */
/* The confirmation modal deliberately leaves root/body overflow unchanged so an existing vertical scrollbar stays in place. */
.ost-fp-confirm-dialog {
    overscroll-behavior: contain;
}

body.ost-fp-page .ost-fp-directory-filter > .ost-fp-field:first-of-type {
    flex: 1 1 320px;
    max-width: 520px;
}
body.ost-fp-page .ost-fp-directory-filter > .ost-fp-field--select {
    flex: 0 1 260px;
    width: 260px;
    max-width: 100%;
}
body.ost-fp-page .ost-fp-directory-table {
    min-width: 720px;
}
body.ost-fp-page .ost-fp-directory-table th:nth-child(1),
body.ost-fp-page .ost-fp-directory-table td:nth-child(1) {
    width: 44%;
}
body.ost-fp-page .ost-fp-directory-table th:nth-child(2),
body.ost-fp-page .ost-fp-directory-table td:nth-child(2) {
    width: 36%;
}
body.ost-fp-page .ost-fp-directory-table th:nth-child(3),
body.ost-fp-page .ost-fp-directory-table td:nth-child(3) {
    width: 20%;
}
body.ost-fp-page .ost-fp-directory-row {
    cursor: pointer;
}
body.ost-fp-page .ost-fp-directory-toggle {
    appearance: none;
    border: 0;
    border-radius: 0;
    background: transparent;
    color: inherit;
    padding: 0;
    margin: 0;
    font: inherit;
    font-size: 16px;
    font-weight: 300;
    line-height: inherit;
    text-align: left;
    cursor: pointer;
}
body.ost-fp-page .ost-fp-directory-toggle:hover,
body.ost-fp-page .ost-fp-directory-toggle:focus-visible {
    text-decoration: underline;
    text-underline-offset: 4px;
}
body.ost-fp-page .ost-fp-directory-toggle:focus-visible {
    outline: 1px solid currentColor;
    outline-offset: 4px;
}
/* Shared expandable table-detail structure. Consumers may define their own trigger
 * semantics and surface treatment, but motion/state belongs to one component. */
body.ost-fp-page .ost-fp-table-detail-row > td {
    padding: 0 !important;
}
body.ost-fp-page .ost-fp-table-detail-row[hidden] {
    display: none !important;
}
body.ost-fp-page .ost-fp-table-detail-panel {
    overflow: hidden;
    height: 0;
    opacity: 0;
    padding: 0 18px;
    transition: height 520ms cubic-bezier(.22,1,.36,1), opacity 420ms ease;
}
body.ost-fp-page .ost-fp-table-detail-panel::before,
body.ost-fp-page .ost-fp-table-detail-panel::after {
    content: "";
    display: block;
    height: 16px;
}
body.ost-fp-page .ost-fp-directory-detail-panel {
    background: #F3ECE4;
}
body.ost-fp-page .ost-fp-connections-communications-panel {
    background: transparent;
}

/* v0.8.17 — Communication history uses the shared expandable table-detail component. */
body.ost-fp-page .ost-fp-communication-history-detail-panel {
    background: transparent;
}
body.ost-fp-page .ost-fp-communication-history-detail-panel .ost-fp-state-list {
    margin: 0;
}
/* v0.8.18 — move the Communication history footer action down without
 * increasing the measured expandable-panel height. */
body.ost-fp-page .ost-fp-communication-history-detail-panel > .ost-fp-inline-actions {
    margin-top: 10px !important;
    margin-bottom: 10px !important;
}
body.ost-fp-page .ost-fp-place-communication-preferences > h3:first-child {
    margin: 0 0 18px !important;
}
body.ost-fp-page .ost-fp-place-communication-preferences > .ost-fp-form {
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-place-communication-preferences .ost-fp-place-preferences-actions {
    margin-top: 10px !important;
}
body.ost-fp-page .ost-fp-directory-detail-panel p {
    margin: 0 0 12px;
}
body.ost-fp-page .ost-fp-directory-detail-panel p:last-of-type {
    margin-bottom: 0;
}
body.ost-fp-page .ost-fp-directory-detail-action .ost-fp-compact-action {
    margin: 0 !important;
}
@media (max-width: 767px) {
    body.ost-fp-page .ost-fp-directory-filter > .ost-fp-field--select {
        width: 100%;
        max-width: 520px;
    }
}
@media (prefers-reduced-motion: reduce) {
    body.ost-fp-page .ost-fp-table-detail-panel {
        transition: none !important;
    }
}

/* v0.6.14 — R6 D36 Directory border parity with Actions table. */
body.ost-fp-page .ost-fp-directory-table {
    border-collapse: separate !important;
    border-spacing: 0 !important;
    border: 1px solid #D8CEC3 !important;
}
body.ost-fp-page .ost-fp-directory-table th,
body.ost-fp-page .ost-fp-directory-table td {
    border: 0 !important;
    border-right: 1px solid #E8DDD1 !important;
    border-bottom: 1px solid #E8DDD1 !important;
}
body.ost-fp-page .ost-fp-directory-table tr > *:last-child {
    border-right: 0 !important;
}
body.ost-fp-page .ost-fp-directory-table > tbody:last-child > tr:last-child > *,
body.ost-fp-page .ost-fp-directory-table > tfoot:last-child > tr:last-child > * {
    border-bottom: 0 !important;
}

/* v0.6.15 — R6 D37 Fourth Pleat Direct partner distribution. */
body.ost-fp-page .ost-fp-direct-group {
    margin-top: 36px;
}
body.ost-fp-page .ost-fp-direct-preview {
    margin: 16px 0;
    padding: 18px;
    border: 1px solid #E8DDD1;
    background: #F3ECE4;
}
body.ost-fp-page .ost-fp-direct-preview .button {
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-direct-details {
    margin-top: 14px;
}
body.ost-fp-page .ost-fp-direct-card .ost-fp-inline-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 14px;
}
body.ost-fp-page .ost-fp-direct-card .ost-fp-inline-actions .button {
    margin: 0 !important;
}

/* v0.6.16 — R6 hospitality workflow resolution and Fourth Pleat Direct code journey. */
body.ost-fp-page .ost-fp-direct-launch-form .ost-fp-direct-email-fields[hidden],
body.ost-fp-page .ost-fp-direct-error[hidden] {
    display: none !important;
}
body.ost-fp-page .ost-fp-direct-email-fields {
    margin-top: 14px;
}
body.ost-fp-page .ost-fp-direct-code-value {
    margin: 18px 0 !important;
    font-size: 24px !important;
    line-height: 1.25 !important;
    font-weight: 500 !important;
    letter-spacing: .08em;
}
body.ost-fp-page .ost-fp-entry-fulfilment {
    margin-top: 18px;
}
body.ost-fp-page .ost-fp-benefit-list {
    margin: 12px 0 16px;
    padding-left: 22px;
}
body.ost-fp-page .ost-fp-benefit-list li + li {
    margin-top: 9px;
}


/* v0.6.20 — R6 D41-D43 Partner Benefits spacing, no-disc list rule, and Directory profile hierarchy. */
body.ost-fp-page .ost-fp-form label.ost-fp-benefit-checkbox-spacing {
    margin-bottom: 18px !important;
}

/* Fourth Pleat lists use the established check-mark language rather than disc bullets. */
body.ost-fp-page .ost-fp-benefit-list {
    list-style: none !important;
    padding-left: 0 !important;
}
body.ost-fp-page .ost-fp-benefit-list li {
    position: relative;
    padding-left: 24px;
}
body.ost-fp-page .ost-fp-benefit-list li::before {
    content: "✓";
    position: absolute;
    left: 0;
    top: 0;
    font-weight: 500;
}

body.ost-fp-page .ost-fp-directory-profile-body {
    max-width: none;
}
body.ost-fp-page .ost-fp-directory-profile-intro {
    margin: 0 0 30px;
    padding: 28px 0 30px;
    border-bottom: 1px solid #E8DDD1;
}
body.ost-fp-page .ost-fp-directory-profile-intro h2 {
    margin: 0 0 6px;
    font-size: clamp(24px, 2.4vw, 30px);
    line-height: 1.12;
    font-weight: 300;
}
body.ost-fp-page .ost-fp-directory-profile-intro .ost-fp-directory-meta {
    margin: 0 0 18px;
    font-size: 15px;
    opacity: .66;
}
body.ost-fp-page .ost-fp-directory-description {
    max-width: 820px;
    margin: 0 0 20px;
    font-size: 18px;
    line-height: 1.65;
}
body.ost-fp-page .ost-fp-directory-access {
    display: flex;
    align-items: center;
    gap: 9px;
    margin: 18px 0 0;
    font-size: 15px;
}
body.ost-fp-page .ost-fp-directory-access .ost-fp-checkmark {
    display: inline-block;
    flex: 0 0 auto;
    border: 0;
    font-size: 15px;
    line-height: 1;
}
body.ost-fp-page .ost-fp-directory-primary-actions {
    margin: 18px 0 0;
}
body.ost-fp-page .ost-fp-directory-connection {
    margin: 0 0 30px;
    padding: 0 0 30px;
    border-top: 0;
    border-bottom: 1px solid #E8DDD1;
}
body.ost-fp-page .ost-fp-partner-benefits {
    gap: 16px;
    margin: 0 0 30px;
}
body.ost-fp-page .ost-fp-partner-benefits > h3 {
    margin: 0 0 4px;
    font-size: 24px;
    line-height: 1.25;
    font-weight: 400;
}
body.ost-fp-page .ost-fp-directory-profile .ost-fp-benefit-item {
    margin: 0;
    padding: 22px 24px !important;
    border: 1px solid #E8DDD1;
    background: #F3ECE4;
}
body.ost-fp-page .ost-fp-directory-profile .ost-fp-benefit-item h4 {
    margin: 0 0 12px;
    font-size: 21px;
    line-height: 1.25;
    font-weight: 400;
}
body.ost-fp-page .ost-fp-directory-profile .ost-fp-benefit-item > p {
    margin: 0 0 13px;
}
body.ost-fp-page .ost-fp-directory-profile .ost-fp-benefit-item > p:last-of-type {
    margin-bottom: 0;
}
body.ost-fp-page .ost-fp-directory-profile .ost-fp-benefit-eligibility {
    display: inline-block;
    margin: 0 8px 12px 0 !important;
    padding: 5px 9px;
    border: 1px solid #D8CEC3;
    background: #FAF6F1;
    font-size: 13px;
    line-height: 1.3;
}
body.ost-fp-page .ost-fp-directory-profile .ost-fp-benefit-item .ost-fp-muted {
    margin-top: 17px !important;
    padding-top: 13px;
    border-top: 1px solid #D8CEC3;
}
body.ost-fp-page .ost-fp-directory-profile .ost-fp-inline-disclosure {
    margin-top: 16px;
}
body.ost-fp-page .ost-fp-directory-profile .ost-fp-return-pathway {
    margin: 30px 0 0;
    padding: 24px 26px !important;
    border: 1px solid #D8CEC3 !important;
    background: #FAF6F1;
}
body.ost-fp-page .ost-fp-directory-profile .ost-fp-return-pathway h3 {
    margin: 0 0 10px;
    font-size: 24px;
    line-height: 1.25;
    font-weight: 400;
}
body.ost-fp-page .ost-fp-directory-profile .ost-fp-return-pathway > p {
    margin: 0 0 16px;
}
body.ost-fp-page .ost-fp-directory-profile .ost-fp-return-pathway .ost-fp-direct-launch-form {
    margin-top: 8px;
}
@media (max-width: 767px) {
    body.ost-fp-page .ost-fp-directory-profile-intro {
        padding-top: 20px;
    }
    body.ost-fp-page .ost-fp-directory-profile .ost-fp-benefit-item,
    body.ost-fp-page .ost-fp-directory-profile .ost-fp-return-pathway {
        padding: 18px !important;
    }
}


/* v0.6.22 — R6 D45-D50 continuation, processing and unified Actions refinements. */
body.ost-fp-page [data-ost-fp-direct-submit] {
    position: relative;
}
body.ost-fp-page [data-ost-fp-direct-submit][aria-busy="true"] {
    cursor: wait !important;
    opacity: .62;
    color: transparent !important;
    pointer-events: none;
}
body.ost-fp-page [data-ost-fp-direct-submit][aria-busy="true"]::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    width: 16px;
    height: 16px;
    margin: -8px 0 0 -8px;
    border: 1.5px solid currentColor;
    border-right-color: transparent;
    border-radius: 50%;
    animation: ost-fp-direct-spin .72s linear infinite;
}
body.ost-fp-page [data-ost-fp-direct-submit][aria-busy="true"]::after {
    color: #544E47;
}
@keyframes ost-fp-direct-spin {
    to { transform: rotate(360deg); }
}
@media (prefers-reduced-motion: reduce) {
    body.ost-fp-page [data-ost-fp-direct-submit][aria-busy="true"]::after {
        animation-duration: 1.4s;
    }
}

body.ost-fp-page .ost-fp-member-nav-links .ost-fp-nav-continuation {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    width: auto !important;
    min-width: 0 !important;
    min-height: 30px !important;
    height: 30px !important;
    margin: 0 0 0 4px !important;
    padding: 0 10px !important;
    font-size: 12px !important;
    line-height: 1 !important;
    white-space: nowrap;
}
body.ost-fp-page .ost-fp-continuation-item,
body.ost-fp-page .ost-fp-direct-account-item {
    margin: 0 0 14px;
    padding: 18px 20px;
    border: 1px solid #E8DDD1;
    background: #FAF6F1;
}
body.ost-fp-page .ost-fp-continuation-item:last-child,
body.ost-fp-page .ost-fp-direct-account-item:last-child {
    margin-bottom: 0;
}
body.ost-fp-page .ost-fp-continuation-item .button,
body.ost-fp-page .ost-fp-direct-account-item .button {
    margin-top: 10px !important;
}

body.ost-fp-page .ost-fp-actions-table-unified {
    min-width: 920px;
}
body.ost-fp-page .ost-fp-actions-table-unified th:nth-child(1),
body.ost-fp-page .ost-fp-actions-table-unified td:nth-child(1) {
    min-width: 135px;
}
body.ost-fp-page .ost-fp-actions-table-unified th:nth-child(2),
body.ost-fp-page .ost-fp-actions-table-unified td:nth-child(2) {
    min-width: 250px;
}
body.ost-fp-page .ost-fp-actions-table-unified th:nth-child(3),
body.ost-fp-page .ost-fp-actions-table-unified td:nth-child(3) {
    min-width: 120px;
}
body.ost-fp-page .ost-fp-actions-table-unified th:nth-child(4),
body.ost-fp-page .ost-fp-actions-table-unified td:nth-child(4) {
    min-width: 115px;
}
body.ost-fp-page .ost-fp-action-items,
body.ost-fp-page .ost-fp-action-product {
    display: grid;
    gap: 6px;
}
body.ost-fp-page .ost-fp-action-item {
    display: flex;
    align-items: flex-start;
    gap: 8px;
}
body.ost-fp-page .ost-fp-action-check {
    flex: 0 0 auto;
    font-weight: 500;
}
body.ost-fp-page .ost-fp-action-product-meta {
    display: block;
    font-size: 14px;
    opacity: .7;
}
body.ost-fp-page .ost-fp-actions-guest {
    white-space: nowrap;
}

@media (max-width: 767px) {
    body.ost-fp-page .ost-fp-member-nav {
        gap: 12px;
    }
    body.ost-fp-page .ost-fp-member-nav-links {
        flex-wrap: wrap;
    }
    body.ost-fp-page .ost-fp-member-nav-links .ost-fp-nav-continuation {
        margin-left: 0 !important;
    }
}


/* v0.6.23 — segmented Fourth Pleat Direct code control and Direct-code register */
body.ost-fp-page .ost-fp-direct-code-control {
    display: grid;
    gap: 8px;
    margin: 0 0 16px;
}
body.ost-fp-page .ost-fp-direct-code-label {
    display: block;
    font-size: 14px;
    font-weight: 300;
}
body.ost-fp-page .ost-fp-direct-code-boxes {
    display: grid;
    grid-template-columns: repeat(8, minmax(32px, 44px));
    gap: 6px;
    width: max-content;
    max-width: 100%;
}
body.ost-fp-page input.ost-fp-direct-code-box {
    width: 44px !important;
    min-width: 0 !important;
    height: var(--ost-fp-field-height) !important;
    padding: 0 !important;
    text-align: center !important;
    text-transform: uppercase;
    font-size: 21px !important;
    line-height: 1 !important;
    font-weight: 400 !important;
}
body.ost-fp-page .ost-fp-direct-code-filter {
    align-items: flex-end;
}
body.ost-fp-page .ost-fp-direct-code-filter .ost-fp-direct-code-control {
    margin: 0;
    flex: 0 0 auto;
    align-self: flex-end;
}
body.ost-fp-page .ost-fp-direct-code-filter .ost-fp-direct-code-label {
    margin: 0 0 8px;
    line-height: 1;
}
body.ost-fp-page .ost-fp-direct-code-filter > .ost-fp-field {
    flex: 1 1 260px;
    max-width: 430px;
    margin: 0;
    align-self: flex-end;
}
body.ost-fp-page .ost-fp-direct-code-filter > .ost-fp-field input[type="text"] {
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-direct-scope-tabs {
    display: flex;
    gap: 18px;
    margin: -6px 0 20px;
}
body.ost-fp-page .ost-fp-direct-codes-table {
    min-width: 700px;
}
body.ost-fp-page .ost-fp-direct-code-table-value {
    font-weight: 400;
    letter-spacing: .08em;
}
@media (max-width: 560px) {
    body.ost-fp-page .ost-fp-direct-code-boxes {
        grid-template-columns: repeat(8, minmax(28px, 1fr));
        gap: 4px;
        width: 100%;
    }
    body.ost-fp-page input.ost-fp-direct-code-box {
        width: 100% !important;
        height: 46px !important;
        font-size: 18px !important;
    }
}

/* v0.6.24 — Direct-code lookup alignment on Action required and Direct codes. */

/* v0.6.28 — D60-D64 member Fourth Pleat Direct workspace. */
body.ost-fp-page .ost-fp-member-direct-shell {
    margin-top: 8px;
}
body.ost-fp-page .ost-fp-member-direct-tabs {
    margin-top: 0;
}
body.ost-fp-page .ost-fp-member-direct-list {
    display: grid;
    gap: 14px;
}
body.ost-fp-page .ost-fp-member-direct-item {
    margin: 0;
}
body.ost-fp-page .ost-fp-member-direct-item-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 18px;
    margin-bottom: 10px;
}
body.ost-fp-page .ost-fp-member-direct-item-head h4 {
    margin: 0;
}
body.ost-fp-page .ost-fp-member-direct-status {
    white-space: nowrap;
    font-size: 15px;
    font-weight: 400;
}
body.ost-fp-page .ost-fp-member-direct-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 12px;
}
body.ost-fp-page .ost-fp-member-direct-actions form {
    display: inline-flex;
    margin: 0;
}
body.ost-fp-page .ost-fp-member-direct-actions .button {
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-member-direct-empty {
    padding: 18px 20px;
    border: 1px solid #E8DDD1;
    background: #FAF6F1;
}
body.ost-fp-page .ost-fp-member-direct-empty p:last-child {
    margin-bottom: 0;
}
@media (max-width: 680px) {
    body.ost-fp-page .ost-fp-member-direct-item-head {
        align-items: flex-start;
        flex-direction: column;
        gap: 6px;
    }
}

/* v0.6.34 — D78 segmented Direct-code controls: one character, no horizontal padding. */
body.ost-fp-page input.ost-fp-direct-code-box {
    box-sizing: border-box !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
    padding-inline: 0 !important;
    text-align: center !important;
    text-indent: 0 !important;
}

/* v0.6.36 — D97 hosted Direct hierarchy and retained booking state presentation. */
.ost-fp-hosted-direct .ost-fp-front-header {
    display: block;
    margin-bottom: 24px;
}
.ost-fp-hosted-direct .ost-fp-front-header h2 {
    margin: 0 0 12px;
}
.ost-fp-hosted-direct .ost-fp-front-header p {
    margin: 0;
    text-align: left;
}

/* v0.6.40 — Consumption workspace presentation refinements. */
body.ost-fp-page .ost-fp-consumption-record .ost-fp-field--textarea .ost-fp-floating-label {
    top: 16px;
}
body.ost-fp-page .ost-fp-consumption-record .ost-fp-field--textarea.--has-value .ost-fp-floating-label,
body.ost-fp-page .ost-fp-consumption-record .ost-fp-field--textarea:focus-within .ost-fp-floating-label {
    transform: translate(0,-2.05em);
}
body.ost-fp-page .ost-fp-consumption-history {
    margin-top: 32px;
}

/* v0.6.43 — Direct-code modal parity with the established Fourth Pleat modal treatment. */
body.ost-fp-page .ost-fp-direct-code-modal .ost-fp-confirm-dialog h2 {
    font-size: 20px !important;
    line-height: 1.4 !important;
    font-weight: 400 !important;
}
body.ost-fp-page .ost-fp-direct-code-modal .ost-fp-confirm-actions .ost-fp-button-secondary {
    background: #E8DDD1 !important;
    border-color: #E8DDD1 !important;
    color: #272727 !important;
}

/* v0.6.44 — R6 Direct deployment, partner presentation and D82 refinements. */
body.ost-fp-page .ost-fp-directory-detail-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    gap: 10px;
    margin-top: 18px;
}
body.ost-fp-page .ost-fp-directory-detail-actions > p,
body.ost-fp-page .ost-fp-directory-detail-actions .ost-fp-form-actions {
    margin: 0;
}
body.ost-fp-page .ost-fp-directory-direct-action .ost-fp-direct-launch-form {
    margin: 0;
}
body.ost-fp-page .ost-fp-directory-signin {
    margin-top: 12px;
}
body.ost-fp-page .ost-fp-direct-config-form {
    margin-top: 22px;
    padding-top: 20px;
    border-top: 1px solid rgba(39,39,39,.14);
}
body.ost-fp-page .ost-fp-direct-config-form .ost-fp-inline-disclosure-panel {
    padding-top: 14px;
}
body.ost-fp-page .ost-fp-direct-style-details {
    margin: 14px 0 18px;
}
body.ost-fp-page .ost-fp-guest-direct-benefits {
    margin: 0 0 26px;
    padding: 20px 0 24px;
    border-bottom: 1px solid rgba(39,39,39,.14);
}
body.ost-fp-page .ost-fp-guest-direct-benefits h3 {
    margin-top: 0;
}
body.ost-fp-page .ost-fp-partner-benefit-form label.ost-fp-checkbox,
body.ost-fp-page .ost-fp-partner-benefits label.ost-fp-checkbox {
    margin-bottom: 10px;
}
@media (max-width: 640px) {
    body.ost-fp-page .ost-fp-directory-detail-actions {
        flex-direction: row;
        align-items: center;
        justify-content: flex-start;
    }
}

/* v0.6.45 — R6 D151-D153 Directory alignment/link treatment and Direct advisory state. */
body.ost-fp-page .ost-fp-directory-benefit-list li {
    display: flex;
    align-items: baseline;
    gap: 8px;
    padding-left: 0 !important;
}
body.ost-fp-page .ost-fp-directory-benefit-list li::before {
    content: none !important;
}
body.ost-fp-page .ost-fp-directory-access {
    display: flex;
    align-items: baseline;
    gap: 8px;
}
body.ost-fp-page .ost-fp-directory-toggle {
    display: inline;
    appearance: auto;
    border: 0;
    background: transparent;
    padding: 0;
    margin: 0;
    font: inherit;
    font-size: 16px;
    font-weight: 300;
    line-height: inherit;
    text-align: left;
    cursor: pointer;
    color: inherit;
    text-decoration-thickness: 1px;
    text-underline-offset: 4px;
}
body.ost-fp-page .ost-fp-directory-toggle:hover,
body.ost-fp-page .ost-fp-directory-toggle:focus-visible {
    text-decoration-thickness: 1px;
}
body.ost-fp-page .ost-fp-notice.ost-fp-advisory {
    border-left-color: #C98257;
    background: #F4E7DC;
}


/* v0.6.46 — R6 D155 Directory action order and vertical alignment. */
body.ost-fp-page .ost-fp-directory-detail-actions {
    align-items: center;
}
body.ost-fp-page .ost-fp-directory-direct-action .ost-fp-direct-launch-form .ost-fp-button {
    margin-top: 0 !important;
}

/* v0.6.47 — R6 Direct/Directory presentation consolidation. */
body.ost-fp-page .ost-fp-directory {
    --ost-fp-scroll-offset: 110;
}
body.ost-fp-page .ost-fp-inline-status {
    margin: 18px 0 0;
    font-weight: 300;
}
body.ost-fp-page .ost-fp-inline-status .ost-fp-status-label {
    font-weight: 400;
}
body.ost-fp-page .ost-fp-inline-status .ost-fp-status-value {
    font-weight: 300;
}
body.ost-fp-page .ost-fp-directory-detail-actions {
    display: grid;
    grid-template-columns: max-content max-content;
    align-items: start;
    justify-content: start;
    column-gap: 12px;
    row-gap: 0;
    margin-top: 22px;
}
body.ost-fp-page .ost-fp-directory-detail-action {
    grid-column: 1;
    grid-row: 1;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-directory-direct-action,
body.ost-fp-page .ost-fp-directory-direct-action .ost-fp-direct-launch-form {
    display: contents;
}
body.ost-fp-page .ost-fp-directory-direct-action .ost-fp-form-actions {
    grid-column: 2;
    grid-row: 1;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-directory-detail-actions .ost-fp-compact-action,
body.ost-fp-page .ost-fp-directory-detail-actions .ost-fp-direct-submit,
body.ost-fp-page .ost-fp-directory-detail-actions [data-ost-fp-direct-submit] {
    min-height: 36px !important;
    height: 36px !important;
    padding: 0 14px !important;
    margin: 0 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
}
body.ost-fp-page .ost-fp-directory-direct-action .ost-fp-direct-email-fields {
    grid-column: 1 / -1;
    grid-row: 2;
    width: min(560px, 100%);
    margin: 18px 0 0 !important;
    transition: height 520ms cubic-bezier(.22,.61,.36,1), opacity 360ms ease;
    will-change: height, opacity;
}
body.ost-fp-page .ost-fp-directory-direct-action .ost-fp-direct-email-fields .ost-fp-field {
    width: 100%;
}
body.ost-fp-page .ost-fp-directory-direct-action .ost-fp-direct-error {
    grid-column: 1 / -1;
    grid-row: 3;
    width: min(560px, 100%);
    margin-top: 14px;
}
body.ost-fp-page .ost-fp-directory-signin {
    margin-top: 24px;
}
@media (prefers-reduced-motion: reduce) {
    body.ost-fp-page .ost-fp-directory-direct-action .ost-fp-direct-email-fields {
        transition: none !important;
    }
}
@media (max-width: 640px) {
    body.ost-fp-page .ost-fp-directory-detail-actions {
        grid-template-columns: max-content max-content;
        column-gap: 10px;
    }
    body.ost-fp-page .ost-fp-directory-direct-action .ost-fp-direct-email-fields,
    body.ost-fp-page .ost-fp-directory-direct-action .ost-fp-direct-error {
        width: 100%;
    }
}

/* v0.6.48 — R6 final correction batch: concise guest pathways and shared record/list rhythm. */
body.ost-fp-page .ost-fp-benefit-record-list {
    margin: 14px 0 24px;
    border-top: 1px solid rgba(39,39,39,.14);
}
body.ost-fp-page .ost-fp-benefit-record {
    padding: 14px 0;
    border-bottom: 1px solid rgba(39,39,39,.14);
}
body.ost-fp-page .ost-fp-benefit-record-title,
body.ost-fp-page .ost-fp-benefit-record-meta,
body.ost-fp-page .ost-fp-benefit-record-status,
body.ost-fp-page .ost-fp-benefit-record-action {
    margin: 0;
}
body.ost-fp-page .ost-fp-benefit-record-meta {
    margin-top: 4px;
    opacity: .72;
}
body.ost-fp-page .ost-fp-benefit-record-status {
    margin-top: 6px;
}
body.ost-fp-page .ost-fp-benefit-record-action {
    margin-top: 7px;
}
body.ost-fp-page .ost-fp-directory-check-list {
    display: grid;
    gap: 12px;
    margin: 14px 0 0;
}
body.ost-fp-page .ost-fp-directory-check-row {
    display: flex;
    align-items: baseline;
    gap: 8px;
    margin: 0;
    padding: 0;
}
body.ost-fp-page .ost-fp-directory-benefit-summary .ost-fp-directory-check-list {
    margin-top: 12px;
}
body.ost-fp-page .ost-fp-directory-access {
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-directory-detail-panel > .ost-fp-directory-signin {
    display: block;
    clear: both;
    margin: 0 !important;
    padding-top: 18px;
}
body.ost-fp-page .ost-fp-directory-direct-action .ost-fp-direct-email-fields .ost-fp-form-actions {
    margin-top: 14px !important;
}
body.ost-fp-page .ost-fp-directory-direct-action .ost-fp-direct-opened-state {
    grid-column: 2;
    grid-row: 1 / span 3;
    margin: 0;
    min-width: min(420px, 100%);
}
body.ost-fp-page .ost-fp-guest-path-gateway,
body.ost-fp-page .ost-fp-stay-benefits,
body.ost-fp-page .ost-fp-fourth-pleat-entry,
body.ost-fp-page .ost-fp-guest-fourth-pleat-intro {
    max-width: 680px;
}
body.ost-fp-page .ost-fp-guest-path-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    align-items: center;
    margin-top: 18px;
}
body.ost-fp-page .ost-fp-guest-path-actions > * {
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-guest-path-gateway .ost-fp-guest-gateway-primary {
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-guest-path-gateway .ost-fp-guest-gateway-secondary {
    margin: 26px 0 0 !important;
}
body.ost-fp-page .ost-fp-guest-path-gateway .ost-fp-guest-path-actions-secondary {
    margin-top: 14px !important;
}
body.ost-fp-page .ost-fp-stay-benefit-list {
    display: grid;
    gap: 10px;
    margin: 16px 0 20px;
}
body.ost-fp-page .ost-fp-stay-benefit-row {
    display: flex;
    align-items: baseline;
    gap: 8px;
}
body.ost-fp-page .ost-fp-stay-benefits .ost-fp-form {
    max-width: 650px;
}
body.ost-fp-page .ost-fp-stay-benefits .ost-fp-field {
    width: 100%;
}
@media (max-width: 640px) {
    body.ost-fp-page .ost-fp-directory-direct-action .ost-fp-direct-opened-state {
        grid-column: 1 / -1;
        grid-row: 2;
        margin-top: 14px;
        min-width: 0;
    }
    body.ost-fp-page .ost-fp-guest-path-actions {
        align-items: stretch;
        flex-direction: column;
    }
}

/* v0.6.49 — R6 Directory acceptance corrections: resume scroll, list parity and unified actions. */
body.ost-fp-page .ost-fp-directory-check-row,
body.ost-fp-page .ost-fp-directory-access {
    font-size: inherit !important;
    line-height: inherit !important;
}
body.ost-fp-page .ost-fp-directory-check-row .ost-fp-checkmark,
body.ost-fp-page .ost-fp-directory-access .ost-fp-checkmark {
    font-size: 1em !important;
    line-height: 1 !important;
}
body.ost-fp-page .ost-fp-directory-connected.ost-fp-inline-status {
    margin-top: 24px !important;
}
body.ost-fp-page .ost-fp-directory-detail-actions {
    align-items: start !important;
}
body.ost-fp-page .ost-fp-directory-detail-actions .ost-fp-compact-action,
body.ost-fp-page .ost-fp-directory-detail-actions .ost-fp-direct-launch-form .ost-fp-button,
body.ost-fp-page .ost-fp-directory-detail-actions .ost-fp-direct-continue-actions .ost-fp-button,
body.ost-fp-page .ost-fp-directory-detail-actions [data-ost-fp-direct-submit] {
    margin: 0 !important;
    white-space: nowrap;
}
body.ost-fp-page .ost-fp-directory-detail-actions [data-ost-fp-direct-reveal][hidden] {
    display: none !important;
}
body.ost-fp-page .ost-fp-directory-direct-action .ost-fp-direct-email-fields {
    margin-top: 18px !important;
}
body.ost-fp-page .ost-fp-directory-direct-action .ost-fp-direct-continue-actions {
    margin-top: 14px !important;
}
/* v0.6.50 — R6 D178: one shared front-end action-button geometry.
   Workflow-resume controls and dense table actions intentionally keep their compact variants. */
body.ost-fp-page .button.ost-fp-button:not(.ost-fp-nav-continuation):not(.ost-fp-table-action),
body.ost-fp-page .button.ost-fp-button-secondary:not(.ost-fp-nav-continuation):not(.ost-fp-table-action) {
    width: auto !important;
    min-width: 0 !important;
    max-width: none !important;
    min-height: 36px !important;
    height: 36px !important;
    padding: 0 14px !important;
    box-sizing: border-box !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    font-family: inherit !important;
    font-size: 14px !important;
    font-weight: 400 !important;
    line-height: 1 !important;
    letter-spacing: 0 !important;
    text-transform: uppercase !important;
    cursor: pointer !important;
    vertical-align: middle !important;
}


/* v0.6.51 — R6 D180/D182/D184/D185: reversible Partner Benefits and selector-driven Touchpoints. */
body.ost-fp-page [data-ost-fp-direct-reveal][hidden] {
    display: none !important;
}
body.ost-fp-page .ost-fp-benefit-record-list {
    border-top: 0 !important;
}
body.ost-fp-page .ost-fp-benefit-record-list .ost-fp-benefit-record:first-child {
    padding-top: 0;
}
body.ost-fp-page .ost-fp-benefit-record-actions {
    display: flex;
    align-items: center;
    gap: 14px;
    margin-top: 8px;
}
body.ost-fp-page .ost-fp-inline-form {
    display: inline;
    margin: 0;
}
body.ost-fp-page .ost-fp-link-button {
    border: 0;
    background: transparent;
    padding: 0;
    margin: 0;
    font: inherit;
    cursor: pointer;
}
body.ost-fp-page .ost-fp-benefit-history {
    margin: 6px 0 24px;
}
body.ost-fp-page .ost-fp-benefit-record-list--history {
    margin-bottom: 0;
}
body.ost-fp-page .ost-fp-touchpoint-selectors {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 16px;
    align-items: end;
    margin: 20px 0 24px;
    max-width: 1120px;
}
body.ost-fp-page .ost-fp-touchpoint-selectors .ost-fp-field {
    margin: 0;
}
body.ost-fp-page .ost-fp-touchpoint-output {
    max-width: 1120px;
}
body.ost-fp-page .ost-fp-touchpoint-output .ost-fp-touchpoint-card {
    width: 100%;
}
body.ost-fp-page .ost-fp-touchpoint-loading {
    margin: -8px 0 16px;
}
body.ost-fp-page .ost-fp-partner-touchpoints.is-loading .ost-fp-touchpoint-output {
    opacity: .55;
    pointer-events: none;
}
@media (max-width: 760px) {
    body.ost-fp-page .ost-fp-touchpoint-selectors { grid-template-columns: 1fr; }
}


/* v0.6.52 — R6 D180/D186/D187/F188: benefit management table, compact selectors, AJAX control reinitialisation. */
body.ost-fp-page [data-ost-fp-direct-reveal-wrap][hidden] {
    display: none !important;
}
body.ost-fp-page .ost-fp-benefit-table-wrap {
    width: 100%;
    overflow-x: auto;
    margin: 0 0 22px;
}
body.ost-fp-page .ost-fp-benefit-table {
    width: 100%;
    border-collapse: collapse;
    table-layout: auto;
}
body.ost-fp-page .ost-fp-benefit-table th,
body.ost-fp-page .ost-fp-benefit-table td {
    padding: 12px 14px;
    border-bottom: 1px solid var(--ost-fp-line, #ded6cc);
    text-align: left;
    vertical-align: top;
    line-height: 1.45;
}
body.ost-fp-page .ost-fp-benefit-table th {
    font-weight: 600;
    white-space: nowrap;
}
body.ost-fp-page .ost-fp-benefit-table td:first-child {
    min-width: 190px;
}
body.ost-fp-page .ost-fp-benefit-table-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    align-items: center;
    white-space: nowrap;
}
body.ost-fp-page .ost-fp-benefit-editor {
    margin: 6px 0 0;
}
body.ost-fp-page .ost-fp-benefit-editor > summary.button {
    list-style: none;
    cursor: pointer;
    width: auto !important;
}
body.ost-fp-page .ost-fp-benefit-editor > summary.button::-webkit-details-marker {
    display: none;
}
body.ost-fp-page .ost-fp-benefit-editor > .ost-fp-inline-disclosure-panel {
    margin-top: 18px;
}
body.ost-fp-page .ost-fp-touchpoint-selectors {
    display: flex !important;
    flex-wrap: wrap;
    justify-content: flex-start;
    align-items: flex-end;
    gap: 16px;
    max-width: none;
    margin: 20px 0 24px;
}
body.ost-fp-page .ost-fp-touchpoint-selectors .ost-fp-touchpoint-selector {
    flex: 0 1 auto;
    width: auto;
    max-width: 100%;
}
body.ost-fp-page .ost-fp-touchpoint-selector--location {
    flex-basis: 350px;
    width: 350px;
}
body.ost-fp-page .ost-fp-touchpoint-selector--type {
    flex-basis: 210px;
    width: 210px;
}
body.ost-fp-page .ost-fp-touchpoint-selector--use {
    flex-basis: 260px;
    width: 260px;
}
body.ost-fp-page .ost-fp-touchpoint-selectors select {
    width: 100%;
}
@media (max-width: 760px) {
    body.ost-fp-page .ost-fp-touchpoint-selectors {
        display: grid !important;
        grid-template-columns: 1fr;
        gap: 12px;
    }
    body.ost-fp-page .ost-fp-touchpoint-selector--location,
    body.ost-fp-page .ost-fp-touchpoint-selector--type,
    body.ost-fp-page .ost-fp-touchpoint-selector--use {
        width: 100%;
        max-width: none;
        flex-basis: auto;
    }
    body.ost-fp-page .ost-fp-benefit-table,
    body.ost-fp-page .ost-fp-benefit-table thead,
    body.ost-fp-page .ost-fp-benefit-table tbody,
    body.ost-fp-page .ost-fp-benefit-table tr,
    body.ost-fp-page .ost-fp-benefit-table th,
    body.ost-fp-page .ost-fp-benefit-table td {
        display: block;
        width: 100%;
    }
    body.ost-fp-page .ost-fp-benefit-table thead {
        display: none;
    }
    body.ost-fp-page .ost-fp-benefit-table tr {
        padding: 12px 0;
        border-bottom: 1px solid var(--ost-fp-line, #ded6cc);
    }
    body.ost-fp-page .ost-fp-benefit-table td {
        border: 0;
        padding: 5px 0;
        min-width: 0 !important;
    }
    body.ost-fp-page .ost-fp-benefit-table td::before {
        content: attr(data-label) ': ';
        font-weight: 600;
    }
}

/* v0.6.53 — R6 restrained Direct presentation and nested accordion resizing. */
body.ost-fp-page .ost-fp-touchpoint-selector--type {
    flex-basis: 230px;
    width: 230px;
}
body.ost-fp-page .ost-fp-touchpoint-selector--use {
    flex-basis: 300px;
    width: 300px;
}
body.ost-fp-page .ost-fp-direct-config-grid,
body.ost-fp-page .ost-fp-direct-style-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 16px;
    align-items: end;
    margin: 18px 0;
}
body.ost-fp-page .ost-fp-direct-config-grid > .ost-fp-field,
body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-field {
    margin: 0;
    min-width: 0;
}
body.ost-fp-page .ost-fp-direct-config-grid__wide {
    grid-column: span 2;
}
body.ost-fp-page .ost-fp-direct-style-details[hidden],
body.ost-fp-page [data-ost-fp-preset-row][hidden],
body.ost-fp-page [data-ost-fp-watermark-opacity-row][hidden] {
    display: none !important;
}
body.ost-fp-page .ost-fp-direct-watermark-control {
    align-self: center;
    padding-top: 8px;
}
body.ost-fp-page .ost-fp-benefit-history > .ost-fp-inline-disclosure-panel {
    margin-top: 18px;
}
body.ost-fp-page .ost-fp-benefit-editor > .ost-fp-inline-disclosure-panel {
    margin-top: 18px;
}
@media (max-width: 900px) {
    body.ost-fp-page .ost-fp-direct-config-grid,
    body.ost-fp-page .ost-fp-direct-style-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}
@media (max-width: 620px) {
    body.ost-fp-page .ost-fp-direct-config-grid,
    body.ost-fp-page .ost-fp-direct-style-grid {
        grid-template-columns: 1fr;
    }
    body.ost-fp-page .ost-fp-direct-config-grid__wide { grid-column: auto; }
}


/* v0.6.54 — comprehensive Fourth Pleat UI consistency audit.
   Canonical front-end geometry, labels, selectors, nested disclosures and field-adjacent actions. */
body.ost-fp-page {
    --ost-fp-control-font-size: 16px;
    --ost-fp-field-height: 44px;
    --ost-fp-button-height: 36px;
    --ost-fp-label-gap: 6px;
    --ost-fp-control-gap: 14px;
    --ost-fp-section-gap: 24px;
    --ost-fp-line: #E8DDD1;
    --ost-fp-border: #D8CEC3;
}

/* One control geometry for all ordinary Fourth Pleat fields. */
body.ost-fp-page .ost-fp-form input[type="text"],
body.ost-fp-page .ost-fp-form input[type="email"],
body.ost-fp-page .ost-fp-form input[type="password"],
body.ost-fp-page .ost-fp-form input[type="url"],
body.ost-fp-page .ost-fp-form input[type="date"],
body.ost-fp-page .ost-fp-form input[type="datetime-local"],
body.ost-fp-page .ost-fp-form input[type="time"],
body.ost-fp-page .ost-fp-form input[type="number"],
body.ost-fp-page .ost-fp-form select,
body.ost-fp-page .ost-fp-field input:not([type="checkbox"]):not([type="radio"]),
body.ost-fp-page .ost-fp-field select {
    height: var(--ost-fp-field-height) !important;
    min-height: var(--ost-fp-field-height) !important;
    font-size: var(--ost-fp-control-font-size) !important;
}
body.ost-fp-page .ost-fp-form textarea,
body.ost-fp-page .ost-fp-field textarea {
    font-size: var(--ost-fp-control-font-size) !important;
}
/* Select2-backed fields follow the same 44px control contract. */
body.ost-fp-page .ost-fp-form .select2-container .select2-selection--single {
    height: var(--ost-fp-field-height) !important;
    min-height: var(--ost-fp-field-height) !important;
    font-size: var(--ost-fp-control-font-size) !important;
}
body.ost-fp-page .ost-fp-form .select2-container .select2-selection--single .select2-selection__arrow {
    height: var(--ost-fp-field-height) !important;
}
body.ost-fp-page .ost-fp-form .select2-container .select2-selection--single .select2-selection__rendered {
    font-size: var(--ost-fp-control-font-size) !important;
}

/* Conventional labels: consistent distance above the field. Floating labels are excluded. */
body.ost-fp-page .ost-fp-field > label:not(.ost-fp-floating-label) {
    display: block;
    width: 100%;
    margin: 0;
    padding: 0;
    font-size: 16px;
    font-weight: 300;
    line-height: 1.35;
}
body.ost-fp-page .ost-fp-field > label:not(.ost-fp-floating-label) > input,
body.ost-fp-page .ost-fp-field > label:not(.ost-fp-floating-label) > select,
body.ost-fp-page .ost-fp-field > label:not(.ost-fp-floating-label) > textarea {
    display: block;
    width: 100% !important;
    margin-top: var(--ost-fp-label-gap) !important;
}
body.ost-fp-page .ost-fp-form p > label:not(.ost-fp-checkbox):not(.ost-fp-floating-label) {
    display: block;
    margin: 0 0 var(--ost-fp-label-gap);
    padding: 0;
    font-size: 16px;
    font-weight: 300;
    line-height: 1.35;
}
body.ost-fp-page .ost-fp-form p > label:not(.ost-fp-checkbox):not(.ost-fp-floating-label) + br {
    display: none;
}
body.ost-fp-page .ost-fp-form p > label:not(.ost-fp-checkbox):not(.ost-fp-floating-label) > br {
    display: none;
}
body.ost-fp-page .ost-fp-form p > label:not(.ost-fp-checkbox):not(.ost-fp-floating-label) > input,
body.ost-fp-page .ost-fp-form p > label:not(.ost-fp-checkbox):not(.ost-fp-floating-label) > select,
body.ost-fp-page .ost-fp-form p > label:not(.ost-fp-checkbox):not(.ost-fp-floating-label) > textarea {
    display: block;
    margin-top: var(--ost-fp-label-gap) !important;
}

/* Ordinary Fourth Pleat action-button geometry remains governed by the accepted v0.6.50 rule above.
   Typography is intentionally inherited from the established site button treatment. */
body.ost-fp-page .ost-fp-form-actions,
body.ost-fp-page .ost-fp-inline-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 12px;
}
body.ost-fp-page .ost-fp-form-actions > *,
body.ost-fp-page .ost-fp-inline-actions > * {
    margin-top: 0 !important;
    margin-bottom: 0 !important;
}

/* Multi-property location selector: label/field/button alignment is deterministic. */
body.ost-fp-page .ost-fp-partner-location-selector {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 12px;
    margin: 10px 0 24px;
}
body.ost-fp-page .ost-fp-partner-location-field {
    display: flex;
    flex-direction: column;
    gap: var(--ost-fp-label-gap);
    flex: 1 1 440px;
    width: min(100%, 650px);
    max-width: 650px;
}
body.ost-fp-page .ost-fp-partner-location-field label {
    margin: 0;
    padding: 0;
    line-height: 1.35;
}
body.ost-fp-page .ost-fp-partner-location-field select {
    width: 100%;
    max-width: none;
    height: var(--ost-fp-field-height);
    min-height: var(--ost-fp-field-height);
    margin: 0;
}
body.ost-fp-page .ost-fp-partner-location-selector > .ost-fp-button-secondary {
    align-self: flex-end;
    margin: 0 0 calc((var(--ost-fp-field-height) - var(--ost-fp-button-height)) / 2) !important;
}

/* Touchpoints: fixed selector dimensions; labels occupy the full control width so selects cannot shrink to label/content. */
body.ost-fp-page .ost-fp-touchpoint-selectors {
    display: flex !important;
    flex-wrap: wrap;
    justify-content: flex-start;
    align-items: flex-end;
    gap: 16px;
    margin: 20px 0 24px;
}
body.ost-fp-page .ost-fp-touchpoint-selector {
    flex-grow: 0 !important;
    flex-shrink: 0 !important;
    max-width: 100%;
}
body.ost-fp-page .ost-fp-touchpoint-selector--location {
    flex-basis: 390px !important;
    width: 390px !important;
}
body.ost-fp-page .ost-fp-touchpoint-selector--type {
    flex-basis: 250px !important;
    width: 250px !important;
}
body.ost-fp-page .ost-fp-touchpoint-selector--use {
    flex-basis: 250px !important;
    width: 250px !important;
}
body.ost-fp-page .ost-fp-touchpoint-selector > label {
    display: block !important;
    width: 100% !important;
    margin: 0 !important;
    line-height: 1.35 !important;
}
body.ost-fp-page .ost-fp-touchpoint-selector select {
    display: block !important;
    width: 100% !important;
    max-width: none !important;
    margin-top: var(--ost-fp-label-gap) !important;
}

/* Direct configuration: three columns at desktop, no one-off stacked field geometry. */
body.ost-fp-page .ost-fp-direct-config-grid,
body.ost-fp-page .ost-fp-direct-style-grid {
    grid-template-columns: repeat(3, minmax(220px, 1fr));
    gap: 16px 18px;
    align-items: start;
}
body.ost-fp-page .ost-fp-direct-config-grid > .ost-fp-field,
body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-field {
    width: 100%;
    max-width: none;
}

/* Nested benefit disclosures: the nested disclosure owns only its own content height and spacing. */
body.ost-fp-page .ost-fp-benefit-history {
    margin: 18px 0 18px !important;
}
body.ost-fp-page .ost-fp-benefit-history > .ost-fp-inline-disclosure-panel {
    margin-top: 0 !important;
}
body.ost-fp-page .ost-fp-benefit-history .ost-fp-benefit-table-wrap {
    margin: 14px 0 0 !important;
}
body.ost-fp-page .ost-fp-benefit-editor {
    margin: 18px 0 0 !important;
}
body.ost-fp-page .ost-fp-benefit-editor > .ost-fp-inline-disclosure-panel {
    margin-top: 0 !important;
}
body.ost-fp-page .ost-fp-benefit-editor > .ost-fp-inline-disclosure-panel > *:first-child {
    margin-top: 18px !important;
}

/* Tables: consistent readable headings and cell typography across front-end workspaces. */
body.ost-fp-page .ost-fp-box table:not(.form-table) th,
body.ost-fp-page .ost-fp-benefit-table th,
body.ost-fp-page .ost-fp-actions-table th {
    font-size: 16px !important;
    font-weight: 400 !important;
    line-height: 1.4 !important;
}
body.ost-fp-page .ost-fp-box table:not(.form-table) td,
body.ost-fp-page .ost-fp-benefit-table td,
body.ost-fp-page .ost-fp-actions-table td {
    font-size: 16px !important;
    font-weight: 300 !important;
    line-height: 1.45 !important;
}

@media (max-width: 900px) {
    body.ost-fp-page .ost-fp-touchpoint-selector--location,
    body.ost-fp-page .ost-fp-touchpoint-selector--type,
    body.ost-fp-page .ost-fp-touchpoint-selector--use {
        flex: 1 1 280px !important;
        width: auto !important;
    }
    body.ost-fp-page .ost-fp-direct-config-grid,
    body.ost-fp-page .ost-fp-direct-style-grid {
        grid-template-columns: repeat(2, minmax(220px, 1fr));
    }
}
@media (max-width: 620px) {
    body.ost-fp-page .ost-fp-touchpoint-selectors {
        display: grid !important;
        grid-template-columns: 1fr;
        gap: 12px;
    }
    body.ost-fp-page .ost-fp-touchpoint-selector--location,
    body.ost-fp-page .ost-fp-touchpoint-selector--type,
    body.ost-fp-page .ost-fp-touchpoint-selector--use {
        width: 100% !important;
        max-width: none !important;
        flex-basis: auto !important;
    }
    body.ost-fp-page .ost-fp-direct-config-grid,
    body.ost-fp-page .ost-fp-direct-style-grid {
        grid-template-columns: 1fr;
    }
}

/* Plugin-owned Fourth Pleat call-to-action embedded in WooCommerce confirmation pages. */
.ost-fp-order-invite .button.ost-fp-button {
    min-height: 36px !important;
    height: 36px !important;
    padding: 0 14px !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    box-sizing: border-box !important;
    line-height: 1 !important;
}

/* v0.6.54 final UI contract — source-audit refinements. */
body.ost-fp-page .ost-fp-form {
    --ost-fp-field-height: 44px;
    --ost-fp-field-gap: 14px;
}

/* Fourth Pleat-owned buttons outside dedicated Fourth Pleat pages (checkout/cart/order notices)
   use the same ordinary action geometry. */
.ost-fp-box .button.ost-fp-button:not(.ost-fp-nav-continuation):not(.ost-fp-table-action),
.ost-fp-box .button.ost-fp-button-secondary:not(.ost-fp-nav-continuation):not(.ost-fp-table-action) {
    min-height: 36px !important;
    height: 36px !important;
    padding: 0 14px !important;
    width: auto !important;
    min-width: 0 !important;
    max-width: none !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    box-sizing: border-box !important;
    font-family: inherit !important;
    font-size: 14px !important;
    font-weight: 400 !important;
    line-height: 1 !important;
    letter-spacing: 0 !important;
    text-transform: uppercase !important;
    cursor: pointer !important;
    vertical-align: middle !important;
}

/* Keep nested Partner Benefits actions visually related without a large dead zone. */
body.ost-fp-page .ost-fp-benefit-history {
    margin: 18px 0 4px !important;
}
body.ost-fp-page .ost-fp-benefit-editor {
    margin: 4px 0 0 !important;
}

/* Align standalone checkbox controls in Direct configuration to the control row of neighbouring labelled fields. */
body.ost-fp-page .ost-fp-direct-watermark-control {
    align-self: start !important;
    display: flex;
    align-items: center;
    min-height: var(--ost-fp-field-height);
    margin-top: calc(1.35em + 11px) !important;
    padding: 0 !important;
}
body.ost-fp-page .ost-fp-direct-watermark-control .ost-fp-checkbox {
    margin: 0 !important;
}

/* v0.6.56 — one front-end data-table heading standard.
   Column headings are intentionally heavier than data cells across Fourth Pleat workspaces.
   Row-label TH cells outside THEAD retain their existing treatment. */
body.ost-fp-page .ost-fp-box table:not(.form-table) thead th,
body.ost-fp-page .ost-fp-benefit-table thead th,
body.ost-fp-page .ost-fp-actions-table thead th,
body.ost-fp-page .ost-fp-report-table thead th,
body.ost-fp-page .ost-fp-history thead th {
    font-weight: 500 !important;
}
body.ost-fp-page .ost-fp-actions-table thead th .ost-fp-table-sort,
body.ost-fp-page .ost-fp-box table:not(.form-table) thead th a {
    font-weight: inherit !important;
}

/* v0.6.58 — Fourth Pleat Direct configuration consistency.
   Legacy Direct configuration consistency retained for current presentation disclosures.
   Website-matching-only controls are selectively disclosed. */
body.ost-fp-page [data-ost-fp-match-only][hidden] {
    display: none !important;
}

/* v0.6.62 — simplified Direct website architecture: two independent surfaces and multiple booking controls. */
body.ost-fp-page .ost-fp-direct-surface {
    margin: 14px 0 !important;
}
body.ost-fp-page .ost-fp-direct-surface > .ost-fp-inline-disclosure-panel {
    margin-top: 0 !important;
}
body.ost-fp-page .ost-fp-direct-surface > .ost-fp-inline-disclosure-panel > *:first-child {
    margin-top: 18px !important;
}
body.ost-fp-page .ost-fp-direct-config-grid--existing {
    grid-template-columns: repeat(2, minmax(220px, 1fr));
    max-width: 940px;
}
body.ost-fp-page .ost-fp-direct-controls {
    margin: 22px 0 18px;
}
body.ost-fp-page .ost-fp-direct-controls-heading {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 16px;
    margin: 0 0 6px;
}
body.ost-fp-page .ost-fp-direct-controls-heading h4 {
    margin: 0;
    font-size: 17px;
    font-weight: 400;
    line-height: 1.35;
}
body.ost-fp-page .ost-fp-direct-add-control,
body.ost-fp-page .ost-fp-direct-remove-control {
    border: 0;
    background: transparent;
    padding: 0;
    cursor: pointer;
    font: inherit;
}
body.ost-fp-page .ost-fp-direct-control-list {
    display: grid;
    gap: 14px;
    margin-top: 14px;
}
body.ost-fp-page .ost-fp-direct-control-row {
    display: grid;
    grid-template-columns: minmax(180px, .85fr) minmax(220px, 1.05fr) minmax(260px, 1.35fr) auto auto;
    gap: 12px 14px;
    align-items: end;
    padding: 16px;
    border: 1px solid var(--ost-fp-border, #ddd5cc);
}
body.ost-fp-page .ost-fp-direct-control-row .ost-fp-field {
    margin: 0 !important;
    width: 100%;
    max-width: none;
}
body.ost-fp-page .ost-fp-direct-control-status {
    min-height: 44px;
    display: flex;
    align-items: center;
    padding-bottom: 1px;
}
body.ost-fp-page .ost-fp-direct-control-status .ost-fp-checkbox {
    margin: 0 !important;
    white-space: nowrap;
}
body.ost-fp-page .ost-fp-direct-remove-control {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
    align-self: end;
}
body.ost-fp-page .ost-fp-direct-install-details,
body.ost-fp-page .ost-fp-direct-style-details {
    margin-top: 10px !important;
}
body.ost-fp-page .ost-fp-direct-install-details ol {
    margin-top: 14px;
}
@media (max-width: 1100px) {
    body.ost-fp-page .ost-fp-direct-control-row {
        grid-template-columns: repeat(2, minmax(220px, 1fr));
    }
    body.ost-fp-page .ost-fp-direct-control-status,
    body.ost-fp-page .ost-fp-direct-remove-control {
        align-self: center;
    }
}
@media (max-width: 620px) {
    body.ost-fp-page .ost-fp-direct-config-grid--existing,
    body.ost-fp-page .ost-fp-direct-control-row {
        grid-template-columns: 1fr;
    }
    body.ost-fp-page .ost-fp-direct-controls-heading {
        align-items: flex-start;
        flex-direction: column;
        gap: 8px;
    }
}

/* v0.6.63 — Partner Integrations workspace and global front-end hierarchy/animation corrections. */

/* Supporting information remains fully legible. Hierarchy is created with size and spacing,
   not reduced opacity. Disabled/unavailable controls retain their own state styling. */
body.ost-fp-page .ost-fp-muted {
    opacity: 1 !important;
    color: inherit !important;
    font-size: 14px !important;
    line-height: 1.55 !important;
}

/* Integrations is a website-configuration workspace, separate from Guest Touchpoints. */
body.ost-fp-page .ost-fp-partner-integrations .ost-fp-front-header {
    margin-bottom: 18px;
}
body.ost-fp-page .ost-fp-integration-location-wrap {
    margin: 0 0 22px;
}
body.ost-fp-page .ost-fp-integration-location {
    width: 390px;
    max-width: 100%;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-integration-card {
    width: 100%;
    box-sizing: border-box;
    border: 1px solid #E8DDD1;
    padding: 20px;
}
body.ost-fp-page .ost-fp-integration-card > h3 {
    margin-top: 0;
    font-size: 17px;
    font-weight: 400;
    line-height: 1.4;
}

/* Direct booking-control action links use natural case with a text underline that remains
   attached to the label rather than the height of the action cell. */
body.ost-fp-page .ost-fp-direct-add-control,
body.ost-fp-page .ost-fp-direct-remove-control {
    min-height: 0 !important;
    height: auto !important;
    line-height: 1.25 !important;
    border: 0 !important;
    border-bottom: 0 !important;
    text-decoration-line: underline !important;
    text-decoration-thickness: 1px !important;
    text-underline-offset: 3px !important;
}
body.ost-fp-page .ost-fp-direct-remove-control {
    align-self: center !important;
}

/* Keep the Active control on the same 44px control line as the adjacent selector field. */
body.ost-fp-page .ost-fp-direct-control-status {
    min-height: 44px !important;
    height: 44px !important;
    padding: 0 !important;
    display: flex !important;
    align-items: center !important;
    align-self: end !important;
}
body.ost-fp-page .ost-fp-direct-control-status .ost-fp-checkbox {
    min-height: 44px !important;
    margin: 0 !important;
    display: flex !important;
    align-items: center !important;
}
body.ost-fp-page .ost-fp-direct-control-status .ost-fp-checkbox-box {
    margin-top: 0 !important;
}

/* Installation disclosure and its copy action are separate visual steps. */
body.ost-fp-page .ost-fp-direct-install-details + .ost-fp-inline-actions {
    margin-top: 22px !important;
}

/* Measured animation wrappers establish their own block formatting context so child margins
   are part of the measured height. This prevents the final height:auto settlement jump. */
body.ost-fp-page .ost-fp-inline-disclosure-inner,
body.ost-fp-page .ost-fp-accordion-panel-inner {
    display: flow-root;
}
body.ost-fp-page .ost-fp-inline-disclosure-panel > .ost-fp-inline-disclosure-inner {
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-inline-disclosure-inner > :first-child {
    margin-top: 12px;
}
body.ost-fp-page .ost-fp-direct-surface > .ost-fp-inline-disclosure-panel > .ost-fp-inline-disclosure-inner > :first-child {
    margin-top: 18px !important;
}
body.ost-fp-page .ost-fp-benefit-editor > .ost-fp-inline-disclosure-panel > .ost-fp-inline-disclosure-inner > :first-child,
body.ost-fp-page .ost-fp-benefit-history > .ost-fp-inline-disclosure-panel > .ost-fp-inline-disclosure-inner > :first-child {
    margin-top: 12px !important;
}

@media (max-width: 1100px) {
    body.ost-fp-page .ost-fp-direct-control-status {
        align-self: end !important;
    }
    body.ost-fp-page .ost-fp-direct-remove-control {
        align-self: center !important;
    }
}
@media (max-width: 620px) {
    body.ost-fp-page .ost-fp-direct-control-status {
        width: 100%;
        align-self: start !important;
    }
    body.ost-fp-page .ost-fp-direct-remove-control {
        justify-self: start;
        align-self: start !important;
        margin-top: 2px;
    }
}

/* v0.6.64 — shared AJAX location workspace behaviour. */
body.ost-fp-page .ost-fp-location-selectors {
    margin: 20px 0 24px !important;
}
body.ost-fp-page .ost-fp-partner-actions.is-loading .ost-fp-actions-output,
body.ost-fp-page .ost-fp-partner-integrations.is-loading .ost-fp-integrations-output,
body.ost-fp-page .ost-fp-benefits-workspace.is-loading [data-ost-fp-benefits-output] {
    opacity: .55;
    pointer-events: none;
}
body.ost-fp-page .ost-fp-benefits-workspace > .ost-fp-touchpoint-loading {
    margin: 0 0 16px;
}

/* v0.6.65 — unified partner AJAX location controls and benefit feedback. */
body.ost-fp-page .ost-fp-notice.ost-fp-error {
    border-left-color: #A66F68;
    background: #F3E5E2;
}
body.ost-fp-page .ost-fp-benefits-error {
    margin: 0 0 16px;
}
body.ost-fp-page .ost-fp-partner-portal.is-loading .ost-fp-cards,
body.ost-fp-page .ost-fp-partner-portal.is-loading .ost-fp-actions-summary,
body.ost-fp-page .ost-fp-partner-portal.is-loading .ost-fp-accordion,
body.ost-fp-page .ost-fp-partner-consumption.is-loading .ost-fp-consumption-summary,
body.ost-fp-page .ost-fp-partner-consumption.is-loading .ost-fp-consumption-record,
body.ost-fp-page .ost-fp-partner-consumption.is-loading .ost-fp-consumption-history {
    opacity: .55;
    pointer-events: none;
}
body.ost-fp-page .ost-fp-partner-portal > .ost-fp-touchpoint-loading,
body.ost-fp-page .ost-fp-partner-consumption > .ost-fp-touchpoint-loading {
    margin: 0 0 16px;
}
\n\n/* v0.6.66 — Partner Benefits AJAX and notice-state correction. */
.ost-fp-notice[hidden] {
    display: none !important;
}
body.ost-fp-page .ost-fp-notice.ost-fp-error {
    border-left-color: #B84A42 !important;
    background: #F3ECE4 !important;
    color: #B84A42 !important;
}
body.ost-fp-page .ost-fp-notice.ost-fp-advisory,
body.ost-fp-page .ost-fp-notice.ost-fp-info {
    border-left-color: #B86D36 !important;
    background: #F3ECE4 !important;
    color: #B86D36 !important;
}
body.ost-fp-page .ost-fp-notice.ost-fp-error p,
body.ost-fp-page .ost-fp-notice.ost-fp-advisory p,
body.ost-fp-page .ost-fp-notice.ost-fp-info p {
    color: inherit !important;
}


/* v0.8.5 — shared AJAX mutation-error visibility state.
 * Mutation error notices are opt-in visible only across Fourth Pleat workspaces. */
.ost-fp-mutation-error {
    display: none !important;
}
.ost-fp-mutation-error.is-visible {
    display: flex !important;
}


/* v0.6.68 — shared disclosure motion + Integrations booking-control alignment. */

/*
 * All animated disclosure containers keep their own box completely neutral.
 * Spacing belongs inside the measured inner wrapper. This prevents non-animated
 * margins/padding from appearing instantly at the start/end of a height transition.
 */
body.ost-fp-page .ost-fp-inline-disclosure-panel,
body.ost-fp-page .ost-fp-accordion-panel {
    box-sizing: border-box !important;
}
body.ost-fp-page .ost-fp-inline-disclosure-panel {
    margin: 0 !important;
    padding: 0 !important;
}
body.ost-fp-page .ost-fp-inline-disclosure-panel > .ost-fp-inline-disclosure-inner {
    box-sizing: border-box !important;
    display: flow-root !important;
    margin: 0 !important;
    padding: 12px 0 0 !important;
}
body.ost-fp-page .ost-fp-direct-surface > .ost-fp-inline-disclosure-panel > .ost-fp-inline-disclosure-inner {
    padding-top: 18px !important;
}
body.ost-fp-page .ost-fp-benefit-editor > .ost-fp-inline-disclosure-panel > .ost-fp-inline-disclosure-inner,
body.ost-fp-page .ost-fp-benefit-history > .ost-fp-inline-disclosure-panel > .ost-fp-inline-disclosure-inner {
    padding-top: 18px !important;
}
body.ost-fp-page .ost-fp-inline-disclosure-inner > :first-child,
body.ost-fp-page .ost-fp-direct-surface > .ost-fp-inline-disclosure-panel > .ost-fp-inline-disclosure-inner > :first-child,
body.ost-fp-page .ost-fp-benefit-editor > .ost-fp-inline-disclosure-panel > .ost-fp-inline-disclosure-inner > :first-child,
body.ost-fp-page .ost-fp-benefit-history > .ost-fp-inline-disclosure-panel > .ost-fp-inline-disclosure-inner > :first-child {
    margin-top: 0 !important;
}

/*
 * Booking controls: the three labelled fields share the first grid line.
 * Active + Remove form one action group whose top offset exactly matches the
 * conventional 16px label line plus the established label-to-field gap.
 */
body.ost-fp-page .ost-fp-direct-control-row {
    grid-template-columns: minmax(180px, .85fr) minmax(220px, 1.05fr) minmax(260px, 1.35fr) auto !important;
    grid-template-areas: "name type selector actions";
    align-items: start !important;
}
body.ost-fp-page .ost-fp-direct-control-name { grid-area: name; }
body.ost-fp-page .ost-fp-direct-control-type { grid-area: type; }
body.ost-fp-page .ost-fp-direct-control-selector { grid-area: selector; }
body.ost-fp-page .ost-fp-direct-control-actions {
    grid-area: actions;
    display: inline-flex;
    align-items: center;
    justify-content: flex-start;
    gap: 18px;
    min-height: var(--ost-fp-field-height, 44px);
    margin-top: calc((16px * 1.35) + var(--ost-fp-label-gap, 6px));
    white-space: nowrap;
}
body.ost-fp-page .ost-fp-direct-control-status {
    width: auto !important;
    min-height: 0 !important;
    height: auto !important;
    padding: 0 !important;
    margin: 0 !important;
    display: flex !important;
    align-items: center !important;
    align-self: center !important;
}
body.ost-fp-page .ost-fp-direct-control-status .ost-fp-checkbox {
    min-height: 0 !important;
    height: auto !important;
    margin: 0 !important;
    display: flex !important;
    align-items: center !important;
}
body.ost-fp-page .ost-fp-direct-control-status .ost-fp-checkbox-box {
    margin-top: 0 !important;
}
body.ost-fp-page .ost-fp-direct-remove-control {
    margin: 0 !important;
    align-self: center !important;
}

@media (max-width: 1100px) {
    body.ost-fp-page .ost-fp-direct-control-row {
        grid-template-columns: repeat(2, minmax(220px, 1fr)) !important;
        grid-template-areas:
            "name type"
            "selector actions";
    }
    body.ost-fp-page .ost-fp-direct-control-actions {
        margin-top: calc((16px * 1.35) + var(--ost-fp-label-gap, 6px));
    }
}

@media (max-width: 620px) {
    body.ost-fp-page .ost-fp-direct-control-row {
        grid-template-columns: 1fr !important;
        grid-template-areas:
            "name"
            "type"
            "selector"
            "actions";
    }
    body.ost-fp-page .ost-fp-direct-control-actions {
        width: 100%;
        min-height: 0;
        margin-top: 2px;
        flex-wrap: wrap;
    }
}


/* v0.6.69 — Integrations booking-control final alignment and compact radius fields. */
body.ost-fp-page .ost-fp-direct-control-actions {
    height: var(--ost-fp-field-height, 44px) !important;
    min-height: var(--ost-fp-field-height, 44px) !important;
    align-items: center !important;
}
body.ost-fp-page .ost-fp-direct-control-status {
    height: var(--ost-fp-field-height, 44px) !important;
    min-height: var(--ost-fp-field-height, 44px) !important;
    display: inline-flex !important;
    align-items: center !important;
}
body.ost-fp-page .ost-fp-direct-control-status .ost-fp-checkbox {
    height: var(--ost-fp-field-height, 44px) !important;
    min-height: var(--ost-fp-field-height, 44px) !important;
    display: inline-flex !important;
    align-items: center !important;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-direct-control-status .ost-fp-checkbox-box {
    margin-top: 0 !important;
}
body.ost-fp-page .ost-fp-direct-remove-control {
    height: var(--ost-fp-field-height, 44px) !important;
    min-height: var(--ost-fp-field-height, 44px) !important;
    display: inline-flex !important;
    align-items: center !important;
}
body.ost-fp-page .ost-fp-direct-style-grid input[name="existing_corner_radius"],
body.ost-fp-page .ost-fp-direct-style-grid input[name="standalone_corner_radius"] {
    width: 120px !important;
    max-width: 120px !important;
}
@media (max-width: 620px) {
    body.ost-fp-page .ost-fp-direct-control-actions,
    body.ost-fp-page .ost-fp-direct-control-status,
    body.ost-fp-page .ost-fp-direct-control-status .ost-fp-checkbox,
    body.ost-fp-page .ost-fp-direct-remove-control {
        height: auto !important;
        min-height: 0 !important;
    }
}

/* v0.6.74 — persistent workspace polish, contained AJAX refresh regions, and Direct control regression fixes. */
body.ost-fp-page .ost-fp-table-refresh-region {
    width: 100%;
}
body.ost-fp-page .ost-fp-table-refresh-region > .ost-fp-touchpoint-loading {
    margin: 14px 0 12px !important;
}
body.ost-fp-page .ost-fp-table-refresh-region > .ost-fp-touchpoint-loading[hidden] {
    display: none !important;
}

/* Member Direct access: keep the label visually attached to its code. */
body.ost-fp-page .ost-fp-member-direct-item .ost-fp-member-direct-code-label {
    margin: 0 0 4px !important;
}
body.ost-fp-page .ost-fp-member-direct-item .ost-fp-direct-code-value {
    margin: 0 0 18px !important;
}

/* Integrations booking controls: align the control action line with the adjacent 44px field. */
body.ost-fp-page .ost-fp-form .ost-fp-direct-control-actions {
    margin-top: calc((16px * 1.45) + var(--ost-fp-label-gap, 6px)) !important;
    height: var(--ost-fp-field-height, 44px) !important;
    min-height: var(--ost-fp-field-height, 44px) !important;
    display: inline-flex !important;
    align-items: center !important;
}
body.ost-fp-page .ost-fp-form .ost-fp-direct-control-status,
body.ost-fp-page .ost-fp-form .ost-fp-direct-control-status label.ost-fp-checkbox {
    height: var(--ost-fp-field-height, 44px) !important;
    min-height: var(--ost-fp-field-height, 44px) !important;
    margin: 0 !important;
    padding: 0 !important;
    display: inline-flex !important;
    align-items: center !important;
}
body.ost-fp-page .ost-fp-form .ost-fp-direct-control-status label.ost-fp-checkbox .ost-fp-checkbox-box {
    margin: 0 10px 0 0 !important;
}

/* Corner radius is intentionally a compact numeric control, not a full grid-width field. */
body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-field input[type="number"][name="existing_corner_radius"],
body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-field input[type="number"][name="standalone_corner_radius"] {
    width: 120px !important;
    min-width: 120px !important;
    max-width: 120px !important;
    flex-basis: 120px !important;
}

@media (max-width: 620px) {
    body.ost-fp-page .ost-fp-form .ost-fp-direct-control-actions {
        margin-top: 2px !important;
        height: auto !important;
        min-height: 0 !important;
    }
    body.ost-fp-page .ost-fp-form .ost-fp-direct-control-status,
    body.ost-fp-page .ost-fp-form .ost-fp-direct-control-status label.ost-fp-checkbox {
        height: auto !important;
        min-height: 0 !important;
    }
}

/* v0.6.77 — global contained AJAX refresh treatment. */
body.ost-fp-page .ost-fp-ajax-loading {
    position: relative !important;
    pointer-events: none !important;
    cursor: progress;
}
body.ost-fp-page .ost-fp-ajax-loading > * {
    opacity: .42 !important;
    transition: opacity 120ms ease;
}
body.ost-fp-page .ost-fp-ajax-loading::after {
    content: "";
    position: absolute;
    z-index: 20;
    top: 50%;
    left: 50%;
    width: 28px;
    height: 28px;
    margin: -14px 0 0 -14px;
    border: 2px solid rgba(39, 39, 39, .22);
    border-top-color: #272727;
    border-radius: 50%;
    box-sizing: border-box;
    animation: ost-fp-ajax-spin .72s linear infinite;
    pointer-events: none;
}
@keyframes ost-fp-ajax-spin {
    to { transform: rotate(360deg); }
}
@media (prefers-reduced-motion: reduce) {
    body.ost-fp-page .ost-fp-ajax-loading::after {
        animation-duration: 1.4s;
    }
}

/* Normal refreshes no longer use a visible status line. Loader nodes are reserved for request errors. */
body.ost-fp-page [data-ost-fp-table-tabs-loading][hidden],
body.ost-fp-page [data-ost-fp-actions-loading][hidden],
body.ost-fp-page [data-ost-fp-integrations-loading][hidden],
body.ost-fp-page [data-ost-fp-touchpoint-loading][hidden],
body.ost-fp-page [data-ost-fp-portal-loading][hidden],
body.ost-fp-page [data-ost-fp-consumption-loading][hidden],
body.ost-fp-page [data-ost-fp-benefits-loading][hidden] {
    display: none !important;
}



/* v0.6.78 — Integrations action links use the site's native anchor.sleev-link presentation.
 * Fourth Pleat controls only row alignment; underline position/animation comes from the site class itself. */
body.ost-fp-page .ost-fp-direct-controls-heading > a.ost-fp-direct-add-control,
body.ost-fp-page .ost-fp-direct-control-actions > a.ost-fp-direct-remove-control {
    align-self: center !important;
    margin-top: 0 !important;
    margin-bottom: 0 !important;
}

/* v0.6.83 — Directory benefit hierarchy and Direct booking destination workspace. */
body.ost-fp-page .ost-fp-directory-detail-panel > p + .ost-fp-directory-benefit-summary {
    margin-top: 18px;
}
body.ost-fp-page .ost-fp-direct-destination-card {
    margin-bottom: 28px;
}
body.ost-fp-page .ost-fp-direct-destination-current {
    overflow-wrap: anywhere;
}

/* v0.6.86 — global workspace information architecture.
 * Fourth Pleat rule: when a workspace combines current state, pending state,
 * explanatory context, and an action form, present those concepts as distinct
 * contained blocks. Do not stack status/help lines as an unstructured text run.
 * Transient success/error notices remain notices; persistent state belongs in blocks. */
body.ost-fp-page .ost-fp-section-intro {
    max-width: 920px;
    margin: 0 0 18px !important;
}
body.ost-fp-page .ost-fp-workspace-stack {
    display: grid;
    gap: 14px;
    margin: 16px 0;
}
body.ost-fp-page .ost-fp-state-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px;
    margin: 16px 0;
}
body.ost-fp-page .ost-fp-state-grid--single {
    grid-template-columns: minmax(0, 1fr);
}
body.ost-fp-page .ost-fp-workspace-block {
    border: 1px solid rgba(0,0,0,.13);
    background: rgba(255,255,255,.34);
    padding: 18px 20px;
    margin: 16px 0;
    box-sizing: border-box;
    min-width: 0;
}
body.ost-fp-page .ost-fp-state-grid > .ost-fp-workspace-block,
body.ost-fp-page .ost-fp-workspace-stack > .ost-fp-workspace-block {
    margin: 0;
}
body.ost-fp-page .ost-fp-workspace-block > h4:first-child {
    margin: 0 0 14px !important;
    font-size: 18px;
    line-height: 1.3;
    font-weight: 400;
}
body.ost-fp-page .ost-fp-workspace-note {
    margin: 10px 0 0 !important;
    font-size: 14px;
    line-height: 1.5;
    opacity: 1 !important;
}
body.ost-fp-page .ost-fp-workspace-block--action > .ost-fp-workspace-note:first-of-type {
    margin-top: 0 !important;
}
body.ost-fp-page .ost-fp-workspace-block > .ost-fp-form {
    margin-top: 16px;
    margin-bottom: 0;
}
body.ost-fp-page .ost-fp-workspace-block > .ost-fp-workspace-note + .ost-fp-form,
body.ost-fp-page .ost-fp-workspace-block > .ost-fp-workspace-intro + .ost-fp-form {
    margin-top: 26px !important;
}
body.ost-fp-page .ost-fp-workspace-block > .ost-fp-form:last-child,
body.ost-fp-page .ost-fp-workspace-block > :last-child {
    margin-bottom: 0 !important;
}
body.ost-fp-page .ost-fp-state-list {
    margin: 0;
}
body.ost-fp-page .ost-fp-state-list > div {
    display: grid;
    grid-template-columns: minmax(110px, 150px) minmax(0, 1fr);
    gap: 12px 18px;
    padding: 10px 0;
    border-top: 1px solid rgba(0,0,0,.10);
}
body.ost-fp-page .ost-fp-state-list > div:first-child {
    padding-top: 0;
    border-top: 0;
}
body.ost-fp-page .ost-fp-state-list > div:last-child {
    padding-bottom: 0;
}
body.ost-fp-page .ost-fp-state-list dt,
body.ost-fp-page .ost-fp-state-list dd {
    margin: 0;
    line-height: 1.45;
}
body.ost-fp-page .ost-fp-state-list dt {
    font-size: 14px;
    font-weight: 500;
}
body.ost-fp-page .ost-fp-state-list dd {
    min-width: 0;
    overflow-wrap: anywhere;
}
body.ost-fp-page .ost-fp-direct-destination-card > .ost-fp-workspace-block--action {
    margin-top: 14px;
}
body.ost-fp-page .ost-fp-benefit-editor .ost-fp-workspace-block {
    margin-top: 12px;
}
body.ost-fp-page .ost-fp-account-controls > .ost-fp-workspace-block {
    margin-top: 0;
}
@media (max-width: 767px) {
    body.ost-fp-page .ost-fp-state-grid {
        grid-template-columns: minmax(0, 1fr);
    }
    body.ost-fp-page .ost-fp-state-list > div {
        grid-template-columns: minmax(0, 1fr);
        gap: 4px;
    }
    body.ost-fp-page .ost-fp-workspace-block {
        padding: 16px;
    }
}

/* v0.6.92 — shared Partner Portal preview framework. */
body.ost-fp-page .ost-fp-preview-block {
    margin: 22px 0;
    border: 1px solid var(--ost-fp-line, #E8DDD1);
    padding: 18px;
    box-sizing: border-box;
}
body.ost-fp-page .ost-fp-preview-heading {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 20px;
    margin: 0 0 14px;
}
body.ost-fp-page .ost-fp-preview-heading h4 {
    margin: 0 0 4px;
    font-size: 17px;
    font-weight: 400;
    line-height: 1.35;
}
body.ost-fp-page .ost-fp-preview-heading .ost-fp-workspace-note {
    margin: 0;
    max-width: 760px;
}
body.ost-fp-page .ost-fp-preview-state-field {
    width: 220px;
    min-width: 220px;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-preview-stage {
    position: relative;
    width: 100%;
    min-width: 0;
    box-sizing: border-box;
    border: 1px solid var(--ost-fp-border, #D8CEC3);
    background: #D8CEC3;
    padding: 22px;
    overflow: hidden;
}
body.ost-fp-page .ost-fp-direct-preview-stage {
    min-height: 300px;
}
body.ost-fp-page .ost-fp-direct-preview-stage iframe {
    display: block;
    width: 100%;
    height: 420px;
    min-height: 240px;
    border: 0;
    background: transparent;
}
body.ost-fp-page .ost-fp-preview-stage.ost-fp-preview-error::after {
    content: 'Preview unavailable';
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #D8CEC3;
    font-size: 14px;
}
body.ost-fp-page .ost-fp-preview-workflow {
    display: grid;
    gap: 18px;
}
body.ost-fp-page .ost-fp-preview-workflow > .ost-fp-workspace-block,
body.ost-fp-page .ost-fp-preview-workflow > .ost-fp-preview-block {
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-touchpoint-preview-stage {
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 360px;
}
body.ost-fp-page .ost-fp-touchpoint-artboard {
    box-sizing: border-box;
    width: min(100%, 420px);
    min-height: 300px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
    padding: 28px;
    border: 1px solid #D8CEC3;
    background: #FFFFFF;
}
body.ost-fp-page .ost-fp-touchpoint-preview-stage--digital .ost-fp-touchpoint-artboard {
    width: min(100%, 620px);
    min-height: 260px;
}
body.ost-fp-page .ost-fp-touchpoint-artboard-meta {
    width: 100%;
    display: flex;
    justify-content: space-between;
    gap: 18px;
    font-size: 12px;
    line-height: 1.4;
}

/* v0.7.43 — fixed Fourth Pleat attribution hierarchy in the Touchpoints fallback artboard. */
body.ost-fp-page .ost-fp-touchpoint-artboard-attribution {
    font-weight: 300;
}
body.ost-fp-page .ost-fp-touchpoint-artboard-attribution strong {
    font-weight: 400;
}
body.ost-fp-page .ost-fp-touchpoint-artboard .ost-fp-touchpoint-qr {
    width: 160px;
    min-height: 160px;
}
body.ost-fp-page .ost-fp-touchpoint-artboard .ost-fp-touchpoint-qr svg {
    width: 160px;
    height: 160px;
}
body.ost-fp-page .ost-fp-preview-distribution .ost-fp-inline-actions {
    margin-bottom: 10px;
}
@media (max-width: 700px) {
    body.ost-fp-page .ost-fp-preview-heading {
        align-items: stretch;
        flex-direction: column;
    }
    body.ost-fp-page .ost-fp-preview-state-field {
        width: 100%;
        min-width: 0;
    }
    body.ost-fp-page .ost-fp-preview-stage {
        padding: 14px;
    }
    body.ost-fp-page .ost-fp-touchpoint-artboard-meta {
        flex-direction: column;
        gap: 4px;
    }
}

/* v0.6.93 — compact Integrations surface tabs and preview acceptance corrections. */
body.ost-fp-page .ost-fp-direct-view-tabs {
    margin-top: 18px;
}
body.ost-fp-page .ost-fp-direct-view-panel[hidden] {
    display: none !important;
}
body.ost-fp-page .ost-fp-direct-view-panel {
    min-width: 0;
}
body.ost-fp-page .ost-fp-direct-view-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px;
    margin-top: 20px !important;
}
/* v0.6.94: preview refreshes now use the established global .ost-fp-ajax-loading fade + centred spinner treatment. */


/* v0.6.96 — member Care Guide uses the approved primary outline action treatment. */
body.ost-fp-page .button.ost-fp-button-primary-outline {
    appearance: none !important;
    -webkit-appearance: none !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    width: auto !important;
    min-width: 0 !important;
    min-height: 36px !important;
    height: 36px !important;
    padding: 0 14px !important;
    margin: 0 !important;
    box-sizing: border-box !important;
    background: transparent !important;
    background-color: transparent !important;
    color: #272727 !important;
    border: 1px solid #272727 !important;
    border-radius: 2px !important;
    box-shadow: none !important;
    font: inherit !important;
    font-size: 14px !important;
    font-weight: 400 !important;
    line-height: 1 !important;
    letter-spacing: 0 !important;
    text-transform: uppercase !important;
    cursor: pointer !important;
    text-decoration: none !important;
}
body.ost-fp-page .button.ost-fp-button-primary-outline:hover,
body.ost-fp-page .button.ost-fp-button-primary-outline:focus {
    background: transparent !important;
    background-color: transparent !important;
    color: #272727 !important;
    border-color: #272727 !important;
    opacity: .78;
}

/* v0.6.101 — R6 final presentation polish.
   Descriptor/supporting metadata uses the shared secondary-text hierarchy without reduced opacity. */
body.ost-fp-page .ost-fp-small,
.ost-fp-box .ost-fp-small {
    font-size: 14px !important;
    line-height: 1.45 !important;
    font-weight: 300 !important;
    opacity: 1 !important;
}

/* Align action/workspace table row content to the vertical centre of compact controls.
   Headers intentionally retain their existing alignment. */
body.ost-fp-page .ost-fp-actions-table tbody td {
    vertical-align: middle !important;
}

/* Ostavae Fourth Pleat Platform v0.7.2 — R7 controlled Touchpoint template editor, appearance, preview and distribution. */
.ost-fp-partner-touchpoints .ost-fp-r72-step {
    margin: 24px 0 0;
    padding-top: 22px;
    border-top: 1px solid rgba(39,39,39,.14);
}
.ost-fp-partner-touchpoints .ost-fp-r72-step:first-of-type {
    margin-top: 20px;
}
.ost-fp-partner-touchpoints .ost-fp-r72-step h4 {
    margin: 0 0 16px;
}
.ost-fp-partner-touchpoints .ost-fp-r72-field {
    display: flex;
    flex-direction: column;
    gap: 6px;
    width: min(100%, 620px);
    margin: 0 0 14px;
    font-size: 14px;
    font-weight: 400;
    opacity: 1;
}
.ost-fp-partner-touchpoints .ost-fp-r72-field select,
.ost-fp-partner-touchpoints .ost-fp-r72-field input[type="text"],
.ost-fp-partner-touchpoints .ost-fp-r72-field input[type="number"],
.ost-fp-partner-touchpoints .ost-fp-r72-field textarea {
    width: 100%;
    box-sizing: border-box;
    font: inherit;
}
.ost-fp-partner-touchpoints .ost-fp-r72-field select,
.ost-fp-partner-touchpoints .ost-fp-r72-field input[type="text"],
.ost-fp-partner-touchpoints .ost-fp-r72-field input[type="number"] {
    min-height: 44px;
    height: 44px;
}
.ost-fp-partner-touchpoints .ost-fp-r72-field textarea {
    min-height: 76px;
    resize: vertical;
}
.ost-fp-partner-touchpoints .ost-fp-r72-custom[hidden],
.ost-fp-partner-touchpoints [data-ost-fp-r72-print-controls][hidden],
.ost-fp-partner-touchpoints [data-ost-fp-r72-fold-wrap][hidden] {
    display: none !important;
}
.ost-fp-partner-touchpoints .ost-fp-r72-custom {
    width: 100%;
    margin-top: 16px;
}
.ost-fp-partner-touchpoints .ost-fp-r72-custom-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 150px));
    gap: 12px 16px;
    align-items: end;
    width: fit-content;
    max-width: 100%;
}
.ost-fp-partner-touchpoints .ost-fp-r72-custom-grid .ost-fp-r72-field {
    margin: 0;
}
.ost-fp-partner-touchpoints .ost-fp-r72-helper {
    width: max-content;
    max-width: none;
    margin: 12px 0 0;
    font-size: 14px;
    line-height: 1.45;
    opacity: 1;
    white-space: nowrap;
}
.ost-fp-partner-touchpoints .ost-fp-r72-helper span {
    display: block;
    margin-top: 4px;
}
.ost-fp-partner-touchpoints .ost-fp-r72-counter,
.ost-fp-partner-touchpoints .ost-fp-r72-benefit-note,
.ost-fp-partner-touchpoints .ost-fp-r72-save-status {
    font-size: 14px;
    line-height: 1.45;
    opacity: 1;
}
.ost-fp-partner-touchpoints .ost-fp-r72-counter {
    align-self: flex-end;
}
.ost-fp-partner-touchpoints .ost-fp-r72-counter--over,
.ost-fp-partner-touchpoints .ost-fp-r72-save-status--error {
    font-weight: 500;
}
.ost-fp-partner-touchpoints .ost-fp-r72-benefit-note {
    width: min(100%, 620px);
    margin: -4px 0 16px;
}
.ost-fp-partner-touchpoints .ost-fp-r72-protected {
    display: grid;
    gap: 6px;
    width: min(100%, 620px);
    margin: 16px 0;
    padding: 14px 16px;
    box-sizing: border-box;
    background: rgba(216,206,195,.22);
    font-size: 14px;
    line-height: 1.45;
}
.ost-fp-partner-touchpoints .ost-fp-r72-appearance-grid {
    display: grid;
    grid-template-columns: repeat(3,minmax(0,1fr));
    gap: 0 16px;
    width: min(100%, 620px);
}
.ost-fp-partner-touchpoints .ost-fp-r72-appearance-grid input[type="color"] {
    width: 100%;
    min-height: 44px;
    height: 44px;
    padding: 3px;
    box-sizing: border-box;
}
.ost-fp-partner-touchpoints .ost-fp-r72-check {
    display: flex;
    align-items: center;
    gap: 8px;
    width: min(100%, 620px);
    margin: 10px 0 14px;
    font-size: 14px;
    opacity: 1;
}
.ost-fp-partner-touchpoints .ost-fp-r72-save-status {
    min-height: 20px;
    margin-top: 10px;
}
.ost-fp-partner-touchpoints .ost-fp-touchpoint-preview-stage {
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    background: #D8CEC3 !important;
    padding: 28px !important;
    box-sizing: border-box;
}
.ost-fp-partner-touchpoints .ost-fp-r72-artboard {
    width: min(100%, 580px);
    margin: 0 auto;
    aspect-ratio: var(--ost-fp-r72-ratio, .707);
    background: #FAF6F1;
    border: 1px solid rgba(39,39,39,.16);
    box-shadow: 0 12px 34px rgba(39,39,39,.08);
    overflow: hidden;
}
.ost-fp-partner-touchpoints .ost-fp-r72-physical-svg {
    width: 100%;
    height: 100%;
    display: block;
}
.ost-fp-partner-touchpoints .ost-fp-r72-size-prompt {
    width: min(100%, 580px);
    min-height: 280px;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 28px;
    box-sizing: border-box;
    text-align: center;
    background: #FAF6F1;
    border: 1px solid rgba(39,39,39,.14);
    font-size: 14px;
    line-height: 1.5;
}
.ost-fp-partner-touchpoints .ost-fp-r72-html-frame {
    width: min(100%, 720px);
    min-height: 420px;
    height: 420px;
    display: block;
    margin: 0 auto;
    border: 0;
    background: #D8CEC3;
}
.ost-fp-partner-touchpoints .ost-fp-r72-validation {
    width: min(100%, 720px);
    margin: 14px 0;
    padding: 12px 14px;
    box-sizing: border-box;
    font-size: 14px;
    line-height: 1.45;
}
.ost-fp-partner-touchpoints .ost-fp-r72-validation--error {
    border-left: 2px solid currentColor;
    background: rgba(39,39,39,.05);
}
.ost-fp-partner-touchpoints .ost-fp-r72-validation--ok {
    background: rgba(216,206,195,.18);
}
.ost-fp-partner-touchpoints .ost-fp-preview-distribution .ost-fp-inline-actions,
.ost-fp-partner-touchpoints .ost-fp-r72-step .ost-fp-inline-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    align-items: center;
}
.ost-fp-partner-touchpoints .ost-fp-preview-distribution .ost-fp-inline-actions .button,
.ost-fp-partner-touchpoints .ost-fp-r72-step .ost-fp-inline-actions .button {
    margin: 0;
}
@media (max-width: 900px) {
    .ost-fp-partner-touchpoints .ost-fp-r72-helper {
        width: auto;
        max-width: 100%;
        white-space: normal;
    }
}
@media (max-width: 640px) {
    .ost-fp-partner-touchpoints .ost-fp-r72-custom-grid,
    .ost-fp-partner-touchpoints .ost-fp-r72-appearance-grid {
        grid-template-columns: 1fr;
        width: 100%;
    }
    .ost-fp-partner-touchpoints .ost-fp-r72-helper span {
        display: block;
        margin-top: 4px;
    }
    .ost-fp-partner-touchpoints .ost-fp-touchpoint-preview-stage {
        padding: 18px !important;
    }
    .ost-fp-partner-touchpoints .ost-fp-r72-html-frame {
        min-height: 470px;
        height: 470px;
    }
}


/* ==========================================================================
   v0.7.6 — R7 presentation correction
   Canonical colour-control presentation = Touchpoints wide colour field.
   The same component is used on Touchpoints and Integrations.
   ========================================================================== */

/* Preview heading parity with Distribution. */
body.ost-fp-page .ost-fp-preview-heading h4,
body.ost-fp-page .ost-fp-preview-distribution > h4 {
    font-size: 17px !important;
    font-weight: 400 !important;
    line-height: 1.35 !important;
}

/* Template is a field label only; metadata sits directly beneath it. */
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r76-template-step {
    margin-top: 20px !important;
    padding-top: 0 !important;
    border-top: 0 !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r76-template-meta {
    width: min(100%, 620px);
    margin: 2px 0 16px !important;
}

/* Content and Presentation controls use the established measured-height disclosure system. */
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r76-disclosure {
    margin: 22px 0 0 !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r76-disclosure > summary.sleev-link {
    display: inline-block;
    cursor: pointer;
    font-size: 17px;
    font-weight: 300;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r76-disclosure-step {
    margin: 0 !important;
    padding-top: 0 !important;
    border-top: 0 !important;
}
/* v0.10.14: Presentation controls contains an .ost-fp-form; neutralise the legacy global
   form top margin so Content and Presentation controls both inherit only the canonical
   measured disclosure-inner spacing. */
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r10-touchpoint-presentation-form {
    margin-top: 0 !important;
}

/* Typeface receives its own row. */
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r72-appearance-grid .ost-fp-r76-font-field {
    grid-column: 1 / -1 !important;
    width: min(100%, 620px) !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r76-font-field select {
    width: 100% !important;
}

/* Explicit primary treatment for requested save actions. */
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r72-save],
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r72-save-place] {
    background: #272727 !important;
    background-color: #272727 !important;
    border-color: #272727 !important;
    color: #FAF6F1 !important;
}

/* Fourth Pleat checkbox structure for print controls. */
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r76-checkbox {
    display: flex !important;
    align-items: flex-start !important;
    gap: 0 !important;
    width: min(100%, 620px);
    margin: 10px 0 14px !important;
    font-size: 14px !important;
    line-height: 1.45 !important;
    cursor: pointer;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r76-checkbox .ost-fp-checkbox-input {
    position: absolute !important;
    opacity: 0 !important;
    width: 1px !important;
    height: 1px !important;
    pointer-events: none !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r76-checkbox .ost-fp-checkbox-box {
    display: inline-block !important;
    width: 18px !important;
    height: 18px !important;
    min-width: 18px !important;
    min-height: 18px !important;
    flex: 0 0 18px !important;
    box-sizing: border-box !important;
    border: 1px solid #272727 !important;
    border-radius: 0 !important;
    background: transparent !important;
    margin: 2px 10px 0 0 !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r76-checkbox .ost-fp-checkbox-input:checked + .ost-fp-checkbox-box {
    background-color: #272727 !important;
    border-color: #272727 !important;
    background-image:
        linear-gradient(45deg, transparent 45%, #FAF6F1 45%, #FAF6F1 55%, transparent 55%),
        linear-gradient(-45deg, transparent 45%, #FAF6F1 45%, #FAF6F1 55%, transparent 55%) !important;
    background-size: 6px 10px, 10px 6px !important;
    background-position: 7px 3px, 3px 8px !important;
    background-repeat: no-repeat !important;
}

/* --------------------------------------------------------------------------
   CANONICAL FOURTH PLEAT COLOUR CONTROL
   Closed state intentionally matches the approved Touchpoints presentation:
   one wide colour field, no permanent secondary HEX box beside it.
   -------------------------------------------------------------------------- */
body.ost-fp-page .ost-fp-colour-control.wp-picker-container {
    display: block !important;
    position: relative;
    width: 195px !important;
    max-width: 100%;
    min-height: 44px;
}

/* Wide selected-colour surface. */
body.ost-fp-page .ost-fp-colour-control .wp-color-result.button {
    display: block !important;
    width: 195px !important;
    max-width: 100%;
    height: 44px !important;
    min-height: 44px !important;
    margin: 0 !important;
    padding: 4px !important;
    border: 1px solid #B8B8B8 !important;
    border-radius: 0 !important;
    background: #FAF6F1 !important;
    box-shadow: none !important;
    box-sizing: border-box !important;
}
body.ost-fp-page .ost-fp-colour-control .wp-color-result::before {
    left: 5px !important;
    right: 5px !important;
    top: 5px !important;
    bottom: 5px !important;
    width: auto !important;
    border-radius: 0 !important;
    border: 1px solid rgba(39,39,39,.35) !important;
}
body.ost-fp-page .ost-fp-colour-control .wp-color-result-text {
    display: none !important;
}

/* HEX is not a permanent adjacent field. It appears only when the picker is open. */
body.ost-fp-page .ost-fp-colour-control input.wp-color-picker {
    display: none !important;
    width: 118px !important;
    min-width: 118px !important;
    height: 36px !important;
    min-height: 36px !important;
    margin: 8px 0 0 !important;
    padding: 6px 8px !important;
    text-transform: uppercase !important;
    font-size: 14px !important;
}
body.ost-fp-page .ost-fp-colour-control.wp-picker-active input.wp-color-picker {
    display: block !important;
}

/* Picker itself opens below the same wide field. */
body.ost-fp-page .ost-fp-colour-control .wp-picker-holder {
    margin-top: 8px !important;
}

/* Prevent legacy native-colour width rules from affecting the shared component. */
body.ost-fp-page .ost-fp-r72-appearance-grid .ost-fp-colour-control input.wp-color-picker,
body.ost-fp-page .ost-fp-direct-style-details .ost-fp-colour-control input.wp-color-picker {
    width: 118px !important;
    height: 36px !important;
    min-height: 36px !important;
}

/* All Touchpoints and Integrations colour fields therefore present identically. */
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-colour-control,
body.ost-fp-page .ost-fp-direct-style-details .ost-fp-colour-control {
    width: 195px !important;
}

@media (max-width: 480px) {
    body.ost-fp-page .ost-fp-colour-control.wp-picker-container,
    body.ost-fp-page .ost-fp-colour-control .wp-color-result.button,
    body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-colour-control,
    body.ost-fp-page .ost-fp-direct-style-details .ost-fp-colour-control {
        width: 100% !important;
    }
}


/* ==========================================================================
   v0.7.7 — canonical self-contained Fourth Pleat colour picker
   Same component on Touchpoints and Integrations. HEX-first. No RGB UI.
   ========================================================================== */

body.ost-fp-page .ost-fp-colour-control {
    position: relative;
    display: inline-block;
    width: 195px;
    max-width: 100%;
    vertical-align: top;
}

/* Closed state: approved wide colour field. */
body.ost-fp-page .ost-fp-colour-button {
    appearance: none !important;
    -webkit-appearance: none !important;
    display: block !important;
    width: 195px !important;
    max-width: 100% !important;
    height: 44px !important;
    min-height: 44px !important;
    margin: 0 !important;
    padding: 5px !important;
    border: 1px solid #B8B8B8 !important;
    border-radius: 0 !important;
    background: #FAF6F1 !important;
    box-shadow: none !important;
    cursor: pointer !important;
    box-sizing: border-box !important;
}
body.ost-fp-page .ost-fp-colour-button:hover,
body.ost-fp-page .ost-fp-colour-button:focus,
body.ost-fp-page .ost-fp-colour-button:focus-visible {
    border-color: #8F8A85 !important;
    outline: none !important;
    box-shadow: none !important;
}
body.ost-fp-page .ost-fp-colour-button-swatch {
    display: block;
    width: 100%;
    height: 100%;
    border: 1px solid rgba(39,39,39,.34);
    box-sizing: border-box;
}

/* Authoritative original field remains present for platform logic but invisible. */
body.ost-fp-page input.ost-fp-colour-source {
    position: absolute !important;
    left: 0 !important;
    bottom: 0 !important;
    width: 1px !important;
    height: 1px !important;
    min-width: 1px !important;
    min-height: 1px !important;
    margin: 0 !important;
    padding: 0 !important;
    opacity: 0 !important;
    pointer-events: none !important;
    border: 0 !important;
}

/* Picker panel. HEX is the first and only textual colour value. */
body.ost-fp-page .ost-fp-colour-panel {
    position: absolute;
    z-index: 10020;
    left: 0;
    top: calc(100% + 8px);
    width: 230px;
    padding: 12px;
    box-sizing: border-box;
    background: #FAF6F1;
    border: 1px solid #D8CEC3;
    box-shadow: 0 12px 28px rgba(39,39,39,.14);
}
body.ost-fp-page .ost-fp-colour-panel[hidden] {
    display: none !important;
}
body.ost-fp-page .ost-fp-colour-hex-row {
    display: grid;
    grid-template-columns: 42px minmax(0,1fr);
    gap: 8px;
    align-items: center;
    margin: 0 0 12px;
}
body.ost-fp-page .ost-fp-colour-hex-row > span {
    font-size: 13px;
    line-height: 1;
}
body.ost-fp-page .ost-fp-colour-hex {
    width: 100% !important;
    height: 36px !important;
    min-height: 36px !important;
    margin: 0 !important;
    padding: 6px 8px !important;
    box-sizing: border-box !important;
    text-transform: uppercase !important;
    font-size: 14px !important;
    font-weight: 300 !important;
}

/* Saturation/value plane. */
body.ost-fp-page .ost-fp-colour-sv {
    position: relative;
    display: block;
    width: 100%;
    height: 150px;
    overflow: hidden;
    cursor: crosshair;
    background: #FF0000;
    touch-action: none;
}
body.ost-fp-page .ost-fp-colour-sv-white,
body.ost-fp-page .ost-fp-colour-sv-black {
    position: absolute;
    inset: 0;
    pointer-events: none;
}
body.ost-fp-page .ost-fp-colour-sv-white {
    background: linear-gradient(to right,#FFFFFF,rgba(255,255,255,0));
}
body.ost-fp-page .ost-fp-colour-sv-black {
    background: linear-gradient(to bottom,rgba(0,0,0,0),#000000);
}
body.ost-fp-page .ost-fp-colour-marker {
    position: absolute;
    width: 12px;
    height: 12px;
    margin: -6px 0 0 -6px;
    border: 2px solid #FFFFFF;
    border-radius: 50%;
    box-shadow: 0 0 0 1px rgba(39,39,39,.65);
    pointer-events: none;
}

/* Hue strip. */
body.ost-fp-page .ost-fp-colour-hue {
    position: relative;
    display: block;
    width: 100%;
    height: 16px;
    margin-top: 12px;
    cursor: pointer;
    touch-action: none;
    background: linear-gradient(to right,
        #FF0000 0%,
        #FFFF00 16.666%,
        #00FF00 33.333%,
        #00FFFF 50%,
        #0000FF 66.666%,
        #FF00FF 83.333%,
        #FF0000 100%);
}
body.ost-fp-page .ost-fp-colour-hue-marker {
    position: absolute;
    top: -3px;
    width: 4px;
    height: 22px;
    margin-left: -2px;
    background: #FAF6F1;
    border: 1px solid #272727;
    box-sizing: border-box;
    pointer-events: none;
}

/* Explicit consistency across both workspaces. */
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-colour-control,
body.ost-fp-page .ost-fp-direct-style-details .ost-fp-colour-control {
    width: 195px !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-colour-button,
body.ost-fp-page .ost-fp-direct-style-details .ost-fp-colour-button {
    width: 195px !important;
}

/* Neutralise obsolete WordPress picker wrappers if cached markup survives an AJAX fragment. */
body.ost-fp-page .wp-picker-container .ost-fp-colour-control {
    display: inline-block !important;
}

@media (max-width: 480px) {
    body.ost-fp-page .ost-fp-colour-control,
    body.ost-fp-page .ost-fp-colour-button,
    body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-colour-control,
    body.ost-fp-page .ost-fp-direct-style-details .ost-fp-colour-control {
        width: 100% !important;
    }
    body.ost-fp-page .ost-fp-colour-panel {
        width: min(230px,100%);
    }
}


/* ==========================================================================
   v0.7.8 — field-label consistency, Integration colour alignment,
   and Touchpoints initial-preview gating.
   ========================================================================== */

/* One global front-end field-label hierarchy.
   Current R7 direction supersedes the older 16px conventional-label rule:
   visible field labels use the established 14px secondary-text size.
   Checkbox/supporting copy is not reclassified as a field label. */
body.ost-fp-page .ost-fp-field > label:not(.ost-fp-floating-label):not(.ost-fp-checkbox),
body.ost-fp-page .ost-fp-form label:not(.ost-fp-floating-label):not(.ost-fp-checkbox):not(.screen-reader-text):not(.ost-fp-sr-only),
body.ost-fp-page .ost-fp-partner-location-field > label,
body.ost-fp-page label.ost-fp-r72-field {
    font-size: 14px !important;
    font-weight: 300 !important;
    line-height: 1.45 !important;
    opacity: 1 !important;
}

/* Preserve the accepted 16px control typography even when a control is nested
   inside a 14px label. */
body.ost-fp-page .ost-fp-field > label:not(.ost-fp-floating-label) > input:not([type="checkbox"]):not([type="radio"]),
body.ost-fp-page .ost-fp-field > label:not(.ost-fp-floating-label) > select,
body.ost-fp-page .ost-fp-field > label:not(.ost-fp-floating-label) > textarea,
body.ost-fp-page .ost-fp-form label:not(.ost-fp-floating-label):not(.ost-fp-checkbox) > input:not([type="checkbox"]):not([type="radio"]),
body.ost-fp-page .ost-fp-form label:not(.ost-fp-floating-label):not(.ost-fp-checkbox) > select,
body.ost-fp-page .ost-fp-form label:not(.ost-fp-floating-label):not(.ost-fp-checkbox) > textarea,
body.ost-fp-page label.ost-fp-r72-field > input:not([type="checkbox"]):not([type="radio"]),
body.ost-fp-page label.ost-fp-r72-field > select,
body.ost-fp-page label.ost-fp-r72-field > textarea {
    font-size: var(--ost-fp-control-font-size, 16px) !important;
}

/* Integration colour fields must use exactly the same label-above-field
   geometry as Touchpoints. */
body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-field > label {
    display: flex !important;
    flex-direction: column !important;
    align-items: flex-start !important;
    justify-content: flex-start !important;
    gap: 6px !important;
    width: 100% !important;
    margin: 0 !important;
    padding: 0 !important;
}
body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-field > label > .ost-fp-colour-control {
    display: block !important;
    flex: 0 0 auto !important;
    margin: 0 !important;
    width: 195px !important;
    max-width: 100% !important;
}
body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-field > label > .ost-fp-colour-control .ost-fp-colour-button {
    width: 195px !important;
    max-width: 100% !important;
    margin: 0 !important;
}

/* Touchpoints uses the same exact colour-control geometry. */
body.ost-fp-page .ost-fp-partner-touchpoints label.ost-fp-r72-field > .ost-fp-colour-control {
    display: block !important;
    margin: 0 !important;
    width: 195px !important;
    max-width: 100% !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints label.ost-fp-r72-field > .ost-fp-colour-control .ost-fp-colour-button {
    width: 195px !important;
    max-width: 100% !important;
}

/* An unready Touchpoints preview stage is deliberately empty.
   No placeholder artboard or partial template is shown before the complete
   template source and selected preview font are ready. */
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-touchpoint-preview-stage:empty {
    min-height: 0 !important;
    padding-top: 0 !important;
    padding-bottom: 0 !important;
}

@media (max-width: 480px) {
    body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-field > label > .ost-fp-colour-control,
    body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-field > label > .ost-fp-colour-control .ost-fp-colour-button,
    body.ost-fp-page .ost-fp-partner-touchpoints label.ost-fp-r72-field > .ost-fp-colour-control,
    body.ost-fp-page .ost-fp-partner-touchpoints label.ost-fp-r72-field > .ost-fp-colour-control .ost-fp-colour-button {
        width: 100% !important;
    }
}


/* ==========================================================================
   v0.7.9 — cross-plugin presentation consistency correction
   Canonical contracts:
   - field labels: 14px secondary text
   - ordinary controls: 44px height
   - label/control gap: 6px
   - Touchpoints Appearance / Integrations Presentation controls: compact 620px,
     three-column desktop grid with 16px horizontal spacing
   - colour controls: shared 195px Fourth Pleat picker
   - unready preview stage: neutral canvas retained at 300px, no partial artboard
   ========================================================================== */

body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-touchpoint-preview-stage:empty {
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    width: 100% !important;
    min-height: 300px !important;
    height: auto !important;
    padding: 22px !important;
    box-sizing: border-box !important;
    border: 1px solid var(--ost-fp-border, #D8CEC3) !important;
    background: #D8CEC3 !important;
}

body.ost-fp-page .ost-fp-direct-style-grid {
    display: grid !important;
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
    column-gap: 16px !important;
    row-gap: 16px !important;
    align-items: start !important;
    width: min(100%, 620px) !important;
    max-width: 620px !important;
    margin: 18px 0 !important;
}

body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-field {
    width: 100% !important;
    max-width: none !important;
    min-width: 0 !important;
    margin: 0 !important;
    align-self: start !important;
}

body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-field > label {
    display: block !important;
    width: 100% !important;
    margin: 0 !important;
    padding: 0 !important;
    font-size: 14px !important;
    font-weight: 300 !important;
    line-height: 1.45 !important;
    opacity: 1 !important;
}

body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-field > label > input:not([type="checkbox"]):not([type="radio"]),
body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-field > label > select,
body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-field > label > .ost-fp-colour-control {
    display: block !important;
    margin-top: 6px !important;
}

body.ost-fp-page .ost-fp-direct-style-grid .ost-fp-colour-control,
body.ost-fp-page .ost-fp-direct-style-grid .ost-fp-colour-button {
    width: 195px !important;
    max-width: 100% !important;
}

body.ost-fp-page .ost-fp-direct-style-grid select[name="existing_typography"],
body.ost-fp-page .ost-fp-direct-style-grid select[name="standalone_typography"] {
    width: 100% !important;
    max-width: none !important;
    height: 44px !important;
    min-height: 44px !important;
    max-height: 44px !important;
    box-sizing: border-box !important;
}

body.ost-fp-page .ost-fp-direct-style-grid input[type="number"][name="existing_corner_radius"],
body.ost-fp-page .ost-fp-direct-style-grid input[type="number"][name="standalone_corner_radius"] {
    display: block !important;
    width: 120px !important;
    min-width: 120px !important;
    max-width: 120px !important;
    height: 44px !important;
    min-height: 44px !important;
    max-height: 44px !important;
    flex: 0 0 44px !important;
    padding-top: 0 !important;
    padding-bottom: 0 !important;
    box-sizing: border-box !important;
    line-height: normal !important;
    align-self: start !important;
}

@media (max-width: 640px) {
    body.ost-fp-page .ost-fp-direct-style-grid {
        grid-template-columns: 1fr !important;
        width: 100% !important;
        max-width: none !important;
    }
}


/* ==========================================================================
   v0.7.10 — shared Fourth Pleat colour picker positioning correction
   ========================================================================== */

/* The open picker is now portalled to <body>, so it is never clipped by
   Integration cards, Touchpoints preview containers, panels or overflow rules. */
body.ost-fp-page > .ost-fp-colour-panel {
    position: fixed !important;
    z-index: 2147483000 !important;
    width: 260px !important;
    max-width: calc(100vw - 16px) !important;
    padding: 12px !important;
    margin: 0 !important;
    box-sizing: border-box !important;
    background: #FAF6F1 !important;
    border: 1px solid #D8CEC3 !important;
    box-shadow: 0 12px 28px rgba(39,39,39,.18) !important;
    overflow: visible !important;
}

/* HEX remains the first/default value field. */
body.ost-fp-page > .ost-fp-colour-panel .ost-fp-colour-hex-row {
    display: grid !important;
    grid-template-columns: 42px minmax(0,1fr) !important;
    gap: 8px !important;
    align-items: center !important;
    margin: 0 0 12px !important;
}
body.ost-fp-page > .ost-fp-colour-panel .ost-fp-colour-hex {
    width: 100% !important;
    height: 36px !important;
    min-height: 36px !important;
    max-height: 36px !important;
}

/* Full saturation/value area. */
body.ost-fp-page > .ost-fp-colour-panel .ost-fp-colour-sv {
    display: block !important;
    position: relative !important;
    width: 100% !important;
    height: 170px !important;
    min-height: 170px !important;
    overflow: hidden !important;
    cursor: crosshair !important;
    touch-action: none !important;
}

/* Full-spectrum hue strip is always visible and usable. */
body.ost-fp-page > .ost-fp-colour-panel .ost-fp-colour-hue {
    display: block !important;
    position: relative !important;
    width: 100% !important;
    height: 20px !important;
    min-height: 20px !important;
    margin-top: 12px !important;
    cursor: pointer !important;
    touch-action: none !important;
    background: linear-gradient(to right,
        #FF0000 0%,
        #FFFF00 16.666%,
        #00FF00 33.333%,
        #00FFFF 50%,
        #0000FF 66.666%,
        #FF00FF 83.333%,
        #FF0000 100%) !important;
}

/* Ensure hidden panels truly disappear while portalled. */
body.ost-fp-page > .ost-fp-colour-panel[hidden] {
    display: none !important;
}

/* Placement classes are primarily semantic/debugging hooks. Fixed-position
   coordinates are calculated in JS according to available viewport space. */
body.ost-fp-page > .ost-fp-colour-panel--right,
body.ost-fp-page > .ost-fp-colour-panel--left,
body.ost-fp-page > .ost-fp-colour-panel--below,
body.ost-fp-page > .ost-fp-colour-panel--above {
    transform: none !important;
}


/* ==========================================================================
   v0.7.12 — Direct controls simplification + anchored colour picker +
   recoverable Direct preview error.
   ========================================================================== */

/* The picker remains above surrounding panels but is positioned in document
   coordinates. It therefore scrolls with the triggering colour field instead
   of floating over unrelated page content. */
body.ost-fp-page > .ost-fp-colour-panel {
    position: absolute !important;
}

/* Direct preview error state now provides an explicit recovery action. */
body.ost-fp-page .ost-fp-direct-preview-stage [data-ost-fp-preview-retry] {
    display: none !important;
}
body.ost-fp-page .ost-fp-direct-preview-stage.ost-fp-preview-error::after {
    z-index: 2 !important;
    padding-bottom: 44px !important;
}
body.ost-fp-page .ost-fp-direct-preview-stage.ost-fp-preview-error [data-ost-fp-preview-retry] {
    display: inline-flex !important;
    position: absolute !important;
    z-index: 3 !important;
    left: 50% !important;
    top: 50% !important;
    transform: translate(-50%, 16px) !important;
    margin: 0 !important;
}


/* ==========================================================================
   v0.7.13 — strict picker anchoring + icon-only preview retry
   ========================================================================== */

/* Picker remains portalled above local layout containers, but its absolute
   document coordinates are fixed to the triggering field. Normal page scroll
   does not reposition it relative to the viewport. */
body.ost-fp-page > .ost-fp-colour-panel {
    position: absolute !important;
}

/* Retry Preview becomes a small icon-only control with no button dressing. */
body.ost-fp-page .ost-fp-direct-preview-stage [data-ost-fp-preview-retry] {
    display: none !important;
    appearance: none !important;
    -webkit-appearance: none !important;
    width: 20px !important;
    height: 20px !important;
    min-width: 20px !important;
    min-height: 20px !important;
    margin: 0 !important;
    padding: 0 !important;
    border: 0 !important;
    border-radius: 0 !important;
    background: transparent !important;
    box-shadow: none !important;
    color: #272727 !important;
    cursor: pointer !important;
    align-items: center !important;
    justify-content: center !important;
}
body.ost-fp-page .ost-fp-direct-preview-stage.ost-fp-preview-error [data-ost-fp-preview-retry] {
    display: inline-flex !important;
    position: absolute !important;
    z-index: 3 !important;
    left: 50% !important;
    top: 50% !important;
    transform: translate(-50%, 18px) !important;
}
body.ost-fp-page .ost-fp-direct-preview-stage [data-ost-fp-preview-retry] svg {
    display: block !important;
    width: 18px !important;
    height: 18px !important;
    overflow: visible !important;
}
body.ost-fp-page .ost-fp-direct-preview-stage [data-ost-fp-preview-retry]:hover {
    opacity: .65 !important;
}
body.ost-fp-page .ost-fp-direct-preview-stage [data-ost-fp-preview-retry]:focus-visible {
    outline: 1px solid #272727 !important;
    outline-offset: 3px !important;
}


/* ==========================================================================
   v0.7.14 — Preview refresh icon scale
   ========================================================================== */
body.ost-fp-page .ost-fp-direct-preview-stage [data-ost-fp-preview-retry] {
    width: 24px !important;
    height: 24px !important;
    min-width: 24px !important;
    min-height: 24px !important;
}
body.ost-fp-page .ost-fp-direct-preview-stage [data-ost-fp-preview-retry] svg {
    width: 24px !important;
    height: 24px !important;
}


/* ==========================================================================
   v0.7.15 — Touchpoints physical-template layout consistency
   ========================================================================== */

/* Fold guide is an A-frame-only control. The JS also applies an explicit
   display state so historical theme rules cannot expose it on other formats. */
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r72-fold-wrap][hidden] {
    display: none !important;
}

/* Successful distribution validation requires no notice. Blocking validation
   uses the established Fourth Pleat notice grammar instead of the former
   secondary-text R7 status box. */
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r72-validation.ost-fp-notice {
    width: min(100%, 720px) !important;
    min-height: 48px !important;
    margin: 14px 0 !important;
    padding: 12px 14px !important;
    box-sizing: border-box !important;
    font-size: 16px !important;
    font-weight: 300 !important;
    line-height: 1.45 !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r72-validation.ost-fp-error {
    border: 0 !important;
    border-left: 4px solid #B84A42 !important;
    background: #F3ECE4 !important;
    color: #B84A42 !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r72-validation.ost-fp-notice p {
    margin: 0 !important;
    color: inherit !important;
}

/* PDF preparation uses the existing global contained AJAX spinner directly
   over the button. Keep the label at the same dimensions while it dims beneath
   the standard spinner. */
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r72-pdf].ost-fp-ajax-loading {
    min-width: 0 !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r72-pdf].ost-fp-ajax-loading > span {
    opacity: .42 !important;
}


/* ==========================================================================
   v0.7.16 — Touchpoints controlled benefit selection
   ========================================================================== */

body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r716-benefits {
    width: min(100%, 620px);
    margin: 18px 0 0;
}

body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r716-benefit-heading {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 16px;
    margin: 0 0 10px;
    font-size: 14px;
    font-weight: 300;
    line-height: 1.45;
}

body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r716-benefit-count {
    flex: 0 0 auto;
    white-space: nowrap;
    font-size: 14px;
    font-weight: 300;
}

body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r716-benefit-list {
    display: grid;
    gap: 10px;
}

body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r716-benefit-option {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    margin: 0;
}

body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r716-benefit-option .ost-fp-checkbox-box {
    margin-top: 1px;
}

body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r716-benefit-option .ost-fp-checkbox-text {
    display: grid;
    gap: 2px;
    min-width: 0;
}

body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r716-benefit-text {
    font-size: 16px;
    font-weight: 300;
    line-height: 1.4;
}

body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r716-benefit-meta {
    font-size: 14px;
    font-weight: 300;
    line-height: 1.4;
}

body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r716-benefit-notice {
    width: min(100%, 620px);
    margin: 12px 0 0;
    font-size: 16px;
    font-weight: 300;
    line-height: 1.45;
}

body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r716-benefit-notice p {
    margin: 0;
    color: inherit;
}

@media (max-width: 520px) {
    body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r716-benefit-heading {
        align-items: flex-start;
        flex-direction: column;
        gap: 3px;
    }
}


/* ==========================================================================
   v0.7.17 — Touchpoints layout, benefit-list and Content-control refinements
   ========================================================================== */

body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r716-benefit-list {
    gap: 8px !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r716-benefit-option {
    margin: 0 !important;
    padding: 0 !important;
    min-height: 0 !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r716-benefit-option .ost-fp-checkbox-text {
    min-height: 0 !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r716-benefit-meta {
    margin-top: 1px !important;
}

body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r716-benefit-notice {
    margin: 12px 0 16px !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r716-benefit-notice[hidden],
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r716-benefits][hidden],
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r717-business-size-wrap][hidden],
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r717-custom-grid][hidden],
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r72-size-helper][hidden] {
    display: none !important;
}

body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r717-counted-field {
    position: relative !important;
    width: min(100%, 620px) !important;
    margin: 0 0 10px !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r717-counted-field textarea,
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r717-counted-field input[type="text"] {
    padding-right: 78px !important;
    box-sizing: border-box !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r717-counted-field textarea {
    padding-bottom: 28px !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r717-counted-field .ost-fp-r72-counter {
    position: absolute !important;
    right: 10px !important;
    bottom: 8px !important;
    z-index: 2 !important;
    margin: 0 !important;
    padding: 0 0 0 5px !important;
    align-self: auto !important;
    pointer-events: none !important;
    background: rgba(250,246,241,.94) !important;
    font-size: 14px !important;
    line-height: 1.45 !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r717-counted-field + .ost-fp-r717-counted-field {
    margin-top: 0 !important;
}

body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r717-business-size-wrap] {
    width: min(100%, 620px) !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r717-business-size] {
    width: 100% !important;
    min-height: 44px !important;
    height: 44px !important;
}


/* ==========================================================================
   v0.7.18 — critical Touchpoints disclosure recovery + business-card fixes
   ========================================================================== */

/* Business-card preset select: half the former 620px field width. */
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r717-business-size-wrap] {
    width: min(100%, 310px) !important;
    max-width: 310px !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r717-business-size] {
    width: 100% !important;
}


/* ==========================================================================
   v0.7.19 — Touchpoints reveal stability + Preview layout recovery
   ========================================================================== */

/* Replace outer margins on animated panels with equivalent internal spacing.
   The spacing is therefore included in the measured height and cannot vanish
   as a final 10–16px jump when the panel reaches hidden state. */
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r72-custom {
    margin-top: 0 !important;
    padding-top: 16px !important;
    box-sizing: border-box !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r716-benefits {
    margin-top: 0 !important;
    padding-top: 18px !important;
    box-sizing: border-box !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r717-business-size-wrap] > .ost-fp-r72-field {
    margin-bottom: 0 !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r717-business-size-wrap] {
    padding-bottom: 14px !important;
    box-sizing: border-box !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r72-size-helper] {
    margin-top: 0 !important;
    padding-top: 12px !important;
    box-sizing: border-box !important;
}

/* Benefit advisory: the animated shell owns the vertical spacing so both the
   notice itself and its spacing collapse together. */
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r719-benefit-notice-shell {
    width: min(100%, 620px) !important;
    padding-top: 12px !important;
    box-sizing: border-box !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r719-benefit-notice-shell[hidden] {
    display: none !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r719-benefit-notice-shell .ost-fp-r716-benefit-notice {
    width: 100% !important;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r716-benefits + [data-ost-fp-r72-credit] + .ost-fp-inline-actions {
    margin-top: 16px !important;
}

/* Appearance source, Font and Print treatment use the same compact width
   already accepted for Business card size. */
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r72-appearance-mode],
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r72-font],
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r72-print-mode] {
    width: min(100%, 310px) !important;
    max-width: 310px !important;
}

/* Defensive removal of the transient R7 preview-host presentation. The actual
   Preview and Distribution blocks remain the original server-rendered siblings. */
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r76-preview-step,
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r76-preview-host {
    display: none !important;
}


/* ==========================================================================
   v0.7.20 — shared responsive form rows + persistent dynamic wrappers
   ========================================================================== */

/*
 * Fourth Pleat form-row contract.
 * The form retains its existing 620px working width. Fields never receive
 * one-off pixel widths; row structure determines whether one, two or three
 * equal controls share the available line.
 */
body.ost-fp-page .ost-fp-form-row {
    display: grid !important;
    width: min(100%, 620px) !important;
    max-width: 620px !important;
    gap: 16px !important;
    align-items: end !important;
    box-sizing: border-box !important;
}
body.ost-fp-page .ost-fp-form-row--1 {
    grid-template-columns: minmax(0, 1fr) !important;
}
body.ost-fp-page .ost-fp-form-row--2 {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
}
body.ost-fp-page .ost-fp-form-row--3 {
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
}
body.ost-fp-page .ost-fp-form-row + .ost-fp-form-row {
    margin-top: 16px !important;
}
body.ost-fp-page .ost-fp-form-row > .ost-fp-r72-field,
body.ost-fp-page .ost-fp-form-row > .ost-fp-field {
    width: 100% !important;
    max-width: none !important;
    min-width: 0 !important;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-form-row select,
body.ost-fp-page .ost-fp-form-row input:not([type="checkbox"]):not([type="radio"]),
body.ost-fp-page .ost-fp-form-row textarea {
    width: 100% !important;
    max-width: none !important;
    min-width: 0 !important;
    box-sizing: border-box !important;
}

/* Touchpoints Appearance now uses explicit responsive rows rather than the
   legacy one-off grid / compact-width exceptions. */
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r72-appearance-grid {
    display: block !important;
    width: min(100%, 620px) !important;
    max-width: 620px !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r72-custom-grid {
    width: min(100%, 620px) !important;
    max-width: 620px !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r717-business-size-wrap],
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r717-business-size],
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r72-appearance-mode],
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r72-font],
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r72-print-mode] {
    width: 100% !important;
    max-width: none !important;
}

/* Colour controls follow the same row width as conventional fields. */
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-form-row--colours .ost-fp-colour-control,
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-form-row--colours .ost-fp-colour-button {
    width: 100% !important;
    max-width: none !important;
    min-width: 0 !important;
}

/*
 * Dynamic-display contract.
 * Once JavaScript initialises a conditional Fourth Pleat control it remains in
 * the DOM at zero height when collapsed. The end state therefore cannot cause
 * a second display:none reflow after the measured animation has completed.
 */
body.ost-fp-page [data-ost-fp-persistent-visibility="1"] {
    box-sizing: border-box !important;
}
body.ost-fp-page [data-ost-fp-persistent-visibility="1"].is-collapsed {
    height: 0 !important;
    opacity: 0 !important;
    visibility: hidden !important;
    pointer-events: none !important;
    overflow: hidden !important;
}

/* Responsive form rows. Three-field rows reduce to two columns first; all
   multi-field rows then become one column on narrow screens. */
@media (max-width: 760px) {
    body.ost-fp-page .ost-fp-form-row--3 {
        grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    }
}
@media (max-width: 540px) {
    body.ost-fp-page .ost-fp-form-row--2,
    body.ost-fp-page .ost-fp-form-row--3 {
        grid-template-columns: minmax(0, 1fr) !important;
    }
}


/* ==========================================================================
   v0.7.21 — Presentation terminology/layout + nested disclosure consistency
   ========================================================================== */

/* Appearance source and Font are an ordinary two-field row. The v0.7.6
   full-row Font exception is intentionally superseded. */
body.ost-fp-page .ost-fp-partner-touchpoints
.ost-fp-r72-appearance-grid .ost-fp-form-row--2 > .ost-fp-r72-field {
    grid-column: auto !important;
    width: 100% !important;
    max-width: none !important;
}

/* Print spacing belongs inside the measured dynamic wrapper rather than on
   the animated wrapper itself. This preserves the global no-jolt rule. */
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r721-print-inner {
    display: flow-root;
    box-sizing: border-box;
    padding-top: 16px;
}

/* Credit history now uses the same measured-height motion family as the
   surrounding Fourth Pleat accordion. Keep child margins inside the measured
   panel so opening and closing do not produce a second layout event. */
body.ost-fp-page .ost-fp-credit-history-panel {
    overflow: hidden;
    box-sizing: border-box;
}
body.ost-fp-page .ost-fp-credit-history-panel-inner {
    display: flow-root;
    min-height: 0;
}


/* ==========================================================================
   v0.7.22 — partner-facing Presentation scope terminology
   ========================================================================== */
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r722-presentation-help {
    width: min(100%, 620px) !important;
    max-width: 620px !important;
    margin: 8px 0 16px !important;
    font-size: 14px !important;
    font-weight: 300 !important;
    line-height: 1.45 !important;
}


/* ==========================================================================
   v0.7.23 — digital Touchpoint benefits + natural-height preview
   ========================================================================== */

/* Digital preview frames are resized from their same-origin srcdoc content.
   Remove the legacy fixed 420/470px viewport so the canvas expands naturally
   and never requires a nested vertical scrollbar. */
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r72-html-frame {
    width: min(100%, 720px) !important;
    min-height: 360px !important;
    height: 360px;
    overflow: hidden !important;
}
@media (max-width: 640px) {
    body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r72-html-frame {
        min-height: 360px !important;
        height: 360px;
    }
}


/* ==========================================================================
   v0.7.27 — Digital-only Touchpoints Appearance action spacing
   ========================================================================== */

/*
 * Digital Touchpoints have no Print treatment / bleed controls between the
 * colour row and the Appearance actions. Add the requested separation only in
 * that digital state. Physical templates retain the v0.7.24 spacing unchanged.
 *
 * No bottom spacing, outer-frame, disclosure, or status-area adjustment.
 */
body.ost-fp-page .ost-fp-partner-touchpoints
.ost-fp-r727-appearance-actions.is-digital {
    margin-top: 30px !important;
}

/* ==========================================================================
   v0.7.29 — shared Direct-standard partner entry + controlled Place media
   ========================================================================== */

/* --------------------------------------------------------------------------
   Partner entry modal — same presentation contract as the accepted Direct
   booking modal. Identity/media are the only partner-entry-specific layer.
   -------------------------------------------------------------------------- */
.ost-fp-partner-identity-overlay[hidden] {
    display: none !important;
}

.ost-fp-partner-identity-overlay {
    position: fixed;
    inset: 0;
    z-index: 2147483000;
    display: flex;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    padding: 24px;
    font-weight: 300;
    opacity: 0;
    visibility: hidden;
    transition: opacity 220ms ease, visibility 220ms ease;
}

.ost-fp-partner-identity-overlay.is-open {
    opacity: 1;
    visibility: visible;
}

.ost-fp-partner-identity-backdrop {
    position: absolute;
    inset: 0;
    background: rgba(39,39,39,.46);
}

.ost-fp-partner-identity-dialog {
    position: relative;
    z-index: 1;
    width: min(570px, 100%);
    max-height: calc(100vh - 48px);
    overflow: auto;
    box-sizing: border-box;
    background: var(--ost-fpd-bg, #FAF6F1);
    color: var(--ost-fpd-text, #272727);
    border: 1px solid var(--ost-fpd-border, #D8CEC3);
    border-radius: var(--ost-fpd-radius, 2px);
    box-shadow: 0 18px 52px rgba(39,39,39,.18);
    font-family: var(--ost-fpd-font, "Hanken Grotesk", Arial, sans-serif);
    font-weight: 300;
}

/* A hero may widen the shell, but it does not create a second modal language. */
.ost-fp-partner-identity-dialog.has-hero {
    width: min(920px, 100%);
    display: grid;
    grid-template-columns: minmax(0, 42%) minmax(0, 58%);
    align-items: start;
}

.ost-fp-partner-identity-close {
    all: unset;
    position: absolute;
    z-index: 3;
    right: 14px;
    top: 10px;
    width: 32px;
    height: 32px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--ost-fpd-text, #272727);
    cursor: pointer;
    font-size: 22px;
    font-weight: 300;
    line-height: 1;
}

.ost-fp-partner-identity-close:focus-visible,
.ost-fp-partner-identity-action:focus-visible {
    outline: 1px solid currentColor;
    outline-offset: 3px;
}

.ost-fp-partner-identity-hero {
    width: 100%;
    aspect-ratio: 4 / 3;
    overflow: hidden;
    background: #D8CEC3;
}

.ost-fp-partner-identity-hero img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.ost-fp-partner-identity-content {
    min-width: 0;
    box-sizing: border-box;
    padding: 28px;
}

.ost-fp-partner-identity-logo-plate {
    display: flex;
    align-items: center;
    justify-content: flex-start;
    width: min(100%, 220px);
    min-height: 72px;
    box-sizing: border-box;
    margin: 0 0 20px;
    padding: 12px 16px;
    background: #FAF6F1;
    overflow: hidden;
}

.ost-fp-partner-identity-logo-plate img {
    display: block;
    width: auto;
    height: auto;
    max-width: 100%;
    max-height: 54px;
    object-fit: contain;
    object-position: left center;
}

.ost-fp-partner-identity-name {
    margin: 0 34px 12px 0;
    color: var(--ost-fpd-text, #272727);
    font-size: 14px;
    font-weight: 300;
    line-height: 1.45;
}

.ost-fp-partner-identity-content h2 {
    margin: 0 34px 12px 0;
    color: var(--ost-fpd-text, #272727);
    font-family: inherit;
    font-size: 20px;
    font-weight: 400;
    line-height: 1.35;
}

.ost-fp-partner-identity-description {
    margin: 0 0 12px;
    color: var(--ost-fpd-text, #272727);
    font-size: 16px;
    font-weight: 300;
    line-height: 1.5;
}

.ost-fp-partner-identity-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 20px;
}

.ost-fp-partner-identity-action {
    all: unset;
    box-sizing: border-box;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 36px;
    padding: 0 14px;
    border: 0;
    border-radius: 0;
    cursor: pointer;
    font-family: inherit;
    font-size: 14px;
    font-weight: 400;
    line-height: 1;
    letter-spacing: 0;
    text-transform: uppercase;
    text-align: center;
    text-decoration: none;
}

.ost-fp-partner-identity-action--primary {
    background: var(--ost-fpd-primary-bg, #272727);
    color: var(--ost-fpd-primary-text, #FAF6F1);
}

.ost-fp-partner-identity-action--secondary {
    background: var(--ost-fpd-secondary-bg, #E8DDD1);
    color: var(--ost-fpd-secondary-text, #272727);
}

.ost-fp-partner-identity-action:hover,
.ost-fp-partner-identity-action:focus {
    color: inherit;
    text-decoration: none;
    opacity: .86;
}

.ost-fp-partner-identity-action--primary:hover,
.ost-fp-partner-identity-action--primary:focus {
    color: var(--ost-fpd-primary-text, #FAF6F1);
}

.ost-fp-partner-identity-action--secondary:hover,
.ost-fp-partner-identity-action--secondary:focus {
    color: var(--ost-fpd-secondary-text, #272727);
}

.ost-fp-partner-identity-attribution {
    margin: 20px 0 0;
    padding-top: 12px;
    border-top: 1px solid var(--ost-fpd-border, #D8CEC3);
    color: var(--ost-fpd-text, #272727);
    font-size: 12px;
    font-weight: 300;
    line-height: 1.4;
    opacity: .72;
}

@media (max-width: 720px) {
    .ost-fp-partner-identity-dialog.has-hero {
        width: min(560px, 100%);
        display: block;
    }
}

@media (max-width: 480px) {
    .ost-fp-partner-identity-overlay {
        padding: 14px;
    }
    .ost-fp-partner-identity-dialog {
        max-height: calc(100vh - 28px);
    }
    .ost-fp-partner-identity-content {
        padding: 22px;
    }
    .ost-fp-partner-identity-actions {
        display: grid;
        grid-template-columns: 1fr;
    }
    .ost-fp-partner-identity-action {
        width: 100%;
    }
}

/* --------------------------------------------------------------------------
   Partner Portal — location-level entry-modal presentation. Reuse the Direct
   configuration grid and the shared Fourth Pleat colour-control component.
   -------------------------------------------------------------------------- */
body.ost-fp-page .ost-fp-partner-entry-presentation-card {
    margin-top: 24px;
}
body.ost-fp-page .ost-fp-partner-entry-presentation-card .ost-fp-partner-entry-config-grid {
    width: min(100%, 620px);
    max-width: 620px;
}
body.ost-fp-page .ost-fp-partner-entry-presentation-card .ost-fp-partner-entry-style-details {
    grid-column: 1 / -1;
}
body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-field input[type="number"][name="entry_corner_radius"] {
    width: 120px !important;
    min-width: 120px !important;
    max-width: 120px !important;
    flex-basis: 120px !important;
}

/* --------------------------------------------------------------------------
   Explore Places — controlled 50/50 media treatment. Partners provide URLs;
   Fourth Pleat controls geometry so source dimensions cannot alter layout.
   -------------------------------------------------------------------------- */
body.ost-fp-page .ost-fp-directory-detail-panel.has-media {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 24px;
    align-items: start;
}
body.ost-fp-page .ost-fp-directory-detail-panel.has-media::before,
body.ost-fp-page .ost-fp-directory-detail-panel.has-media::after {
    grid-column: 1 / -1;
}
body.ost-fp-page .ost-fp-directory-detail-copy,
body.ost-fp-page .ost-fp-directory-media,
body.ost-fp-page .ost-fp-directory-profile-media {
    min-width: 0;
}
body.ost-fp-page .ost-fp-directory-media,
body.ost-fp-page .ost-fp-directory-profile-media {
    display: grid;
    gap: 14px;
    align-content: start;
}
body.ost-fp-page .ost-fp-directory-media-hero,
body.ost-fp-page .ost-fp-directory-profile-hero {
    width: 100%;
    aspect-ratio: 4 / 3;
    overflow: hidden;
    background: #D8CEC3;
}
body.ost-fp-page .ost-fp-directory-media-hero img,
body.ost-fp-page .ost-fp-directory-profile-hero img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}
body.ost-fp-page .ost-fp-directory-logo-plate {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    min-height: 92px;
    box-sizing: border-box;
    padding: 18px 22px;
    overflow: hidden;
    background: #FAF6F1;
}
body.ost-fp-page .ost-fp-directory-logo-plate img {
    display: block;
    width: auto;
    height: auto;
    max-width: min(75%, 220px);
    max-height: 64px;
    object-fit: contain;
    object-position: center;
}

/* Full Place profile: introductory content/media share the first row; all
   relationship and Available-at-this-Place content remains full width below. */
body.ost-fp-page .ost-fp-directory-profile-overview {
    margin: 0 0 30px;
    padding: 28px 0 30px;
    border-bottom: 1px solid #E8DDD1;
}
body.ost-fp-page .ost-fp-directory-profile-overview.has-media {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 32px;
    align-items: start;
}
body.ost-fp-page .ost-fp-directory-profile-overview .ost-fp-directory-profile-intro {
    margin: 0 !important;
    padding: 0 !important;
    border-bottom: 0 !important;
}
body.ost-fp-page .ost-fp-directory-profile-overview .ost-fp-directory-description {
    max-width: none;
}

@media (max-width: 760px) {
    body.ost-fp-page .ost-fp-directory-detail-panel.has-media,
    body.ost-fp-page .ost-fp-directory-profile-overview.has-media {
        grid-template-columns: 1fr;
    }
    body.ost-fp-page .ost-fp-directory-profile-overview.has-media {
        gap: 24px;
    }
}

@media (prefers-reduced-motion: reduce) {
    .ost-fp-partner-identity-overlay {
        transition: none !important;
    }
}


/* ==========================================================================
   v0.7.32 — Access/Integrations preview consistency + Partner entry spacing
   ========================================================================== */

/* Partner entry uses the earlier accepted Direct-card action separation. The
   generic Direct surface rule later increased .ost-fp-direct-view-actions to
   20px for Integrations; the Access action does not need that extra offset. */
body.ost-fp-page .ost-fp-partner-entry-presentation-card .ost-fp-direct-view-actions {
    margin-top: 14px !important;
}


/* ==========================================================================
   v0.7.33 — verified contained saves + preview/layout parity
   ========================================================================== */

/* Partner entry footer follows the established Direct attribution hierarchy. */
.ost-fp-partner-identity-attribution strong {
    font-weight: 400;
}

/* Integrations and Access previews use a compact neutral stage. The iframe or
   preview component is allowed to report/render its natural content height. */
body.ost-fp-page .ost-fp-direct-preview-stage {
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 300px;
}
body.ost-fp-page .ost-fp-direct-preview-stage iframe {
    height: 240px;
    min-height: 120px;
    max-height: none;
}

/* Touchpoints outer workflow occupies the same available portal width as
   Access and Integrations. Existing inner control and artboard widths remain. */
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-touchpoint-output {
    width: 100% !important;
    max-width: none !important;
}


/* ==========================================================================
   v0.7.35 — exact Touchpoints preview-stage parity for Access + Integrations
   ========================================================================== */

/* Touchpoints is the canonical preview-canvas standard: neutral stage,
   28px desktop breathing space (18px on compact layouts), and natural
   content height once the preview object is ready. */
body.ost-fp-page .ost-fp-direct-preview-stage {
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    min-height: 300px !important;
    height: auto !important;
    padding: 28px !important;
    box-sizing: border-box !important;
    overflow: hidden !important;
}
body.ost-fp-page .ost-fp-direct-preview-stage.ost-fp-preview-sized {
    min-height: 0 !important;
}
body.ost-fp-page .ost-fp-direct-preview-stage iframe {
    display: block !important;
    width: 100% !important;
    height: 240px;
    min-height: 0 !important;
    max-height: none !important;
    border: 0 !important;
    background: transparent !important;
    overflow: hidden !important;
}
@media (max-width: 640px) {
    body.ost-fp-page .ost-fp-direct-preview-stage {
        padding: 18px !important;
    }
}


/* Touchpoints contained save/reset buttons use the canonical AJAX spinner while
   retaining their dimensions and fading the label beneath the spinner. */
body.ost-fp-page .ost-fp-partner-touchpoints button.ost-fp-ajax-loading {
    position: relative !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints button.ost-fp-button.ost-fp-ajax-loading {
    color: rgba(250,246,241,.35) !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints button.ost-fp-button.ost-fp-ajax-loading::after {
    border-color: rgba(250,246,241,.35) !important;
    border-top-color: #FAF6F1 !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints button.ost-fp-button-secondary.ost-fp-ajax-loading {
    color: rgba(39,39,39,.35) !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-touchpoint-mutation-notice] {
    margin: 0 0 18px !important;
}

/* ========================================================================== 
   v0.7.39 — production Partner-entry parity + canonical public benefit display
   ========================================================================== */

/* The live Partner-entry/member-return dialog must remain visually identical to
   the isolated Access preview even when the host WordPress/theme stylesheet has
   broad heading, button or anchor rules. These are component-boundary resets,
   not a second presentation system. */
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-dialog {
    width: min(570px, 100%) !important;
    box-sizing: border-box !important;
    background: var(--ost-fpd-bg, #FAF6F1) !important;
    color: var(--ost-fpd-text, #272727) !important;
    border: 1px solid var(--ost-fpd-border, #D8CEC3) !important;
    border-radius: var(--ost-fpd-radius, 2px) !important;
    font-family: var(--ost-fpd-font, "Hanken Grotesk", Arial, sans-serif) !important;
    font-weight: 300 !important;
    line-height: 1.45 !important;
    text-align: left !important;
}
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-dialog.has-hero {
    width: min(920px, 100%) !important;
}
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-content {
    box-sizing: border-box !important;
    padding: 28px !important;
    color: var(--ost-fpd-text, #272727) !important;
}
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-name {
    margin: 0 34px 12px 0 !important;
    padding: 0 !important;
    color: var(--ost-fpd-text, #272727) !important;
    font: inherit !important;
    font-size: 14px !important;
    font-weight: 300 !important;
    line-height: 1.45 !important;
}
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-content h2 {
    margin: 0 34px 12px 0 !important;
    padding: 0 !important;
    color: var(--ost-fpd-text, #272727) !important;
    font-family: inherit !important;
    font-size: 20px !important;
    font-weight: 400 !important;
    line-height: 1.35 !important;
    letter-spacing: 0 !important;
    text-transform: none !important;
}
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-description {
    margin: 0 0 12px !important;
    padding: 0 !important;
    color: var(--ost-fpd-text, #272727) !important;
    font-family: inherit !important;
    font-size: 16px !important;
    font-weight: 300 !important;
    line-height: 1.5 !important;
}
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-actions {
    display: flex !important;
    flex-wrap: wrap !important;
    gap: 10px !important;
    margin: 20px 0 0 !important;
    padding: 0 !important;
}
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-action {
    all: unset !important;
    box-sizing: border-box !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    min-height: 36px !important;
    height: 36px !important;
    padding: 0 14px !important;
    border: 0 !important;
    border-radius: var(--ost-fpd-radius, 2px) !important;
    cursor: pointer !important;
    font-family: inherit !important;
    font-size: 14px !important;
    font-weight: 400 !important;
    line-height: 1 !important;
    letter-spacing: 0 !important;
    text-transform: uppercase !important;
    text-align: center !important;
    text-decoration: none !important;
}
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-action--primary {
    background: var(--ost-fpd-primary-bg, #272727) !important;
    color: var(--ost-fpd-primary-text, #FAF6F1) !important;
}
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-action--secondary {
    background: var(--ost-fpd-secondary-bg, #E8DDD1) !important;
    color: var(--ost-fpd-secondary-text, #272727) !important;
}
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-close {
    all: unset !important;
    position: absolute !important;
    z-index: 3 !important;
    right: 14px !important;
    top: 10px !important;
    width: 32px !important;
    height: 32px !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    color: var(--ost-fpd-text, #272727) !important;
    cursor: pointer !important;
    font-family: inherit !important;
    font-size: 22px !important;
    font-weight: 300 !important;
    line-height: 1 !important;
}
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-attribution {
    margin: 20px 0 0 !important;
    padding: 12px 0 0 !important;
    border-top: 1px solid var(--ost-fpd-border, #D8CEC3) !important;
    color: var(--ost-fpd-text, #272727) !important;
    font-family: inherit !important;
    font-size: 12px !important;
    font-weight: 300 !important;
    line-height: 1.4 !important;
    opacity: .72 !important;
}
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-attribution strong {
    font-weight: 400 !important;
}
.ost-fp-partner-identity-direct-runtime {
    position: absolute !important;
    width: 0 !important;
    height: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
    overflow: visible !important;
}

/* One public-facing Partner Benefit grammar across Direct, Directory, Place
   profiles and the hosted Direct fallback. */
body.ost-fp-page .ost-fp-public-benefit-summary > p {
    margin: 0 0 12px !important;
}
body.ost-fp-page .ost-fp-public-benefit-list {
    display: grid;
    gap: 12px;
    margin: 0;
}
body.ost-fp-page .ost-fp-public-benefit-item {
    margin: 0;
    padding: 0;
}
body.ost-fp-page .ost-fp-public-benefit-item .ost-fp-directory-check-row {
    font-size: 14px !important;
    line-height: 1.5 !important;
}
body.ost-fp-page .ost-fp-public-benefit-requirements {
    display: grid;
    gap: 2px;
    margin: 2px 0 0 calc(1em + 8px);
    font-size: 11.5px;
    font-weight: 300;
    line-height: 1.35;
    opacity: .72;
}
body.ost-fp-page .ost-fp-public-benefit-requirements > span {
    display: block;
}
body.ost-fp-page .ost-fp-public-benefit-item--profile .ost-fp-directory-check-row h4 {
    margin: 0 !important;
    padding: 0 !important;
    font: inherit !important;
    font-size: 16px !important;
    font-weight: 400 !important;
    line-height: 1.45 !important;
}
body.ost-fp-page .ost-fp-benefit-item > .ost-fp-public-benefit-item--profile {
    margin-bottom: 12px;
}

/* Hosted Book Direct is a resilient deep-link/fallback page. It follows the
   Directory/Direct hierarchy, including the established expanded-row frame tone. */
body.ost-fp-page .ost-fp-hosted-direct .ost-fp-hosted-direct-header {
    display: block;
    margin: 0 0 18px;
}
body.ost-fp-page .ost-fp-hosted-direct .ost-fp-hosted-direct-header h2 {
    margin: 0 0 10px !important;
}
body.ost-fp-page .ost-fp-hosted-direct .ost-fp-hosted-direct-place {
    margin: 0 !important;
    font-size: 16px;
    font-weight: 300;
}
body.ost-fp-page .ost-fp-hosted-direct-card {
    margin: 0;
    padding: 24px;
    border: 1px solid #D8CEC3;
    background: #F3ECE4;
}
body.ost-fp-page .ost-fp-hosted-direct-card .ost-fp-hosted-direct-status {
    margin-top: 24px !important;
}
body.ost-fp-page .ost-fp-hosted-direct-actions {
    margin-top: 20px;
}
body.ost-fp-page .ost-fp-hosted-direct-actions .ost-fp-form-actions {
    margin: 0 !important;
}

@media (max-width: 480px) {
    html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-content {
        padding: 22px !important;
    }
    html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-actions {
        display: grid !important;
        grid-template-columns: 1fr !important;
    }
    html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-action {
        width: 100% !important;
    }
    body.ost-fp-page .ost-fp-hosted-direct-card {
        padding: 18px;
    }
}

/* v0.7.41 — Explore Places signed-in/signed-out benefit spacing parity. The
 * description-to-benefits relationship must not depend on a later Status line. */
body.ost-fp-page .ost-fp-directory-detail-copy > p + .ost-fp-directory-benefit-summary {
    margin-top: 12px;
}

/* v0.7.47 — consolidated R7 presentation refinements. */
body.ost-fp-page .ost-fp-partner-identity-attribution,
body.ost-fp-page .ost-fp-touchpoint-artboard-attribution {
    display: flex !important;
    align-items: center !important;
    justify-content: space-between !important;
    gap: 14px !important;
}
.ost-fp-footer-vmark {
    display: block !important;
    width: 18px !important;
    max-width: 18px !important;
    height: auto !important;
    flex: 0 0 18px !important;
    color: currentColor !important;
    opacity: .48 !important;
}
body.ost-fp-page .ost-fp-direct-ready-state > .ost-fp-direct-code-label,
body.ost-fp-page .ost-fp-direct-opened-state > .ost-fp-direct-code-label {
    margin: 0 0 4px !important;
}
body.ost-fp-page .ost-fp-direct-ready-state > .ost-fp-direct-code-value,
body.ost-fp-page .ost-fp-direct-opened-state > .ost-fp-direct-code-value {
    margin-top: 0 !important;
}

/* v0.7.50 — final R7 Access preview/footer alignment refinements. */
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-attribution {
    display: flex !important;
    align-items: center !important;
    justify-content: space-between !important;
    gap: 16px !important;
}
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-attribution > span {
    min-width: 0 !important;
}
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-attribution .ost-fp-footer-vmark {
    width: 18px !important;
    max-width: 18px !important;
    height: auto !important;
    flex: 0 0 18px !important;
    margin: 0 0 0 auto !important;
    align-self: center !important;
}

/* The production-parity Access preview remains functionally inert, but its
   buttons must retain the same tonal hover/focus feedback as Direct previews.
   The !important opacity is required because the host-hardening rule resets
   all button properties with all: unset !important. */
html body #ost-fp-partner-identity-overlay-preview .ost-fp-partner-identity-action:hover,
html body #ost-fp-partner-identity-overlay-preview .ost-fp-partner-identity-action:focus {
    opacity: .86 !important;
}

/* v0.7.51 — member Dashboard renewal guidance stacks beneath the canonical credit proposition. */
.ost-fp-renewal-guidance {
    flex-direction: column;
    align-items: flex-start;
}
.ost-fp-renewal-guidance p + p {
    margin-top: 6px;
}

/* ========================================================================== 
   v0.7.52 — optional website-style matching + explicit Access typography
   ========================================================================== */
body.ost-fp-page .ost-fp-presentation-with-match {
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) auto !important;
    gap: 12px !important;
    align-items: end !important;
}
body.ost-fp-page .ost-fp-presentation-with-match > label {
    display: block !important;
    min-width: 0 !important;
    width: 100% !important;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-presentation-with-match > label > select {
    display: block !important;
    width: 100% !important;
    max-width: none !important;
    margin-top: 6px !important;
}
body.ost-fp-page .ost-fp-match-website-style {
    min-height: 36px !important;
    height: 36px !important;
    margin: 0 !important;
    padding-top: 0 !important;
    padding-bottom: 0 !important;
    white-space: nowrap !important;
    align-self: end !important;
}
body.ost-fp-page .ost-fp-partner-entry-config-grid > .ost-fp-presentation-with-match,
body.ost-fp-page .ost-fp-direct-surface[data-ost-fp-direct-surface="standalone"] > .ost-fp-direct-config-grid > .ost-fp-presentation-with-match {
    grid-column: span 2;
}
body.ost-fp-page .ost-fp-direct-style-grid select[name="entry_typography"] {
    width: 100% !important;
    max-width: none !important;
    height: 44px !important;
    min-height: 44px !important;
    max-height: 44px !important;
    box-sizing: border-box !important;
}
@media (max-width: 620px) {
    body.ost-fp-page .ost-fp-partner-entry-config-grid > .ost-fp-presentation-with-match,
    body.ost-fp-page .ost-fp-direct-surface[data-ost-fp-direct-surface="standalone"] > .ost-fp-direct-config-grid > .ost-fp-presentation-with-match {
        grid-column: auto;
    }
    body.ost-fp-page .ost-fp-presentation-with-match {
        grid-template-columns: 1fr !important;
        align-items: start !important;
    }
    body.ost-fp-page .ost-fp-match-website-style {
        justify-self: start !important;
    }
}


/* ==========================================================================
   v0.7.53 — responsive Typography / Corner radius allocation
   ========================================================================== */
/*
 * Presentation controls keep the established 620px / three-column row
 * system. The second row allocates Typography across two grid tracks and
 * Corner radius across one track (approximately 66% / 33%), rather than
 * assigning either control a one-off pixel width. Touchpoints is unchanged.
 */
body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-direct-style-grid__typography {
    grid-column: span 2 !important;
    width: 100% !important;
    min-width: 0 !important;
    max-width: none !important;
}
body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-direct-style-grid__corner {
    grid-column: span 1 !important;
    width: 100% !important;
    min-width: 0 !important;
    max-width: none !important;
}
body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-direct-style-grid__typography > label > select,
body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-direct-style-grid__corner > label > input[type="number"] {
    width: 100% !important;
    min-width: 0 !important;
    max-width: none !important;
    flex-basis: auto !important;
    box-sizing: border-box !important;
}
@media (max-width: 640px) {
    body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-direct-style-grid__typography,
    body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-direct-style-grid__corner {
        grid-column: auto !important;
    }
}

/* ==========================================================================
   v0.7.54 — Direct field parity + shared responsive presentation geometry
   ========================================================================== */
/*
 * Existing booking journey and Standalone Direct use the same two-track
 * configuration geometry. Each ordinary field therefore occupies one equal
 * responsive track; no individual Status / Presentation / Width / Layout
 * width is assigned. This supersedes the Standalone Presentation span used
 * only to compensate for the former three-track layout.
 */
body.ost-fp-page .ost-fp-direct-surface[data-ost-fp-direct-surface="existing"] > .ost-fp-direct-config-grid,
body.ost-fp-page .ost-fp-direct-surface[data-ost-fp-direct-surface="standalone"] > .ost-fp-direct-config-grid {
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    width: min(100%, 940px) !important;
    max-width: 940px !important;
    gap: 16px 18px !important;
    align-items: start !important;
}
body.ost-fp-page .ost-fp-direct-surface[data-ost-fp-direct-surface="standalone"] > .ost-fp-direct-config-grid > .ost-fp-presentation-with-match {
    grid-column: auto !important;
}
body.ost-fp-page .ost-fp-direct-surface[data-ost-fp-direct-surface="existing"] > .ost-fp-direct-config-grid > .ost-fp-field,
body.ost-fp-page .ost-fp-direct-surface[data-ost-fp-direct-surface="standalone"] > .ost-fp-direct-config-grid > .ost-fp-field {
    width: 100% !important;
    min-width: 0 !important;
    max-width: none !important;
}

/* Corner radius follows the same ordinary control geometry as the numeric
 * Touchpoint Appearance fields. Its width is supplied by the one-third grid
 * track, not by the historical 120px compact-control exception. */
body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-direct-style-grid__corner input[type="number"][name="entry_corner_radius"],
body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-direct-style-grid__corner input[type="number"][name="existing_corner_radius"],
body.ost-fp-page .ost-fp-direct-style-grid > .ost-fp-direct-style-grid__corner input[type="number"][name="standalone_corner_radius"] {
    display: block !important;
    width: 100% !important;
    min-width: 0 !important;
    max-width: none !important;
    height: 44px !important;
    min-height: 44px !important;
    max-height: 44px !important;
    flex: 0 1 auto !important;
    flex-basis: auto !important;
    box-sizing: border-box !important;
}

/* Access and Integrations already use the accepted compact presentation
 * break: multi-column rows remain intact through 641px and stack at 640px.
 * Touchpoints now uses that same rule, replacing its former 760px 3→2 and
 * 540px 2→1 sequence. */
@media (min-width: 641px) {
    body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-form-row--2 {
        grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    }
    body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-form-row--3 {
        grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
    }
}
@media (max-width: 640px) {
    body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-form-row--2,
    body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-form-row--3 {
        grid-template-columns: minmax(0, 1fr) !important;
    }
}

@media (max-width: 620px) {
    body.ost-fp-page .ost-fp-direct-surface[data-ost-fp-direct-surface="existing"] > .ost-fp-direct-config-grid,
    body.ost-fp-page .ost-fp-direct-surface[data-ost-fp-direct-surface="standalone"] > .ost-fp-direct-config-grid {
        grid-template-columns: minmax(0, 1fr) !important;
        width: 100% !important;
        max-width: none !important;
    }
}

/* ==========================================================================
   v0.7.55 — field-system consolidation + controlled website-style source modal
   ========================================================================== */

/* Access top presentation uses one ordinary working-width field. When website
   matching is available, the action occupies its own sibling track rather than
   narrowing the Presentation select. */
body.ost-fp-page .ost-fp-partner-entry-presentation-card .ost-fp-partner-entry-config-grid {
    display: grid !important;
    grid-template-columns: minmax(0, min(620px, 100%)) !important;
    width: 100% !important;
    max-width: 840px !important;
    gap: 16px !important;
    align-items: end !important;
}
body.ost-fp-page .ost-fp-partner-entry-presentation-card .ost-fp-partner-entry-config-grid--has-style-match {
    grid-template-columns: minmax(0, 620px) minmax(190px, auto) !important;
}
body.ost-fp-page .ost-fp-partner-entry-presentation-card .ost-fp-partner-entry-config-grid > .ost-fp-presentation-field {
    width: 100% !important;
    min-width: 0 !important;
    max-width: none !important;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-partner-entry-presentation-card .ost-fp-partner-entry-style-details {
    grid-column: 1 / -1 !important;
}

/* Existing and Standalone Direct keep Status / Presentation and Width / Layout
   at equal calculated widths. The optional style-match action is a third
   action track, not part of the Presentation field itself. */
body.ost-fp-page .ost-fp-direct-surface[data-ost-fp-direct-surface="existing"] > .ost-fp-direct-config-grid--has-style-match,
body.ost-fp-page .ost-fp-direct-surface[data-ost-fp-direct-surface="standalone"] > .ost-fp-direct-config-grid--has-style-match {
    grid-template-columns: repeat(2, minmax(0, 1fr)) minmax(190px, auto) !important;
    width: min(100%, 1120px) !important;
    max-width: 1120px !important;
}
body.ost-fp-page .ost-fp-direct-config-grid > .ost-fp-presentation-field {
    width: 100% !important;
    min-width: 0 !important;
    max-width: none !important;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-style-match-slot {
    min-width: 190px;
    min-height: 44px;
    display: flex;
    align-items: flex-end;
    justify-content: flex-start;
    align-self: end;
}
body.ost-fp-page .ost-fp-style-match-slot .ost-fp-match-website-style {
    width: auto !important;
    min-width: 190px !important;
}

/* Touchpoints workspace selectors use proportional responsive tracks rather
   than per-control pixel widths. */
body.ost-fp-page .ost-fp-partner-touchpoints > .ost-fp-touchpoint-selectors {
    display: grid !important;
    flex-wrap: initial !important;
    justify-content: initial !important;
    align-items: end !important;
    gap: 16px !important;
    margin: 20px 0 24px !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints > .ost-fp-touchpoint-selectors--with-location {
    grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) minmax(0, 1fr) !important;
    width: min(100%, 940px) !important;
    max-width: 940px !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints > .ost-fp-touchpoint-selectors--without-location {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    width: min(100%, 620px) !important;
    max-width: 620px !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints > .ost-fp-touchpoint-selectors .ost-fp-touchpoint-selector,
body.ost-fp-page .ost-fp-partner-touchpoints > .ost-fp-touchpoint-selectors .ost-fp-touchpoint-selector--location,
body.ost-fp-page .ost-fp-partner-touchpoints > .ost-fp-touchpoint-selectors .ost-fp-touchpoint-selector--type,
body.ost-fp-page .ost-fp-partner-touchpoints > .ost-fp-touchpoint-selectors .ost-fp-touchpoint-selector--use {
    width: 100% !important;
    min-width: 0 !important;
    max-width: none !important;
    flex: none !important;
    flex-basis: auto !important;
    margin: 0 !important;
}

/* Touchpoints ordinary fields explicitly consume the canonical Fourth Pleat
   front-end field appearance rather than relying on theme form defaults. */
body.ost-fp-page .ost-fp-partner-touchpoints label.ost-fp-r72-field > select,
body.ost-fp-page .ost-fp-partner-touchpoints label.ost-fp-r72-field > input[type="text"],
body.ost-fp-page .ost-fp-partner-touchpoints label.ost-fp-r72-field > input[type="number"],
body.ost-fp-page .ost-fp-partner-touchpoints label.ost-fp-r72-field > textarea {
    padding: .625rem .8125rem !important;
    background-color: rgba(255,255,255,.45) !important;
    border: 1px solid #E8DDD1 !important;
    border-radius: 2px !important;
    box-shadow: none !important;
    color: #272727 !important;
    font-size: 16px !important;
    font-weight: 300 !important;
    line-height: 1.4 !important;
    transition: .15s var(--easeoutcubic, ease-out) !important;
    transition-property: border-color, box-shadow, background-color !important;
    box-sizing: border-box !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints label.ost-fp-r72-field > select:focus,
body.ost-fp-page .ost-fp-partner-touchpoints label.ost-fp-r72-field > input[type="text"]:focus,
body.ost-fp-page .ost-fp-partner-touchpoints label.ost-fp-r72-field > input[type="number"]:focus,
body.ost-fp-page .ost-fp-partner-touchpoints label.ost-fp-r72-field > textarea:focus {
    outline: 0 !important;
    border-color: #D8CEC3 !important;
    background-color: rgba(255,255,255,.45) !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints label.ost-fp-r72-field > textarea {
    height: auto !important;
    min-height: 76px !important;
}

/* Website-style source modal. This modal chooses the extraction source only;
   it never saves presentation values itself. */
body.ost-fp-style-modal-open {
    overflow: hidden;
}
.ost-fp-style-source-modal[hidden] {
    display: none !important;
}
.ost-fp-style-source-modal {
    position: fixed;
    inset: 0;
    z-index: 100000;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 24px;
    box-sizing: border-box;
}
.ost-fp-style-source-modal__backdrop {
    position: absolute;
    inset: 0;
    background: rgba(39,39,39,.42);
}
.ost-fp-style-source-modal__dialog {
    position: relative;
    z-index: 1;
    width: min(100%, 620px);
    max-height: calc(100vh - 48px);
    overflow: auto;
    padding: 28px;
    box-sizing: border-box;
    background: #FAF6F1;
    border: 1px solid #D8CEC3;
    border-radius: 2px;
    color: #272727;
    box-shadow: 0 18px 54px rgba(39,39,39,.16);
    font-family: "Hanken Grotesk", Arial, sans-serif;
}
.ost-fp-style-source-modal__dialog h3 {
    margin: 0 40px 10px 0;
    font-size: 20px;
    font-weight: 400;
    line-height: 1.3;
}
.ost-fp-style-source-modal__dialog > p {
    margin: 0 0 18px;
}
.ost-fp-style-source-modal__close {
    position: absolute;
    top: 18px;
    right: 18px;
    width: 32px;
    height: 32px;
    padding: 0;
    border: 0;
    background: transparent;
    color: #272727;
    font: inherit;
    font-size: 24px;
    line-height: 32px;
    cursor: pointer;
}
.ost-fp-style-source-modal__field {
    display: flex;
    flex-direction: column;
    gap: 6px;
    width: 100%;
    margin: 0;
    font-size: 14px;
    font-weight: 300;
    line-height: 1.45;
}
.ost-fp-style-source-modal__field input {
    width: 100%;
    height: 44px;
    min-height: 44px;
    padding: .625rem .8125rem;
    background-color: rgba(255,255,255,.45);
    border: 1px solid #E8DDD1;
    border-radius: 2px;
    box-shadow: none;
    color: #272727;
    font: inherit;
    font-size: 16px;
    font-weight: 300;
    line-height: 1.4;
    box-sizing: border-box;
}
.ost-fp-style-source-modal__field input:focus {
    outline: 0;
    border-color: #D8CEC3;
}
.ost-fp-style-source-modal__help,
.ost-fp-style-source-modal__last,
.ost-fp-style-source-modal__error {
    margin: 8px 0 0 !important;
    font-size: 14px;
    line-height: 1.45;
}
.ost-fp-style-source-modal__error {
    font-weight: 500;
    color: #B84A42;
}
.ost-fp-style-source-modal__actions {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    gap: 10px;
    margin-top: 22px;
}

@media (max-width: 760px) {
    body.ost-fp-page .ost-fp-partner-touchpoints > .ost-fp-touchpoint-selectors--with-location,
    body.ost-fp-page .ost-fp-partner-touchpoints > .ost-fp-touchpoint-selectors--without-location {
        grid-template-columns: minmax(0, 1fr) !important;
        width: 100% !important;
        max-width: none !important;
    }
}
@media (max-width: 640px) {
    body.ost-fp-page .ost-fp-partner-entry-presentation-card .ost-fp-partner-entry-config-grid,
    body.ost-fp-page .ost-fp-partner-entry-presentation-card .ost-fp-partner-entry-config-grid--has-style-match,
    body.ost-fp-page .ost-fp-direct-surface[data-ost-fp-direct-surface="existing"] > .ost-fp-direct-config-grid--has-style-match,
    body.ost-fp-page .ost-fp-direct-surface[data-ost-fp-direct-surface="standalone"] > .ost-fp-direct-config-grid--has-style-match {
        grid-template-columns: minmax(0, 1fr) !important;
        width: 100% !important;
        max-width: none !important;
    }
    body.ost-fp-page .ost-fp-style-match-slot {
        min-width: 0;
        min-height: 0;
        justify-self: start;
    }
    body.ost-fp-page .ost-fp-style-match-slot .ost-fp-match-website-style {
        min-width: 0 !important;
    }
    .ost-fp-style-source-modal {
        padding: 16px;
    }
    .ost-fp-style-source-modal__dialog {
        padding: 22px;
        max-height: calc(100vh - 32px);
    }
    .ost-fp-style-source-modal__actions {
        justify-content: flex-start;
    }
}

/* ==========================================================================
   v0.7.57 — Website-style action/modal parity + Custom-only visibility
   ========================================================================== */

/* The optional action must obey the HTML hidden state even though Fourth Pleat
   action-button rules use display:inline-flex!important. Hiding the slot also
   removes the action track when Fourth Pleat default is selected. */
body.ost-fp-page .ost-fp-style-match-slot[hidden],
body.ost-fp-page .button.ost-fp-match-website-style[hidden] {
    display: none !important;
}

/* MATCH WEBSITE PALETTE retains the canonical 36px ordinary-button geometry;
   its surrounding action slot owns alignment with the taller Presentation field. */
body.ost-fp-page .button.ost-fp-button-secondary.ost-fp-match-website-style {
    min-height: 36px !important;
    height: 36px !important;
    margin-top: 0 !important;
    align-self: end !important;
}

/* Website-style source modal uses the accepted Direct/Access modal language:
   560px shell, standard backdrop/border/shadow, canonical close control and
   left-aligned primary/secondary action row. */
.ost-fp-style-source-modal__backdrop {
    background: rgba(39,39,39,.46) !important;
}
.ost-fp-style-source-modal__dialog {
    width: min(560px, 100%) !important;
    max-height: calc(100vh - 48px) !important;
    padding: 28px !important;
    background: #FAF6F1 !important;
    color: #272727 !important;
    border: 1px solid #D8CEC3 !important;
    border-radius: 2px !important;
    box-shadow: 0 18px 52px rgba(39,39,39,.18) !important;
    font-family: "Hanken Grotesk", Arial, sans-serif !important;
    font-weight: 300 !important;
}
.ost-fp-style-source-modal__dialog h3 {
    margin: 0 34px 12px 0 !important;
    padding: 0 !important;
    color: #272727 !important;
    font-family: inherit !important;
    font-size: 20px !important;
    font-weight: 400 !important;
    line-height: 1.35 !important;
    letter-spacing: 0 !important;
    text-transform: none !important;
}
.ost-fp-style-source-modal__dialog > p {
    margin: 0 0 18px !important;
    padding: 0 !important;
    font-family: inherit !important;
    font-size: 16px !important;
    font-weight: 300 !important;
    line-height: 1.5 !important;
}
.ost-fp-style-source-modal__close {
    all: unset !important;
    position: absolute !important;
    z-index: 3 !important;
    right: 14px !important;
    top: 10px !important;
    width: 32px !important;
    height: 32px !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    color: #272727 !important;
    cursor: pointer !important;
    font-family: inherit !important;
    font-size: 22px !important;
    font-weight: 300 !important;
    line-height: 1 !important;
}
.ost-fp-style-source-modal__actions {
    display: flex !important;
    flex-wrap: wrap !important;
    align-items: center !important;
    justify-content: flex-start !important;
    gap: 10px !important;
    margin: 20px 0 0 !important;
    padding: 0 !important;
}
body.ost-fp-page .ost-fp-style-source-modal__actions .button.ost-fp-button,
body.ost-fp-page .ost-fp-style-source-modal__actions .button.ost-fp-button-secondary {
    margin-top: 0 !important;
    min-height: 36px !important;
    height: 36px !important;
    align-self: center !important;
}

@media (max-width: 640px) {
    .ost-fp-style-source-modal__dialog {
        padding: 22px !important;
        max-height: calc(100vh - 32px) !important;
    }
    .ost-fp-style-source-modal__actions {
        justify-content: flex-start !important;
    }
}


/* ==========================================================================
   v0.7.58 — Website-style control geometry, modal text restoration + scroll stability
   ========================================================================== */

/* The direct configuration grid itself supplies row gaps. Remove the legacy
   field bottom margin from its immediate fields so the optional action aligns
   to the actual Presentation select rather than to the field's margin box. */
body.ost-fp-page .ost-fp-partner-entry-presentation-card .ost-fp-partner-entry-config-grid > .ost-fp-field,
body.ost-fp-page .ost-fp-direct-surface[data-ost-fp-direct-surface="existing"] > .ost-fp-direct-config-grid > .ost-fp-field,
body.ost-fp-page .ost-fp-direct-surface[data-ost-fp-direct-surface="standalone"] > .ost-fp-direct-config-grid > .ost-fp-field {
    margin-bottom: 0 !important;
}

/* Matching availability reserves the action track regardless of Presentation
   mode. Only the button is hidden, so Status/Presentation widths never jump. */
body.ost-fp-page .ost-fp-style-match-slot {
    align-self: end !important;
    align-items: flex-end !important;
}

/* Restore the source modal's accepted v0.7.55 text/shell rhythm. v0.7.57's
   corrected close control and button baseline are intentionally retained. */
.ost-fp-style-source-modal {
    overscroll-behavior: contain;
}
.ost-fp-style-source-modal__dialog {
    width: min(100%, 620px) !important;
    max-height: calc(100vh - 48px) !important;
    overflow: auto !important;
    padding: 28px !important;
    background: #FAF6F1 !important;
    border: 1px solid #D8CEC3 !important;
    border-radius: 2px !important;
    color: #272727 !important;
    box-shadow: 0 18px 54px rgba(39,39,39,.16) !important;
    font-family: "Hanken Grotesk", Arial, sans-serif !important;
    font-weight: inherit !important;
    overscroll-behavior: contain;
}
.ost-fp-style-source-modal__dialog h3 {
    margin: 0 40px 10px 0 !important;
    padding: 0 !important;
    font-size: 20px !important;
    font-weight: 400 !important;
    line-height: 1.3 !important;
}
.ost-fp-style-source-modal__dialog > p {
    margin: 0 0 18px !important;
    padding: 0 !important;
    font-size: inherit !important;
    font-weight: inherit !important;
    line-height: inherit !important;
}
.ost-fp-style-source-modal__actions {
    display: flex !important;
    flex-wrap: wrap !important;
    align-items: center !important;
    justify-content: flex-end !important;
    gap: 10px !important;
    margin: 22px 0 0 !important;
    padding: 0 !important;
}
body.ost-fp-page .ost-fp-style-source-modal__actions .button.ost-fp-button,
body.ost-fp-page .ost-fp-style-source-modal__actions .button.ost-fp-button-secondary {
    margin-top: 0 !important;
    min-height: 36px !important;
    height: 36px !important;
    align-self: center !important;
}

@media (max-width: 640px) {
    .ost-fp-style-source-modal__dialog {
        padding: 22px !important;
        max-height: calc(100vh - 32px) !important;
    }
    .ost-fp-style-source-modal__actions {
        justify-content: flex-start !important;
    }
}

/* ==========================================================================
   v0.7.59 — website-style button state/alignment + exact modal help rhythm
   ========================================================================== */

/* Historical alignment layer: the reserved action track follows the 44px
   Presentation field while the action itself remains a canonical 36px button. */
body.ost-fp-page .ost-fp-style-match-slot {
    height: var(--ost-fp-field-height, 44px) !important;
    min-height: var(--ost-fp-field-height, 44px) !important;
    align-self: end !important;
    align-items: stretch !important;
}
body.ost-fp-page .ost-fp-style-match-slot > .button.ost-fp-button-secondary.ost-fp-match-website-style:not(.ost-fp-nav-continuation):not(.ost-fp-table-action) {
    height: 36px !important;
    min-height: 36px !important;
    max-height: 36px !important;
    margin: 0 !important;
    align-self: stretch !important;
    box-sizing: border-box !important;
}

/* Global Fourth Pleat action rules use display:inline-flex!important. This
   higher-specificity hidden rule guarantees Custom-only visibility while the
   empty action track remains reserved, so field widths never change. */
body.ost-fp-page .ost-fp-style-match-slot > .button.ost-fp-button-secondary.ost-fp-match-website-style:not(.ost-fp-nav-continuation):not(.ost-fp-table-action)[hidden] {
    display: none !important;
    visibility: hidden !important;
    pointer-events: none !important;
}

/* Restore the exact v0.7.55 source-modal helper treatment after the broader
   paragraph rules introduced in later refinements. This intentionally gives
   the explanatory line its original smaller text and top breathing space. */
.ost-fp-style-source-modal__dialog > p.ost-fp-style-source-modal__help,
.ost-fp-style-source-modal__dialog > p.ost-fp-style-source-modal__last,
.ost-fp-style-source-modal__dialog > p.ost-fp-style-source-modal__error {
    margin: 8px 0 0 !important;
    font-size: 14px !important;
    font-weight: 300 !important;
    line-height: 1.45 !important;
}
.ost-fp-style-source-modal__dialog > p.ost-fp-style-source-modal__error {
    font-weight: 500 !important;
    color: #B84A42 !important;
}

/* ==========================================================================
   v0.7.60 — restore canonical action-button geometry for website-style action
   ========================================================================== */

/* MATCH WEBSITE PALETTE is an ordinary Fourth Pleat secondary action and MUST
   retain the globally established 36px action-button geometry. Alignment with
   the adjacent 44px Presentation field is achieved by centring that unchanged
   36px button inside a 44px action slot; the button itself is never resized to
   mimic a form control. */
body.ost-fp-page .ost-fp-style-match-slot {
    height: var(--ost-fp-field-height, 44px) !important;
    min-height: var(--ost-fp-field-height, 44px) !important;
    align-self: end !important;
    align-items: center !important;
}
body.ost-fp-page .ost-fp-style-match-slot > .button.ost-fp-button-secondary.ost-fp-match-website-style:not(.ost-fp-nav-continuation):not(.ost-fp-table-action) {
    height: var(--ost-fp-button-height, 36px) !important;
    min-height: var(--ost-fp-button-height, 36px) !important;
    max-height: var(--ost-fp-button-height, 36px) !important;
    padding: 0 14px !important;
    margin: 0 !important;
    align-self: auto !important;
    box-sizing: border-box !important;
}

/* Preserve the accepted Custom-only behaviour despite the global
   display:inline-flex!important action rule. The slot remains reserved so the
   Status/Presentation field widths do not change between modes. */
body.ost-fp-page .ost-fp-style-match-slot > .button.ost-fp-button-secondary.ost-fp-match-website-style:not(.ost-fp-nav-continuation):not(.ost-fp-table-action)[hidden] {
    display: none !important;
    visibility: hidden !important;
    pointer-events: none !important;
}


/* ========================================================================== 
   v0.7.62 — website palette selection; accepted modal/button/field standards
   ========================================================================== */

/* The accepted source modal extends vertically with the same measured-height
   motion used by established Fourth Pleat reveal panels. Width, shell, close
   control, typography and action-button geometry remain unchanged. */
.ost-fp-style-source-modal__dialog {
    transition: height 520ms cubic-bezier(.22,1,.36,1), opacity 420ms ease !important;
    will-change: height;
}

/* The initial CANCEL is removed only after a palette is successfully fetched;
   FETCH PALETTE remains in its original right-aligned action position. */
body.ost-fp-page .ost-fp-style-source-modal__fetch-actions .button[data-ost-fp-style-source-initial-cancel][hidden] {
    display: none !important;
}

/* Standard contained AJAX spinner on the clicked primary FETCH PALETTE action.
   The canonical 36px button geometry is retained. */
body.ost-fp-page .ost-fp-style-source-modal__actions button.ost-fp-button.ost-fp-ajax-loading {
    position: relative !important;
    color: rgba(250,246,241,.35) !important;
}
body.ost-fp-page .ost-fp-style-source-modal__actions button.ost-fp-button.ost-fp-ajax-loading::after {
    width: 22px !important;
    height: 22px !important;
    margin: -11px 0 0 -11px !important;
    border-color: rgba(250,246,241,.35) !important;
    border-top-color: #FAF6F1 !important;
}

.ost-fp-style-source-modal__results[hidden] {
    display: none !important;
}
.ost-fp-style-source-modal__results {
    margin: 24px 0 0 !important;
    padding: 22px 0 0 !important;
    border-top: 1px solid #E8DDD1 !important;
}
.ost-fp-style-source-modal__palette-label,
.ost-fp-style-source-modal__assignment-label {
    display: block !important;
    margin: 0 !important;
    font-family: inherit !important;
    font-size: 14px !important;
    font-weight: 300 !important;
    line-height: 1.45 !important;
    color: #272727 !important;
}
.ost-fp-style-source-modal__palette-label {
    margin-bottom: 6px !important;
}

/* Website palette: the same 44px field geometry, neutral field surface and
   border/hover treatment used by Fourth Pleat's canonical colour controls. */
.ost-fp-style-source-modal__palette {
    display: grid !important;
    grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
    gap: 10px !important;
    margin: 0 0 22px !important;
}
.ost-fp-style-source-modal__palette-item {
    appearance: none !important;
    -webkit-appearance: none !important;
    display: flex !important;
    align-items: center !important;
    justify-content: flex-start !important;
    gap: 10px !important;
    width: 100% !important;
    min-width: 0 !important;
    height: 44px !important;
    min-height: 44px !important;
    margin: 0 !important;
    padding: 5px 10px 5px 5px !important;
    border: 1px solid #B8B8B8 !important;
    border-radius: 0 !important;
    background: #FAF6F1 !important;
    box-shadow: none !important;
    color: #272727 !important;
    cursor: pointer !important;
    box-sizing: border-box !important;
    font-family: inherit !important;
    font-size: 13px !important;
    font-weight: 300 !important;
    line-height: 1 !important;
    text-align: left !important;
}
.ost-fp-style-source-modal__palette-item:hover,
.ost-fp-style-source-modal__palette-item:focus,
.ost-fp-style-source-modal__palette-item:focus-visible {
    border-color: #8F8A85 !important;
    outline: none !important;
    box-shadow: none !important;
}
.ost-fp-style-source-modal__palette-swatch {
    display: block !important;
    flex: 0 0 32px !important;
    width: 32px !important;
    height: 32px !important;
    border: 1px solid rgba(39,39,39,.34) !important;
    box-sizing: border-box !important;
}

/* Background/Text/Accent are deliberately assignments, not inferred roles.
   The active assignment follows the established tab convention: regular 300
   weight becomes 400 for the current selection. Its value control uses the
   existing 44px field/swatch treatment. */
.ost-fp-style-source-modal__assignments {
    display: grid !important;
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
    column-gap: 16px !important;
    row-gap: 0 !important;
    margin: 0 !important;
    padding: 22px 0 0 !important;
    border-top: 1px solid #E8DDD1 !important;
}
.ost-fp-style-source-modal__assignment {
    appearance: none !important;
    -webkit-appearance: none !important;
    display: block !important;
    width: 100% !important;
    max-width: none !important;
    margin: 0 !important;
    padding: 0 !important;
    border: 0 !important;
    background: transparent !important;
    box-shadow: none !important;
    color: #272727 !important;
    cursor: pointer !important;
    text-align: left !important;
    font-family: inherit !important;
}
.ost-fp-style-source-modal__assignment.is-current .ost-fp-style-source-modal__assignment-label {
    font-weight: 400 !important;
}
.ost-fp-style-source-modal__assignment-control {
    display: flex !important;
    align-items: center !important;
    gap: 10px !important;
    width: 100% !important;
    max-width: none !important;
    height: 44px !important;
    min-height: 44px !important;
    margin: 6px 0 0 !important;
    padding: 5px 10px 5px 5px !important;
    border: 1px solid #B8B8B8 !important;
    border-radius: 0 !important;
    background: #FAF6F1 !important;
    box-sizing: border-box !important;
    font-size: 14px !important;
    font-weight: 300 !important;
    line-height: 1 !important;
}
.ost-fp-style-source-modal__assignment:hover .ost-fp-style-source-modal__assignment-control,
.ost-fp-style-source-modal__assignment:focus .ost-fp-style-source-modal__assignment-control,
.ost-fp-style-source-modal__assignment:focus-visible .ost-fp-style-source-modal__assignment-control,
.ost-fp-style-source-modal__assignment.is-current .ost-fp-style-source-modal__assignment-control {
    border-color: #8F8A85 !important;
}
.ost-fp-style-source-modal__assignment:focus,
.ost-fp-style-source-modal__assignment:focus-visible {
    outline: none !important;
}
.ost-fp-style-source-modal__assignment-swatch {
    display: block !important;
    flex: 0 0 32px !important;
    width: 32px !important;
    height: 32px !important;
    border: 1px solid rgba(39,39,39,.34) !important;
    box-sizing: border-box !important;
}
.ost-fp-style-source-modal__apply-actions {
    justify-content: flex-end !important;
    margin-top: 32px !important;
}

@media (max-width: 640px) {
    .ost-fp-style-source-modal__palette {
        grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    }
    .ost-fp-style-source-modal__assignment,
    .ost-fp-style-source-modal__assignment-control {
        width: 100% !important;
    }
}
@media (max-width: 380px) {
    .ost-fp-style-source-modal__palette {
        grid-template-columns: 1fr !important;
    }
}
@media (prefers-reduced-motion: reduce) {
    .ost-fp-style-source-modal__dialog {
        transition: none !important;
    }
}


/* ========================================================================== 
   v0.7.65 — R7 functional closure corrections (no field-width redesign)
   ========================================================================== */
/* Last-fetched metadata belongs to the FETCH PALETTE action, not to the modal
   explanatory copy. Keep it subordinate and aligned to the action edge. */
.ost-fp-style-source-modal__fetch-actions {
    align-items: flex-start !important;
}
.ost-fp-style-source-modal__fetch-stack {
    display: flex !important;
    flex-direction: column !important;
    align-items: flex-end !important;
    flex: 0 0 auto !important;
    min-width: 0 !important;
}
.ost-fp-style-source-modal__dialog > p.ost-fp-style-source-modal__last,
.ost-fp-style-source-modal__fetch-stack > p.ost-fp-style-source-modal__last {
    margin: 6px 0 0 !important;
    padding: 0 !important;
    font-size: 12px !important;
    font-weight: 300 !important;
    line-height: 1.4 !important;
    text-align: right !important;
    color: #272727 !important;
    white-space: nowrap !important;
}

/* The source action stays right-aligned at the same compact breakpoint used by
   the lower CANCEL / APPLY PALETTE row. This supersedes the legacy generic modal
   action rule that moved actions left below 640px. */
@media (max-width: 640px) {
    .ost-fp-style-source-modal__fetch-actions,
    .ost-fp-style-source-modal__apply-actions {
        justify-content: flex-end !important;
    }
    .ost-fp-style-source-modal__assignments {
        grid-template-columns: minmax(0, 1fr) !important;
        row-gap: 16px !important;
    }
}

/* Assignment controls stack rather than squeeze. Their swatch + HEX content is
   an indivisible Fourth Pleat colour-control unit and must never wrap. */
.ost-fp-style-source-modal__assignment,
.ost-fp-style-source-modal__assignment-control,
.ost-fp-style-source-modal__assignment-control > span,
.ost-fp-style-source-modal__palette-item {
    white-space: nowrap !important;
}
.ost-fp-style-source-modal__assignment-control {
    min-width: 0 !important;
    overflow: hidden !important;
}
.ost-fp-style-source-modal__assignment-control > span:last-child {
    min-width: 0 !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
}


/* ========================================================================== 
   v0.7.67 — R7 functional closure follow-up (v0.7.66 layout experiment obsolete)
   ========================================================================== */
/* Last-fetched metadata makes the FETCH PALETTE stack taller than the adjacent
   initial CANCEL action. Align the initial action to the top of that stack so
   the two 36px buttons retain the canonical shared baseline. */
body.ost-fp-page .ost-fp-style-source-modal__fetch-actions > .button[data-ost-fp-style-source-initial-cancel] {
    align-self: flex-start !important;
}

/* Palette results now reveal through the canonical Fourth Pleat height-motion
   runtime. The dialog itself remains a normal scroll container; do not animate
   or clean up a second competing fixed dialog height. */
.ost-fp-style-source-modal__dialog {
    will-change: auto !important;
}


/* v0.7.69 — targeted UI consistency from accepted v0.7.67 baseline.
   Preserve established specialist layouts; standardise only recurring controls
   that were genuinely inconsistent. wp-admin remains untouched. */
body.ost-fp-page {
    --ost-fp-shared-presentation-width: 447px;
    --ost-fp-shared-location-width: 390px;
    --ost-fp-shared-location-secondary-width: 250px;
}

/* Access Presentation uses the exact field width produced by the accepted
   Integrations Status / Presentation + MATCH WEBSITE PALETTE composition:
   1120px canvas - 190px action - two 18px gaps = 894px / 2 = 447px.
   The action track remains reserved in both modes, so opening Presentation
   controls or switching Presentation mode cannot resize the select. */
body.ost-fp-page .ost-fp-partner-entry-presentation-card .ost-fp-partner-entry-config-grid {
    grid-template-columns: minmax(0, var(--ost-fp-shared-presentation-width)) !important;
    width: min(100%, var(--ost-fp-shared-presentation-width)) !important;
    max-width: var(--ost-fp-shared-presentation-width) !important;
    column-gap: 18px !important;
    row-gap: 16px !important;
}
body.ost-fp-page .ost-fp-partner-entry-presentation-card .ost-fp-partner-entry-config-grid--has-style-match {
    grid-template-columns: minmax(0, 1fr) minmax(190px, max-content) !important;
    width: min(100%, 655px) !important;
    max-width: 655px !important;
}
body.ost-fp-page .ost-fp-partner-entry-presentation-card .ost-fp-partner-entry-config-grid > .ost-fp-presentation-field {
    width: 100% !important;
    min-width: 0 !important;
    max-width: none !important;
}
body.ost-fp-page .ost-fp-partner-entry-presentation-card .ost-fp-partner-entry-style-details {
    grid-column: 1 / -1 !important;
}

/* Location is the same established 390px control wherever it appears alone
   or as the first control in the Touchpoints Location / Type / Use row. Type
   and Use retain their established 250px compact geometry. */
body.ost-fp-page .ost-fp-touchpoint-selectors.ost-fp-location-selectors {
    width: min(100%, var(--ost-fp-shared-location-width)) !important;
    max-width: var(--ost-fp-shared-location-width) !important;
}
body.ost-fp-page .ost-fp-touchpoint-selectors.ost-fp-location-selectors .ost-fp-touchpoint-selector--location {
    width: 100% !important;
    max-width: none !important;
    flex-basis: auto !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints > .ost-fp-touchpoint-selectors--with-location {
    grid-template-columns:
        minmax(0, var(--ost-fp-shared-location-width))
        minmax(0, var(--ost-fp-shared-location-secondary-width))
        minmax(0, var(--ost-fp-shared-location-secondary-width)) !important;
    width: min(100%, 922px) !important;
    max-width: 922px !important;
}

@media (max-width: 760px) {
    body.ost-fp-page .ost-fp-partner-touchpoints > .ost-fp-touchpoint-selectors--with-location {
        grid-template-columns: minmax(0, 1fr) !important;
        width: 100% !important;
        max-width: none !important;
    }
}
@media (max-width: 640px) {
    body.ost-fp-page .ost-fp-partner-entry-presentation-card .ost-fp-partner-entry-config-grid,
    body.ost-fp-page .ost-fp-partner-entry-presentation-card .ost-fp-partner-entry-config-grid--has-style-match {
        grid-template-columns: minmax(0, 1fr) !important;
        width: 100% !important;
        max-width: none !important;
    }
}


/* ========================================================================== 
   v0.8.10 — canonical Fourth Pleat front-end typography hierarchy
   CONSISTENCY-08. This is the shared role-based typography layer. Historical
   declarations remain in place until the separately gated CONSISTENCY-05 CSS
   cleanup; these final rules define the current canonical computed hierarchy.
   Generated guest artefacts, transactional email markup, wp-admin and icon /
   special display values remain explicit exceptions documented in the platform
   standards.
   ========================================================================== */
body.ost-fp-page,
.ost-fp-confirm-modal,
.ost-fp-style-source-modal,
.ost-fp-partner-identity-overlay {
    --ost-fp-type-micro: 12px;
    --ost-fp-type-compact: 13px;
    --ost-fp-type-secondary: 14px;
    --ost-fp-type-body: 16px;
    --ost-fp-type-subheading: 17px;
    --ost-fp-type-section: 18px;
    --ost-fp-type-modal-heading: 20px;
    --ost-fp-type-profile-heading: clamp(24px, 2.4vw, 30px);
}

/* Body / control / table baseline. */
body.ost-fp-page,
body.ost-fp-page .ost-fp-box p:not(.ost-fp-muted):not(.ost-fp-small):not(.ost-fp-workspace-note):not(.ost-fp-empty-state):not(.ost-fp-direct-code-value),
body.ost-fp-page .ost-fp-box li,
body.ost-fp-page .ost-fp-box td,
body.ost-fp-page .ost-fp-box th,
body.ost-fp-page .ost-fp-form .ost-fp-checkbox,
body.ost-fp-page .ost-fp-form .ost-fp-checkbox-text,
body.ost-fp-page .ost-fp-actions-tab,
body.ost-fp-page .ost-fp-directory-toggle,
body.ost-fp-page .ost-fp-confirm-dialog p,
body.ost-fp-page .ost-fp-directory-description,
body.ost-fp-page .ost-fp-public-benefit-item--profile .ost-fp-directory-check-row h4 {
    font-size: var(--ost-fp-type-body) !important;
}

/* Primary introductory copy. These sentences introduce a page, section or action and remain at ordinary body scale. */
body.ost-fp-page .ost-fp-intro,
body.ost-fp-page .ost-fp-workspace-intro,
.ost-fp-style-source-modal .ost-fp-intro,
.ost-fp-partner-identity-overlay .ost-fp-intro {
    font-size: var(--ost-fp-type-body) !important;
    font-weight: 300;
    line-height: 1.55;
    opacity: 1 !important;
    color: inherit !important;
}
body.ost-fp-page .ost-fp-workspace-intro {
    margin: 10px 0 0 !important;
    line-height: 1.5;
}

/* Secondary / helper / metadata / conventional field-label role. */
body.ost-fp-page .ost-fp-muted,
body.ost-fp-page .ost-fp-small,
body.ost-fp-page .ost-fp-workspace-note,
body.ost-fp-page .ost-fp-empty-state,
body.ost-fp-page .ost-fp-state-list dt,
body.ost-fp-page .ost-fp-action-product-meta,
body.ost-fp-page .ost-fp-direct-code-label,
body.ost-fp-page .ost-fp-actions-pagination,
body.ost-fp-page .ost-fp-member-direct-status,
body.ost-fp-page .ost-fp-directory-profile-intro .ost-fp-directory-meta,
body.ost-fp-page .ost-fp-directory-access,
body.ost-fp-page .ost-fp-directory-access .ost-fp-checkmark,
body.ost-fp-page .ost-fp-public-benefit-item .ost-fp-directory-check-row,
body.ost-fp-page .ost-fp-preview-stage.ost-fp-preview-error::after,
body.ost-fp-page .ost-fp-form .ost-fp-field > label:not(.ost-fp-floating-label):not(.ost-fp-checkbox),
body.ost-fp-page .ost-fp-form label:not(.ost-fp-floating-label):not(.ost-fp-checkbox):not(.screen-reader-text):not(.ost-fp-sr-only),
body.ost-fp-page .ost-fp-partner-location-field > label,
body.ost-fp-page label.ost-fp-r72-field {
    font-size: var(--ost-fp-type-secondary) !important;
}

/* Compact data/support labels. Action-button labels retain the canonical action typography even when geometry is compact. */
body.ost-fp-page .ost-fp-form .ost-fp-password-requirements,
body.ost-fp-page .ost-fp-directory-profile .ost-fp-benefit-eligibility,
body.ost-fp-page .ost-fp-colour-hex-row > span,
.ost-fp-style-source-modal__palette-item {
    font-size: var(--ost-fp-type-compact) !important;
}

/* Microcopy and deliberately compact navigation/support text. */
body.ost-fp-page .ost-fp-member-nav-links .ost-fp-nav-continuation,
body.ost-fp-page .ost-fp-touchpoint-artboard-meta,
body.ost-fp-page .ost-fp-public-benefit-requirements,
.ost-fp-style-source-modal__dialog > p.ost-fp-style-source-modal__last,
.ost-fp-style-source-modal__fetch-stack > p.ost-fp-style-source-modal__last,
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-attribution {
    font-size: var(--ost-fp-type-micro) !important;
}

/* Internal detail/subsection headings. */
body.ost-fp-page .ost-fp-accordion-panel h3,
body.ost-fp-page .ost-fp-accordion-panel h4,
body.ost-fp-page .ost-fp-report-panel h4,
body.ost-fp-page .ost-fp-section-subheading,
body.ost-fp-page .ost-fp-operational-item h4,
body.ost-fp-page .ost-fp-benefit-item h4,
body.ost-fp-page .ost-fp-place-communication-preferences > h3,
body.ost-fp-page .ost-fp-actions-summary strong,
body.ost-fp-page .ost-fp-booking-continuation > h4,
body.ost-fp-page .ost-fp-touchpoint-group > h2,
body.ost-fp-page .ost-fp-touchpoint-card > h3,
body.ost-fp-page .ost-fp-integration-card > h3,
body.ost-fp-page .ost-fp-direct-controls-heading h4,
body.ost-fp-page .ost-fp-preview-heading h4,
body.ost-fp-page .ost-fp-preview-distribution > h4,
body.ost-fp-page .ost-fp-continuation-item h4,
body.ost-fp-page .ost-fp-direct-account-item h4,
body.ost-fp-page .ost-fp-member-direct-item-head h4,
body.ost-fp-page .ost-fp-directory-profile .ost-fp-benefit-item h4 {
    font-size: var(--ost-fp-type-subheading) !important;
    font-weight: 400 !important;
}

/* Structural section / accordion headings. */
body.ost-fp-page .ost-fp-accordion-summary,
body.ost-fp-page .ost-fp-workspace-block > h3:first-child,
body.ost-fp-page .ost-fp-workspace-block > h4:first-child,
body.ost-fp-page .ost-fp-consumption-summary > h3,
body.ost-fp-page .ost-fp-consumption-record > h3,
body.ost-fp-page .ost-fp-consumption-history > h3,
body.ost-fp-page .ost-fp-continuations > h3,
body.ost-fp-page .ost-fp-held-benefits > h3,
body.ost-fp-page .ost-fp-member-notifications .ost-fp-front-header h3,
body.ost-fp-page .ost-fp-partner-benefits > h3,
body.ost-fp-page .ost-fp-return-pathway > h3,
body.ost-fp-page .ost-fp-direct-destination > h3,
body.ost-fp-page .ost-fp-box > h3:first-child {
    font-size: var(--ost-fp-type-section) !important;
}

/* Modal/prominent contained headings. */
.ost-fp-confirm-dialog h2,
body.ost-fp-page .ost-fp-direct-code-modal .ost-fp-confirm-dialog h2,
.ost-fp-style-source-modal__dialog h3,
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-content h2 {
    font-size: var(--ost-fp-type-modal-heading) !important;
    font-weight: 400 !important;
}

/* Public Place profile: one responsive hero, then normal Fourth Pleat hierarchy. */
body.ost-fp-page .ost-fp-directory-profile-intro h2 {
    font-size: var(--ost-fp-type-profile-heading) !important;
    font-weight: 300 !important;
}
body.ost-fp-page .ost-fp-directory-profile .ost-fp-partner-benefits > h3,
body.ost-fp-page .ost-fp-directory-profile .ost-fp-return-pathway > h3 {
    font-size: var(--ost-fp-type-section) !important;
    font-weight: 400 !important;
}

/* Reporting uses ordinary-weight row labels and emphasised values. */
body.ost-fp-page .ost-fp-report-table tbody th {
    font-weight: 300 !important;
}
body.ost-fp-page .ost-fp-report-table tbody td {
    font-weight: 400 !important;
}

/* Display-code typography is an established exception and must not be flattened by body-copy rules. */
body.ost-fp-page p.ost-fp-direct-code-value,
body.ost-fp-page .ost-fp-box p.ost-fp-direct-code-value {
    font-size: 24px !important;
    line-height: 1.25 !important;
    font-weight: 500 !important;
    letter-spacing: .08em !important;
}

/* Explicit role-specific exceptions retained by contract:
   - .ost-fp-direct-code-value / segmented code inputs: display code typography;
   - .ost-fp-card strong: large statistical display values;
   - .ost-fp-card span: retain established statistical-card label presentation;
   - modal close glyphs and accordion +/- controls: icon geometry, not text roles. */

/* v0.8.13: supporting copy beneath a checkbox aligns with the checkbox label text. */
body.ost-fp-page .ost-fp-checkbox-support {
    margin: -16px 0 8px 28px !important;
}


/* v0.8.14: Partner Reporting hierarchy.
   Row labels are ordinary-weight body text; report values and panel titles carry emphasis.
   This selector intentionally outranks the historical generic Fourth Pleat table-heading rule. */
body.ost-fp-page .ost-fp-box .ost-fp-report-table tbody th {
    font-weight: 300 !important;
}
body.ost-fp-page .ost-fp-box .ost-fp-report-table tbody td {
    font-weight: 400 !important;
}
body.ost-fp-page .ost-fp-report-panel h4 {
    font-weight: 400 !important;
}

/* v0.8.21 — R8 rich Campaign authoring, hosted Campaign surface and production-faithful preview. */
body.ost-fp-page .ost-fp-campaign-editor {
    margin: 0 0 18px;
}
body.ost-fp-page .ost-fp-campaign-editor-label {
    display: block;
    margin: 0 0 6px;
    font-size: var(--ost-fp-type-secondary);
    font-weight: 400;
    line-height: 1.35;
}
body.ost-fp-page .ost-fp-campaign-toolbar {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin: 0 0 8px;
}
body.ost-fp-page .ost-fp-campaign-toolbar .button {
    min-width: 36px;
    padding-left: 10px !important;
    padding-right: 10px !important;
    font-size: var(--ost-fp-type-micro) !important;
}
body.ost-fp-page .ost-fp-campaign-rich-field {
    min-height: 250px;
    width: 100%;
    padding: 13px;
    border: 1px solid #b7b7b7;
    background: #fff;
    color: #272727;
    font-size: var(--ost-fp-type-body);
    font-weight: 300;
    line-height: 1.5;
    outline: none;
    overflow-wrap: anywhere;
}
body.ost-fp-page .ost-fp-campaign-rich-field:focus {
    border-color: #272727;
    box-shadow: none;
}
body.ost-fp-page .ost-fp-campaign-rich-field > :first-child,
body.ost-fp-page .ost-fp-campaign-content > :first-child {
    margin-top: 0;
}
body.ost-fp-page .ost-fp-campaign-rich-field > :last-child,
body.ost-fp-page .ost-fp-campaign-content > :last-child {
    margin-bottom: 0;
}
body.ost-fp-page .ost-fp-campaign-rich-field img,
body.ost-fp-page .ost-fp-campaign-content img {
    display: block;
    max-width: 100%;
    height: auto;
    margin: 22px 0;
}
body.ost-fp-page .ost-fp-campaign-rich-field h2,
body.ost-fp-page .ost-fp-campaign-content h2 {
    margin: 26px 0 12px;
    font-size: var(--ost-fp-type-modal-heading) !important;
    font-weight: 400;
    line-height: 1.3;
}
body.ost-fp-page .ost-fp-campaign-rich-field h3,
body.ost-fp-page .ost-fp-campaign-content h3 {
    margin: 22px 0 10px;
    font-size: var(--ost-fp-type-section) !important;
    font-weight: 400;
    line-height: 1.35;
}
body.ost-fp-page .ost-fp-campaign-rich-field p,
body.ost-fp-page .ost-fp-campaign-content p,
body.ost-fp-page .ost-fp-campaign-content li {
    font-size: var(--ost-fp-type-body) !important;
    line-height: 1.55;
}
body.ost-fp-page .ost-fp-campaign-rich-field ul,
body.ost-fp-page .ost-fp-campaign-rich-field ol,
body.ost-fp-page .ost-fp-campaign-content ul,
body.ost-fp-page .ost-fp-campaign-content ol {
    margin: 14px 0 18px 24px;
}
body.ost-fp-page .ost-fp-campaign-rich-field hr,
body.ost-fp-page .ost-fp-campaign-content hr {
    margin: 28px 0;
    border: 0;
    border-top: 1px solid rgba(39,39,39,.22);
}
body.ost-fp-page .ost-fp-campaign-editor-help {
    margin: 8px 0 0 !important;
}
body.ost-fp-page .ost-fp-campaign-preview {
    margin: 24px 0 0;
}
body.ost-fp-page .ost-fp-campaign-preview > h4 {
    margin: 0 0 6px;
    font-size: var(--ost-fp-type-subheading) !important;
    font-weight: 400;
}
body.ost-fp-page .ost-fp-campaign-preview > .ost-fp-muted {
    margin: 0 0 10px;
}
body.ost-fp-page .ost-fp-campaign-preview-stage {
    position: relative;
    min-height: 360px;
    border: 1px solid rgba(39,39,39,.18);
    background: #fff;
}
body.ost-fp-page .ost-fp-campaign-preview-frame,
.ost-fp-admin .ost-fp-campaign-preview-frame {
    display: block;
    width: 100%;
    min-height: 620px;
    border: 0;
    background: #fff;
}
body.ost-fp-page .ost-fp-campaign-preview-status {
    min-height: 20px;
    margin: 7px 0 0 !important;
}
body.ost-fp-page .ost-fp-member-campaign-shell {
    width: 100%;
}
body.ost-fp-page .ost-fp-campaign-back {
    margin: 0 0 16px;
}
body.ost-fp-page .ost-fp-campaign-page {
    width: 100%;
}
body.ost-fp-page .ost-fp-campaign-header {
    margin: 0 0 28px;
}
body.ost-fp-page .ost-fp-campaign-logo {
    display: flex;
    align-items: center;
    min-height: 44px;
    margin: 0 0 20px;
}
body.ost-fp-page .ost-fp-campaign-logo img {
    display: block;
    width: auto;
    max-width: 160px;
    max-height: 72px;
    object-fit: contain;
}
body.ost-fp-page .ost-fp-campaign-source {
    margin: 0 0 8px;
    font-size: var(--ost-fp-type-secondary) !important;
    font-weight: 400;
}
body.ost-fp-page .ost-fp-campaign-header > h2 {
    margin: 0 0 12px;
    font-size: var(--ost-fp-type-profile-heading) !important;
    font-weight: 300;
    line-height: 1.2;
}
body.ost-fp-page .ost-fp-campaign-actions {
    margin-top: 28px !important;
}
body.ost-fp-page .ost-fp-campaign-attribution {
    margin-top: 34px;
    padding-top: 14px;
    border-top: 1px solid rgba(39,39,39,.18);
    font-size: var(--ost-fp-type-compact);
    font-weight: 300;
}
body.ost-fp-page .ost-fp-campaign-attribution strong {
    font-weight: 400;
}
body.ost-fp-page .ost-fp-communication-history-campaign-content {
    margin-top: 18px;
    padding-top: 18px;
    border-top: 1px solid rgba(39,39,39,.14);
}
body.ost-fp-page .ost-fp-communication-history-campaign-content > h4 {
    margin: 0 0 10px;
    font-size: var(--ost-fp-type-subheading) !important;
    font-weight: 400;
}
@media (max-width: 640px) {
    body.ost-fp-page .ost-fp-campaign-toolbar {
        gap: 5px;
    }
    body.ost-fp-page .ost-fp-campaign-preview-frame,
    .ost-fp-admin .ost-fp-campaign-preview-frame {
        min-height: 520px;
    }
}

/* v0.8.22 — controlled Campaign editor correction: sticky tools, structured sections, alignment, proportional image sizing and hosted Campaign presentation. */
body.ost-fp-page .ost-fp-campaign-editor {
    position: relative;
}
body.ost-fp-page .ost-fp-campaign-toolbar {
    position: sticky;
    top: 12px;
    z-index: 16;
    align-items: center;
    padding: 8px 0;
    margin: 0 0 8px;
    background: #FAF6F1;
    border-bottom: 1px solid rgba(39,39,39,.14);
}
body.ost-fp-page .ost-fp-campaign-toolbar-group {
    display: inline-flex;
    flex-wrap: wrap;
    gap: 6px;
    align-items: center;
}
body.ost-fp-page .ost-fp-campaign-toolbar-group + .ost-fp-campaign-toolbar-group {
    margin-left: 10px;
    padding-left: 10px;
    border-left: 1px solid rgba(39,39,39,.16);
}
body.ost-fp-page .ost-fp-campaign-toolbar .button strong {
    font-weight: 600 !important;
}
body.ost-fp-page .ost-fp-campaign-toolbar .button em {
    font-style: italic !important;
}
body.ost-fp-page textarea[data-ost-fp-campaign-body] {
    display: none !important;
}
body.ost-fp-page .ost-fp-campaign-editor-canvas {
    position: relative;
    display: block;
    min-height: 220px;
}
body.ost-fp-page .ost-fp-campaign-editor-section {
    margin: 0 0 14px;
    border: 1px solid rgba(39,39,39,.2);
    background: #fff;
}
body.ost-fp-page .ost-fp-campaign-editor-section-bar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 12px;
    min-height: 34px;
    padding: 5px 10px;
    border-bottom: 1px solid rgba(39,39,39,.14);
    background: #F3ECE4;
    font-size: var(--ost-fp-type-compact);
    font-weight: 400;
}
body.ost-fp-page .ost-fp-campaign-editor-section-bar button.sleev-link {
    appearance: none;
    padding: 0;
    border: 0;
    background: transparent;
    color: #272727;
    font: inherit;
    font-size: var(--ost-fp-type-micro);
    cursor: pointer;
}
body.ost-fp-page .ost-fp-campaign-editor-section .ost-fp-campaign-rich-field {
    min-height: 190px;
    border: 0;
}
body.ost-fp-page .ost-fp-campaign-editor-section .ost-fp-campaign-rich-field:focus {
    border: 0;
    outline: 1px solid #272727;
    outline-offset: -1px;
}
body.ost-fp-page .ost-fp-campaign-editor-columns {
    display: grid;
    grid-template-columns: minmax(0,1fr) minmax(0,1fr);
    gap: 0;
}
body.ost-fp-page .ost-fp-campaign-editor-column {
    min-width: 0;
}
body.ost-fp-page .ost-fp-campaign-editor-column + .ost-fp-campaign-editor-column {
    border-left: 1px solid rgba(39,39,39,.14);
}
body.ost-fp-page .ost-fp-campaign-image-slot {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 8px;
    min-height: 216px;
    padding: 14px;
    background: rgba(216,206,195,.18);
    box-sizing: border-box;
}
body.ost-fp-page .ost-fp-campaign-image-slot.has-image {
    justify-content: flex-start;
}
body.ost-fp-page .ost-fp-campaign-image-slot-button {
    margin-top: 0 !important;
}
body.ost-fp-page .ost-fp-campaign-image-slot.has-image .ost-fp-campaign-image-slot-button,
body.ost-fp-page .ost-fp-campaign-image-slot.has-image .ost-fp-campaign-image-slot-note {
    order: 2;
}
body.ost-fp-page .ost-fp-campaign-image-slot-note {
    font-size: var(--ost-fp-type-secondary) !important;
}
body.ost-fp-page .ost-fp-campaign-rich-field,
body.ost-fp-page .ost-fp-campaign-page,
body.ost-fp-page .ost-fp-campaign-page * {
    font-family: "Hanken Grotesk", Arial, sans-serif;
}
body.ost-fp-page .ost-fp-campaign-rich-field strong,
body.ost-fp-page .ost-fp-campaign-content strong,
body.ost-fp-page .ost-fp-campaign-content b {
    font-weight: 600 !important;
}
body.ost-fp-page .ost-fp-campaign-rich-field em,
body.ost-fp-page .ost-fp-campaign-content em,
body.ost-fp-page .ost-fp-campaign-rich-field i,
body.ost-fp-page .ost-fp-campaign-content i {
    font-style: italic !important;
}
body.ost-fp-page .ost-fp-campaign-rich-field h2,
body.ost-fp-page .ost-fp-campaign-content h2 {
    font-size: 28px !important;
    font-weight: 400 !important;
}
body.ost-fp-page .ost-fp-campaign-rich-field h3,
body.ost-fp-page .ost-fp-campaign-content h3 {
    font-size: 22px !important;
    font-weight: 400 !important;
}
body.ost-fp-page .ost-fp-campaign-rich-field a,
body.ost-fp-page .ost-fp-campaign-content a:not(.button) {
    color: #272727 !important;
    text-decoration: underline !important;
    text-underline-offset: 2px;
}
body.ost-fp-page .ost-fp-campaign-align-left {
    text-align: left !important;
}
body.ost-fp-page .ost-fp-campaign-align-center {
    text-align: center !important;
}
body.ost-fp-page .ost-fp-campaign-align-right {
    text-align: right !important;
}
body.ost-fp-page figure.ost-fp-campaign-image {
    position: relative;
    display: block;
    max-width: 100%;
    margin-top: 20px;
    margin-bottom: 20px;
    box-sizing: border-box;
}
body.ost-fp-page figure.ost-fp-campaign-image.ost-fp-campaign-align-left {
    margin-left: 0;
    margin-right: auto;
}
body.ost-fp-page figure.ost-fp-campaign-image.ost-fp-campaign-align-center {
    margin-left: auto;
    margin-right: auto;
}
body.ost-fp-page figure.ost-fp-campaign-image.ost-fp-campaign-align-right {
    margin-left: auto;
    margin-right: 0;
}
body.ost-fp-page figure.ost-fp-campaign-image img {
    display: block;
    width: 100%;
    max-width: 100%;
    height: auto;
    margin: 0;
}
body.ost-fp-page .ost-fp-campaign-image-resize-handle {
    position: absolute;
    z-index: 4;
    width: 10px;
    height: 10px;
    border: 1px solid #272727;
    background: #FAF6F1;
    box-sizing: border-box;
    opacity: 0;
    pointer-events: auto;
}
body.ost-fp-page figure.ost-fp-campaign-image:hover .ost-fp-campaign-image-resize-handle,
body.ost-fp-page figure.ost-fp-campaign-image.is-resizing .ost-fp-campaign-image-resize-handle {
    opacity: 1;
}
body.ost-fp-page .ost-fp-campaign-image-resize-handle.is-nw { top: -5px; left: -5px; cursor: nwse-resize; }
body.ost-fp-page .ost-fp-campaign-image-resize-handle.is-ne { top: -5px; right: -5px; cursor: nesw-resize; }
body.ost-fp-page .ost-fp-campaign-image-resize-handle.is-sw { bottom: -5px; left: -5px; cursor: nesw-resize; }
body.ost-fp-page .ost-fp-campaign-image-resize-handle.is-se { bottom: -5px; right: -5px; cursor: nwse-resize; }
body.ost-fp-page .ost-fp-campaign-content > .ost-fp-campaign-section + .ost-fp-campaign-section {
    margin-top: 28px;
}
body.ost-fp-page .ost-fp-campaign-content .ost-fp-campaign-section-split {
    display: grid;
    grid-template-columns: minmax(0,1fr) minmax(0,1fr);
    gap: 28px;
    align-items: center;
}
body.ost-fp-page .ost-fp-campaign-content .ost-fp-campaign-column {
    min-width: 0;
}
body.ost-fp-page .ost-fp-campaign-content .ost-fp-campaign-column > :first-child { margin-top: 0; }
body.ost-fp-page .ost-fp-campaign-content .ost-fp-campaign-column > :last-child { margin-bottom: 0; }
body.ost-fp-page .ost-fp-campaign-preview-stage,
body.ost-fp-page .ost-fp-campaign-preview-frame,
.ost-fp-admin .ost-fp-campaign-preview-frame {
    background: #D8CEC3;
}
body.ost-fp-page .ost-fp-campaign-page {
    padding: 32px;
    box-sizing: border-box;
    background: #D8CEC3;
    color: #272727;
}
body.ost-fp-page .ost-fp-campaign-attribution {
    display: none !important;
}

body.ost-fp-page figure.ost-fp-campaign-image.ost-fp-campaign-image-width-20 { width: 20%; }
body.ost-fp-page figure.ost-fp-campaign-image.ost-fp-campaign-image-width-25 { width: 25%; }
body.ost-fp-page figure.ost-fp-campaign-image.ost-fp-campaign-image-width-30 { width: 30%; }
body.ost-fp-page figure.ost-fp-campaign-image.ost-fp-campaign-image-width-35 { width: 35%; }
body.ost-fp-page figure.ost-fp-campaign-image.ost-fp-campaign-image-width-40 { width: 40%; }
body.ost-fp-page figure.ost-fp-campaign-image.ost-fp-campaign-image-width-45 { width: 45%; }
body.ost-fp-page figure.ost-fp-campaign-image.ost-fp-campaign-image-width-50 { width: 50%; }
body.ost-fp-page figure.ost-fp-campaign-image.ost-fp-campaign-image-width-55 { width: 55%; }
body.ost-fp-page figure.ost-fp-campaign-image.ost-fp-campaign-image-width-60 { width: 60%; }
body.ost-fp-page figure.ost-fp-campaign-image.ost-fp-campaign-image-width-65 { width: 65%; }
body.ost-fp-page figure.ost-fp-campaign-image.ost-fp-campaign-image-width-70 { width: 70%; }
body.ost-fp-page figure.ost-fp-campaign-image.ost-fp-campaign-image-width-75 { width: 75%; }
body.ost-fp-page figure.ost-fp-campaign-image.ost-fp-campaign-image-width-80 { width: 80%; }
body.ost-fp-page figure.ost-fp-campaign-image.ost-fp-campaign-image-width-85 { width: 85%; }
body.ost-fp-page figure.ost-fp-campaign-image.ost-fp-campaign-image-width-90 { width: 90%; }
body.ost-fp-page figure.ost-fp-campaign-image.ost-fp-campaign-image-width-95 { width: 95%; }
body.ost-fp-page figure.ost-fp-campaign-image.ost-fp-campaign-image-width-100 { width: 100%; }

@media (max-width: 700px) {
    body.ost-fp-page .ost-fp-campaign-toolbar {
        top: 6px;
    }
    body.ost-fp-page .ost-fp-campaign-toolbar-group + .ost-fp-campaign-toolbar-group {
        margin-left: 0;
        padding-left: 0;
        border-left: 0;
    }
    body.ost-fp-page .ost-fp-campaign-editor-columns,
    body.ost-fp-page .ost-fp-campaign-content .ost-fp-campaign-section-split {
        grid-template-columns: minmax(0,1fr);
    }
    body.ost-fp-page .ost-fp-campaign-editor-column + .ost-fp-campaign-editor-column {
        border-left: 0;
        border-top: 1px solid rgba(39,39,39,.14);
    }
    body.ost-fp-page .ost-fp-campaign-page {
        padding: 22px;
    }
}
body.ost-fp-page .ost-fp-campaign-rich-field > div:not([class]),
body.ost-fp-page .ost-fp-campaign-content .ost-fp-campaign-column > div:not([class]) {
    margin: 0 0 1em;
    font-size: var(--ost-fp-type-body) !important;
    font-weight: 300 !important;
    line-height: 1.55;
}

/* v0.8.23 — Campaign editor professional toolbar, controlled campaign palette/header and canonical preview sizing. */
body.ost-fp-page .ost-fp-campaign-presentation {
    margin: 2px 0 18px;
}
body.ost-fp-page .ost-fp-campaign-presentation .ost-fp-field {
    max-width: none;
    margin-bottom: 0;
}
body.ost-fp-page .ost-fp-campaign-toolbar {
    position: relative !important;
    top: auto !important;
    z-index: 16;
    min-height: 44px;
    padding: 6px;
    margin: 0 0 8px;
    border: 1px solid rgba(39,39,39,.18);
    background: #FAF6F1;
    box-sizing: border-box;
}
body.ost-fp-page .ost-fp-campaign-toolbar.is-floating {
    position: fixed !important;
    z-index: 1002 !important;
    margin: 0 !important;
    box-shadow: 0 6px 18px rgba(39,39,39,.12);
}
body.ost-fp-page .ost-fp-campaign-toolbar-placeholder {
    display: block;
    width: 100%;
    height: 0;
    margin: 0;
    padding: 0;
}
body.ost-fp-page .ost-fp-campaign-toolbar-group {
    gap: 4px;
}
body.ost-fp-page .ost-fp-campaign-toolbar-group + .ost-fp-campaign-toolbar-group {
    margin-left: 7px;
    padding-left: 7px;
}
body.ost-fp-page .ost-fp-campaign-toolbar .button.ost-fp-campaign-tool-button {
    appearance: none !important;
    -webkit-appearance: none !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    width: 36px !important;
    min-width: 36px !important;
    height: 36px !important;
    min-height: 36px !important;
    padding: 0 !important;
    margin: 0 !important;
    border: 1px solid rgba(39,39,39,.22) !important;
    border-radius: 2px !important;
    background: #FAF6F1 !important;
    color: #272727 !important;
    box-shadow: none !important;
    line-height: 1 !important;
}
body.ost-fp-page .ost-fp-campaign-toolbar .button.ost-fp-campaign-tool-button:hover,
body.ost-fp-page .ost-fp-campaign-toolbar .button.ost-fp-campaign-tool-button:focus-visible {
    background: #F3ECE4 !important;
    border-color: #272727 !important;
    outline: none !important;
}
body.ost-fp-page .ost-fp-campaign-tool-button svg {
    display: block;
    width: 19px;
    height: 19px;
    overflow: visible;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.6;
    stroke-linecap: round;
    stroke-linejoin: round;
    pointer-events: none;
}
body.ost-fp-page .ost-fp-campaign-tool-button svg text {
    fill: currentColor;
    stroke: none;
    font-family: Arial, sans-serif;
}
body.ost-fp-page .ost-fp-campaign-tool-button svg circle {
    fill: currentColor;
    stroke: none;
}

body.ost-fp-page .ost-fp-campaign-editor-canvas {
    background: #FFFFFF !important;
    color: var(--ost-fp-campaign-text, #272727) !important;
    border: 1px solid rgba(39,39,39,.18);
    padding: 0;
    box-sizing: border-box;
}
body.ost-fp-page .ost-fp-campaign-editor-header {
    padding: 24px 18px 22px;
    border-bottom: 1px solid rgba(39,39,39,.14);
    background: var(--ost-fp-campaign-bg, #FFFFFF);
    color: var(--ost-fp-campaign-text, #272727);
}
body.ost-fp-page .ost-fp-campaign-editor-header > h2 {
    margin: 0 !important;
    color: inherit !important;
    font-size: var(--ost-fp-type-profile-heading) !important;
    font-weight: 300 !important;
    line-height: 1.2 !important;
}
body.ost-fp-page .ost-fp-campaign-editor-header .ost-fp-campaign-source {
    color: inherit !important;
}
body.ost-fp-page .ost-fp-campaign-editor-section {
    margin: 0 !important;
    border: 0 !important;
    border-bottom: 1px solid rgba(39,39,39,.18) !important;
    background: transparent !important;
}
body.ost-fp-page .ost-fp-campaign-editor-section:last-child {
    border-bottom: 0 !important;
}
body.ost-fp-page .ost-fp-campaign-editor-section-bar {
    color: #272727;
}
body.ost-fp-page .ost-fp-campaign-rich-field {
    background: transparent !important;
    color: var(--ost-fp-campaign-text, #272727) !important;
}
body.ost-fp-page .ost-fp-campaign-rich-field a {
    color: var(--ost-fp-campaign-accent, #272727) !important;
}

body.ost-fp-page .ost-fp-campaign-page {
    width: 100%;
    max-width: none;
    margin-left: 0;
    margin-right: 0;
    padding: 40px !important;
    background: var(--ost-fp-campaign-bg, #FAF6F1) !important;
    color: var(--ost-fp-campaign-text, #272727) !important;
    border-color: #D8CEC3 !important;
    box-sizing: border-box;
}
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-source,
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-header > h2,
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-content,
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-content p,
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-content li,
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-content h2,
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-content h3 {
    color: var(--ost-fp-campaign-text, #272727) !important;
}
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-content a:not(.button) {
    color: var(--ost-fp-campaign-accent, #272727) !important;
    text-decoration: underline !important;
}
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-actions a.button.ost-fp-button-primary-outline {
    color: var(--ost-fp-campaign-accent, #272727) !important;
    border-color: var(--ost-fp-campaign-accent, #272727) !important;
    text-decoration: none !important;
}
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-actions a.button.ost-fp-button-primary-outline:hover,
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-actions a.button.ost-fp-button-primary-outline:focus {
    color: var(--ost-fp-campaign-accent, #272727) !important;
    border-color: var(--ost-fp-campaign-accent, #272727) !important;
    text-decoration: none !important;
}

body.ost-fp-page .ost-fp-campaign-header-align-left { text-align: left; }
body.ost-fp-page .ost-fp-campaign-header-align-center { text-align: center; }
body.ost-fp-page .ost-fp-campaign-header-align-right { text-align: right; }
body.ost-fp-page .ost-fp-campaign-header-align-left .ost-fp-campaign-logo { justify-content: flex-start; }
body.ost-fp-page .ost-fp-campaign-header-align-center .ost-fp-campaign-logo { justify-content: center; }
body.ost-fp-page .ost-fp-campaign-header-align-right .ost-fp-campaign-logo { justify-content: flex-end; }
body.ost-fp-page .ost-fp-campaign-logo-size-small .ost-fp-campaign-logo img { max-width: 120px; max-height: 56px; }
body.ost-fp-page .ost-fp-campaign-logo-size-standard .ost-fp-campaign-logo img { max-width: 160px; max-height: 72px; }
body.ost-fp-page .ost-fp-campaign-logo-size-large .ost-fp-campaign-logo img { max-width: 220px; max-height: 100px; }

.ost-fp-admin .ost-fp-campaign-preview-frame {
    width: 100% !important;
    max-width: none !important;
}

@media (max-width: 640px) {
    body.ost-fp-page .ost-fp-campaign-toolbar.is-floating {
        left: 10px !important;
        right: 10px !important;
        width: auto !important;
    }
    body.ost-fp-page .ost-fp-campaign-preview-stage {
        padding: 18px;
    }
    body.ost-fp-page .ost-fp-campaign-page {
        padding: 26px 22px !important;
    }
}

/* v0.8.24 — Campaign editor parity, selectable identity header, compact preview,
   deferred presentation controls and editor-only checkerboard identity surface. */
body.ost-fp-page .ost-fp-campaign-presentation-details {
    margin: 10px 0 18px;
}
body.ost-fp-page .ost-fp-campaign-presentation-details > .ost-fp-inline-disclosure-panel {
    padding-top: 18px;
}
body.ost-fp-page .ost-fp-campaign-presentation-surface {
    width: min(100%, 620px);
    max-width: 620px;
}
body.ost-fp-page .ost-fp-campaign-presentation-surface .ost-fp-direct-style-grid {
    margin-top: 0 !important;
    margin-bottom: 0 !important;
}
body.ost-fp-page .ost-fp-campaign-presentation-surface > [data-ost-fp-ajax-save-notice] {
    width: min(100%, 620px);
    max-width: 620px;
    margin-left: 0 !important;
    margin-right: 0 !important;
}

/* The campaign editing canvas is a neutral authoring surface. Presentation
   palette controls affect only the hosted preview/published Campaign. */
body.ost-fp-page .ost-fp-campaign-editor-canvas {
    width: 100% !important;
    max-width: none !important;
    min-width: 0 !important;
    padding: 0 !important;
    background: #FFFFFF !important;
    color: #272727 !important;
    border: 1px solid rgba(39,39,39,.18) !important;
    box-sizing: border-box !important;
}
body.ost-fp-page .ost-fp-campaign-editor-section-control {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 12px;
    min-height: 34px;
    padding: 5px 10px;
    border-bottom: 1px solid rgba(39,39,39,.14);
    background: #F3ECE4;
    color: #272727;
    font-size: var(--ost-fp-type-compact);
    font-weight: 400;
    box-sizing: border-box;
}
body.ost-fp-page .ost-fp-campaign-editor-section-control button.sleev-link {
    appearance: none;
    padding: 0;
    border: 0;
    background: transparent;
    color: #272727;
    font: inherit;
    font-size: var(--ost-fp-type-micro);
    cursor: pointer;
}
body.ost-fp-page .ost-fp-campaign-editor-section-bar {
    display: none !important;
}
body.ost-fp-page .ost-fp-campaign-editor-header {
    position: relative;
    padding: 24px 18px 22px !important;
    border-bottom: 0 !important;
    outline: 1px solid transparent;
    outline-offset: -1px;
    color: #272727 !important;
    background-color: #F7F7F7 !important;
    background-image:
        linear-gradient(45deg, rgba(39,39,39,.055) 25%, transparent 25%),
        linear-gradient(-45deg, rgba(39,39,39,.055) 25%, transparent 25%),
        linear-gradient(45deg, transparent 75%, rgba(39,39,39,.055) 75%),
        linear-gradient(-45deg, transparent 75%, rgba(39,39,39,.055) 75%) !important;
    background-size: 16px 16px !important;
    background-position: 0 0, 0 8px, 8px -8px, -8px 0 !important;
    box-sizing: border-box;
}
body.ost-fp-page .ost-fp-campaign-editor-header .ost-fp-campaign-source,
body.ost-fp-page .ost-fp-campaign-editor-header > h2 {
    color: #272727 !important;
}
body.ost-fp-page .ost-fp-campaign-editor-header[data-ost-fp-campaign-header-target] {
    cursor: pointer;
}
body.ost-fp-page .ost-fp-campaign-editor-header.is-selected,
body.ost-fp-page .ost-fp-campaign-editor-header:focus-visible {
    outline-color: #272727;
}
body.ost-fp-page .ost-fp-campaign-editor-section {
    width: 100% !important;
    max-width: none !important;
    min-width: 0 !important;
    margin: 0 !important;
    border: 0 !important;
    background: #FFFFFF !important;
    box-sizing: border-box !important;
}
body.ost-fp-page .ost-fp-campaign-editor-section + .ost-fp-campaign-editor-section {
    border-top: 1px dotted rgba(39,39,39,.34) !important;
}
body.ost-fp-page .ost-fp-campaign-editor-section .ost-fp-campaign-rich-field {
    display: block !important;
    width: 100% !important;
    max-width: none !important;
    min-width: 0 !important;
    min-height: 190px;
    padding: 18px !important;
    margin: 0 !important;
    border: 0 !important;
    background: #FFFFFF !important;
    color: #272727 !important;
    box-sizing: border-box !important;
}
body.ost-fp-page .ost-fp-campaign-editor-columns {
    width: 100% !important;
    max-width: none !important;
    min-width: 0 !important;
}
body.ost-fp-page .ost-fp-campaign-rich-field a {
    color: #272727 !important;
}

/* The toolbar anchor precedes the toolbar so the fixed fallback can reliably
   detect when the original toolbar position has crossed the viewport top. */
body.ost-fp-page .ost-fp-campaign-toolbar-placeholder {
    display: block;
    width: 100%;
    height: 0;
    margin: 0;
    padding: 0;
}
body.ost-fp-page .ost-fp-campaign-toolbar {
    position: relative !important;
    top: auto !important;
}
body.ost-fp-page .ost-fp-campaign-toolbar.is-floating {
    position: fixed !important;
    z-index: 1002 !important;
    margin: 0 !important;
    background: #FAF6F1 !important;
    box-shadow: 0 6px 18px rgba(39,39,39,.12);
}

/* v0.8.25 — Campaign preview opens at the full available hosted width while
   retaining the accepted 300px stage height. The viewport can be narrowed from
   either edge so the production iframe itself crosses the real responsive
   breakpoints used by the hosted Campaign renderer. */
body.ost-fp-page .ost-fp-campaign-preview-stage {
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    width: 100% !important;
    min-height: 300px !important;
    height: 300px !important;
    max-height: 300px !important;
    padding: 28px !important;
    background: #D8CEC3 !important;
    box-sizing: border-box !important;
    overflow: hidden !important;
}
body.ost-fp-page .ost-fp-campaign-preview-viewport {
    position: relative;
    width: 100%;
    max-width: 100%;
    min-width: min(280px, 100%);
    height: 240px;
    margin: 0 auto;
    box-sizing: border-box;
}
body.ost-fp-page .ost-fp-campaign-preview-stage .ost-fp-campaign-preview-frame {
    display: block !important;
    width: 100% !important;
    max-width: none !important;
    height: 240px !important;
    min-height: 240px !important;
    max-height: 240px !important;
    border: 0 !important;
    background: transparent !important;
}
body.ost-fp-page .ost-fp-campaign-preview-resize-handle {
    position: absolute;
    top: 0;
    bottom: 0;
    z-index: 4;
    display: block;
    width: 12px;
    cursor: ew-resize;
    outline: 0;
    touch-action: none;
}
body.ost-fp-page .ost-fp-campaign-preview-resize-handle.is-left { left: -18px; }
body.ost-fp-page .ost-fp-campaign-preview-resize-handle.is-right { right: -18px; }
body.ost-fp-page .ost-fp-campaign-preview-resize-handle::after {
    content: '';
    position: absolute;
    top: 50%;
    left: 50%;
    width: 2px;
    height: 38px;
    transform: translate(-50%,-50%);
    background: rgba(39,39,39,.34);
}
body.ost-fp-page .ost-fp-campaign-preview-resize-handle:hover::after,
body.ost-fp-page .ost-fp-campaign-preview-resize-handle:focus-visible::after,
body.ost-fp-page .ost-fp-campaign-preview-viewport.is-resizing .ost-fp-campaign-preview-resize-handle::after {
    background: #272727;
}
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-actions a.button,
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-actions a.button:hover,
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-actions a.button:focus {
    text-decoration: none !important;
}

body.ost-fp-page .ost-fp-campaign-media-status {
    width: min(100%, 620px);
    max-width: 620px;
    margin: 12px 0 0 !important;
}
body.ost-fp-page .ost-fp-campaign-media-status[hidden] {
    display: none !important;
}
body.ost-fp-page .ost-fp-campaign-media-status.ost-fp-success {
    color: #272727 !important;
}

@media (max-width: 640px) {
    body.ost-fp-page .ost-fp-campaign-preview-stage {
        padding: 18px !important;
    }
    body.ost-fp-page .ost-fp-campaign-toolbar.is-floating {
        left: 10px !important;
        right: 10px !important;
        width: auto !important;
    }
}


/* ==========================================================================
   v0.8.26 — Campaign Test-W preview presets + natural-height canvas
   ========================================================================== */

body.ost-fp-page .ost-fp-campaign-preview-size-controls {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    margin: 0 0 12px;
}
body.ost-fp-page .ost-fp-campaign-preview-size-button {
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    gap: 7px !important;
    min-height: 36px !important;
    height: 36px !important;
    padding: 0 12px !important;
    margin: 0 !important;
    white-space: nowrap !important;
}
body.ost-fp-page .ost-fp-campaign-preview-size-button svg {
    display: block;
    width: 18px;
    height: 18px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.5;
    stroke-linecap: round;
    stroke-linejoin: round;
    pointer-events: none;
}
body.ost-fp-page .ost-fp-campaign-preview-size-button.is-active,
body.ost-fp-page .ost-fp-campaign-preview-size-button[aria-pressed="true"] {
    border: 1px solid #272727 !important;
    box-shadow: none !important;
}

/* Follow the canonical Touchpoints preview principle: the canvas starts in a
   compact neutral state, then grows to the production content's natural height.
   Campaigns cap the overall canvas at 800px; only content beyond that cap gains
   an internal vertical scrollbar. */
body.ost-fp-page .ost-fp-campaign-preview-stage {
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    width: 100% !important;
    min-height: 300px !important;
    height: auto !important;
    max-height: 800px !important;
    padding: 28px !important;
    background: #D8CEC3 !important;
    box-sizing: border-box !important;
    overflow: hidden !important;
}
body.ost-fp-page .ost-fp-campaign-preview-viewport {
    position: relative;
    width: 100%;
    max-width: 100%;
    min-width: 0;
    height: auto;
    margin: 0 auto;
    box-sizing: border-box;
    transition: width 180ms cubic-bezier(.22,1,.36,1);
}
body.ost-fp-page .ost-fp-campaign-preview-stage .ost-fp-campaign-preview-frame {
    display: block !important;
    width: 100% !important;
    max-width: none !important;
    height: var(--ost-fp-preview-frame-height, 240px) !important;
    min-height: 240px !important;
    max-height: none !important;
    border: 0 !important;
    background: transparent !important;
}
body.ost-fp-page .ost-fp-campaign-preview-resize-handle {
    display: none !important;
}
@media (prefers-reduced-motion: reduce) {
    body.ost-fp-page .ost-fp-campaign-preview-viewport {
        transition: none;
    }
}
@media (max-width: 640px) {
    body.ost-fp-page .ost-fp-campaign-preview-stage {
        padding: 18px !important;
    }
    body.ost-fp-page .ost-fp-campaign-preview-size-button {
        padding-left: 10px !important;
        padding-right: 10px !important;
    }
}
/* ==========================================================================
   v0.8.27 — Campaign Test-W presentation grid + shared preview height bridge
   ========================================================================== */

/* Campaign Presentation controls use the same three-column 16px grid as the
   palette row. MATCH WEBSITE PALETTE occupies the third cell of row two through
   the canonical .ost-fp-style-match-slot, so it aligns to the select controls
   without Campaign-specific button geometry or spacing. */
body.ost-fp-page .ost-fp-campaign-presentation-surface .ost-fp-direct-style-grid > .ost-fp-style-match-slot {
    min-width: 0;
    width: 100%;
    max-width: none;
}



/* ==========================================================================
   v0.8.29 — Campaign post-Test-X functional refinements
   ========================================================================== */

/* v0.8.30: the Campaign toolbar uses a bounded fixed state because theme/header
   stacking contexts prevent reliable native sticky behaviour on the Messages page.
   JavaScript measures the WordPress bar plus any visible fixed/sticky site header,
   holds the toolbar below those surfaces only while the editor spans that point,
   then releases it with the editor. */
body.ost-fp-page .ost-fp-campaign-toolbar {
    position: relative !important;
    top: auto !important;
    left: auto !important;
    right: auto !important;
    width: auto !important;
    z-index: 16 !important;
    margin: 0 0 8px !important;
    background: #FAF6F1 !important;
    box-shadow: none !important;
}
body.ost-fp-page .ost-fp-campaign-toolbar.is-floating {
    position: fixed !important;
    right: auto !important;
    margin: 0 !important;
    z-index: 1001 !important;
}
body.ost-fp-page .ost-fp-campaign-toolbar-placeholder {
    display: none;
    height: 0;
    margin: 0 0 8px;
}

/* Vertical alignment is a split-section property. Editor columns stretch to
   the same row height so the focused text frame mirrors the image-column
   height and the authoring canvas shows the actual top/middle/bottom result. */
body.ost-fp-page .ost-fp-campaign-editor-columns {
    align-items: stretch !important;
}
body.ost-fp-page .ost-fp-campaign-editor-column.is-text {
    display: flex !important;
    flex-direction: column !important;
    min-height: 100% !important;
}
body.ost-fp-page .ost-fp-campaign-editor-column.is-text > .ost-fp-campaign-rich-field {
    flex: 1 1 auto !important;
    height: 100% !important;
    min-height: 100% !important;
    display: flex !important;
    flex-direction: column !important;
}
body.ost-fp-page .ost-fp-campaign-editor-section.ost-fp-campaign-valign-top .ost-fp-campaign-editor-column.is-text > .ost-fp-campaign-rich-field {
    justify-content: flex-start !important;
}
body.ost-fp-page .ost-fp-campaign-editor-section.ost-fp-campaign-valign-middle .ost-fp-campaign-editor-column.is-text > .ost-fp-campaign-rich-field {
    justify-content: center !important;
}
body.ost-fp-page .ost-fp-campaign-editor-section.ost-fp-campaign-valign-bottom .ost-fp-campaign-editor-column.is-text > .ost-fp-campaign-rich-field {
    justify-content: flex-end !important;
}
body.ost-fp-page .ost-fp-campaign-toolbar .button.ost-fp-campaign-tool-button.is-active,
body.ost-fp-page .ost-fp-campaign-toolbar .button.ost-fp-campaign-tool-button[aria-pressed="true"] {
    background: #E8DDD1 !important;
}
body.ost-fp-page .ost-fp-campaign-toolbar .button.ost-fp-campaign-tool-button:disabled {
    opacity: .38 !important;
    cursor: default !important;
}

/* Production renderer: split columns always share one row height on desktop;
   only the text column's vertical placement changes. Existing Campaigns with
   no explicit vertical class retain the historical middle alignment. */
body.ost-fp-page .ost-fp-campaign-content .ost-fp-campaign-section-split {
    align-items: stretch !important;
}
body.ost-fp-page .ost-fp-campaign-content .ost-fp-campaign-section-split .ost-fp-campaign-column-text {
    display: flex !important;
    flex-direction: column !important;
    justify-content: center !important;
}
body.ost-fp-page .ost-fp-campaign-content .ost-fp-campaign-section-split.ost-fp-campaign-valign-top .ost-fp-campaign-column-text {
    justify-content: flex-start !important;
}
body.ost-fp-page .ost-fp-campaign-content .ost-fp-campaign-section-split.ost-fp-campaign-valign-middle .ost-fp-campaign-column-text {
    justify-content: center !important;
}
body.ost-fp-page .ost-fp-campaign-content .ost-fp-campaign-section-split.ost-fp-campaign-valign-bottom .ost-fp-campaign-column-text {
    justify-content: flex-end !important;
}

/* Image preparation/upload progress is transient status, not a page notice.
   The existing contained spinner remains the primary busy indicator; actual
   errors continue to use the canonical Fourth Pleat notice component. */
body.ost-fp-page .ost-fp-campaign-media-progress {
    width: min(100%, 620px) !important;
    max-width: 620px !important;
    min-height: 0 !important;
    margin: 10px 0 0 !important;
    padding: 0 !important;
    line-height: 1.45 !important;
}
body.ost-fp-page .ost-fp-campaign-media-progress[hidden] {
    display: none !important;
}
body.ost-fp-page .ost-fp-campaign-media-status {
    margin-top: 10px !important;
}

/* Campaign actions now use the ordinary Fourth Pleat action hierarchy. */
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-actions {
    gap: 12px !important;
}


/* v0.8.30 — image-slot removal and Campaign Direct-action alignment. */
body.ost-fp-page .ost-fp-campaign-image-slot-actions {
    justify-content: center !important;
    align-items: center !important;
    gap: 12px !important;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-campaign-image-slot-remove[hidden] {
    display: none !important;
}
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-actions > [data-ost-fp-campaign-action="book-direct"],
body.ost-fp-page .ost-fp-campaign-page .ost-fp-directory-direct-launcher--inline {
    display: inline-flex !important;
    align-items: center !important;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-campaign-page .ost-fp-directory-direct-launcher--inline > .button {
    margin: 0 !important;
}

/* Held Test-W correction: inactive preview-size controls reserve a transparent
   one-pixel border; the selected control switches that exact border to the
   platform text tone. High specificity protects it from theme button rules. */
body.ost-fp-page .ost-fp-campaign-preview-size-controls > .button.ost-fp-button-secondary.ost-fp-campaign-preview-size-button {
    border: 1px solid transparent !important;
    box-shadow: none !important;
    outline: 0 !important;
}
body.ost-fp-page .ost-fp-campaign-preview-size-controls > .button.ost-fp-button-secondary.ost-fp-campaign-preview-size-button.is-active,
body.ost-fp-page .ost-fp-campaign-preview-size-controls > .button.ost-fp-button-secondary.ost-fp-campaign-preview-size-button[aria-pressed="true"] {
    border-width: 1px !important;
    border-style: solid !important;
    border-color: #272727 !important;
    box-shadow: none !important;
    outline: 0 !important;
}

@media (max-width: 700px) {
    body.ost-fp-page .ost-fp-campaign-content .ost-fp-campaign-section-split .ost-fp-campaign-column-text {
        display: block !important;
    }
    body.ost-fp-page .ost-fp-campaign-editor-column.is-text > .ost-fp-campaign-rich-field {
        min-height: 190px !important;
        height: auto !important;
    }
}

/* ==========================================================================
   v0.8.31 — Campaign pre-Test-Y editor/preview refinements
   ========================================================================== */

/* Keep the active-section descriptor with the toolbar so it remains visible
   whenever the bounded Campaign toolbar is floating. It is one component and
   occupies the right edge without changing the existing tool-group geometry. */
body.ost-fp-page .ost-fp-campaign-toolbar > .ost-fp-campaign-toolbar-section-control {
    flex: 0 0 auto;
    min-height: 36px;
    margin-left: auto;
    padding: 0 10px;
    border: 0;
    border-left: 1px solid rgba(39,39,39,.16);
    background: transparent;
    white-space: nowrap;
}
body.ost-fp-page .ost-fp-campaign-toolbar > .ost-fp-campaign-toolbar-section-control [data-ost-fp-campaign-section-control-label] {
    margin-right: 12px;
}
body.ost-fp-page .ost-fp-campaign-toolbar > .ost-fp-campaign-toolbar-section-control button.sleev-link[disabled],
body.ost-fp-page .ost-fp-campaign-toolbar > .ost-fp-campaign-toolbar-section-control button.sleev-link[hidden] {
    display: none !important;
}

/* Split-section image slots return to the established authoring order:
   image first, then the Replace/Remove actions, then the helper line. */
body.ost-fp-page .ost-fp-campaign-image-slot.has-image > figure.ost-fp-campaign-image {
    order: 1;
}
body.ost-fp-page .ost-fp-campaign-image-slot.has-image > .ost-fp-campaign-image-slot-actions {
    order: 2;
}
body.ost-fp-page .ost-fp-campaign-image-slot.has-image > .ost-fp-campaign-image-slot-note {
    order: 3;
}

/* Campaign preview uses only the canonical Touchpoints stage breathing space.
   The srcdoc no longer adds a second internal canvas margin. */
body.ost-fp-page .ost-fp-campaign-preview-stage {
    padding: 28px !important;
}
@media (max-width: 640px) {
    body.ost-fp-page .ost-fp-campaign-preview-stage {
        padding: 18px !important;
    }
}

/* Campaign actions are a generated fixed section, parallel to the locked
   header. Alignment is controlled as a group rather than per button. */
body.ost-fp-page .ost-fp-campaign-editor-actions {
    position: relative;
    width: 100%;
    padding: 24px 18px;
    background-color: #F7F7F7 !important;
    background-image:
        linear-gradient(45deg, rgba(39,39,39,.055) 25%, transparent 25%),
        linear-gradient(-45deg, rgba(39,39,39,.055) 25%, transparent 25%),
        linear-gradient(45deg, transparent 75%, rgba(39,39,39,.055) 75%),
        linear-gradient(-45deg, transparent 75%, rgba(39,39,39,.055) 75%) !important;
    background-size: 16px 16px !important;
    background-position: 0 0, 0 8px, 8px -8px, -8px 0 !important;
    outline: 1px solid transparent;
    outline-offset: -1px;
    box-sizing: border-box;
    cursor: pointer;
}
body.ost-fp-page .ost-fp-campaign-editor-actions.is-selected,
body.ost-fp-page .ost-fp-campaign-editor-actions:focus-visible {
    outline-color: #272727;
}
body.ost-fp-page .ost-fp-campaign-editor-actions .ost-fp-campaign-actions {
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-campaign-editor-actions .button[hidden],
body.ost-fp-page .ost-fp-campaign-actions > [data-ost-fp-campaign-action][hidden] {
    display: none !important;
}
body.ost-fp-page .ost-fp-campaign-actions-align-left .ost-fp-campaign-actions,
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-actions-align-left {
    justify-content: flex-start !important;
}
body.ost-fp-page .ost-fp-campaign-actions-align-center .ost-fp-campaign-actions,
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-actions-align-center {
    justify-content: center !important;
}
body.ost-fp-page .ost-fp-campaign-actions-align-right .ost-fp-campaign-actions,
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-actions-align-right {
    justify-content: flex-end !important;
}

/* Preview actions must consume the same production button classes as the
   hosted Campaign. Only navigation/Direct launch is suppressed by preview JS. */
body.ost-fp-page.ost-fp-campaign-preview-document .ost-fp-campaign-actions .button {
    text-decoration: none !important;
}
/* Preview actions are deliberately inert buttons using the exact same canonical
   primary/secondary classes as the correctly styled editor action panel. The
   hosted Campaign retains its live anchor/Direct-launcher markup. */
body.ost-fp-page.ost-fp-campaign-preview-document .ost-fp-campaign-actions > button.button {
    margin: 0 !important;
}

/* ==========================================================================
   v0.8.33 — Palette language/layout consistency + Campaign preview parity
   ========================================================================== */

/* Palette + MATCH WEBSITE PALETTE is one shared presentation-control row across
   Integrations, Access and Campaigns. Layout/Width on Standalone uses the same
   working width immediately above it. */
body.ost-fp-page .ost-fp-palette-control-row,
body.ost-fp-page .ost-fp-presentation-layout-row {
    display: grid !important;
    width: min(100%, 620px) !important;
    max-width: 620px !important;
    gap: 16px 18px !important;
    align-items: end !important;
    margin: 0 0 16px !important;
}
body.ost-fp-page .ost-fp-palette-control-row {
    grid-template-columns: minmax(0, 1fr) minmax(190px, max-content) !important;
}
body.ost-fp-page .ost-fp-presentation-layout-row {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
}
body.ost-fp-page .ost-fp-palette-control-row > .ost-fp-field,
body.ost-fp-page .ost-fp-presentation-layout-row > .ost-fp-field {
    width: 100% !important;
    min-width: 0 !important;
    max-width: none !important;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-palette-control-row > .ost-fp-style-match-slot {
    width: auto !important;
    min-width: 190px !important;
    max-width: none !important;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-direct-style-details > .ost-fp-inline-disclosure-panel > .ost-fp-intro {
    width: 100% !important;
    max-width: none !important;
}
body.ost-fp-page .ost-fp-partner-entry-presentation-card .ost-fp-partner-entry-style-details {
    width: 100% !important;
    max-width: none !important;
}
body.ost-fp-page .ost-fp-partner-entry-presentation-intro {
    width: 100% !important;
    max-width: none !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r722-presentation-help {
    font-size: var(--ost-fp-type-secondary) !important;
}
body.ost-fp-page .ost-fp-campaign-presentation-surface .ost-fp-palette-control-row {
    margin-bottom: 16px !important;
}
body.ost-fp-page .ost-fp-campaign-presentation-surface [data-ost-fp-campaign-palette-only][hidden] {
    display: none !important;
}
@media (max-width: 640px) {
    body.ost-fp-page .ost-fp-palette-control-row,
    body.ost-fp-page .ost-fp-presentation-layout-row {
        grid-template-columns: minmax(0, 1fr) !important;
        width: 100% !important;
        max-width: none !important;
    }
    body.ost-fp-page .ost-fp-palette-control-row > .ost-fp-style-match-slot {
        min-width: 0 !important;
        width: 100% !important;
    }
}



/* ==========================================================================
   v0.8.34 — Messages conventional labels/counters + exact Campaign preview actions
   ========================================================================== */

/* Messages now uses the same label-above-control working width established by
   Touchpoints content fields. These wrappers are deliberately conventional
   fields, so the shared floating-label preparer leaves them intact. */
body.ost-fp-page .ost-fp-form .ost-fp-message-field {
    width: min(100%, 620px) !important;
    max-width: 620px !important;
}
body.ost-fp-page .ost-fp-form .ost-fp-message-field > label {
    display: flex !important;
    flex-direction: column !important;
    align-items: stretch !important;
    gap: 6px !important;
    width: 100% !important;
    margin: 0 !important;
    padding: 0 !important;
}
body.ost-fp-page .ost-fp-form .ost-fp-message-field > label > input:not([type="checkbox"]):not([type="radio"]),
body.ost-fp-page .ost-fp-form .ost-fp-message-field > label > select,
body.ost-fp-page .ost-fp-form .ost-fp-message-field > label > textarea {
    width: 100% !important;
    max-width: 620px !important;
    margin-top: 0 !important;
}

/* Shared character-allowance treatment promoted from the established
   Touchpoints counted-field presentation. */
body.ost-fp-page .ost-fp-counted-field > label {
    position: relative !important;
}
body.ost-fp-page .ost-fp-counted-field > label > input[type="text"],
body.ost-fp-page .ost-fp-counted-field > label > textarea {
    padding-right: 78px !important;
    box-sizing: border-box !important;
}
body.ost-fp-page .ost-fp-counted-field > label > textarea {
    padding-bottom: 28px !important;
}
body.ost-fp-page .ost-fp-counted-field .ost-fp-character-counter {
    position: absolute !important;
    right: 10px !important;
    bottom: 8px !important;
    z-index: 2 !important;
    margin: 0 !important;
    padding: 0 0 0 5px !important;
    pointer-events: none !important;
    background: rgba(250,246,241,.94) !important;
    color: #272727 !important;
    font-size: var(--ost-fp-type-secondary,14px) !important;
    font-weight: 300 !important;
    line-height: 1.45 !important;
}
body.ost-fp-page .ost-fp-counted-field .ost-fp-character-counter--over {
    font-weight: 500 !important;
}

/* Campaign preview action controls remain inert while preserving the same
   tonal hover/focus response as the production Campaign actions. */
body.ost-fp-page.ost-fp-campaign-preview-document .ost-fp-campaign-actions > button.button:hover,
body.ost-fp-page.ost-fp-campaign-preview-document .ost-fp-campaign-actions > button.button:focus {
    opacity: .86 !important;
}

/* ==========================================================================
   v0.8.35 — Updates/Campaigns split, counted-field clearance and Campaign
   action palette parity
   ========================================================================== */

/* Counted single-line controls reserve a dedicated right-side allowance for
   the largest current counter. Multiline controls reserve a shallow bottom
   band instead, so normal copy can use the full line width without ever
   passing beneath the counter. */
body.ost-fp-page .ost-fp-counted-field > label > input[type="text"],
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r717-counted-field input[type="text"],
body.ost-fp-page .ost-fp-counted-field > label > textarea,
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r717-counted-field textarea {
    padding-right: 120px !important;
    box-sizing: border-box !important;
}
body.ost-fp-page .ost-fp-counted-field > label > textarea,
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r717-counted-field textarea {
    padding-bottom: 14px !important;
}
body.ost-fp-page .ost-fp-form .ost-fp-update-title-field > label > textarea {
    min-height: 108px !important;
    height: 108px !important;
}

/* Campaign action presentation is driven by the Campaign palette variables,
   not copied inline styles. The Fourth Pleat default keeps the established
   primary/secondary hierarchy; Custom lets the Button selection flow through
   the same hierarchy in preview and published Campaigns. */
body.ost-fp-page .ost-fp-campaign-page.ost-fp-campaign-palette-fourth-pleat .ost-fp-campaign-actions [data-ost-fp-campaign-action="view-place"].button {
    background: #E8DDD1 !important;
    color: #272727 !important;
    border: 1px solid #E8DDD1 !important;
    box-shadow: none !important;
    text-decoration: none !important;
}
body.ost-fp-page .ost-fp-campaign-page.ost-fp-campaign-palette-fourth-pleat .ost-fp-campaign-actions [data-ost-fp-campaign-action="book-direct"].button,
body.ost-fp-page .ost-fp-campaign-page.ost-fp-campaign-palette-fourth-pleat .ost-fp-campaign-actions [data-ost-fp-campaign-action="book-direct"] .button {
    background: #272727 !important;
    color: #FAF6F1 !important;
    border: 1px solid #272727 !important;
    box-shadow: none !important;
    text-decoration: none !important;
}
body.ost-fp-page .ost-fp-campaign-page.ost-fp-campaign-palette-custom .ost-fp-campaign-actions [data-ost-fp-campaign-action="view-place"].button {
    background: var(--ost-fp-campaign-bg, #FAF6F1) !important;
    background: color-mix(in srgb, var(--ost-fp-campaign-accent, #272727) 14%, var(--ost-fp-campaign-bg, #FAF6F1)) !important;
    color: var(--ost-fp-campaign-text, #272727) !important;
    border: 1px solid var(--ost-fp-campaign-accent, #272727) !important;
    border-color: color-mix(in srgb, var(--ost-fp-campaign-accent, #272727) 14%, var(--ost-fp-campaign-bg, #FAF6F1)) !important;
    box-shadow: none !important;
    text-decoration: none !important;
}
body.ost-fp-page .ost-fp-campaign-page.ost-fp-campaign-palette-custom .ost-fp-campaign-actions [data-ost-fp-campaign-action="book-direct"].button,
body.ost-fp-page .ost-fp-campaign-page.ost-fp-campaign-palette-custom .ost-fp-campaign-actions [data-ost-fp-campaign-action="book-direct"] .button {
    background: var(--ost-fp-campaign-accent, #272727) !important;
    color: var(--ost-fp-campaign-bg, #FAF6F1) !important;
    border: 1px solid var(--ost-fp-campaign-accent, #272727) !important;
    box-shadow: none !important;
    text-decoration: none !important;
}
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-actions [data-ost-fp-campaign-action] .button:hover,
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-actions [data-ost-fp-campaign-action] .button:focus,
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-actions button[data-ost-fp-campaign-action]:hover,
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-actions button[data-ost-fp-campaign-action]:focus {
    opacity: .86 !important;
}

/* Button is now the partner-facing meaning of the Campaign accent value.
   Ordinary authored hyperlinks follow the Text value and remain underlined. */
body.ost-fp-page .ost-fp-campaign-page .ost-fp-campaign-content a:not(.button),
body.ost-fp-page .ost-fp-campaign-rich-field a {
    color: var(--ost-fp-campaign-text, #272727) !important;
}

/* ==========================================================================
   v0.8.38 — external character counters + Campaign primary-button contrast
   ========================================================================== */

/* Counted-field controls use ordinary field padding. The allowance counter is
   presented as a compact adjoining tab below the control instead of occupying
   editable space inside the control. Its compact height consumes the existing
   inter-field gap so subsequent field positions are not pushed down. */
body.ost-fp-page .ost-fp-counted-field > label > input[type="text"],
body.ost-fp-page .ost-fp-counted-field > label > textarea,
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r717-counted-field input[type="text"],
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r717-counted-field textarea {
    padding: .625rem .8125rem !important;
    box-sizing: border-box !important;
}

body.ost-fp-page .ost-fp-counted-field > label,
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r717-counted-field {
    position: relative !important;
}

body.ost-fp-page .ost-fp-counted-field .ost-fp-character-counter,
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r717-counted-field .ost-fp-r72-counter {
    position: relative !important;
    right: auto !important;
    top: auto !important;
    bottom: auto !important;
    z-index: 3 !important;
    align-self: flex-end !important;
    margin: -7px 0 0 !important;
    padding: 0 4px !important;
    min-width: 0 !important;
    width: auto !important;
    border: 1px solid #E8DDD1 !important;
    border-radius: 0 0 2px 2px !important;
    background: #FAF6F1 !important;
    color: #6F6963 !important;
    font-size: 10px !important;
    font-weight: 300 !important;
    line-height: 12px !important;
    text-align: right !important;
    pointer-events: none !important;
    box-sizing: border-box !important;
}

/* Preserve the established vertical rhythm: the compact counter occupies the
   existing field gap rather than adding a new row of spacing. */
body.ost-fp-page .ost-fp-form .ost-fp-counted-field {
    margin-bottom: 1px !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r717-counted-field {
    margin-bottom: -3px !important;
}

/* BOOK DIRECT follows the canonical automatic foreground-contrast rule used
   by Fourth Pleat Direct rather than inheriting the Campaign Background value. */
body.ost-fp-page .ost-fp-campaign-page.ost-fp-campaign-palette-custom .ost-fp-campaign-actions [data-ost-fp-campaign-action="book-direct"].button,
body.ost-fp-page .ost-fp-campaign-page.ost-fp-campaign-palette-custom .ost-fp-campaign-actions [data-ost-fp-campaign-action="book-direct"] .button {
    color: var(--ost-fp-campaign-button-text, #FAF6F1) !important;
}


/* ========================================================================== 
   v0.8.39 — shared public utility navigation + responsive record tables
   ========================================================================== */

/* v0.8.40 — utility navigation is the main Fourth Pleat navigation pattern
   in compact form: left navigation links use the canonical dot separators,
   authentication sits at the far right, and the full-width underline is inherited
   from .ost-fp-member-nav. */
body.ost-fp-page .ost-fp-utility-nav {
    width: 100%;
    box-sizing: border-box;
}
body.ost-fp-page .ost-fp-utility-nav-links {
    min-width: 0;
}
body.ost-fp-page .ost-fp-state-surface > .ost-fp-utility-nav + .ost-fp-notice {
    margin-top: 0 !important;
}

@media (max-width: 700px) {
    /* The front-end table contract switches to labelled records at the
       established Campaign/mobile breakpoint. Horizontal table scrolling is
       not part of the compact Fourth Pleat experience. */
    body.ost-fp-page .ost-fp-actions-table-wrap,
    body.ost-fp-page .ost-fp-table-wrap,
    body.ost-fp-page .ost-fp-connections-table-wrap {
        overflow-x: visible !important;
        -webkit-overflow-scrolling: auto !important;
    }
    body.ost-fp-page table.ost-fp-responsive-record-table {
        display: block !important;
        width: 100% !important;
        min-width: 0 !important;
        max-width: 100% !important;
        border: 0 !important;
        border-collapse: separate !important;
        border-spacing: 0 !important;
        table-layout: auto !important;
    }
    body.ost-fp-page table.ost-fp-responsive-record-table > thead {
        position: absolute !important;
        width: 1px !important;
        height: 1px !important;
        margin: -1px !important;
        padding: 0 !important;
        overflow: hidden !important;
        clip: rect(0 0 0 0) !important;
        clip-path: inset(50%) !important;
        white-space: nowrap !important;
        border: 0 !important;
    }
    body.ost-fp-page table.ost-fp-responsive-record-table > tbody,
    body.ost-fp-page table.ost-fp-responsive-record-table > tbody > tr {
        display: block !important;
        width: 100% !important;
        max-width: 100% !important;
        box-sizing: border-box !important;
    }
    body.ost-fp-page table.ost-fp-responsive-record-table > tbody > tr:not(.ost-fp-table-detail-row) {
        margin: 0 0 14px !important;
        border: 1px solid #D8CEC3 !important;
        background: transparent !important;
    }
    body.ost-fp-page table.ost-fp-responsive-record-table > tbody > tr:not(.ost-fp-table-detail-row) > td {
        display: grid !important;
        grid-template-columns: minmax(96px, 34%) minmax(0, 1fr) !important;
        gap: 12px !important;
        align-items: start !important;
        width: 100% !important;
        min-width: 0 !important;
        padding: 11px 12px !important;
        border: 0 !important;
        border-bottom: 1px solid #E8DDD1 !important;
        box-sizing: border-box !important;
        white-space: normal !important;
        overflow-wrap: anywhere !important;
    }
    body.ost-fp-page table.ost-fp-responsive-record-table > tbody > tr:not(.ost-fp-table-detail-row) > td:last-child {
        border-bottom: 0 !important;
    }
    body.ost-fp-page table.ost-fp-responsive-record-table > tbody > tr:not(.ost-fp-table-detail-row) > td::before {
        content: attr(data-ost-fp-responsive-label);
        display: block;
        min-width: 0;
        font-weight: 400;
        color: #272727;
    }
    body.ost-fp-page table.ost-fp-responsive-record-table > tbody > tr:not(.ost-fp-table-detail-row) > td[data-ost-fp-responsive-span="1"] {
        display: block !important;
    }
    body.ost-fp-page table.ost-fp-responsive-record-table > tbody > tr:not(.ost-fp-table-detail-row) > td[data-ost-fp-responsive-span="1"]::before,
    body.ost-fp-page table.ost-fp-responsive-record-table > tbody > tr:not(.ost-fp-table-detail-row) > td[data-ost-fp-responsive-label=""]::before {
        display: none !important;
        content: none !important;
    }
    body.ost-fp-page table.ost-fp-responsive-record-table > tbody > tr.ost-fp-table-detail-row {
        margin: -14px 0 14px !important;
        border: 1px solid #D8CEC3 !important;
        border-top: 0 !important;
        background: transparent !important;
    }
    body.ost-fp-page table.ost-fp-responsive-record-table > tbody > tr.ost-fp-table-detail-row[hidden] {
        display: none !important;
    }
    body.ost-fp-page table.ost-fp-responsive-record-table > tbody > tr.ost-fp-table-detail-row > td {
        display: block !important;
        width: 100% !important;
        min-width: 0 !important;
        border: 0 !important;
        box-sizing: border-box !important;
    }
    body.ost-fp-page table.ost-fp-responsive-record-table .ost-fp-table-detail-panel {
        width: 100% !important;
        min-width: 0 !important;
        box-sizing: border-box !important;
    }
}

/* ========================================================================== 
   v0.8.42 — partner media hierarchy and navigation action-count parity
   ========================================================================== */
/* Partner-entry media follows the public Place hierarchy: identity first,
   atmosphere second. The existing two-column modal geometry is retained. */
.ost-fp-partner-identity-media {
    min-width: 0;
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    align-content: start;
}
.ost-fp-partner-identity-dialog.has-hero .ost-fp-partner-identity-media .ost-fp-partner-identity-logo-plate,
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-dialog.has-hero .ost-fp-partner-identity-media .ost-fp-partner-identity-logo-plate {
    width: 100% !important;
    max-width: none !important;
    min-height: 92px !important;
    margin: 0 !important;
    padding: 18px 22px !important;
    justify-content: center !important;
}
.ost-fp-partner-identity-dialog.has-hero .ost-fp-partner-identity-media .ost-fp-partner-identity-logo-plate img,
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-dialog.has-hero .ost-fp-partner-identity-media .ost-fp-partner-identity-logo-plate img {
    max-width: min(75%, 220px) !important;
    max-height: 64px !important;
    object-position: center !important;
}

/* ========================================================================== 
   v0.9.0–v0.9.7 — partner Media workspace
   ========================================================================== */
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-add-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
    gap: 22px;
    align-items: start;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 18px;
    align-items: start;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-card {
    min-width: 0;
    border: 1px solid #D8CEC3;
    box-sizing: border-box;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-card-image,
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-editor-preview {
    width: 100%;
    min-width: 0;
    overflow: hidden;
    box-sizing: border-box;
    background-color: #F7F7F7;
    background-image:
        linear-gradient(45deg, rgba(39,39,39,.055) 25%, transparent 25%),
        linear-gradient(-45deg, rgba(39,39,39,.055) 25%, transparent 25%),
        linear-gradient(45deg, transparent 75%, rgba(39,39,39,.055) 75%),
        linear-gradient(-45deg, transparent 75%, rgba(39,39,39,.055) 75%);
    background-size: 16px 16px;
    background-position: 0 0, 0 8px, 8px -8px, -8px 0;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-card-image {
    aspect-ratio: 4 / 3;
    display: flex;
    align-items: center;
    justify-content: center;
    border-bottom: 1px solid #D8CEC3;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-card-image img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: contain;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-card-body {
    padding: 16px 16px 0;
    min-width: 0;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-card-body > h4 {
    margin-top: 0;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-card-actions {
    display: flex;
    flex-wrap: nowrap;
    gap: 6px;
    align-items: center;
    margin-top: 14px;
    margin-bottom: 16px;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-card-actions > .ost-fp-inline-form {
    display: flex;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-partner-media .button.ost-fp-media-action-button {
    height: 36px !important;
    min-height: 36px !important;
    padding: 0 14px !important;
    gap: 7px;
    font-size: 14px !important;
    font-weight: 400 !important;
    line-height: 1 !important;
    letter-spacing: 0 !important;
    text-transform: uppercase !important;
    white-space: nowrap;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-action-button svg {
    display: block;
    width: 18px;
    height: 18px;
    flex: 0 0 18px;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.6;
    stroke-linecap: round;
    stroke-linejoin: round;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-editor {
    margin: 0 -16px;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-editor > .ost-fp-inline-disclosure-panel {
    background: transparent;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-editor > .ost-fp-inline-disclosure-panel > .ost-fp-inline-disclosure-inner {
    padding-top: 4px !important;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-editor-surface {
    box-sizing: border-box;
    width: 100%;
    padding: 20px 16px 16px;
    background: #F3ECE4;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-reference-note {
    margin: 10px 0 0;
    padding-bottom: 16px;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-palette-submit-actions {
    display: flex !important;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px;
    margin: 2px 0 0 !important;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-palette-submit-actions .ost-fp-style-match-slot {
    width: max-content;
    min-width: 0 !important;
    max-width: 100%;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-palette-submit-actions > .button.ost-fp-button {
    margin-top: 0 !important;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-paste-save-actions {
    margin-top: 16px !important;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-upload-form input[type="file"] {
    height: auto !important;
    min-height: var(--ost-fp-field-height) !important;
    padding: 8px 14px !important;
    line-height: normal !important;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-paste-zone {
    min-height: 116px;
    padding: 18px;
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: 5px;
    border: 1px dashed #D8CEC3;
    box-sizing: border-box;
    cursor: text;
    outline: 0;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-paste-zone:focus-visible,
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-paste-zone.is-ready {
    border-style: solid;
    border-color: #272727;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-editor-layout {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 0;
    align-items: start;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-editor-layout > .ost-fp-form {
    margin-top: 20px;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-editor-preview {
    aspect-ratio: auto;
    min-height: 180px;
    margin-top: 0;
    display: flex;
    align-items: center;
    justify-content: center;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-editor-preview img {
    display: block;
    width: 100%;
    height: 100%;
    min-height: inherit;
    object-fit: contain;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-editor-controls-two {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px;
}
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-editor .ost-fp-inline-disclosure-panel {
    min-width: 0;
}
@media (max-width: 1100px) {
    body.ost-fp-page .ost-fp-partner-media .ost-fp-media-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}
@media (max-width: 700px) {
    body.ost-fp-page .ost-fp-partner-media .ost-fp-media-add-grid,
    body.ost-fp-page .ost-fp-partner-media .ost-fp-media-grid,
    body.ost-fp-page .ost-fp-partner-media .ost-fp-media-editor-layout,
    body.ost-fp-page .ost-fp-partner-media .ost-fp-media-editor-controls-two {
        grid-template-columns: minmax(0, 1fr);
    }
}


/* ==========================================================================
   v0.9.5 — shared native invalid-field emphasis
   ========================================================================== */
body.ost-fp-page .ost-fp-form input.ost-fp-field-invalid:not([type="checkbox"]):not([type="radio"]),
body.ost-fp-page .ost-fp-form select.ost-fp-field-invalid,
body.ost-fp-page .ost-fp-form textarea.ost-fp-field-invalid {
    border-color: #B84A42 !important;
}

/* ========================================================================== 
   v0.10.0 — shared partner presentation architecture
   ========================================================================== */

/* Directory / Place palette surfaces. The public shell remains Fourth Pleat;
   the selected Location presentation controls only its own content surface. */
body.ost-fp-page .ost-fp-directory-palette-surface,
.ost-fp-directory-palette-surface {
    background: var(--ost-fp-directory-bg, #FAF6F1);
    color: var(--ost-fp-directory-text, #272727);
}
body.ost-fp-page .ost-fp-directory-palette-surface h2,
body.ost-fp-page .ost-fp-directory-palette-surface h3,
body.ost-fp-page .ost-fp-directory-palette-surface p,
body.ost-fp-page .ost-fp-directory-palette-surface dt,
body.ost-fp-page .ost-fp-directory-palette-surface dd,
body.ost-fp-page .ost-fp-directory-palette-surface strong,
body.ost-fp-page .ost-fp-directory-palette-surface .ost-fp-directory-meta,
body.ost-fp-page .ost-fp-directory-palette-surface .ost-fp-checkmark,
.ost-fp-directory-palette-surface h2,
.ost-fp-directory-palette-surface h3,
.ost-fp-directory-palette-surface p,
.ost-fp-directory-palette-surface strong,
.ost-fp-directory-palette-surface .ost-fp-directory-meta,
.ost-fp-directory-palette-surface .ost-fp-checkmark {
    color: var(--ost-fp-directory-text, #272727);
}
body.ost-fp-page .ost-fp-directory-palette-surface .button,
.ost-fp-directory-palette-surface .button {
    background: var(--ost-fp-directory-button, #272727) !important;
    border-color: var(--ost-fp-directory-button, #272727) !important;
    color: var(--ost-fp-directory-button-text, #FAF6F1) !important;
}
body.ost-fp-page .ost-fp-directory-palette-surface .button:hover,
body.ost-fp-page .ost-fp-directory-palette-surface .button:focus,
.ost-fp-directory-palette-surface .button:hover,
.ost-fp-directory-palette-surface .button:focus {
    color: var(--ost-fp-directory-button-text, #FAF6F1) !important;
    opacity: .86;
}
body.ost-fp-page .ost-fp-directory-logo-size--small .ost-fp-directory-logo-plate img,
.ost-fp-directory-logo-size--small .ost-fp-directory-logo-plate img {
    max-width: min(58%, 160px) !important;
    max-height: 48px !important;
}
body.ost-fp-page .ost-fp-directory-logo-size--large .ost-fp-directory-logo-plate img,
.ost-fp-directory-logo-size--large .ost-fp-directory-logo-plate img {
    max-width: min(90%, 300px) !important;
    max-height: 82px !important;
}

/* Dedicated partner Directory workspace and production-preview stage. */
body.ost-fp-page .ost-fp-directory-editor-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 16px 18px;
    align-items: start;
}
body.ost-fp-page .ost-fp-directory-editor-grid__wide { grid-column: 1 / -1; }
body.ost-fp-page .ost-fp-directory-preview-toolbar {
    display: flex;
    align-items: end;
    justify-content: space-between;
    gap: 18px;
    flex-wrap: wrap;
}
body.ost-fp-page .ost-fp-directory-preview-toolbar > .ost-fp-field { width: min(100%, 300px); }
body.ost-fp-page .ost-fp-directory-preview-stage {
    width: 100%;
    min-height: 300px;
    max-height: 800px;
    margin: 16px auto 0;
    overflow: auto;
    box-sizing: border-box;
    background: #D8CEC3;
    transition: max-width .2s ease;
}
body.ost-fp-page .ost-fp-directory-preview-stage iframe {
    display: block;
    width: 100%;
    min-height: 300px;
    border: 0;
    background: #fff;
}

/* Access modal: controlled responsive presets. The same DOM and production
   renderer are retained; presets only alter shared layout geometry. */
.ost-fp-partner-identity-dialog.has-hero.ost-fp-partner-identity-layout-media_right {
    grid-template-columns: minmax(0, 58%) minmax(0, 42%);
}
.ost-fp-partner-identity-dialog.ost-fp-partner-identity-layout-media_right > .ost-fp-partner-identity-media { order: 2; }
.ost-fp-partner-identity-dialog.ost-fp-partner-identity-layout-media_right > .ost-fp-partner-identity-content { order: 1; }
.ost-fp-partner-identity-dialog.has-hero.ost-fp-partner-identity-layout-media_above {
    width: min(720px, 100%);
    display: block;
}
.ost-fp-partner-identity-dialog.ost-fp-partner-identity-layout-media_above .ost-fp-partner-identity-media {
    grid-template-columns: minmax(0, 1fr);
}
.ost-fp-partner-identity-dialog.ost-fp-partner-identity-layout-media_above .ost-fp-partner-identity-hero {
    aspect-ratio: 16 / 7;
}
.ost-fp-partner-identity-dialog.has-hero.ost-fp-partner-identity-layout-compact_identity {
    width: min(600px, 100%);
    display: block;
}
.ost-fp-partner-identity-dialog.ost-fp-partner-identity-layout-compact_identity.has-logo .ost-fp-partner-identity-hero {
    display: none;
}
.ost-fp-partner-identity-dialog.ost-fp-partner-identity-layout-compact_identity:not(.has-logo) .ost-fp-partner-identity-hero {
    aspect-ratio: 16 / 6;
}
.ost-fp-partner-identity-dialog.ost-fp-partner-identity-layout-compact_identity .ost-fp-partner-identity-logo-plate {
    min-height: 76px !important;
}
.ost-fp-partner-identity-logo-size-small .ost-fp-partner-identity-logo-plate img { max-width: min(62%, 160px) !important; max-height: 44px !important; }
.ost-fp-partner-identity-logo-size-large .ost-fp-partner-identity-logo-plate img { max-width: min(92%, 300px) !important; max-height: 82px !important; }

@media (max-width: 700px) {
    body.ost-fp-page .ost-fp-directory-editor-grid { grid-template-columns: minmax(0, 1fr); }
    body.ost-fp-page .ost-fp-directory-editor-grid__wide { grid-column: auto; }
    .ost-fp-partner-identity-dialog.has-hero.ost-fp-partner-identity-layout-media_left,
    .ost-fp-partner-identity-dialog.has-hero.ost-fp-partner-identity-layout-media_right {
        width: min(560px, 100%);
        display: block;
    }
    .ost-fp-partner-identity-dialog.ost-fp-partner-identity-layout-media_right > .ost-fp-partner-identity-media,
    .ost-fp-partner-identity-dialog.ost-fp-partner-identity-layout-media_right > .ost-fp-partner-identity-content { order: initial; }
}

/* Touchpoints: R10 separates palette inheritance from broader template
   appearance settings and exposes logo controls only on approved A5/A6 forms. */
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r10-touchpoint-palette-row {
    align-items: end;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r10-touchpoint-palette-row > .ost-fp-r72-field {
    width: min(100%, 300px);
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r10-touchpoint-logo-controls {
    margin-top: 14px;
}
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r10-touchpoint-custom-colours][hidden],
body.ost-fp-page .ost-fp-partner-touchpoints [data-ost-fp-r10-touchpoint-logo][hidden] {
    display: none !important;
}
@media (max-width: 700px) {
    body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r10-touchpoint-palette-row {
        display: grid;
        grid-template-columns: minmax(0, 1fr);
        gap: 10px;
    }
    body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r10-touchpoint-palette-row > .ost-fp-r72-field {
        width: 100%;
    }
}

/* ========================================================================== 
   v0.10.1 — Profile workspace layout + preview correction
   ========================================================================== */

/* Profile editor follows the established 620px partner-form working width and
   the same compact vertical rhythm used by Campaign conventional fields. */
body.ost-fp-page .ost-fp-directory-editor-form,
body.ost-fp-page .ost-fp-directory-editor-grid,
body.ost-fp-page .ost-fp-directory-presentation-details {
    width: min(100%, 620px) !important;
    max-width: 620px !important;
}
body.ost-fp-page .ost-fp-directory-editor-grid {
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) !important;
    gap: 14px !important;
    align-items: start !important;
}
body.ost-fp-page .ost-fp-directory-editor-grid__wide {
    grid-column: auto !important;
}
body.ost-fp-page .ost-fp-directory-editor-form .ost-fp-message-field {
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-directory-presentation-details {
    margin: 16px 0 0 !important;
}
body.ost-fp-page .ost-fp-directory-presentation-details > .ost-fp-inline-disclosure-panel {
    padding-top: 16px !important;
}
body.ost-fp-page .ost-fp-directory-colour-grid {
    width: min(100%, 620px) !important;
    max-width: 620px !important;
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
    gap: 16px 18px !important;
    margin: 0 0 16px !important;
}
body.ost-fp-page .ost-fp-directory-presentation-secondary {
    width: min(100%, 620px) !important;
    max-width: 620px !important;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-directory-presentation-secondary > .ost-fp-field {
    width: min(100%, 280px) !important;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-directory-submit-actions {
    margin-top: 18px !important;
}

/* Preview controls follow Campaign geometry: width presets at left, view at
   right. The neutral canvas always remains full width; only the iframe viewport
   changes width for responsive inspection. */
body.ost-fp-page .ost-fp-directory-preview-toolbar {
    display: flex !important;
    align-items: end !important;
    justify-content: space-between !important;
    gap: 18px !important;
    flex-wrap: wrap !important;
}
body.ost-fp-page .ost-fp-directory-preview-toolbar .ost-fp-campaign-preview-size-controls {
    margin: 0 !important;
    order: 1 !important;
}
body.ost-fp-page .ost-fp-directory-preview-view {
    width: min(100%, 300px) !important;
    margin-left: auto !important;
    order: 2 !important;
}
body.ost-fp-page .ost-fp-directory-preview-stage {
    display: flex !important;
    align-items: flex-start !important;
    justify-content: center !important;
    width: 100% !important;
    min-height: 300px !important;
    height: auto !important;
    max-height: 800px !important;
    margin: 16px 0 0 !important;
    padding: 28px !important;
    overflow: hidden !important;
    box-sizing: border-box !important;
    background: #D8CEC3 !important;
}
body.ost-fp-page .ost-fp-directory-preview-viewport {
    width: 100%;
    max-width: 100%;
    min-width: 0;
    height: auto;
    margin: 0 auto;
    box-sizing: border-box;
    transition: width 180ms cubic-bezier(.22,1,.36,1);
}
body.ost-fp-page .ost-fp-directory-preview-stage iframe {
    display: block !important;
    width: 100% !important;
    max-width: none !important;
    min-height: 300px !important;
    border: 0 !important;
    background: #FAF6F1 !important;
    font-family: "Hanken Grotesk", Arial, sans-serif !important;
}

/* Access custom palette belongs directly beneath the Palette selector. */
body.ost-fp-page .ost-fp-partner-entry-colour-grid {
    width: min(100%, 620px) !important;
    max-width: 620px !important;
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
    gap: 16px 18px !important;
    margin: 0 0 16px !important;
}

/* Touchpoint Palette uses the canonical palette row. Custom colour roles sit
   immediately below it, before typography/sizing controls. */
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r10-touchpoint-palette-row {
    width: min(100%, 620px) !important;
    max-width: 620px !important;
    align-items: end !important;
    margin: 0 0 16px !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r10-touchpoint-palette-row > .ost-fp-presentation-field {
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r10-touchpoint-palette-row > .ost-fp-style-match-slot {
    align-self: end !important;
}

@media (max-width: 700px) {
    body.ost-fp-page .ost-fp-directory-colour-grid,
    body.ost-fp-page .ost-fp-partner-entry-colour-grid {
        grid-template-columns: minmax(0, 1fr) !important;
    }
    body.ost-fp-page .ost-fp-directory-preview-toolbar {
        align-items: stretch !important;
    }
    body.ost-fp-page .ost-fp-directory-preview-view {
        width: 100% !important;
        margin-left: 0 !important;
    }
    body.ost-fp-page .ost-fp-directory-preview-stage {
        padding: 18px !important;
    }
}

/* ========================================================================== 
   v0.10.2 — Profile preview feedback/spacing + Access presentation geometry
   ========================================================================== */

/* Profile fields use the same sequential conventional-field rhythm as
   Campaign/Updates. The external allowance counter consumes the normal gap
   instead of being added on top of a grid row-gap. */
body.ost-fp-page .ost-fp-directory-editor-grid {
    display: block !important;
    grid-template-columns: none !important;
    gap: 0 !important;
}
body.ost-fp-page .ost-fp-directory-editor-form .ost-fp-message-field:not(.ost-fp-counted-field) {
    margin: 0 0 var(--ost-fp-field-gap, 14px) !important;
}
body.ost-fp-page .ost-fp-directory-editor-form .ost-fp-counted-field {
    margin-bottom: 1px !important;
}
body.ost-fp-page .ost-fp-directory-submit-actions {
    margin: 0 !important;
    padding-top: 18px !important;
}

/* Access modal presentation: palette roles first, then reusable media,
   geometry, and the independent controlled Typeface selection. */
body.ost-fp-page .ost-fp-partner-entry-colour-grid[hidden],
body.ost-fp-page .ost-fp-partner-entry-typography-grid[hidden] {
    display: none !important;
}
body.ost-fp-page .ost-fp-partner-entry-media-grid,
body.ost-fp-page .ost-fp-partner-entry-settings-grid,
body.ost-fp-page .ost-fp-partner-entry-typography-grid {
    display: grid !important;
    width: min(100%, 620px) !important;
    max-width: 620px !important;
    gap: 16px 18px !important;
    align-items: end !important;
    margin: 0 0 16px !important;
}
body.ost-fp-page .ost-fp-partner-entry-media-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
}
body.ost-fp-page .ost-fp-partner-entry-settings-grid,
body.ost-fp-page .ost-fp-partner-entry-typography-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
}
body.ost-fp-page .ost-fp-partner-entry-typography-field {
    grid-column: span 2 !important;
}
body.ost-fp-page .ost-fp-partner-entry-media-grid > .ost-fp-field,
body.ost-fp-page .ost-fp-partner-entry-settings-grid > .ost-fp-field,
body.ost-fp-page .ost-fp-partner-entry-typography-grid > .ost-fp-field {
    width: 100% !important;
    max-width: none !important;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-partner-entry-settings-grid input[type="number"][name="entry_corner_radius"] {
    width: 100% !important;
    min-width: 0 !important;
    max-width: none !important;
    flex-basis: auto !important;
}

@media (max-width: 700px) {
    body.ost-fp-page .ost-fp-partner-entry-media-grid,
    body.ost-fp-page .ost-fp-partner-entry-settings-grid,
    body.ost-fp-page .ost-fp-partner-entry-typography-grid {
        grid-template-columns: minmax(0, 1fr) !important;
    }
    body.ost-fp-page .ost-fp-partner-entry-typography-field {
        grid-column: auto !important;
    }
}

/* ========================================================================== 
   v0.10.3 — Profile public-surface parity + campaign reusable logo
   ========================================================================== */

/* The expanded Directory row intentionally uses a slightly darker Fourth Pleat
   neutral than the ordinary page/profile surface. Custom/Location palettes use
   the selected background consistently. */
body.ost-fp-page .ost-fp-directory-detail-panel.ost-fp-directory-palette-surface,
.ost-fp-directory-detail-panel.ost-fp-directory-palette-surface {
    background: var(--ost-fp-directory-detail-bg, #F3ECE4) !important;
}

/* Preserve the canonical public primary/secondary hierarchy inside Directory/Place
   palette surfaces. Primary actions use the effective Button tone. Secondary public
   actions use the same filled supporting treatment already used by Campaign and
   partner-entry public action surfaces; do not turn them into outline controls. */
body.ost-fp-page .ost-fp-directory-palette-surface .button.ost-fp-button-secondary,
.ost-fp-directory-palette-surface .button.ost-fp-button-secondary {
    background: var(--ost-fp-directory-secondary-bg, #E8DDD1) !important;
    background-color: var(--ost-fp-directory-secondary-bg, #E8DDD1) !important;
    color: var(--ost-fp-directory-text, #272727) !important;
    border: 1px solid var(--ost-fp-directory-secondary-bg, #E8DDD1) !important;
    box-shadow: none !important;
    opacity: 1 !important;
}
body.ost-fp-page .ost-fp-directory-palette-surface .button.ost-fp-button-secondary:hover,
body.ost-fp-page .ost-fp-directory-palette-surface .button.ost-fp-button-secondary:focus,
.ost-fp-directory-palette-surface .button.ost-fp-button-secondary:hover,
.ost-fp-directory-palette-surface .button.ost-fp-button-secondary:focus {
    background: var(--ost-fp-directory-secondary-bg, #E8DDD1) !important;
    background-color: var(--ost-fp-directory-secondary-bg, #E8DDD1) !important;
    color: var(--ost-fp-directory-text, #272727) !important;
    border-color: var(--ost-fp-directory-secondary-bg, #E8DDD1) !important;
    opacity: .78 !important;
}
/* Directory/Place action typography deliberately inherits the established site button
   treatment. Do not force a lighter component-specific font weight or size. */
body.ost-fp-page .ost-fp-directory-detail-actions .button,
body.ost-fp-page .ost-fp-directory-primary-actions .button,
.ost-fp-directory-detail-actions .button,
.ost-fp-directory-primary-actions .button {
    text-decoration: none !important;
}

/* Full Place profile uses the normal light Fourth Pleat text hierarchy. */
body.ost-fp-page .ost-fp-directory-profile-body,
.ost-fp-directory-profile-body {
    font-weight: 300 !important;
}
body.ost-fp-page .ost-fp-directory-profile-body p,
body.ost-fp-page .ost-fp-directory-profile-body li,
body.ost-fp-page .ost-fp-directory-profile-body dt,
body.ost-fp-page .ost-fp-directory-profile-body dd,
.ost-fp-directory-profile-body p,
.ost-fp-directory-profile-body li,
.ost-fp-directory-profile-body dt,
.ost-fp-directory-profile-body dd {
    font-weight: 300 !important;
}
body.ost-fp-page .ost-fp-directory-profile-body strong,
.ost-fp-directory-profile-body strong {
    font-weight: 400 !important;
}
body.ost-fp-page .ost-fp-directory-profile-overview,
.ost-fp-directory-profile-overview {
    padding-top: 8px !important;
}
body.ost-fp-page .ost-fp-directory-primary-actions,
.ost-fp-directory-primary-actions {
    display: flex !important;
    flex-wrap: wrap !important;
    align-items: center !important;
    gap: 12px !important;
    margin: 18px 0 0 !important;
}
body.ost-fp-page .ost-fp-directory-primary-actions .ost-fp-direct-launch-form,
.ost-fp-directory-primary-actions .ost-fp-direct-launch-form {
    margin: 0 !important;
}

/* Profile identity selectors share one 50/50 row on ordinary widths. */
body.ost-fp-page .ost-fp-directory-media-fields {
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    gap: 18px !important;
    width: min(100%, 620px) !important;
    max-width: 620px !important;
    margin: 0 0 var(--ost-fp-field-gap, 14px) !important;
}
body.ost-fp-page .ost-fp-directory-media-fields > .ost-fp-field {
    width: 100% !important;
    max-width: none !important;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-directory-colour-grid[hidden] {
    display: none !important;
}

/* Campaign reusable identity image: Logo image + Logo size form one 50/50 row. */
body.ost-fp-page .ost-fp-campaign-logo-controls {
    grid-column: 1 / -1 !important;
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    gap: 18px !important;
    width: 100% !important;
    max-width: 620px !important;
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-campaign-logo-controls > .ost-fp-field {
    width: 100% !important;
    max-width: none !important;
    margin: 0 !important;
}

@media (max-width: 700px) {
    body.ost-fp-page .ost-fp-directory-media-fields,
    body.ost-fp-page .ost-fp-campaign-logo-controls {
        grid-template-columns: minmax(0, 1fr) !important;
    }
}
body.ost-fp-page .ost-fp-directory-primary-actions .ost-fp-directory-direct-launcher,
body.ost-fp-page .ost-fp-directory-primary-actions .ost-fp-form-actions,
.ost-fp-directory-primary-actions .ost-fp-directory-direct-launcher,
.ost-fp-directory-primary-actions .ost-fp-form-actions {
    margin: 0 !important;
}


/* v0.11.4 — Directory expanded-detail spacing parity.
   Directory rows use the shared table-detail leading and trailing 16px structural
   spacers. Do not suppress the leading spacer: live Directory and Profile preview
   must retain the same breathing room at the top of the expanded detail. */
body.ost-fp-page .ost-fp-directory-detail-panel.ost-fp-table-detail-panel::before,
.ost-fp-directory-detail-panel.ost-fp-table-detail-panel::before {
    height: 16px !important;
}

/* Current BOOK DIRECT uses the directory-direct-launcher runtime, not the older
   direct-launch-form wrapper. Align the current launcher with VIEW PLACE and retain
   the established larger customer-facing Directory action geometry. */
body.ost-fp-page .ost-fp-directory-detail-actions,
.ost-fp-directory-detail-actions {
    display: flex !important;
    flex-wrap: wrap !important;
    align-items: center !important;
    justify-content: flex-start !important;
    gap: 12px !important;
}
body.ost-fp-page .ost-fp-directory-detail-actions .ost-fp-directory-detail-action,
body.ost-fp-page .ost-fp-directory-detail-actions .ost-fp-directory-direct-action,
body.ost-fp-page .ost-fp-directory-detail-actions .ost-fp-directory-direct-launcher,
body.ost-fp-page .ost-fp-directory-detail-actions .ost-fp-form-actions,
.ost-fp-directory-detail-actions .ost-fp-directory-detail-action,
.ost-fp-directory-detail-actions .ost-fp-directory-direct-action,
.ost-fp-directory-detail-actions .ost-fp-directory-direct-launcher,
.ost-fp-directory-detail-actions .ost-fp-form-actions {
    margin: 0 !important;
}
body.ost-fp-page .ost-fp-directory-detail-actions .ost-fp-directory-direct-launcher,
.ost-fp-directory-detail-actions .ost-fp-directory-direct-launcher {
    display: inline-flex !important;
    align-items: center !important;
}
body.ost-fp-page .ost-fp-directory-detail-actions .ost-fp-compact-action,
body.ost-fp-page .ost-fp-directory-detail-actions .ost-fp-directory-direct-action > .button,
body.ost-fp-page .ost-fp-directory-detail-actions .ost-fp-directory-direct-launcher > .ost-fp-form-actions > .button,
.ost-fp-directory-detail-actions .ost-fp-compact-action,
.ost-fp-directory-detail-actions .ost-fp-directory-direct-action > .button,
.ost-fp-directory-detail-actions .ost-fp-directory-direct-launcher > .ost-fp-form-actions > .button {
    min-height: 36px !important;
    height: 36px !important;
    padding: 0 14px !important;
    margin: 0 !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
}


/* ==========================================================================
   v0.10.5 — Profile preview canonical button typography + preview-only divider removal
   ========================================================================== */
/* The Profile preview iframe does not inherit the active site's theme button
   typography. v0.10.6 supersedes the earlier computed-style mirroring with the
   explicit shared Fourth Pleat action-label contract below. */

/* The full Place page uses this rule as a live-page section separator. The
   hosted Profile preview is a bounded object and must not render that live-page
   divider at its bottom. */
body.ost-fp-page.ost-fp-directory-preview-document .ost-fp-directory-profile-overview {
    border-bottom: 0 !important;
}


/* ==========================================================================
   v0.10.6 — global action-label parity, preview cursors, Profile disclosure motion
   ========================================================================== */
/* One explicit Fourth Pleat action-label contract. Theme inheritance is no longer
   relied on for plugin-owned action labels because preview iframes and partner-
   embedded surfaces do not share the Ostavae theme cascade. Special icon-only
   controls retain their component rules. */
body.ost-fp-page .button.ost-fp-button,
body.ost-fp-page .button.ost-fp-button-secondary,
body.ost-fp-page .button.ost-fp-button-primary-outline,
.ost-fp-box .button.ost-fp-button,
.ost-fp-box .button.ost-fp-button-secondary,
.ost-fp-confirm-modal .button.ost-fp-button,
.ost-fp-confirm-modal .button.ost-fp-button-secondary,
.ost-fp-style-source-modal .button.ost-fp-button,
.ost-fp-style-source-modal .button.ost-fp-button-secondary {
    font-family: inherit !important;
    font-size: 14px !important;
    font-weight: 400 !important;
    line-height: 1 !important;
    letter-spacing: 0 !important;
    text-transform: uppercase !important;
    cursor: pointer !important;
}
body.ost-fp-page .ost-fp-table-action,
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-action-button {
    font-size: 14px !important;
    font-weight: 400 !important;
    line-height: 1 !important;
    letter-spacing: 0 !important;
    text-transform: uppercase !important;
    cursor: pointer !important;
}
/* Preview actions can be deliberately inert, but they still present as actions. */
body.ost-fp-page.ost-fp-directory-preview-document .ost-fp-directory-palette-surface .button,
body.ost-fp-page.ost-fp-campaign-preview-document .ost-fp-campaign-actions .button,
html body #ost-fp-partner-identity-overlay-preview .ost-fp-partner-identity-action {
    cursor: pointer !important;
}
/* The Profile Presentation disclosure previously placed padding on the measured
   panel itself. That padding survives height:0 and disappears only when <details>
   closes, producing the end-of-collapse jolt. Keep spacing inside the measured
   inner wrapper instead. */
body.ost-fp-page .ost-fp-directory-presentation-details > .ost-fp-inline-disclosure-panel {
    padding-top: 0 !important;
}
body.ost-fp-page .ost-fp-directory-presentation-details > .ost-fp-inline-disclosure-panel > .ost-fp-inline-disclosure-inner {
    padding-top: 16px !important;
    box-sizing: border-box !important;
}


/* ==========================================================================
   v0.10.7 — one canonical text-action button geometry across Fourth Pleat
   ========================================================================== */
/* User control: SAVE DIRECT CONFIGURATION / COPY SITE INTEGRATION CODE define
   the canonical text-action button. Every labelled Fourth Pleat action uses
   the same 36px geometry and 14px/600 label treatment. The single size
   exception is the member-navigation workflow continuation control at 30px.
   Icon-only editor/tool/close controls and text-link controls are not text
   action buttons and retain their component geometry. */
body.ost-fp-page .button:not(.ost-fp-nav-continuation):not(.ost-fp-campaign-tool-button):not(.button-link),
.ost-fp-box .button:not(.ost-fp-nav-continuation):not(.ost-fp-campaign-tool-button):not(.button-link),
.ost-fp-confirm-modal .button:not(.ost-fp-nav-continuation):not(.ost-fp-campaign-tool-button):not(.button-link),
.ost-fp-style-source-modal .button:not(.ost-fp-nav-continuation):not(.ost-fp-campaign-tool-button):not(.button-link),
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-action {
    width: auto !important;
    min-width: 0 !important;
    max-width: none !important;
    min-height: 36px !important;
    height: 36px !important;
    padding: 0 14px !important;
    box-sizing: border-box !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    font-size: 14px !important;
    font-weight: 400 !important;
    line-height: 1 !important;
    letter-spacing: 0 !important;
    text-transform: uppercase !important;
    cursor: pointer !important;
    vertical-align: middle !important;
}

/* The member top-navigation continuation is the sole approved compact text
   action. Protect both its 30px geometry and its compact 12px label from the
   global text-action rule. */
body.ost-fp-page .ost-fp-member-nav-links .ost-fp-nav-continuation {
    min-height: 30px !important;
    height: 30px !important;
    padding: 0 10px !important;
    font-size: 12px !important;
    font-weight: 400 !important;
    line-height: 1 !important;
    letter-spacing: 0 !important;
    text-transform: uppercase !important;
}

/* ========================================================================== 
   v0.10.9 — R10 notice/date/palette-candidate closure corrections
   ========================================================================== */
/* Dynamic save notices use a dedicated notice body instead of a form paragraph.
   This prevents the canonical .ost-fp-form p field-gap rule from adding 14px
   beneath notice copy and visually pushing the text upward. The late paragraph
   reset also protects server-rendered notices that still use <p>. */
body.ost-fp-page .ost-fp-notice > .ost-fp-notice__text,
body.ost-fp-page .ost-fp-notice > p {
    margin: 0 !important;
    padding: 0 !important;
    line-height: 1.45 !important;
}

/* FETCH PALETTE remains score-ranked. Present the strongest four returned
   colours as Primary candidates, followed by the remaining ranked colours as
   Additional candidates, without changing the extractor or score order. */
.ost-fp-style-source-modal__palette-group[hidden] {
    display: none !important;
}
.ost-fp-style-source-modal__palette-label--additional {
    margin-top: 0 !important;
}

/* ========================================================================== 
   v0.10.10 — R10 Website Style single-CANCEL state correction
   ========================================================================== */
/* Before a palette is returned, the source row has CANCEL + FETCH PALETTE.
   Once valid palette results are displayed, the modal's lower CANCEL / APPLY
   STYLE row becomes the sole cancellation path. Tie visibility to the modal
   result state as well as the native hidden attribute so no later button rule
   can reintroduce a duplicate CANCEL beside FETCH PALETTE. */
body.ost-fp-page .ost-fp-style-source-modal.is-expanded .ost-fp-style-source-modal__fetch-actions > .button[data-ost-fp-style-source-initial-cancel],
body.ost-fp-page .ost-fp-style-source-modal__fetch-actions > .button[data-ost-fp-style-source-initial-cancel][hidden] {
    display: none !important;
}



/* ========================================================================== 
   v0.10.11 — R10 Website Style action metadata + notice-width consistency
   ========================================================================== */
/* FETCH PALETTE source actions are one action group. Last-fetched metadata is
   a separate full-row line beneath that group rather than content inside the
   FETCH button column. When the initial CANCEL is removed after successful
   results, the action row collapses naturally to FETCH PALETTE without leaving
   a phantom grid/flex cell. */
.ost-fp-style-source-modal__fetch-actions {
    display: flex !important;
    flex-direction: column !important;
    flex-wrap: nowrap !important;
    align-items: flex-end !important;
    justify-content: flex-start !important;
    gap: 0 !important;
}
.ost-fp-style-source-modal__fetch-buttons {
    display: flex !important;
    flex-wrap: wrap !important;
    align-items: center !important;
    justify-content: flex-end !important;
    gap: 10px !important;
    width: auto !important;
    max-width: 100% !important;
}
.ost-fp-style-source-modal__fetch-actions > p.ost-fp-style-source-modal__last {
    width: 100% !important;
    max-width: none !important;
    margin: 6px 0 0 !important;
    padding: 0 !important;
    text-align: right !important;
    white-space: nowrap !important;
}
body.ost-fp-page .ost-fp-style-source-modal.is-expanded .ost-fp-style-source-modal__fetch-buttons > .button[data-ost-fp-style-source-initial-cancel],
body.ost-fp-page .ost-fp-style-source-modal__fetch-buttons > .button[data-ost-fp-style-source-initial-cancel][hidden] {
    display: none !important;
}
@media (max-width: 640px) {
    .ost-fp-style-source-modal__fetch-actions,
    .ost-fp-style-source-modal__fetch-buttons {
        align-items: flex-end !important;
        justify-content: flex-end !important;
    }
}

/* Canonical page/message notice width rule. A notice itself never imposes a
   narrow form-width cap: it fills the presentation surface that owns it. The
   shared dynamic-notice runtime promotes page-level save/mutation feedback to
   the nearest full workspace/section host before insertion, while genuinely
   contextual inline notices remain local because their owning surface is local.
   This removes the former Campaign/Website-Style 620px notice special case. */
body.ost-fp-page .ost-fp-notice {
    width: 100% !important;
    max-width: none !important;
    box-sizing: border-box !important;
}
body.ost-fp-page .ost-fp-campaign-presentation-surface > [data-ost-fp-ajax-save-notice],
body.ost-fp-page .ost-fp-campaign-media-status,
body.ost-fp-page .ost-fp-partner-touchpoints .ost-fp-r72-validation.ost-fp-notice {
    width: 100% !important;
    max-width: none !important;
}

/* ========================================================================== 
   v0.10.12 — R10 Website Style immediate-section notice ownership
   ========================================================================== */
/* Website Style application feedback uses the canonical notice geometry but is
   inserted locally as the first item of its owning Presentation controls /
   Appearance disclosure panel. Width remains 100% of that immediate section;
   do not add a page-level or 620px/720px notice width override here. */
body.ost-fp-page .ost-fp-inline-disclosure-panel > .ost-fp-style-apply-notice,
body.ost-fp-page .ost-fp-inline-disclosure-panel > .ost-fp-notice-motion-wrap > .ost-fp-style-apply-notice {
    width: 100% !important;
    max-width: none !important;
    box-sizing: border-box !important;
}

/* ==========================================================================
   v0.10.15–v0.10.16 — R10 presentation-control width parity
   ========================================================================== */
/* Integrations Existing/Standalone, Campaigns, Access and Touchpoints use the
   same 620px three-track presentation geometry for Palette. The Palette select
   occupies the first two tracks, so its desktop width is exactly identical to
   the canonical two-thirds presentation control used by Integrations/Campaigns.
   Touchpoints retains its own surrounding presentation layout; only the Palette
   row adopts this shared width contract. */
@media (min-width: 641px) {
    body.ost-fp-page .ost-fp-palette-control-row--standard-wide {
        grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
        column-gap: 16px !important;
    }
    body.ost-fp-page .ost-fp-palette-control-row--standard-wide > .ost-fp-presentation-field {
        grid-column: span 2 !important;
        width: 100% !important;
        min-width: 0 !important;
        max-width: none !important;
    }
    body.ost-fp-page .ost-fp-palette-control-row--standard-wide > .ost-fp-style-match-slot {
        grid-column: span 1 !important;
        width: 100% !important;
        min-width: 0 !important;
        max-width: none !important;
    }
}
@media (max-width: 640px) {
    body.ost-fp-page .ost-fp-palette-control-row--standard-wide > .ost-fp-presentation-field,
    body.ost-fp-page .ost-fp-palette-control-row--standard-wide > .ost-fp-style-match-slot {
        grid-column: auto !important;
    }
}

/* ==========================================================================
   v0.10.16 — R10 Palette select width parity completed
   ========================================================================== */
/* Access and Touchpoints now opt into the same explicit standard-wide Palette
   modifier already used by Integrations and Campaigns. Do not reintroduce a
   wider local Palette field on either surface. Responsive single-column stacking
   remains controlled by the existing standard-wide breakpoint above. */

/* R11 shared broken-image fallback. Fourth Pleat-owned image elements that
   resolve to the platform placeholder must remain fully visible rather than
   inheriting hero/logo crop rules from the original image role. */
img.ost-fp-image-fallback {
    object-fit: contain !important;
    object-position: center center !important;
    background: #F3ECE4 !important;
}

/* ==========================================================================
   v0.11.2 — Place profile shell geometry
   ========================================================================== */
/* Full Place content is a bounded presentation object. The live Place surface
   spans the full horizontal section width, keeps 20px vertical breathing room,
   carries its selected palette background to the 1px Directory-border perimeter,
   and provides 20px internal content spacing. The Profile preview removes the
   outer vertical margin so its perimeter meets the preview canvas boundary. */
body.ost-fp-page .ost-fp-directory-profile-shell,
.ost-fp-directory-profile-shell {
    box-sizing: border-box !important;
    width: 100% !important;
    margin: 0 !important;
    padding: 0 !important;
    background: var(--ost-fp-directory-page-gutter-bg, #F3ECE4) !important;
}
body.ost-fp-page .ost-fp-directory-profile-shell > .ost-fp-directory-profile-body,
.ost-fp-directory-profile-shell > .ost-fp-directory-profile-body {
    box-sizing: border-box !important;
    width: 100% !important;
    margin: 20px 0 !important;
    padding: 20px !important;
    border: 1px solid #D8CEC3 !important;
    background: var(--ost-fp-directory-bg, #FAF6F1) !important;
    color: var(--ost-fp-directory-text, #272727) !important;
}


/* ==========================================================================
   v0.11.3 — Campaign no-logo state / Profile preview geometry / Media notice entry state
   ========================================================================== */
/* A Campaign with Logo image = None must not expose the empty <img>. The
   campaign logo component is flex-based, so the author-level display rule must
   explicitly honour the hidden state rather than relying on the browser default. */
body.ost-fp-page .ost-fp-campaign-logo[hidden],
.ost-fp-campaign-logo[hidden] {
    display: none !important;
}

/* Directory listing preview keeps deliberate top breathing room inside the
   preview canvas. The 10px iframe page padding remains on the other sides; this
   adds the accepted extra 10px top offset without changing live Directory output. */
body.ost-fp-page.ost-fp-directory-preview-document--listing .ost-fp-directory-preview-table-wrap {
    margin-top: 10px !important;
}

/* The full Place preview already sits inside the outer neutral preview stage.
   Do not add a second inner gutter inside the iframe: its 1px perimeter must
   meet the preview-canvas boundary. The live Place page keeps only the agreed
   20px vertical breathing room; its frame spans the full horizontal section. */
body.ost-fp-page.ost-fp-directory-preview-document--profile .ost-fp-directory-profile-shell > .ost-fp-directory-profile-body {
    width: 100% !important;
    margin: 0 !important;
}

/* ==========================================================================
   v0.11.6 — Directory preview state + media spacing parity
   ========================================================================== */
/* Media must not change the vertical breathing room of an expanded Directory
   record. Earlier .has-media grid layout used a generic 24px gap; because the
   shared table-detail ::before/::after spacers are grid items, that gap added
   another 24px above and below the content whenever media was present. Keep
   the canonical 16px structural spacers and use horizontal gap only. */
body.ost-fp-page .ost-fp-directory-detail-panel.has-media,
.ost-fp-directory-detail-panel.has-media {
    column-gap: 24px !important;
    row-gap: 0 !important;
}
@media (max-width: 760px) {
    body.ost-fp-page .ost-fp-directory-detail-panel.has-media .ost-fp-directory-detail-copy + .ost-fp-directory-media,
    .ost-fp-directory-detail-panel.has-media .ost-fp-directory-detail-copy + .ost-fp-directory-media {
        margin-top: 24px !important;
    }
}



/* ==========================================================================
   v0.11.8 — Profile Directory preview is always expanded
   ========================================================================== */
/* The partner Profile preview is explanatory rather than interactive. Keep the
   Directory detail permanently visible so partners do not have to discover the
   live Directory row-toggle behaviour merely to review their presentation. */
body.ost-fp-page.ost-fp-directory-preview-document--listing .ost-fp-directory-preview-row,
body.ost-fp-page.ost-fp-directory-preview-document--listing .ost-fp-directory-preview-label {
    cursor: default !important;
}
/* This preview intentionally consumes the shared expandable detail component
   in a static-open state. The live Directory continues to use the shared
   interactive table-detail runtime; only the isolated Profile preview bypasses
   the collapsed base presentation. */
body.ost-fp-page.ost-fp-directory-preview-document--listing .ost-fp-directory-preview-detail-row > td > .ost-fp-table-detail-panel {
    height: auto !important;
    opacity: 1 !important;
    overflow: visible !important;
}
body.ost-fp-page.ost-fp-directory-preview-document--listing .ost-fp-directory-preview-label:hover {
    text-decoration: none !important;
}


/* ==========================================================================
   v0.11.9 — Directory mobile public-action alignment parity
   ========================================================================== */
/* VIEW PLACE and BOOK DIRECT / BOOK NOW remain one left-aligned action row on
   compact Directory listings, matching the full Place action treatment. This
   shared rule applies to the live Directory and the isolated Profile preview. */
@media (max-width: 640px) {
    body.ost-fp-page .ost-fp-directory-detail-actions,
    .ost-fp-directory-detail-actions {
        flex-direction: row !important;
        flex-wrap: nowrap !important;
        align-items: center !important;
        justify-content: flex-start !important;
    }
}

/* ==========================================================================
   v0.11.10 — universal ordinary action typography
   ========================================================================== */
/* Ostavae-wide action decision: ordinary Fourth Pleat labelled actions use
   14px / weight 400 / uppercase. Geometry remains 36px high with 0 14px
   padding. The compact member workflow-navigation action remains 30px / 12px
   but now uses the same weight 400. Icon/tool/close controls are excluded. */
body.ost-fp-page .button.ost-fp-button:not(.ost-fp-campaign-tool-button),
body.ost-fp-page .button.ost-fp-button-secondary:not(.ost-fp-campaign-tool-button),
body.ost-fp-page .button.ost-fp-button-primary-outline:not(.ost-fp-campaign-tool-button),
body.ost-fp-page .ost-fp-table-action,
body.ost-fp-page .ost-fp-partner-media .ost-fp-media-action-button,
.ost-fp-box .button.ost-fp-button,
.ost-fp-box .button.ost-fp-button-secondary,
.ost-fp-confirm-modal .button.ost-fp-button,
.ost-fp-confirm-modal .button.ost-fp-button-secondary,
.ost-fp-style-source-modal .button.ost-fp-button,
.ost-fp-style-source-modal .button.ost-fp-button-secondary,
html body .ost-fp-partner-identity-overlay .ost-fp-partner-identity-action {
    font-size: 14px !important;
    font-weight: 400 !important;
    line-height: 1 !important;
    letter-spacing: 0 !important;
    text-transform: uppercase !important;
}
body.ost-fp-page .ost-fp-member-nav-links .ost-fp-nav-continuation {
    font-size: 12px !important;
    font-weight: 400 !important;
}

/* ==========================================================================
   v0.11.27 — Campaign transparent-logo editor/preview consistency
   ========================================================================== */
/* Campaign logo media retains source transparency. The editor checkerboard is
   an authoring aid only; never place an opaque plate behind a transparent logo.
   The hosted preview uses the actual Campaign palette behind the same source. */
body.ost-fp-page .ost-fp-campaign-editor-header .ost-fp-campaign-logo,
body.ost-fp-page .ost-fp-campaign-editor-header .ost-fp-campaign-logo img,
body.ost-fp-page.ost-fp-campaign-preview-document .ost-fp-campaign-logo,
body.ost-fp-page.ost-fp-campaign-preview-document .ost-fp-campaign-logo img {
    background: transparent !important;
    background-color: transparent !important;
    background-image: none !important;
}

