/* ============================================================
   The Salon Book: site components
   Version 1.0

   Depends on tsb-tokens.css. Enqueue tokens first.
   Registered handle: tsb-site   (deps: tsb-tokens)

   Every class is prefixed tsb- so nothing collides with the
   theme or with WordPress core styles.
   ============================================================ */

/* ---------- 1. Base ---------- */

*{box-sizing:border-box}
html{scroll-behavior:smooth}

body{
  margin:0;
  background:var(--tsb-paper);
  color:var(--tsb-ink-2);
  font-family:var(--tsb-body);
  font-size:17px;
  line-height:1.65;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
img{display:block;max-width:100%}
a{color:inherit;text-decoration:none}

/* The page sits on its own opaque surface.
   A theme, or a theme.json global style, can paint the body a
   different colour or a gradient. Relying on the body background
   put near black headings on a near black background. This owns
   the surface instead, so the design cannot be undermined by
   whatever theme happens to be active. */
body.tsb-body{background:var(--tsb-paper)}
.tsb-shell{
  position:relative;z-index:0;
  min-height:100vh;
  background:var(--tsb-paper);
  color:var(--tsb-ink-2);
}

/* Never remove. It is the only thing keyboard users have. */
:focus-visible{outline:2px solid var(--tsb-accent);outline-offset:3px;border-radius:2px}

/* Visible to screen readers only. Defined here rather than relying on
   the theme, so the burger button is still labelled if the theme changes. */
.screen-reader-text{
  position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;
}

.tsb-skip{
  position:absolute;left:-9999px;top:0;z-index:200;
  background:var(--tsb-ink);color:var(--tsb-paper);
  padding:.8rem 1.2rem;border-radius:0 0 var(--tsb-radius-sm) 0;font-weight:600;
}
.tsb-skip:focus{left:0}

.tsb-wrap{
  max-width:var(--tsb-maxw);margin:0 auto;
  padding-left:var(--tsb-gutter);padding-right:var(--tsb-gutter);
}


/* ---------- 2. Type ---------- */

.tsb-display{
  font-family:var(--tsb-display);color:var(--tsb-ink);margin:0;
  font-weight:700;line-height:1.03;letter-spacing:var(--tsb-track-display);
}
.tsb-h1{font-size:var(--tsb-size-h1)}
.tsb-h2{font-size:var(--tsb-size-h2)}
.tsb-h3{font-size:var(--tsb-size-h3);font-weight:700;letter-spacing:-.014em;line-height:1.22}
.tsb-tight{max-width:16ch}

.tsb-kicker{
  display:flex;align-items:center;gap:.6rem;
  font-size:.83rem;font-weight:600;color:var(--tsb-accent);margin:0 0 1rem;
}
.tsb-kicker::before{content:"";flex:none;width:22px;height:2px;border-radius:2px;background:var(--tsb-accent)}

.tsb-lede{max-width:52ch;font-size:var(--tsb-size-lede);color:var(--tsb-ink-soft);margin:1.15rem 0 0}


/* ---------- 3. Buttons ---------- */

.tsb-btn{
  display:inline-flex;align-items:center;gap:.55rem;
  font-family:var(--tsb-body);font-size:.95rem;font-weight:600;
  padding:.95rem 1.6rem;
  border:1.5px solid var(--tsb-ink);border-radius:var(--tsb-radius-sm);
  background:var(--tsb-ink);color:var(--tsb-paper);cursor:pointer;
  transition:transform var(--tsb-mid) var(--tsb-ease),
             background var(--tsb-mid) ease,
             border-color var(--tsb-mid) ease,
             color var(--tsb-mid) ease,
             box-shadow var(--tsb-mid) ease;
}
.tsb-btn .tsb-arw{transition:transform .4s var(--tsb-ease)}
.tsb-btn:hover{transform:translateY(-2px);background:var(--tsb-accent);border-color:var(--tsb-accent);box-shadow:var(--tsb-shadow-sm)}
.tsb-btn:hover .tsb-arw{transform:translateX(4px)}

.tsb-btn--line{background:transparent;color:var(--tsb-ink);border-color:var(--tsb-line)}
.tsb-btn--line:hover{background:transparent;color:var(--tsb-accent);border-color:var(--tsb-accent);box-shadow:none}

.tsb-btn--light{background:var(--tsb-paper);border-color:var(--tsb-paper);color:var(--tsb-ink)}
.tsb-btn--light:hover{background:var(--tsb-accent);border-color:var(--tsb-accent);color:#fff}


/* ---------- 4. Header ---------- */

.tsb-head{
  position:sticky;top:0;z-index:90;
  background:rgba(252,249,245,.9);backdrop-filter:blur(12px);
  border-bottom:1px solid transparent;
  transition:border-color .4s ease,box-shadow .4s ease;
}
.tsb-head.is-stuck{border-bottom-color:var(--tsb-line-2);box-shadow:0 10px 30px -26px rgba(31,26,24,.6)}
.tsb-head-in{
  position:relative;
  display:flex;align-items:center;justify-content:space-between;gap:2rem;
  max-width:var(--tsb-maxw);margin:0 auto;padding:.7rem var(--tsb-gutter);
}
.tsb-logo img{height:84px;width:auto;transition:height .4s var(--tsb-ease)}
.tsb-head.is-stuck .tsb-logo img{height:64px}

.tsb-nav{display:flex;gap:2rem;align-items:center}
.tsb-nav a{position:relative;padding:.35rem 0;font-size:.96rem;font-weight:500;color:var(--tsb-ink-2);transition:color .3s}
.tsb-nav a::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:2px;border-radius:2px;
  background:var(--tsb-accent);transform:scaleX(0);transform-origin:right;
  transition:transform .4s var(--tsb-ease);
}
.tsb-nav a:hover{color:var(--tsb-ink)}
.tsb-nav a:hover::after,.tsb-nav a[aria-current="page"]::after{transform:scaleX(1);transform-origin:left}
.tsb-nav a[aria-current="page"]{color:var(--tsb-ink);font-weight:600}
.tsb-head .tsb-btn{padding:.72rem 1.25rem;font-size:.9rem}

/* Burger. Hidden on wide screens, and the only control on narrow ones. */
.tsb-burger{
  display:none;align-items:center;justify-content:center;
  width:44px;height:44px;padding:0;
  background:transparent;border:1px solid var(--tsb-line);border-radius:var(--tsb-radius-sm);
  cursor:pointer;color:var(--tsb-ink);
  transition:border-color var(--tsb-fast) ease,background var(--tsb-fast) ease;
}
.tsb-burger:hover{border-color:var(--tsb-accent)}
.tsb-burger-bars{display:block;width:20px;height:14px;position:relative}
.tsb-burger-bars span{
  position:absolute;left:0;right:0;height:2px;border-radius:2px;background:currentColor;
  transition:transform var(--tsb-fast) var(--tsb-ease),opacity var(--tsb-fast) ease,top var(--tsb-fast) ease;
}
.tsb-burger-bars span:nth-child(1){top:0}
.tsb-burger-bars span:nth-child(2){top:6px}
.tsb-burger-bars span:nth-child(3){top:12px}
.tsb-burger[aria-expanded="true"] .tsb-burger-bars span:nth-child(1){top:6px;transform:rotate(45deg)}
.tsb-burger[aria-expanded="true"] .tsb-burger-bars span:nth-child(2){opacity:0}
.tsb-burger[aria-expanded="true"] .tsb-burger-bars span:nth-child(3){top:6px;transform:rotate(-45deg)}

@media(max-width:980px){
  .tsb-nav{gap:1.1rem}
  .tsb-nav a{font-size:.88rem}
  .tsb-logo img,.tsb-head.is-stuck .tsb-logo img{height:56px}
}

@media(max-width:700px){
  /* The hero already carries a call to action, so the header button
     is redundant on a small screen and costs room the burger needs. */
  .tsb-head-cta{display:none}
  .tsb-burger{display:inline-flex}

  .tsb-nav{
    display:none;position:absolute;top:100%;left:0;right:0;
    flex-direction:column;align-items:stretch;gap:0;
    padding:.25rem var(--tsb-gutter) 1rem;
    background:var(--tsb-paper);
    border-top:1px solid var(--tsb-line-2);
    box-shadow:0 24px 40px -28px rgba(31,26,24,.6);
  }
  .tsb-nav.is-open{display:flex}
  .tsb-nav a{
    padding:1rem .1rem;font-size:1.05rem;font-weight:500;
    border-bottom:1px solid var(--tsb-line-2);
  }
  .tsb-nav a:last-child{border-bottom:0}
  .tsb-nav a::after{display:none}
  .tsb-nav a[aria-current="page"]{color:var(--tsb-accent);font-weight:600}
}


/* ---------- 5. Bands and page heads ---------- */

.tsb-band{padding:var(--tsb-band) 0}
.tsb-band--alt{background:var(--tsb-paper-2)}
.tsb-band--flush{padding-top:0}
.tsb-sec-head{margin-bottom:clamp(2rem,4vw,3.2rem)}

.tsb-page-head{padding:clamp(2.5rem,6vw,4.5rem) 0 clamp(2rem,4vw,3rem)}
.tsb-page-head .tsb-lede{font-size:1.14rem}


/* ---------- 6. Home hero ---------- */

.tsb-hero{padding:clamp(3rem,7vw,5.5rem) 0 clamp(3rem,6vw,4.5rem)}
.tsb-hero-grid{display:grid;grid-template-columns:1.08fr .92fr;gap:clamp(2rem,5vw,4.5rem);align-items:center}
@media(max-width:960px){.tsb-hero-grid{grid-template-columns:1fr;gap:2.5rem}}
.tsb-swap{color:var(--tsb-accent);font-weight:800}
.tsb-actions{display:flex;flex-wrap:wrap;gap:.85rem;margin-top:2.1rem}
.tsb-note{display:flex;flex-wrap:wrap;gap:1.4rem;margin-top:2rem;font-size:.88rem;color:var(--tsb-ink-soft)}
.tsb-note span{display:flex;align-items:center;gap:.45rem}
.tsb-note span::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--tsb-accent)}

.tsb-shot{position:relative}
.tsb-frame{border-radius:20px;overflow:hidden;background:var(--tsb-paper-2);aspect-ratio:4/5;box-shadow:0 30px 60px -34px rgba(31,26,24,.5)}
.tsb-frame img{width:100%;height:100%;object-fit:cover}

/* The booking slip. Shows what the product does, which reads
   harder than another photograph. */
.tsb-slip{
  position:absolute;left:clamp(-.5rem,-2vw,-2rem);bottom:clamp(1rem,3vw,2.2rem);
  background:var(--tsb-card);border:1px solid var(--tsb-line-2);
  border-radius:14px;padding:1.05rem 1.25rem;min-width:250px;
  box-shadow:0 22px 46px -22px rgba(31,26,24,.42);
}
.tsb-slip .tsb-badge{
  display:inline-block;font-size:.72rem;font-weight:700;
  color:var(--tsb-block);background:rgba(37,33,31,.08);
  padding:.24rem .6rem;border-radius:99px;
}
.tsb-slip .tsb-when{font-family:var(--tsb-display);font-size:1.16rem;font-weight:700;color:var(--tsb-ink);letter-spacing:-.02em;margin:.55rem 0 .2rem}
.tsb-slip .tsb-what{font-size:.87rem;color:var(--tsb-ink-soft);margin:0}
.tsb-slip .tsb-paid{margin-top:.75rem;padding-top:.7rem;border-top:1px solid var(--tsb-line-2);font-size:.85rem;font-weight:600;color:var(--tsb-ink)}
.tsb-slip .tsb-paid em{font-style:normal;color:var(--tsb-accent)}
@media(max-width:520px){.tsb-slip{left:.5rem;right:.5rem;min-width:0}}


/* ---------- 7. Labelled image row ---------- */

.tsb-row4{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(.7rem,1.6vw,1.3rem)}
@media(max-width:760px){.tsb-row4{grid-template-columns:repeat(2,1fr)}}
.tsb-shelf .tsb-pic{border-radius:14px;overflow:hidden;aspect-ratio:4/3;background:var(--tsb-paper-2)}
.tsb-shelf img{width:100%;height:100%;object-fit:cover;transition:transform 1s var(--tsb-ease)}
.tsb-shelf:hover img{transform:scale(1.05)}
.tsb-shelf .tsb-lbl{display:block;margin-top:.85rem;font-size:.95rem;font-weight:600;color:var(--tsb-ink);transition:color .35s}
.tsb-shelf:hover .tsb-lbl{color:var(--tsb-accent)}


/* ---------- 8. Two column ---------- */

.tsb-two{display:grid;grid-template-columns:1fr 1fr;gap:clamp(2rem,5vw,4.5rem);align-items:center}
.tsb-two--top{align-items:start}
@media(max-width:900px){.tsb-two{grid-template-columns:1fr}}
.tsb-two .tsb-figure{border-radius:18px;overflow:hidden;aspect-ratio:5/4;background:var(--tsb-paper-2);box-shadow:var(--tsb-shadow-img)}
.tsb-two .tsb-figure img{width:100%;height:100%;object-fit:cover}

.tsb-list{list-style:none;margin:0;padding:0}
.tsb-list li{
  display:flex;align-items:center;gap:1rem;
  background:var(--tsb-card);border:1px solid var(--tsb-line-2);
  border-radius:12px;padding:1.05rem 1.2rem;margin-bottom:.7rem;
  font-weight:500;color:var(--tsb-ink);
  transition:transform var(--tsb-mid) var(--tsb-ease),box-shadow var(--tsb-mid) ease,border-color var(--tsb-mid) ease;
}
.tsb-list li:hover{transform:translateX(6px);border-color:var(--tsb-accent);box-shadow:0 14px 30px -20px rgba(31,26,24,.4)}
.tsb-list .tsb-tick{
  flex:none;width:22px;height:22px;border-radius:50%;
  background:var(--tsb-accent-wash);color:var(--tsb-accent);
  display:grid;place-items:center;font-size:.7rem;font-weight:800;
}
.tsb-list .tsb-soon{
  margin-left:auto;font-size:.74rem;font-weight:600;color:var(--tsb-ink-soft);
  background:var(--tsb-paper-2);padding:.22rem .6rem;border-radius:99px;white-space:nowrap;
}

.tsb-pain{list-style:none;margin:1.4rem 0 0;padding:0;border-top:1px solid var(--tsb-line)}
.tsb-pain li{padding:.85rem .2rem;border-bottom:1px solid var(--tsb-line);font-weight:500;color:var(--tsb-ink)}


/* ---------- 9. Dark block ---------- */

.tsb-block{
  background:var(--tsb-block);color:rgba(252,249,245,.82);
  border-radius:var(--tsb-radius-lg);padding:clamp(2.2rem,5.5vw,4.2rem);
}
.tsb-block .tsb-display{color:var(--tsb-paper)}
.tsb-block .tsb-kicker{color:var(--tsb-on-dark)}
.tsb-block .tsb-kicker::before{background:var(--tsb-accent-bright)}
.tsb-block .tsb-lede{color:var(--tsb-on-dark-2)}
.tsb-block--mid{text-align:center}
.tsb-block--mid .tsb-display,.tsb-block--mid .tsb-lede{margin-left:auto;margin-right:auto}
.tsb-block--mid .tsb-kicker{justify-content:center}
.tsb-block--mid .tsb-btn{margin-top:2rem}

.tsb-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(1.4rem,3vw,2.6rem);margin-top:clamp(2.2rem,4.5vw,3.4rem)}
.tsb-steps--four{grid-template-columns:repeat(4,1fr);gap:clamp(1.2rem,2.4vw,2rem)}
@media(max-width:1040px){.tsb-steps--four{grid-template-columns:repeat(2,1fr)}}
@media(max-width:860px){.tsb-steps{grid-template-columns:1fr}}
@media(max-width:560px){.tsb-steps--four{grid-template-columns:1fr}}
.tsb-step{position:relative;padding-top:1.9rem;border-top:1px solid rgba(252,249,245,.16)}
.tsb-step .tsb-n{
  position:absolute;top:-1.05rem;left:0;width:2.1rem;height:2.1rem;border-radius:50%;
  background:var(--tsb-block-soft);border:1px solid rgba(252,249,245,.2);color:var(--tsb-paper);
  font-family:var(--tsb-display);font-size:.92rem;font-weight:700;display:grid;place-items:center;
  transform:scale(.5);opacity:0;transition:transform .7s var(--tsb-ease),opacity .5s ease;
}
.is-in .tsb-step .tsb-n{transform:scale(1);opacity:1}
.is-in .tsb-step:nth-child(2) .tsb-n{transition-delay:.14s}
.is-in .tsb-step:nth-child(3) .tsb-n{transition-delay:.28s}
.is-in .tsb-step:nth-child(4) .tsb-n{transition-delay:.42s}
.tsb-step h3{margin:.5rem 0;font-family:var(--tsb-display);font-size:1.32rem;font-weight:700;letter-spacing:-.018em;color:var(--tsb-paper)}
.tsb-step p{margin:0;font-size:.98rem;color:var(--tsb-on-dark-2)}

.tsb-block-foot{
  display:flex;flex-wrap:wrap;align-items:center;gap:1.6rem;
  margin-top:clamp(2.2rem,4.5vw,3.2rem);padding-top:1.8rem;
  border-top:1px solid rgba(252,249,245,.16);
}
.tsb-facts{display:flex;flex-wrap:wrap;gap:1.4rem;font-size:.9rem;color:var(--tsb-on-dark-2)}
.tsb-facts span{display:flex;align-items:center;gap:.45rem}
.tsb-facts span::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--tsb-accent-bright)}
.tsb-block-foot .tsb-btn{margin-left:auto}
@media(max-width:700px){.tsb-block-foot .tsb-btn{margin-left:0}}


/* ---------- 10. Roster ---------- */

.tsb-roster{border-top:1px solid var(--tsb-line)}
.tsb-roster .tsb-item{
  display:flex;align-items:center;gap:1.2rem;
  padding:1.4rem .2rem;border-bottom:1px solid var(--tsb-line);
  transition:padding-left .5s var(--tsb-ease);
}
.tsb-roster .tsb-who{
  font-family:var(--tsb-display);font-size:clamp(1.3rem,2.8vw,1.95rem);font-weight:700;
  color:var(--tsb-ink);letter-spacing:-.028em;line-height:1.15;transition:color .35s;
}
.tsb-roster .tsb-job{margin-left:auto;font-size:.94rem;color:var(--tsb-ink-soft);text-align:right;max-width:34ch}
.tsb-roster .tsb-item:hover{padding-left:1.1rem}
.tsb-roster .tsb-item:hover .tsb-who{color:var(--tsb-accent)}
.tsb-roster .tsb-arw{flex:none;color:var(--tsb-accent);opacity:0;transform:translateX(-8px);transition:opacity .4s ease,transform .5s var(--tsb-ease)}
.tsb-roster .tsb-item:hover .tsb-arw{opacity:1;transform:translateX(0)}
@media(max-width:680px){
  .tsb-roster .tsb-item{flex-direction:column;align-items:flex-start;gap:.3rem}
  .tsb-roster .tsb-job{margin-left:0;text-align:left}
  .tsb-roster .tsb-arw{display:none}
}


/* ---------- 11. Cards and index tabs ----------
   The tab is the signature interaction. Offsets are staggered
   per card so they read like tabs down the side of a diary.
   This is the element that should carry into the plugin. */

.tsb-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(1rem,2vw,1.5rem)}
@media(max-width:900px){.tsb-cards{grid-template-columns:1fr}}

/* Six column variant, for the home page five card layout */
.tsb-cards--six{grid-template-columns:repeat(6,1fr)}
.tsb-cards--six .tsb-card{grid-column:span 2}
.tsb-cards--six .tsb-card:nth-child(4),
.tsb-cards--six .tsb-card:nth-child(5){grid-column:span 3}
@media(max-width:960px){
  .tsb-cards--six{grid-template-columns:repeat(6,1fr)}
  .tsb-cards--six .tsb-card,
  .tsb-cards--six .tsb-card:nth-child(4),
  .tsb-cards--six .tsb-card:nth-child(5){grid-column:span 3}
}
@media(max-width:640px){
  .tsb-cards--six{grid-template-columns:1fr}
  .tsb-cards--six .tsb-card,
  .tsb-cards--six .tsb-card:nth-child(4),
  .tsb-cards--six .tsb-card:nth-child(5){grid-column:span 1}
}

.tsb-card{
  position:relative;background:var(--tsb-card);
  border:1px solid var(--tsb-line-2);border-radius:var(--tsb-radius);overflow:hidden;
  transition:transform var(--tsb-mid) var(--tsb-ease),box-shadow var(--tsb-mid) ease,border-color var(--tsb-mid) ease;
}
.tsb-card:hover{transform:translateY(-5px);border-color:var(--tsb-line);box-shadow:var(--tsb-shadow)}
.tsb-card .tsb-pic{aspect-ratio:16/10;overflow:hidden;background:var(--tsb-paper-2)}
.tsb-card .tsb-pic img{width:100%;height:100%;object-fit:cover;transition:transform 1.1s var(--tsb-ease)}
.tsb-card:hover .tsb-pic img{transform:scale(1.05)}
.tsb-card .tsb-body{padding:1.7rem 1.6rem 1.8rem}
.tsb-card .tsb-pic + .tsb-body{padding-top:1.5rem}
.tsb-card .tsb-cat{font-size:var(--tsb-size-label);font-weight:700;letter-spacing:var(--tsb-track-label);text-transform:uppercase;color:var(--tsb-accent)}
.tsb-card .tsb-h3{margin:.6rem 0 .55rem;font-family:var(--tsb-display);color:var(--tsb-ink)}
.tsb-card p{margin:0;font-size:.96rem;color:var(--tsb-ink-soft)}
.tsb-card .tsb-soon{display:inline-block;margin-top:1rem;font-size:.74rem;font-weight:600;color:var(--tsb-ink-soft);background:var(--tsb-paper-2);padding:.24rem .65rem;border-radius:99px}

.tsb-tab{
  position:absolute;right:-1px;top:26px;z-index:2;
  width:9px;height:44px;border-radius:0 6px 6px 0;
  background:var(--tsb-accent);opacity:.85;
  transition:width var(--tsb-mid) var(--tsb-ease),opacity var(--tsb-fast) ease;
}
.tsb-card:nth-child(2) .tsb-tab{top:74px;background:var(--tsb-block)}
.tsb-card:nth-child(3) .tsb-tab{top:122px}
.tsb-card:nth-child(4) .tsb-tab{top:38px;background:var(--tsb-block)}
.tsb-card:nth-child(5) .tsb-tab{top:90px}
.tsb-card:hover .tsb-tab{width:30px;opacity:1}


/* ---------- 12. Alternating feature rows ---------- */

.tsb-frow{display:grid;grid-template-columns:1fr 1fr;gap:clamp(1.8rem,5vw,4.5rem);align-items:center;margin-bottom:clamp(2.5rem,6vw,5rem)}
.tsb-frow:last-child{margin-bottom:0}
.tsb-frow .tsb-figure{border-radius:18px;overflow:hidden;aspect-ratio:4/3;background:var(--tsb-paper-2);box-shadow:var(--tsb-shadow-img)}
.tsb-frow .tsb-figure img{width:100%;height:100%;object-fit:cover;transition:transform 1.1s var(--tsb-ease)}
.tsb-frow:hover .tsb-figure img{transform:scale(1.04)}
.tsb-frow:nth-child(even) .tsb-figure{order:2}
@media(max-width:880px){
  .tsb-frow{grid-template-columns:1fr;gap:1.5rem}
  .tsb-frow:nth-child(even) .tsb-figure{order:0}
}
.tsb-pts{list-style:none;margin:1.3rem 0 0;padding:0}
.tsb-pts li{position:relative;padding-left:1.5rem;margin-bottom:.6rem;font-size:1rem;color:var(--tsb-ink-soft)}
.tsb-pts li::before{content:"";position:absolute;left:0;top:.68em;width:8px;height:2px;border-radius:2px;background:var(--tsb-accent)}


/* ---------- 13. Mosaic ---------- */

.tsb-mosaic{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(.7rem,1.5vw,1.2rem);margin-top:clamp(2.2rem,4.5vw,3.4rem)}
.tsb-tile{position:relative;display:block;overflow:hidden;border-radius:var(--tsb-radius);background:var(--tsb-paper-2);aspect-ratio:1/1}
.tsb-tile--big{grid-column:span 2;grid-row:span 2;aspect-ratio:auto}
.tsb-tile img{width:100%;height:100%;object-fit:cover;transition:transform 1.1s var(--tsb-ease)}
.tsb-tile::after{content:"";position:absolute;inset:0;background:linear-gradient(to top,rgba(31,26,24,.72),rgba(31,26,24,.06) 58%);opacity:.9;transition:opacity .5s ease}
.tsb-tile:hover img{transform:scale(1.06)}
.tsb-tile:hover::after{opacity:1}
.tsb-tile .tsb-cap{
  position:absolute;left:0;bottom:0;z-index:2;padding:1rem 1.15rem;
  color:#fff;font-weight:600;font-size:1rem;
  transform:translateY(4px);transition:transform .5s var(--tsb-ease);
}
.tsb-tile:hover .tsb-cap{transform:translateY(0)}
@media(max-width:760px){
  .tsb-mosaic{grid-template-columns:repeat(2,1fr)}
  .tsb-tile--big{grid-column:span 2;grid-row:span 1;aspect-ratio:4/3}
}


/* ---------- 14. Forms ---------- */

.tsb-formwrap{display:grid;grid-template-columns:1.25fr .75fr;gap:clamp(2rem,4.5vw,3.5rem);align-items:start}
@media(max-width:940px){.tsb-formwrap{grid-template-columns:1fr}}

.tsb-form{
  background:var(--tsb-card);border:1px solid var(--tsb-line-2);
  border-radius:18px;padding:clamp(1.5rem,3.5vw,2.4rem);
  box-shadow:0 24px 52px -34px rgba(31,26,24,.4);
}
.tsb-fgrid{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
@media(max-width:620px){.tsb-fgrid{grid-template-columns:1fr}}
.tsb-f{display:flex;flex-direction:column;gap:.4rem;margin-bottom:1rem}
.tsb-f--full{grid-column:1 / -1}
.tsb-f label{font-size:.88rem;font-weight:600;color:var(--tsb-ink)}
.tsb-f label .tsb-opt{font-weight:400;color:var(--tsb-ink-soft)}
.tsb-f input,.tsb-f select,.tsb-f textarea{
  font-family:var(--tsb-body);font-size:1rem;color:var(--tsb-ink);
  padding:.8rem .9rem;border:1px solid var(--tsb-line);border-radius:var(--tsb-radius-sm);
  background:var(--tsb-paper);
  transition:border-color .3s ease,box-shadow .3s ease,background .3s ease;
}
.tsb-f textarea{resize:vertical;min-height:120px}
.tsb-f input:focus,.tsb-f select:focus,.tsb-f textarea:focus{
  outline:none;border-color:var(--tsb-accent);background:var(--tsb-card);
  box-shadow:0 0 0 3px var(--tsb-accent-wash);
}
.tsb-f .tsb-hint{font-size:.82rem;color:var(--tsb-ink-soft)}

.tsb-consent{
  display:flex;gap:.75rem;align-items:flex-start;
  padding:1rem;border:1px solid var(--tsb-line-2);border-radius:12px;
  background:var(--tsb-paper);margin:.4rem 0 1.3rem;
}
.tsb-consent input{margin-top:.25rem;accent-color:var(--tsb-accent);width:18px;height:18px;flex:none}
.tsb-consent span{font-size:.9rem;color:var(--tsb-ink-soft)}
.tsb-consent a{color:var(--tsb-accent);font-weight:600;text-decoration:underline}

/* Honeypot. Off screen rather than display:none, because some
   bots skip fields that are set to display:none. */
.tsb-hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}


/* ---------- 15. Side panels ---------- */

.tsb-side{display:flex;flex-direction:column;gap:1rem}
.tsb-panel{position:relative;background:var(--tsb-card);border:1px solid var(--tsb-line-2);border-radius:var(--tsb-radius);padding:1.5rem 1.5rem 1.7rem}
.tsb-panel h3{margin:0 0 1rem;font-family:var(--tsb-display);font-size:1.15rem;font-weight:700;letter-spacing:-.018em;color:var(--tsb-ink)}

.tsb-next{list-style:none;margin:0;padding:0;counter-reset:tsbstep}
.tsb-next li{counter-increment:tsbstep;position:relative;padding-left:2.3rem;margin-bottom:1rem;font-size:.95rem;color:var(--tsb-ink-soft)}
.tsb-next li:last-child{margin-bottom:0}
.tsb-next li::before{
  content:counter(tsbstep);position:absolute;left:0;top:-.1rem;
  width:1.6rem;height:1.6rem;border-radius:50%;
  background:var(--tsb-accent-wash);color:var(--tsb-accent);
  font-family:var(--tsb-display);font-size:.8rem;font-weight:700;
  display:grid;place-items:center;
}
.tsb-next li strong{display:block;color:var(--tsb-ink);font-weight:600}

.tsb-contactline{display:flex;flex-direction:column;gap:.2rem;padding:.9rem 0;border-bottom:1px solid var(--tsb-line-2)}
.tsb-contactline:last-child{border-bottom:0;padding-bottom:0}
.tsb-contactline .tsb-k{font-size:var(--tsb-size-label);font-weight:700;letter-spacing:var(--tsb-track-label);text-transform:uppercase;color:var(--tsb-ink-soft)}
.tsb-contactline .tsb-v{font-size:1.02rem;font-weight:600;color:var(--tsb-ink)}
.tsb-contactline a:hover{color:var(--tsb-accent)}


/* ---------- 16. Footer ---------- */

.tsb-foot{background:var(--tsb-paper-2);padding:clamp(2.5rem,5vw,3.6rem) 0 2rem;border-top:1px solid var(--tsb-line-2)}
.tsb-foot-grid{display:flex;flex-wrap:wrap;gap:2.4rem;justify-content:space-between;align-items:flex-start}
.tsb-foot img{height:64px;width:auto}
.tsb-foot-nav{display:flex;flex-wrap:wrap;gap:1.5rem}
.tsb-foot-nav a{font-size:.95rem;font-weight:500;color:var(--tsb-ink-soft);transition:color .35s}
.tsb-foot-nav a:hover{color:var(--tsb-accent)}
.tsb-foot-mail{margin:0;font-size:.95rem;color:var(--tsb-ink-soft)}
.tsb-foot-mail a{color:var(--tsb-ink);font-weight:600}
.tsb-foot-mail a:hover{color:var(--tsb-accent)}
.tsb-foot-base{
  margin-top:2.4rem;padding-top:1.4rem;border-top:1px solid var(--tsb-line-2);
  display:flex;flex-wrap:wrap;gap:1rem;justify-content:space-between;
  font-size:.85rem;color:var(--tsb-ink-soft);
}
.tsb-foot-base a{color:var(--tsb-ink-2);font-weight:600}
.tsb-foot-base a:hover{color:var(--tsb-accent)}


/* ---------- 17. Motion ----------
   Add tsb-rv in the markup. tsb-site.js adds is-in when the
   element scrolls into view. */

.tsb-rv{
  opacity:0;transform:translateY(22px);
  transition:opacity var(--tsb-slow) var(--tsb-ease),transform var(--tsb-slow) var(--tsb-ease);
}
.tsb-rv.is-in{opacity:1;transform:none}

/* tsb-rv-now is a script hook with no styles of its own. Put it
   alongside tsb-rv on anything above the fold, so it reveals on
   load instead of waiting for a scroll event that never comes. */

.tsb-d1{transition-delay:.08s}
.tsb-d2{transition-delay:.16s}
.tsb-d3{transition-delay:.24s}
.tsb-d4{transition-delay:.32s}


/* ---------- 18. Reduced motion ----------
   Some people get motion sickness from scroll animation and
   have it switched off at operating system level. Honour it. */

@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{transition-duration:.001ms !important;animation-duration:.001ms !important}
  .tsb-rv{opacity:1;transform:none}
  .tsb-step .tsb-n{transform:scale(1);opacity:1}
}


/* ---------- 19. Print ---------- */

@media print{
  .tsb-head,.tsb-foot,.tsb-btn{display:none}
  .tsb-rv{opacity:1;transform:none}
  body{background:#fff;color:#000}
}
