/* Page components for everything outside the three case studies.
   Mobile first; desktop layout from 52rem (832px) up. */

/* ---------- Shared ---------- */

.section {
  margin-top: var(--space-9);
}

.section-head {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  align-items: flex-end;
  gap: var(--space-4) var(--space-7);
  margin-bottom: var(--space-7);
}

.section-head h2 {
  font-size: clamp(2.6rem, 1.6rem + 4vw, 4.75rem);
}

.section-head p {
  max-width: 36ch;
  color: var(--muted);
}

.page-head {
  padding-block: var(--space-7) var(--space-8);
}

.page-head h1 {
  font-size: clamp(3.2rem, 1.8rem + 6vw, 7rem);
  margin-top: var(--space-4);
}

.page-head p {
  margin-top: var(--space-5);
  max-width: 44ch;
  font-size: var(--step-1);
  color: var(--muted);
}

.reveal {
  opacity: 1;
}

.motion .reveal {
  opacity: 0;
  transform: translateY(18px);
  transition: opacity var(--dur-enter) var(--ease-out), transform var(--dur-enter) var(--ease-out);
}

.motion .reveal.is-in {
  opacity: 1;
  transform: none;
}

/* ---------- Home hero ---------- */

.hero {
  display: grid;
  gap: var(--space-7);
  padding-block: var(--space-6) var(--space-8);
}

.hero__name {
  font-size: clamp(4.5rem, 1.5rem + 11vw, 10.5rem);
  line-height: 0.86;
  letter-spacing: -0.055em;
  text-transform: uppercase;
  margin: var(--space-5) 0 var(--space-6);
}

.hero__tag {
  font-family: var(--font-display);
  font-weight: 500;
  font-size: clamp(1.4rem, 1.1rem + 1vw, 1.9rem);
  line-height: 1.2;
  letter-spacing: -0.02em;
  color: var(--text);
}

.hero__tag strong {
  font-weight: 700;
  color: var(--ink);
}

.hero__intro {
  margin-top: var(--space-5);
  max-width: 40ch;
  font-size: 1.125rem;
  color: var(--muted);
}

.hero__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  margin-top: var(--space-6);
}

.portrait {
  position: relative;
  max-width: 30rem;
}

.portrait img {
  width: 100%;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  object-position: center 20%;
  border-radius: 1.25rem;
  box-shadow: var(--shadow-lg);
}

.portrait__tag {
  position: absolute;
  border-radius: var(--radius-sm);
  padding: 0.85rem 1.1rem;
  font-size: 0.8125rem;
  line-height: 1.4;
  box-shadow: var(--shadow-md);
}

.portrait__tag--edu {
  top: 1.5rem;
  right: -0.75rem;
  background: var(--navy);
  color: var(--on-navy);
}

.portrait__tag--edu strong {
  display: block;
  font-family: var(--font-display);
  font-size: 1.25rem;
  letter-spacing: -0.02em;
}

.portrait__tag--open {
  left: -0.75rem;
  bottom: 1.5rem;
  background: var(--face);
  color: var(--muted);
}

.portrait__tag--open strong {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.9375rem;
  color: var(--ink);
}

.portrait__tag--open strong::before {
  content: "";
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: #1F9254;
  box-shadow: 0 0 0 4px #DDF3E6;
}

@media (min-width: 52rem) {
  .hero {
    grid-template-columns: 1.35fr 1fr;
    gap: var(--space-8);
    align-items: center;
    padding-block: var(--space-6) var(--space-9);
  }

  .portrait__tag--edu { right: -1.5rem; top: 2.5rem; }
  .portrait__tag--open { left: -2.5rem; bottom: 2.25rem; }
}

/* ---------- Navy statement ---------- */

.statement {
  position: relative;
  overflow: hidden;
  border-radius: var(--radius);
  background: var(--navy);
  color: var(--on-navy);
  padding: var(--space-8) var(--space-6);
}

.statement::after {
  content: "";
  position: absolute;
  right: -10rem;
  top: -10rem;
  width: 32rem;
  height: 32rem;
  border-radius: 50%;
  background: radial-gradient(closest-side, rgba(64, 110, 220, 0.45), transparent);
  pointer-events: none;
}

.statement > * {
  position: relative;
  z-index: 1;
}

.statement__line {
  font-family: var(--font-display);
  font-weight: 600;
  font-size: clamp(2rem, 1.2rem + 3vw, 3.6rem);
  line-height: 1.1;
  letter-spacing: -0.035em;
  max-width: 20ch;
}

.statement__line span {
  color: var(--on-navy-accent);
}

.pillars {
  display: grid;
  gap: var(--space-6);
  margin-top: var(--space-8);
}

.pillars h3 {
  font-family: var(--font-display);
  font-size: 1.25rem;
  font-weight: 700;
  margin-bottom: var(--space-1);
}

.pillars p {
  color: var(--on-navy-muted);
  font-size: 0.97rem;
}

@media (min-width: 52rem) {
  .statement { padding: 6.5rem 6rem; }
  .pillars { grid-template-columns: repeat(3, 1fr); gap: var(--space-7); }
}

/* ---------- Case study panels (home and /marketing) ---------- */

.case {
  position: relative;
  display: grid;
  overflow: hidden;
  border-radius: var(--radius);
  margin-bottom: var(--space-5);
}

.case__text {
  position: relative;
  z-index: 2;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: var(--space-6);
  padding: var(--space-7) var(--space-6);
}

.case__logo {
  width: auto;
}

.case__kicker {
  margin-top: var(--space-6);
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  opacity: 0.75;
}

.case h3 {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: clamp(2rem, 1.4rem + 2vw, 2.9rem);
  line-height: 1.03;
  letter-spacing: -0.035em;
  margin: var(--space-4) 0;
}

.case p {
  max-width: 40ch;
  opacity: 0.88;
}

.facts-row {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-4) var(--space-7);
  margin-bottom: var(--space-6);
}

.facts-row b {
  display: block;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: clamp(2.2rem, 1.8rem + 1.5vw, 2.9rem);
  line-height: 1;
  letter-spacing: -0.04em;
}

.facts-row span {
  font-size: 0.8125rem;
  opacity: 0.8;
}

.case__go {
  display: inline-flex;
  align-items: center;
  gap: 0.9rem;
  font-weight: 600;
  font-size: 0.9375rem;
  text-decoration: none;
}

.case__go i {
  display: grid;
  place-items: center;
  width: 2.75rem;
  height: 2.75rem;
  border-radius: 50%;
  border: 1.5px solid currentColor;
  font-style: normal;
  transition: transform var(--dur-fade) var(--ease-out);
}

.case__go:hover i {
  transform: translateX(4px);
}

.case__go small {
  font-weight: 400;
  opacity: 0.75;
}

.case__visual {
  position: relative;
  min-height: 20rem;
}

.case--casa { background: #EFE3CE; color: #2A1F17; }
.case--casa .facts-row b { color: #A8241A; }
.case--casa .case__visual img {
  position: absolute;
  width: 46%;
  border-radius: 6px;
  box-shadow: 0 30px 50px -18px rgba(60, 30, 10, 0.4);
}
.case--casa .v1 { left: 8%; top: 10%; transform: rotate(-4deg); }
.case--casa .v2 { right: 8%; top: 24%; transform: rotate(3deg); }

.case--pb { background: #3B2430; color: #FBEFF4; }
.case--pb .facts-row b { color: #F4B6D2; }
.case--pb .case__visual {
  background: radial-gradient(circle at 55% 50%, #E58BB5 0, #B84E82 34%, transparent 62%);
}
.case--pb .case__visual img {
  position: absolute;
  width: min(72%, 25rem);
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%) rotate(-6deg);
  filter: drop-shadow(0 30px 40px rgba(0, 0, 0, 0.45));
}
.case__sticker {
  position: absolute;
  right: 1.5rem;
  bottom: 1.5rem;
  padding: 0.6rem 1.1rem;
  border-radius: 999px;
  background: #F4B6D2;
  color: #3B2430;
  font-weight: 700;
  font-size: 0.875rem;
  transform: rotate(-4deg);
}

.case--bamboo { background: #121A2C; color: #F6E9CF; }
.case--bamboo .facts-row b { color: #E7B85C; }
.case--bamboo .case__visual { overflow: hidden; }
.bokeh {
  position: absolute;
  border-radius: 50%;
  filter: blur(14px);
  opacity: 0.75;
}
.case__bigstat {
  position: absolute;
  inset: auto 1.5rem 50% 1.5rem;
  transform: translateY(50%);
  text-align: right;
  font-family: var(--font-display);
  font-weight: 600;
  font-size: clamp(1.4rem, 1rem + 1.4vw, 2.1rem);
  line-height: 1.15;
  letter-spacing: -0.02em;
}
.case__bigstat b {
  display: block;
  font-weight: 800;
  font-size: clamp(5rem, 3rem + 6vw, 9.5rem);
  line-height: 0.9;
  letter-spacing: -0.05em;
  color: #E7B85C;
}

.access-note {
  margin-top: var(--space-5);
  text-align: center;
  font-size: 0.9375rem;
  color: var(--muted);
}

.access-note a {
  color: var(--ink);
}

@media (min-width: 52rem) {
  .case { grid-template-columns: 1fr 1fr; min-height: 34rem; }
  .case__text { padding: 4rem; }
  .case__visual { min-height: 0; }
  .case--casa .case__visual img { width: 18rem; }
  .case--casa .v1 { left: auto; right: 14rem; top: 5rem; }
  .case--casa .v2 { right: 2.5rem; top: 10rem; }
  .case__sticker { right: 3.5rem; bottom: 3.5rem; }
  .case__bigstat { inset: auto 4rem 50% 2.5rem; }
}

/* ---------- Project cards (home and /projects) ---------- */

.projects {
  display: grid;
  gap: var(--space-5);
}

.project {
  position: relative;
  display: grid;
  overflow: hidden;
  border-radius: var(--radius);
  background: var(--face);
  text-decoration: none;
  color: var(--ink);
  box-shadow: 0 1px 2px rgba(14, 21, 34, 0.04);
  transition: transform var(--dur-fade) var(--ease-out), box-shadow var(--dur-fade);
}

.project:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-md);
}

.project__visual {
  position: relative;
  overflow: hidden;
  aspect-ratio: 16 / 10;
}

.project__body {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  padding: var(--space-6);
}

.project__meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2) var(--space-3);
  font-size: 0.8125rem;
  color: var(--muted);
}

.pill {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  padding: 0.2rem 0.65rem;
  border-radius: 999px;
  background: #E4ECFF;
  color: #1E3F96;
  font-weight: 600;
  font-size: 0.75rem;
}

.project h3 {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: clamp(1.9rem, 1.4rem + 1.6vw, 2.6rem);
  letter-spacing: -0.04em;
  line-height: 1;
  color: var(--navy);
}

.project p {
  color: var(--text);
  max-width: 44ch;
}

.project__go {
  margin-top: auto;
  padding-top: var(--space-3);
  font-weight: 600;
  font-size: 0.9375rem;
}

/* OHPI: phones on the app's blue */
.visual--ohpi {
  background: linear-gradient(160deg, #2563EB, #1D4ED8 60%, #1E3A8A);
}

.visual--ohpi .phone {
  position: absolute;
  width: 30%;
  border-radius: 1.4rem;
  border: 5px solid #0B0F19;
  box-shadow: 0 30px 50px -20px rgba(0, 0, 0, 0.55);
}

.visual--ohpi .phone:nth-child(1) { left: 6%; top: 18%; transform: rotate(-6deg); }
.visual--ohpi .phone:nth-child(2) { left: 35%; top: 9%; z-index: 2; }
.visual--ohpi .phone:nth-child(3) { right: 6%; top: 18%; transform: rotate(6deg); }

/* db5ive: the site in a browser window on the brand's grey */
.visual--db5ive {
  background: #E9ECF2;
}

.browser {
  position: absolute;
  left: 7%;
  right: 7%;
  top: 12%;
  border-radius: 0.75rem;
  overflow: hidden;
  background: #fff;
  box-shadow: 0 30px 60px -24px rgba(14, 21, 34, 0.45);
}

.browser__bar {
  display: flex;
  align-items: center;
  gap: 6px;
  height: 1.6rem;
  padding-inline: 0.7rem;
  background: #F1F2F5;
  border-bottom: 1px solid #E1E4EA;
}

.browser__bar i {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: #C9CED8;
}

.browser__bar span {
  margin-left: 0.6rem;
  font-size: 0.6875rem;
  color: var(--muted);
}

@media (min-width: 52rem) {
  .projects { grid-template-columns: 1fr 1fr; }
}

/* ---------- Project detail pages ---------- */

.proj-hero {
  display: grid;
  gap: var(--space-7);
  padding-block: var(--space-6) var(--space-8);
}

.proj-hero h1 {
  font-size: clamp(3.4rem, 2rem + 6vw, 7.5rem);
  margin: var(--space-4) 0 var(--space-5);
}

.proj-hero__lead {
  font-family: var(--font-display);
  font-weight: 500;
  font-size: clamp(1.35rem, 1.1rem + 1vw, 1.8rem);
  line-height: 1.25;
  letter-spacing: -0.02em;
  color: var(--text);
  max-width: 28ch;
}

.proj-facts {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
  gap: var(--space-5);
  margin-top: var(--space-7);
}

.proj-facts dt {
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--muted);
}

.proj-facts dd {
  margin-top: var(--space-1);
  font-weight: 600;
}

.proj-hero__visual {
  position: relative;
  border-radius: var(--radius);
  overflow: hidden;
  min-height: 22rem;
}

.prose-block {
  display: grid;
  gap: var(--space-4) var(--space-8);
  padding-block: var(--space-7);
  border-top: 1px solid var(--line);
}

.prose-block h2 {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 1.6rem;
  letter-spacing: -0.03em;
  color: var(--navy);
}

.prose-block p + p {
  margin-top: var(--space-4);
}

.prose-block .body {
  max-width: 62ch;
  color: var(--text);
  font-size: 1.0625rem;
}

.shots {
  display: grid;
  gap: var(--space-5);
  margin-block: var(--space-6) var(--space-8);
}

.shots figure img {
  width: 100%;
  border-radius: 1.1rem;
  box-shadow: 0 1px 2px rgba(14, 21, 34, 0.06), 0 18px 40px -22px rgba(14, 21, 34, 0.35);
}

.shots figcaption {
  margin-top: var(--space-3);
  font-size: 0.875rem;
  color: var(--muted);
}

.shots--phones {
  grid-template-columns: repeat(2, 1fr);
}

.shots--phones img {
  border: 6px solid #0B0F19;
  border-radius: 1.75rem !important;
}

.shots--posts {
  grid-template-columns: repeat(2, 1fr);
}

@media (min-width: 52rem) {
  .proj-hero { grid-template-columns: 1fr 1.1fr; align-items: center; }
  .prose-block { grid-template-columns: 16rem 1fr; }
  .shots--phones { grid-template-columns: repeat(4, 1fr); }
  .shots--posts { grid-template-columns: repeat(4, 1fr); }
  .shots--two { grid-template-columns: 1fr 1fr; }
}

/* ---------- Art & Design ---------- */

.art-grid {
  display: grid;
  gap: var(--space-5);
}

.art-grid figure img {
  width: 100%;
  height: 20rem;
  object-fit: cover;
  border-radius: 1rem;
}

.art-grid figcaption,
.gallery figcaption {
  margin-top: var(--space-3);
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 1.125rem;
  letter-spacing: -0.01em;
}

.art-grid figcaption span,
.gallery figcaption span {
  margin-left: 0.4rem;
  font-family: var(--font-body);
  font-weight: 400;
  font-size: 0.875rem;
  color: var(--muted);
}

@media (min-width: 52rem) {
  .art-grid { grid-template-columns: 1.9fr 1fr 1fr 1fr; }
}

.gallery {
  display: grid;
  gap: var(--space-7) var(--space-5);
}

.gallery figure img {
  width: 100%;
  border-radius: 1rem;
}

.gallery figure p {
  margin-top: var(--space-1);
  font-size: 0.9375rem;
  color: var(--muted);
  max-width: 50ch;
}

@media (min-width: 52rem) {
  .gallery { grid-template-columns: repeat(2, 1fr); align-items: start; }
  .gallery .wide { grid-column: 1 / -1; }
}

.compare {
  position: relative;
  overflow: hidden;
  border-radius: 1rem;
  aspect-ratio: 2000 / 713;
  touch-action: pan-y;
  user-select: none;
}

.compare img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 0 !important;
}

.compare__top {
  clip-path: inset(0 calc(100% - var(--pos, 50%)) 0 0);
}

.compare__handle {
  position: absolute;
  top: 0;
  bottom: 0;
  left: var(--pos, 50%);
  width: 2px;
  background: #fff;
  transform: translateX(-1px);
  pointer-events: none;
}

.compare__handle::after {
  content: "‹ ›";
  position: absolute;
  top: 50%;
  left: 50%;
  display: grid;
  place-items: center;
  width: 2.75rem;
  height: 2.75rem;
  border-radius: 50%;
  background: #fff;
  color: var(--navy);
  font-weight: 700;
  transform: translate(-50%, -50%);
  box-shadow: var(--shadow-md);
}

.compare input {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
  cursor: ew-resize;
  margin: 0;
}

.compare__labels {
  position: absolute;
  inset: auto 1rem 1rem;
  display: flex;
  justify-content: space-between;
  pointer-events: none;
}

.compare__labels span {
  padding: 0.3rem 0.7rem;
  border-radius: 999px;
  background: rgba(14, 21, 34, 0.75);
  color: #fff;
  font-size: 0.75rem;
  font-weight: 600;
}

/* ---------- About ---------- */

.about-teaser,
.about-intro {
  display: grid;
  gap: var(--space-7);
  border-radius: var(--radius);
  background: var(--face);
  padding: var(--space-8) var(--space-6);
}

.quote {
  font-family: var(--font-display);
  font-weight: 600;
  font-size: clamp(1.8rem, 1.2rem + 2vw, 2.75rem);
  line-height: 1.12;
  letter-spacing: -0.03em;
  color: var(--navy);
}

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

.about-teaser p,
.about-intro p {
  color: var(--text);
}

.about-teaser p + p,
.about-intro p + p {
  margin-top: var(--space-4);
}

.mini-facts {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-4) var(--space-6);
  margin: var(--space-6) 0;
  font-size: 0.875rem;
  color: var(--muted);
}

.mini-facts b {
  display: block;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 1.4rem;
  letter-spacing: -0.02em;
  color: var(--ink);
}

@media (min-width: 52rem) {
  .about-teaser { grid-template-columns: 1.2fr 1fr; gap: 6rem; align-items: center; padding: 5.5rem 6rem; }
}

.about-top {
  display: grid;
  gap: var(--space-7);
  padding-block: var(--space-6) var(--space-8);
}

.about-top .lead {
  font-family: var(--font-display);
  font-weight: 600;
  font-size: clamp(1.6rem, 1.2rem + 1.6vw, 2.4rem);
  line-height: 1.15;
  letter-spacing: -0.03em;
  color: var(--navy);
  margin: var(--space-5) 0;
}

.about-top p {
  color: var(--text);
  max-width: 54ch;
}

.about-top p + p {
  margin-top: var(--space-4);
}

@media (min-width: 52rem) {
  .about-top { grid-template-columns: 1fr 1.3fr; gap: 6rem; align-items: center; }
}

.rows {
  display: grid;
  gap: var(--space-2);
}

.row {
  display: grid;
  gap: var(--space-1) var(--space-6);
  padding-block: var(--space-5);
  border-top: 1px solid var(--line);
}

.row dt {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 1.15rem;
  letter-spacing: -0.02em;
}

.row dd {
  color: var(--text);
}

.row dd small {
  display: block;
  color: var(--muted);
  font-size: 0.875rem;
}

@media (min-width: 52rem) {
  .row { grid-template-columns: 20rem 1fr; }
}

.chips {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
}

.chips span {
  padding: 0.4rem 0.85rem;
  border-radius: 999px;
  background: var(--face);
  border: 1px solid var(--line);
  font-size: 0.875rem;
  font-weight: 500;
}

.two-col {
  display: grid;
  gap: var(--space-5);
}

@media (min-width: 52rem) {
  .two-col { grid-template-columns: 1fr 1fr; }
}

.card {
  border-radius: var(--radius);
  background: var(--face);
  padding: var(--space-7) var(--space-6);
}

.card h2 {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 2rem;
  letter-spacing: -0.04em;
  color: var(--navy);
  margin-bottom: var(--space-5);
}

.card--navy {
  background: var(--navy);
  color: var(--on-navy);
}

.card--navy h2 { color: var(--on-navy); }
.card--navy p { color: var(--on-navy-muted); }

.card .hobbies {
  display: grid;
  gap: var(--space-4);
}

.card .hobbies b {
  display: block;
  color: var(--ink);
}

.card .hobbies span {
  color: var(--muted);
  font-size: 0.9375rem;
}

@media (min-width: 52rem) {
  .card { padding: var(--space-8) 4rem; }
}

/* ---------- Contact ---------- */

.contact {
  padding-block: var(--space-9) 0;
  text-align: center;
}

.contact h2,
.contact h1 {
  font-size: clamp(4rem, 2rem + 9vw, 9.5rem);
  letter-spacing: -0.06em;
}

.contact p {
  max-width: 44ch;
  margin: var(--space-6) auto var(--space-7);
  color: var(--muted);
}

.contact .btn {
  font-size: 1.0625rem;
  padding: 1.15rem 1.9rem;
}

.contact__more {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: var(--space-3) var(--space-6);
  margin-top: var(--space-7);
  color: var(--muted);
}

.contact__more a {
  color: var(--text);
}

/* ---------- Unlock (password page) and 404 ---------- */

.center-page {
  max-width: 34rem;
  margin: var(--space-8) auto 0;
  text-align: center;
}

.center-page h1 {
  font-size: clamp(2.6rem, 1.8rem + 3vw, 4rem);
  margin-bottom: var(--space-5);
}

.center-page p {
  color: var(--muted);
}

.center-page .btn {
  margin-top: var(--space-6);
}

/* ---------- Home: what I do, tied to the work (v3.1) ---------- */

.doing {
  padding-bottom: var(--space-4);
}

.doing__head {
  display: grid;
  gap: var(--space-4);
  margin-bottom: var(--space-7);
}

.doing__head h2 {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: clamp(1.9rem, 1.3rem + 2.2vw, 3rem);
  line-height: 1.08;
  letter-spacing: -0.035em;
  color: var(--navy);
  max-width: 22ch;
}

.doing__head h2 span {
  color: var(--accent);
}

.doing__grid {
  display: grid;
  gap: var(--space-4);
}

.do-card {
  display: flex;
  flex-direction: column;
  overflow: hidden;
  border-radius: 1.25rem;
  background: var(--face);
  color: var(--ink);
  text-decoration: none;
  box-shadow: 0 1px 2px rgba(14, 21, 34, 0.05);
  transition: transform var(--dur-fade) var(--ease-out), box-shadow var(--dur-fade);
}

.do-card:hover {
  transform: translateY(-4px);
  box-shadow: var(--shadow-md);
}

.do-card__top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 5.5rem;
  padding: 0 1.4rem;
}

.do-card__top img {
  width: auto;
  max-width: 55%;
}

.do-card__verb {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 0.75rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  padding: 0.3rem 0.65rem;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.92);
  color: var(--navy);
}

.do-card__body {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  flex: 1;
  padding: 1.4rem 1.4rem 1.5rem;
}

.do-card__body b {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 1.25rem;
  line-height: 1.2;
  letter-spacing: -0.02em;
}

.do-card__body p {
  font-size: 0.9375rem;
  color: var(--text);
}

.do-card__go {
  margin-top: auto;
  padding-top: var(--space-2);
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--accent);
}

@media (min-width: 40rem) {
  .doing__grid { grid-template-columns: 1fr 1fr; }
}

@media (min-width: 64rem) {
  .doing__grid { grid-template-columns: repeat(4, 1fr); }
  .doing__head { grid-template-columns: 1fr auto; align-items: end; }
}

/* ---------- Smaller case panels (v3.1) ---------- */

@media (min-width: 52rem) {
  .case { min-height: 25rem; }
  .case__text { padding: 3rem 3.25rem; gap: var(--space-5); }
  .case h3 { font-size: 2.25rem; margin: var(--space-3) 0; }
  .case p { font-size: 0.97rem; }
  .case__kicker { margin-top: var(--space-5); }
  .facts-row { margin-bottom: var(--space-5); gap: var(--space-4) var(--space-6); }
  .facts-row b { font-size: 2.1rem; }
  .case--casa .case__visual img { width: 13.5rem; }
  .case--casa .v1 { right: 11rem; top: 3.5rem; }
  .case--casa .v2 { right: 2.5rem; top: 7rem; }
  .case--pb .case__visual img { width: min(62%, 19rem); }
  .case__sticker { right: 2.5rem; bottom: 2.5rem; }
  .case__bigstat b { font-size: 7rem; }
  .case__bigstat { font-size: 1.6rem; }
}

/* ---------- Project pages: in-depth parts (v3.1) ---------- */

.tech-grid {
  display: grid;
  gap: var(--space-4);
  margin-block: var(--space-5) var(--space-7);
}

.tech {
  border-radius: 1.1rem;
  background: var(--face);
  padding: 1.5rem 1.5rem 1.6rem;
}

.tech h3 {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 1.15rem;
  letter-spacing: -0.02em;
  color: var(--navy);
  margin-bottom: var(--space-2);
}

.tech p,
.tech li {
  font-size: 0.9375rem;
  color: var(--text);
}

.tech ul {
  display: grid;
  gap: 0.35rem;
  margin-top: var(--space-2);
  padding-left: 1.1rem;
  list-style: disc;
}

.tech .tags {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
  margin-top: var(--space-3);
}

.tech .tags span {
  padding: 0.15rem 0.55rem;
  border-radius: 999px;
  background: var(--ground);
  font-size: 0.75rem;
  font-weight: 600;
  color: var(--muted);
}

.tech--navy {
  background: var(--navy);
}

.tech--navy h3 { color: var(--on-navy); }
.tech--navy p, .tech--navy li { color: var(--on-navy-muted); }

@media (min-width: 52rem) {
  .tech-grid { grid-template-columns: repeat(2, 1fr); }
  .tech-grid--3 { grid-template-columns: repeat(3, 1fr); }
  .tech--wide { grid-column: 1 / -1; }
}

.security {
  border-radius: var(--radius);
  background: var(--navy);
  color: var(--on-navy);
  padding: var(--space-8) var(--space-6);
  margin-block: var(--space-6) var(--space-7);
}

.security h2 {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: clamp(2rem, 1.4rem + 2.4vw, 3.2rem);
  letter-spacing: -0.04em;
  line-height: 1;
}

.security > p {
  max-width: 60ch;
  margin-top: var(--space-5);
  color: var(--on-navy-muted);
  font-size: 1.0625rem;
}

.security .tech-grid {
  margin-bottom: 0;
}

.security .tech {
  background: rgba(255, 255, 255, 0.06);
  border: 1px solid rgba(255, 255, 255, 0.1);
}

.security .tech h3 { color: var(--on-navy); }
.security .tech p, .security .tech li { color: var(--on-navy-muted); }

@media (min-width: 52rem) {
  .security { padding: 5rem 4.5rem; }
}

.timeline {
  display: grid;
  gap: 0;
  margin-block: var(--space-5) var(--space-7);
  border-left: 2px solid var(--line);
  padding-left: var(--space-5);
}

.timeline li {
  position: relative;
  padding-block: 0.6rem;
}

.timeline li::before {
  content: "";
  position: absolute;
  left: calc(var(--space-5) * -1 - 6px);
  top: 1.05rem;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--accent);
}

.timeline b {
  display: inline-block;
  min-width: 4.5rem;
  font-family: var(--font-display);
  font-weight: 700;
  color: var(--navy);
}

.timeline span {
  color: var(--text);
}

.note {
  font-size: 0.875rem;
  color: var(--muted);
}

.do-card__logo {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 1.6rem;
  letter-spacing: -0.03em;
  color: #FFFFFF;
}

ol.timeline {
  list-style: none;
  margin-top: 0;
}

.shots--one figure {
  max-width: 40rem;
  margin-inline: auto;
}

.shots--one figcaption {
  text-align: center;
}

.do-card__logo--dark { color: var(--navy); }
.do-card__verb--navy { background: var(--navy); color: var(--on-navy); }

.projects + .case { margin-top: var(--space-5); }
