:root{--accent-h: 155;--bg: oklch(98% .003 262);--bg-raised: oklch(100% 0 0);--ink: oklch(20% .015 262);--ink-soft: oklch(38% .018 262);--ink-mute: oklch(46% .02 262);--line: oklch(90% .006 262);--accent: oklch(48% .21 var(--accent-h));--accent-bright: oklch(42% .21 var(--accent-h));--accent-ink: oklch(99% 0 0);--accent-wash: oklch(95% .02 var(--accent-h));--gh-0: oklch(93% .005 262);--gh-1: oklch(85% .08 var(--accent-h));--gh-2: oklch(72% .14 var(--accent-h));--gh-3: oklch(58% .18 var(--accent-h));--gh-4: oklch(47% .21 var(--accent-h));--link-ink: oklch(42% .21 var(--accent-h));--text-sm: .8125rem;--text-base: 1rem;--text-lg: 1.25rem;--text-xl: 1.5625rem;--text-2xl: clamp(1.625rem, 3.5vw, 2rem);--text-hero: clamp(2.25rem, 5.5vw, 3.75rem);--section-pad: clamp(5rem, 12vh, 9rem);--gutter: clamp(1.5rem, 5vw, 4rem);--z-nav: 100}*{margin:0;padding:0;box-sizing:border-box;border-color:var(--line)}html{scroll-behavior:smooth;color-scheme:light}html{background-color:var(--bg)}body{background-color:transparent;background-image:radial-gradient(ellipse 60% 45% at 100% 0%,oklch(95% .02 var(--accent-h) / .5) 0%,transparent 55%),radial-gradient(ellipse 55% 42% at 0% 100%,oklch(95% .018 var(--accent-h) / .42) 0%,transparent 55%);background-attachment:fixed;color:var(--ink);font-family:Schibsted Grotesk,system-ui,sans-serif;font-size:var(--text-base);line-height:1.6;-webkit-font-smoothing:antialiased}#bg-net{position:fixed;inset:0;z-index:-1;width:100%;height:100%;pointer-events:none}::-moz-selection{background:var(--accent);color:var(--accent-ink)}::selection{background:var(--accent);color:var(--accent-ink)}[data-theme=dark]{--bg: oklch(17% .012 264);--bg-raised: oklch(22% .016 264);--ink: oklch(96% .005 264);--ink-soft: oklch(80% .012 264);--ink-mute: oklch(64% .014 264);--line: oklch(33% .014 264);--accent-wash: oklch(34% .07 var(--accent-h));--gh-0: oklch(27% .008 264);--gh-1: oklch(40% .09 var(--accent-h));--gh-2: oklch(52% .14 var(--accent-h));--gh-3: oklch(64% .17 var(--accent-h));--gh-4: oklch(76% .18 var(--accent-h));--link-ink: oklch(74% .16 var(--accent-h))}[data-theme=dark] body{background-image:radial-gradient(ellipse 65% 55% at calc(100% - var(--sy) * 30%) calc(4% + var(--sy) * 34%),oklch(52% .16 var(--accent-h) / calc(.18 + var(--sy) * .28)) 0%,transparent 60%),radial-gradient(ellipse 62% 52% at calc(var(--sy) * 32%) calc(94% - var(--sy) * 32%),oklch(50% .15 calc(var(--accent-h) + 55) / calc(.16 + var(--sy) * .28)) 0%,transparent 60%),radial-gradient(ellipse 85% 62% at 50% calc(125% - var(--sy) * 75%),oklch(55% .15 calc(var(--accent-h) - 42) / calc(var(--sy) * .34)) 0%,transparent 64%)}[data-theme=dark] .hero{background:transparent}[data-theme=dark] .navbar.scrolled{background-color:#0d0f15d9}[data-theme=dark] .project-card.featured p{color:oklch(90% .04 var(--accent-h))}[data-motion=calm] .project-card:hover,[data-motion=calm] .cta-button:active,[data-motion=calm] .form-submit:active{transform:none}[data-motion=lively] .project-card:hover{transform:translateY(-8px)}[data-motion=lively] .project-card{transition:border-color .25s,box-shadow .25s,transform .35s cubic-bezier(.34,1.56,.64,1)}@media(prefers-reduced-motion:no-preference){[data-motion=lively] .hero-photo{animation:photoIn .8s cubic-bezier(.22,1,.36,1) .3s both,floatY 5s ease-in-out 1.2s infinite}}@keyframes floatY{0%,to{translate:0 0}50%{translate:0 -10px}}a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--accent-bright);outline-offset:3px;border-radius:2px}h1,h2,h3{text-wrap:balance}p{text-wrap:pretty}section{padding:var(--section-pad) var(--gutter);max-width:1160px;margin:0 auto}section h2{font-size:var(--text-2xl);font-weight:800;letter-spacing:-.025em;line-height:1.1;margin-bottom:clamp(2rem,5vh,3.5rem);color:var(--ink)}.navbar{position:fixed;top:0;width:100%;background-color:transparent;border-bottom:1px solid transparent;z-index:var(--z-nav);padding:1.1rem var(--gutter);transition:background-color .3s ease,border-color .3s ease,padding .3s ease}.navbar.scrolled{background-color:#f7f8fad9;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom-color:var(--line);padding-top:.8rem;padding-bottom:.8rem}.navbar-inner{display:flex;align-items:center;justify-content:space-between;max-width:1160px;margin:0 auto}.navbar-brand{font-weight:800;font-size:1.0625rem;letter-spacing:-.02em;color:var(--ink);text-decoration:none}.navbar ul{list-style:none;display:flex;gap:2rem}.navbar ul a{color:var(--ink-soft);text-decoration:none;font-weight:500;font-size:var(--text-sm);transition:color .2s}.navbar ul a:hover{color:var(--ink)}.hero{position:relative;min-height:100svh;max-width:none;display:flex;align-items:center;overflow:hidden;padding:6rem var(--gutter) 0;background:transparent}.hero:before{content:none}.hero-inner{position:relative;z-index:1;display:flex;align-items:flex-end;justify-content:space-between;width:100%;max-width:1160px;margin:0 auto;gap:3rem}.hero-text{display:flex;flex-direction:column;align-items:flex-start;gap:1.25rem;max-width:600px;padding-bottom:clamp(4rem,12vh,8rem)}.hero h1{font-size:var(--text-hero);font-weight:900;line-height:1.02;letter-spacing:-.035em;color:var(--ink)}.hero h1 .word{display:inline-block;overflow:hidden;margin-right:.28em}.hero h1 .word>span{display:inline-block;font-family:Bebas Neue,Schibsted Grotesk,sans-serif;animation:wordReveal .7s cubic-bezier(.22,1,.36,1) both}.hero h1 .word:nth-child(2)>span{animation-delay:.08s}@keyframes wordReveal{0%{transform:translateY(110%)}to{transform:translateY(0)}}.hero .tagline{font-size:var(--text-lg);font-weight:500;color:var(--ink-soft);line-height:1.4;min-height:2.8em;opacity:0;animation:fadeUp .6s ease .3s both}.hero .tagline .cursor{display:inline-block;width:2px;height:1.1em;background:var(--accent);margin-left:2px;vertical-align:text-bottom;animation:blink 1s step-end infinite}@keyframes blink{50%{opacity:0}}.hero .tagline .cursor.done{animation:none;opacity:0}.hero .subtitle{font-size:var(--text-base);color:var(--ink-mute);max-width:46ch;line-height:1.7;opacity:0;animation:fadeUp .6s ease .45s both}.hero-actions{display:flex;align-items:center;gap:1.5rem;margin-top:.75rem;opacity:0;animation:fadeIn .6s ease .6s both}.cta-button{display:inline-block;padding:.875rem 2rem;background-color:var(--accent);color:var(--accent-ink);text-decoration:none;border-radius:8px;font-weight:700;transition:background-color .25s,transform .12s}.cta-button:hover{background-color:var(--accent-bright)}.cta-button:active{transform:scale(.97)}.ghost-link{color:var(--ink-soft);text-decoration:none;font-weight:600;font-size:var(--text-sm);transition:color .2s}.ghost-link:hover{color:var(--ink)}.hero-photo{flex-shrink:0;width:clamp(280px,36vw,440px);align-self:flex-end;display:flex;opacity:0;animation:photoIn .8s cubic-bezier(.22,1,.36,1) .3s both}@keyframes photoIn{0%{opacity:0;transform:translate(40px)}to{opacity:1;transform:translate(0)}}.hero-photo img{width:100%;aspect-ratio:4 / 5;-o-object-fit:cover;object-fit:cover;-o-object-position:50% 26%;object-position:50% 26%;display:block;border-radius:18px;box-shadow:0 24px 55px oklch(30% .1 var(--accent-h) / .28)}.about-grid{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6fr);gap:clamp(2rem,6vw,5rem);align-items:start}.about-grid h2{margin-bottom:0;font-size:var(--text-2xl);line-height:1.15}.about-body{font-size:var(--text-base);color:var(--ink-soft);line-height:1.75;max-width:62ch}.about-body p{margin-bottom:1.4rem}.about-body p:last-child{margin-bottom:0}.gh-card{display:block;text-decoration:none;color:inherit;margin:clamp(2rem,5vh,3rem) 0 0;max-width:460px;background:var(--bg-raised);border:1px solid var(--line);border-radius:16px;padding:1.25rem 1.4rem;box-shadow:0 1px 2px #11161f0a}a.gh-card{transition:opacity .6s ease,transform .4s cubic-bezier(.22,1,.36,1),box-shadow .35s ease,border-color .35s ease}a.gh-card:hover{transform:translateY(-4px);border-color:color-mix(in oklab,var(--accent) 35%,var(--line));box-shadow:0 16px 36px #09152c29}a.gh-card:focus-visible{outline:2px solid var(--accent);outline-offset:3px}[data-theme=dark] a.gh-card:hover{box-shadow:0 18px 40px #00000080}@media(prefers-reduced-motion:reduce){a.gh-card{transition:none}a.gh-card:hover{transform:none}}.gh-head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;margin-bottom:.85rem}.gh-title{font-weight:600;color:var(--ink);font-size:var(--text-base)}.gh-handle{font-size:var(--text-sm);color:var(--ink-soft);text-decoration:none;white-space:nowrap}.gh-handle:hover{color:var(--accent-bright)}.gh-grid{display:flex;gap:2.5px;width:100%}.gh-week{display:flex;flex-direction:column;gap:2.5px;flex:1}.gh-day{aspect-ratio:1;border-radius:2px;background:var(--gh-0)}.gh-day[data-level="1"]{background:var(--gh-1)}.gh-day[data-level="2"]{background:var(--gh-2)}.gh-day[data-level="3"]{background:var(--gh-3)}.gh-day[data-level="4"]{background:var(--gh-4)}.gh-grid-loading .gh-day{animation:ghPulse 1.5s ease-in-out infinite}@keyframes ghPulse{0%,to{opacity:.4}50%{opacity:.75}}.gh-foot{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-top:.85rem;font-size:var(--text-sm);color:var(--ink-mute)}.gh-legend{display:inline-flex;align-items:center;gap:3px}.gh-legend .gh-day{width:11px;height:11px;aspect-ratio:auto;flex:none}.gh-msg{font-size:var(--text-sm);color:var(--ink-mute);padding:1.25rem 0}@media(prefers-reduced-motion:reduce){.gh-grid-loading .gh-day{animation:none;opacity:.5}}.plink-wrap{position:relative;display:inline-block}.plink{color:var(--link-ink);font-weight:600;text-decoration:underline;text-decoration-thickness:1.5px;text-underline-offset:3px;text-decoration-color:color-mix(in oklab,var(--link-ink) 45%,transparent);transition:text-decoration-color .2s ease,color .2s ease}.plink:hover,.plink:focus-visible{text-decoration-color:var(--link-ink)}.plink-card{position:absolute;bottom:calc(100% + 10px);left:50%;transform:translate(-50%) translateY(4px);width:-moz-max-content;width:max-content;max-width:230px;display:flex;flex-direction:column;gap:2px;padding:.6rem .75rem;border-radius:10px;background:var(--bg-raised);border:1px solid var(--line);box-shadow:0 10px 28px #11161f24;opacity:0;visibility:hidden;pointer-events:none;z-index:50;transition:opacity .18s ease,transform .18s cubic-bezier(.22,1,.36,1)}.plink-wrap:hover .plink-card,.plink-wrap:focus-within .plink-card{opacity:1;visibility:visible;transform:translate(-50%) translateY(0)}.plink-card:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);border:6px solid transparent;border-top-color:var(--bg-raised)}.plink-card-title{font-weight:600;color:var(--ink);font-size:var(--text-sm)}.plink-card-sub{color:var(--ink-soft);font-size:var(--text-sm);line-height:1.4}.plink-card-url{color:var(--link-ink);font-size:var(--text-sm);font-weight:600;margin-top:2px}@media(prefers-reduced-motion:reduce){.plink,.plink-card{transition:none}}.skills-list{border-top:1px solid var(--line)}.skills-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2.5fr);gap:1rem 2rem;align-items:baseline;padding:1.5rem 0;border-bottom:1px solid var(--line)}.skills-row dt{font-weight:700;color:var(--ink);font-size:var(--text-base);letter-spacing:-.01em}.skills-row dd{color:var(--ink-soft);font-size:var(--text-base);line-height:1.7}.projects-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.25rem}.project-card{position:relative;display:flex;flex-direction:column;gap:.875rem;padding:2rem;border:1px solid var(--line);border-radius:12px;background-color:var(--bg-raised);text-decoration:none;box-shadow:0 1px 3px oklch(30% .05 var(--accent-h) / .06);transition:border-color .25s,box-shadow .25s,transform .2s}.project-card-link{color:inherit;text-decoration:none}.project-card-link:after{content:"";position:absolute;inset:0;border-radius:inherit}.project-card:focus-within{border-color:var(--accent)}.project-card-demo{position:relative;z-index:1;align-self:flex-start;margin-top:.1rem;display:inline-flex;align-items:center;gap:.3rem;font-size:var(--text-sm);font-weight:600;color:var(--link-ink);text-decoration:none}.project-card-demo:hover{text-decoration:underline;text-underline-offset:3px}.project-card.featured .project-card-demo{color:var(--accent-ink)}.project-card:hover{border-color:var(--accent);box-shadow:0 6px 20px oklch(30% .08 var(--accent-h) / .12);transform:translateY(-4px)}.project-card.featured{grid-column:1 / -1;padding:2.5rem;background-color:var(--accent);border-color:var(--accent)}.project-card.featured:hover{border-color:var(--accent-bright);background-color:var(--accent-bright)}.project-card.featured p{max-width:70ch;font-size:var(--text-base);color:oklch(93% .025 var(--accent-h))}.project-card.featured h3,.project-card.featured .project-card-arrow{color:var(--accent-ink)}.project-card.featured .tech-tags li{color:oklch(85% .05 var(--accent-h))}.project-card-head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem}.project-card h3{color:var(--ink);font-size:var(--text-lg);font-weight:700;letter-spacing:-.015em}.project-card.featured h3{font-size:var(--text-xl)}.project-card-arrow{color:var(--ink-mute);font-size:1.1rem;transition:color .2s,transform .2s}.project-card:hover .project-card-arrow{color:var(--accent-bright);transform:translate(2px,-2px)}.project-card p{color:var(--ink-soft);font-size:var(--text-sm);line-height:1.65;flex-grow:1}.tech-tags{display:flex;flex-wrap:wrap;gap:.4rem 1rem;list-style:none;padding:.25rem 0 0}.tech-tags li{color:var(--ink-mute);font-size:var(--text-sm);font-weight:600}#contact{padding-bottom:clamp(6rem,14vh,10rem)}.contact{display:flex;flex-direction:column;align-items:flex-start;gap:1.6rem;max-width:640px}.contact h2{margin-bottom:.5rem;line-height:1.15}.contact-lede{color:var(--ink-soft);font-size:var(--text-base);max-width:52ch}.contact-form{width:100%;display:flex;flex-direction:column;gap:1.25rem;margin-top:.5rem}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:1.25rem}.form-field{display:flex;flex-direction:column;gap:.45rem}.form-field label{font-size:var(--text-sm);font-weight:600;color:var(--ink)}.form-field input,.form-field textarea{width:100%;padding:.75rem .875rem;font:inherit;font-size:var(--text-base);color:var(--ink);background-color:var(--bg-raised);border:1px solid var(--line);border-radius:8px;transition:border-color .18s,box-shadow .18s}.form-field textarea{resize:vertical;min-height:7rem}.form-field input::-moz-placeholder,.form-field textarea::-moz-placeholder{color:var(--ink-mute)}.form-field input::placeholder,.form-field textarea::placeholder{color:var(--ink-mute)}.form-field input:focus-visible,.form-field textarea:focus-visible{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px oklch(48% .21 var(--accent-h) / .15)}.form-submit{align-self:flex-start;padding:.8rem 1.75rem;font:inherit;font-weight:700;color:var(--accent-ink);background-color:var(--accent);border:none;border-radius:8px;cursor:pointer;transition:background-color .2s,transform .08s}.form-submit:hover{background-color:var(--accent-bright)}.form-submit:active{transform:translateY(1px)}.form-submit:disabled{opacity:.55;cursor:default}.contact-form-error{margin:0;padding:.7rem .9rem;font-size:var(--text-sm);line-height:1.45;color:#c53637;background-color:#ffe7e4;background-color:oklch(.95 .04 25);border:1px solid oklch(.85 .08 25);border-radius:8px}.contact-links{display:flex;gap:2rem;margin-top:.75rem}.contact-links a{color:var(--ink-soft);text-decoration:none;font-weight:600;font-size:var(--text-sm);transition:color .2s}.contact-links a:hover{color:var(--accent)}.contact-cta{margin-top:.5rem}.contact-error{color:#c53637;font-size:var(--text-sm)}.contact-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);gap:clamp(2.5rem,6vw,5.5rem);align-items:center}.contact-layout .contact{max-width:520px}.ai-chat{display:flex;flex-direction:column;width:100%;min-height:420px;max-height:560px;background-color:color-mix(in oklab,var(--bg-raised) 78%,transparent);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border:1px solid var(--line);border-radius:18px;box-shadow:0 24px 60px -20px oklch(30% .1 var(--accent-h) / .22);overflow:hidden}.ai-chat-head{display:flex;align-items:center;gap:.8rem;padding:1rem 1.15rem;border-bottom:1px solid var(--line);background-color:color-mix(in oklab,var(--accent-wash) 50%,transparent)}.ai-chat-avatar{flex-shrink:0;width:40px;height:40px;border-radius:11px;display:grid;place-items:center;background:linear-gradient(135deg,var(--accent),var(--accent-bright));color:var(--accent-ink);font-weight:800;font-size:.85rem;letter-spacing:.02em}.ai-chat-name{font-weight:700;font-size:var(--text-base);color:var(--ink)}.ai-chat-status{display:flex;align-items:center;gap:.4rem;font-size:var(--text-sm);color:var(--ink-mute);margin-top:1px}.ai-dot{width:7px;height:7px;border-radius:50%;background:#03a14a;box-shadow:0 0 #03a14a80;animation:aiPulse 2.4s ease-in-out infinite}@keyframes aiPulse{0%,to{box-shadow:0 0 #03a14a73}50%{box-shadow:0 0 0 5px #03a14a00}}.ai-chat-thread{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:.7rem;padding:1.15rem;scroll-behavior:smooth}.ai-msg{max-width:86%;padding:.7rem .95rem;border-radius:14px;font-size:var(--text-sm);line-height:1.55;white-space:pre-wrap}.ai-msg p{margin:0}.ai-md{white-space:normal}.ai-md>:first-child{margin-top:0}.ai-md>:last-child{margin-bottom:0}.ai-md p{margin:0 0 .5rem}.ai-md ul,.ai-md ol{margin:.35rem 0 .5rem;padding-left:1.15rem}.ai-md li{margin:.2rem 0}.ai-md li::marker{color:var(--accent)}.ai-md strong{font-weight:650;color:var(--ink)}.ai-md a{color:var(--accent);text-decoration:underline;text-underline-offset:2px}.ai-md code{font-family:var(--font-mono, ui-monospace, monospace);font-size:.92em;background:color-mix(in oklab,var(--ink) 8%,transparent);padding:.1em .35em;border-radius:5px}.ai-md h1,.ai-md h2,.ai-md h3,.ai-md h4{font-size:var(--text-sm);font-weight:650;margin:.5rem 0 .3rem}.ai-msg-bot{align-self:flex-start;background-color:color-mix(in oklab,var(--accent-wash) 60%,var(--bg-raised));color:var(--ink);border-bottom-left-radius:5px}.ai-msg-user{align-self:flex-end;background-color:var(--accent);color:var(--accent-ink);border-bottom-right-radius:5px}.ai-msg-typing{display:flex;gap:4px;align-items:center}.ai-msg-typing span{width:6px;height:6px;border-radius:50%;background:var(--ink-mute);opacity:.5;animation:aiType 1.2s infinite ease-in-out}.ai-msg-typing span:nth-child(2){animation-delay:.18s}.ai-msg-typing span:nth-child(3){animation-delay:.36s}@keyframes aiType{0%,60%,to{transform:translateY(0);opacity:.4}30%{transform:translateY(-4px);opacity:1}}.ai-chat-suggest{display:flex;flex-wrap:wrap;gap:.45rem;padding:0 1.15rem .6rem}.ai-chip{font:inherit;font-size:var(--text-sm);font-weight:500;color:var(--accent);background-color:color-mix(in oklab,var(--accent-wash) 55%,transparent);border:1px solid color-mix(in oklab,var(--accent) 22%,transparent);padding:.4rem .75rem;border-radius:999px;cursor:pointer;transition:background-color .18s,transform .18s,color .18s}.ai-chip:hover{background-color:var(--accent);color:var(--accent-ink);transform:translateY(-1px)}.ai-chat-input{display:flex;gap:.5rem;padding:.85rem;border-top:1px solid var(--line);background-color:color-mix(in oklab,var(--bg-raised) 60%,transparent)}.ai-chat-input input{flex:1;min-width:0;padding:.7rem .95rem;font:inherit;font-size:var(--text-base);color:var(--ink);background-color:var(--bg-raised);border:1px solid var(--line);border-radius:11px;transition:border-color .18s,box-shadow .18s}.ai-chat-input input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in oklab,var(--accent) 18%,transparent)}.ai-chat-send{flex-shrink:0;width:44px;height:44px;display:grid;place-items:center;color:var(--accent-ink);background-color:var(--accent);border:none;border-radius:11px;cursor:pointer;transition:background-color .18s,transform .18s}.ai-chat-send:hover{background-color:var(--accent-bright)}.ai-chat-send:active{transform:scale(.94)}.ai-chat-send:disabled{opacity:.5;cursor:default}@media(max-width:860px){.contact-layout{grid-template-columns:1fr;gap:3rem}.contact-layout .contact{max-width:none}.ai-chat{min-height:380px}}.contact-modal{border:none;padding:0;background:transparent;max-width:520px;width:calc(100% - 2rem);margin:auto;color:var(--ink);overflow:visible}.contact-modal::backdrop{background:oklch(28% .06 var(--accent-h) / .45);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.contact-modal[open]{animation:modalIn .3s cubic-bezier(.22,1,.36,1)}.contact-modal[open]::backdrop{animation:backdropIn .3s ease}@keyframes modalIn{0%{opacity:0;transform:translateY(16px) scale(.97)}to{opacity:1;transform:none}}@keyframes backdropIn{0%{opacity:0}to{opacity:1}}.contact-modal-card{position:relative;background-color:var(--bg-raised);border:1px solid var(--line);border-radius:16px;box-shadow:0 30px 70px oklch(28% .1 var(--accent-h) / .3);padding:clamp(1.75rem,4vw,2.5rem)}.contact-modal-close{position:absolute;top:.9rem;right:.9rem;width:2.1rem;height:2.1rem;display:grid;place-items:center;font-size:1.4rem;line-height:1;color:var(--ink-mute);background:transparent;border:1px solid transparent;border-radius:8px;cursor:pointer;transition:background-color .18s,color .18s}.contact-modal-close:hover{background-color:var(--accent-wash);color:var(--ink)}.contact-modal h3{font-size:var(--text-xl);font-weight:800;letter-spacing:-.02em;color:var(--ink);margin:0;padding-right:2rem}.contact-modal-sub{margin:.4rem 0 1.4rem;color:var(--ink-soft);font-size:var(--text-base)}.contact-modal .contact-form{margin-top:0}.contact-modal-done{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.5rem;padding:1.5rem 0}.contact-modal-done .mark{display:grid;place-items:center;width:3rem;height:3rem;border-radius:50%;background-color:var(--accent);color:var(--accent-ink);font-weight:700;font-size:1.4rem;margin-bottom:.5rem}.contact-modal-done h3{padding:0}.contact-modal-done p{margin:0;color:var(--ink-soft)}.footer{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap;max-width:1160px;margin:0 auto;padding:2rem var(--gutter) 2.5rem;border-top:1px solid var(--line);color:var(--ink-mute);font-size:var(--text-sm)}.footer a{color:var(--ink-soft);text-decoration:none}.footer a:hover{color:var(--accent-bright)}.reveal{opacity:0;transform:translateY(28px);transition:opacity .6s cubic-bezier(.22,1,.36,1),transform .6s cubic-bezier(.22,1,.36,1)}.reveal.in{opacity:1;transform:none}@keyframes fadeUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:none}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@media(max-width:820px){.hero{padding-top:5rem}.hero-inner{flex-direction:column-reverse;align-items:center}.hero-text{align-items:center;text-align:center;padding-bottom:4rem}.hero .subtitle{max-width:100%}.hero-photo{width:clamp(200px,55vw,300px);align-self:center}.hero-actions{justify-content:center}}@media(max-width:768px){.about-grid{grid-template-columns:1fr}.navbar ul{gap:1.25rem}.navbar-brand{display:none}.navbar-inner{justify-content:center}.footer{justify-content:center;text-align:center}}@media(max-width:720px){.projects-grid{grid-template-columns:1fr}.project-card.featured{padding:2rem}}@media(max-width:640px){.skills-row{grid-template-columns:1fr;gap:.35rem}}@media(max-width:560px){.form-row{grid-template-columns:1fr}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}.reveal{opacity:1;transform:none}}
