:root {
  --bg: #f4f3ef;
  --ink: #171717;
  --muted: #77756f;
  --line: rgba(23, 23, 23, 0.14);
  --blue: #3155ff;
  --blue-soft: #dfe5ff;
  --ease: cubic-bezier(.22,.61,.36,1);
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  margin: 0;
  background: var(--bg);
  color: var(--ink);
  font-family: "DM Sans", Arial, sans-serif;
  font-size: 16px;
  line-height: 1.5;
  overflow-x: hidden;
}
body.modal-open, body.menu-open { overflow: hidden; }
button, a { font: inherit; }
a { color: inherit; text-decoration: none; }
button { color: inherit; }
::selection { background: var(--blue); color: white; }

.noise {
  position: fixed;
  inset: 0;
  pointer-events: none;
  opacity: .025;
  z-index: 1000;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.7'/%3E%3C/svg%3E");
}

.site-header {
  width: min(1320px, calc(100% - 64px));
  height: 86px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  position: relative;
  z-index: 50;
}
.brand {
  width: 42px;
  height: 42px;
  display: grid;
  place-items: center;
  border: 1px solid var(--line);
  border-radius: 50%;
  font-weight: 600;
  letter-spacing: -.03em;
  transition: background .25s ease, color .25s ease, transform .25s ease;
}
.brand:hover { background: var(--ink); color: var(--bg); }
.desktop-nav { display: flex; gap: 30px; align-items: center; margin-left: auto; margin-right: 34px; }
.desktop-nav a, .nav-button {
  font-size: 14px;
  background: none;
  border: 0;
  padding: 6px 0;
  cursor: pointer;
  position: relative;
}
.desktop-nav a::after, .nav-button::after {
  content: "";
  position: absolute;
  left: 0; bottom: 1px;
  width: 100%; height: 1px;
  background: var(--ink);
  transform: scaleX(0);
  transform-origin: right;
  transition: transform .28s var(--ease);
}
.desktop-nav a:hover::after, .nav-button:hover::after { transform: scaleX(1); transform-origin: left; }
.header-actions { display: flex; align-items: center; gap: 18px; }
.language-switch { display: flex; gap: 7px; align-items: center; font-size: 13px; color: var(--muted); }
.language-switch button { background: none; border: 0; padding: 4px 0; cursor: pointer; color: var(--muted); }
.language-switch button.active { color: var(--ink); font-weight: 600; }
.menu-toggle { display: none; width: 40px; height: 40px; border: 1px solid var(--line); background: transparent; border-radius: 50%; padding: 12px 10px; cursor: pointer; }
.menu-toggle span { display: block; height: 1px; background: var(--ink); margin: 4px 0; transition: transform .3s ease; }

.section-shell { width: min(1320px, calc(100% - 64px)); margin: 0 auto; }
.hero {
  min-height: calc(100vh - 86px);
  min-height: calc(100svh - 86px);
  padding: 70px 0 42px;
  display: flex;
  flex-direction: column;
  position: relative;
}
.hero::before {
  content: "";
  position: absolute;
  width: 540px; height: 540px;
  border-radius: 50%;
  right: -260px; top: -210px;
  background: radial-gradient(circle, rgba(49,85,255,.10), rgba(49,85,255,0) 68%);
  pointer-events: none;
}
.hero-kicker { display: flex; align-items: center; gap: 10px; font-size: 13px; color: var(--muted); }
.dot { width: 7px; height: 7px; border-radius: 50%; background: var(--blue); box-shadow: 0 0 0 5px rgba(49,85,255,.08); }
.hero-grid { margin-top: auto; margin-bottom: auto; display: grid; grid-template-columns: minmax(0, 1fr) 280px; gap: 80px; align-items: end; }
.eyebrow { margin: 0 0 18px; font-size: 17px; color: var(--muted); }
h1 {
  margin: 0;
  font-size: clamp(56px, 7.1vw, 108px);
  line-height: .94;
  letter-spacing: -.065em;
  font-weight: 500;
  max-width: 1040px;
}
.serif { font-family: "Instrument Serif", Georgia, serif; font-weight: 400; }
.italic { font-style: italic; }
.hero-word {
  border: 0;
  background: transparent;
  margin: 0;
  padding: 0 .04em;
  font: inherit;
  letter-spacing: inherit;
  line-height: inherit;
  cursor: default;
  position: relative;
  z-index: 1;
}
.hero-word::before {
  content: "";
  position: absolute;
  inset: 48% -.02em 5% -.02em;
  background: var(--blue-soft);
  z-index: -1;
  transform: scaleX(0);
  transform-origin: right;
  transition: transform .38s var(--ease);
}
.hero-word:hover::before { transform: scaleX(1); transform-origin: left; }
.hero-intro { max-width: 640px; font-size: 18px; color: var(--muted); margin: 32px 0 0; }
.hero-actions { display: flex; gap: 22px; align-items: center; margin-top: 34px; }
.primary-link, .text-link {
  display: inline-flex; align-items: center; gap: 18px;
  border: 0; background: none; cursor: pointer;
  padding: 13px 0;
  font-weight: 500;
}
.primary-link { border-bottom: 1px solid var(--ink); }
.text-link { color: var(--muted); }
.primary-link span:last-child, .text-link span:last-child { transition: transform .25s ease; }
.primary-link:hover span:last-child { transform: translateY(3px); }
.text-link:hover span:last-child { transform: translate(3px,-3px); }
.hero-note { border-left: 1px solid var(--line); padding-left: 22px; min-height: 130px; display: flex; flex-direction: column; justify-content: space-between; }
.hero-note p { font-family: "Instrument Serif", Georgia, serif; font-size: 22px; line-height: 1.2; margin: 0; }
.scroll-cue { display: inline-flex; align-items: center; gap: 14px; width: fit-content; font-size: 12px; text-transform: uppercase; letter-spacing: .08em; color: var(--muted); }
.scroll-line { width: 48px; height: 1px; background: var(--line); position: relative; overflow: hidden; }
.scroll-line::after { content:""; position:absolute; inset:0; background: var(--ink); transform: translateX(-100%); animation: scrollPulse 2s ease-in-out infinite; }
@keyframes scrollPulse { 0% {transform:translateX(-100%)} 55%,100% {transform:translateX(100%)} }

.section-rule { border-top: 1px solid var(--line); padding: 46px 0 120px; }
.section-label { display: flex; gap: 20px; font-size: 12px; text-transform: uppercase; letter-spacing: .09em; color: var(--muted); margin-bottom: 72px; }
.section-label span:first-child { color: var(--blue); }
.section-content { margin-left: clamp(0px, 10vw, 145px); }
.about-grid, .experience-grid { display: grid; grid-template-columns: minmax(0, .9fr) minmax(300px, .75fr); gap: 110px; }
.section-heading { font-size: clamp(38px, 4.4vw, 68px); line-height: 1.02; letter-spacing: -.045em; font-weight: 500; margin: 0; }
.about-copy { font-size: 18px; color: var(--muted); }
.about-copy p { margin: 0 0 20px; }
.pillars { margin: 85px 0 0 clamp(0px, 10vw, 145px); display: grid; grid-template-columns: repeat(3,1fr); border-top: 1px solid var(--line); }
.pillar { padding: 20px 30px 0 0; }
.pillar + .pillar { border-left: 1px solid var(--line); padding-left: 28px; }
.pillar h3 { font-size: 18px; margin: 8px 0 6px; }
.pillar p { margin: 0; color: var(--muted); font-size: 14px; }

.experience-card { border-top: 1px solid var(--ink); padding-top: 20px; }
.experience-topline { display:flex; justify-content: space-between; gap: 25px; }
.company { margin: 0 0 4px; color: var(--muted); font-size: 13px; }
.experience-card h3 { margin:0; font-size: 26px; letter-spacing:-.02em; }
.date { color:var(--muted); font-size:13px; white-space:nowrap; }
.experience-description { margin: 50px 0 34px; font-size:17px; color:var(--muted); }
.tagline { font-size:12px; text-transform:uppercase; letter-spacing:.07em; }
.tagline span { color:var(--blue); padding: 0 5px; }

.work-heading { max-width: 670px; margin-bottom: 66px; }
.project-list { border-top: 1px solid var(--ink); }
.project-row {
  position: relative;
  display: grid;
  grid-template-columns: 70px 1fr 70px;
  gap: 20px;
  padding: 36px 0 38px;
  border-bottom: 1px solid var(--line);
  cursor: pointer;
  outline: none;
}
.project-row::before { content:""; position:absolute; inset:0; background:rgba(49,85,255,.035); transform:scaleY(0); transform-origin:bottom; transition:transform .35s var(--ease); z-index:-1; }
.project-row:hover::before, .project-row:focus-visible::before { transform:scaleY(1); }
.project-number { font-size:12px; color:var(--blue); padding-top:7px; }
.project-main { transition: transform .35s var(--ease); }
.project-row:hover .project-main, .project-row:focus-visible .project-main { transform:translateX(10px); }
.project-meta { margin:0 0 8px; color:var(--muted); font-size:12px; text-transform:uppercase; letter-spacing:.07em; }
.project-main h3 { margin:0; font-size:clamp(34px,4vw,58px); line-height:1; letter-spacing:-.04em; font-weight:500; }
.project-description { margin: 15px 0 0; color:var(--muted); max-width: 700px; }
.project-arrow { font-size:24px; text-align:right; transition: transform .3s var(--ease); }
.project-row:hover .project-arrow, .project-row:focus-visible .project-arrow { transform:translate(5px,-5px); }
.project-preview {
  position: fixed;
  width: 290px; aspect-ratio:1.2;
  z-index: 40;
  pointer-events:none;
  opacity:0;
  transform: translate(-50%,-50%) scale(.88) rotate(-2deg);
  transition:opacity .2s ease, transform .25s var(--ease);
  border: 1px solid rgba(255,255,255,.4);
  box-shadow: 0 24px 60px rgba(0,0,0,.16);
  display:flex; flex-direction:column; justify-content:center; padding:26px;
}
.project-row.preview-active .project-preview { opacity:1; transform:translate(-50%,-50%) scale(1) rotate(-2deg); }
.project-row.preview-suppressed .project-preview { opacity:0 !important; transform:translate(-50%,-50%) scale(.88) rotate(-2deg) !important; }
.preview-blue { background:#0d52a5; color:white; }
.preview-blue span { font-size:35px; line-height:.9; letter-spacing:-.05em; font-weight:600; }
.preview-blue span:nth-child(2) { font-family:"Instrument Serif", Georgia, serif; font-style:italic; font-weight:400; }
.project-preview small { margin-top:auto; font-size:9px; letter-spacing:.09em; opacity:.8; }
.preview-grid {
  color: var(--ink);
  background-color: #faf9f5;
  background-image: linear-gradient(var(--line) 1px, transparent 1px), linear-gradient(90deg,var(--line) 1px, transparent 1px);
  background-size: 24px 24px;
}
.preview-grid span { font-size:48px; letter-spacing:-.06em; font-weight:600; background:var(--bg); width:fit-content; padding:4px 8px; }
.preview-grid small { background:var(--blue); color:white; width:fit-content; padding:4px 7px; }
.cursor-label {
  position:fixed; top:0; left:0; z-index:90; pointer-events:none;
  width:64px; height:64px; border-radius:50%; background:var(--blue); color:white;
  display:grid; place-items:center; font-size:10px; letter-spacing:.05em;
  opacity:0; transform:translate(-50%,-50%) scale(.7);
  transition:opacity .2s ease, transform .2s var(--ease);
}
.cursor-label.visible { opacity:1; transform:translate(-50%,-50%) scale(1); }

.closing-grid { display:grid; grid-template-columns: minmax(0,1.5fr) minmax(300px,.5fr); gap:90px; align-items:end; }
.closing-small { color:var(--muted); max-width:480px; margin:0 0 24px; }
.closing-title { font-size:clamp(52px,7vw,100px); letter-spacing:-.06em; line-height:.92; font-weight:500; margin:0; max-width:900px; }
.closing-actions { display:flex; flex-direction:column; border-top:1px solid var(--ink); }
.contact-link { display:flex; justify-content:space-between; align-items:center; padding:18px 0; border:0; border-bottom:1px solid var(--line); background:transparent; cursor:pointer; text-align:left; }
.contact-link span:last-child { transition:transform .25s ease; }
.contact-link:hover span:last-child { transform:translate(4px,-4px); }
.footer { min-height:100px; border-top:1px solid var(--line); display:flex; align-items:center; justify-content:space-between; gap:20px; font-size:12px; color:var(--muted); }

.card-modal { position:fixed; inset:0; z-index:200; pointer-events:none; opacity:0; transition:opacity .3s ease; }
.card-modal.open { opacity:1; pointer-events:auto; }
.card-backdrop { position:absolute; inset:0; background:rgba(20,20,20,.52); backdrop-filter:blur(8px); }
.business-card-wrap { position:absolute; inset:0; display:grid; place-items:center; padding:30px; transform:translateY(22px) scale(.97); transition:transform .38s var(--ease); }
.card-modal.open .business-card-wrap { transform:translateY(0) scale(1); }
.business-card {
  width:min(720px,100%); min-height:440px; background:#141414; color:#f4f3ef;
  border-radius:24px; padding:32px; position:relative; overflow:hidden;
  box-shadow:0 40px 100px rgba(0,0,0,.35);
  display:flex; flex-direction:column;
}
.business-card::before { content:""; position:absolute; width:440px;height:440px;border-radius:50%;right:-200px;top:-250px;background:radial-gradient(circle,rgba(49,85,255,.7),rgba(49,85,255,0) 66%); }
.business-card::after { content:""; position:absolute; inset:0; background-image:linear-gradient(rgba(255,255,255,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.025) 1px,transparent 1px); background-size:38px 38px; pointer-events:none; }
.card-close { position:absolute; top:24px; right:24px; z-index:5; width:44px;height:44px;border-radius:50%;border:1px solid rgba(255,255,255,.25);background:#141414;color:white;font-size:24px;cursor:pointer; }
.card-top { display:flex; justify-content:space-between; position:relative; z-index:1; }
.card-monogram { margin:0; font-size:20px; font-weight:600; }
.card-status { display:flex; gap:8px; align-items:center; margin:12px 0 0; color:#aaa; font-size:11px; text-transform:uppercase; letter-spacing:.08em; }
.card-status span:first-child { width:6px;height:6px;border-radius:50%;background:#5ef19b;box-shadow:0 0 0 4px rgba(94,241,155,.1); }
.card-index { color:#777; font-size:10px; letter-spacing:.1em; margin-right:52px; }
.card-center { margin:auto 0 28px; position:relative; z-index:1; }
.card-overline { color:#999; text-transform:uppercase; font-size:10px; letter-spacing:.12em; margin:0 0 12px; }
.card-center h2 { font-size:clamp(54px,9vw,88px); line-height:.9; letter-spacing:-.06em; margin:0; font-weight:500; }
.card-role { margin:14px 0 0; color:#b9b9b9; }
.card-details { display:grid; grid-template-columns:repeat(3,1fr); gap:16px; padding:18px 0; margin:0; border-top:1px solid rgba(255,255,255,.14); border-bottom:1px solid rgba(255,255,255,.14); position:relative; z-index:1; }
.card-details div + div { border-left:1px solid rgba(255,255,255,.12); padding-left:16px; }
.card-details dt { color:#747474; text-transform:uppercase; letter-spacing:.08em; font-size:9px; margin-bottom:5px; }
.card-details dd { margin:0; font-size:12px; }
.card-links { display:flex; gap:26px; align-items:center; padding-top:18px; position:relative; z-index:1; }
.card-links a, .card-links button { color:#d9d9d9; background:none;border:0;padding:0;cursor:pointer;font-size:12px; }
.card-links span { color:#7087ff; margin-left:5px; }

.mobile-menu { display:none; }
.reveal { opacity:0; transform:translateY(24px); transition:opacity .7s var(--ease), transform .7s var(--ease); }
.reveal.in-view { opacity:1; transform:none; }
.reveal-delay-1 { transition-delay:.08s; }
.reveal-delay-2 { transition-delay:.16s; }
.reveal-delay-3 { transition-delay:.24s; }

@media (max-width: 900px) {
  .site-header, .section-shell { width:min(100% - 36px,1320px); }
  .desktop-nav { display:none; }
  .menu-toggle { display:block; }
  .mobile-menu { display:block; position:fixed; inset:0; background:var(--bg); z-index:45; opacity:0; pointer-events:none; transform:translateY(-12px); transition:.3s ease; padding:120px 18px 30px; }
  .mobile-menu.open { opacity:1; pointer-events:auto; transform:none; }
  .mobile-menu nav { border-top:1px solid var(--ink); }
  .mobile-menu a, .mobile-menu button { display:flex; width:100%; padding:20px 0; border:0; border-bottom:1px solid var(--line); background:none; font-size:32px; letter-spacing:-.04em; text-align:left; cursor:pointer; }
  .hero { padding-top:45px; }
  .hero-grid { grid-template-columns:1fr; gap:42px; align-items:start; }
  .hero-note { display:none; }
  h1 { font-size:clamp(52px,13vw,82px); }
  .hero-intro { max-width:560px; }
  .section-content, .pillars { margin-left:0; }
  .about-grid, .experience-grid, .closing-grid { grid-template-columns:1fr; gap:50px; }
  .pillars { margin-top:62px; }
  .section-rule { padding-bottom:90px; }
  .section-label { margin-bottom:50px; }
  .project-preview, .cursor-label { display:none; }
  .card-details { grid-template-columns:1fr; }
  .card-details div + div { border-left:0; border-top:1px solid rgba(255,255,255,.12); padding-left:0; padding-top:12px; }
  .business-card { min-height:560px; }
}

@media (max-width: 600px) {
  .site-header { height:72px; }
  .hero { min-height:calc(100svh - 72px); padding-top:32px; }
  .language-switch { font-size:12px; }
  h1 { font-size:clamp(46px,13.5vw,68px); line-height:.96; }
  .eyebrow { font-size:15px; }
  .hero-intro { font-size:16px; }
  .hero-actions { flex-direction:column; align-items:flex-start; gap:4px; }
  .section-rule { padding-top:32px; padding-bottom:72px; }
  .section-label { margin-bottom:38px; }
  .section-heading { font-size:clamp(34px,10vw,50px); }
  .about-copy { font-size:16px; }
  .pillars { grid-template-columns:1fr; border-top:1px solid var(--line); }
  .pillar { padding:18px 0 22px; border-bottom:1px solid var(--line); }
  .pillar + .pillar { border-left:0; padding-left:0; }
  .pillar h3 { margin-top:6px; }
  .project-row { grid-template-columns:34px 1fr 28px; gap:10px; padding:26px 0 28px; }
  .project-main h3 { font-size:34px; }
  .project-description { font-size:14px; }
  .closing-title { font-size:clamp(48px,15vw,74px); }
  .closing-grid { gap:50px; }
  .footer { flex-wrap:wrap; padding:26px 0; }
  .footer p:nth-child(2) { display:none; }
  .business-card-wrap { padding:12px; }
  .business-card { border-radius:18px; padding:22px; min-height:620px; }
  .card-center h2 { font-size:58px; }
  .card-links { gap:18px; flex-wrap:wrap; }
  .card-close { right:16px; top:16px; }
  .card-index { display:none; }
}

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

/* --- Multiplane depth system --- */
.hero, .work { position: relative; isolation: isolate; overflow: clip; }
.hero > :not(.multiplane), .work > :not(.multiplane) { position: relative; z-index: 2; }
.multiplane { position: absolute; inset: 0; z-index: 0; pointer-events: none; overflow: hidden; }
.plane { position: absolute; transform: translate3d(0, var(--depth-y, 0px), 0); will-change: transform; }
.plane-word {
  right: -1.5vw; top: 16%;
  font-size: clamp(92px, 18vw, 270px); line-height: .8; font-weight: 600;
  letter-spacing: -.075em; color: transparent;
  -webkit-text-stroke: 1px rgba(23,23,23,.075); text-stroke: 1px rgba(23,23,23,.075);
  white-space: nowrap;
}
.plane-ring {
  width: clamp(250px, 32vw, 480px); aspect-ratio: 1; border-radius: 50%;
  right: 7%; top: 31%; border: 1px solid rgba(49,85,255,.18);
  box-shadow: 0 0 0 55px rgba(49,85,255,.018), 0 0 0 110px rgba(49,85,255,.012);
}
.plane-panel {
  right: 4%; bottom: 15%; width: 132px; padding: 12px 14px;
  border: 1px solid rgba(23,23,23,.13); background: rgba(244,243,239,.54);
  backdrop-filter: blur(5px); transform: translate3d(0,var(--depth-y,0px),0) rotate(-4deg);
  display: grid; gap: 5px; font-size: 9px; letter-spacing: .1em; color: var(--muted);
}
.plane-panel span:nth-child(2) { color: var(--blue); padding-left: 18px; }
.plane-panel span:nth-child(3) { padding-left: 7px; }
.work-planes { inset: -1px 0 0; }
.work-plane-word {
  right: -3%; top: 18%; font-size: clamp(88px,15vw,220px); line-height: 1;
  font-weight: 600; letter-spacing: -.07em; color: rgba(23,23,23,.025); white-space: nowrap;
}
.work-plane-orbit {
  width: 330px; aspect-ratio: 1; border-radius: 50%; right: 3%; bottom: 5%;
  border: 1px dashed rgba(49,85,255,.2);
}
.work-plane-orbit::after {
  content:""; position:absolute; width:10px; height:10px; border-radius:50%;
  background:var(--blue); left:35px; top:38px; box-shadow:0 0 0 8px rgba(49,85,255,.07);
}

/* --- Business card portrait treatment --- */
.card-identity {
  margin: auto 0 26px; display: grid; grid-template-columns: minmax(0,1fr) 132px;
  gap: 32px; align-items: end; position: relative; z-index: 1;
}
.card-identity .card-center { margin: 0; }
.card-photo { margin: 0; }
.card-photo img {
  display: block; width: 132px; height: 164px; object-fit: cover; border-radius: 16px;
  border: 1px solid rgba(255,255,255,.16); filter: saturate(.9) contrast(1.02);
}
.card-photo figcaption {
  margin-top: 7px; color: #777; font-size: 8px; line-height: 1.25;
  text-transform: uppercase; letter-spacing: .07em;
}
.card-details { grid-template-columns: repeat(2,1fr); }

@media (max-width: 900px) {
  .multiplane { opacity: .55; }
  .plane-panel { display: none; }
  .work-plane-orbit { right: -150px; }
}

@media (max-width: 759px) {
  .multiplane { display: none; }
}

@media (max-width: 600px) {
  .card-identity { grid-template-columns: minmax(0,1fr) 104px; gap: 16px; margin-bottom: 20px; }
  .card-photo img { width: 104px; height: 132px; border-radius: 13px; }
  .card-photo figcaption { display: none; }
  .card-center h2 { font-size: 52px; }
}

.education-block {
  margin: 64px 0 0 clamp(0px,10vw,145px); padding-top: 18px; border-top: 1px solid var(--ink);
  display: grid; grid-template-columns: 150px 1fr; gap: 28px;
}
.education-kicker {
  margin: 3px 0 0; color: var(--blue); font-size: 11px; text-transform: uppercase; letter-spacing: .09em;
}
.education-items { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 26px; }
.education-items article + article { border-left: 1px solid var(--line); padding-left: 26px; }
.education-items span { color: var(--muted); font-size: 10px; text-transform: uppercase; letter-spacing: .08em; }
.education-items h3 { margin: 8px 0 0; font-size: 20px; font-weight: 500; letter-spacing: -.02em; }

@media (max-width: 900px) {
  .education-block { margin-left: 0; }
  .card-details { grid-template-columns: repeat(2,1fr); }
  .card-details div + div { border-left:1px solid rgba(255,255,255,.12); border-top:0; padding-left:16px; padding-top:0; }
}
@media (max-width: 600px) {
  .education-block { grid-template-columns: 1fr; gap: 18px; margin-top: 48px; }
  .education-items { grid-template-columns: 1fr; gap: 0; }
  .education-items article { padding: 12px 0 18px; }
  .education-items article + article { border-left: 0; border-top: 1px solid var(--line); padding-left: 0; padding-top: 18px; }
  .card-details { grid-template-columns: 1fr; }
  .card-details div + div { border-left:0; border-top:1px solid rgba(255,255,255,.12); padding-left:0; padding-top:12px; }
}

/* --- Light / dark theme system --- */
html { color-scheme: light; }
html[data-theme="dark"] { color-scheme: dark; }

body,
.mobile-menu,
.brand,
.theme-toggle,
.menu-toggle,
.project-row::before,
.plane-panel,
.preview-grid {
  transition: background-color .35s ease, color .35s ease, border-color .35s ease, box-shadow .35s ease;
}

.theme-toggle {
  width: 36px;
  height: 36px;
  display: grid;
  place-items: center;
  border: 1px solid var(--line);
  border-radius: 50%;
  padding: 0;
  background: transparent;
  color: var(--ink);
  cursor: pointer;
  position: relative;
  overflow: hidden;
}
.theme-toggle::before {
  content: "";
  position: absolute;
  inset: 4px;
  border-radius: 50%;
  background: var(--blue-soft);
  transform: scale(0);
  transition: transform .28s var(--ease);
}
.theme-toggle:hover::before { transform: scale(1); }
.theme-icon {
  width: 16px;
  height: 16px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.6;
  stroke-linecap: round;
  stroke-linejoin: round;
  position: relative;
  z-index: 1;
  transition: opacity .22s ease, transform .3s var(--ease);
}
.theme-icon-moon { display: none; }
html[data-theme="dark"] .theme-icon-sun { display: none; }
html[data-theme="dark"] .theme-icon-moon { display: block; }

html[data-theme="dark"] {
  --bg: #0d0f13;
  --ink: #f0efe9;
  --muted: #9a9da6;
  --line: rgba(240, 239, 233, 0.14);
  --blue: #7188ff;
  --blue-soft: rgba(82, 107, 255, 0.24);
}

html[data-theme="dark"] body { background: var(--bg); }
html[data-theme="dark"] .noise { opacity: .04; mix-blend-mode: soft-light; }
html[data-theme="dark"] .hero::before {
  background: radial-gradient(circle, rgba(77,103,255,.16), rgba(77,103,255,0) 68%);
}
html[data-theme="dark"] .dot { box-shadow: 0 0 0 5px rgba(113,136,255,.11); }
html[data-theme="dark"] .plane-word {
  -webkit-text-stroke-color: rgba(240,239,233,.075);
  text-stroke-color: rgba(240,239,233,.075);
}
html[data-theme="dark"] .plane-ring {
  border-color: rgba(113,136,255,.22);
  box-shadow: 0 0 0 55px rgba(113,136,255,.025), 0 0 0 110px rgba(113,136,255,.015);
}
html[data-theme="dark"] .plane-panel {
  border-color: rgba(240,239,233,.14);
  background: rgba(13,15,19,.58);
}
html[data-theme="dark"] .work-plane-word { color: rgba(240,239,233,.027); }
html[data-theme="dark"] .work-plane-orbit { border-color: rgba(113,136,255,.24); }
html[data-theme="dark"] .project-row::before { background: rgba(113,136,255,.055); }
html[data-theme="dark"] .preview-grid {
  background-color: #151821;
  color: var(--ink);
}
html[data-theme="dark"] .preview-grid span { background: #0d0f13; }
html[data-theme="dark"] .project-preview {
  border-color: rgba(255,255,255,.12);
  box-shadow: 0 26px 70px rgba(0,0,0,.42);
}
html[data-theme="dark"] .brand:hover { background: var(--ink); color: var(--bg); }
html[data-theme="dark"] .business-card {
  background: #101217;
  border: 1px solid rgba(255,255,255,.09);
  box-shadow: 0 42px 110px rgba(0,0,0,.58);
}
html[data-theme="dark"] .card-close { background: #101217; }
html[data-theme="dark"] .card-backdrop { background: rgba(0,0,0,.68); }
html[data-theme="dark"] .mobile-menu { background: var(--bg); }

@media (max-width: 600px) {
  .header-actions { gap: 12px; }
  .theme-toggle { width: 34px; height: 34px; }
}

/* --- Depth pass v2: more visible multiplane motion without covering content --- */
.depth-section { position: relative; isolation: isolate; overflow: clip; }
.depth-section > :not(.multiplane) { position: relative; z-index: 2; }
.plane {
  transform: translate3d(var(--depth-x, 0px), var(--depth-y, 0px), 0) rotate(var(--depth-r, 0deg));
  transition: opacity .35s ease, border-color .35s ease, background-color .35s ease;
}

/* Hero planes */
.plane-word {
  -webkit-text-stroke: 1px rgba(23,23,23,.11);
  text-stroke: 1px rgba(23,23,23,.11);
}
.plane-ring-a {
  width: clamp(300px, 36vw, 560px);
  right: 4%;
  top: 25%;
  border-color: rgba(49,85,255,.26);
  box-shadow: 0 0 0 62px rgba(49,85,255,.025), 0 0 0 124px rgba(49,85,255,.014);
}
.plane-ring-b {
  width: clamp(120px, 15vw, 220px);
  aspect-ratio: 1;
  right: 27%;
  top: 59%;
  border: 1px dashed rgba(23,23,23,.20);
  border-radius: 50%;
}
.plane-grid {
  width: clamp(260px, 34vw, 500px);
  height: clamp(280px, 48vh, 470px);
  right: -3%;
  top: 8%;
  opacity: .34;
  background-image:
    linear-gradient(rgba(23,23,23,.085) 1px, transparent 1px),
    linear-gradient(90deg, rgba(23,23,23,.085) 1px, transparent 1px);
  background-size: 46px 46px;
  -webkit-mask-image: linear-gradient(to bottom left, #000 10%, transparent 82%);
  mask-image: linear-gradient(to bottom left, #000 10%, transparent 82%);
}
.plane-orb {
  width: 14px;
  height: 14px;
  right: 17%;
  top: 69%;
  border-radius: 50%;
  background: var(--blue);
  box-shadow: 0 0 0 12px rgba(49,85,255,.08), 0 0 0 36px rgba(49,85,255,.035);
}

/* About planes */
.about-planes, .experience-planes { inset: 0; }
.about-plane-word,
.experience-plane-word {
  white-space: nowrap;
  font-weight: 600;
  letter-spacing: -.07em;
  line-height: .8;
  color: rgba(23,23,23,.032);
}
.about-plane-word {
  right: -2%;
  top: 16%;
  font-size: clamp(92px, 14vw, 210px);
}
.about-plane-line {
  width: clamp(300px, 38vw, 560px);
  height: 1px;
  right: -5%;
  top: 58%;
  background: linear-gradient(90deg, transparent, rgba(49,85,255,.35), transparent);
}
.about-plane-line::after {
  content: "";
  position: absolute;
  width: 120px;
  height: 120px;
  border-radius: 50%;
  border: 1px solid rgba(49,85,255,.18);
  right: 20%;
  top: -60px;
}
.about-plane-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--blue);
  right: 11%;
  top: 73%;
  box-shadow: 0 0 0 18px rgba(49,85,255,.055);
}

/* Experience planes */
.experience-plane-word {
  left: 36%;
  top: 12%;
  font-size: clamp(80px, 11vw, 170px);
}
.experience-plane-rail {
  right: 8%;
  top: 22%;
  width: 1px;
  height: 58%;
  background: linear-gradient(to bottom, transparent, rgba(49,85,255,.32), rgba(23,23,23,.10), transparent);
}
.experience-plane-rail::before,
.experience-plane-rail::after {
  content: "";
  position: absolute;
  left: 50%;
  width: 9px;
  height: 9px;
  margin-left: -4px;
  border-radius: 50%;
  background: var(--bg);
  border: 1px solid rgba(49,85,255,.46);
}
.experience-plane-rail::before { top: 20%; }
.experience-plane-rail::after { bottom: 14%; }
.experience-plane-node {
  width: 70px;
  height: 70px;
  right: 5.6%;
  top: 53%;
  border-radius: 50%;
  border: 1px solid rgba(49,85,255,.22);
  box-shadow: inset 0 0 0 18px rgba(49,85,255,.025);
}

/* Work planes */
.work-plane-word { color: rgba(23,23,23,.045); }
.work-plane-orbit {
  width: 390px;
  border-color: rgba(49,85,255,.28);
}
.work-plane-cross {
  width: 92px;
  height: 92px;
  right: 15%;
  top: 29%;
}
.work-plane-cross::before,
.work-plane-cross::after {
  content: "";
  position: absolute;
  background: rgba(23,23,23,.16);
}
.work-plane-cross::before { width: 100%; height: 1px; top: 50%; left: 0; }
.work-plane-cross::after { width: 1px; height: 100%; left: 50%; top: 0; }

/* Education details */
.education-items p {
  margin: 7px 0 0;
  color: var(--muted);
  font-size: 13px;
}

/* Employer + client assignment hierarchy */
.employment-type {
  margin: 8px 0 0;
  color: var(--muted);
  font-size: 12px;
}
.assignment-list {
  margin: 34px 0 32px;
  border-top: 1px solid var(--line);
}
.assignment-kicker {
  margin: 14px 0 2px;
  color: var(--muted);
  font-size: 10px;
  letter-spacing: .09em;
  text-transform: uppercase;
}
.assignment {
  display: grid;
  grid-template-columns: 132px 1fr;
  gap: 22px;
  padding: 18px 0;
  border-bottom: 1px solid var(--line);
}
.assignment-date {
  color: var(--muted);
  font-size: 11px;
  padding-top: 5px;
  white-space: nowrap;
}
.assignment-main h4 {
  margin: 0;
  font-size: 18px;
  letter-spacing: -.02em;
  font-weight: 600;
}
.assignment-main p {
  margin: 5px 0 0;
  color: var(--muted);
  font-size: 12px;
}
.assignment-title-row { display: flex; align-items: center; gap: 10px; }
.current-badge {
  display: inline-flex;
  align-items: center;
  min-height: 20px;
  padding: 2px 8px;
  border-radius: 999px;
  border: 1px solid rgba(49,85,255,.24);
  background: rgba(49,85,255,.06);
  color: var(--blue);
  font-size: 9px;
  text-transform: uppercase;
  letter-spacing: .07em;
}

@media (max-width: 1100px) {
  .plane-grid { right: -11%; }
  .experience-plane-word { left: 25%; }
}

@media (max-width: 900px) {
  .multiplane { opacity: .72; }
  .plane-grid { opacity: .23; }
  .about-plane-word, .experience-plane-word { opacity: .8; }
  .experience-plane-rail { right: 3%; }
}

@media (max-width: 600px) {
  .assignment { grid-template-columns: 1fr; gap: 4px; }
  .assignment-date { padding-top: 0; }
}

html[data-theme="dark"] .plane-word {
  -webkit-text-stroke-color: rgba(240,239,233,.11);
  text-stroke-color: rgba(240,239,233,.11);
}
html[data-theme="dark"] .plane-ring-a { border-color: rgba(113,136,255,.30); }
html[data-theme="dark"] .plane-ring-b { border-color: rgba(240,239,233,.18); }
html[data-theme="dark"] .plane-grid {
  background-image:
    linear-gradient(rgba(240,239,233,.075) 1px, transparent 1px),
    linear-gradient(90deg, rgba(240,239,233,.075) 1px, transparent 1px);
}
html[data-theme="dark"] .plane-orb,
html[data-theme="dark"] .about-plane-dot { box-shadow: 0 0 0 18px rgba(113,136,255,.07), 0 0 0 42px rgba(113,136,255,.025); }
html[data-theme="dark"] .about-plane-word,
html[data-theme="dark"] .experience-plane-word { color: rgba(240,239,233,.038); }
html[data-theme="dark"] .experience-plane-rail { background: linear-gradient(to bottom, transparent, rgba(113,136,255,.36), rgba(240,239,233,.10), transparent); }
html[data-theme="dark"] .experience-plane-rail::before,
html[data-theme="dark"] .experience-plane-rail::after { background: var(--bg); border-color: rgba(113,136,255,.55); }
html[data-theme="dark"] .work-plane-word { color: rgba(240,239,233,.045); }
html[data-theme="dark"] .work-plane-cross::before,
html[data-theme="dark"] .work-plane-cross::after { background: rgba(240,239,233,.15); }
html[data-theme="dark"] .current-badge { border-color: rgba(113,136,255,.3); background: rgba(113,136,255,.08); }


/* --- Refinement pass: cleaner identity, responsive depth, no hard plane cutoffs --- */
.site-header {
  justify-content: flex-end;
}

/* Full-viewport decorative canvas rather than a max-width shell. */
.hero,
.work,
.depth-section {
  overflow: visible;
}
.multiplane {
  left: 50%;
  right: auto;
  width: 100vw;
  transform: translateX(-50%);
  overflow: visible;
}

/* Depth layers may drift beyond their section without creating horizontal scroll. */
main {
  position: relative;
  overflow: clip;
}

.hero-note {
  justify-content: flex-end;
}

.pillar {
  padding-top: 18px;
}

.card-monogram {
  font-size: 15px;
  letter-spacing: -.02em;
}
.card-index {
  text-transform: uppercase;
  letter-spacing: .08em;
}

/* Tablet and smaller: use a simpler full-width atmosphere instead of squeezing
   desktop parallax artwork into a narrow viewport. */
@media (max-width: 1099px) {
  .multiplane {
    display: none;
  }

  .hero::before {
    display: none;
  }

  .hero {
    background:
      radial-gradient(circle at 88% 25%, rgba(49,85,255,.09), transparent 30%),
      radial-gradient(circle at 8% 82%, rgba(49,85,255,.045), transparent 28%);
  }

  html[data-theme="dark"] .hero {
    background:
      radial-gradient(circle at 88% 25%, rgba(113,136,255,.12), transparent 30%),
      radial-gradient(circle at 8% 82%, rgba(113,136,255,.06), transparent 28%);
  }
}

@media (max-width: 600px) {
  .site-header,
  .section-shell {
    width: min(100% - 36px, 1320px);
  }

  .site-header {
    height: 72px;
  }

  .hero {
    min-height: calc(100svh - 72px);
    padding-top: 40px;
    padding-bottom: 30px;
    background:
      radial-gradient(circle at 104% 18%, rgba(49,85,255,.09), transparent 36%),
      radial-gradient(circle at -8% 72%, rgba(49,85,255,.04), transparent 31%);
  }

  html[data-theme="dark"] .hero {
    background:
      radial-gradient(circle at 104% 18%, rgba(113,136,255,.12), transparent 36%),
      radial-gradient(circle at -8% 72%, rgba(113,136,255,.055), transparent 31%);
  }

  h1 {
    font-size: clamp(48px, 15vw, 68px);
    line-height: .96;
  }

  .hero-intro {
    margin-top: 24px;
  }

  .hero-actions {
    margin-top: 24px;
  }

  .scroll-cue {
    margin-top: 34px;
  }

  .closing-small {
    margin-bottom: 14px;
  }

  .card-top {
    align-items: flex-start;
  }

  .card-index {
    display: block;
    margin-right: 42px;
    font-size: 9px;
  }
}


@media (max-width: 600px) {
  .business-card-wrap {
    align-items: start;
    overflow-y: auto;
    padding-top: 12px;
    padding-bottom: 12px;
  }

  .business-card {
    min-height: 0;
    max-height: calc(100svh - 24px);
    overflow-y: auto;
  }
}

/* --- Theme-aware glass business card --- */
/*
   The card deliberately stays readable, but is translucent enough that the
   page behind it remains visible. Blur/colour transitions are animated so
   opening the card and changing themes feels continuous rather than snapping.
*/
.card-backdrop {
  background: rgba(20,20,20,.10);
  opacity: 0;
  backdrop-filter: blur(0px);
  -webkit-backdrop-filter: blur(0px);
  transition:
    opacity .42s ease,
    background-color .42s ease,
    backdrop-filter .52s var(--ease),
    -webkit-backdrop-filter .52s var(--ease);
}
.card-modal.open .card-backdrop {
  opacity: 1;
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
}

.business-card {
  background: rgba(246,245,240,.76);
  color: #171717;
  border: 1px solid rgba(23,23,23,.12);
  box-shadow: 0 40px 100px rgba(20,20,20,.18);
  backdrop-filter: blur(4px) saturate(104%);
  -webkit-backdrop-filter: blur(4px) saturate(104%);
  transition:
    background-color .48s ease,
    color .48s ease,
    border-color .48s ease,
    box-shadow .48s ease,
    backdrop-filter .58s var(--ease),
    -webkit-backdrop-filter .58s var(--ease);
}
.card-modal.open .business-card {
  backdrop-filter: blur(18px) saturate(118%);
  -webkit-backdrop-filter: blur(18px) saturate(118%);
}
.business-card::before {
  background: radial-gradient(circle, rgba(49,85,255,.22), rgba(49,85,255,0) 67%);
  transition: background .48s ease, opacity .48s ease;
}
.business-card::after {
  background-image:
    linear-gradient(rgba(23,23,23,.032) 1px, transparent 1px),
    linear-gradient(90deg, rgba(23,23,23,.032) 1px, transparent 1px);
  transition: opacity .48s ease;
}
.card-close {
  border-color: rgba(23,23,23,.16);
  background: rgba(246,245,240,.52);
  color: #171717;
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  transition: background-color .42s ease, color .42s ease, border-color .42s ease, transform .25s var(--ease);
}
.card-close:hover { transform: rotate(5deg); }
.card-status,
.card-index,
.card-overline,
.card-role,
.card-details,
.card-details div + div,
.card-details dt,
.card-links a,
.card-links button,
.card-links span,
.card-photo img,
.card-photo figcaption {
  transition: color .42s ease, border-color .42s ease, background-color .42s ease;
}
.card-status { color: #66645f; }
.card-index { color: #6f6d68; }
.card-overline { color: #76736d; }
.card-role { color: #56544f; }
.card-details {
  border-top-color: rgba(23,23,23,.13);
  border-bottom-color: rgba(23,23,23,.13);
}
.card-details div + div { border-left-color: rgba(23,23,23,.11); }
.card-details dt { color: #77746e; }
.card-links a,
.card-links button { color: #34332f; }
.card-links span { color: var(--blue); }
.card-photo img { border-color: rgba(23,23,23,.13); }
.card-photo figcaption { color: #74716b; }

html[data-theme="dark"] .business-card {
  background: rgba(16,18,23,.70);
  color: #f4f3ef;
  border-color: rgba(255,255,255,.11);
  box-shadow: 0 42px 110px rgba(0,0,0,.40);
}
html[data-theme="dark"] .business-card::before {
  background: radial-gradient(circle, rgba(75,103,255,.42), rgba(49,85,255,0) 67%);
}
html[data-theme="dark"] .business-card::after {
  background-image:
    linear-gradient(rgba(255,255,255,.026) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,.026) 1px, transparent 1px);
}
html[data-theme="dark"] .card-backdrop {
  background: rgba(0,0,0,.22);
}
html[data-theme="dark"] .card-close {
  border-color: rgba(255,255,255,.18);
  background: rgba(16,18,23,.46);
  color: #f4f3ef;
}
html[data-theme="dark"] .card-status { color: #aaa; }
html[data-theme="dark"] .card-index { color: #85858a; }
html[data-theme="dark"] .card-overline { color: #999; }
html[data-theme="dark"] .card-role { color: #b9b9b9; }
html[data-theme="dark"] .card-details {
  border-top-color: rgba(255,255,255,.14);
  border-bottom-color: rgba(255,255,255,.14);
}
html[data-theme="dark"] .card-details div + div { border-left-color: rgba(255,255,255,.12); }
html[data-theme="dark"] .card-details dt { color: #85858a; }
html[data-theme="dark"] .card-links a,
html[data-theme="dark"] .card-links button { color: #d9d9d9; }
html[data-theme="dark"] .card-links span { color: #8295ff; }
html[data-theme="dark"] .card-photo img { border-color: rgba(255,255,255,.16); }
html[data-theme="dark"] .card-photo figcaption { color: #85858a; }

@media (max-width: 600px) {
  .card-details div + div {
    border-left: 0;
    border-top-color: rgba(23,23,23,.11);
  }
  html[data-theme="dark"] .card-details div + div {
    border-left: 0;
    border-top-color: rgba(255,255,255,.12);
  }
}

@media (prefers-reduced-motion: reduce) {
  .card-backdrop,
  .business-card,
  .card-close,
  .card-status,
  .card-index,
  .card-overline,
  .card-role,
  .card-details,
  .card-details div + div,
  .card-details dt,
  .card-links a,
  .card-links button,
  .card-links span,
  .card-photo img,
  .card-photo figcaption {
    transition-duration: .01ms !important;
  }
}

/* ========================================================================
   Final polish: true glass interpolation + full-bleed responsive hero
   ======================================================================== */

/* Keep viewport geometry stable when overlays lock page scrolling. */
html {
  width: 100%;
  overflow-x: clip;
  scrollbar-gutter: stable;
}
body,
main {
  width: 100%;
  max-width: 100%;
}

/*
   .hero is also a .section-shell, so painting its atmosphere directly on the
   hero creates a visible edge at the content-shell boundary on phones.
   Paint the atmosphere on a full-viewport pseudo-layer instead.
*/
.hero {
  background: transparent !important;
  isolation: isolate;
}
.hero::before {
  display: block !important;
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: 50%;
  right: auto;
  width: 100vw;
  width: 100dvw;
  height: auto;
  transform: translateX(-50%);
  border-radius: 0;
  pointer-events: none;
  z-index: -1;
  background:
    radial-gradient(circle at 84% 28%, rgba(49,85,255,.085), transparent 32%),
    radial-gradient(circle at 11% 78%, rgba(49,85,255,.04), transparent 30%);
}
html[data-theme="dark"] .hero::before {
  background:
    radial-gradient(circle at 84% 28%, rgba(113,136,255,.12), transparent 32%),
    radial-gradient(circle at 11% 78%, rgba(113,136,255,.055), transparent 30%);
}

@media (max-width: 1099px) {
  /* Never switch the full-bleed atmosphere off on tablet/mobile. */
  .hero::before {
    display: block !important;
    background:
      radial-gradient(circle at 91% 23%, rgba(49,85,255,.085), transparent 34%),
      radial-gradient(circle at 8% 80%, rgba(49,85,255,.04), transparent 31%);
  }
  html[data-theme="dark"] .hero::before {
    background:
      radial-gradient(circle at 91% 23%, rgba(113,136,255,.12), transparent 34%),
      radial-gradient(circle at 8% 80%, rgba(113,136,255,.055), transparent 31%);
  }
}

@media (max-width: 600px) {
  .site-header,
  .section-shell {
    width: calc(100% - 36px);
    max-width: 1320px;
  }

  .hero::before {
    /* Keep both radial centres inside the viewport to prevent a hard-looking edge. */
    background:
      radial-gradient(circle at 88% 18%, rgba(49,85,255,.09), transparent 38%),
      radial-gradient(circle at 10% 76%, rgba(49,85,255,.04), transparent 34%);
  }
  html[data-theme="dark"] .hero::before {
    background:
      radial-gradient(circle at 88% 18%, rgba(113,136,255,.12), transparent 38%),
      radial-gradient(circle at 10% 76%, rgba(113,136,255,.055), transparent 34%);
  }
}

/*
   Business card transition: the old version faded an already-filled surface.
   This version transitions the actual backdrop and card alpha from 0 to their
   final glass values. The modal container itself no longer supplies the fade.
*/
:root {
  --card-glass-rgb: 246, 245, 240;
  --card-glass-alpha: .68;
  --card-dim-rgb: 20, 20, 20;
  --card-dim-alpha: .16;
}
html[data-theme="dark"] {
  --card-glass-rgb: 16, 18, 23;
  --card-glass-alpha: .64;
  --card-dim-rgb: 0, 0, 0;
  --card-dim-alpha: .28;
}

.card-modal {
  opacity: 1;
  visibility: hidden;
  pointer-events: none;
  transition: visibility 0s linear .90s;
}
.card-modal.open {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transition-delay: 0s;
}

.card-backdrop,
html[data-theme="dark"] .card-backdrop {
  opacity: 1;
  background-color: rgba(var(--card-dim-rgb), 0);
  backdrop-filter: blur(0px);
  -webkit-backdrop-filter: blur(0px);
  transition:
    background-color .82s cubic-bezier(.22,.61,.36,1),
    backdrop-filter .90s cubic-bezier(.22,.61,.36,1),
    -webkit-backdrop-filter .90s cubic-bezier(.22,.61,.36,1);
}
.card-modal.open .card-backdrop {
  opacity: 1;
  background-color: rgba(var(--card-dim-rgb), var(--card-dim-alpha));
  backdrop-filter: blur(7px);
  -webkit-backdrop-filter: blur(7px);
}

.business-card-wrap {
  opacity: 0;
  transform: translateY(18px) scale(.982);
  transition:
    opacity .54s ease .08s,
    transform .72s cubic-bezier(.22,.61,.36,1) .04s;
}
.card-modal.open .business-card-wrap {
  opacity: 1;
  transform: translateY(0) scale(1);
}

.business-card,
html[data-theme="dark"] .business-card {
  /* Start genuinely transparent; the fill itself now eases in. */
  background-color: rgba(var(--card-glass-rgb), 0);
  backdrop-filter: blur(0px) saturate(100%);
  -webkit-backdrop-filter: blur(0px) saturate(100%);
  transition:
    background-color .78s cubic-bezier(.22,.61,.36,1),
    color .48s ease,
    border-color .48s ease,
    box-shadow .62s ease,
    backdrop-filter .90s cubic-bezier(.22,.61,.36,1),
    -webkit-backdrop-filter .90s cubic-bezier(.22,.61,.36,1);
}
.card-modal.open .business-card,
html[data-theme="dark"] .card-modal.open .business-card {
  background-color: rgba(var(--card-glass-rgb), var(--card-glass-alpha));
  backdrop-filter: blur(20px) saturate(118%);
  -webkit-backdrop-filter: blur(20px) saturate(118%);
}

/* Avoid a narrow visual sliver caused by viewport units / browser UI on phones. */
@media (max-width: 600px) {
  main {
    overflow-x: clip;
  }
  .hero::before {
    width: 100vw;
    width: 100dvw;
  }
  .business-card-wrap {
    width: 100%;
    max-width: 100%;
    overscroll-behavior: contain;
  }
}

@media (prefers-reduced-motion: reduce) {
  .card-modal,
  .card-backdrop,
  .business-card-wrap,
  .business-card {
    transition-duration: .01ms !important;
    transition-delay: 0ms !important;
  }
}

/* =========================================================
   Business card v4 — deterministic, gradual modal transition
   ---------------------------------------------------------
   Firefox and some mobile browsers can composite a changing
   backdrop-filter abruptly. We therefore:
   1) fade a normal dim layer using opacity only;
   2) blur the actual page underneath using filter;
   3) make the modal visible one rendered frame before .open.
   This produces a genuinely progressive clear -> dim/blur fade.
   ========================================================= */

:root {
  --card-transition-duration: 1600ms;
  --card-page-blur: 6px;
  --card-dim-alpha: .20;
}
html[data-theme="dark"] {
  --card-dim-alpha: .36;
}

/* The modal has a paintable pre-open state. */
.card-modal {
  visibility: hidden !important;
  pointer-events: none !important;
  opacity: 1 !important;
}
.card-modal.active {
  visibility: visible !important;
}
.card-modal.active.open {
  pointer-events: auto !important;
}

/* Reliable dimming: final colour is fixed; only opacity animates. */
.card-backdrop,
html[data-theme="dark"] .card-backdrop {
  background: rgba(var(--card-dim-rgb), var(--card-dim-alpha)) !important;
  opacity: 0 !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  transition: opacity var(--card-transition-duration) cubic-bezier(.16, 1, .3, 1) !important;
  will-change: opacity;
}
.card-modal.active.open .card-backdrop,
html[data-theme="dark"] .card-modal.active.open .card-backdrop {
  opacity: 1 !important;
}

/* Blur the real page rather than animating backdrop-filter on the overlay. */
.site-header,
main,
.footer,
.mobile-menu,
.noise {
  transition-property: filter;
  transition-duration: var(--card-transition-duration);
  transition-timing-function: cubic-bezier(.16, 1, .3, 1);
  will-change: filter;
}
body.modal-open .site-header,
body.modal-open main,
body.modal-open .footer,
body.modal-open .mobile-menu,
body.modal-open .noise {
  filter: blur(var(--card-page-blur));
}

/* The card itself eases in independently; its glass surface does not snap. */
.business-card-wrap {
  opacity: 0 !important;
  transform: translateY(20px) scale(.985) !important;
  transition:
    opacity 900ms cubic-bezier(.16, 1, .3, 1) 120ms,
    transform 1050ms cubic-bezier(.16, 1, .3, 1) 80ms !important;
  will-change: opacity, transform;
}
.card-modal.active.open .business-card-wrap {
  opacity: 1 !important;
  transform: translateY(0) scale(1) !important;
}

.business-card,
html[data-theme="dark"] .business-card {
  background-color: rgba(var(--card-glass-rgb), var(--card-glass-alpha)) !important;
  backdrop-filter: blur(16px) saturate(112%) !important;
  -webkit-backdrop-filter: blur(16px) saturate(112%) !important;
  transition:
    background-color .45s ease,
    color .45s ease,
    border-color .45s ease,
    box-shadow .45s ease !important;
}

/* When closing, keep the modal mounted until the long background fade is done. */
.card-modal.closing {
  visibility: visible !important;
  pointer-events: none !important;
}

@media (max-width: 700px) {
  :root {
    --card-transition-duration: 1350ms;
    --card-page-blur: 4px;
  }
  .business-card-wrap {
    transition:
      opacity 780ms cubic-bezier(.16, 1, .3, 1) 80ms,
      transform 900ms cubic-bezier(.16, 1, .3, 1) 50ms !important;
  }
}

@media (prefers-reduced-motion: reduce) {
  .site-header,
  main,
  .footer,
  .mobile-menu,
  .noise,
  .card-backdrop,
  .business-card-wrap {
    transition-duration: .01ms !important;
    transition-delay: 0ms !important;
  }
}

/* =========================================================
   Business card v5 — one continuous reveal
   ---------------------------------------------------------
   Keep the glass surface fully composed at its final visual
   state and animate the *whole card group* as one layer.
   This avoids the browser snapping backdrop-filter/background
   while the dim layer is already fading.
   ========================================================= */
:root {
  --card-transition-duration: 1550ms;
  --card-card-duration: 1450ms;
}

/* Background and card now start together, with a neutral easing curve. */
.card-backdrop,
html[data-theme="dark"] .card-backdrop {
  opacity: 0 !important;
  transition: opacity var(--card-transition-duration) cubic-bezier(.37, 0, .63, 1) !important;
}
.card-modal.active.open .card-backdrop,
html[data-theme="dark"] .card-modal.active.open .card-backdrop {
  opacity: 1 !important;
}

.site-header,
main,
.footer,
.mobile-menu,
.noise {
  transition-property: filter !important;
  transition-duration: var(--card-transition-duration) !important;
  transition-timing-function: cubic-bezier(.37, 0, .63, 1) !important;
}

/* Fade the entire already-rendered card. No child glass animation on open. */
.business-card-wrap {
  opacity: 0 !important;
  transform: translateY(14px) scale(.992) !important;
  transition:
    opacity var(--card-card-duration) cubic-bezier(.37, 0, .63, 1) !important,
    transform var(--card-card-duration) cubic-bezier(.22, .61, .36, 1) !important;
  transition-delay: 0ms !important;
  will-change: opacity, transform;
}
.card-modal.active.open .business-card-wrap {
  opacity: 1 !important;
  transform: translateY(0) scale(1) !important;
}

/* Compose the glass before it becomes visible. The wrapper opacity masks it
   from 0→1, which is much more reliable than animating backdrop-filter. */
.business-card,
html[data-theme="dark"] .business-card,
.card-modal.open .business-card,
html[data-theme="dark"] .card-modal.open .business-card,
.card-modal.active.open .business-card,
html[data-theme="dark"] .card-modal.active.open .business-card {
  background-color: rgba(var(--card-glass-rgb), var(--card-glass-alpha)) !important;
  backdrop-filter: blur(16px) saturate(112%) !important;
  -webkit-backdrop-filter: blur(16px) saturate(112%) !important;
  transition:
    background-color .45s ease,
    color .45s ease,
    border-color .45s ease,
    box-shadow .45s ease !important;
  transform: translateZ(0);
  backface-visibility: hidden;
}

@media (max-width: 700px) {
  :root {
    --card-transition-duration: 1350ms;
    --card-card-duration: 1250ms;
  }
  .business-card-wrap {
    transform: translateY(10px) scale(.994) !important;
  }
  .card-modal.active.open .business-card-wrap {
    transform: translateY(0) scale(1) !important;
  }
}

@media (prefers-reduced-motion: reduce) {
  .card-backdrop,
  .business-card-wrap,
  .site-header,
  main,
  .footer,
  .mobile-menu,
  .noise {
    transition-duration: .01ms !important;
  }
}

/* =========================================================
   Business card v6 — first-open compositor fix
   ---------------------------------------------------------
   The previous first-open hitch was caused by the browser
   lazily creating the card's backdrop-filter compositor layer.
   The page underneath already blurs during the modal reveal,
   so the card itself now uses real translucent surfaces rather
   than its own backdrop-filter. This makes first and subsequent
   opens follow the exact same cheap opacity/transform path.
   ========================================================= */

/* Keep the modal in the render tree from page load. Its children are fully
   transparent until .open, so nothing is visible or interactive. This avoids
   a first-use visibility/compositing cold start. */
.card-modal {
  visibility: visible !important;
  pointer-events: none !important;
}
.card-modal.active.open {
  pointer-events: auto !important;
}
.card-modal.closing {
  visibility: visible !important;
}

/* The glass appearance comes from transparency + gradient. The page itself
   supplies the progressive blur, so there is no lazy backdrop-filter layer
   left to 'pop' on the first opening. */
.business-card,
html[data-theme="dark"] .business-card,
.card-modal.open .business-card,
html[data-theme="dark"] .card-modal.open .business-card,
.card-modal.active.open .business-card,
html[data-theme="dark"] .card-modal.active.open .business-card {
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  background-image:
    linear-gradient(135deg, rgba(255,255,255,.075), rgba(255,255,255,.015) 44%, rgba(49,85,255,.025));
  transform: translateZ(0);
  will-change: auto;
}

.business-card {
  background-color: rgba(246,245,240,.72) !important;
}
html[data-theme="dark"] .business-card {
  background-color: rgba(16,18,23,.66) !important;
  background-image:
    linear-gradient(135deg, rgba(255,255,255,.055), rgba(255,255,255,.008) 46%, rgba(49,85,255,.055));
}

/* The close button should not create another backdrop compositor either. */
.card-close,
html[data-theme="dark"] .card-close {
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}

/* Use a keyframed reveal for opening. Keyframes are deterministic on the very
   first class toggle and do not depend on an already-warmed transition layer. */
.business-card-wrap {
  opacity: 0 !important;
  transform: translate3d(0,14px,0) scale(.992) !important;
  transition:
    opacity 1100ms cubic-bezier(.37,0,.63,1),
    transform 1250ms cubic-bezier(.22,.61,.36,1) !important;
  animation: none !important;
}
.card-modal.active.open .business-card-wrap {
  animation: cardRevealFirstSafe var(--card-card-duration) cubic-bezier(.37,0,.63,1) both !important;
}
@keyframes cardRevealFirstSafe {
  0% {
    opacity: 0;
    transform: translate3d(0,14px,0) scale(.992);
  }
  18% {
    opacity: .10;
  }
  45% {
    opacity: .42;
  }
  72% {
    opacity: .76;
  }
  100% {
    opacity: 1;
    transform: translate3d(0,0,0) scale(1);
  }
}

/* Closing still uses the normal transition back to the resting state. */
.card-modal.closing .business-card-wrap {
  animation: none !important;
  opacity: 0 !important;
  transform: translate3d(0,10px,0) scale(.994) !important;
}

@media (max-width: 700px) {
  .business-card-wrap {
    transform: translate3d(0,10px,0) scale(.994) !important;
  }
  @keyframes cardRevealFirstSafe {
    0% {
      opacity: 0;
      transform: translate3d(0,10px,0) scale(.994);
    }
    18% { opacity: .10; }
    45% { opacity: .42; }
    72% { opacity: .76; }
    100% {
      opacity: 1;
      transform: translate3d(0,0,0) scale(1);
    }
  }
}

@media (prefers-reduced-motion: reduce) {
  .card-modal.active.open .business-card-wrap {
    animation-duration: .01ms !important;
  }
}

/* =========================================================
   v7 — rebuilt modal + mobile menu motion
   ========================================================= */

/* Keep scroll locking independent from the old experimental modal classes. */
body.business-modal-open { overflow: hidden; }

/* Business card modal: two synchronized 500ms layers, nothing else. */
.business-modal-v7 {
  position: fixed;
  inset: 0;
  z-index: 200;
  visibility: hidden;
  pointer-events: none;
}
.business-modal-v7.is-mounted {
  visibility: visible;
}
.business-modal-v7.is-open {
  pointer-events: auto;
}

.business-modal-backdrop {
  position: absolute;
  inset: 0;
  opacity: 0;
  background: rgba(13, 15, 19, .24);
  transition: opacity 500ms cubic-bezier(.22, .61, .36, 1);
  will-change: opacity;
}
html[data-theme="dark"] .business-modal-backdrop {
  background: rgba(0, 0, 0, .42);
}
.business-modal-v7.is-open .business-modal-backdrop {
  opacity: 1;
}

.business-modal-stage {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  padding: 30px;
  overflow-y: auto;
  opacity: 0;
  transform: translate3d(0, 10px, 0) scale(.992);
  transition:
    opacity 500ms cubic-bezier(.22, .61, .36, 1),
    transform 500ms cubic-bezier(.22, .61, .36, 1);
  will-change: opacity, transform;
}
.business-modal-v7.is-open .business-modal-stage {
  opacity: 1;
  transform: translate3d(0, 0, 0) scale(1);
}

/* The card surface is already in its final state before the fade starts.
   This keeps the motion predictable on first open and avoids compositor pops. */
.business-modal-v7 .profile-card-v7 {
  background: rgba(246, 245, 240, .78) !important;
  color: #171717;
  border: 1px solid rgba(23,23,23,.12);
  box-shadow: 0 34px 90px rgba(20,20,20,.18);
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  transition: background-color .28s ease, color .28s ease, border-color .28s ease, box-shadow .28s ease !important;
}
html[data-theme="dark"] .business-modal-v7 .profile-card-v7 {
  background: rgba(16, 18, 23, .74) !important;
  color: #f4f3ef;
  border-color: rgba(255,255,255,.11);
  box-shadow: 0 38px 100px rgba(0,0,0,.46);
}

/* Do not let legacy page-blur rules participate in this modal. */
body.business-modal-open .site-header,
body.business-modal-open main,
body.business-modal-open .footer,
body.business-modal-open .mobile-menu,
body.business-modal-open .noise {
  filter: none !important;
}

/* Mobile menu: quiet entrance + lightly staggered options. */
@media (max-width: 900px) {
  .mobile-menu {
    display: block;
    position: fixed;
    inset: 0;
    z-index: 45;
    padding: 120px 18px 30px;
    background: var(--bg);
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transform: translate3d(0, -8px, 0) scale(.997);
    transition:
      opacity 260ms ease,
      transform 320ms cubic-bezier(.22,.61,.36,1),
      visibility 0s linear 320ms;
  }
  .mobile-menu.open {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
    transform: translate3d(0,0,0) scale(1);
    transition-delay: 0s;
  }

  .mobile-menu nav > a,
  .mobile-menu nav > button {
    opacity: 0;
    transform: translate3d(0, -7px, 0);
    transition:
      opacity 220ms ease,
      transform 300ms cubic-bezier(.22,.61,.36,1);
  }
  .mobile-menu.open nav > :nth-child(1) { transition-delay: 55ms; }
  .mobile-menu.open nav > :nth-child(2) { transition-delay: 90ms; }
  .mobile-menu.open nav > :nth-child(3) { transition-delay: 125ms; }
  .mobile-menu.open nav > :nth-child(4) { transition-delay: 160ms; }
  .mobile-menu.open nav > a,
  .mobile-menu.open nav > button {
    opacity: 1;
    transform: translate3d(0,0,0);
  }

  .menu-toggle span {
    transform-origin: center;
    transition: transform 280ms cubic-bezier(.22,.61,.36,1), opacity 180ms ease;
  }
  .menu-toggle[aria-expanded="true"] span:first-child {
    transform: translateY(4.5px) rotate(45deg);
  }
  .menu-toggle[aria-expanded="true"] span:last-child {
    transform: translateY(-4.5px) rotate(-45deg);
  }
}

@media (max-width: 600px) {
  .business-modal-stage {
    place-items: start center;
    padding: 12px;
  }
  .business-modal-v7 .profile-card-v7 {
    width: 100%;
    max-height: calc(100svh - 24px);
    overflow-y: auto;
  }
}

@media (prefers-reduced-motion: reduce) {
  .business-modal-backdrop,
  .business-modal-stage,
  .mobile-menu,
  .mobile-menu nav > a,
  .mobile-menu nav > button,
  .menu-toggle span {
    transition-duration: .01ms !important;
    transition-delay: 0ms !important;
  }
}

/* =========================================================
   Mobile menu — intentional closing motion
   ========================================================= */
@media (max-width: 900px) {
  /* Keep the panel visible while its exit animation is running. */
  .mobile-menu.closing {
    visibility: visible;
    pointer-events: none;
    opacity: 0;
    transform: translate3d(0, -8px, 0) scale(.997);
    transition:
      opacity 280ms ease,
      transform 340ms cubic-bezier(.22,.61,.36,1),
      visibility 0s linear 340ms;
  }

  /* Give the links a restrained reverse stagger on the way out. */
  .mobile-menu.closing nav > a,
  .mobile-menu.closing nav > button {
    opacity: 0;
    transform: translate3d(0, -6px, 0);
    transition:
      opacity 180ms ease,
      transform 250ms cubic-bezier(.22,.61,.36,1);
  }
  .mobile-menu.closing nav > :nth-child(4) { transition-delay: 0ms; }
  .mobile-menu.closing nav > :nth-child(3) { transition-delay: 25ms; }
  .mobile-menu.closing nav > :nth-child(2) { transition-delay: 50ms; }
  .mobile-menu.closing nav > :nth-child(1) { transition-delay: 75ms; }
}

@media (prefers-reduced-motion: reduce) {
  .mobile-menu.closing,
  .mobile-menu.closing nav > a,
  .mobile-menu.closing nav > button {
    transition-duration: .01ms !important;
    transition-delay: 0ms !important;
  }
}


/* =========================================================
   Mobile navigation v3 — balanced icon + guaranteed exit
   ========================================================= */
@media (max-width: 900px) {
  /* Build the icon from a neutral centre point. This avoids the
     uneven X caused by margins + translated flow-positioned spans. */
  .menu-toggle {
    position: relative;
    display: block;
    width: 40px;
    height: 40px;
    padding: 0;
    overflow: hidden;
  }

  .menu-toggle span {
    position: absolute;
    left: 50%;
    top: 50%;
    width: 16px;
    height: 1.25px;
    margin: 0;
    border-radius: 999px;
    background: var(--ink);
    transform-origin: 50% 50%;
    transition:
      transform 320ms cubic-bezier(.22,.61,.36,1),
      opacity 180ms ease;
    will-change: transform;
  }

  .menu-toggle span:first-child {
    transform: translate(-50%, -50%) translateY(-3px);
  }

  .menu-toggle span:last-child {
    transform: translate(-50%, -50%) translateY(3px);
  }

  .menu-toggle[aria-expanded="true"] span:first-child {
    transform: translate(-50%, -50%) rotate(45deg);
  }

  .menu-toggle[aria-expanded="true"] span:last-child {
    transform: translate(-50%, -50%) rotate(-45deg);
  }

  /* The open state remains mounted while .closing is active. The rules
     below deliberately override .open, giving the browser two real
     computed states to interpolate between. */
  .mobile-menu.open.closing {
    visibility: visible;
    pointer-events: none;
    opacity: 0;
    transform: translate3d(0, -14px, 0) scale(.994);
    transition:
      opacity 330ms cubic-bezier(.4,0,.2,1),
      transform 390ms cubic-bezier(.4,0,.2,1),
      visibility 0s linear 390ms;
  }

  .mobile-menu.open.closing nav {
    transform: translate3d(0, -6px, 0);
    opacity: .96;
    transition:
      transform 390ms cubic-bezier(.4,0,.2,1),
      opacity 300ms ease;
  }

  .mobile-menu.open.closing nav > a,
  .mobile-menu.open.closing nav > button {
    opacity: 0;
    transform: translate3d(0, -9px, 0);
    transition:
      opacity 190ms ease,
      transform 270ms cubic-bezier(.4,0,.2,1);
  }

  .mobile-menu.open.closing nav > :nth-child(4) { transition-delay: 0ms; }
  .mobile-menu.open.closing nav > :nth-child(3) { transition-delay: 28ms; }
  .mobile-menu.open.closing nav > :nth-child(2) { transition-delay: 56ms; }
  .mobile-menu.open.closing nav > :nth-child(1) { transition-delay: 84ms; }
}

@media (prefers-reduced-motion: reduce) {
  .mobile-menu.open.closing,
  .mobile-menu.open.closing nav,
  .mobile-menu.open.closing nav > a,
  .mobile-menu.open.closing nav > button,
  .menu-toggle span {
    transition-duration: .01ms !important;
    transition-delay: 0ms !important;
  }
}

/* =========================================================
   Mobile navigation v4 — deterministic fade-out
   The close animation itself is handled with WAAPI in script.js.
   These rules keep legacy transition/visibility declarations from
   fighting the explicit exit animation while it is running.
   ========================================================= */
@media (max-width: 900px) {
  .mobile-menu.open.menu-exiting {
    visibility: visible !important;
    pointer-events: none !important;
    transition: none !important;
  }

  .mobile-menu.open.menu-exiting nav,
  .mobile-menu.open.menu-exiting nav > a,
  .mobile-menu.open.menu-exiting nav > button {
    transition: none !important;
  }
}

/* =========================================================
   Business Card — portrait-left final layout
   ========================================================= */
.business-modal-v7 .card-top {
  align-items: center;
}
.business-modal-v7 .card-status {
  margin: 0;
}
.business-modal-v7 .card-identity {
  grid-template-columns: 132px minmax(0, 1fr);
  gap: 30px;
  align-items: center;
  margin: auto 0 28px;
}
.business-modal-v7 .card-photo {
  grid-column: 1;
  margin: 0;
  align-self: center;
}
.business-modal-v7 .card-photo img {
  display: block;
  width: 132px;
  height: 164px;
  object-fit: cover;
  object-position: center;
  border-radius: 16px;
  border: 1px solid rgba(23, 23, 23, .12);
  filter: saturate(.94) contrast(1.01);
}
html[data-theme="dark"] .business-modal-v7 .card-photo img {
  border-color: rgba(255,255,255,.14);
}
.business-modal-v7 .card-center {
  grid-column: 2;
  margin: 0;
  min-width: 0;
}
.business-modal-v7 .card-center h2 {
  font-size: clamp(60px, 8vw, 88px);
}

@media (max-width: 600px) {
  .business-modal-v7 .card-identity {
    grid-template-columns: 96px minmax(0, 1fr);
    gap: 18px;
    align-items: center;
    margin: auto 0 22px;
  }
  .business-modal-v7 .card-photo img {
    width: 96px;
    height: 120px;
    border-radius: 13px;
  }
  .business-modal-v7 .card-center h2 {
    font-size: clamp(46px, 15vw, 60px);
  }
  .business-modal-v7 .card-overline {
    font-size: 8px;
    letter-spacing: .1em;
  }
  .business-modal-v7 .card-role {
    font-size: 13px;
    line-height: 1.35;
  }
}

@media (max-width: 390px) {
  .business-modal-v7 .card-identity {
    grid-template-columns: 84px minmax(0, 1fr);
    gap: 14px;
  }
  .business-modal-v7 .card-photo img {
    width: 84px;
    height: 106px;
  }
  .business-modal-v7 .card-center h2 {
    font-size: 44px;
  }
}
