@import"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap";html,body{margin:0;padding:0;box-sizing:border-box;touch-action:pan-x pan-y}.project-description a:after{--project-link-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M15 3h6v6M10 14 21 3M21 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h6'/%3E%3C/svg%3E");content:"";display:inline-block;width:.8em;height:.8em;margin-left:.3em;vertical-align:-.1em;background-color:#fff;-webkit-mask:var(--project-link-icon) center / contain no-repeat;mask:var(--project-link-icon) center / contain no-repeat}.resume-dialog{box-sizing:border-box;width:min(64rem,calc(100% - 2rem));height:min(56rem,calc(100dvh - 2rem));max-width:none;max-height:none;margin:auto;padding:1rem;overflow:hidden;border:1px solid #334155;border-radius:1rem;background:#0f172a;color:#e2e8f0;box-shadow:0 24px 80px #0008;font-family:Inter,sans-serif;text-align:left}.resume-dialog[open]{display:flex;flex-direction:column}.resume-dialog::backdrop{background:#020617d9;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.resume-dialog-heading{display:flex;align-items:center;justify-content:space-between;flex-shrink:0;gap:1rem;margin-bottom:1rem}.resume-dialog-heading h2{display:flex;align-items:center;gap:.65rem;margin:0;color:#f8fafc;font-size:1.5rem;font-weight:700;line-height:1.3}.resume-dialog-heading h2 svg{color:#a5b4fc}.resume-dialog-heading-actions{display:flex;align-items:center;flex-shrink:0;gap:.75rem}.resume-dialog-close{display:grid;place-items:center;flex-shrink:0;min-width:2.75rem;min-height:2.75rem;padding:.5rem;border:0;border-radius:.6rem;background:transparent;color:#94a3b8;cursor:pointer}.resume-dialog-close:hover{background:#1e293b;color:#fff}.resume-dialog-download{box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:2.75rem;padding:.6rem .85rem;border:1px solid #818cf8;border-radius:.6rem;background:#4f46e5;color:#fff;font:600 .85rem/1.4 Inter,sans-serif;text-decoration:none;white-space:nowrap}.resume-dialog-download:hover{background:#4338ca}.resume-dialog :is(button,a):focus-visible{outline:3px solid #a5b4fc;outline-offset:3px}.resume-dialog-unavailable{margin:.75rem 0;color:#94a3b8;font-size:.8rem;line-height:1.5}.resume-dialog-frame{display:block;flex:1;width:100%;min-height:0;border:0;border-radius:.5rem;background:#1e293b}@media(max-width:480px){.resume-dialog{width:calc(100% - 1rem);height:calc(100dvh - 1rem);padding:.75rem}.resume-dialog-heading{gap:.5rem}.resume-dialog-heading h2{gap:.5rem;font-size:1.25rem}.resume-dialog-heading-actions{gap:.5rem}.resume-dialog-download{padding:.5rem .6rem}}.project-tools{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem 1rem;margin-top:1.25rem;padding-top:1.25rem;border-top:1px solid #1e293b}.project-tools-label{flex-shrink:0;color:#94a3b8;font-size:.8rem;font-weight:500}.project-tools-list{display:flex;flex-wrap:wrap;gap:.5rem;list-style:none;margin:0;padding:0}.project-tool-badge{display:inline-flex;align-items:center;gap:.5rem;min-height:2.5rem;padding:.375rem .75rem .375rem .5rem;border:1px solid #334155;border-radius:.65rem;background:#0f172a80;color:#cbd5e1;font:500 .8rem/1.3 Inter,sans-serif;cursor:pointer;transition:border-color .16s,background-color .16s,color .16s}.project-tool-badge:hover{border-color:#818cf8;background:#1e293b;color:#fff}.project-tool-badge:focus-visible,.tools-dialog button:focus-visible{outline:2px solid #a5b4fc;outline-offset:3px}.tool-icon{display:inline-grid;place-items:center;flex:0 0 1.625rem;width:1.625rem;height:1.625rem;border-radius:.4rem;background:color-mix(in srgb,var(--tool-color) 10%,transparent);color:var(--tool-color);font:700 .6rem/1 Inter,sans-serif}.tool-icon-logo{display:block;width:1rem;height:1rem;background:currentColor;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.tool-icon-image{display:block;width:1.125rem;height:1.125rem;object-fit:contain}.tools-dialog{box-sizing:border-box;width:min(64rem,calc(100% - 3rem));max-width:none;max-height:min(48rem,calc(100dvh - 4rem));margin:auto;padding:0;overflow:hidden;border:1px solid #334155;border-radius:1.25rem;background:#0f172a;color:#e2e8f0;box-shadow:0 24px 80px #0008;font-family:Inter,sans-serif;text-align:left}.tools-dialog[open]{display:flex;flex-direction:column}.tools-dialog::backdrop{background:#020617d9;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.tools-dialog-header{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;flex-shrink:0;column-gap:.75rem;padding:1.5rem 1.5rem 1.25rem;border-bottom:1px solid #334155}.tools-dialog-title-row{display:flex;align-items:center;gap:.85rem;min-width:0}.tools-dialog-emblem{display:grid;place-items:center;flex:0 0 2.75rem;height:2.75rem;border-radius:.8rem;background:#6366f126;color:#a5b4fc}.tools-dialog h2{margin:0;color:#f8fafc;font-size:1.65rem;font-weight:700;letter-spacing:-.03em;line-height:1.3}.tools-dialog h2:focus{outline:none}.tools-dialog-header p{grid-column:1 / -1;margin:.6rem 0 0;color:#94a3b8;font-size:.8rem;line-height:1.5;white-space:nowrap}.tools-dialog-close{display:grid;place-items:center;flex:0 0 2.75rem;height:2.75rem;padding:.5rem;border:0;border-radius:.6rem;background:transparent;color:#94a3b8;cursor:pointer}.tools-dialog-close:hover{background:#1e293b;color:#fff}.tools-dialog-body{min-height:0;padding:1.25rem 1.5rem 1.75rem;overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable}.tools-category+.tools-category{margin-top:1.75rem}.tools-category h3{margin:0 0 .65rem;color:#a5b4fc;font-size:.7rem;font-weight:600;line-height:1.5;letter-spacing:.12em;text-transform:uppercase}.tools-category-list{display:grid;align-items:stretch;gap:.875rem}.tools-entry{display:flex;flex-direction:column;min-width:0;border:1px solid #334155;border-radius:.75rem;background:#02061733}.tools-entry--selected{border-color:#818cf8;background:#02061766}.tools-entry-heading{display:flex;align-items:center;gap:.75rem;padding:1rem 1rem .25rem}.tools-entry-heading h4{margin:0;color:#f1f5f9;font-size:.95rem;font-weight:600;line-height:1.4}.tools-entry-heading h4:focus{outline:none}.tools-entry-heading .tool-icon,.tools-entry-mobile-toggle .tool-icon{flex-basis:1.875rem;width:1.875rem;height:1.875rem}.tools-entry-content{display:flex;flex-direction:column;flex:1;padding:0 1rem 1rem}.tools-entry-content[hidden]{display:none}.tools-entry-content p{flex:1;margin:.25rem 0 0;color:#cbd5e1;font-size:.85rem;line-height:1.75}.tools-related-projects{margin-top:1rem}.tools-projects-label{display:block;color:#a5b4fc;font-size:.75rem;font-weight:500;line-height:1.5}.tools-entry-mobile-toggle{display:flex;align-items:center;gap:.75rem;width:100%;min-height:3.5rem;padding:.8rem 1rem;border:0;border-radius:.7rem;background:transparent;color:#e2e8f0;font:500 .9rem/1.4 Inter,sans-serif;text-align:left;cursor:pointer}.tools-entry-mobile-toggle:hover{background:#1e293b80}.tools-entry-mobile-toggle>svg{flex-shrink:0;margin-left:auto;color:#94a3b8;transition:transform .16s}.tools-entry-mobile-toggle[aria-expanded=true]>svg{transform:rotate(180deg);color:#a5b4fc}.tools-projects-toggle{display:flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%;min-height:2.5rem;padding:.5rem 0;border:0;border-top:1px solid #334155;background:transparent;color:#a5b4fc;font:500 .75rem/1.5 Inter,sans-serif;text-align:left;cursor:pointer}.tools-projects-toggle:hover{color:#fff}.tools-projects-toggle svg{transition:transform .16s}.tools-projects-toggle[aria-expanded=true] svg{transform:rotate(180deg)}.tools-related-projects ul:not([hidden]){display:flex;flex-wrap:wrap;gap:.45rem;margin:.5rem 0 0;padding:0;list-style:none}.tools-related-projects li button{display:inline-flex;align-items:center;gap:.35rem;min-height:2.25rem;padding:.375rem .65rem;border:1px solid #475569;border-radius:.5rem;background:#1e293b80;color:#c7d2fe;font:500 .75rem/1.5 Inter,sans-serif;text-align:left;cursor:pointer}.tools-related-projects button:hover{border-color:#818cf8;color:#fff}.tools-related-projects svg{flex-shrink:0}@media(min-width:700px){.tools-category-list{grid-template-columns:repeat(2,minmax(0,1fr))}.tools-dialog-header p{padding-left:3.6rem}}@media(max-width:699px){.tools-dialog{width:calc(100% - 1rem);height:calc(100dvh - 1rem);max-height:none;border-radius:1rem}.tools-dialog-header{padding:1.25rem 1rem 1rem}.tools-dialog h2{font-size:1.4rem}.tools-dialog-title-row{gap:.65rem}.tools-dialog-header p{font-size:.75rem}.tools-dialog-body{padding:1.25rem 1rem max(1.25rem,env(safe-area-inset-bottom))}.project-tools{align-items:flex-start;gap:.6rem}.project-tools-label{width:100%}}@media(prefers-reduced-motion:reduce){.project-tool-badge,.tools-projects-toggle svg,.tools-entry-mobile-toggle>svg{transition:none}}.portfolio-project-heading{--portfolio-button-gap: .25rem;--portfolio-heading-height: 1.75rem;display:flex;align-items:center;justify-content:space-between;gap:var(--portfolio-heading-gap, .5rem);width:var(--portfolio-heading-width, 100%);height:var(--portfolio-heading-height);min-width:0}.portfolio-project-title{position:relative;flex:1 1 auto;min-width:0;height:var(--portfolio-heading-height)}.portfolio-project-title h3{width:max-content;transform:scale(var(--portfolio-title-scale, 1));transform-origin:left center}.portfolio-project-actions{display:flex;align-items:center;flex-shrink:0;gap:var(--portfolio-button-gap)}.portfolio-placeholder-button{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;gap:.375rem;min-width:1.5rem;min-height:1.5rem;padding:.1875rem;border:1px solid #475569;border-radius:999px;background:#0f172a;color:#e2e8f0;font:600 .75rem/1.2 Inter,sans-serif;white-space:nowrap;cursor:pointer}.portfolio-placeholder-button svg{flex-shrink:0}.portfolio-placeholder-button span{display:none}.portfolio-placeholder-button:hover{border-color:#818cf8;background:#1e293b}.portfolio-placeholder-button:focus-visible{outline:2px solid #a5b4fc;outline-offset:1px}@media(max-width:1279px){.portfolio-project-header{position:sticky;top:0;z-index:40;padding-top:max(.5rem,env(safe-area-inset-top));padding-bottom:.5rem;background:#020617}}@media(min-width:700px){.portfolio-project-heading{--portfolio-button-gap: .5rem;--portfolio-heading-height: 2.25rem}.portfolio-placeholder-button{min-height:2rem;padding:.375rem .875rem}.portfolio-placeholder-button span{display:inline}}@media(min-width:1024px){.portfolio-project-heading{--portfolio-heading-height: 2.5rem}}@media(min-width:1280px){.portfolio-project-heading{--portfolio-button-gap: .75rem;gap:0;width:auto}.portfolio-project-title{flex:0 0 auto}.portfolio-project-actions{position:absolute;top:var(--portfolio-actions-top, 1rem);right:var(--portfolio-actions-right, max(10.25rem, calc(env(safe-area-inset-right) + 9rem) ))}.portfolio-placeholder-button{min-height:2.25rem;padding:.375rem 1rem;font-size:.8rem}}.contact-launcher{position:fixed;left:calc(100svw - max(1.25rem,env(safe-area-inset-right)));top:max(1rem,env(safe-area-inset-top));translate:-100% 0;z-index:50;display:inline-flex;width:max-content;white-space:nowrap;align-items:center;gap:.5rem;min-height:2.25rem;padding:.375rem .875rem;border:1px solid #818cf8;border-radius:999px;background:#4f46e5;color:#fff;box-shadow:0 8px 32px #02061799;font:600 .8rem Inter,sans-serif;cursor:pointer;transition:background-color .16s}.contact-launcher:hover{background:#4338ca}.contact-launcher-icon{position:relative;display:block;width:20px;height:20px;flex:0 0 20px}.contact-launcher-mail,.contact-launcher-profile{position:absolute;top:0;right:0;bottom:0;left:0;width:20px;height:20px;transition:transform .42s cubic-bezier(.2,.7,.25,1),opacity .28s ease}.contact-launcher-mail{opacity:1;transform:rotate(0) scale(1)}.contact-launcher-profile{object-fit:cover;border-radius:50%;opacity:0;transform:rotate(-270deg) scale(.15)}.contact-launcher--has-profile:is(:focus-visible,.contact-launcher--touch-preview) .contact-launcher-mail{opacity:0;transform:rotate(270deg) scale(.15)}.contact-launcher--has-profile:is(:focus-visible,.contact-launcher--touch-preview) .contact-launcher-profile{opacity:1;transform:rotate(0) scale(1)}@media(hover:hover){.contact-launcher--has-profile:hover .contact-launcher-mail{opacity:0;transform:rotate(270deg) scale(.15)}.contact-launcher--has-profile:hover .contact-launcher-profile{opacity:1;transform:rotate(0) scale(1)}}.contact-launcher:focus-visible,.contact-dialog button:focus-visible{outline:3px solid #a5b4fc;outline-offset:4px}.contact-dialog{box-sizing:border-box;width:min(34rem,calc(100% - 2rem));max-height:calc(100dvh - 2rem);margin:auto;padding:1.75rem;overflow-y:auto;border:1px solid #334155;border-radius:1.25rem;background:#0f172a;color:#e2e8f0;box-shadow:0 24px 80px #0006;font-family:Inter,sans-serif;text-align:left}.contact-dialog::backdrop{background:#020617d9;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.contact-heading{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:1.75rem}.contact-title-row{display:flex;align-items:center;gap:.85rem;min-width:0}.contact-heading-icon{display:grid;place-items:center;flex-shrink:0;width:2.75rem;height:2.75rem;border-radius:.8rem;background:#6366f126;color:#a5b4fc}.contact-close{display:grid;place-items:center;min-width:2.75rem;min-height:2.75rem;padding:.5rem;border:0;border-radius:.5rem;background:transparent;color:#94a3b8;cursor:pointer}.contact-close:hover{background:#1e293b;color:#fff}.contact-dialog h2{margin:0;font-size:1.65rem;font-weight:700;letter-spacing:-.03em;color:#f8fafc}.contact-dialog h2:focus{outline:none}.contact-fields{display:grid;gap:1.1rem;min-width:0;padding:0;margin:0;border:0}.contact-row{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.contact-fields label{display:grid;gap:.45rem;min-width:0;color:#cbd5e1;font-size:.85rem;font-weight:500}.contact-required{color:#a5b4fc}.contact-field{display:grid;gap:.45rem;min-width:0;align-content:start}.contact-field-error{margin:0;color:#fda4af;font-size:.8rem;line-height:1.5}.contact-fields input,.contact-fields textarea{box-sizing:border-box;width:100%;min-height:2.8rem;padding:.7rem .8rem;border:1px solid #475569;border-radius:.6rem;background:#020617;color:#f8fafc;font:400 1rem/1.5 Inter,sans-serif}.contact-fields textarea{min-height:8rem;resize:vertical}.contact-fields input:focus,.contact-fields textarea:focus{outline:2px solid #818cf8;outline-offset:2px;border-color:#818cf8}.contact-fields [aria-invalid=true]{border-color:#fb7185}.contact-fields [aria-invalid=true]:focus{outline-color:#fb7185}.contact-fields:disabled{opacity:.75}.contact-submit{display:flex;align-items:center;justify-content:center;gap:.6rem;min-height:2.9rem;margin-top:.25rem;padding:.8rem 1rem;border:0;border-radius:.6rem;background:#4f46e5;color:#fff;font:600 .95rem Inter,sans-serif;cursor:pointer}.contact-submit:hover:not(:disabled){background:#4338ca}.contact-submit:disabled{background:#334155;color:#94a3b8;cursor:not-allowed}[aria-busy=true] .contact-submit:disabled{background:#4f46e5;color:#fff;cursor:wait}.contact-notice{display:flex;gap:.6rem;align-items:flex-start;margin:1rem 0 0;padding:.85rem;border:1px solid;border-radius:.6rem;font-size:.85rem;line-height:1.6}.contact-notice svg{flex-shrink:0;margin-top:.1rem}.contact-dialog--sent{position:fixed;inset:auto;top:var(--contact-success-y, 50dvh);left:var(--contact-success-x, 50svw);translate:-50% -50%;width:min(24rem,calc(var(--contact-success-width, 100svw) - 2rem));max-height:calc(var(--contact-success-height, 100dvh) - 2rem);margin:0;text-align:center}.contact-success-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;min-height:10rem;padding:1.5rem .5rem}.contact-success-check{flex-shrink:0;color:#6ee7b7}.contact-success-close{position:absolute;top:.5rem;right:.5rem}.contact-error{border-color:#fb718566;background:#fb718514;color:#fecdd3}.contact-copy-actions{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;margin-top:1rem}.contact-copy{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;padding:.65rem .85rem;min-height:2.75rem;border:1px solid #475569;border-radius:.6rem;background:#1e293b;color:#e2e8f0;cursor:pointer;font:500 .85rem Inter,sans-serif}.contact-copy:hover{background:#334155}.contact-copy-toast{color:#a7f3d0;font-size:.85rem}.contact-copy-buffer{position:fixed;left:0;top:0;width:1px;height:1px;opacity:0}.contact-manual-copy{display:grid;gap:.5rem;width:100%;color:#cbd5e1;font-size:.85rem;line-height:1.5}.contact-manual-copy textarea{box-sizing:border-box;width:100%;min-height:9rem;padding:.75rem;border:1px solid #475569;border-radius:.6rem;background:#020617;color:#f8fafc;font:400 .9rem/1.5 Inter,sans-serif}.contact-honeypot{display:none}.contact-spinner{animation:contact-spin 1s linear infinite}@keyframes contact-spin{to{transform:rotate(360deg)}}@media(max-width:1023px){.contact-launcher{top:max(.75rem,env(safe-area-inset-top));min-height:2rem;padding:.3125rem .75rem;font-size:.75rem}}@media(max-width:699px){.contact-launcher{left:calc(100svw - max(1rem,env(safe-area-inset-right)));top:max(.25rem,env(safe-area-inset-top));gap:.375rem;min-height:1.75rem;padding:.1875rem .625rem;font-size:.6875rem}}@media(max-width:480px){.contact-dialog{padding:1.25rem}.contact-dialog h2{font-size:1.35rem}.contact-row{grid-template-columns:1fr}}@media(prefers-reduced-motion:reduce){.contact-launcher,.contact-launcher-mail,.contact-launcher-profile{transition:none}.contact-spinner{animation:none}}
