/* HKDPS — design system tokens (see CLAUDE.md in the design project) */
:root{
  --charcoal:#171A18;
  --dark-sage:#536058;
  --sage:#748078;
  --light-sage:#E9ECE8;
  --pale-sage:#F0F2EF;
  --off-white:#F5F6F3;
  --muted-gray:#747B77;
  --body-gray:#5A605C;
  --body-gray-dark:#3E443F;
  --hairline-1:#E1E5DF;
  --hairline-2:#DCE0D9;
  --hairline-3:#D8DCD6;
  --faint-label:#9AA29C;
  --rule-arrow:#B4BBB2;
  --page-surround:#E4E7E1;
  --margin-x:80px;
}

*,*::before,*::after{box-sizing:border-box}

html{scroll-behavior:smooth}

body{
  margin:0;
  background:var(--page-surround);
  color:var(--charcoal);
  font-family:'Instrument Sans',system-ui,sans-serif;
  -webkit-font-smoothing:antialiased;
}

.mono{font-family:'IBM Plex Mono',monospace}

.page{
  max-width:1440px;
  margin:0 auto;
  background:var(--off-white);
  position:relative;
  overflow:hidden;
}

a{color:var(--dark-sage);text-decoration:none}
a:hover{color:var(--charcoal)}

img{max-width:100%;display:block}

.section{padding:0 0 130px}
.section-inner{padding:0 var(--margin-x)}

.section-label{
  display:flex;
  align-items:center;
  gap:20px;
  padding:0 var(--margin-x);
  margin-bottom:64px;
}
.section-label .num{
  font-family:'IBM Plex Mono',monospace;
  font-size:11px;
  letter-spacing:0.2em;
  color:var(--sage);
}
.section-label .slash{
  font-family:'IBM Plex Mono',monospace;
  font-size:11px;
  color:var(--hairline-3);
}
.section-label .name{
  font-size:11px;
  font-weight:600;
  letter-spacing:0.22em;
  text-transform:uppercase;
  white-space:nowrap;
}
.section-label .rule{
  flex:1;
  height:1px;
  background:var(--hairline-3);
}
.section-label .support{
  font-family:'IBM Plex Mono',monospace;
  font-size:10px;
  letter-spacing:0.18em;
  color:var(--muted-gray);
  text-align:right;
  white-space:nowrap;
}

/* Buttons & links */
.btn{
  display:inline-flex;
  align-items:center;
  gap:12px;
  background:var(--dark-sage);
  color:var(--off-white);
  padding:17px 26px;
  border-radius:2px;
  font-size:14px;
  font-weight:500;
  border:none;
  cursor:pointer;
}
.btn:hover{background:var(--charcoal);color:var(--off-white)}
.btn .arrow{font-size:15px}

.link-underline{
  display:inline-flex;
  align-items:center;
  gap:10px;
  color:var(--charcoal);
  border-bottom:1px solid var(--hairline-3);
  padding-bottom:4px;
}
.link-underline:hover{border-bottom-color:var(--charcoal);color:var(--charcoal)}

/* Logo mark */
.brand{display:flex;align-items:center;gap:18px}
.mark{display:block;flex:none}
.brand-name{font-size:27px;font-weight:700;letter-spacing:0.04em;line-height:1;color:var(--charcoal)}
.brand-name-sm{font-size:19px}
.brand-divider{width:1px;height:28px;background:var(--hairline-2)}
.brand-tag{
  font-family:'IBM Plex Mono',monospace;
  font-size:9.5px;
  letter-spacing:0.16em;
  line-height:1.5;
  color:var(--muted-gray);
  text-transform:uppercase;
}

/* ---------- Header ---------- */
.site-header{
  display:flex;
  align-items:center;
  justify-content:space-between;
  padding:26px var(--margin-x);
  border-bottom:1px solid var(--hairline-1);
  position:relative;
}

.nav-toggle-input{display:none}
.nav-toggle-btn{display:none;flex-direction:column;gap:5px;cursor:pointer;padding:6px}
.nav-toggle-btn span{width:22px;height:2px;background:var(--charcoal);display:block}

.site-nav{display:flex;align-items:center;gap:40px}
.site-nav a{
  font-size:11.5px;
  letter-spacing:0.13em;
  text-transform:uppercase;
  color:var(--charcoal);
  font-weight:500;
}
.site-nav a.btn{color:var(--off-white)}

/* ---------- Hero ---------- */
.hero{position:relative;padding-bottom:140px}

.hero-meta{
  position:relative;
  z-index:3;
  display:flex;
  flex-wrap:wrap;
  gap:16px 40px;
  padding:18px var(--margin-x);
  border-bottom:1px solid var(--hairline-1);
}
.hero-meta span{
  font-family:'IBM Plex Mono',monospace;
  font-size:10px;
  letter-spacing:0.22em;
  color:var(--muted-gray);
}

.hero-visual{
  position:absolute;
  top:0;
  right:0;
  width:52.7%;
  max-width:760px;
  height:600px;
  clip-path:polygon(140px 0,100% 0,100% 100%,0 100%);
}
.hero-visual-tonal{
  position:absolute;
  inset:0;
  background:var(--dark-sage);
  background-image:repeating-linear-gradient(0deg,rgba(233,236,232,0.10) 0 1px,transparent 1px 14px);
}
.hero-visual img{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  object-fit:cover;
}
.hero-visual-caption{
  position:absolute;
  top:56px;
  right:56px;
  text-align:right;
  font-family:'IBM Plex Mono',monospace;
  font-size:10px;
  letter-spacing:0.22em;
  line-height:2.1;
  color:var(--pale-sage);
  text-shadow:0 1px 6px rgba(23,26,24,0.45);
  pointer-events:none;
}

.hero-content{
  position:relative;
  z-index:2;
  padding:78px var(--margin-x) 0;
  max-width:720px;
}
.hero-content .section-label{padding:0;margin-bottom:52px}
.hero-content .section-label .rule{flex:none;width:200px}

.hero-content h1{
  margin:0;
  font-size:66px;
  font-weight:500;
  line-height:1.06;
  letter-spacing:-0.028em;
}
.hero-content h1 .accent{color:var(--sage)}

.hero-lede{
  margin:34px 0 0;
  font-size:17px;
  line-height:1.62;
  color:var(--body-gray-dark);
  max-width:470px;
}

.hero-actions{
  display:flex;
  align-items:center;
  flex-wrap:wrap;
  gap:24px 36px;
  margin-top:48px;
}

/* ---------- Services ---------- */
.services-grid{
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  gap:24px;
  padding:0 var(--margin-x);
}
.service{border-top:1px solid var(--charcoal);padding-top:26px}
.service svg{display:block}
.service h3{margin:22px 0 0;font-size:21px;font-weight:600;letter-spacing:-0.01em}
.service p{margin:14px 0 0;font-size:14.5px;line-height:1.62;color:var(--body-gray)}

/* ---------- Work ---------- */
.work-grid{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:24px;
  padding:0 var(--margin-x);
}
.work-visual{
  height:392px;
  border:1px solid var(--hairline-2);
  overflow:hidden;
  position:relative;
}
.work-visual img{width:100%;height:100%;object-fit:cover}

/* Dashboard illustration for project 1 */
.work-visual.mockup{background:var(--light-sage);padding:28px 0 0 28px}
.mockup-frame{
  width:100%;height:100%;background:#FFFFFF;
  border:1px solid var(--hairline-2);border-right:none;border-bottom:none;
  display:flex;overflow:hidden;min-width:520px;
}
.mockup-side{width:132px;flex:none;background:var(--off-white);border-right:1px solid var(--light-sage);padding:16px 0}
.mockup-brand{display:flex;align-items:center;gap:8px;padding:0 14px 18px}
.mockup-brand span{font-size:11px;font-weight:700;letter-spacing:0.03em}
.mockup-side nav{display:flex;flex-direction:column}
.mockup-side nav span{font-size:10.5px;color:var(--muted-gray);padding:8px 14px}
.mockup-side nav span.active{color:var(--charcoal);font-weight:600;background:var(--light-sage);border-left:2px solid var(--dark-sage)}
.mockup-main{flex:1;min-width:0;padding:16px 18px;overflow:auto}
.mockup-main-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}
.mockup-main-head span.title{font-size:15px;font-weight:600}
.mockup-main-head span.cta{font-size:10px;color:var(--off-white);background:var(--dark-sage);padding:6px 10px;border-radius:2px}
.mockup-filters{display:flex;gap:8px;margin-bottom:14px}
.mockup-filters span{font-size:10px;border:1px solid var(--light-sage);padding:7px 10px}
.mockup-filters span:first-child{flex:1;color:var(--faint-label)}
.mockup-filters span:last-child{color:var(--muted-gray)}
.mockup-table-head,.mockup-row{
  display:grid;grid-template-columns:1.1fr 1.3fr 1fr 0.9fr 0.8fr;gap:6px;align-items:center;
}
.mockup-table-head{
  font-size:9px;letter-spacing:0.1em;text-transform:uppercase;color:var(--faint-label);
  padding-bottom:8px;border-bottom:1px solid var(--light-sage);
}
.mockup-row{font-size:10.5px;color:var(--body-gray-dark);padding:11px 0;border-bottom:1px solid var(--pale-sage)}
.mockup-status{font-size:9px;padding:3px 7px;justify-self:start}
.mockup-status.paid{color:var(--dark-sage);background:var(--light-sage)}
.mockup-status.sent{color:var(--muted-gray);background:var(--pale-sage)}
.mockup-status.draft{color:var(--faint-label);border:1px solid var(--light-sage);padding:2px 7px}

.work-photo-placeholder{
  width:100%;height:100%;
  display:flex;align-items:center;justify-content:center;
  background:
    repeating-linear-gradient(45deg,var(--light-sage) 0 2px,transparent 2px 14px),
    var(--pale-sage);
  border:1px dashed var(--hairline-3);
}
.work-photo-placeholder span{
  font-family:'IBM Plex Mono',monospace;
  font-size:10px;
  letter-spacing:0.14em;
  color:var(--muted-gray);
  text-align:center;
  max-width:200px;
  text-transform:uppercase;
}

.work-meta{display:flex;align-items:baseline;justify-content:space-between;margin-top:26px;gap:16px}
.work-meta h3{margin:0;font-size:25px;font-weight:600;letter-spacing:-0.015em}
.work-status{font-family:'IBM Plex Mono',monospace;font-size:9.5px;letter-spacing:0.18em;color:var(--sage);white-space:nowrap}
.work-desc{margin:14px 0 0;font-size:15px;line-height:1.6;color:var(--body-gray);max-width:420px}
.work-cta{margin-top:22px;font-size:13.5px}

/* ---------- Approach ---------- */
.approach{
  background:var(--pale-sage);
  padding-top:96px;
  border-top:1px solid var(--hairline-1);
  border-bottom:1px solid var(--hairline-1);
}
.approach-grid{
  display:grid;
  grid-template-columns:1fr 28px 1fr 28px 1fr 28px 1fr 28px 1fr;
  gap:16px;
  padding:0 var(--margin-x);
  align-items:start;
}
.approach-step{border-top:1px solid var(--charcoal);padding-top:22px}
.approach-step .step-num{font-size:34px;font-weight:500;letter-spacing:-0.02em;line-height:1}
.approach-step .step-name{margin-top:16px;font-size:11.5px;font-weight:600;letter-spacing:0.18em}
.approach-step p{margin:12px 0 0;font-size:13.5px;line-height:1.6;color:var(--body-gray)}
.approach-arrow{
  padding-top:44px;text-align:center;color:var(--rule-arrow);font-size:14px;
}

/* ---------- About ---------- */
.about{padding:96px 0 130px}
.about-grid{
  display:grid;
  grid-template-columns:repeat(12,minmax(0,1fr));
  gap:24px;
  padding:0 var(--margin-x);
  align-items:start;
}
.about-heading{
  grid-column:1 / span 5;
  margin:0;
  font-size:42px;
  font-weight:500;
  line-height:1.14;
  letter-spacing:-0.025em;
}
.about-heading .accent{color:var(--sage)}
.about-copy{grid-column:7 / span 5}
.about-copy p{margin:6px 0 0;font-size:16.5px;line-height:1.66;color:var(--body-gray-dark)}
.about-copy p + p{color:var(--body-gray)}
.about-sig{
  grid-column:12 / span 1;
  padding-left:24px;
  border-left:1px solid var(--hairline-1);
  min-height:120px;
}
.about-sig .sig-text{
  margin-top:16px;
  font-family:'IBM Plex Mono',monospace;
  font-size:9.5px;
  letter-spacing:0.16em;
  line-height:2;
  color:var(--muted-gray);
  white-space:nowrap;
}

/* ---------- Contact ---------- */
.contact{
  padding:96px 0 120px;
  background:var(--pale-sage);
  border-top:1px solid var(--hairline-1);
}
.contact-grid{
  display:grid;
  grid-template-columns:repeat(12,minmax(0,1fr));
  gap:24px;
  padding:0 var(--margin-x);
  align-items:start;
}
.contact-heading{grid-column:1 / span 5}
.contact-heading h2{margin:0;font-size:46px;font-weight:500;line-height:1.1;letter-spacing:-0.028em}
.contact-heading p{margin:26px 0 0;font-size:16.5px;color:var(--body-gray)}
.contact-details{
  grid-column:7 / span 3;
  display:flex;flex-direction:column;gap:18px;
  padding-left:28px;border-left:1px solid var(--hairline-1);
}
.contact-details .label{
  font-family:'IBM Plex Mono',monospace;font-size:9px;letter-spacing:0.18em;
  color:var(--faint-label);margin-bottom:6px;
}
.contact-details a,.contact-details span.value{
  font-size:15px;color:var(--charcoal);border-bottom:1px solid var(--hairline-3);padding-bottom:2px;
}
.contact-details span.value{border-bottom:none;padding-bottom:0}
.contact-cta{
  grid-column:11 / span 2;
  display:flex;flex-direction:column;gap:16px;align-items:flex-start;
}
.contact-cta small{font-size:12.5px;color:var(--muted-gray)}

/* ---------- Language switch ---------- */
.lang-switch{display:flex;align-items:center;gap:8px}
.lang-btn{
  font-family:'IBM Plex Mono',monospace;
  font-size:10.5px;
  letter-spacing:0.14em;
  color:var(--muted-gray);
  background:none;
  border:none;
  padding:4px 2px;
  cursor:pointer;
}
.lang-btn:hover{color:var(--charcoal)}
.lang-btn.is-active{color:var(--charcoal);font-weight:600}
.lang-sep{color:var(--hairline-3);font-family:'IBM Plex Mono',monospace;font-size:10.5px}

/* ---------- Scroll reveal ---------- */
.js .reveal{
  opacity:0;
  transform:translateY(28px);
  transition:opacity .7s cubic-bezier(.16,.8,.24,1), transform .7s cubic-bezier(.16,.8,.24,1);
}
.js .reveal.is-visible{opacity:1;transform:translateY(0)}

.delay-1{transition-delay:.08s}
.delay-2{transition-delay:.16s}
.delay-3{transition-delay:.24s}
.delay-4{transition-delay:.32s}
.delay-5{transition-delay:.4s}

.services-grid .reveal:nth-child(1){transition-delay:0s}
.services-grid .reveal:nth-child(2){transition-delay:.08s}
.services-grid .reveal:nth-child(3){transition-delay:.16s}
.services-grid .reveal:nth-child(4){transition-delay:.24s}

.work-grid .reveal:nth-child(1){transition-delay:0s}
.work-grid .reveal:nth-child(2){transition-delay:.12s}

.approach-grid .reveal:nth-child(1){transition-delay:0s}
.approach-grid .reveal:nth-child(3){transition-delay:.08s}
.approach-grid .reveal:nth-child(5){transition-delay:.16s}
.approach-grid .reveal:nth-child(7){transition-delay:.24s}
.approach-grid .reveal:nth-child(9){transition-delay:.32s}

@media (prefers-reduced-motion: reduce){
  .js .reveal{opacity:1 !important;transform:none !important;transition:none !important}
}

/* ---------- 404 page ---------- */
.notfound{
  min-height:70vh;
  display:flex;flex-direction:column;justify-content:center;align-items:flex-start;
  padding:0 var(--margin-x);
}
.notfound .code{
  font-family:'IBM Plex Mono',monospace;font-size:13px;letter-spacing:0.2em;color:var(--sage);
  margin-bottom:24px;
}
.notfound h1{font-size:52px;font-weight:500;letter-spacing:-0.025em;margin:0 0 20px}
.notfound p{font-size:16.5px;line-height:1.66;color:var(--body-gray);max-width:480px;margin:0 0 40px}

/* ---------- Footer ---------- */
.site-footer{
  display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:20px;
  padding:34px var(--margin-x);border-top:1px solid var(--hairline-2);
}
.footer-nav{display:flex;gap:32px;flex-wrap:wrap}
.footer-nav a{font-size:11px;letter-spacing:0.13em;text-transform:uppercase;color:var(--body-gray)}
.footer-copy{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:0.1em;color:var(--faint-label)}

/* =====================================================
   Responsive
   ===================================================== */
@media (max-width:1024px){
  :root{--margin-x:48px}
  .hero-content{max-width:100%}
  .hero-content h1{font-size:52px}
  .about-heading{grid-column:1 / span 12;margin-bottom:24px}
  .about-copy{grid-column:1 / span 8}
  .about-sig{display:none}
  .contact-heading{grid-column:1 / span 12;margin-bottom:32px}
  .contact-details{grid-column:1 / span 5;border-left:none;padding-left:0}
  .contact-cta{grid-column:7 / span 5;align-items:flex-start}
}

@media (max-width:900px){
  .services-grid{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:36px}
  .work-grid{grid-template-columns:1fr;gap:56px}
  .approach-grid{grid-template-columns:1fr;gap:28px}
  .approach-arrow{display:none}
  .about-copy{grid-column:1 / span 12}
  .contact-details,.contact-cta{grid-column:1 / span 12}
  .contact-cta{margin-top:8px}
}

@media (max-width:880px){
  :root{--margin-x:24px}

  .nav-toggle-btn{display:flex}
  .site-nav{
    position:absolute;
    top:100%;left:0;right:0;
    background:var(--off-white);
    flex-direction:column;
    align-items:flex-start;
    gap:0;
    max-height:0;
    overflow:hidden;
    border-bottom:1px solid var(--hairline-1);
    transition:max-height .25s ease;
    z-index:20;
  }
  .site-nav a{
    width:100%;
    padding:16px 24px;
    border-bottom:1px solid var(--hairline-1);
  }
  .site-nav a.btn{
    width:calc(100% - 48px);
    margin:16px 24px;
    justify-content:center;
  }
  .site-nav .lang-switch{
    width:100%;
    padding:16px 24px;
    border-bottom:1px solid var(--hairline-1);
  }
  .nav-toggle-input:checked ~ .site-nav{max-height:480px}

  .brand-tag{display:none}

  .hero-visual{
    position:relative;
    width:100%;
    max-width:none;
    height:220px;
    clip-path:none;
    margin:24px 0 0;
    overflow:hidden;
  }
  .hero-content{padding-top:32px}
  .hero-content h1{font-size:38px}
  .hero-meta{flex-direction:column;gap:8px}

  .mockup-frame{overflow-x:auto}
}

@media (max-width:560px){
  .services-grid{grid-template-columns:1fr}
  .hero-content h1{font-size:32px}
  .section-label .support{display:none}
  .about-heading,.contact-heading h2{font-size:32px}
}
