:root{
--ink:#0B0D10;--ink-2:#1A1D22;--text:#0B0D10;--body:#3D434C;--mute:#5F6670;--faint:#8A919B;
--white:#FFFFFF;--tint:#F7F8FA;--line:#E7E9ED;--line-2:#D9DCE2;
--accent:#0E7A57;--green:#1F9D55;
--font:"Geist",ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;
--pad:clamp(1.25rem,4vw,3rem);--max:1240px;--hdr:4rem;--r:14px;
--ease:cubic-bezier(.2,.7,.2,1);
--shadow:0 1px 1px rgba(11,13,16,.04),0 2px 4px rgba(11,13,16,.04),0 12px 24px -12px rgba(11,13,16,.12);
--shadow-lg:0 1px 1px rgba(11,13,16,.04),0 8px 16px -4px rgba(11,13,16,.08),0 32px 64px -24px rgba(11,13,16,.22)}
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:calc(var(--hdr) + 1rem);-webkit-text-size-adjust:100%}
body{margin:0;background:var(--white);color:var(--text);font:400 1rem/1.6 var(--font);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:clip;font-feature-settings:"ss01"}
body.menu-open{overflow:hidden}
img{display:block;max-width:100%;height:auto}
a{color:inherit;text-decoration:none}
h1,h2,h3,p,ol,ul,dl,dd,figure{margin:0;padding:0}
ul,ol{list-style:none}
.wrap{max-width:calc(var(--max) + var(--pad)*2);margin:0 auto;padding:0 var(--pad)}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip{position:absolute;left:1rem;top:-6rem;background:var(--ink);color:#fff;padding:.6rem 1rem;border-radius:8px;z-index:100}
.skip:focus{top:1rem}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:6px}
.cta :focus-visible{outline-color:#7FE0BC}

/* header */
.hdr{position:sticky;top:0;z-index:50;background:rgba(255,255,255,.8);backdrop-filter:saturate(1.8) blur(16px);-webkit-backdrop-filter:saturate(1.8) blur(16px);border-bottom:1px solid transparent;transition:border-color .3s}
.hdr.scrolled{border-color:var(--line)}
.hdr-in{display:flex;align-items:center;justify-content:space-between;height:var(--hdr)}
.brand{display:flex;align-items:center;gap:.6rem;font-weight:600;font-size:.98rem;letter-spacing:-.01em}
.logo{display:grid;place-items:center;width:1.6rem;height:1.6rem;border-radius:7px;background:var(--ink);color:#fff;font-size:.8rem;font-weight:600;box-shadow:inset 0 1px 0 rgba(255,255,255,.18)}
.dnav ul{display:flex;align-items:center;gap:.25rem}
.dnav a{display:block;font-size:.9rem;font-weight:500;color:var(--body);padding:.45rem .8rem;border-radius:8px;transition:color .2s,background .2s}
.dnav a:hover{color:var(--ink);background:var(--tint)}
.dnav .hdr-cta{margin-left:.6rem;background:var(--ink);color:#fff;padding:.5rem .95rem;box-shadow:inset 0 1px 0 rgba(255,255,255,.14)}
.dnav .hdr-cta:hover{background:var(--ink-2);color:#fff}
.menu-btn{display:none;align-items:center;gap:.6rem;background:var(--white);border:1px solid var(--line-2);border-radius:9px;padding:.5rem .75rem;font:500 .875rem/1 var(--font);color:var(--ink);cursor:pointer}
.burger{display:grid;gap:4px;width:14px}.burger i{height:1.5px;border-radius:1px;background:currentColor;transition:transform .3s var(--ease)}
.menu-btn[aria-expanded=true] .burger i:first-child{transform:translateY(2.75px) rotate(45deg)}
.menu-btn[aria-expanded=true] .burger i:last-child{transform:translateY(-2.75px) rotate(-45deg)}
.mnav{position:fixed;z-index:49;inset:var(--hdr) 0 0;background:var(--white);padding:1rem var(--pad) 2rem;overflow:auto;border-top:1px solid var(--line)}
.mnav[hidden]{display:none}
.mnav li a{display:flex;align-items:center;gap:1rem;font-size:1.6rem;font-weight:500;letter-spacing:-.025em;padding:1rem 0;border-bottom:1px solid var(--line)}
.mnav li a span{font-size:.75rem;font-weight:500;letter-spacing:0;color:var(--mute);font-variant-numeric:tabular-nums}
.mnav .btn{margin-top:2rem;width:100%}

/* buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;height:2.875rem;padding:0 1.25rem;border-radius:10px;font:500 .9375rem/1 var(--font);background:var(--ink);color:#fff;box-shadow:inset 0 1px 0 rgba(255,255,255,.14),0 1px 2px rgba(11,13,16,.2);transition:background .2s,transform .2s,box-shadow .2s}
.btn:hover{background:var(--ink-2)}
.btn:active{transform:translateY(1px)}
.btn .ar{transition:transform .25s var(--ease)}
.btn:hover .ar{transform:translateX(2px)}
.btn-ghost{background:var(--white);color:var(--ink);box-shadow:inset 0 0 0 1px var(--line-2),0 1px 2px rgba(11,13,16,.05)}
.btn-ghost:hover{background:var(--tint)}
.btn-light{background:#fff;color:var(--ink);box-shadow:0 1px 2px rgba(0,0,0,.2)}
.btn-light:hover{background:#EEF0F3}
.btn-ghost-dark{background:transparent;color:#fff;box-shadow:inset 0 0 0 1px rgba(255,255,255,.22)}
.btn-ghost-dark:hover{background:rgba(255,255,255,.08)}
.btn-block{width:100%}

/* type */
.eyebrow{display:inline-flex;align-items:center;gap:.5rem;font-size:.8125rem;font-weight:500;color:var(--accent);margin-bottom:1rem}
.h2{font-size:clamp(2rem,3.6vw,3.25rem);line-height:1.06;font-weight:600;letter-spacing:-.035em}
.soft{color:var(--faint);white-space:nowrap}

/* hero */
.hero{padding:clamp(3rem,4vw,3.75rem) 0 clamp(4rem,7vw,6rem)}
.avail{display:inline-flex;align-items:center;gap:.6rem;font-size:.8125rem;font-weight:500;color:var(--body);padding:.4rem .8rem .4rem .65rem;border:1px solid var(--line);border-radius:999px;background:var(--white);box-shadow:0 1px 2px rgba(11,13,16,.04)}
.pulse{position:relative;flex:none;width:.5rem;height:.5rem;border-radius:50%;background:var(--green)}
.pulse::after{content:"";position:absolute;inset:0;border-radius:50%;background:var(--green);animation:breathe 2.6s ease-out infinite}
@keyframes breathe{0%{transform:scale(1);opacity:.5}80%,100%{transform:scale(2.8);opacity:0}}
.hero-grid{display:grid;grid-template-columns:repeat(12,1fr);gap:2rem;align-items:end;margin-top:2rem}
.display{grid-column:1/span 8;font-size:clamp(2.6rem,6.2vw,5.5rem);line-height:1;font-weight:600;letter-spacing:-.045em;max-width:12.5ch}
.hero-side{grid-column:9/-1;padding-bottom:.4rem}
.lead{font-size:1.0625rem;line-height:1.6;color:var(--ink);font-weight:500;letter-spacing:-.01em}
.lead span{color:var(--mute);font-weight:400}
.actions{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:1.75rem}
.actions.center{justify-content:center}
.stats{display:grid;grid-template-columns:repeat(4,1fr);margin-top:clamp(3rem,6vw,4.5rem);border:1px solid var(--line);border-radius:var(--r);background:var(--white);box-shadow:var(--shadow);overflow:hidden}
.stats div{padding:1.4rem 1.6rem;border-left:1px solid var(--line)}
.stats div:first-child{border-left:0}
.stats dt{font-size:.8125rem;color:var(--mute);margin-bottom:.35rem}
.stats dd{font-size:clamp(1.5rem,2.4vw,2rem);font-weight:600;letter-spacing:-.035em;line-height:1.1;font-variant-numeric:tabular-nums}

/* sections */
.sec{padding:clamp(4.5rem,9vw,7.5rem) 0}
.sec-tight{padding:clamp(3.5rem,7vw,5.5rem) 0}
.sec-tint{background:var(--tint);border-block:1px solid var(--line)}
.sec-head{display:grid;grid-template-columns:repeat(12,1fr);column-gap:2rem;align-items:end;margin-bottom:clamp(2.5rem,5vw,3.5rem)}
.sec-head .eyebrow{grid-column:1/-1}
.sec-head .h2{grid-column:1/span 6}
.sec-note{grid-column:8/-1;color:var(--mute);max-width:40ch;justify-self:end}

/* work cards */
.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:1.25rem}
.card{border:1px solid var(--line);border-radius:var(--r);background:var(--white);box-shadow:var(--shadow);transition:box-shadow .35s var(--ease),transform .35s var(--ease),border-color .35s}
.card>a{display:flex;flex-direction:column;height:100%;border-radius:inherit}
.card:hover{box-shadow:var(--shadow-lg);transform:translateY(-3px);border-color:var(--line-2)}
.card-media{padding:1.25rem 1.25rem 0;background:var(--tint);border-radius:var(--r) var(--r) 0 0;overflow:hidden}
.card-feat{grid-column:1/-1}
.card-feat>a{display:grid;grid-template-columns:7fr 4fr}
.card-feat .card-media{padding:2rem 0 2rem 2rem;background:var(--tint);border-radius:var(--r) 0 0 var(--r)}
.card-feat .card-body{padding:2.25rem;align-items:flex-end}
.card-feat h3{font-size:clamp(1.6rem,2.6vw,2.25rem)}
.frame{--fg:rgba(255,255,255,.62);--dot:rgba(255,255,255,.24);background:var(--bar);border-radius:10px 10px 0 0;overflow:hidden;box-shadow:0 0 0 1px rgba(11,13,16,.08),0 10px 30px -12px rgba(11,13,16,.3)}
.card-feat .frame{border-radius:10px}
.frame.on-light{--fg:rgba(11,13,16,.55);--dot:rgba(11,13,16,.16)}
.bar{position:relative;display:flex;align-items:center;height:1.9rem;padding:0 .75rem;background:var(--bar)}
.dots{display:flex;gap:.35rem}.dots i{width:.5rem;height:.5rem;border-radius:50%;background:var(--dot)}
.tab{position:absolute;left:50%;transform:translateX(-50%);font-size:.6875rem;font-weight:500;color:var(--fg);white-space:nowrap}
.frame img{width:100%;aspect-ratio:1200/760;object-fit:cover;object-position:top;margin-top:-1px;transition:transform .8s var(--ease)}
.card-feat .frame img{aspect-ratio:1200/720}
.card:hover .frame img{transform:scale(1.015)}
.card-body{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;padding:1.25rem 1.35rem 1.4rem;border-top:1px solid var(--line);flex:1}
.card-feat .card-body{border-top:0;border-left:1px solid var(--line)}
.card-kind{font-size:.8125rem;color:var(--accent);font-weight:500;margin-bottom:.3rem}
.card h3{font-size:1.125rem;font-weight:600;letter-spacing:-.02em;line-height:1.25}
.card-blurb{margin-top:.3rem;font-size:.875rem;color:var(--mute)}
.go{flex:none;display:grid;place-items:center;width:2rem;height:2rem;border-radius:8px;border:1px solid var(--line);color:var(--mute);transition:all .25s var(--ease)}
.card:hover .go{background:var(--ink);border-color:var(--ink);color:#fff}

/* steps */
.steps{display:grid;grid-template-columns:repeat(4,1fr);border:1px solid var(--line);border-radius:var(--r);background:var(--white);box-shadow:var(--shadow);overflow:hidden}
.steps li{padding:1.75rem;border-left:1px solid var(--line)}
.steps li:first-child{border-left:0}
.steps .n{display:grid;place-items:center;width:1.75rem;height:1.75rem;border-radius:8px;background:var(--tint);border:1px solid var(--line);font-size:.8125rem;font-weight:600;font-variant-numeric:tabular-nums}
.steps h3{font-size:1.125rem;font-weight:600;letter-spacing:-.02em;margin:2.5rem 0 .4rem}
.steps p{font-size:.9375rem;color:var(--mute)}

/* pricing */
.offer{display:grid;grid-template-columns:repeat(12,1fr);gap:2rem;align-items:center}
.offer-copy{grid-column:1/span 5}
.offer-copy>p:last-child{margin-top:1.25rem;color:var(--mute);font-size:1.0625rem;max-width:36ch}
.plan{grid-column:7/-1;display:grid;grid-template-columns:1fr 1fr;border:1px solid var(--line);border-radius:18px;background:var(--white);box-shadow:var(--shadow-lg);overflow:hidden}
.plan-top{padding:2rem;background:var(--ink);color:#fff;display:flex;flex-direction:column;background-image:linear-gradient(180deg,rgba(255,255,255,.06),rgba(255,255,255,0) 40%)}
.plan-name{font-size:.875rem;font-weight:500;color:#AEB4BD}
.price{font-size:clamp(3.5rem,5.5vw,4.75rem);font-weight:600;letter-spacing:-.05em;line-height:1;margin:.75rem 0 auto;padding-bottom:2.5rem;font-variant-numeric:tabular-nums}
.price .cur{font-size:.45em;vertical-align:.85em;margin-right:.08em;color:#AEB4BD;letter-spacing:0}
.plan-top .btn{background:#fff;color:var(--ink);box-shadow:0 1px 2px rgba(0,0,0,.25)}
.plan-top .btn:hover{background:#EEF0F3}
.plan-top :focus-visible{outline-color:#7FE0BC}
.ticks{padding:.75rem 1.75rem}
.ticks li{display:flex;flex-direction:column;padding:.85rem 0;border-bottom:1px solid var(--line)}
.ticks li:last-child{border-bottom:0}
.ticks span{font-size:.8125rem;color:var(--mute)}
.ticks strong{font-weight:500;font-size:.96875rem;letter-spacing:-.01em}

/* about */
.about{display:grid;grid-template-columns:repeat(12,1fr);gap:2rem}
.about>div:first-child{grid-column:1/span 4}
.about-body{grid-column:6/-1}
.about-body .big{font-size:clamp(1.3rem,2vw,1.6rem);line-height:1.45;font-weight:500;letter-spacing:-.025em}
.about-body .big span{color:var(--mute)}
.about-body p:not(.big){margin-top:1.25rem;color:var(--mute)}

/* cta */
.cta{position:relative;text-align:center;background:var(--ink);color:#fff;border-radius:22px;padding:clamp(3.5rem,8vw,6rem) var(--pad);overflow:hidden;background-image:radial-gradient(120% 80% at 50% 0%,rgba(31,157,85,.16),transparent 60%)}
.cta::before{content:"";position:absolute;inset:0;border-radius:inherit;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);pointer-events:none}
.cta-h{font-size:clamp(2.25rem,5vw,4rem);font-weight:600;letter-spacing:-.045em;line-height:1.02;max-width:16ch;margin:0 auto}
.cta p{margin:1.25rem auto 0;max-width:42ch;color:#B9BFC8;font-size:1.0625rem}
.cta .actions{margin-top:2rem}

.ftr{font-size:.875rem;color:var(--mute)}
.ftr-in{display:flex;justify-content:space-between;gap:1rem;padding-block:2rem 2.5rem}
.ftr a:hover{color:var(--ink)}

.js .reveal{opacity:0;transform:translateY(10px);filter:blur(4px);transition:opacity .8s var(--ease),transform .8s var(--ease),filter .8s var(--ease)}
.js .reveal.in{opacity:1;transform:none;filter:none}

@media (max-width:1024px){
  .display{grid-column:1/-1}
  .hero-side{grid-column:1/span 9}
  .cards{grid-template-columns:1fr 1fr}
  .card-feat>a{grid-template-columns:1fr}
  .card-feat .card-media{padding:1.5rem 1.5rem 0;border-radius:var(--r) var(--r) 0 0}
  .card-feat .frame{border-radius:10px 10px 0 0}
  .card-feat .card-body{border-left:0;border-top:1px solid var(--line);padding:1.5rem}
  .steps{grid-template-columns:1fr 1fr}
  .steps li:nth-child(3){border-left:0}
  .steps li:nth-child(n+3){border-top:1px solid var(--line)}
  .offer-copy,.plan{grid-column:1/-1}
  .about>div:first-child,.about-body{grid-column:1/-1}
  .sec-head .h2,.sec-note{grid-column:1/-1;justify-self:start}.sec-note{margin-top:1rem}
}
@media (max-width:760px){
  :root{--hdr:3.75rem}
  .dnav{display:none}.menu-btn{display:inline-flex}
  .hero-side{grid-column:1/-1}
  .hero-grid{gap:1.5rem;margin-top:1.5rem}
  .avail{border-radius:12px;align-items:flex-start;line-height:1.45}.pulse{margin-top:.35em}
  .stats{grid-template-columns:1fr 1fr}
  .stats div:nth-child(3){border-left:0}
  .stats div:nth-child(n+3){border-top:1px solid var(--line)}
  .stats div{padding:1.1rem 1.25rem}
  .cards{grid-template-columns:1fr;gap:1rem}
  .steps{grid-template-columns:1fr}
  .steps li{border-left:0!important}.steps li+li{border-top:1px solid var(--line)}
  .steps h3{margin-top:1.25rem}
  .plan{grid-template-columns:1fr}
  .actions .btn{flex:1 1 100%}
  .cta{border-radius:16px}
  .ftr-in{flex-direction:column}
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation:none!important;transition:none!important}
  .js .reveal{opacity:1;transform:none;filter:none}
}
/* work: frame is the card */
.card,.card:hover{border:0;background:none;box-shadow:none;transform:none}
.card>a{border-radius:12px}
.card-media,.card-feat .card-media{padding:0;background:none;border-radius:0;overflow:visible}
.frame,.card-feat .frame{border-radius:12px;border:1px solid rgba(11,13,16,.1);box-shadow:var(--shadow);transition:transform .45s var(--ease),box-shadow .45s var(--ease)}
.frame.on-dark{border-color:rgba(11,13,16,.85)}
.card:hover .frame,.card>a:focus-visible .frame{transform:translateY(-4px);box-shadow:var(--shadow-lg)}
.card>a:focus-visible{outline:none}
.card>a:focus-visible .frame{outline:2px solid var(--accent);outline-offset:4px}
.card-body,.card-feat .card-body{border:0;padding:1.1rem .1rem 0}
.card-feat>a{grid-template-columns:7fr 4fr;gap:clamp(1.5rem,3vw,3rem);align-items:end}
.card-feat .card-body{padding:0 0 .5rem}
.cards{row-gap:2.75rem;column-gap:1.75rem}
.card-no{color:var(--mute);margin-right:.6rem;font-variant-numeric:tabular-nums}
.card-kind{display:flex}
@media (max-width:1024px){.card-feat>a{grid-template-columns:1fr;gap:0}.card-feat .card-body{padding:1.1rem .1rem 0}}
@media (max-width:760px){.cards{row-gap:2.25rem}}
/* work: frame + text panel as one card */
.card{border:1px solid var(--line-2);border-radius:12px;background:var(--white);box-shadow:var(--shadow);overflow:hidden;transition:transform .45s var(--ease),box-shadow .45s var(--ease)}
.card:hover,.card:has(>a:focus-visible){transform:translateY(-4px);box-shadow:var(--shadow-lg)}
.card>a{border-radius:12px}
.frame,.card-feat .frame{border:0;border-radius:0;box-shadow:none;transform:none!important}
.card:hover .frame,.card>a:focus-visible .frame{transform:none;box-shadow:none;outline:none}
.card:has(>a:focus-visible){outline:2px solid var(--accent);outline-offset:4px}
.card-body{padding:1.1rem 1.25rem 1.25rem;border-top:1px solid var(--line)}
.card-feat>a{grid-template-columns:7fr 4fr;gap:0;align-items:stretch}
.card-feat .card-body{padding:2rem;border-top:0;border-left:1px solid var(--line);align-items:flex-end}
.cards{row-gap:1.5rem;column-gap:1.5rem}
@media (max-width:1024px){.card-feat>a{grid-template-columns:1fr}.card-feat .card-body{padding:1.25rem;border-left:0;border-top:1px solid var(--line)}}
@media (max-width:760px){.cards{row-gap:1.25rem}}
/* hover fix: reveal rules (.js .reveal.in {transform:none}) outranked .card:hover, so the lift never applied */
.brand{gap:0}
.js .card.reveal{transition:opacity .8s var(--ease),filter .8s var(--ease),transform .4s var(--ease),box-shadow .4s var(--ease),border-color .4s var(--ease)}
.js .card.reveal.in,.card{transform:translateZ(0)}
.card{will-change:transform;isolation:isolate}
.card:hover .frame img,.card .frame img{transform:none}
.js .card.reveal.in:hover,.card:hover{transform:translateZ(0)}
@media (hover:hover) and (pointer:fine){
  .js .card.reveal.in:hover,.card:hover{transform:translate3d(0,-4px,0);box-shadow:0 1px 1px rgba(11,13,16,.04),0 10px 20px -6px rgba(11,13,16,.10),0 28px 56px -24px rgba(11,13,16,.24);border-color:#CDD1D8}
  .card:hover .go{background:var(--ink);border-color:var(--ink);color:#fff}
}
@media (hover:none){.card:hover .go{background:none;border-color:var(--line);color:var(--mute)}}
.js .card.reveal.in:has(>a:focus-visible){transform:translate3d(0,-4px,0)}
@media (prefers-reduced-motion:reduce){.js .card.reveal.in:hover,.card:hover,.js .card.reveal.in:has(>a:focus-visible){transform:none}}
/* simple hover (final) */
.js .card.reveal{transition:opacity .8s var(--ease),filter .8s var(--ease),transform .45s cubic-bezier(.2,.7,.2,1),box-shadow .45s cubic-bezier(.2,.7,.2,1)}
.card{will-change:auto;transform:none}
.js .card.reveal.in,.js .card.reveal.in:hover,.card:hover{transform:none;border-color:var(--line-2)}
.card .go,.card:hover .go{background:none;border-color:var(--line);color:var(--mute);transition:none}
.card:hover h3{text-decoration:none}
@media (hover:hover) and (pointer:fine){
  .js .card.reveal.in:hover,.card:hover{transform:translateY(-2px);box-shadow:0 1px 1px rgba(11,13,16,.04),0 6px 14px -6px rgba(11,13,16,.10),0 20px 40px -20px rgba(11,13,16,.18);border-color:var(--line-2)}
  .card:hover .go{background:none;border-color:var(--line);color:var(--mute)}
}
.js .card.reveal.in:has(>a:focus-visible){transform:translateY(-2px);box-shadow:0 1px 1px rgba(11,13,16,.04),0 6px 14px -6px rgba(11,13,16,.10),0 20px 40px -20px rgba(11,13,16,.18)}
@media (prefers-reduced-motion:reduce){.js .card.reveal.in:hover,.card:hover,.js .card.reveal.in:has(>a:focus-visible){transform:none}}

/* final project hover: one motion (lift only), border always kept */
.card,.card:hover,.js .card.reveal.in:hover,.card:has(>a:focus-visible){border:1px solid var(--line-2);box-shadow:var(--shadow)}
.js .card.reveal{transition:opacity .8s var(--ease),filter .8s var(--ease),transform .5s cubic-bezier(.2,.7,.2,1)}
.card{transition:transform .5s cubic-bezier(.2,.7,.2,1)}
@media (hover:hover){.js .card.reveal.in:hover,.card:hover{transform:translateY(-3px)}}
.js .card.reveal.in:has(>a:focus-visible){transform:translateY(-3px)}
@media (prefers-reduced-motion:reduce){.js .card.reveal.in:hover,.card:hover,.js .card.reveal.in:has(>a:focus-visible){transform:none}}
/* linear, constant-speed hover (same in and out) */
.js .card.reveal{transition:opacity .8s var(--ease),filter .8s var(--ease),transform .3s linear}
.card,.card:hover,.js .card.reveal.in:hover{transition:transform .3s linear}
.js .card.reveal.in{transition:opacity .8s var(--ease),filter .8s var(--ease),transform .3s linear}
/* faster, larger lift */
.js .card.reveal,.js .card.reveal.in{transition:opacity .8s var(--ease),filter .8s var(--ease),transform .18s linear}
.card,.card:hover,.js .card.reveal.in:hover{transition:transform .18s linear}
@media (hover:hover){.js .card.reveal.in:hover,.card:hover{transform:translateY(-8px)}}
.js .card.reveal.in:has(>a:focus-visible){transform:translateY(-8px)}
@media (prefers-reduced-motion:reduce){.js .card.reveal.in:hover,.card:hover,.js .card.reveal.in:has(>a:focus-visible){transform:none}}
/* revert hover movement to pre-"frame as box" behavior: card itself doesn't move; screenshot zooms slightly */
.js .card.reveal,.js .card.reveal.in{transition:opacity .8s var(--ease),filter .8s var(--ease)}
.card,.card:hover,.js .card.reveal.in:hover,.js .card.reveal.in:has(>a:focus-visible){transform:none!important;transition:none}
.card .frame img{transition:transform .8s var(--ease)}
.card:hover .frame img{transform:scale(1.015)}
@media (prefers-reduced-motion:reduce){.card:hover .frame img{transform:none}}
/* arrow square fills when the card is hovered/focused */
.card .go{transition:background-color .25s var(--ease),border-color .25s var(--ease),color .25s var(--ease)}
.card:hover .go,.card>a:focus-visible .go{background:var(--ink);border-color:var(--ink);color:#fff}
@media (hover:none){.card:hover .go{background:none;border-color:var(--line);color:var(--mute)}}
/* subtle grey arrow square on card hover */
.card:hover .go,.card>a:focus-visible .go{background:#EEF0F3;border-color:var(--line-2);color:var(--ink)}

/* ===== Project card hover v2 (final) =====
   Lift + deeper soft shadow, border kept and slightly darker,
   screenshot eases in a touch, arrow square goes light grey and the arrow nudges up-right. */
.card,.js .card.reveal.in{transition:opacity .8s var(--ease),filter .8s var(--ease),transform .28s cubic-bezier(.2,.8,.2,1),box-shadow .28s cubic-bezier(.2,.8,.2,1),border-color .28s ease!important}
.card,.card:hover{border:1px solid var(--line-2)}
.card .frame img{transition:transform .6s cubic-bezier(.2,.8,.2,1)}
.card .go{transition:background-color .2s ease,border-color .2s ease,color .2s ease}
.card .go svg,.card .go>*{transition:transform .28s cubic-bezier(.2,.8,.2,1)}
@media (hover:hover){
  .card:hover,.js .card.reveal.in:hover{transform:translateY(-6px)!important;box-shadow:0 2px 4px rgba(11,13,16,.04),0 18px 36px -16px rgba(11,13,16,.22);border-color:#CDD1D8}
  .card:hover .frame img{transform:scale(1.025)}
  .card:hover .go{background:#EEF0F3;border-color:var(--line-2);color:var(--ink)}
  .card:hover .go svg,.card:hover .go>*{transform:translate(2px,-2px)}
}
.card:has(>a:focus-visible){transform:translateY(-6px)!important;border-color:#CDD1D8}
.card>a:focus-visible .go{background:#EEF0F3;border-color:var(--line-2);color:var(--ink)}
@media (hover:none){.card:hover .go{background:none;border-color:var(--line);color:var(--mute)}}
@media (prefers-reduced-motion:reduce){
  .card:hover,.js .card.reveal.in:hover,.card:has(>a:focus-visible){transform:none!important}
  .card:hover .frame img,.card:hover .go svg,.card:hover .go>*{transform:none}
}
/* hover timing: a little slower */
.card,.js .card.reveal.in{transition:opacity .8s var(--ease),filter .8s var(--ease),transform .4s cubic-bezier(.2,.8,.2,1),box-shadow .4s cubic-bezier(.2,.8,.2,1),border-color .4s ease!important}
.card .go svg,.card .go>*{transition:transform .4s cubic-bezier(.2,.8,.2,1)}
.card .go{transition:background-color .3s ease,border-color .3s ease,color .3s ease}
.card .frame img{transition:transform .8s cubic-bezier(.2,.8,.2,1)}
/* even, constant-speed hover: same near-linear curve and duration for every part */
.card,.js .card.reveal.in{transition:opacity .8s var(--ease),filter .8s var(--ease),transform .4s cubic-bezier(.35,.3,.65,.7),box-shadow .4s cubic-bezier(.35,.3,.65,.7),border-color .4s cubic-bezier(.35,.3,.65,.7)!important}
.card .frame img,.card .go svg,.card .go>*{transition:transform .4s cubic-bezier(.35,.3,.65,.7)}
.card .go{transition:background-color .4s cubic-bezier(.35,.3,.65,.7),border-color .4s cubic-bezier(.35,.3,.65,.7),color .4s cubic-bezier(.35,.3,.65,.7)}
/* even hover, slightly faster */
.card,.js .card.reveal.in{transition:opacity .8s var(--ease),filter .8s var(--ease),transform .3s cubic-bezier(.35,.3,.65,.7),box-shadow .3s cubic-bezier(.35,.3,.65,.7),border-color .3s cubic-bezier(.35,.3,.65,.7)!important}
.card .frame img,.card .go svg,.card .go>*{transition:transform .3s cubic-bezier(.35,.3,.65,.7)}
.card .go{transition:background-color .3s cubic-bezier(.35,.3,.65,.7),border-color .3s cubic-bezier(.35,.3,.65,.7),color .3s cubic-bezier(.35,.3,.65,.7)}
/* even hover, faster */
.card,.js .card.reveal.in{transition:opacity .8s var(--ease),filter .8s var(--ease),transform .2s cubic-bezier(.35,.3,.65,.7),box-shadow .2s cubic-bezier(.35,.3,.65,.7),border-color .2s cubic-bezier(.35,.3,.65,.7)!important}
.card .frame img,.card .go svg,.card .go>*{transition:transform .2s cubic-bezier(.35,.3,.65,.7)}
.card .go{transition:background-color .2s cubic-bezier(.35,.3,.65,.7),border-color .2s cubic-bezier(.35,.3,.65,.7),color .2s cubic-bezier(.35,.3,.65,.7)}
/* no screenshot zoom on card hover */
.card .frame img,.card:hover .frame img{transform:none!important}

/* desktop: menu jumps land the section top exactly at the header bottom edge (header = --hdr + 1px border) */
@media (min-width:761px){html{scroll-padding-top:calc(var(--hdr) + 1px)}}
/* all widths: section top meets header bottom edge */
html{scroll-padding-top:calc(var(--hdr) + 1px)}
/* section top line sits exactly under the header border line (overlap, not stacked) */
html{scroll-padding-top:var(--hdr)}
/* Upwork trust row (non-interactive) */
.hero-meta{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem 1rem}
.trust{display:inline-flex;flex-wrap:wrap;align-items:center;gap:.6rem .75rem;font-size:.8125rem;font-weight:500;color:#3D434C;cursor:default}
.tr-up{display:inline-flex;align-items:center;gap:.35rem;color:#108A00;font-weight:600;letter-spacing:-.01em}
.tr-up span{color:#0B0D10}
.tr-sep{width:1px;height:.9rem;background:#D9DCE2}
.tr-stars{display:inline-flex;align-items:center;gap:.4rem}
.stars{display:inline-flex;gap:1px;color:#F2A100}
.stars svg{display:block}
.tr-score{font-variant-numeric:tabular-nums;color:#0B0D10}
.badge-rt{display:inline-flex;align-items:center;gap:.35rem;padding:.2rem .55rem .2rem .45rem;border-radius:999px;background:#EAF6E6;color:#0E6B00;font-size:.75rem;font-weight:600;box-shadow:inset 0 0 0 1px rgba(16,138,0,.18)}
.trust-dark{justify-content:center;margin-top:1.5rem;color:#B9BFC8;width:100%}
.trust-dark .tr-up{color:#6FDA44}.trust-dark .tr-up span,.trust-dark .tr-score{color:#fff}
.trust-dark .tr-sep{background:rgba(255,255,255,.2)}
.trust-dark .badge-rt{background:rgba(111,218,68,.12);color:#9BE77A;box-shadow:inset 0 0 0 1px rgba(111,218,68,.3)}
@media (max-width:760px){.hero-meta{gap:.75rem}.trust{gap:.5rem .65rem}}
/* official Upwork wordmark (Wikimedia Commons "Upwork logo (2026).svg") */
.tr-up{color:#14A800}
.uw-logo{display:block;height:15px;width:auto}
.trust-dark .tr-up{color:#FFFFFF}
/* Rising Talent: image badge + plain title; Upwork logo black on white */
.badge-rt{padding:0;background:none;box-shadow:none;border-radius:0;gap:.4rem;color:inherit;font-weight:500}
.badge-rt img{display:block;width:auto;height:20px}
.trust-dark .badge-rt{background:none;box-shadow:none;color:inherit}
.tr-up{color:#0B0D10}
.trust-dark .tr-up{color:#FFFFFF}
/* Rising Talent text at full strength */
.badge-rt{color:#0B0D10;opacity:1}
.trust-dark .badge-rt{color:#FFFFFF;opacity:1}

.card .frame{padding-top:0 !important}
.card .frame img{border-radius:0 !important}

/* Green text now matches the project number color */
.eyebrow, .card-kind { color: var(--mute) !important; }

/* Slightly less space between intro and Work */
#work { padding-top: clamp(3.5rem, 7vw, 6rem) !important; }

/* Mobile menu open: solid white top bar */
body.menu-open .hdr { background: #fff !important; -webkit-backdrop-filter: none !important; backdrop-filter: none !important; }
/* ===== reveal on scroll (final) =====
   12px rise + fade, .6s, cubic-bezier(.25,.1,.25,1) (CSS "ease"-like, even decel, no snap).
   .done is added after the reveal so the card hover keeps its own 0.2s transition. */
.js .reveal{opacity:0;transform:translate3d(0,12px,0);filter:none;transition:opacity .9s cubic-bezier(.25,.1,.25,1),transform .9s cubic-bezier(.25,.1,.25,1)}
.js .reveal.in{opacity:1;transform:none}
.js .reveal.now{transition:none!important}
.js .card.reveal:not(.in){transform:translate3d(0,12px,0)!important}
.js .card.reveal.in:not(.done){transform:none!important;transition:opacity .9s cubic-bezier(.25,.1,.25,1),transform .9s cubic-bezier(.25,.1,.25,1)!important}
.js .card.reveal.done{transition:transform .2s cubic-bezier(.35,.3,.65,.7),box-shadow .2s cubic-bezier(.35,.3,.65,.7),border-color .2s cubic-bezier(.35,.3,.65,.7)!important}
@media (prefers-reduced-motion:reduce){.js .reveal,.js .card.reveal:not(.in){opacity:1;transform:none!important;transition:none!important}}
