/* townsquare inner pages - copied from themes/local_digital/css/theme.css */
/* local_digital - theme stylesheet (v2 engine).
 *
 * DELIBERATELY ALMOST EMPTY, and that is the lesson from black_chamber.
 *
 * This theme's look comes from job_hub/assets/css/style.css plus the inline
 * <style> blocks each legacy view carries. Those blocks are scoped by WHICH
 * FILE INCLUDES THEM - a rule in pages/about_us.php reaches the About page and
 * nothing else. Lifting them into a theme stylesheet makes them global, and on
 * black_chamber that turned a 562px banner into 338px on every inner page.
 *
 * So page rules stay in their page, under the engine's `ig-screen-<template>`
 * body class when they need a hook. Only genuinely theme-wide rules belong
 * here, nested under .ld-scope so they cannot escape into an embedded widget.
 */

.ld-scope { position: relative; }

/* ==========================================================================
   PORTAL BRAND COLOUR OVERRIDES
   ==========================================================================
   TWO blues are hardcoded across the stylesheets this theme loads, not one.
   #3C65F5 is job_hub's, and I overrode that. #574de3 is master's, it lives in
   landing_file/master/css/main.css, and the landing page loads that file
   directly - so every "still blue" you pointed at was the second colour in a
   file I had never scanned. `.section-heading h3`'s 2px bottom border is the
   clearest example: it is not in any of the three files the old block covered.

   Generated from all four stylesheets - main.css, job_hub style.css,
   style123.css, custom.css - by rewriting every declaration whose value
   CONTAINS either blue:

     - a bare hex                -> var(--ld-primary)
     - an 8-digit hex (#574de3cc) -> color-mix(..., <alpha>%, transparent),
       so translucent overlays and shadows keep their transparency instead of
       turning into a solid block
     - a shorthand (border, box-shadow, background with a url) -> the whole
       value restated with the hex swapped in place, which is the only way to
       reach `border-bottom: 2px solid #574de3` without guessing the longhand
     - relative url() -> resolved against its ORIGINAL stylesheet, because
       these rules are served from themes/local_digital/css/ and `../imgs/...`
       would otherwise 404

   !important is carried through from the source rule and NOT added anywhere
   it was absent: these restate existing selectors, so equal specificity plus
   later load order is enough, and adding it would break any portal override
   written afterwards.

   Fallback #3C65F5 throughout, so a portal that has set no colour renders
   exactly as it does today.

   REGENERATE, don't hand-edit. The generator is recorded in _kb/CHECKLIST.md.
   ========================================================================== */

.Qme-status-bar,
.banner-hero.hero-3,
.card-grid-2.grid-bd-16 .lbl-hot,
.header-brand-2,
.header-brand-2.sticky-bar.stick,
.noUi-background,
.qme-close-sidebar,
.qme-modal-list ul li a:hover,
.qme-modal-list ul li.active a,
.qme-navmenu li .toggle-nav,
.qme-navmenu li:nth-child(2) a.btn,
.qme-nearList ul li a.btn,
.qme-single-button .btn,
.slider-section .carousel-indicators .active,
.slider-section .carousel-indicators li,
.swiper-pagination-customs-active,
.swiper-pagination-customs:hover {
    background: var(--ld-primary, #3C65F5);
}

.owl-theme .owl-dots .owl-dot span,
.owl-theme .owl-nav [class*=owl-],
.qme-navmenu li .toggle-nav:hover {
    background: var(--ld-primary, #3C65F5) !important;
}

.search-section:before {
    background: color-mix(in srgb, var(--ld-primary, #3C65F5) 80%, transparent);
}

.qme-location-search {
    box-shadow: 2px 12px 53px color-mix(in srgb, var(--ld-primary, #3C65F5) 20%, transparent);
}

.banner-hero .color-brand-2,
.block-pricing .box-info-price .text-price,
.block-pricing .box-pricing-item .btn-border,
.box-list-character ul li a.active,
.box-list-character ul li a:hover,
.btn-apply-now,
.btn-arrow-right,
.btn-border-brand-2,
.btn-grey,
.btn-grey-big:hover,
.btn-link:hover,
.btn-paragraph-2,
.btn-tag,
.btn-tags-sm,
.card-grid-2 .btn-apply-now,
.card-grid-2 .card-block-info .card-text-price,
.card-grid-2 .card-grid-2-image-left .right-info .name-job:hover,
.card-grid-2 a:hover,
.card-grid-3 .card-block-info .card-text-price,
.card-grid-3 h5 a:hover,
.card-grid-4 .btn-readmore:hover,
.card-grid-border .link-arrow,
.card-image-top .image .lbl-hot,
.card-list-4 .card-price,
.color-brand-2,
.header .main-menu li a.active,
.header .main-menu li a:hover,
.header .text-link-bd-btom:hover,
.header-brand-2 .btn-default,
.header-brand-2 .main-menu li ul li a:hover,
.list-checkbox li .number-item,
.nav-tabs li a.active,
.nav-tabs li a:hover,
.noUi-tooltip,
.number-element,
.slider-section .d,
.social-login:hover,
.text-blue,
.text-brand-2,
a *:hover,
a:hover {
    color: var(--ld-primary, #3C65F5);
}

.section-heading h3,
.trending-section h3:before {
    border-bottom: 2px solid var(--ld-primary, #3C65F5);
}

.Qme-status-bar {
    box-shadow: 1px 15px 20px color-mix(in srgb, var(--ld-primary, #3C65F5) 25%, transparent);
}

.box-progress-bar .progress .bg-brand-2,
.contact-from-area .contact-form-style button:hover {
    background-color: var(--ld-primary, #3C65F5) !important;
}

#scrollUp,
.banner-hero .color-brand-2::after,
.bg-brand-2,
.block-pricing .box-pricing-item .btn-border:hover,
.block-pricing .box-pricing-item:hover .btn-border,
.box-progress-bar .progress .bg-brand-2::before,
.btn-apply,
.btn-apply-big,
.btn-brand-1:hover,
.btn-editor,
.btn.btn-default,
.card-grid-2:hover .btn-apply-now,
.header .main-menu li a.active::before,
.header .main-menu li a:hover::before,
.noUi-horizontal .noUi-handle::before,
.swiper-pagination .swiper-pagination-bullet,
.swiper-pagination .swiper-pagination-bullet-active,
.swiper-pagination .swiper-pagination-bullet-active:hover {
    background-color: var(--ld-primary, #3C65F5);
}

.btn-grey-small:hover {
    color: var(--ld-primary, #3C65F5) !important;
}

.block-pricing .box-pricing-item .btn-border,
.btn-border-brand-2,
.input-disabled {
    border: 1px solid var(--ld-primary, #3C65F5);
}

.btn-send-message {
    background: var(--ld-primary, #3C65F5) url(/job_hub/assets/imgs/page/company/icon-email.svg) no-repeat 25px 15px;
}

.cb-container input:checked ~ .checkmark {
    border: 2px solid var(--ld-primary, #3C65F5);
}

.cb-container .checkmark:after {
    background: var(--ld-primary, #3C65F5) url(/job_hub/assets/imgs/template/icons/tick.svg) no-repeat center;
}

.header .main-menu li.dashboard a {
    border: 1px dashed var(--ld-primary, #3C65F5);
}

.nav-tabs li a.active,
.nav-tabs li a:hover {
    border-color: var(--ld-primary, #3C65F5);
}

.btn-send-message {
    background: var(--ld-primary, #3C65F5) url(/assets/imgs/page/company/icon-email.svg) no-repeat 25px 15px;
}

.cb-container .checkmark:after {
    background: var(--ld-primary, #3C65F5) url(/assets/imgs/template/icons/tick.svg) no-repeat center;
}


/* ==========================================================================
   BRAND COLOUR — THE INLINE <style> BLOCKS
   ==========================================================================
   A second source, and the one that kept producing "still blue" after I said
   the blues were done. These rules are not in any stylesheet: the legacy views
   PRINT them into the document as <style> blocks, so grepping the CSS files
   finds nothing and the count of blue elements on the page never reaches zero.

   Collected by reading the rendered page's own <style> elements and rewriting
   every declaration whose value carries a brand blue - the same transform as
   the block above. Four hexes, not two: #3C65F5 and #574de3, plus Bootstrap's
   link blue #0b5ed7 (.alredy_login a - the "Login" link) and #727cf5, a purple
   blue that appears only here.

   ORDER IS WHAT MAKES THESE WIN, not weight. An inline <style> beats an
   earlier stylesheet at equal specificity, so theme.css is loaded as the LAST
   element before </body> in layouts/landing_header.php. !important is carried
   through from the source rule and added nowhere new.

   Regenerate by re-running the collector against a rendered page; a view that
   grows a new inline blue will not appear here until someone does.
   ========================================================================== */

.cats_holder label.btn-default:hover .bizcontent h5,
.fallow_btn,
.searchable-container label.btn-default:hover,
.submit-field .job_detail_btn,
.table .colored_action .btn,
body .btn-info,
body .list_style_posts .card_content .badge {
    background-color: var(--ld-primary, #3C65F5) !important;
}

body .btn-info {
    border-color: var(--ld-primary, #3C65F5) !important;
}

.btn.btn-default,
.btn.btn-default.def2:hover,
.job_detail_btn,
.main_list .btn.btn-default,
.select2-results__options::-webkit-scrollbar-track {
    background-color: var(--ld-primary, #3C65F5);
}

.dashboard-header-search-submit {
    background: var(--site_color_g, var(--ld-primary, #3C65F5)) !important;
    border-color: var(--site_color_g, var(--ld-primary, #3C65F5)) !important;
}

.fix_droppp li a,
.fix_droppp li a:hover,
.fix_droppp li a:hover *,
.mobile-menu .sub-menu a:hover,
.mobile-menu a:hover {
    color: var(--ld-primary, #3C65F5) !important;
}

/* THE SEARCH BUTTON IS THE ONE PLACE THE SWAP IS WRONG.
 *
 * `.form-find .btn-find` was `background:#fff; color:#3C65F5` - a white button
 * with blue text. Rewriting the blue to the brand colour mechanically, the way
 * every other rule here is rewritten, made the LABEL the brand colour. But the
 * button is not white any more: `.btn.btn-default` in colors_settings.php
 * paints its background with the same variable, so the swap put brand text on
 * a brand background and the magnifier disappeared into it.
 *
 * The colour that belongs on a filled button is white, and the icon is
 * `fill="currentColor"`, so setting `color` alone carries it. This is the
 * exception the generator cannot see: it reads declarations one at a time and
 * has no idea what the element's background became.
 */
.form-find .btn-find,
.form-find .btn-find svg,
.form-find .btn-find * {
    color: #fff !important;
}

.socail_list li a {
    background: var(--ld-primary, #3C65F5);
}

.abs_hide_box svg,
.alredy_login a,
.custom_btn,
.fix_more,
.list-tabs-2 .nav-tabs li a.active,
.list-tabs-2 .nav-tabs li a:hover,
.list-tabs-2 .nav-tabs.main_list li a.active,
.list-tabs-2 .nav-tabs.main_list li a:hover,
.loc_txtt a,
.mobile-menu a:hover .submenu-indicator i,
.nav-tabs.sub_list li a.active,
.nav-tabs.sub_list li a:hover,
body .list_style_posts .card_content a.spotlight-title {
    color: var(--ld-primary, #3C65F5);
}

.dashboard_btn {
    border: 1px dashed var(--ld-primary, #3C65F5);
}

.btn_black:hover {
    background: var(--ld-primary, #3C65F5) !important;
}

.list-tabs-2 .nav-tabs li a.active,
.list-tabs-2 .nav-tabs li a:hover,
.list-tabs-2 .nav-tabs.main_list li a.active,
.list-tabs-2 .nav-tabs.main_list li a:hover,
.nav-tabs.sub_list li a.active,
.nav-tabs.sub_list li a:hover {
    border-color: var(--ld-primary, #3C65F5);
}

/* ===========================================================================
 * COMMUNITIES PAGE - templates/pages/communities.php
 *
 * Moved out of the template (no inline CSS in a theme view). The .tsc-*
 * card, button, eyebrow and call-to-action pieces are shared with the About
 * page, which is why the variable block also names .tsa.
 * ======================================================================== */
.tsc, .tsa { --tsc-ink:#101828; --tsc-body:#475467; --tsc-muted:#667085; --tsc-rule:#e4e7ec; --tsc-ground:#f8f9fb;
       --tsc-accent: var(--ld-primary, #3C65F5); --tsc-accent-dark: var(--ld-primary-dark, #1f47d6);
       clear: both; color: var(--tsc-body); font-size: 16px; }
.tsc .container { position: relative; }

/* Banner */
.tsc-hero { padding: 24px 0 0; }
.tsc-hero__panel {
    position: relative; overflow: hidden; isolation: isolate;
    display: flex; align-items: flex-end;
    min-height: clamp(320px, 34vw, 440px);
    padding: clamp(32px, 5vw, 64px);
    border-radius: 24px;
    background: linear-gradient(135deg, var(--tsc-accent-dark) 0%, var(--tsc-accent) 100%);
    color: #fff;
}
.tsc-hero__panel.has-image { background: #0b1220 var(--tsc-hero) center / cover no-repeat; }
.tsc-hero__panel.has-image::before {
    content: ""; position: absolute; inset: 0; z-index: -1;
    background: linear-gradient(90deg, rgba(8,13,26,.86) 0%, rgba(8,13,26,.62) 48%, rgba(8,13,26,.18) 100%);
}
.tsc-hero__copy { max-width: 44rem; }
.tsc-hero h1 {
    margin: 0 0 16px; color: #fff;
    font-size: clamp(30px, 4.2vw, 50px); line-height: 1.08; font-weight: 800; letter-spacing: -.025em;
}
.tsc-hero h1 span { color: color-mix(in srgb, var(--tsc-accent) 45%, #fff); }
.tsc-hero p { margin: 0 0 26px; font-size: 18px; line-height: 1.6; color: rgba(255,255,255,.86); max-width: 38rem; }

.tsc-btn {
    display: inline-flex; align-items: center; gap: 8px;
    font-size: 16px; font-weight: 700; line-height: 1.2; text-decoration: none !important;
    padding: 13px 24px; border-radius: 999px; border: 1px solid transparent;
    transition: background-color .18s, color .18s, border-color .18s, transform .18s;
}
.tsc-btn:hover { transform: translateY(-1px); }
.tsc-btn--primary { background: var(--tsc-accent); color: #fff !important; }
.tsc-btn--primary:hover { background: var(--tsc-accent-dark); }
.tsc-btn--light { background: #fff; color: var(--tsc-ink) !important; }
.tsc-btn--light:hover { background: rgba(255,255,255,.9); }
.tsc-btn--ghost { background: transparent; color: var(--tsc-ink) !important; border-color: var(--tsc-rule); }
.tsc-btn--ghost:hover { border-color: var(--tsc-accent); color: var(--tsc-accent) !important; }

.tsc-eyebrow {
    display: inline-block; margin: 0 0 12px;
    font-size: 14px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
    color: var(--tsc-accent);
}

/* Directory */
.tsc-dir { padding: 72px 0 40px; scroll-margin-top: 90px; }
.tsc-dir__head { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 18px 40px; margin-bottom: 28px; }
.tsc-dir__head > div { max-width: 44rem; }
.tsc-dir h2, .tsc-cta h2, .tsc-faq h2 {
    margin: 0 0 12px; color: var(--tsc-ink);
    font-size: clamp(26px, 3vw, 36px); line-height: 1.15; font-weight: 800; letter-spacing: -.02em;
}
.tsc-dir__head p { margin: 0; font-size: 17px; line-height: 1.65; color: var(--tsc-muted); }
.tsc-dir__total { font-size: 15px; color: var(--tsc-muted); white-space: nowrap; }
.tsc-dir__total strong { color: var(--tsc-ink); }

.tsc-filter { display: flex; flex-wrap: wrap; gap: 10px; margin: 0 0 32px; padding: 0; list-style: none; }
.tsc-chip {
    display: inline-flex; align-items: center; gap: 8px;
    font-size: 15px; font-weight: 600; line-height: 1; text-decoration: none !important;
    padding: 10px 16px; border-radius: 5px;
    color: var(--tsc-body) !important; background: #fff; border: 1px solid var(--tsc-rule);
    transition: background-color .18s, color .18s, border-color .18s;
}
.tsc-chip:hover { border-color: var(--tsc-accent); color: var(--tsc-accent) !important; }
.tsc-chip span {
    min-width: 24px; padding: 4px 7px; border-radius: 4px; text-align: center;
    font-size: 14px; font-weight: 700; background: var(--tsc-ground); color: var(--tsc-muted);
}
.tsc-chip.is-active { background: var(--tsc-accent); border-color: var(--tsc-accent); color: #fff !important; }
.tsc-chip.is-active span { background: rgba(255,255,255,.2); color: #fff; }

.tsc-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 36px 28px; }

/* IMAGE ON TOP WITH A NOTCHED CORNER, TEXT UNDERNEATH.
 *
 * The image is shown as it is - no wash over it - with only the categories and
 * the name below. Hovering lays the portal's primary colour over the image and
 * reveals the excerpt on it. A touch screen cannot hover, so there the excerpt
 * stays under the name instead. The image's bottom-right corner is cut out in the page colour
 * and holds the link button; the two small pseudo-elements round the image's
 * edge into that cut so it reads as one shape.
 *
 * --tsc-r is the image's corner radius, --tsc-notch the size of the cut and
 * --tsc-page the colour behind the cards (the cut has to match it). */
.tsc-card {
    --tsc-r: 18px; --tsc-notch: 84px; --tsc-page: #fff;
    position: relative; display: flex; flex-direction: column;
}
.tsc-card[hidden] { display: none !important; }

/* The whole image, never cropped: the covers are a mix of 4:3 and square, so
 * the frame is 4:3, the image is contained, and a blurred copy of it fills the
 * sides of a square one instead of flat bars. */
.tsc-card__media {
    position: relative; overflow: hidden; isolation: isolate;
    aspect-ratio: 4 / 3; border-radius: var(--tsc-r);
    background: var(--tsc-ground);
}
.tsc-card__media::before {
    content: ""; position: absolute; inset: -24px; z-index: -1;
    background: var(--tsc-img, none) center / cover no-repeat;
    filter: blur(22px) saturate(1.15); opacity: .5;
}
.tsc-card__media img {
    display: block; width: 100%; height: 100%; object-fit: contain;
    transition: transform .5s;
}
.tsc-card__media::after {
    content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none;
    background: linear-gradient(180deg,
        color-mix(in srgb, var(--tsc-accent) 62%, transparent) 0%,
        color-mix(in srgb, var(--tsc-accent-dark) 94%, transparent) 100%);
    opacity: 0; transition: opacity .3s;
}
.tsc-card:hover .tsc-card__media::after,
.tsc-card:focus-within .tsc-card__media::after { opacity: 1; }

/* The excerpt, revealed over the image. Kept clear of the notch on the right. */
.tsc-card__reveal {
    position: absolute; inset: 0; z-index: 2; pointer-events: none;
    display: flex; align-items: flex-end;
    padding: 24px calc(var(--tsc-notch) + 10px) 24px 24px;
    opacity: 0; transform: translateY(10px);
    transition: opacity .3s, transform .3s;
}
.tsc-card__reveal p {
    margin: 0; font-size: 16px; line-height: 1.6; color: #fff;
    display: -webkit-box; -webkit-line-clamp: 6; -webkit-box-orient: vertical; overflow: hidden;
}
.tsc-card:hover .tsc-card__reveal,
.tsc-card:focus-within .tsc-card__reveal { opacity: 1; transform: none; }
.tsc-card:hover .tsc-card__media img { transform: scale(1.04); }
.tsc-card__placeholder {
    display: flex; align-items: center; justify-content: center; height: 100%;
    font-size: 44px; font-weight: 800; color: var(--tsc-accent);
    background: color-mix(in srgb, var(--tsc-accent) 8%, #fff);
}

.tsc-card__notch {
    position: absolute; right: 0; bottom: 0; z-index: 2; pointer-events: none;
    width: var(--tsc-notch); height: var(--tsc-notch);
    background: var(--tsc-page); border-top-left-radius: var(--tsc-r);
}
.tsc-card__notch::before, .tsc-card__notch::after {
    content: ""; position: absolute; width: var(--tsc-r); height: var(--tsc-r);
    background: radial-gradient(circle at 0 0, transparent calc(var(--tsc-r) - .5px), var(--tsc-page) var(--tsc-r));
}
.tsc-card__notch::before { right: 0; bottom: 100%; }
.tsc-card__notch::after  { right: 100%; bottom: 0; }

.tsc-card__go {
    position: absolute; right: 0; bottom: 0; z-index: 3;
    display: flex; align-items: center; justify-content: center;
    width: calc(var(--tsc-notch) - 12px); height: calc(var(--tsc-notch) - 12px);
    border-radius: calc(var(--tsc-r) - 2px);
    background: var(--tsc-accent); color: #fff !important; font-size: 26px; text-decoration: none !important;
    transition: background-color .2s;
}
.tsc-card__go:hover { background: var(--tsc-accent-dark); }
.tsc-card__go:focus-visible { outline: 3px solid var(--tsc-accent); outline-offset: 3px; }
.tsc-card__go i { line-height: 1; transition: transform .2s; }
.tsc-card:hover .tsc-card__go i { transform: translate(3px, -3px); }

.tsc-card__body { padding: 18px 4px 0; }
.tsc-card__tags { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 10px; }
.tsc-tag {
    font-size: 14px; font-weight: 600; line-height: 1.2; padding: 4px 8px; border-radius: 5px;
    color: var(--tsc-accent); background: color-mix(in srgb, var(--tsc-accent) 9%, #fff);
}
.tsc-card h3 {
    margin: 0 0 8px; color: var(--tsc-ink);
    font-size: 21px; line-height: 1.3; font-weight: 700; letter-spacing: -.015em;
}
.tsc-card h3 a { color: var(--tsc-ink) !important; text-decoration: none !important; transition: color .18s; }
.tsc-card:hover h3 a { color: var(--tsc-accent) !important; }
/* The name's link covers the whole card, so the card is one click target. */
.tsc-card__cover::after { content: ""; position: absolute; inset: 0; z-index: 1; }
.tsc-card__cover:focus-visible { outline: none; }
.tsc-card:has(.tsc-card__cover:focus-visible) { outline: 3px solid var(--tsc-accent); outline-offset: 4px; border-radius: 6px; }
.tsc-card__touch {
    margin: 0; font-size: 16px; line-height: 1.6; color: var(--tsc-muted);
    display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
}
@media (hover: hover) { .tsc-card__touch { display: none; } }
@media (hover: none)  { .tsc-card__reveal { display: none; } }
@media (prefers-reduced-motion: reduce) {
    .tsc-card__reveal, .tsc-card__media::after, .tsc-card__media img { transition: none; }
}

.tsc-empty {
    margin: 0; padding: 48px 20px; text-align: center; font-size: 16px; color: var(--tsc-muted);
    border: 1px dashed #d0d5dd; border-radius: 5px;
}
/* Call to action */
.tsc-cta { padding: 40px 0; }
.tsc-cta__panel {
    display: grid; grid-template-columns: 1fr; gap: 40px; align-items: center;
    padding: clamp(28px, 4.5vw, 56px); border-radius: 24px;
    background: color-mix(in srgb, var(--tsc-accent) 7%, #fff);
    border: 1px solid color-mix(in srgb, var(--tsc-accent) 16%, #fff);
}
.tsc-cta__panel.has-image { grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); }
.tsc-cta__media img { width: 100%; border-radius: 16px; display: block; box-shadow: 0 18px 40px rgba(16,24,40,.12); }
.tsc-cta p { margin: 0 0 24px; font-size: 17px; line-height: 1.7; color: var(--tsc-body); }
.tsc-cta__actions { display: flex; flex-wrap: wrap; gap: 12px; }

/* FAQ */
.tsc-faq { padding: 56px 0 88px; }
.tsc-faq__grid { display: grid; grid-template-columns: minmax(0, .8fr) minmax(0, 1.4fr); gap: 56px; align-items: start; }
.tsc-faq__grid > div:first-child p { margin: 0; font-size: 17px; line-height: 1.65; color: var(--tsc-muted); }
.tsc-faq .accordion-item {
    border: 1px solid var(--tsc-rule); border-radius: 14px; margin-bottom: 12px; overflow: hidden; background: #fff;
}
.tsc-faq .accordion-button {
    display: flex; align-items: center; justify-content: space-between; gap: 16px; width: 100%;
    padding: 18px 22px; font-size: 17px; font-weight: 600; line-height: 1.45; text-align: left;
    color: var(--tsc-ink); background: #fff; box-shadow: none; border: 0;
}
.tsc-faq .accordion-button::after { display: none; }
.tsc-faq .accordion-button:focus { box-shadow: none; }
.tsc-faq .accordion-button:focus-visible { outline: 3px solid color-mix(in srgb, var(--tsc-accent) 40%, transparent); outline-offset: -3px; }
.tsc-faq .accordion-button:not(.collapsed) { color: var(--tsc-accent); background: #fff; }
.tsc-faq .tsc-faq__mark {
    flex: 0 0 28px; width: 28px; height: 28px; border-radius: 50%; position: relative;
    background: color-mix(in srgb, var(--tsc-accent) 11%, #fff);
}
.tsc-faq .tsc-faq__mark::before, .tsc-faq .tsc-faq__mark::after {
    content: ""; position: absolute; left: 50%; top: 50%; width: 12px; height: 2px; border-radius: 1px;
    background: var(--tsc-accent); transform: translate(-50%, -50%); transition: transform .2s, opacity .2s;
}
.tsc-faq .tsc-faq__mark::after { transform: translate(-50%, -50%) rotate(90deg); }
.tsc-faq .accordion-button:not(.collapsed) .tsc-faq__mark::after { transform: translate(-50%, -50%); opacity: 0; }
.tsc-faq .accordion-body { padding: 0 22px 20px; font-size: 16px; line-height: 1.75; color: var(--tsc-body); }
.tsc-faq .accordion-body > *:last-child { margin-bottom: 0; }

@media (prefers-reduced-motion: reduce) {
    .tsc-card, .tsc-card__media img, .tsc-btn, .tsc-card__link i { transition: none; }
}
@media (max-width: 1199px) { .tsc-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 991px) {
    .tsc-cta__panel.has-image, .tsc-faq__grid { grid-template-columns: 1fr; }
    .tsc-faq__grid { gap: 24px; }
}
@media (max-width: 640px) {
    .tsc-hero { padding-top: 12px; }
    .tsc-hero__panel { border-radius: 18px; }
    .tsc-hero p { font-size: 16px; }
    .tsc-dir { padding-top: 48px; }
    .tsc-grid { grid-template-columns: 1fr; }
    .tsc-filter { flex-wrap: nowrap; overflow-x: auto; margin-left: -12px; margin-right: -12px; padding: 0 12px 4px; }
    .tsc-chip { white-space: nowrap; }
}

/* ===========================================================================
 * ABOUT PAGE - templates/pages/about_us.php
 *
 * Cards, buttons, eyebrows and the call-to-action panel are the .tsc-* pieces
 * above, shared with the Communities page. Colours come from the portal's
 * backend variables (--ld-primary, --ld-primary-dark); the rest are neutrals.
 * ======================================================================== */
.tsa-hero {
    padding: 64px 0 80px;
    background: linear-gradient(180deg, color-mix(in srgb, var(--tsc-accent) 7%, #fff) 0%, #fff 100%);
}
.tsa-hero__grid { display: grid; grid-template-columns: 1fr; gap: 56px; align-items: center; }
.tsa-hero__grid.has-images { grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr); }
.tsa-hero__copy { max-width: 40rem; }
.tsa-hero h1 {
    margin: 0 0 20px; color: var(--tsc-ink);
    font-size: clamp(34px, 4.2vw, 52px); line-height: 1.08; font-weight: 800; letter-spacing: -.03em;
}
.tsa-hero h1 span { color: var(--tsc-accent); }
.tsa-lead { margin: 0 0 30px; font-size: 18px; line-height: 1.7; color: var(--tsc-body); }
.tsa-actions { display: flex; flex-wrap: wrap; gap: 12px; }

/* A staggered collage: three columns, the middle one dropped. */
.tsa-hero__media {
    display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px;
    padding-bottom: 40px;
}
.tsa-hero__img {
    margin: 0; overflow: hidden; aspect-ratio: 3 / 4;
    border-radius: 18px; background: var(--tsc-ground);
    box-shadow: 0 14px 34px rgba(16, 24, 40, .12);
}
.tsa-hero__img:nth-child(3n+2) { transform: translateY(40px); }
.tsa-hero__img img { display: block; width: 100%; height: 100%; object-fit: cover; }

.tsa-section { padding: 88px 0; }
.tsa-head { max-width: 46rem; margin: 0 0 40px; }
.tsa-head h2,
.tsa-features h2 {
    margin: 0 0 14px; color: var(--tsc-ink);
    font-size: clamp(24px, 2.4vw, 32px); line-height: 1.2; font-weight: 800; letter-spacing: -.02em;
}
.tsa-head p { margin: 0; font-size: 17px; line-height: 1.7; color: var(--tsc-muted); }

/* Photos rather than logos: fill the frame instead of showing it whole. */
.tsc-card--cover .tsc-card__media::before { display: none; }
.tsc-card--cover .tsc-card__media img { object-fit: cover; }

.tsa-features { padding: 96px 0; background: var(--tsc-accent-dark); color: #fff; }
.tsa-features__grid { display: grid; grid-template-columns: minmax(0, .85fr) minmax(0, 1.6fr); gap: 56px; align-items: start; }
.tsa-features__grid.is-solo { grid-template-columns: minmax(0, 46rem); }
.tsa-features__intro { position: sticky; top: 100px; }
.tsa-features .tsc-eyebrow { color: rgba(255, 255, 255, .78); }
.tsa-features h2 { color: #fff; }
.tsa-features__text { margin: 0 0 28px; font-size: 17px; line-height: 1.75; color: rgba(255, 255, 255, .86); }
.tsa-features__text p { margin: 0 0 12px; }
.tsa-features__list { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px; }
/* A shade darker than the band, mixed from the portal's own colour, and a hairline
 * white edge - so each card reads as a card against the blue. */
.tsa-feature {
    overflow: hidden; border-radius: 16px;
    background: color-mix(in srgb, var(--tsc-accent-dark) 72%, #000);
    border: 1px solid rgba(255, 255, 255, .16);
    transition: background-color .2s, border-color .2s, transform .2s;
}
.tsa-feature:hover {
    background: color-mix(in srgb, var(--tsc-accent-dark) 84%, #000);
    border-color: rgba(255, 255, 255, .34);
    transform: translateY(-3px);
}
.tsa-feature__img { aspect-ratio: 16 / 10; overflow: hidden; background: rgba(255, 255, 255, .08); }
.tsa-feature__img img { display: block; width: 100%; height: 100%; object-fit: cover; }
.tsa-feature__body { padding: 18px 18px 20px; }
.tsa-feature h3 { margin: 0 0 8px; color: #fff; font-size: 18px; line-height: 1.35; font-weight: 700; }
.tsa-feature p { margin: 0; font-size: 15px; line-height: 1.6; color: rgba(255, 255, 255, .8); }

.tsa .tsc-cta { padding: 88px 0; }

@media (prefers-reduced-motion: reduce) {
    .tsa-feature { transition: none; }
}
@media (max-width: 1199px) {
    .tsa-features__list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 991px) {
    .tsa-hero { padding: 40px 0 56px; }
    .tsa-hero__grid.has-images,
    .tsa-features__grid { grid-template-columns: 1fr; }
    .tsa-features__intro { position: static; }
}
@media (max-width: 640px) {
    .tsa-section,
    .tsa-features,
    .tsa .tsc-cta { padding: 56px 0; }
    .tsa-features__list { grid-template-columns: 1fr; }
    .tsa-hero__media { gap: 10px; padding-bottom: 24px; }
    .tsa-hero__img { border-radius: 12px; }
    .tsa-hero__img:nth-child(3n+2) { transform: translateY(24px); }
}

/* About hero: the old animated collage on wide screens, the static grid below.
 * The collage itself is styled by job_hub/assets/css/style.css
 * (.banner-homepage5 .banner-imgs, .shape-1..3) - nothing here restyles it. */
.tsa-hero__collage { display: none; }
.tsa-hero__collage .banner-imgs img { display: block; width: 100%; height: auto; }
@media (min-width: 1200px) {
    .tsa-hero__collage { display: block; }
    .tsa-hero__visual .tsa-hero__media { display: none; }
}
@media (prefers-reduced-motion: reduce) {
    .tsa-hero__collage .shape-1,
    .tsa-hero__collage .shape-2,
    .tsa-hero__collage .shape-3 { animation: none; }
}

/* ===========================================================================
 * SERVICE DETAIL PAGE - templates/service_details.php
 *
 * The banner, FAQ and call to action are the shared .tsc-* pieces above; this
 * is the article between them.
 * ======================================================================== */
.tsd-hero .tsc-hero__panel { min-height: clamp(220px, 22vw, 300px); }
.tsd-hero h1 { margin: 0; }
.tsd-crumbs {
    display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
    margin: 0 0 12px; font-size: 14px; font-weight: 600; color: rgba(255, 255, 255, .82);
}
.tsd-crumbs a { color: #fff !important; text-decoration: none !important; }
.tsd-crumbs a:hover { text-decoration: underline !important; }
.tsd-crumbs i { font-size: 14px; line-height: 1; }

.tsd-body { padding: 64px 0 16px; }
.tsd-article { max-width: 60rem; margin: 0 auto; }
.tsd-figure {
    margin: 0 0 36px; overflow: hidden; border-radius: 18px;
    background: var(--tsc-ground); box-shadow: 0 18px 40px rgba(16, 24, 40, .10);
}
.tsd-figure img { display: block; width: 100%; height: auto; }
.tsd-title {
    margin: 0 0 16px; color: var(--tsc-ink);
    font-size: clamp(24px, 2.4vw, 32px); line-height: 1.2; font-weight: 800; letter-spacing: -.02em;
}

.tsd-prose { font-size: 17px; line-height: 1.8; color: var(--tsc-body); }
.tsd-prose > *:first-child { margin-top: 0; }
.tsd-prose > *:last-child { margin-bottom: 0; }
.tsd-prose p { margin: 0 0 16px; }
.tsd-prose h2, .tsd-prose h3, .tsd-prose h4 { margin: 32px 0 12px; color: var(--tsc-ink); font-weight: 700; line-height: 1.3; }
.tsd-prose h2 { font-size: 24px; }
.tsd-prose h3 { font-size: 21px; }
.tsd-prose h4 { font-size: 18px; }
.tsd-prose ul, .tsd-prose ol { margin: 0 0 18px; padding-left: 22px; }
.tsd-prose li { margin: 0 0 8px; }
.tsd-prose a { color: var(--tsc-accent); text-decoration: underline; }
.tsd-prose strong, .tsd-prose b { color: var(--tsc-ink); }
.tsd-intro { font-size: 18px; }

.tsd-points {
    display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px 28px;
    margin: 28px 0 36px; padding: 24px 26px; list-style: none;
    border-radius: 16px; background: color-mix(in srgb, var(--tsc-accent) 6%, #fff);
}
.tsd-points li { display: flex; align-items: flex-start; gap: 12px; font-size: 16px; line-height: 1.55; color: var(--tsc-ink); }
.tsd-points i { flex: 0 0 auto; margin-top: 1px; font-size: 20px; line-height: 1; color: var(--tsc-accent); }

.tsd-faq { padding-top: 48px; }
.tsd .tsc-cta { padding: 40px 0 88px; }

@media (max-width: 767px) {
    .tsd-body { padding-top: 40px; }
    .tsd-prose { font-size: 16px; }
    .tsd-intro { font-size: 17px; }
    .tsd-points { grid-template-columns: 1fr; padding: 18px; }
    .tsd .tsc-cta { padding: 24px 0 56px; }
}

/* Service detail: the other services, last on the page. Four across on wide
 * screens - one row for a portal's usual handful - the shared grid below that. */
.tsd .tsc-cta { padding-bottom: 40px; }
.tsd-related { padding: 32px 0 88px; }
.tsd-related .tsa-head { margin-bottom: 28px; }
.tsd-related__head { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px; max-width: none; }
.tsd-related__head h2 { margin: 0; }

/* THE OTHER SERVICES AS A SLIDER. A native scroll-snap row: three cards to a
 * view, swipeable on touch, and two buttons (inner.js) that move it one card
 * at a time and hide when every card already fits. */
.tsd-slider__nav { display: flex; flex: 0 0 auto; gap: 10px; }
.tsd-slider__nav[hidden] { display: none !important; }
.tsd-slider__btn {
    display: inline-flex; align-items: center; justify-content: center;
    width: 48px; height: 48px; padding: 0; border-radius: 50%; cursor: pointer;
    font-size: 20px; line-height: 1; color: var(--tsc-ink);
    background: #fff; border: 1px solid var(--tsc-rule);
    transition: background-color .2s, color .2s, border-color .2s, opacity .2s;
}
.tsd-slider__btn:hover:not(:disabled) { background: var(--tsc-accent); border-color: var(--tsc-accent); color: #fff; }
.tsd-slider__btn:disabled { opacity: .4; cursor: default; }
.tsd-slider__btn:focus-visible { outline: 3px solid color-mix(in srgb, var(--tsc-accent) 40%, transparent); outline-offset: 2px; }

.tsd-slider__track {
    --tsd-gap: 24px; --tsd-per: 3;
    display: grid; grid-auto-flow: column;
    grid-auto-columns: calc((100% - (var(--tsd-per) - 1) * var(--tsd-gap)) / var(--tsd-per));
    gap: var(--tsd-gap);
    overflow-x: auto; overscroll-behavior-x: contain;
    scroll-snap-type: x mandatory; scroll-behavior: smooth;
    scrollbar-width: none;
    padding: 4px 2px 8px; margin: 0 -2px;
}
.tsd-slider__track::-webkit-scrollbar { display: none; }
.tsd-slider__track > .tsc-card { scroll-snap-align: start; }
.tsd-slider__track:focus-visible { outline: 3px solid color-mix(in srgb, var(--tsc-accent) 40%, transparent); outline-offset: 4px; border-radius: 6px; }
@media (max-width: 991px) {
    .tsd-slider__track { --tsd-per: 2; --tsd-gap: 18px; }
}
@media (max-width: 575px) {
    /* One card and the edge of the next, so it reads as a row to swipe. */
    .tsd-slider__track { grid-auto-columns: 82%; --tsd-gap: 14px; }
    .tsd-slider__btn { width: 42px; height: 42px; font-size: 18px; }
}
@media (prefers-reduced-motion: reduce) {
    .tsd-slider__track { scroll-behavior: auto; }
}
@media (max-width: 767px) {
    .tsd .tsc-cta { padding-bottom: 24px; }
    .tsd-related { padding: 24px 0 56px; }
}

/* The Who Benefits cards are a breadcrumb target; clear the sticky header. */
.tsa-benefits { scroll-margin-top: 90px; }

/* ===========================================================================
 * CONTACT PAGE - templates/pages/contact.php
 *
 * Moved out of the template (no inline CSS in a theme view). Labels that were
 * 11-13px are 14px, the smallest size used anywhere on the site.
 * ======================================================================== */
.ld-contact { --ldc-ink:#101828; --ldc-body:#4a4f5a; --ldc-muted:#667085;
              --ldc-ground:#f7f8fa; --ldc-panel:#fff; --ldc-rule:#e6e8ec;
              --ldc-rule-soft:#eef0f4; }

/* `clear: both` is doing the real work, not the padding: the header floats and
 * shares a parent with this section. */
.ld-contact-wrap { clear: both; padding: 72px 0 80px; }

.ld-contact .ld-contact-head { max-width: 34rem; margin-bottom: 48px; }
.ld-contact .ld-eyebrow {
    display: inline-block; margin: 0 0 14px;
    font-size: 14px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
    color: var(--ld-primary, #3C65F5);
}
.ld-contact .ld-contact-head h1 {
    margin: 0 0 14px; font-size: clamp(32px, 4.6vw, 44px); line-height: 1.1;
    letter-spacing: -.02em; font-weight: 800; color: var(--ldc-ink);
}
.ld-contact .ld-contact-head p { margin: 0; font-size: 18px; color: var(--ldc-muted); line-height: 1.65; }

.ld-contact .ld-contact-grid {
    display: grid; grid-template-columns: minmax(0, .85fr) minmax(0, 1.15fr);
    gap: 64px; align-items: start;
}

.ld-contact .ld-reach-row {
    display: grid; grid-template-columns: 40px minmax(0, 1fr); gap: 18px;
    padding: 22px 0; border-bottom: 1px solid var(--ldc-rule-soft);
}
.ld-contact .ld-reach-row:first-child { padding-top: 0; }
.ld-contact .ld-reach-icon {
    width: 40px; height: 40px; display: grid; place-items: center; border-radius: 11px;
    background: color-mix(in srgb, var(--ld-primary, #3C65F5) 12%, #fff);
    color: var(--ld-primary, #3C65F5);
}
.ld-contact .ld-reach-icon svg { width: 19px; height: 19px; display: block; }
.ld-contact .ld-reach-label {
    margin: 0 0 3px; font-size: 14px; font-weight: 700; letter-spacing: .06em;
    text-transform: uppercase; color: var(--ldc-muted);
}
.ld-contact .ld-reach-value { margin: 0; font-size: 17px; font-weight: 600; color: var(--ldc-ink); line-height: 1.45; overflow-wrap: anywhere; }
.ld-contact .ld-reach-value a { color: inherit; text-decoration: none; border-bottom: 1px solid var(--ldc-rule); }
.ld-contact .ld-reach-value a:hover { color: var(--ld-primary, #3C65F5); border-bottom-color: var(--ld-primary, #3C65F5); }
.ld-contact .ld-reach-address { font-size: 16px; font-weight: 500; line-height: 1.6; }
.ld-contact .ld-reach-note { margin: 4px 0 0; font-size: 14px; color: var(--ldc-muted); }

.ld-contact .ld-page-copy { margin-top: 28px; font-size: 16px; line-height: 1.75; color: var(--ldc-body); }
.ld-contact .ld-page-copy > *:last-child { margin-bottom: 0; }

.ld-contact .ld-form-panel {
    background: var(--ldc-panel); border: 1px solid var(--ldc-rule);
    border-radius: 16px; padding: 36px;
    box-shadow: 0 1px 2px rgba(16,24,40,.04), 0 12px 32px rgba(16,24,40,.07);
}
.ld-contact .ld-form-panel > h2 {
    margin: 0 0 6px; font-size: 22px; font-weight: 700; letter-spacing: -.015em; color: var(--ldc-ink);
}
.ld-contact .ld-form-intro { margin: 0 0 28px; font-size: 15px; color: var(--ldc-muted); }
.ld-contact .ld-form-empty { margin: 0 0 18px; }

.ld-contact .ld-form .form-group { margin-bottom: 18px; }
.ld-contact .ld-form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 0 18px; }

.ld-contact .ld-form label.control-label {
    display: block; margin-bottom: 7px;
    font-size: 14px; font-weight: 600; color: var(--ldc-ink);
}
.ld-contact .ld-form .req { color: var(--ld-primary, #3C65F5); margin-left: 2px; }

/* The legacy rules pin inputs to width:420px; this overrides that, nothing else. */
.ld-contact .ld-form input[type="text"],
.ld-contact .ld-form input[type="email"],
.ld-contact .ld-form input[type="tel"],
.ld-contact .ld-form input[type="url"],
.ld-contact .ld-form input[type="number"],
.ld-contact .ld-form input[type="date"],
.ld-contact .ld-form select.form-control,
.ld-contact .ld-form textarea.form-control {
    width: 100%; max-width: 100%; height: auto;
    font: inherit; font-size: 15px; color: var(--ldc-ink);
    background: var(--ldc-ground); border: 1px solid var(--ldc-rule);
    border-radius: 10px; padding: 12px 14px;
    transition: border-color .15s, box-shadow .15s, background-color .15s;
}
.ld-contact .ld-form textarea.form-control { min-height: 132px; line-height: 1.6; resize: vertical; }
.ld-contact .ld-form input::placeholder,
.ld-contact .ld-form textarea::placeholder { color: var(--ldc-muted); opacity: .75; }
.ld-contact .ld-form input:focus,
.ld-contact .ld-form select:focus,
.ld-contact .ld-form textarea:focus {
    outline: none; background: #fff;
    border-color: var(--ld-primary, #3C65F5);
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--ld-primary, #3C65F5) 22%, transparent);
}
.ld-contact .ld-form .ld-check { display: flex; align-items: flex-start; gap: 9px; font-size: 15px; color: var(--ldc-body); }
.ld-contact .ld-form .ld-check input { margin-top: 4px; }

.ld-contact .captcha { margin: 0 0 18px; max-width: 100%; overflow: hidden; }
/* The honeypot is a required checkbox the recaptcha callback clears. Hidden
 * from sight, never with display:none - a display:none required field blocks
 * submit with a validation error nobody can see. */
.ld-contact .captcha-fake-field { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }

.ld-contact .ld-form-foot {
    display: flex; align-items: center; justify-content: space-between;
    gap: 20px; flex-wrap: wrap; margin-top: 6px;
}
.ld-contact .ld-privacy { margin: 0; font-size: 14px; color: var(--ldc-muted); max-width: 26rem; }

.ld-contact .ld-form button[type="submit"] {
    float: none; height: auto;
    font: inherit; font-size: 15px; font-weight: 700;
    color: #fff !important;
    background: var(--ld-primary, #3C65F5) !important;
    border: 0; border-radius: 30px; padding: 13px 32px; cursor: pointer;
    transition: background-color .18s, transform .18s;
}
.ld-contact .ld-form button[type="submit"]:hover {
    background: var(--ld-primary-dark, #1f47d6) !important; transform: translateY(-1px);
}
.ld-contact .ld-form button[disabled] { opacity: .6; cursor: default; transform: none; }

.ld-contact .alert { border-radius: 10px; margin-bottom: 20px; }
.ld-contact .ld-form-reply { margin: 18px 0 0; }

@media (prefers-reduced-motion: reduce) {
    .ld-contact .ld-form input, .ld-contact .ld-form textarea,
    .ld-contact .ld-form button[type="submit"] { transition: none; }
    .ld-contact .ld-form button[type="submit"]:hover { transform: none; }
}
@media (max-width: 991px) {
    .ld-contact .ld-contact-grid { grid-template-columns: 1fr; gap: 44px; }
    .ld-contact-wrap { padding: 40px 0 60px; }
    .ld-contact .ld-form-panel { padding: 26px 22px; }
    .ld-contact .ld-form-row { grid-template-columns: 1fr; }
}
@media (max-width: 575px) {
    .ld-contact .ld-contact-head { margin-bottom: 32px; }
    .ld-contact .ld-form-panel { padding: 22px 16px; border-radius: 14px; }
    .ld-contact .ld-form-foot { flex-direction: column; align-items: stretch; }
    .ld-contact .ld-form button[type="submit"] { width: 100%; }
    /* reCAPTCHA is a fixed 304px iframe; scale it down on the narrowest phones. */
    .ld-contact .g-recaptcha { transform: scale(.9); transform-origin: 0 0; }
}

/* FOOTER ON PHONES. The footer nests .container > .row > .container > .row, so
 * the inner container's own padding pushed every column 4px past the screen
 * and the whole page scrolled sideways. On phones the rows lose their negative
 * margins and the inner container its padding, so nothing passes the screen
 * edge; desktop, where it always fitted, is left exactly as it was. */
@media (max-width: 767px) {
    .ts-biz-footer .row { margin-left: 0; margin-right: 0; }
    .ts-biz-footer .row > .container { padding-left: 0; padding-right: 0; }
}

/* ===========================================================================
 * FORM PAGE - templates/pages/form_page.php
 *
 * The form panel beside highlights, next steps and contact details; on phones
 * the form comes first. Colours from the backend (--ld-primary); the rest are
 * neutrals.
 * ======================================================================== */
.tsfp {
    --tsfp-ink: #101828; --tsfp-body: #475467; --tsfp-muted: #667085;
    --tsfp-rule: #e4e7ec; --tsfp-ground: #f8f9fb;
    --tsfp-accent: var(--ld-primary, #3C65F5);
    clear: both;
}
.tsfp-hero {
    padding: 64px 0 40px;
    background: linear-gradient(180deg, color-mix(in srgb, var(--tsfp-accent) 8%, #fff) 0%, #fff 100%);
}
.tsfp-hero__copy { max-width: 46rem; }
.tsfp-eyebrow {
    display: inline-block; margin: 0 0 12px;
    font-size: 14px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
    color: var(--tsfp-accent);
}
.tsfp-hero h1 {
    margin: 0 0 16px; color: var(--tsfp-ink);
    font-size: clamp(32px, 4.2vw, 50px); line-height: 1.1; font-weight: 800; letter-spacing: -.025em;
}
.tsfp-hero p { margin: 0; font-size: 18px; line-height: 1.7; color: var(--tsfp-body); }

.tsfp-body { padding: 16px 0 88px; }
.tsfp-grid {
    display: grid; grid-template-columns: minmax(0, .85fr) minmax(0, 1.15fr);
    grid-template-areas: "aside panel"; gap: 48px; align-items: start;
}
.tsfp-grid.is-solo { grid-template-columns: minmax(0, 52rem); grid-template-areas: "panel"; }

.tsfp-panel {
    grid-area: panel; background: #fff; border: 1px solid var(--tsfp-rule); border-radius: 18px;
    padding: 36px; box-shadow: 0 1px 2px rgba(16, 24, 40, .04), 0 16px 40px rgba(16, 24, 40, .08);
}
.tsfp-panel > h2 { margin: 0 0 6px; color: var(--tsfp-ink); font-size: 24px; font-weight: 700; letter-spacing: -.015em; }
.tsfp-panel > p { margin: 0 0 24px; font-size: 15px; line-height: 1.6; color: var(--tsfp-muted); }
.tsfp-empty {
    margin: 0; padding: 28px; text-align: center; font-size: 15px; color: var(--tsfp-muted);
    border: 1px dashed #d0d5dd; border-radius: 12px;
}

.tsfp-aside { grid-area: aside; display: flex; flex-direction: column; gap: 20px; position: sticky; top: 100px; }
.tsfp-card { padding: 26px; border-radius: 16px; background: var(--tsfp-ground); border: 1px solid var(--tsfp-rule); }
.tsfp-card h2 { margin: 0 0 16px; color: var(--tsfp-ink); font-size: 19px; font-weight: 700; letter-spacing: -.01em; }
.tsfp-card strong { display: block; color: var(--tsfp-ink); font-size: 16px; font-weight: 700; line-height: 1.4; }
.tsfp-card span { display: block; margin-top: 2px; font-size: 15px; line-height: 1.6; color: var(--tsfp-body); }

.tsfp-list { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 14px; }
.tsfp-list li { display: grid; grid-template-columns: 24px minmax(0, 1fr); gap: 12px; }
.tsfp-list i { font-size: 20px; line-height: 1.3; color: var(--tsfp-accent); }

/* Numbered steps joined by a thin line. */
.tsfp-steps { margin: 0; padding: 0; list-style: none; counter-reset: tsfp-step; display: flex; flex-direction: column; gap: 18px; }
.tsfp-steps li { counter-increment: tsfp-step; position: relative; display: grid; grid-template-columns: 34px minmax(0, 1fr); gap: 14px; }
.tsfp-steps li::before {
    content: counter(tsfp-step); display: grid; place-items: center;
    width: 34px; height: 34px; border-radius: 50%;
    font-size: 15px; font-weight: 700; color: #fff; background: var(--tsfp-accent);
}
.tsfp-steps li:not(:last-child)::after {
    content: ""; position: absolute; left: 16px; top: 38px; bottom: -14px; width: 2px;
    background: color-mix(in srgb, var(--tsfp-accent) 22%, #fff);
}

.tsfp-help p { margin: 0 0 12px; font-size: 15px; line-height: 1.6; color: var(--tsfp-body); }
.tsfp-help a {
    display: flex; align-items: center; gap: 10px; margin-top: 8px;
    font-size: 16px; font-weight: 600; color: var(--tsfp-ink) !important; text-decoration: none !important;
    overflow-wrap: anywhere;
}
.tsfp-help a i { font-size: 18px; color: var(--tsfp-accent); }
.tsfp-help a:hover { color: var(--tsfp-accent) !important; }

@media (max-width: 991px) {
    .tsfp-hero { padding: 40px 0 28px; }
    .tsfp-grid { grid-template-columns: 1fr; grid-template-areas: "panel" "aside"; gap: 28px; }
    .tsfp-aside { position: static; }
    .tsfp-panel { padding: 26px 20px; }
}
@media (max-width: 575px) {
    .tsfp-body { padding-bottom: 56px; }
    .tsfp-panel { padding: 22px 16px; border-radius: 14px; }
    .tsfp-card { padding: 20px 18px; }
}

/* ===========================================================================
 * FORM-BUILDER FORMS INSIDE THEME PAGES (.ts-builder-form)
 *
 * theme_form_html() prints the builder's own markup (.qme-form-field,
 * .form-label, .form-control, .form-section-title); this only restyles it to
 * match the site - the fields, captcha and submit are the builder's.
 * ======================================================================== */
.ts-builder-form .form-section-title {
    margin: 10px 0 2px; padding-top: 16px; border-top: 1px solid #eef0f4;
    font-size: 18px; font-weight: 700; color: #101828;
}
.ts-builder-form .qme-form-field:first-child .form-section-title { margin-top: 0; padding-top: 0; border-top: 0; }
.ts-builder-form .form-label { margin-bottom: 7px; font-size: 14px; color: #101828; }
.ts-builder-form .form-label strong { font-weight: 600; }
.ts-builder-form .form-control,
.ts-builder-form select.form-select {
    width: 100%; max-width: 100%; height: auto;
    font-size: 15px; color: #101828; background: #f7f8fa;
    border: 1px solid #e6e8ec; border-radius: 10px; padding: 12px 14px;
    transition: border-color .15s, box-shadow .15s, background-color .15s;
}
.ts-builder-form textarea.form-control { min-height: 132px; line-height: 1.6; }
.ts-builder-form .form-control:focus,
.ts-builder-form select.form-select:focus {
    outline: none; background: #fff; border-color: var(--ld-primary, #3C65F5);
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--ld-primary, #3C65F5) 22%, transparent);
}
.ts-builder-form .form-check-label { font-size: 15px; color: #475467; }
/* The builder puts a help "?" icon inside each label; keep it beside the
 * label text rather than over the input, and its hint text at 14px. */
.ts-builder-form .qme-help-tip { position: static !important; display: inline-block; vertical-align: middle; font-size: 14px; line-height: 1; color: var(--ld-primary, #3C65F5) !important; }
.ts-builder-form .form-help-text { font-size: 14px; font-style: normal; color: #667085; }
.ts-builder-form button[type="submit"],
.ts-builder-form input[type="submit"] {
    font-size: 15px; font-weight: 700; color: #fff !important;
    background: var(--ld-primary, #3C65F5) !important; border: 0 !important;
    border-radius: 30px !important; padding: 13px 32px !important;
}
.ts-builder-form button[type="submit"]:hover,
.ts-builder-form input[type="submit"]:hover { background: var(--ld-primary-dark, #1f47d6) !important; }
@media (max-width: 575px) {
    .ts-builder-form button[type="submit"],
    .ts-builder-form input[type="submit"] { width: 100%; }
    .ts-builder-form .g-recaptcha { transform: scale(.9); transform-origin: 0 0; }
}

/* HEADER LOGO SIZE - the backend "Header logo height" (Site Options ->
 * logo_settings.logo_height, 20-200px, 56px when unset). inc/header.php passes
 * it to the img as --ts-logo-h; the width follows the picture. */
/* A HEIGHT, NOT ONLY A CEILING. With max-height alone the logo sat in the
 * header's flex row with no size of its own, and the row squeezed it to fit -
 * a wide logo rendered 49px tall whatever the setting said. The width follows
 * the picture, up to a cap so a very wide logo cannot crowd the menu. The
 * sticky header's own smaller ceiling (custom_css.php) still applies. */
.ts-biz-header .header-logo img {
    height: var(--ts-logo-h, 56px) !important;
    max-height: none !important;
    width: auto !important;
    max-width: min(360px, 40vw);
    object-fit: contain;
}
/* ============================================================================
   QmeLocal — mobile / responsive patch
   Phone and tablet fixes for the master portal's inner pages, from the
   responsive review. Loaded last, so these win the cascade.
   ============================================================================ */


/* ----------------------------------------------------------------------------
   1. HEADER (.ts-biz-header) ON PHONES AND TABLETS
   ----------------------------------------------------------------------------
   Before: .main-header was one non-wrapping flex row (logo | location |
   "Set Your Location" button), the logo kept its 139px minimum and the button
   would not shrink, so the button was pushed ~165px past the right edge and
   EVERY page using this header scrolled sideways. The burger also sat on top
   of the logo.

   After: two rows.
     row 1  logo (left)                      burger (right, absolute)
     row 2  [pin button]  Selected location
   The pin button IS the "set location" control (it still points at
   /register/set_location); the city name next to it is the current selection.
   -------------------------------------------------------------------------- */
@media (max-width: 991.98px){

  .ts-biz-header{position:relative}

  .ts-biz-header .main-header{
    flex-wrap:wrap;
    align-items:center;
    row-gap:8px;
    column-gap:12px;
    padding-right:44px;            /* keeps content clear of the burger */
    min-width:0;
  }

  .ts-biz-header .main-header .header-left{flex:0 0 auto;min-width:0}
  .ts-biz-header .main-header .header-left .header-logo{min-width:0;margin-right:0}

  /* the logo follows the backend "Header logo height" (--ts-logo-h, set on the
     img from Site Options), capped at 56px so it fits the phone header */
  .ts-biz-header .header-logo img{
    height:min(var(--ts-logo-h, 48px), 56px) !important;
    max-height:none !important;
    width:auto !important;
    max-width:210px;
    object-fit:contain;
  }

  /* location + control drop onto their own full-width row */
  .ts-biz-header .main-header .header-nav{
    order:3;
    flex:1 1 100%;
    width:100%;
    margin-left:0 !important;
    text-align:left;
  }

  .ts-biz-header .header-nav .loc_txtt{
    display:flex;
    align-items:center;
    flex-wrap:nowrap;
    gap:8px;
    width:100%;
    margin:0;
    font-size:14px;
    line-height:1.3;
  }

  /* show the selected location (the theme hides .loc_label below 992px) */
  .ts-biz-header .header-nav .loc_txtt > a:first-child{
    display:inline-flex;
    align-items:center;
    min-width:0;
    overflow:hidden;
    font-weight:600;
  }
  .ts-biz-header .header-nav .loc_txtt .loc_label{
    display:inline-block !important;
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
    max-width:100%;
  }

  /* only one pin on the row: the decorative one inside the display link goes,
     the button below becomes the pin */
  .ts-biz-header .header-nav .loc_txtt > a:first-child > i.bi-geo-alt-fill{display:none}

  /* "Set Your Location" -> compact white pin on a 5px-radius blue square */
  .ts-biz-header .header-nav .custom_btn{
    order:-1;
    flex:0 0 auto;
    width:32px;
    height:32px;
    min-width:32px;
    padding:0;
    border-radius:5px !important;
    display:inline-flex;
    align-items:center;
    justify-content:center;
    font-size:0;                   /* suppresses the label text node */
  }
  .ts-biz-header .header-nav .custom_btn > span{display:none}
  .ts-biz-header .header-nav .custom_btn::before{
    font-family:'bootstrap-icons';
    content:'\f3e7';               /* bi-geo-alt-fill */
    font-size:15px;
    line-height:1;
    font-weight:400;
    color:#fff;
  }

  .ts-biz-header .main-header .header-right{min-width:0}

  /* burger pinned top-right, clear of the logo (beats .sticky-bar.stick) */
  .ts-biz-header .burger-icon,
  .ts-biz-header.sticky-bar.stick .burger-icon{
    display:block;
    position:absolute;
    top:28px !important;
    right:16px;
    left:auto;
  }


  /* --------------------------------------------------------------------------
     2. DIRECTORY FILTER — wrap instead of scrolling sideways
     The chip strip was overflow-x:auto, so five of the six categories were
     hidden behind a horizontal scrollbar. On phones they wrap onto as many
     rows as they need and all stay visible.
     ------------------------------------------------------------------------ */
  .tsc-filter{
    flex-wrap:wrap;
    overflow-x:visible;
    overflow:visible;
    row-gap:8px;
  }
  .tsc-filter::-webkit-scrollbar{display:none}
  .tsc-filter > *{flex:0 0 auto;max-width:100%}


  /* --------------------------------------------------------------------------
     3. "LAUNCH YOUR ORGANIZATION" CTA — smaller and centred
     ------------------------------------------------------------------------ */
  .tsc-cta__panel{justify-items:center;text-align:center}
  .tsc-cta__actions{justify-content:center;align-items:center;text-align:center;width:100%}
  .tsc-cta__actions .tsc-btn{
    width:auto;
    max-width:100%;
    font-size:14px;           /* 14px is the smallest size used on the site */
    line-height:1.35;
    padding:10px 18px;
    justify-content:center;
    text-align:center;
  }


  /* --------------------------------------------------------------------------
     4. SAFETY NET — nothing may push the page sideways
     overflow-x:clip (not hidden) so position:sticky keeps working.
     ------------------------------------------------------------------------ */
  body{overflow-x:clip}
  .container,.container-fluid{max-width:100%}
  img,video,iframe,table{max-width:100%}
}


/* small phones: a slightly tighter logo so the burger never crowds it */
@media (max-width:400px){
  .ts-biz-header .header-logo img{max-width:175px}
}


/* ----------------------------------------------------------------------------
   5. DIRECTORY CARD ARROW — smaller on every screen size
   The link square is sized from --tsc-notch on .tsc-card (button = notch - 12).
   84px gave a 72px button; 60px gives 48px, and 52px on phones gives 40px.
   -------------------------------------------------------------------------- */
.tsc-card{--tsc-notch:60px}
.tsc-card__go{font-size:20px}

@media (max-width:575.98px){
  .tsc-card{--tsc-notch:52px}
  .tsc-card__go{font-size:18px}
}


/* ----------------------------------------------------------------------------
   6. ABOUT-US BENEFIT CARDS — show the whole banner
   Those cards (.tsc-card--cover) carry an 850x440 wide banner inside a 4/3
   object-fit:cover box, which sliced the banner's own headline off both sides.
   A 16/9 box with `contain` shows the artwork intact on the card's own ground.
   The directory cards on /page/qme-communities are plain .tsc-card and are
   deliberately left alone.
   -------------------------------------------------------------------------- */
.tsc-card--cover .tsc-card__media{aspect-ratio:16/9}
.tsc-card--cover .tsc-card__media img{object-fit:contain}
