/* Trueform Projects — shared stylesheet
   Tokens taken directly from the approved design source (Trueform *.dc.html). */

:root{
  --ink:#2C2218;
  --paper:#FFFFFF;
  --paper-alt:#F4F0E8;
  --cream:#F4F0E8;
  /* The fine diagonal pinstripe that used to sit behind every page. Now reserved for the cream bands. */
  --cream-lines:repeating-linear-gradient(135deg, rgba(44,34,24,.024) 0 2px, transparent 2px 5px);
  --accent:#33261B;
  --line:#E2D8C6;
  --line-soft:rgba(44,34,24,.14);
  --line-soft2:rgba(44,34,24,.16);
  --font-serif:'Cormorant Garamond',serif;
  --font-body:"Avenir Next","Avenir Next LT Pro",Avenir,"Nunito Sans","Segoe UI",Helvetica,Arial,sans-serif;
  --font-sans:"Avenir Next","Avenir Next LT Pro",Avenir,"Nunito Sans","Segoe UI",Helvetica,Arial,sans-serif;
  --font-mono:"Avenir Next","Avenir Next LT Pro",Avenir,"Nunito Sans","Segoe UI",Helvetica,Arial,sans-serif;
}

*{box-sizing:border-box;}
html,body{margin:0;padding:0;max-width:100%;overflow-x:clip;}
html{scroll-padding-top:96px;}
body{
  font-family:var(--font-sans);
  background:#fff;
  color:var(--ink);
}
img{display:block;max-width:100%;}
a{text-decoration:none;color:inherit;transition:color 200ms ease,translate 220ms cubic-bezier(.23,1,.32,1),opacity 200ms ease,box-shadow 220ms ease,background-color 220ms ease,border-color 200ms ease;}
h1,h2,h3{margin:0;font-weight:inherit;}
h1.tf-h1,h2.tf-h2{font-weight:300;}
a[data-link]{white-space:nowrap;}
/* Links inside running copy: a plain thin underline under the words. */
.tf-inline-link{display:inline-block;padding:14px 0;margin:-14px 0;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px;}
[data-btn]{transition:translate 220ms cubic-bezier(.23,1,.32,1),scale 160ms ease,box-shadow 220ms ease,opacity 200ms ease,background-color 220ms ease;}
[data-btn]:active{scale:.97;}
a[data-card]:active{scale:.995;}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px;}
.tf-skip{position:absolute;left:12px;top:-60px;z-index:100;background:var(--ink);color:var(--paper);padding:10px 16px;font-size:12px;letter-spacing:.12em;text-transform:uppercase;}
.tf-skip:focus{top:12px;}

input,textarea,select{font-family:var(--font-body);font-size:16px;color:var(--ink);background:var(--paper);border:1px solid #DFD4C1;padding:13px 14px;width:100%;transition:border-color 200ms ease,background-color 200ms ease;}
input:focus,textarea:focus,select:focus{outline:none;border-color:var(--accent);background:#FBF9F4;}
textarea{resize:vertical;min-height:120px;}

@keyframes tfRule{0%{transform:scaleX(0)}100%{transform:scaleX(1)}}

@media (hover:hover) and (pointer:fine){
  a[data-link]:hover{opacity:.58;}
  [data-btn]:hover{translate:0 -2px;box-shadow:0 10px 22px rgba(44,34,24,.18);}
  .tf-btn--on-dark[data-btn]:hover{box-shadow:0 10px 22px rgba(0,0,0,.28);}
  [data-phone]:hover{opacity:.72;}
  .tf-slider:hover .tf-slider-grip{scale:1.08;}
  a[data-card]:hover{translate:0 -4px;box-shadow:0 16px 34px rgba(44,34,24,.14);}
  a[data-card]:hover img{scale:1.045;}
  a[data-card].tf-project-card:not(.tf-project-card--boxed):hover{translate:none;box-shadow:none;}
  a[data-row]:hover{background:var(--paper-alt);}
  a[data-chip]:hover{background:var(--ink);color:var(--paper);border-color:var(--ink);}
}

/* Scroll reveal. Sections stay put; the blocks inside them (headings, cards,
   rows, form fields) rise in one after another. Hidden states only apply once
   site.js has run (html.tf-js), so content is never stuck hidden if it fails. */
.tf-reveal{position:relative;}
.tf-r{transition:opacity 700ms ease var(--tf-d,0ms),transform 700ms cubic-bezier(.23,1,.32,1) var(--tf-d,0ms),translate 220ms cubic-bezier(.23,1,.32,1),box-shadow 220ms ease,scale 160ms ease;}
html.tf-js .tf-reveal:not([data-shown]) .tf-r{opacity:0;transform:translateY(22px);}
/* Photos wipe up inside their frame as the card arrives. */
.tf-reveal .tf-frame{clip-path:inset(0 0 0 0);transition:clip-path 900ms cubic-bezier(.23,1,.32,1) calc(var(--tf-d,0ms) + 80ms);}
html.tf-js .tf-reveal:not([data-shown]) .tf-frame{clip-path:inset(100% 0 0 0);}
/* Home hero intro on first load. The photo only settles in scale (never fades)
   so it still counts as the largest paint straight away. */
@keyframes tfIntroUp{from{opacity:0;transform:translateY(26px);}to{opacity:1;transform:none;}}
@keyframes tfIntroSettle{from{scale:1.08;}to{scale:1;}}
html.tf-js .tf-hero-split-copy > *{animation:tfIntroUp 900ms cubic-bezier(.23,1,.32,1) both;}
html.tf-js .tf-hero-split-copy > *:nth-child(2){animation-delay:90ms;}
html.tf-js .tf-hero-split-copy > *:nth-child(3){animation-delay:180ms;}
html.tf-js .tf-hero-split-copy > *:nth-child(4){animation-delay:270ms;}
html.tf-js .tf-hero-split-copy > *:nth-child(5){animation-delay:360ms;}
html.tf-js .tf-hero-split-media img{animation:tfIntroSettle 1600ms cubic-bezier(.23,1,.32,1) both;}
@media print{html.tf-js .tf-reveal:not([data-shown]) .tf-r{opacity:1!important;transform:none!important;}html.tf-js .tf-reveal:not([data-shown]) .tf-frame{clip-path:none!important;}}

/* Scroll progress line + condensing sticky nav */
.tf-progress{position:fixed;top:0;left:0;right:0;height:2px;background:var(--accent);transform-origin:left center;transform:scaleX(0);z-index:60;pointer-events:none;}
.tf-nav{position:sticky;top:0;z-index:50;background:var(--paper);transition:padding 280ms cubic-bezier(.23,1,.32,1),box-shadow 280ms ease;}
.tf-nav .monogram,.tf-nav .wordmark{transition:height 280ms cubic-bezier(.23,1,.32,1);}
.tf-nav.is-condensed{padding-top:10px;padding-bottom:10px;box-shadow:0 6px 20px rgba(44,34,24,.08);}
.tf-nav.is-condensed .tf-nav-brand img.monogram{height:40px;}
.tf-nav.is-condensed .tf-nav-brand img.wordmark{height:13px;}

/* Phone number that copies on click */
[data-phone]{cursor:pointer;font-weight:600;transition:opacity 200ms ease;}
[data-phone].is-copied{opacity:1;}
.tf-project-head .tf-meta{text-transform:none;}
.tf-rule{height:1px;background:var(--line-soft2);transform-origin:left center;animation:tfRule 900ms cubic-bezier(.23,1,.32,1) both;}

/* Utility bar + nav */
.tf-utility{background:var(--ink);color:var(--paper);padding:12px 44px;display:flex;justify-content:space-evenly;align-items:center;gap:12px;font-size:11px;letter-spacing:.28em;text-transform:uppercase;}
.tf-utility-sep{opacity:.4;letter-spacing:0;}

.tf-nav{display:flex;justify-content:space-between;align-items:center;gap:20px;flex-wrap:wrap;padding:24px 44px;border-bottom:1px solid var(--line);}
.tf-nav-brand{display:flex;align-items:center;gap:30px;min-width:0;flex-shrink:1;}
.tf-nav-brand img.monogram{height:62px;width:auto;flex-shrink:0;}
.tf-nav-brand img.wordmark{height:16px;width:auto;min-width:0;flex-shrink:1;}
.tf-nav-links{display:flex;gap:22px;align-items:center;justify-content:flex-end;flex-wrap:wrap;min-width:0;font-size:12px;letter-spacing:.12em;text-transform:uppercase;}
/* Current page: underline the word itself (not the link box, which is the full menu width on mobile) and keep the row height so it lines up with its siblings. */
.tf-nav-links a.is-active{opacity:1;text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:7px;text-decoration-color:var(--accent);}
.tf-nav-links a[data-link]{display:inline-flex;align-items:center;min-height:44px;}
.tf-nav-links .tf-menu-call{display:none;}
/* The top bar no longer carries the phone number, so show it as plain text in the nav on wide screens. */
@media (min-width:1101px){
  .tf-nav-links .tf-menu-call{display:inline-flex;background:none;border:0;padding:0 0 0 4px;font-size:12px;letter-spacing:.12em;transition:opacity 200ms ease;}
  .tf-nav-links .tf-menu-call:hover{opacity:.6;}
}
.tf-burger{display:none;width:44px;height:44px;flex:0 0 44px;margin-right:-10px;border:0;background:transparent;cursor:pointer;flex-direction:column;align-items:center;justify-content:center;gap:7px;padding:0;color:var(--ink);}
.tf-burger span{display:block;width:22px;height:1.5px;background:currentColor;transition:translate 300ms cubic-bezier(.23,1,.32,1),rotate 300ms cubic-bezier(.23,1,.32,1);}
.tf-nav.is-open .tf-burger span:first-child{translate:0 4.25px;rotate:45deg;}
.tf-nav.is-open .tf-burger span:last-child{translate:0 -4.25px;rotate:-45deg;}
html.tf-menu-open{overflow:hidden;}

/* Buttons */
.tf-btn{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;font-family:var(--font-sans);font-size:12px;letter-spacing:.14em;text-transform:uppercase;padding:17px 28px;}
.tf-btn--primary{background:var(--ink);color:var(--paper);}
.tf-btn--outline{background:transparent;color:var(--ink);border:1px solid rgba(44,34,24,.35);}
.tf-btn--on-dark{background:var(--paper);color:var(--ink);}
.tf-btn--on-dark-ghost{background:transparent;color:var(--paper);border:1px solid rgba(244,240,232,.4);}
.tf-btn-row{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-top:10px;}

/* Hero */
.tf-hero{padding:84px 44px 40px;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,0.85fr);gap:56px;align-items:end;}
.tf-hero--tight{padding-bottom:34px;}
.tf-hero-copy{display:flex;flex-direction:column;gap:22px;}
.tf-hero-copy--about{align-items:stretch;}
.tf-eyebrow{font-family:var(--font-sans);font-size:11px;letter-spacing:.22em;text-transform:uppercase;opacity:.72;}
.tf-h1{font-family:var(--font-serif);font-weight:300;font-size:70px;line-height:1.03;text-wrap:pretty;}
@media (min-width:901px){.tf-grid-contact .tf-h1{font-size:66px;}}
.tf-h2{font-family:var(--font-serif);font-weight:300;font-size:42px;line-height:1.1;text-wrap:pretty;}
.tf-h2--inverse{color:var(--paper);}
.tf-h3{font-family:var(--font-serif);font-size:30px;line-height:1.15;}
.tf-h4{font-family:var(--font-sans);font-size:18px;font-weight:600;letter-spacing:.005em;}
.tf-body{font-family:var(--font-body);font-size:16px;line-height:1.7;opacity:.85;text-wrap:pretty;}
.tf-body-lead{font-family:var(--font-body);font-size:18px;line-height:1.75;opacity:.88;max-width:520px;text-wrap:pretty;}
.tf-body-lead p{margin:0 0 14px;}
.tf-body-lead p:last-child{margin-bottom:0;}
.tf-meta{font-family:var(--font-mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;opacity:.7;}

/* Sections */
.tf-section{padding:104px 44px;display:flex;flex-direction:column;gap:44px;}
.tf-section--alt{background-color:var(--cream);background-image:var(--cream-lines);}
.tf-section-head{display:flex;flex-direction:column;gap:10px;}
.tf-section-head-row{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:12px;}
.tf-section-head-row .tf-italic{font-family:var(--font-body);font-style:italic;font-size:15px;opacity:.7;}

/* Grids */
.tf-grid-4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:22px;}
.tf-grid-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:22px;}
.tf-grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px;}
.tf-grid-about{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,0.95fr);gap:56px;align-items:center;}
.tf-grid-70-30{display:grid;grid-template-columns:minmax(0,0.8fr) minmax(0,1fr);gap:56px;align-items:start;}
.tf-grid-service{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:56px;align-items:start;}
.tf-grid-contact{display:grid;grid-template-columns:minmax(0,0.95fr) minmax(0,1.05fr);gap:60px;align-items:start;}

/* Cards / step tiles */
.tf-card{display:flex;flex-direction:column;gap:14px;padding:30px;background:var(--paper);border:1px solid var(--line);}
.tf-card .tf-step-mark{font-family:var(--font-serif);font-size:34px;line-height:1;color:var(--accent);}
.tf-card .tf-step-name{font-size:18px;font-weight:600;}

/* Project / post cards */
.tf-project-card{display:flex;flex-direction:column;gap:12px;color:var(--ink);}
.tf-project-card .tf-frame{overflow:hidden;}
.tf-project-card img{width:100%;height:280px;object-fit:cover;transition:scale 620ms cubic-bezier(.23,1,.32,1);}
.tf-project-card .tf-project-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding-top:10px;border-top:1px solid var(--line);}
.tf-project-card .tf-project-head span:first-child{font-size:18px;font-weight:600;}

/* Home "Recent work" cards: design's bordered card, 30px padding. */
.tf-project-card--boxed{padding:30px;gap:14px;background:var(--paper);border:1px solid var(--line);}
.tf-project-card--boxed .tf-project-head{border-top:0;padding-top:0;}
.tf-project-card--boxed .tf-body{opacity:.85;}

.tf-post-card{display:flex;flex-direction:column;gap:14px;background:var(--paper);border:1px solid var(--line);color:var(--ink);}
.tf-post-card .tf-frame{overflow:hidden;}
.tf-post-card img{width:100%;height:220px;object-fit:cover;transition:scale 620ms cubic-bezier(.23,1,.32,1);}
.tf-post-card .tf-post-body{padding:6px 24px 26px;display:flex;flex-direction:column;gap:12px;}
.tf-post-card .tf-post-title{font-family:var(--font-serif);font-size:28px;line-height:1.12;text-wrap:pretty;}

.tf-featured{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,0.9fr);border:1px solid var(--line);background:var(--paper);color:var(--ink);}
.tf-featured .tf-frame{overflow:hidden;}
.tf-featured img{width:100%;height:460px;object-fit:cover;transition:scale 620ms cubic-bezier(.23,1,.32,1);}
.tf-featured-body{padding:44px;display:flex;flex-direction:column;gap:18px;justify-content:center;}
.tf-featured-title{font-family:var(--font-serif);font-weight:300;font-size:44px;line-height:1.06;text-wrap:balance;}
.tf-featured-link{font-size:12px;letter-spacing:.14em;text-transform:uppercase;box-shadow:inset 0 -1px 0 var(--accent);align-self:flex-start;padding-bottom:3px;margin-top:6px;}

.tf-archive-row{display:grid;grid-template-columns:110px minmax(0,1fr) auto;gap:22px;align-items:baseline;padding:18px 12px;margin:0 -12px;border-bottom:1px solid var(--line);color:var(--ink);}

/* FAQ rows */
.tf-faq-row{padding:22px 0;border-bottom:1px solid var(--line-soft);display:flex;flex-direction:column;gap:8px;}
.tf-faq-row .tf-h4{font-size:18px;}

/* Detail rows (contact/about credentials) */
.tf-detail-row{display:flex;justify-content:space-between;gap:20px;padding:18px 0;border-bottom:1px solid var(--line);}
.tf-detail-row .tf-k{font-size:11px;letter-spacing:.2em;text-transform:uppercase;opacity:.6;}
.tf-detail-row .tf-v{font-family:var(--font-body);font-size:16px;text-align:right;min-width:0;}
.tf-credential-row{display:flex;justify-content:space-between;gap:20px;padding:20px 0;border-bottom:1px solid var(--line-soft);}
.tf-credential-row .tf-k{font-size:15px;font-weight:600;flex-shrink:0;}
.tf-credential-row .tf-v{font-family:var(--font-body);font-size:16px;opacity:.85;text-align:right;min-width:0;}
.tf-credentials-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 56px;}

/* Chips */
.tf-chip-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px;}
.tf-chip{border:1px solid #D8CDB9;padding:10px 16px;font-size:12px;letter-spacing:.1em;text-transform:uppercase;}
.tf-suburb-chip{border:1px solid #D8CDB9;padding:9px 15px;font-size:13px;display:inline-block;}

/* Before/after pairs */
.tf-pair{display:flex;flex-direction:column;gap:10px;}
.tf-pair-imgs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px;}
.tf-pair-imgs > div{position:relative;}
.tf-pair-imgs img{width:100%;height:320px;object-fit:cover;}
.tf-pair-tag{position:absolute;top:0;left:0;color:var(--paper);padding:6px 12px;font-size:10px;letter-spacing:.16em;text-transform:uppercase;}
.tf-pair-tag--a{background:var(--ink);}
.tf-pair-tag--b{background:var(--accent);}
.tf-pair-caption{display:flex;flex-direction:column;gap:6px;padding-top:10px;border-top:1px solid var(--line-soft);}
.tf-pair-caption .tf-name{font-size:18px;font-weight:600;}

/* Home hero (design: split, image full-bleed to the right edge) */
.tf-hero-split{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,0.82fr);align-items:stretch;}
.tf-hero-split-copy{padding:84px 57px 76px 44px;display:flex;flex-direction:column;gap:22px;justify-content:center;}
.tf-hero-split .tf-h1{max-width:840px;}
.tf-hero-split-media{overflow:hidden;min-height:760px;position:relative;}
.tf-hero-split-media img{position:absolute;top:-60px;left:0;width:100%;height:calc(100% + 120px);object-fit:cover;will-change:translate;}

/* Recent work: full-bleed banner slideshow. Slides crossfade; the controls sit on a soft scrim. */
.tf-banner{position:relative;background:var(--ink);color:#fff;}
.tf-banner-stage{position:relative;height:clamp(300px,42vw,620px);overflow:hidden;}
.tf-banner-slide{position:absolute;inset:0;margin:0;opacity:0;visibility:hidden;transition:opacity 900ms ease,visibility 0s linear 900ms;}
.tf-banner-slide.is-active{opacity:1;visibility:visible;transition:opacity 900ms ease,visibility 0s;}
.tf-banner-slide img{width:100%;height:100%;object-fit:cover;object-position:50% 45%;}
.tf-banner-ui{position:absolute;left:0;right:0;bottom:0;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;padding:48px 44px 22px;background:linear-gradient(to top,rgba(26,20,14,.78),rgba(26,20,14,0));}
.tf-banner-label{font-size:11px;letter-spacing:.24em;text-transform:uppercase;}
.tf-banner-link{font-size:11px;letter-spacing:.2em;text-transform:uppercase;box-shadow:inset 0 -1px 0 currentColor;padding-bottom:3px;margin-left:22px;}
.tf-banner-ctrl{display:flex;align-items:center;gap:6px;font-size:12px;letter-spacing:.14em;}
.tf-banner-btn{width:44px;height:44px;border:1px solid rgba(255,255,255,.55);border-radius:50%;background:rgba(26,20,14,.5);color:#fff;font:inherit;font-size:14px;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:background-color 200ms ease,border-color 200ms ease;}
.tf-banner-btn:hover{background:rgba(26,20,14,.55);border-color:#fff;}
.tf-banner-btn:focus-visible{outline:2px solid #fff;outline-offset:3px;}
.tf-banner-count{min-width:56px;text-align:center;}
.tf-banner-link{transition:opacity 200ms ease;}
.tf-banner-link:hover{opacity:.7;}
/* Keyboard focus on dark surfaces: the default accent outline is the same brown as the background. */
.tf-cta-band :focus-visible,.tf-cta-split :focus-visible,.tf-utility :focus-visible,.tf-banner :focus-visible{outline-color:#fff;}
.tf-prose{display:flex;flex-direction:column;gap:22px;font-family:var(--font-body);font-size:17px;line-height:1.8;opacity:.9;max-width:620px;text-wrap:pretty;}

/* Before/after sliders */
.tf-slider-block{display:flex;flex-direction:column;gap:10px;}
.tf-slider{--pos:50%;position:relative;height:440px;overflow:hidden;cursor:ew-resize;touch-action:none;user-select:none;-webkit-user-select:none;}
.tf-slider-after,.tf-slider-before{position:absolute;inset:0;display:flex;align-items:flex-end;}
.tf-slider-after{background:repeating-linear-gradient(135deg,rgba(51,38,27,.12) 0 10px,rgba(51,38,27,.07) 10px 20px),var(--paper);justify-content:flex-end;}
.tf-slider-before{background:repeating-linear-gradient(135deg,#CFC4B0 0 10px,#C6BAA4 10px 20px);justify-content:flex-start;clip-path:inset(0 calc(100% - var(--pos)) 0 0);}
.tf-slider-after img,.tf-slider-before img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;pointer-events:none;}
.tf-slider-handle{position:absolute;top:0;bottom:0;left:var(--pos);width:2px;background:var(--paper);transform:translateX(-1px);display:flex;align-items:center;justify-content:center;box-shadow:0 0 0 1px rgba(44,34,24,.2);}
.tf-slider:not(.is-dragging) .tf-slider-before{transition:clip-path 380ms cubic-bezier(.23,1,.32,1);}
.tf-slider:not(.is-dragging) .tf-slider-handle{transition:left 380ms cubic-bezier(.23,1,.32,1);}
.tf-slider-grip{background:var(--paper);color:var(--ink);border:1px solid var(--line);width:46px;height:46px;flex:0 0 46px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:10px;letter-spacing:.04em;box-shadow:0 4px 14px rgba(44,34,24,.18);transition:scale 220ms cubic-bezier(.23,1,.32,1);}
.tf-slider.is-dragging .tf-slider-grip{scale:1.1;}
.tf-slider-tag{position:absolute;top:0;color:var(--paper);padding:6px 12px;font-size:10px;letter-spacing:.16em;text-transform:uppercase;}
.tf-slider-tag--before{left:0;background:var(--ink);}
.tf-slider-tag--after{right:0;background:var(--accent);}
.tf-slider-cap{font-family:var(--font-mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink);opacity:.6;max-width:46%;}
.tf-slider-cap--l{text-align:left;padding:0 0 16px 16px;}
.tf-slider-cap--r{text-align:right;padding:0 16px 16px 0;}

/* About split + portrait placeholder */
.tf-about-split{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:53px;align-items:start;}
.tf-about-copy{display:flex;flex-direction:column;gap:18px;justify-content:center;}
.tf-about-p{margin:0;max-width:560px;}
.tf-about-contact{font-family:var(--font-body);font-style:italic;font-size:15px;opacity:.75;}
.tf-portrait{width:100%;height:440px;object-fit:cover;object-position:34% 40%;filter:none;}
.tf-portrait-slot{height:440px;background:repeating-linear-gradient(135deg,#E4DBCA 0 10px,#DDD3C0 10px 20px);display:flex;align-items:center;justify-content:center;border:1px dashed rgba(44,34,24,.25);}

/* Closing CTA: copy left, form right, on ink */
.tf-cta-split{background:var(--ink);color:var(--paper);padding:84px 44px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:57px;}
.tf-cta-split-copy{display:flex;flex-direction:column;gap:18px;}
.tf-body-inverse{font-family:var(--font-body);font-size:17px;line-height:1.75;opacity:.82;max-width:460px;text-wrap:balance;}
.tf-cta-contact{display:flex;flex-direction:column;gap:10px;font-size:16px;}
.tf-cta-area{opacity:.85;font-family:var(--font-body);}
.tf-cta-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;align-content:start;}
.tf-inv-field{display:flex;flex-direction:column;gap:7px;}
.tf-inv-field label{font-size:11px;letter-spacing:.14em;text-transform:uppercase;opacity:.75;}
.tf-cta-form input,.tf-cta-form select,.tf-cta-form textarea{height:46px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.18);color:var(--paper);padding:10px 12px;}
.tf-cta-form select option{color:var(--ink);}
.tf-cta-form textarea{height:96px;min-height:96px;}
.tf-cta-form input:focus,.tf-cta-form select:focus,.tf-cta-form textarea:focus{background:rgba(255,255,255,.12);border-color:rgba(244,240,232,.6);}
.tf-cta-form button{border:none;cursor:pointer;font-family:var(--font-sans);}
.tf-cta-form.is-sending button{opacity:.7;cursor:progress;}
.tf-form-status{margin:0;font-family:var(--font-body);font-size:14px;min-height:1em;}
.tf-cta-form .tf-form-status{color:#F2C9B8;}
[data-turnstile]:not(.cf-turnstile){display:none;}
[data-turnstile].cf-turnstile{min-height:65px;}
.tf-hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden;}
.tf-form-done{display:flex;flex-direction:column;gap:12px;align-self:center;}
.tf-form-done svg{width:52px;height:52px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
.tf-form-done circle{stroke-dasharray:151;stroke-dashoffset:151;animation:tfDraw 700ms cubic-bezier(.23,1,.32,1) forwards;opacity:.5;}
.tf-form-done path{stroke-dasharray:36;stroke-dashoffset:36;animation:tfDraw 420ms cubic-bezier(.23,1,.32,1) 520ms forwards;}
.tf-form-done-title{font-family:var(--font-serif);font-weight:300;font-size:34px;line-height:1.1;}
.tf-form-done-body{font-family:var(--font-body);font-size:17px;opacity:.85;}
@keyframes tfDraw{to{stroke-dashoffset:0;}}
.tf-back-top{opacity:.7;}
.tf-back-top:hover{opacity:1;}

/* Service block */
.tf-service{padding:80px 44px;display:flex;flex-direction:column;gap:38px;border-bottom:1px solid var(--line);}
.tf-service-no{font-family:var(--font-serif);font-size:30px;line-height:1;color:var(--accent);}
.tf-service-title{font-family:var(--font-serif);font-weight:300;font-size:48px;line-height:1.06;}
.tf-service-img{width:100%;height:340px;object-fit:cover;}
.tf-service-img--square{height:auto;aspect-ratio:1/1;}
.tf-hero--single{grid-template-columns:minmax(0,1fr);}
.tf-hero--single .tf-h1{max-width:900px;text-wrap:balance;}
.tf-vision{max-width:720px;}
.tf-vision p{margin:0;}
.tf-vision-line{font-family:var(--font-serif);font-size:28px;line-height:1.2;text-wrap:balance;}

/* CTA band */
.tf-cta-band{background:var(--ink);color:var(--paper);padding:68px 44px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:22px;}
.tf-cta-band .tf-h2--inverse{max-width:620px;}
.tf-cta-band--grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,0.8fr);gap:40px;align-items:center;}

/* Contact form panel */
.tf-form-panel{background:var(--paper-alt);border:1px solid var(--line);padding:40px;display:flex;flex-direction:column;gap:20px;}
.tf-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;}
.tf-field{display:flex;flex-direction:column;gap:7px;}
.tf-field label{font-size:11px;letter-spacing:.14em;text-transform:uppercase;opacity:.65;}
.tf-span-2{grid-column:span 2;}
.tf-form-note{font-family:var(--font-body);font-size:13px;opacity:.7;}

/* Footer: one small line (ABN | licence | phone | email | Instagram). */
.tf-footer{background:var(--ink);color:var(--paper);padding:22px 44px;font-family:var(--font-body);font-size:13px;letter-spacing:.04em;line-height:1.6;}
.tf-footer-line{margin:0;display:flex;flex-wrap:wrap;justify-content:center;align-items:center;}
.tf-footer-line > * + *::before{content:"|";display:inline-block;margin:0 1em;opacity:.4;}
/* Underline the words only. The "|" separator is a ::before inside each link, so a background underline ran back across it. */
.tf-footer-line a{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:5px;text-decoration-color:transparent;transition:text-decoration-color 200ms ease;}
.tf-footer-line a:hover,.tf-footer-line a:focus-visible{text-decoration-color:currentColor;}
.tf-footer a:focus-visible{outline:2px solid var(--paper);outline-offset:3px;}

/* Project albums: gallery that keeps each photo's own proportions. */
.tf-page-label{padding:56px 44px 0;}
.tf-gallery{display:flex;flex-wrap:wrap;gap:16px;padding:34px 44px 104px;}
.tf-gallery::after{content:"";flex-grow:100000;}
.tf-gallery-item{margin:0;background:var(--cream);flex:calc(var(--ar,1.33) * 100) 1 calc(var(--ar,1.33) * 400px);min-width:0;}
.tf-gallery-item img{display:block;width:100%;height:auto;}


/* Image treatments used across pages */
.tf-img-cover{width:100%;object-fit:cover;display:block;}

/* Responsive */
@media (max-width:900px){
  .tf-nav{padding:18px 20px;}
  .tf-nav-brand img.monogram{height:44px;}
  .tf-hero,.tf-section,.tf-section--alt,.tf-cta-band,.tf-grid-about,.tf-service{padding-left:20px;padding-right:20px;}
  .tf-hero{grid-template-columns:minmax(0,1fr);padding-top:48px;gap:32px;}
  .tf-h1{font-size:44px;max-width:100%;}
  .tf-h2{font-size:32px;}
  .tf-featured-title{font-size:32px;}
  .tf-grid-4,.tf-grid-3,.tf-grid-2,.tf-grid-about,.tf-grid-70-30,.tf-grid-service,.tf-grid-contact,.tf-featured,.tf-cta-band--grid,.tf-pair-imgs{grid-template-columns:minmax(0,1fr);}
  .tf-form-grid{grid-template-columns:minmax(0,1fr);}
  .tf-span-2{grid-column:span 1;}
  .tf-cta-band{padding:44px 20px;}
  .tf-footer{padding:20px;}
  .tf-archive-row{grid-template-columns:1fr;gap:6px;}
  .tf-credentials-grid{grid-template-columns:1fr;gap:0;}
  .tf-chip{padding:13px 16px;}
  .tf-hero-split,.tf-about-split,.tf-cta-split,.tf-cta-form{grid-template-columns:minmax(0,1fr);}
  .tf-hero-split-copy{padding:48px 20px 40px;}
  .tf-hero-split-media{min-height:360px;}
  .tf-about-split{gap:32px;}
  .tf-cta-split{padding:56px 20px;gap:36px;}
  .tf-slider{height:320px;}
  .tf-portrait-slot,.tf-portrait{height:360px;}
  /* Mobile header: brand + hamburger, links move into a full-height panel. */
  .tf-utility{gap:6px;font-size:11px;letter-spacing:.12em;padding:10px 12px;}
  .tf-nav{flex-wrap:nowrap;padding:12px 20px;}
  .tf-nav.is-condensed{padding-top:8px;padding-bottom:8px;}
  .tf-nav-brand{gap:24px;min-height:44px;}
  .tf-nav-brand img.monogram,.tf-nav.is-condensed .tf-nav-brand img.monogram{height:38px;}
  .tf-nav-brand img.wordmark,.tf-nav.is-condensed .tf-nav-brand img.wordmark{height:10px;}
  .tf-burger{display:flex;}
  .tf-nav-links{position:absolute;top:100%;left:0;right:0;height:var(--tf-menu-h,calc(100vh - 62px));overflow-y:auto;background:var(--paper);flex-direction:column;flex-wrap:nowrap;align-items:stretch;justify-content:flex-start;gap:0;padding:8px 20px 32px;font-size:15px;letter-spacing:.14em;border-top:1px solid var(--line);opacity:0;visibility:hidden;translate:0 -8px;transition:opacity 240ms ease,translate 320ms cubic-bezier(.23,1,.32,1),visibility 0s linear 320ms;}
  .tf-nav.is-open .tf-nav-links{opacity:1;visibility:visible;translate:0 0;transition:opacity 240ms ease,translate 320ms cubic-bezier(.23,1,.32,1),visibility 0s;}
  .tf-nav-links a[data-link]{min-height:60px;border-bottom:1px solid var(--line);}
  .tf-nav-links .tf-btn{margin-top:20px;width:100%;}
  .tf-nav-links .tf-menu-call{display:inline-flex;margin-top:12px;}
  .tf-nav.is-open{box-shadow:none;}
  /* Buttons go full width and sections tighten up on phones. */
  .tf-btn-row{flex-direction:column;align-items:stretch;}
  .tf-btn-row .tf-btn{width:100%;}
  .tf-section,.tf-service{padding-top:68px;padding-bottom:68px;gap:28px;}
  .tf-project-card img{height:240px;}
  .tf-project-card--boxed{padding:20px;}
  .tf-footer-line{flex-direction:column;gap:0;}
  .tf-footer-line a{display:inline-block;padding:11px 0;}
  .tf-footer-line span{padding:6px 0;}
  .tf-footer-line > * + *::before{display:none;}
  .tf-gallery{gap:12px;padding:24px 20px 72px;}
  .tf-gallery-item{flex:1 1 100%;}
  .tf-page-label{padding:40px 20px 0;}
  a.tf-eyebrow{display:inline-block;padding:14px 0;}
  .tf-banner-stage{height:clamp(240px,62vw,420px);}
  .tf-banner-ui{padding:36px 20px 14px;}
  .tf-banner-link{margin-left:0;display:inline-block;padding:16px 0 14px;box-shadow:none;text-decoration:underline;text-underline-offset:5px;}
  .tf-banner-ui{gap:8px;}
  .tf-banner-count{display:none;}
  .tf-banner-btn{width:44px;height:44px;}
  .tf-banner-label{display:block;margin-bottom:6px;}
}

/* Reduced motion: no movement anywhere, everything visible. */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{transition:none!important;animation:none!important;scroll-behavior:auto!important;}
  html.tf-js .tf-reveal:not([data-shown]) .tf-r{opacity:1!important;transform:none!important;}
  html.tf-js .tf-reveal:not([data-shown]) .tf-frame{clip-path:none!important;}
  [data-btn]:hover,[data-btn]:active,a[data-card]:hover,a[data-card]:active,a[data-card]:hover img{translate:none!important;scale:none!important;}
  .tf-form-done circle,.tf-form-done path{stroke-dashoffset:0;}
  .tf-hero-split-media img{translate:none!important;}
}

/* 15 Oct 2026 (Chris): About copy sits beside the photo, ABOUT level with the top of the image */
.tf-hero--about{grid-template-areas:"copy media" "prose media";grid-template-rows:auto 1fr;align-items:start;row-gap:28px;padding-bottom:84px;}
.tf-hero--about .tf-hero-copy{grid-area:copy;}
.tf-hero--about .tf-portrait{grid-area:media;align-self:stretch;height:100%;min-height:460px;}
.tf-hero--about .tf-vision{grid-area:prose;max-width:none;}
@media (max-width:900px){
  .tf-hero--about{grid-template-areas:"copy" "media" "prose";grid-template-rows:auto;padding-bottom:56px;}
  .tf-hero--about .tf-portrait{height:360px;min-height:0;}
}
/* No single-word last lines: balanced headings and short blocks, pretty paragraphs (JS in site.js glues the last two words as a fallback) */
.tf-h1,.tf-h2,.tf-service-title,.tf-step-name{text-wrap:balance;}
.tf-body,figcaption,.tf-prose p,.tf-about-p,.tf-hero-copy p{text-wrap:pretty;}
