
/* ============================================================================
   FILE: style.css  |  WEBSITE STYLES
   ============================================================================ */
:root {
  --ink:#17201d;
  --cream:#ebe6d8;
  --stone:#c9c0ad;
  --red:#ca4f35;
  --lime:#b7cf68;
  --line:#17201d32
}

* {
  box-sizing:border-box
}

html {
  scroll-behavior:smooth
}

body {
  margin:0;
  background:var(--cream);
  color:var(--ink);
  font-family:"DM Sans",Arial,sans-serif;
  overflow-x:hidden
}

.noise {
  position:fixed;
  inset:0;
  pointer-events:none;
  z-index:10;
  opacity:.1;
  background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 150 150' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='4'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.4'/%3E%3C/svg%3E")
}

a {
  color:inherit;
  text-decoration:none
}

.nav {
  height:80px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  padding:0 5vw;
  border-bottom:1px solid var(--line);
  position:relative;
  z-index:2
}

.brand {
  font:700 20px/1 "Playfair Display",serif;
  letter-spacing:-.09em
}

.brand span {
  font:9px "DM Mono",monospace;
  letter-spacing:.16em;
  margin-left:5px
}

.nav nav {
  display:flex;
  gap:31px;
  font:10px "DM Mono",monospace;
  text-transform:uppercase
}

.nav nav a:hover,.book:hover {
  opacity:.55
}

.book {
  font-size:11px;
  font-weight:700;
  border-bottom:1px solid;
  padding-bottom:3px
}

.book b {
  font-size:17px;
  margin-left:5px
}

.hero {
  min-height:calc(100vh - 80px);
  display:grid;
  grid-template-columns:.9fr 1.1fr
}

.hero-content {
  padding:clamp(90px,14vw,190px) 5vw 50px
}

.eyebrow {
  font:10px "DM Mono",monospace;
  letter-spacing:.09em;
  margin:0;
  text-transform:uppercase
}

.eyebrow i {
  display:inline-block;
  width:8px;
  height:8px;
  background:var(--red);
  border-radius:50%;
  margin-right:7px
}

.hero h1,.intro h2,.heading h2,.booking h2 {
  font:clamp(57px,7.3vw,110px)/.84 "Playfair Display",serif;
  letter-spacing:-.1em;
  margin:30px 0
}

.hero h1 em,.intro h2 em,.heading h2 em,.booking h2 em {
  font-style:italic;
  color:var(--red)
}

.hero-content>p:not(.eyebrow) {
  max-width:365px;
  font-size:15px;
  line-height:1.75;
  margin:0 0 32px
}

.button {
  display:inline-flex;
  align-items:center;
  gap:25px;
  padding:15px 19px;
  background:var(--ink);
  color:var(--cream);
  font-size:11px;
  font-weight:700
}

.button b {
  font-size:18px
}

.hero-detail {
  display:flex;
  gap:20px;
  margin-top:72px;
  font:9px "DM Mono",monospace
}

.hero-detail span {
  border-top:1px solid var(--ink);
  padding-top:9px;
  width:115px
}

.hero-photo {
  background:var(--ink);
  position:relative;
  overflow:hidden;
  min-height:550px
}

.hero-portrait {
  position:absolute;
  inset:0;
  background:url("images/gallery.png") 0 0/200% 200%;
  filter:grayscale(.4) contrast(1.05);
  opacity:.8;
  transition:transform .8s
}

.hero-photo:hover .hero-portrait {
  transform:scale(1.06)
}

.hero-type {
  position:absolute;
  left:7%;
  bottom:7%;
  color:var(--cream);
  font:700 clamp(50px,7vw,105px)/.76 "Playfair Display",serif;
  letter-spacing:-.1em;
  mix-blend-mode:screen
}

.hero-type i {
  color:var(--lime)
}

.hero-stamp {
  position:absolute;
  right:7%;
  top:7%;
  color:var(--ink);
  background:var(--lime);
  width:88px;
  aspect-ratio:1;
  border-radius:50%;
  display:grid;
  place-content:center;
  text-align:center;
  font:9px/1.3 "DM Mono",monospace;
  letter-spacing:.08em;
  animation:spin 20s linear infinite
}

.hero-stamp b {
  font-size:16px;
  margin-top:3px
}

.ticker {
  overflow:hidden;
  background:var(--red);
  color:var(--cream);
  white-space:nowrap;
  padding:16px 0;
  font:700 12px "DM Mono",monospace;
  letter-spacing:.1em
}

.ticker div {
  width:max-content;
  animation:ticker 24s linear infinite
}

.ticker b {
  margin:0 23px;
  color:var(--lime);
  font-size:15px
}

.section {
  padding:130px 5vw
}

.intro {
  border-bottom:1px solid var(--line)
}

.intro>div {
  display:grid;
  grid-template-columns:1.1fr .55fr;
  gap:9vw;
  align-items:end
}

.intro h2,.heading h2 {
  font-size:clamp(46px,5.4vw,82px);
  margin:26px 0 0
}

.intro>div>p {
  font-size:15px;
  line-height:1.8;
  margin:0
}

.heading {
  max-width:680px
}

.services {
  background:#e0d9c9
}

.service-list {
  margin-top:62px;
  border-top:1px solid var(--ink)
}

.service-list article {
  display:grid;
  grid-template-columns:54px 1fr 100px 25px;
  gap:18px;
  align-items:center;
  padding:23px 0;
  border-bottom:1px solid var(--line);
  transition:.3s
}

.service-list article:hover {
  padding-inline:16px;
  background:#f0eadc
}

.service-list span {
  font:10px "DM Mono",monospace;
  color:var(--red)
}

.service-list h3 {
  font:600 20px "Playfair Display",serif;
  margin:0 0 5px
}

.service-list p {
  font-size:12px;
  color:#566057;
  margin:0
}

.service-list strong {
  font:10px "DM Mono",monospace
}

.service-list>b {
  font-size:20px
}

.all-services {
  display:inline-flex;
  margin-top:26px;
  padding-bottom:4px;
  border-bottom:1px solid;
  font-size:11px;
  font-weight:700
}

.all-services b {
  font-size:17px;
  margin-left:7px
}

.gallery {
  background:var(--ink);
  color:var(--cream)
}

.gallery .eyebrow {
  color:var(--stone)
}

.gallery-grid {
  display:grid;
  grid-template-columns:repeat(2,1fr);
  gap:12px;
  margin-top:60px
}

.shot {
  height:440px;
  margin:0;
  position:relative;
  overflow:hidden;
  background-image:url("images/gallery.png");
  background-size:200% 200%;
  transition:transform .5s
}

.shot:hover {
  transform:scale(.98)
}

.shot.one {
  background-position:0 0
}

.shot.two {
  background-position:100% 0
}

.shot.three {
  background-position:0 100%
}

.shot.four {
  background-position:100% 100%
}

.shot:after {
  content:"";
  position:absolute;
  inset:0;
  background:linear-gradient(transparent 40%,#101712cc)
}

.shot figcaption {
  position:absolute;
  z-index:1;
  bottom:20px;
  left:20px;
  right:20px;
  display:flex;
  justify-content:space-between;
  font:10px "DM Mono",monospace;
  letter-spacing:.08em
}

.shot figcaption span {
  color:var(--lime)
}

.visit-grid {
  display:grid;
  grid-template-columns:.7fr 1.3fr;
  gap:8vw;
  margin-top:60px
}

.label {
  font:10px "DM Mono",monospace;
  letter-spacing:.1em;
  margin:0
}

.visit-info dl {
  margin:21px 0 50px;
  border-top:1px solid var(--line)
}

.visit-info dl div {
  display:flex;
  justify-content:space-between;
  gap:12px;
  padding:15px 0;
  border-bottom:1px solid var(--line);
  font-size:13px
}

.visit-info dd {
  font-weight:700;
  margin:0
}

.address {
  font:19px/1.5 "Playfair Display",serif;
  margin:15px 0
}

.visit-info a {
  font-size:11px;
  font-weight:700;
  border-bottom:1px solid;
  padding-bottom:4px
}

.visit-info a b {
  font-size:17px;
  margin-left:5px
}

.map {
  height:430px;
  position:relative;
  overflow:hidden;
  background:var(--stone)
}

.map iframe {
  width:100%;
  height:100%;
  border:0;
  filter:grayscale(1) contrast(1.1)
}

.map>span {
  position:absolute;
  left:50%;
  top:50%;
  translate:-50% -50%;
  width:85px;
  aspect-ratio:1;
  border-radius:50%;
  display:grid;
  place-items:center;
  text-align:center;
  background:var(--red);
  color:var(--cream);
  font:10px/1 "DM Mono",monospace;
  letter-spacing:.1em
}

.booking {
  padding:120px 5vw;
  background:var(--lime);
  text-align:center
}

.booking .eyebrow {
  color:#43502a
}

.booking h2 {
  font-size:clamp(48px,6vw,90px)
}

.booking h2 em {
  color:var(--red)
}

.light {
  background:var(--cream);
  color:var(--ink)
}

footer {
  display:flex;
  justify-content:space-between;
  align-items:center;
  padding:28px 5vw;
  font:9px "DM Mono",monospace
}

footer p {
  margin:0
}

footer div {
  display:flex;
  gap:17px;
  text-decoration:underline
}

.reveal {
  opacity:0;
  translate:0 24px;
  transition:.7s
}

.reveal.visible {
  opacity:1;
  translate:none
}

@keyframes ticker {
  to {
    transform:translateX(-50%)
  }

}

@keyframes spin {
  to {
    rotate:360deg
  }

}

@media(max-width:760px) {
  .nav {
    height:70px;
    padding:0 6vw
  }

  .nav nav,.book {
    display:none
  }

  .hero {
    grid-template-columns:1fr
  }

  .hero-content {
    padding:90px 6vw 65px
  }

  .hero-photo {
    min-height:460px
  }

  .section {
    padding:85px 6vw
  }

  .intro>div,.visit-grid {
    grid-template-columns:1fr
  }

  .intro>div>p {
    margin-top:25px
  }

  .service-list {
    margin-top:38px
  }

  .service-list article {
    grid-template-columns:30px 1fr 60px;
    gap:10px
  }

  .service-list article>b {
    display:none
  }

  .service-list h3 {
    font-size:17px
  }

  .gallery-grid {
    margin-top:38px;
    gap:6px
  }

  .shot {
    height:270px
  }

  .visit-grid {
    gap:40px;
    margin-top:38px
  }

  .map {
    height:340px
  }

  .booking {
    padding:90px 6vw
  }

  footer {
    padding:25px 6vw
  }

  footer p {
    display:none
  }

}


/* Individually composed work gallery */
.hero-portrait {
  background-image: url("images/fade.png");
  background-size: cover;
  background-position: center;
}

.shot {
  cursor: zoom-in;
  background-size: cover;
  background-position: center;
}

.shot.one {
  background-image: url("images/fade.png");
}

.shot.two {
  background-image: url("images/taper.png");
}

.shot.three {
  background-image: url("images/curly-crop.png");
}

.shot.four {
  background-image: url("images/beard-detail.png");
}

.shot:focus-visible {
  outline: 3px solid var(--lime);
  outline-offset: 4px;
}


/* Smooth, simple call-to-action motion */
.hero .button {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  transition: color .32s ease, box-shadow .32s ease;
}

.hero .button::before {
  content: "";
  position: absolute;
  z-index: -1;
  inset: 0;
  background: var(--red);
  transform: translateX(-102%);
  transition: transform .38s cubic-bezier(.2,.8,.2,1);
}

.hero .button:hover {
  color: var(--cream);
  box-shadow: 0 12px 24px #17201d40;
}

.hero .button:hover::before {
  transform: translateX(0);
}


/* Photo lightbox */
.lightbox {
  position: fixed;
  z-index: 30;
  inset: 0;
  display: grid;
  place-items: center;
  padding: 35px;
  background: #101612e8;
  opacity: 0;
  pointer-events: none;
  transition: opacity .25s ease;
}

.lightbox.open {
  opacity: 1;
  pointer-events: auto;
}

.lightbox img {
  max-width: min(880px, 92vw);
  max-height: 88vh;
  object-fit: contain;
  box-shadow: 0 24px 70px #0009;
}

.lightbox-close {
  position: fixed;
  top: 18px;
  right: 24px;
  border: 0;
  background: none;
  color: var(--cream);
  cursor: pointer;
  font: 36px/1 "DM Sans", sans-serif;
}


/* Keep the marquee filled during every loop. */
.ticker div {
  will-change: transform;
  animation-duration: 34s;
}


/* Visible gallery thumbnails */
.shot {
  background: #25322d;
}

.gallery-image {
  position: absolute;
  inset: 0;
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  filter: brightness(.94) saturate(.92);
  transition: transform .55s cubic-bezier(.2,.8,.2,1), filter .4s ease;
}

.shot:hover .gallery-image {
  transform: scale(1.05);
  filter: brightness(1) saturate(1);
}

.shot:after {
  background: linear-gradient(transparent 48%, #101712b8);
  pointer-events: none;
}

.shot figcaption {
  pointer-events: none;
}

