:root{--bg:#f5f5f2;--surface:#ebebe6;--surface-2:#e0e0da;--paper:#fff;--ink:#121211;--muted:#595954;--accent:#ff6a1f;--accent-ink:#121211;--accent-text:#c2410c;--m:clamp(20px, 4vw, 48px);--max:1240px;--section:clamp(72px, 9vw, 120px);--ease:cubic-bezier(.2, .7, .2, 1);--small:15px;--lead:clamp(21px, 1.1rem + .5vw, 25px);--title:clamp(30px, 3vw, 42px);--heading:clamp(36px, 4.6vw, 64px);--display:clamp(56px, 10.5vw, 156px)}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;scroll-padding-top:88px}body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;font:400 clamp(17px,1rem + .2vw,19px)/1.55 General Sans,system-ui,sans-serif}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0}img{max-width:100%;display:block}ol,ul{list-style:none}h1,h2,h3{letter-spacing:-.035em;font-weight:600;line-height:1}h2{font-size:var(--heading)}::selection{background:var(--accent);color:var(--accent-ink)}:focus-visible{outline:2px solid var(--accent-text);outline-offset:3px;border-radius:4px}.wrap{max-width:var(--max);padding:0 var(--m);margin:0 auto}.skip{z-index:50;background:var(--ink);color:var(--bg);border-radius:999px;padding:10px 16px;position:absolute;top:-60px;left:12px}.skip:focus{top:12px}header{z-index:20;background:var(--bg);position:sticky;top:0}header .wrap{align-items:center;gap:32px;height:72px;display:flex}.wordmark{letter-spacing:-.03em;margin-right:auto;font-weight:600}header nav{font-size:var(--small);gap:28px;display:flex}header nav a{color:var(--muted);transition:color .2s}header nav a:hover,header nav a.active{color:var(--ink)}.btn{background:var(--accent);height:48px;color:var(--accent-ink);font-weight:500;font-size:var(--small);transition:transform .25s var(--ease), background .2s;border-radius:999px;align-items:center;gap:10px;padding:0 22px;display:inline-flex}.btn:hover{transform:translateY(-2px)}.btn:active{transform:translateY(0)scale(.98)}.btn.ghost{background:var(--surface-2);color:var(--ink)}.btn.ghost:hover{background:var(--ink);color:var(--bg)}.btn.small{height:40px;padding:0 18px}.arrow{width:16px;height:16px;transition:transform .25s var(--ease);flex:none}a:hover>.arrow,.btn:hover .arrow{transform:translate(3px)}.hero{padding-top:clamp(12px,2vw,28px)}.hero h1{font-size:var(--display);letter-spacing:-.05em;line-height:.9}.hero-body{grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:56px;margin-top:clamp(24px,3vw,40px);display:grid}.lead{font-size:var(--lead);letter-spacing:-.01em;max-width:52ch;line-height:1.4}.lead em{color:var(--accent-text);font-style:normal}.actions{flex-wrap:wrap;justify-content:flex-end;gap:12px;display:flex}.now{font-size:var(--small);color:var(--muted);text-align:right;margin-top:20px}.stats{grid-template-columns:repeat(4,1fr);gap:32px;margin-top:clamp(48px,6vw,80px);display:grid}.stat b{letter-spacing:-.03em;font-size:clamp(24px,2.2vw,32px);font-weight:600;line-height:1.1;display:block}.stat span{font-size:var(--small);color:var(--muted);max-width:30ch;margin-top:10px;display:block}section{padding-top:var(--section)}.head{justify-content:space-between;align-items:end;gap:32px;margin-bottom:40px;display:flex}.head p{max-width:38ch;color:var(--muted)}.project{background:var(--surface);border-radius:20px;margin-bottom:10px;transition:background .3s}.project:hover,.project.open{background:var(--surface-2)}.row{text-align:left;grid-template-columns:1.1fr 1.6fr auto;align-items:center;gap:32px;width:100%;padding:28px 32px;display:grid}.row h3{font-size:var(--title)}.row .tag{font-size:var(--small);color:var(--muted);margin-top:8px;display:block}.row p{max-width:46ch}.plus{background:var(--bg);width:44px;height:44px;transition:transform .4s var(--ease), background .3s;border-radius:50%;place-items:center;display:grid}.plus svg{width:16px;height:16px}.row:hover .plus{transform:scale(1.08)}.project.open .plus{background:var(--accent);transform:rotate(45deg)}.detail{transition:grid-template-rows .55s var(--ease);grid-template-rows:0fr;display:grid}.project.open .detail{grid-template-rows:1fr}.detail>div{overflow:hidden}.detail-inner{grid-template-columns:1fr 1fr;gap:32px;padding:0 32px 32px;display:grid}.gallery{grid-template-columns:1fr 1fr;align-content:start;gap:10px;display:grid}.shot{background:var(--paper);cursor:zoom-in;border-radius:12px;position:relative;overflow:hidden}.shot img{aspect-ratio:4/3;object-fit:cover;width:100%;transition:transform .6s var(--ease)}.shot:hover img{transform:scale(1.03)}.shot.wide{grid-column:1/-1}.shot.wide img{aspect-ratio:2.1}.gallery.phones{grid-template-columns:repeat(3,1fr)}.gallery.phones .shot img{aspect-ratio:9/18.6;object-position:top}.more{color:#fff;background:#1212118c;place-items:center;font-weight:500;display:grid;position:absolute;inset:0}.gallery figcaption{font-size:var(--small);color:var(--muted);grid-column:1/-1}.facts h4{font-weight:500;font-size:var(--small);color:var(--muted);margin-bottom:6px}.facts>p,.facts ul{margin-bottom:24px}.facts ul{gap:8px;display:grid}.facts li{padding-left:20px;position:relative}.facts li:before{content:"";background:var(--accent);width:8px;height:2px;position:absolute;top:.72em;left:0}.facts .small{font-size:var(--small);color:var(--muted)}.project-actions{flex-wrap:wrap;gap:8px;display:flex}.chip{background:var(--bg);height:40px;font-size:var(--small);border-radius:999px;align-items:center;gap:8px;padding:0 16px;font-weight:500;transition:background .2s,color .2s;display:inline-flex}.chip:hover,.chip[aria-expanded=true]{background:var(--ink);color:var(--bg)}.tech{background:var(--bg);animation:rise .45s var(--ease);border-radius:14px;grid-template-columns:1.3fr 1fr;gap:40px;margin:0 32px 32px;padding:28px 32px;display:grid}.tech dl{gap:14px;display:grid}.tech dt{font-size:var(--small);color:var(--muted)}.tech dd{font-size:16px}.tech>*{min-width:0}.table-wrap{align-self:start;overflow-x:auto}.tech table{border-collapse:collapse;width:100%;font-size:var(--small);align-self:start}.tech caption{text-align:left;color:var(--muted);padding-bottom:8px}.tech th{text-align:left;border-bottom:1px solid var(--surface-2);padding:8px 10px 8px 0;font-weight:500}.tech td{border-bottom:1px solid var(--surface);vertical-align:top;padding:8px 10px 8px 0}@keyframes rise{0%{opacity:0;transform:translateY(10px)}}.preview{z-index:30;pointer-events:none;position:fixed;top:0;left:0}.preview>div{aspect-ratio:4/3;background:var(--paper);opacity:0;width:300px;transition:opacity .25s, transform .35s var(--ease);border-radius:14px;margin:-112px 0 0 -150px;overflow:hidden;transform:scale(.85)}.preview>div.show{opacity:1;transform:scale(1)}.preview img{object-fit:cover;object-position:top;width:100%;height:100%}.lead-grid{grid-template-columns:1fr 1.3fr;align-items:start;gap:64px;display:grid}.lead-grid>div>p{max-width:42ch;margin-top:24px}.link{color:var(--accent-text);align-items:center;gap:8px;margin-top:20px;font-weight:500;display:inline-flex}.steps{grid-template-columns:repeat(3,1fr);align-items:end;gap:10px;display:grid}.step{background:var(--surface);transition:transform .3s var(--ease);border-radius:20px;flex-direction:column;padding:24px;display:flex}.step:hover{transform:translateY(-4px)}.step:first-child{min-height:250px}.step:nth-child(2){min-height:320px}.step:nth-child(3){background:var(--accent);min-height:390px;color:var(--accent-ink)}.step .when{font-size:var(--small);opacity:.8}.step h3{font-size:var(--lead);letter-spacing:-.025em;margin-top:6px;line-height:1.1}.step p{font-size:var(--small);margin-top:auto;padding-top:24px;line-height:1.45}.rows{gap:6px;display:grid}.skill,.job{grid-template-columns:1.1fr 1.6fr .6fr;align-items:baseline;gap:32px;padding:22px 0;display:grid}.skill h3{font-size:var(--title)}.skill .tools,.job .date{font-size:var(--small);color:var(--muted);text-align:right}.job h3{font-size:var(--lead);letter-spacing:-.02em;line-height:1.2}.job h3 span{font-weight:400;font-size:var(--small);color:var(--muted);letter-spacing:0;margin-top:4px;display:block}.job .date{font-variant-numeric:tabular-nums}.about{grid-template-columns:1fr 1.3fr;gap:64px;display:grid}.about p{font-size:var(--lead);letter-spacing:-.01em;line-height:1.45}.about p+p{margin-top:20px}.langs{flex-wrap:wrap;gap:10px;margin-top:28px;display:flex}.langs span{background:var(--surface);font-size:var(--small);border-radius:999px;padding:8px 16px}.contact{margin-top:var(--section);background:var(--surface);border-radius:28px;padding:clamp(40px,6vw,80px)}.contact h2{font-size:var(--display);letter-spacing:-.05em}.contact p{max-width:46ch;font-size:var(--lead);margin-top:20px;line-height:1.4}.contact .actions{justify-content:flex-start;margin-top:32px}footer .wrap{font-size:var(--small);color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:20px;padding-top:32px;padding-bottom:40px;display:flex}footer nav{flex-wrap:wrap;gap:20px;display:flex}footer a:hover{color:var(--ink)}.overlay{z-index:60;background:#121211d1;place-items:center;padding:24px;animation:.25s fade;display:grid;position:fixed;inset:0}@keyframes fade{0%{opacity:0}}.round{background:var(--paper);width:48px;height:48px;color:var(--ink);border-radius:50%;place-items:center;transition:transform .2s;display:grid;position:absolute}.round:hover{transform:scale(1.06)}.round svg{width:18px;height:18px}.round.close{top:20px;right:20px}.round.close svg{transform:rotate(45deg)}.lightbox figure{max-width:min(1400px,92vw);animation:rise .35s var(--ease)}.lightbox img{background:var(--paper);border-radius:12px;width:auto;max-height:80vh;margin:0 auto}.lightbox figcaption{color:#f2f2f0;font-size:var(--small);justify-content:space-between;gap:24px;margin-top:14px;display:flex}.lightbox .count{color:#b8b8b2;white-space:nowrap}.lightbox .prev{top:50%;left:20px;translate:0 -50%}.lightbox .next{top:50%;right:20px;translate:0 -50%}.cv .sheet{background:var(--paper);width:min(1000px,100%);height:min(90vh,1200px);animation:rise .35s var(--ease);border-radius:18px;flex-direction:column;display:flex;overflow:hidden}.sheet-bar{align-items:center;gap:16px;padding:14px 16px 14px 24px;display:flex}.sheet-bar strong{margin-right:auto;font-weight:600}.sheet-bar .round{background:var(--surface);position:static}.cv iframe{background:var(--surface);border:0;flex:1;width:100%}.reveal{opacity:0;transition:opacity .8s var(--ease), transform .8s var(--ease);transition-delay:var(--d,0s);transform:translateY(24px)}.reveal.in{opacity:1;transform:none}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.reveal{opacity:1;transition:none;transform:none}*,:before,:after{transition-duration:0s!important;animation:none!important}}@media (scripting:none){.reveal{opacity:1;transform:none}}@media (width<=900px){header nav{display:none}.hero-body,.lead-grid,.about,.detail-inner,.tech{grid-template-columns:1fr;gap:32px}.actions{justify-content:flex-start}.now{text-align:left}.stats{grid-template-columns:1fr 1fr;gap:28px 20px}.row{grid-template-columns:1fr auto;gap:16px;padding:22px}.row p{grid-area:2/1/auto/-1}.detail-inner{padding:0 22px 22px}.tech{margin:0 22px 22px;padding:22px}.steps{grid-template-columns:1fr}.step{min-height:0!important}.step p{padding-top:16px}.skill,.job{grid-template-columns:1fr;gap:6px;padding:18px 0}.rows{gap:10px}.skill .tools,.job .date{text-align:left}.head{flex-direction:column;align-items:start;gap:16px;margin-bottom:24px}.lightbox .prev,.lightbox .next{top:auto;bottom:20px;translate:none}.lightbox .prev{left:calc(50% - 58px)}.lightbox .next{right:calc(50% - 58px)}}@media (width<=420px){.gallery.phones{grid-template-columns:1fr 1fr}.gallery.phones .shot:nth-child(3){display:none}}
