/* ------------------------------------------------------------------
   Working Proof — clean port of the Carrd draft.
   Design tokens live in :root. Layout centres on the .split-card
   (two columns with a 1px rule between them, stacks under 736px).
------------------------------------------------------------------ */

/* ---- Reset ---- */
*, *::before, *::after { box-sizing: border-box; }
html, body, h1, h2, h3, h4, p, ul, li, table, td, th, hr, figure, blockquote {
  margin: 0; padding: 0; border: 0; font: inherit; vertical-align: baseline;
}
ul { list-style: none; }
table { border-collapse: collapse; border-spacing: 0; }
a { color: inherit; text-decoration: underline; transition: color .25s ease; }

/* ---- Design tokens ---- */
:root {
  /* B&W */
  /* 
  --ink:      #000000;
  --paper:   #ffffff;
  --rule:    #E3E3E3;
  --accent:  #f0eded;    
  */

  /* Muted punk */
  /* --ink:      #1a1a1a;
  --paper:   #ffed48;
  --rule:    #ffe60000;
  --accent:  #ff00f255;    */

  /* Muted punk */
  --ink:      #1a1a1a;
  --paper:   #f0c440;
  --rule:    #ffe60000;
  --accent:  #ff00f255;


  /* Type */
  --font-body: 'Inter', system-ui, sans-serif;

  /* Layout */
  --site-width:        75rem;
  --pad-x:             6rem;
  --pad-y:             4rem;
  --stack:             1.5rem;    /* vertical rhythm inside a column */
  --column-gap:        9rem;      /* horizontal gap between headline / body */
  --section-gap:       6rem;      /* space either side of a section rule */
  --rule-gap:          3rem;      /* space above/below the rule itself */

  /* Background texture: opacity of the paper wash over .bg-media.
     1 = pure paper (no texture), 0 = media fully visible.
     The crossfader script rewrites --paper-tint per-image on each
     swap, so this initial value only applies until the first swap. */
  --paper-tint:        0.96;
  /* Duration of the background image crossfade AND the wash opacity
     transition — kept in sync so image and tint move together. */
  --bg-fade:           4s;
}

/* Base font size scales with viewport, matching Carrd. */
html { font-size: 16pt; }
@media (max-width: 1680px) { html { font-size: 12pt; } }
@media (max-width: 980px)  { html { font-size: 10pt; } }
@media (max-width: 736px)  { html { font-size: 12pt; } }

/* Paper colour lives on <html> as a fallback so the page still looks
   right if the media/tint layers fail to render. Body stays transparent
   so the fixed .bg-media and .bg-tint (negative z-index) show through. */
html { background: var(--paper); }

body {
  background: transparent;
  color: var(--ink);
  font-family: var(--font-body);
  line-height: 1;
  min-width: 320px;
  overflow-x: hidden;
  word-wrap: break-word;
  -webkit-text-size-adjust: none;
  position: relative; /**/
}

strong { font-weight: bolder; }
em { font-style: italic; }

.accent {
    color: var(--accent);
}

.accentbg {
    background-color: var(--accent);
}

.highlight {
    background-color: var(--accent);
}

/* ---- Background texture ------------------------------------------
   Two fixed, full-viewport layers sit at negative z-index so they
   render behind everything in the normal flow:
     .bg-media  — an <img> or <video>, cover-fit to the viewport
     .bg-tint   — a paper-coloured wash at --paper-tint opacity
   Both are position:fixed so they don't scroll with the page. Swap
   fixed → absolute if you want them to scroll.
------------------------------------------------------------------ */
.bg-media,
.bg-tint {
  position: absolute; /* fixed */
  inset: 0;
  pointer-events: none;
}
.bg-media {
  z-index: -2;
  overflow: hidden;
}
.bg-media > img,
.bg-media > video {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
/* Crossfade buffers: two <img class="bg-frame"> siblings stacked on top
   of each other. Both start at opacity 0; whichever has .is-front is
   visible. The script toggles .is-front to trigger the transition. */
.bg-media > .bg-frame {
  position: absolute;
  inset: 0;
  opacity: 0;
  transition: opacity var(--bg-fade) ease;
}
.bg-media > .bg-frame.is-front { opacity: 1; }
.bg-tint {
  z-index: -1;
  background: var(--paper);
  opacity: var(--paper-tint);
  transition: opacity var(--bg-fade) ease;
}

/* ---- Site frame ---- */
.site {
  display: flex;
  justify-content: center;
  min-height: 100vh;
}
.site-inner {
  width: var(--site-width);
  max-width: 100%;
  padding: var(--pad-y) var(--pad-x);
  position: relative;
}

/* Consistent vertical rhythm between top-level blocks in .site-inner. */
.site-inner > * + * { margin-top: var(--stack); }

/* ---- Section rule -------------------------------------------------
   Full-viewport 1px rule. `left: 50%; margin-left: -50vw;` breaks it
   out of the padded container to the edge of the window.
--------------------------------------------------------------------*/
.section-rule {
  display: block;
  height: 1px;
  width: 100vw;
  background: var(--rule);
  position: relative;
  left: 50%;
  margin-left: -50vw;
  margin-top: var(--rule-gap) !important;
  margin-bottom: var(--rule-gap) !important;
}

/* ---- Brand mark ---- */
.brand {
  font-weight: 700;
  font-size: 1em;
  line-height: 1.25;
  letter-spacing: 0.2rem;
  text-transform: uppercase;
}


/* ---- Split card ---------------------------------------------------
   The reusable block: headline on the left, body on the right,
   1px vertical rule between them. Stacks on narrow viewports.
--------------------------------------------------------------------*/
.split-card {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  width: 100%;
  margin-top: var(--section-gap) !important;
  margin-bottom: var(--section-gap) !important;
}
.split-card > .side {
  flex: 1 1 0;
  min-width: 0;
  padding-left: var(--column-gap);
  position: relative;
}
.split-card > .side:first-child {
  padding-left: 0;
}
/* Vertical rule between the two sides. */
.split-card > .side + .side::before {
  content: '';
  position: absolute;
  top: 0;
  bottom: 0;
  left: calc(var(--column-gap) / 2);
  width: 1px;
  background: var(--rule);
}

/* Stacking of blocks inside a .side */
.split-card > .side > * + * { margin-top: var(--stack); }

/* ---- Typography scales ---- */
.h-big {
  font-size: 5.125em;
  font-weight: 800;
  line-height: 1.0;
  letter-spacing: -0.2rem;
}
.h-big > * { display: inline-block; line-height: 1.2; }
/* Selection-style highlight on part of the headline.
   display:inline + box-decoration-break lets the black block re-render
   cleanly on each line if the phrase wraps. */
.h-big .mark {
  display: inline;
  background: var(--ink);
  color: var(--paper);
  padding: 0.1em 0.1em;
  box-decoration-break: clone;
  -webkit-box-decoration-break: clone;
}

.h-medium {
  font-size: 4em;
  font-weight: 800;
  line-height: 1;
  letter-spacing: -0.2rem;
}

.subhead {
  font-size: 1.4em;
  font-weight: 600;
  line-height: 1.25;
  letter-spacing: -0.075rem;
}

.lede {
  font-size: 0.875em;
  font-weight: 400;
  line-height: 1.375;
  letter-spacing: 0.025rem;
}
.lede > span { display: block; }
.lede > span + span { margin-top: 1rem; }

/* ---- Button ---- */
.cta { margin-top: 3rem !important; }
.btn {
  display: inline-flex;
  align-items: center;
  height: 3.125rem;
  padding: 0 1.5625rem;
  background: var(--ink);
  color: var(--paper);
  font-size: 1em;
  font-weight: 400;
  letter-spacing: 0.025rem;
  text-decoration: none;
  white-space: nowrap;
  transition: transform .25s ease, background-color .25s ease;
}
.btn:hover { transform: scale(1.025); }
.btn-icon {
  width: 1.5em;
  height: 1.5em;
  fill: var(--paper);
  margin-right: 1rem;
  margin-left: -0.125em;
}

/* ---- Who-are-you-for table ---- */
.who-table {
  width: 30rem;
  max-width: 100%;
}
.who-table th, .who-table td {
  padding: 0.5rem 0.6875rem;
  vertical-align: top;
  text-align: left;
}
.who-table th:first-child, .who-table td:first-child { padding-left: 0; }
.who-table th:last-child,  .who-table td:last-child  { padding-right: 0; }
.who-table th {
  /* font-weight: 700;
  font-size: 1em;
  line-height: 1.375;
  letter-spacing: 0.025rem;
  white-space: nowrap; */

  font-size: 0.75em;
  font-weight: 700;
  letter-spacing: 0.15rem;
  text-transform: uppercase;
  line-height: 1;
  white-space: nowrap;
  
}
.who-table td {
  font-weight: 400;
  font-size: 0.875em;
  line-height: 1.125;
  letter-spacing: -0.025rem;
}
.who-table tr + tr th, .who-table tr + tr td {
  border-top: 1px solid var(--rule);
}

/* ---- Sprint cards --------------------------------------------------
   Two engagement offers, side-by-side inside a .side.body. Each is
   a plain flex column with a top rule and generous internal rhythm.
   Stacks at narrow widths.
--------------------------------------------------------------------*/
.sprint-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 2rem;
  /* margin-top: 3rem !important; */
}
.sprint {
  display: flex;
  flex-direction: column;
  gap: 1rem;
  padding-top: 1.25rem;
  /* border-top: 1px solid var(--ink); */
}
.sprint-question {
  font-size: 0.75em;
  font-weight: 700;
  letter-spacing: 0.15rem;
  text-transform: uppercase;
  line-height: 1;
}
.sprint-when {
  font-size: 0.75em;
  font-weight: 700;
  letter-spacing: 0.15rem;
  text-transform: uppercase;
  line-height: 1;
}
.sprint-name {
  font-size: 1.5em;
  font-weight: 700;
  line-height: 1.15;
  letter-spacing: -0.05rem;
}
.sprint-detail {
  font-size: 0.875em;
  font-weight: 400;
  line-height: 1.375;
  letter-spacing: 0.025rem;
  padding-left: 1.1em;
  list-style: square outside;
}
.sprint-detail li + li { margin-top: 0.5em; }
/* Price sits at the bottom of every card regardless of body length. */
.sprint-price {
  margin-top: auto;
  padding-top: 1rem;
  font-size: 1.375em;
  font-weight: 700;
  letter-spacing: -0.025rem;
  line-height: 1;
}

/* ---- Notes ---------------------------------------------------------
   Two short footnote-style lists ("includes" / "won't do"). Compact,
   sits below the sprint grid with a top rule to separate them.
--------------------------------------------------------------------*/
.notes {
  display: grid;
  grid-template-columns: 1fr;
  gap: 2rem;
  margin-top: 3rem !important;
  padding-top: 2rem;
  /* border-top: 1px solid var(--rule); */
}
.note-title {
  font-size: 0.75em;
  font-weight: 700;
  letter-spacing: 0.15rem;
  text-transform: uppercase;
  line-height: 1;
  margin-bottom: 1rem;
}
.note ul {
  font-size: 0.8125em;
  font-weight: 400;
  line-height: 1.375;
  /* letter-spacing: 0.02rem; */
  padding-left: 1.1em;
  letter-spacing: -0.025rem;  
  list-style: square outside;
}
.note li + li { margin-top: 0.4em; }

/* ---- Case-study cards ----------------------------------------------
   Vertical stack of previous engagements. Same top-rule / small-caps
   language as the sprint cards, plus a small logo mark on the header
   and an italic testimonial with a cite line at the bottom.
--------------------------------------------------------------------*/
.case-list {
  display: flex;
  flex-direction: column;
  gap: 3rem;
  margin-top: 3rem !important;
}
.case {
  display: flex;
  flex-direction: column;
  gap: 1.25rem;
  padding-top: 1.25rem;
  border-top: 1px solid var(--rule);
}
.case-head {
  display: flex;
  align-items: center;
  gap: 1rem;
}
/* Client mark. Holds a monochrome-ink <img> sized to fit the 3rem box
   with letter-form logos sitting comfortably alongside the client name.
   Falls back to a centred letter placeholder if the inner content isn't
   an img (e.g. a single character in the source). */
.case-mark {
  flex-shrink: 0;
  width: 3rem;
  height: 3rem;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.25em;
  font-weight: 700;
  line-height: 1;
}
.case-mark img {
  display: block;
  max-width: 100%;
  max-height: 100%;
  width: auto;
  height: auto;
  object-fit: contain;
}
.case-ident { display: flex; flex-direction: column; gap: 0.35rem; }
.case-client {
  font-size: 1.25em;
  font-weight: 700;
  line-height: 1.15;
  letter-spacing: -0.025rem;
}
.case-tag {
  font-size: 0.75em;
  font-weight: 700;
  letter-spacing: 0.15rem;
  text-transform: uppercase;
  line-height: 1;
}
.case-desc {
  /* font-size: 0.875em;
  font-weight: 400;
  line-height: 1.375;
  letter-spacing: 0.025rem; */

  font-weight: 400;
  font-size: 0.875em;
  line-height: 1.375;
  letter-spacing: -0.025rem;
}

.case-quote {
  border-left: 2px solid var(--ink);
  padding-left: 1rem;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}
.case-quote p {
  font-size: 0.9em;
  font-style: italic;
  font-weight: 400;
  line-height: 1.375;
  letter-spacing: -0.01rem;
}
.case-quote cite {
  font-size: 0.6em;
  font-style: normal;
  font-weight: 700;
  letter-spacing: 0.1rem;
  text-transform: uppercase;
  line-height: 1;
}

/* ---- Quote carousel ------------------------------------------------
   Wraps a stack of engagement cases (see .case-* rules above). One
   case visible at a time; prev/next cycle through and the counter
   reads "01 / N". Items are absolute-positioned within .quote-track
   so switching between cases of different content lengths doesn't
   reflow anything below. First case has .is-active baked into the
   HTML so it shows even before the script runs.
--------------------------------------------------------------------*/
.quote-carousel {
  margin-top: 5rem !important;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}
.quote-track {
  position: relative;
  /* Sized to accommodate the tallest case (headline row + description
     + quote + cite). Bump if a longer case starts getting clipped. */
  min-height: 18rem;
}
.quote-track > * {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  opacity: 0;
  pointer-events: none;
  transition: opacity .25s ease;
}
.quote-track > .is-active {
  opacity: 1;
  pointer-events: auto;
}

/* Nav row: prev / next buttons on the left, "01 / 03" counter right. */
.quote-nav {
  display: flex;
  align-items: center;
  gap: 0.75rem;
}
.quote-nav button {
  appearance: none;
  background: transparent;
  border: 0px solid var(--ink);
  color: var(--ink);
  width: 2rem;
  height: 2rem;
  font-size: 1.5em;
  line-height: 1;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background .15s ease, color .15s ease;
}
.quote-nav button:hover {
  background: var(--ink);
  color: var(--paper);
}
.quote-nav button:focus-visible {
  outline: 2px solid var(--ink);
  outline-offset: 2px;
}
.quote-count {
  margin: auto;   /* pushes counter to the far right of the nav row */
  font-size: 0.75em;
  font-weight: 700;
  letter-spacing: 0.15rem;
  text-transform: uppercase;
  font-variant-numeric: tabular-nums;
  line-height: 1;
}


@media (prefers-reduced-motion: reduce) {
  .quote-item { transition: none; }
}

/* ---- Socials ---- */
.socials {
  display: flex;
  flex-wrap: wrap;
  gap: 1.5rem;
  font-size: 1.75em;   /* icon size is 1em × 1em */
}
.socials a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1em;
  height: 1em;
  border-radius: 0.5rem;
  transition: transform .25s ease;
}
.socials a:hover { transform: scale(1.2); }
.socials svg {
  width: 100%;
  height: 100%;
  fill: var(--ink);
}

footer {
    font-size: 0.5em;
    color: var(--ink);
}

/* ---- Responsive: stack columns under 736px ---- */
@media (max-width: 736px) {
  :root {
    --pad-x:        2rem;
    --pad-y:        3rem;
    --column-gap:   4rem;
    --section-gap:  4rem;
    --rule-gap:     2rem;
  }
  .h-big    { font-size: 3.5em; letter-spacing: -0.175rem; }
  .h-medium { font-size: 3.5em; letter-spacing: -0.175rem; }

  .split-card { flex-direction: column; }
  .split-card > .side {
    width: 100%;
    padding-left: 0;
    padding-top: 0;
  }
  .split-card > .side + .side {
    padding-top: var(--column-gap);
    margin-top: var(--column-gap);
  }
  /* Between-column vertical rule → horizontal rule when stacked. */
  .split-card > .side + .side::before {
    top: 0;
    bottom: auto;
    left: 0;
    right: 0;
    width: auto;
    height: 1px;
    margin-top: calc(var(--column-gap) * -1);
  }

  /* Sprint cards & notes drop to single column on narrow viewports. */
  .sprint-grid, .notes { grid-template-columns: 1fr; }
}

@media (max-width: 360px) {
  :root {
    --pad-x:    1.5rem;
    --pad-y:    2.25rem;
    --stack:    1.125rem;
  }
}
