.tf-social{display:flex;gap:12px;margin-top:22px}
.tf-social a{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border:1px solid rgba(255,255,255,.22);border-radius:50%;color:#c1c9c7;transition:color .2s,border-color .2s}
.tf-social a:hover,.tf-social a:focus-visible{color:#5CE1E6;border-color:#5CE1E6}
/* QA-03: the white header text was unreadable over the pale contact/estimate pages; same solid
   header the handoff already uses on the legal pages. */
body:has(.contact-page) .header,body:has(.contact-page) .header:not(.is-scrolled){background:#08141b;box-shadow:0 1px 0 rgba(255,255,255,.09)}
/* Mobile QA (27 Oct): menu button reaches the 44px touch-target size (was 31x39). */
.menu-toggle{min-width:44px;min-height:44px;padding:0;text-align:center}
/* N19/M-02: text is never hidden waiting for an animation (no JS, slow load or fast scrolling).
   N20: motion is transform-only and quick. Reduced-motion users keep the handoff's no-motion rules. */
@keyframes tfRise{from{transform:translateY(14px)}to{transform:none}}
.reveal-on-scroll{opacity:1!important;filter:none!important;transform:translate3d(0,14px,0);transition:transform .45s ease-out!important;transition-delay:0s!important}
.home-hero-copy,.story-hero-inner h1,.story-hero-inner p,.story-hero-inner.in-view h1,.story-hero-inner.in-view p{animation:tfRise .5s ease-out both}
.story-hero-film video,.story-hero-film:after{animation:none}
.tf-offscreen,.tf-offscreen *{animation-play-state:paused!important}
@media(prefers-reduced-motion:reduce){.reveal-on-scroll{transform:none!important;transition:none!important}.home-hero-copy,.story-hero-inner h1,.story-hero-inner p,.story-hero-inner.in-view h1,.story-hero-inner.in-view p{animation:none!important}}
/* N15: trust line in the hero's bottom row, shown on phones too. */
.home-hero-bottom .tf-hero-trust{letter-spacing:.01em;font-size:12px;font-weight:600;line-height:1.5;text-transform:none}
.home-hero-bottom{flex-wrap:wrap}
@media(max-width:700px){.home-hero-bottom>span.tf-hero-trust{display:block;flex-basis:100%}}
/* N14: five phases in the homepage preview. */
@media(min-width:1001px){.process-preview-steps{grid-template-columns:repeat(5,1fr)}}
/* N17: service page summary. */
.detail-intro-grid{align-items:start}
.tf-service-fit{display:grid;gap:22px;margin:0;max-width:820px}
.tf-service-fit>div{display:grid;grid-template-columns:190px 1fr;gap:18px;border-top:1px solid #d7ddd6;padding-top:18px}
.tf-service-fit dt{font-size:12px;font-weight:750;letter-spacing:.06em;text-transform:uppercase;color:#1e4b52}
.tf-service-fit dd{margin:0;font-size:16px;line-height:1.7;color:#4c5b5e}
.tf-fit-link{display:inline-block;margin-top:8px;font-weight:700;color:#103138;text-decoration:underline;text-underline-offset:3px}
@media(max-width:700px){.tf-service-fit>div{grid-template-columns:1fr;gap:6px}.tf-service-fit dd{font-size:15px}}
/* N18 and case-study next step. */
.tf-section-links{display:flex;flex-wrap:wrap;gap:12px 24px;margin-top:22px}
.tf-section-links a{display:inline-flex;align-items:center;gap:8px;font-size:14px;font-weight:700;color:#103138;text-decoration:underline;text-underline-offset:3px}
.tf-case-service{display:flex;flex-wrap:wrap;align-items:center;gap:10px 18px;padding-top:34px;padding-bottom:34px}
.tf-case-service span{font-size:11px;font-weight:750;letter-spacing:.13em;color:#0f6d7a}
.tf-case-service a{display:inline-flex;align-items:center;gap:8px;font-weight:700;color:#103138;text-decoration:underline;text-underline-offset:3px}
/* N01: gallery loading and failure states. */
.tf14-gallery-open{background:#e4eaec}
.tf14-lightbox-foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:10px 18px}
.tf-lb-status{font-weight:700}
.tf-lb-retry{background:#fff;color:#0a2225;border:0;padding:8px 14px;font-weight:700;min-height:40px}
img.tf-img-failed{visibility:hidden}
/* N03: labels that failed WCAG contrast on case-study components. */
.tf7-detail-strip-grid span{color:#3f666d}
.tf14-gallery-item figcaption small{color:#566775}
.tf7-card-bottom{color:#4f6872}
.tf7-story-marker,.tf15-focus-heading span,.tf-case-service span{color:#0f6d7a}
.tf7-small-eyebrow,.tf7-caveat span{color:#0f6570}
.tf7-deliverables li span{color:#0a6f79}
.tf14-gallery-ethics{color:#566a76}
button[data-tf7-filter] span,.tf7-group-count{color:#4f656e}
.tf7-group-head p,.tf7-result-summary,.tf7-attribution-note{color:#4a616b}
/* Same contrast fix on shared templates (axe rerun, WCAG AA). */
.section-heading p{color:#4f5f75}
.service-card-num{color:#5d6864}
.pillar-links a span,.related-num{color:#4a6358}
.related-grid a>span{color:#55605c}
.step-num{color:#4a6658}
.faq-layout p{color:#55625a}
.insight-card .eyebrow{color:#4d6558}
.insights-filter-label span{color:#566579}
.article-inline-figure figcaption{color:#566577}
.process-row>span{color:#566d66}
.contact-copy p{color:#4d5f5c}
.contact-copy .eyebrow{color:#3e5e50}
.contact-aside p{color:#4f5f5a}
.contact-aside span{color:#476156}
.tf16-conversion-note>div span{color:#34605f}
.tf12-founder-work-grid a>span{color:#3f6a6e}
.tf12-legal-date{color:#566868}
.about-manifesto p{color:#4c5c55}
.about-manifesto h2 em{color:#54705f}
.v5-kinetic-band span{color:#fff!important}
.faq-layout>div>p{color:#55625a!important}
.related-grid a>span:not(.related-num){color:#55605c!important}
button[data-tf7-filter] span{color:#4f656e!important;opacity:1!important}
button[data-tf7-filter].is-active span{color:#d7e8ea!important}
/* N04 and estimate helper. */
.tf-book-alt small{display:block;margin-top:6px;font-size:12px;color:#546971}
.tf-field-help{display:block;margin-top:8px;font-size:12px;font-weight:500;color:#546971}
/* QA-32: text that failed WCAG contrast on the homepage (4.1:1 and 2.4:1). */
.process-preview-steps p{color:#4f5d55}
.statement-layout h2 em{color:#6b8279}
.lead-form [hidden]{display:none!important}
.lead-form .tf-check{display:flex;flex-direction:row;align-items:flex-start;gap:10px;font-weight:500;line-height:1.5}
.lead-form .tf-check input{display:inline-block;width:auto;min-height:0;margin:2px 0 0;flex:none;accent-color:#0a2225}
.tf-book-alt{font-size:13px;line-height:1.6;color:#546971;margin:-14px 0 28px}
.tf-book-alt a{color:#103138;font-weight:700;text-decoration:underline;text-underline-offset:3px}
.tf-book-alt-focus{background:#eef6f5;border-left:3px solid #5CE1E6;padding:12px 14px;margin-top:-10px}
.tf-final-form-status a{text-decoration:underline}
.tf-enquiry-success{padding:6px 0 4px}
.tf-enquiry-success:focus{outline:none}
.tf-enquiry-success h2{font-size:clamp(24px,2.4vw,32px);line-height:1.2;letter-spacing:-.03em;color:#103138;margin-bottom:16px}
.tf-enquiry-success p{color:#546971;font-size:15px;line-height:1.7;margin-bottom:8px}
.tf-enquiry-success .button-row{margin-top:26px}
.tf12-founder-hero p+p{margin-top:16px}
/* Home hero: grow with its content instead of clipping the bottom row on shorter screens
   (the handoff fixed it at 100svh with overflow hidden; phones already used height:auto). */
@media(min-width:701px){.home-hero{height:auto;max-height:none;min-height:max(810px,min(100svh,1140px))}.home-hero-content{height:auto;min-height:inherit}}
@media(min-width:701px) and (max-width:1000px){.home-hero{min-height:max(730px,min(100svh,1140px))}}
