:root{--color-text:#111827;--color-heading:#1f2937;--color-muted:#475569;--color-border:#cbd5e1;--color-border-strong:#94a3b8;--color-surface:#fff;--color-surface-muted:#eef2f6;--color-background:#f8fafc;--color-accent:#1d4ed8;--color-accent-hover:#1e3a8a;--color-accent-soft:#eff6ff;--color-success:#047857;--color-danger:#b91c1c;--gray-0:var(--color-text);--gray-50:var(--color-text);--gray-100:var(--color-heading);--gray-200:#334155;--gray-300:var(--color-muted);--gray-400:#64748b;--gray-500:var(--color-border-strong);--gray-600:var(--color-border);--gray-700:#d7dde5;--gray-800:var(--color-surface-muted);--gray-900:var(--color-background);--gray-999:var(--color-surface);--accent-regular:var(--color-accent);--accent-regular-rgb:29, 78, 216;--accent-dark:var(--color-accent-hover);--accent-subtle-overlay:var(--color-accent-soft);--accent-text-over:var(--color-surface);--link-color:var(--color-accent);--shadow-sm:0px 1px 2px #11182714;--shadow-md:0px 4px 12px #1118271a;--shadow-lg:0px 12px 24px #1118271f;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-7:1.75rem;--space-8:2rem;--space-10:2.5rem;--space-12:3rem;--space-15:3.75rem;--space-16:4rem;--space-20:5rem;--space-30:7.5rem;--radius-xs:3px;--radius-sm:.25rem;--radius-md:.5rem;--radius-lg:.75rem;--radius-xl:1rem;--radius-2xl:1.5rem;--radius-pill:999rem;--radius-round:50%;--surface-card-background:var(--gray-999);--surface-card-background-muted:var(--gray-800);--surface-card-border:1px solid var(--gray-700);--surface-card-border-hover:var(--accent-regular);--surface-card-radius:var(--radius-xl);--surface-card-padding:var(--space-5);--surface-card-padding-lg:var(--space-8);--surface-card-shadow:var(--shadow-sm);--surface-card-shadow-raised:var(--shadow-md);--surface-card-gap:var(--space-3);--control-padding:.625em;--control-gap:.625em;--control-border:3px solid var(--color-border-strong);--control-radius:var(--radius-xs);--control-focus-shadow:0 0 0 3px rgba(var(--accent-regular-rgb), .1);--control-error-shadow:0 0 0 3px #b91c1c1f;--button-padding:var(--space-3) var(--space-6);--button-padding-compact:var(--space-2) var(--space-4);--button-radius:var(--radius-pill);--button-shadow:var(--shadow-md);--button-shadow-hover:var(--shadow-lg);--text-sm:.875rem;--text-base:1rem;--text-md:1.125rem;--text-lg:1.25rem;--text-xl:1.625rem;--text-2xl:2.125rem;--text-3xl:2.625rem;--text-4xl:3.5rem;--text-5xl:4.5rem;--font-body:"Source Sans 3", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-brand:"Source Sans 3", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--theme-transition:.2s ease-in-out;--transition-fast:.2s ease;--transition-colors:background-color var(--transition-fast), color var(--transition-fast);--transition-button:background-color var(--transition-fast), color var(--transition-fast), box-shadow var(--transition-fast), transform var(--transition-fast);--transition-control:border-color var(--transition-fast), box-shadow var(--transition-fast);--transition-card:transform var(--theme-transition), box-shadow var(--theme-transition), border-color var(--theme-transition)}html,body{min-height:100%;overflow-x:hidden}body{background-color:var(--gray-900);color:var(--gray-300);font-family:var(--font-body);-webkit-font-smoothing:antialiased;line-height:1.5}*,:after,:before{box-sizing:border-box;margin:0}img{max-width:100%;height:auto}aside{background-color:var(--gray-800);padding:var(--space-20) var(--space-6);justify-content:center;display:flex}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}.hidden{display:none!important}.visible{display:inline!important}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;white-space:normal;background:var(--color-surface);width:auto;height:auto;color:var(--accent-regular);z-index:1000;padding:var(--button-padding-compact);border-radius:var(--radius-sm);box-shadow:var(--shadow-sm);margin:0;position:static;overflow:visible}.wrapper{width:100%;max-width:76rem;padding-inline:var(--space-5);font-size:var(--text-md);margin-inline:auto}@media (width>=50em){.wrapper{padding-inline:var(--space-8)}}.stack{flex-direction:column;display:flex}.gap-2{gap:var(--space-2)}.gap-4{gap:var(--space-4)}.gap-6{gap:var(--space-6)}.gap-8{gap:var(--space-8)}.gap-10{gap:var(--space-10)}.gap-15{gap:var(--space-15)}.gap-20{gap:var(--space-20)}.gap-30{gap:var(--space-30)}@media (width>=50em){.lg\:gap-2{gap:var(--space-2)}.lg\:gap-4{gap:var(--space-4)}.lg\:gap-6{gap:var(--space-6)}.lg\:gap-8{gap:var(--space-8)}.lg\:gap-10{gap:var(--space-10)}.lg\:gap-15{gap:var(--space-15)}.lg\:gap-20{gap:var(--space-20)}.lg\:gap-30{gap:var(--space-30)}}.surface-card,.skill-card,.portfolio-card,form.needs-validation{padding:var(--surface-card-padding);border:var(--surface-card-border);border-radius:var(--surface-card-radius);background:var(--surface-card-background);box-shadow:var(--surface-card-shadow)}.skill-grid{gap:var(--space-6);grid-template-columns:1fr;display:grid}.skill-card{gap:var(--space-4);flex-direction:column;min-width:0;height:100%;display:flex}.skill-header{align-items:center;gap:.875rem;min-width:0;display:flex}.skill-icon{width:2.75rem;height:2.75rem;color:var(--accent-regular);background:var(--accent-subtle-overlay);border:var(--surface-card-border);border-radius:var(--radius-lg);flex:none;justify-content:center;align-items:center;display:inline-flex}.skill-card h3{font-size:var(--text-xl);margin:0}.skill-card p{margin:0}@media (width>=50em){.skill-grid{gap:var(--space-7);grid-template-columns:repeat(3,minmax(0,1fr))}}.grid>*{height:100%}.grid{gap:var(--space-6);grid-auto-rows:auto;align-items:start;padding:0;list-style:none;display:grid}.grid.small,.grid.offset{grid-template-columns:repeat(auto-fit,minmax(min(100%,17rem),1fr))}@media (width>=50em){.grid{gap:var(--space-8)}.grid.small,.grid.offset{gap:var(--space-7)}}.cta,.cta:visited{width:fit-content;color:var(--accent-text-over);background-color:var(--accent-regular);padding:var(--button-padding);border-radius:var(--button-radius);font-weight:600;font-size:var(--text-md);cursor:pointer;transition:var(--transition-button);appearance:none;box-shadow:var(--button-shadow);border:none;justify-content:center;align-items:center;text-decoration:none;display:inline-flex}.cta:hover,.cta:focus{color:var(--accent-text-over);background-color:var(--accent-dark);box-shadow:var(--button-shadow-hover);text-decoration:none;transform:translateY(-2px)}.cta:disabled,.cta[aria-disabled=true]{opacity:.7;cursor:not-allowed;pointer-events:none}.pill{padding:var(--button-padding-compact);gap:var(--space-2);color:var(--accent-text-over);border:1px solid var(--accent-regular);background-color:var(--accent-regular);border-radius:var(--button-radius);font-size:var(--text-sm);white-space:nowrap;transition:var(--transition-colors);font-weight:600;line-height:1.35;text-decoration:none;display:flex}.button-loading{align-items:center;gap:var(--space-2);border-radius:var(--button-radius);transition:var(--transition-colors);font-weight:600;text-decoration:none;display:inline-flex}.button-loading:after{content:"";border-radius:var(--radius-round);border:2px solid #0000;border-top-color:currentColor;width:16px;height:16px;animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.portfolio-card{gap:var(--surface-card-gap);height:100%;transition:var(--transition-card);flex-direction:column;display:flex;position:relative;overflow:hidden}.portfolio-card:hover{box-shadow:var(--surface-card-shadow-raised);border-color:var(--surface-card-border-hover);transform:translateY(-4px)}.portfolio-card:hover h2,.portfolio-card:hover h3{text-decoration:underline}.portfolio-card:focus-within{outline:2px solid var(--accent-regular);outline-offset:3px}.preview-image{aspect-ratio:16/9;object-fit:cover;border-radius:var(--radius-md);background:var(--surface-card-background-muted);width:100%}.card-link{z-index:2;text-indent:-9999px;white-space:nowrap;cursor:pointer;position:absolute;inset:0;overflow:hidden}.icon-svg{vertical-align:middle;width:var(--size,.5rem);height:var(--size,.5rem)}a{color:var(--link-color);transition:color var(--theme-transition)}a:hover,a:focus{color:var(--accent-dark)}a:focus-visible,button:focus-visible,.cta:focus-visible,.menu-button:focus-visible,.link:focus-visible,.social:focus-visible{outline:2px solid var(--accent-regular);outline-offset:3px}h1,h2,h3,h4,h5{line-height:1.1;font-family:var(--font-brand);color:var(--gray-100);margin-bottom:var(--space-2);font-weight:600}h1{font-size:clamp(2.4rem, 4vw, var(--text-4xl))}h2{font-size:clamp(1.8rem, 3vw, var(--text-3xl))}h3{font-size:clamp(1.4rem, 2.2vw, var(--text-2xl))}h4{font-size:var(--text-xl)}h5{font-size:var(--text-lg)}.hero-title{font-size:clamp(2.8rem, 5vw, var(--text-5xl));font-family:var(--font-brand);color:var(--gray-100);letter-spacing:-.02em;margin:0;font-weight:700;line-height:1.1}.section-title{font-size:var(--text-2xl);font-family:var(--font-brand);color:var(--gray-100);margin-bottom:var(--space-6);font-weight:600;line-height:1.1}.portfolio-link{align-items:center;gap:var(--space-1);color:var(--accent-regular);text-decoration:underline;text-decoration-color:var(--accent-regular);text-underline-offset:var(--space-1);transition:color var(--theme-transition), text-decoration-color var(--theme-transition);display:inline-flex}.portfolio-link:hover,.portfolio-link:focus{color:var(--accent-dark);text-decoration-color:var(--accent-regular)}.sample-pill{align-items:center;gap:var(--space-2);padding:var(--button-padding);background-color:var(--accent-regular);color:var(--accent-text-over);border-radius:var(--button-radius);transition:var(--transition-button);font-weight:500;text-decoration:none;display:inline-flex}.sample-pill:hover,.sample-pill:focus{background-color:var(--accent-dark);color:var(--accent-text-over);transform:translateY(-2px)}.contact-content{align-items:center;gap:var(--space-8);text-align:center;flex-direction:column;max-width:60rem;display:flex}.content{color:var(--gray-300);line-height:1.6}.section-header p{max-width:60ch}.content p{margin-bottom:var(--space-4)}.content ul,.content ol{margin-bottom:var(--space-4);padding-left:var(--space-5)}.content li{margin-bottom:var(--space-2)}.content strong{color:var(--gray-100);font-weight:600}.back-link{align-items:center;gap:var(--space-2);color:var(--link-color);font-size:var(--text-md);transition:color var(--theme-transition);margin-bottom:var(--space-4);text-underline-offset:.2em;background:0 0;border:none;border-radius:0;padding:0;font-weight:600;text-decoration:underline;display:inline-flex}.back-link:hover,.back-link:focus{color:var(--accent-dark);text-decoration-color:currentColor}input[type=text],input[type=email],textarea{width:100%;padding:var(--control-padding);margin-bottom:var(--control-gap);border:var(--control-border);border-radius:var(--control-radius);box-sizing:border-box;transition:var(--transition-control)}input[type=text]:focus,input[type=email]:focus,textarea:focus{outline:2px solid var(--accent-regular);outline-offset:2px;border-color:var(--accent-regular);box-shadow:var(--control-focus-shadow)}button[type=submit]{white-space:nowrap;cursor:pointer;border:none;display:flex;position:relative}button[type=submit]:disabled{opacity:.7;cursor:not-allowed;transform:none}.button-text.hidden,.button-loading.hidden{display:none}.button-text.visible,.button-loading.visible{display:inline}.button-text,.button-loading{transition:opacity var(--transition-fast)}.form-row{gap:var(--control-gap);flex-direction:column;display:flex}.form-field{flex:1}.honeypot{clip:rect(0, 0, 0, 0)!important;white-space:nowrap!important;width:1px!important;height:1px!important;position:absolute!important;left:-9999px!important;overflow:hidden!important}.text-green-500{color:var(--color-success);font-weight:500}.text-red-500{color:var(--color-danger);font-weight:500}#result{margin-top:var(--space-4);min-height:var(--space-6);font-weight:500;transition:opacity .3s}.was-validated input:invalid,.was-validated textarea:invalid{border-color:var(--color-danger);box-shadow:var(--control-error-shadow)}.was-validated input:valid,.was-validated textarea:valid{border-color:var(--color-success)}.invalid-feedback{font-size:var(--text-sm);color:var(--color-danger);margin-bottom:var(--space-6);display:none}.was-validated :not(:placeholder-shown):invalid~.invalid-feedback{display:block}.was-validated :invalid{border-color:var(--color-danger)}.form-container{padding-block:var(--space-4) var(--space-12);justify-content:center;align-items:center;display:flex}form.needs-validation{--surface-card-padding:var(--space-6);--surface-card-shadow:var(--surface-card-shadow-raised);gap:var(--space-4)}.form-intro p{margin-bottom:0}@media (width>=50em){form.needs-validation{--surface-card-padding:var(--surface-card-padding-lg)}}label{margin-bottom:.3125em;font-weight:700;display:block}form{width:100%;max-width:600px;margin:0 auto}@media (width>=50em){h1{text-align:start}.form-row{flex-direction:row}.form-container{min-height:70vh;padding-block:0 var(--space-16)}}.hero{gap:var(--space-6);grid-template-columns:1fr;align-items:start;display:grid}.hero--no-image{flex-direction:column;display:flex}.profile-img{aspect-ratio:5/4;object-fit:cover;border-radius:var(--radius-2xl);width:min(100%,14rem)}@media (width>=50em){.hero{gap:var(--space-12);grid-template-columns:minmax(0,7fr) minmax(10rem,3fr)}.profile-img{justify-self:end;width:100%;max-width:18rem}}.hero-content{gap:var(--space-4);flex-direction:column;display:flex}.align-center{text-align:center;align-items:center}.align-start{text-align:left;align-items:flex-start}.hero-tagline{color:var(--gray-100);white-space:pre-line;max-width:70ch;margin:0;font-size:clamp(1.05rem,1.6vw,1.35rem)}.hero-buttons{margin-top:var(--space-4);gap:var(--space-3);flex-wrap:wrap;display:inline-flex}input:focus,textarea:focus{outline:2px solid var(--accent-regular);outline-offset:2px}button:after{content:"";pointer-events:none;transition:background-color var(--theme-transition);mix-blend-mode:overlay;position:absolute;inset:0}button.back-link:hover:after,button:hover:after{background-color:#ffffff4d}
