* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html {
  scroll-behavior: smooth;
}

.clearfix::after {
  content: "";
  clear: both;
  display: table;
}

body {
  font-family: "Manrope", sans-serif;
  font-optical-sizing: auto;
  font-weight: 400;
    font-size:18px;
  font-style: normal;
  color: #2b2b2d;
  background: #fff;
border-top:4px solid #2b2b2d;
}

h1, h2, h3, h4 {
  font-weight: 400;
}

.highlight{color:#2a84ff;}

h3, h2{text-transform:uppercase;
    letter-spacing: 0.05em;
    font-size:17px;}

h3{text-align: center;}
p{margin-bottom: 20px;}

a {
  text-decoration: none;
}

.btn,
button {
    border: none;
    background: url('images/icons/right-arrow.svg') right 16px center no-repeat #2b2b2d;
    background-size: 25px 12px;
    color: #fff;
    padding: 12px 52px 12px 22px;
    text-align: center;
    text-decoration: none;
    display: inline-block;
    font-size: 14px;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    margin: 4px 2px;
    cursor: pointer;
    border-radius: 4px;
}

a.btn{color:#fff;}

.btn:hover,
button:hover{background-color: #555;}



.blue-pattern{background:url('images/backgrounds/blue-pattern.jpg') #2a84ff right;}
.white{background: #fff;}
.grey{background: #e6e7e8;}
.blue{background: #2a84ff;}
.black{background: #2b2b2d;}

section{width:100%;}
.wrapper{width:80%;margin:0 auto;padding:50px 0;}

/* ----------------------------------------*/

a.contact {
    margin-left: 0;}
.logo {width:200px;}

/* ----------------------------------------*/

.hero{display: flex; flex-wrap: wrap;}
.hero h1{
    align-self: center; 
    width:40%; 
    margin-right: 10%; 
    font-size:40px;}
.hero h1:only-child{width:100%;}
.hero h1 span{font-size:18px; color:#fff;}
.hero-image{width:50%;}
.hero img{
    z-index: 1000; 
    width:100%;
    height: auto; 
    margin-bottom: -100px;}

/* ----------------------------------------*/

.hero-sub{display:block;margin-top:18px;line-height:1.5;}

/* ----------------------------------------*/

/* How we work: vertical flow with a central spine.
   mode (left) | spine (centre) | example engagement (right) */

.section-heading{font-size:24px;}
.section-heading-accent{color:#2a84ff;}

.flow-intro{
    max-width:820px;
    margin:24px auto 54px;
    text-align:center;
    color:#555;
    font-size:20px;
    line-height:1.6;}

.flow-stage{
    list-style:none;
    display:grid;
    grid-template-columns:1fr 96px 1fr;
    grid-template-areas:"mode spine example";
    padding-bottom:64px;}

.flow-stage:last-child{padding-bottom:0;}

.flow-mode{
    grid-area:mode;
    padding-right:44px;
    text-align:right;}

.flow-spine{grid-area:spine;position:relative;}
.flow-example{grid-area:example;padding-left:44px;}

.flow-node{
    position:relative;
    z-index:1;
    width:44px;
    height:44px;
    border-radius:50%;
    background:#2a84ff;
    color:#fff;
    display:flex;
    align-items:center;
    justify-content:center;
    margin:0 auto;
    font-size:15px;
    letter-spacing:0.05em;}

/* the line runs from each node down to the next one, so it never dangles */
.flow-spine::before{
    content:"";
    position:absolute;
    left:50%;
    margin-left:-1px;
    top:44px;
    bottom:-64px;
    width:2px;
    background:#d0d2d3;}

.flow-stage:last-child .flow-spine::before{display:none;}

.flow-name{font-size:24px;color:#2a84ff;margin-bottom:12px;}

.flow-value{
    font-size:22px;
    line-height:1.35;
    margin-bottom:16px;}

.flow-desc{margin-bottom:0;color:#555;}

.flow-example-label{
    text-transform:uppercase;
    letter-spacing:0.05em;
    font-size:13px;
    color:#666;
    margin-bottom:14px;}

/* ----------------------------------------*/

.intro{margin-top: 50px;}
.intro p{text-align: left; 
    font-size: 2.2rem;
    line-height: 3.3rem;}
.intro a{color: inherit;border-bottom:2px solid #2b2b2d;}
.intro {text-align: center;}
.intro button{margin-top: 30px;}

/* scoped to .intro so it outweighs the .intro p font-size, here and in
   the mobile override */
.intro .intro-support{
    font-size:18px;
    line-height:1.6;
    color:#555;
    margin-top:30px;
    margin-bottom:0;}

/* the 2px underline is too heavy at this size */
.intro .intro-support a{border-bottom-width:1px;}

/* ----------------------------------------*/

.credential-icons{ 
    display: flex;
    text-align: center;
    justify-content:center;
    flex-wrap: wrap;}

.credential-icons li{
    color: #fff; 
    display: flex;  
    flex-direction: column; 
    list-style: none;
    width:18%; 
    margin: 0 3%;}

.credential-icons li img{margin-bottom: 20px;}


/* ----------------------------------------*/

.clients{ 
    margin-top:30px;
    display: flex;
    text-align: center;justify-content: center;align-items: center;}

.clients li{list-style: none;max-width:250px; width:25%;}
.clients li img{width:80%; margin: auto;}

/* ----------------------------------------*/

.wrapper.wrapper-split {
    background: linear-gradient(#e6e7e8, #e6e7e8) no-repeat center/2px 100%;}

.bio {width:40%;float:left;text-align: center;}
.bio-right {float:right;}

.bio img
    { clip-path: circle();
    width:80%;}

.bio p, .credential li{text-align: left;}

.bio h2 {color:#2a84ff;margin: 20px 0; }
.credential li{list-style: none;margin-bottom:10px;}


/* ----------------------------------------*/

.project{
    background: #fff;
    width:100%;
    padding:30px;
    box-sizing:border-box;
    margin-top: 30px;}

.project h2{
    font-size:20px;
    color:#2a84ff;
    text-align:left;
    margin-bottom: 20px;}

.project img{float:left;width:50%;}

.project .project-text{
    float:right;
    width:50%;
    padding-left:30px;
    box-sizing: border-box;}

.project-detail{
    border-top:1px solid #d0d2d3; 
    border-bottom:1px solid #d0d2d3;
    padding:10px 0;margin:30px 0;}

.project-source {
    color: #666;
    font-size: 14px;
    line-height: 1.6;
}

.project-source a {
    color: #2a84ff;
    border-bottom: 1px solid #2a84ff;
}

.project-preview-grid {
    margin: 26px 0 28px;
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 22px;
}

.project-preview {
    background: #fff;
    box-sizing: border-box;
    border-radius: 12px 12px 0 0;
    overflow: hidden;
}

.project-preview-link {
    display: block;
    color: inherit;
    text-decoration: none;
}

.project-preview-image {
    width: 100%;
    aspect-ratio: 16 / 9;
    overflow: hidden;
    display: block;
}

.project-preview-image img {
    width: 100%;
    height: 100%;
    display: block;
    object-fit: cover;
}

.project-preview-body {
    padding: 20px;
}

.project-preview-body h2 {
    margin: 0 0 10px;
    color: #2a84ff;
    font-size: 24px;
}

.project-preview-body p {
    margin: 0;
}

.project-preview-detail {
    margin: 0 20px;
    border-top: 1px solid #d0d2d3;
    padding: 14px 0;
    font-size: 13px;
    color: #666;
}

.project-preview-detail .highlight {
    color: #2a84ff;
}

.project-section-spacer {
    height: 34px;
}

/* ----------------------------------------*/

.pub-intro{max-width:780px;margin:0 auto 10px;text-align:center;color:#555;}

.pub-list{margin:26px 0 10px;padding:0;}

.pub{
    list-style:none;
    border-bottom:1px solid #d0d2d3;}

.pub:first-child{border-top:1px solid #d0d2d3;}

/* the whole two-line row is the toggle, so the entry stays compact and
   there is no separate control taking a third line */
.pub-details summary{
    cursor:pointer;
    list-style:none;
    display:block;
    padding:13px 30px 13px 0;
    position:relative;}

.pub-details summary::-webkit-details-marker{display:none;}

.pub-details summary::after{
    content:"+";
    position:absolute;
    right:4px;
    top:13px;
    color:#2a84ff;
    font-size:16px;}

.pub-details[open] summary::after{content:"\2212";}

.pub-details summary:hover .pub-title{color:#2a84ff;}

/* the global h2 rule uppercases everything; paper titles must keep their
   own casing because chemical names depend on it */
.pub-title{
    display:block;
    font-size:17px;
    line-height:1.35;
    text-transform:none;
    letter-spacing:0;
    margin-bottom:3px;}

/* venue, year and authors share one line to keep the row to two lines */
.pub-meta{display:block;font-size:13px;line-height:1.5;color:#666;}

.pub-venue{
    color:#2a84ff;
    text-transform:uppercase;
    letter-spacing:0.05em;}

.pub-year{margin-left:8px;}

.pub-authors{margin-left:8px;}
.pub-authors::before{content:"\00b7  ";}

.pub-us{color:#2b2b2d;font-weight:500;}

.pub-body{
    padding:0 30px 18px 0;
    color:#555;
    max-width:820px;}

.pub-summary{margin-bottom:10px;color:#2b2b2d;}
.pub-body p{margin-bottom:12px;}

.pub-link{
    color:#2a84ff;
    font-size:14px;
    border-bottom:1px solid #2a84ff;}


.project-view-btn {
    margin-top: 16px;
}

.selected-project-intro {
    max-width: 780px;
}

/* Cal triggers open a modal in place rather than navigating, so the forward
   arrow would be misleading. Dropping it also frees the 52px right padding
   that only existed to make room for it. */
.btn[data-cal-link]{
    background-image:none;
    padding-right:22px;}

/* wraps to stacked buttons on narrow screens; .btn carries margin:4px 2px,
   which is reset here so the gap is the only spacing */
.btn-row{
    display:flex;
    justify-content:center;
    align-items:center;
    flex-wrap:wrap;
    gap:14px;
    margin-top:40px;}

.btn-row .btn{margin:0;}

.project-browse-btn,
.btn-centered {
    display: table;
    margin-left: auto;
    margin-right: auto;
    margin-top: 40px;
}


.btn-light {
    background-color: transparent;
    background-image: none;
    border: 1px solid #fff;
    padding: 12px 22px;
}

.btn-light:hover {
    background-color:#fff;
    color:#2a84ff;
}

header {
    margin-bottom: 70px;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 12px;
}

.brand {
    margin-right: auto;
}

/* ----------------------------------------*/

.quote{width:80%;margin: auto;font-size:30px;}

.quote span{
    margin-top:20px;
    color:#fff; 
    text-transform: uppercase; 
    letter-spacing:0.1em; 
    display: block;
    font-size:16px;}

.blue-pattern .quote {
    color: #2b2b2d;
}

.blue-pattern .quote span {
    color: #fff;
}

/* ----------------------------------------*/

.testimonial-list {
    width: 100%;
}

.testimonial {
    padding: 50px 0;
    overflow: hidden;
}

.testimonial:nth-child(2n) {
    background: #e6e7e8;
}

.testimonial-hidden {
    display: none !important;
}

.wrapper-testimonial {
    width: 80%;
    margin: 0 auto;
    position: relative;
    padding-right: 100px;
}

.testimonial:nth-child(2n) .wrapper-testimonial {
    padding-left: 100px;
    padding-right: 0;
}

.testimonial-type {
    color: #2a84ff;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    font-size: 14px;
    margin-bottom: 20px;
}

.testimonial-content {
    display: flex;
    align-items: flex-start;
    gap: 30px;
}

.testimonial:nth-child(2n) .testimonial-content {
    flex-direction: row;
}

.wrapper-testimonial::before {
    content: "\201D";
    font-family: Georgia, serif;
    font-size: 160px;
    font-weight: bold;
    line-height: 1;
    color: #e6e7e8;
    position: absolute;
    right: -10px;
    top: 20px;
}

.testimonial:nth-child(2n) .wrapper-testimonial::before {
    content: "\201C";
    color: #ffffff;
    right: auto;
    left: -10px;
}

.testimonial-photo {
    width: 120px;
    height: 120px;
    border-radius: 4px 4px 20px 20px;
    object-fit: cover;
    flex-shrink: 0;
}

.testimonial-text {
    font-size: 1.1rem;
    line-height: 1.8;
    margin-bottom: 20px;
}

.author-name {
    color: #2a84ff;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    font-size: 14px;
}

.author-role {
    font-weight: 500;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    font-size: 13px;
    margin-top: 4px;
}

.testimonial-more {
    width: 100%;
    padding: 50px 0;
    text-align: center;
}

/* no background-image override here: this is a normal forward action, so it
   keeps the arrow that .btn/button provides */
#showMoreTestimonials {
    display: block;
    width: fit-content;
    margin: 0 auto;
}

/* ----------------------------------------*/

/* inline-flex with a shared centre line keeps the marker, address and icon
   optically aligned regardless of font metrics */
.contact-line{
    display:flex;
    align-items:center;
    flex-wrap:wrap;
    gap:9px;
    line-height:1;
    margin-top:20px;}

.contact-line .highlight{line-height:1;}

.contact-email{
    line-height:1;
    border-bottom:1px solid transparent;
    transition:border-color 0.2s, color 0.2s;}

.contact-email:hover{color:#2a84ff;border-bottom-color:#2a84ff;}

/* not .btn: that carries the arrow background image and heavy padding */
.copy-email{
    width:28px;
    height:28px;
    flex:0 0 28px;
    display:inline-flex;
    align-items:center;
    justify-content:center;
    background:none;
    border:1px solid #5c5c5f;
    border-radius:5px;
    background:rgba(255,255,255,0.04);
    color:#e6e7e8;
    padding:0;
    margin:0 0 0 2px;
    cursor:pointer;
    transition:background-color 0.18s, border-color 0.18s, color 0.18s;}

/* the background override matters: without it the idle tint shows through */
.copy-email:hover{background:#2a84ff;}

.copy-email:hover{background:#2a84ff;border-color:#2a84ff;color:#fff;}
.copy-email:focus-visible{outline:2px solid #2a84ff;outline-offset:2px;}

.copy-email.copied,
.copy-email.copy-failed{border-color:#2a84ff;color:#2a84ff;background:none;}

.copy-icon{
    width:14px;
    height:14px;
    display:block;
    fill:none;
    stroke:currentColor;
    stroke-width:2;
    stroke-linecap:round;
    stroke-linejoin:round;}

.copy-icon-done{display:none;}
.copy-email.copied .copy-icon-default{display:none;}
.copy-email.copied .copy-icon-done{display:block;}

.copy-status{font-size:13px;color:#2a84ff;line-height:1;}

/* margin-left:0 overrides the .btn shorthand margin so it lines up with the
   text above it rather than sitting 2px proud */
.contact-book{margin:22px 0 0 0;}


.footer {padding-bottom:80px;}
.footer h3{text-align: left;color:#2a84ff;margin-bottom: 20px;}
.footer p{color:#e6e7e8;margin-bottom: 0;}
.footer a{color:#e6e7e8;text-decoration: none;}
.footer a:hover{color: #2a84ff;}
.copyright{font-size:13px;margin-top:18px;}


#backToTop {
    position: fixed;
    background-image: none;
    bottom: 20px;
    right: 30px;
    z-index: 999;
    background-color: #333;
    color: #2a84ff;
    border: none;
    width:50px;
    height:50px;
    padding: 0;
    text-align: center;
    font-size: 1.5rem;
    cursor: pointer;
    opacity: 0;
    pointer-events: none;
    border-radius: 50%;
    transition: opacity 0.5s ease;}

#backToTop.show {
  opacity: 0.8;
  pointer-events: auto;}

#backToTop:hover {
  background-color: #555;}

.main-nav {
    display: flex;
    flex-wrap: wrap;
    gap: 18px;
}

.main-nav a {
    color: #2b2b2d;
    text-transform: uppercase;
    letter-spacing: 0.05rem;
    font-size: 14px;
    border-bottom: 2px solid transparent;
}

.main-nav a:hover,
.main-nav a.active{
    border-bottom-color: #2b2b2d;
}

.blue-pattern .main-nav a{
    color: #fff;
    border-bottom-color: transparent;
}

.blue-pattern .main-nav a:hover,
.blue-pattern .main-nav a.active{
    border-bottom-color: #fff;
}
