:root{--ink:#11110f;--muted:#626159;--paper:#f4f1e8;--card:#fffdf7;--acid:#d7ff3f;--orange:#ff7145;--line:#d8d4c8}*{box-sizing:border-box}html{scroll-behavior:smooth}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{color:var(--ink);background:var(--paper);margin:0;font-family:Manrope,sans-serif;line-height:1.55}a{color:inherit;text-decoration:none}button{font-family:inherit}.shell{width:min(100% - 28px,1180px);margin:auto}.eyebrow{letter-spacing:.09em;text-transform:uppercase;color:#59584f;align-items:center;gap:10px;font:500 .72rem/1.3 DM Mono,monospace;display:flex}.eyebrow:before{content:"";background:currentColor;width:28px;height:1px}header{z-index:5;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-bottom:1px solid var(--line);background:#f4f1e8e8;position:sticky;top:0}nav{justify-content:space-between;align-items:center;gap:16px;min-height:64px;display:flex}.brand{letter-spacing:-.06em;white-space:nowrap;font:800 .95rem/1 Manrope,sans-serif}.brand i{letter-spacing:0;font:italic 600 .9rem Playfair Display,serif}.nav-links{text-transform:uppercase;align-items:center;gap:13px;font:500 .65rem DM Mono,monospace;display:flex}.nav-links a{border-bottom:1px solid #0000;padding:6px 0}.nav-links a:hover{border-color:var(--ink)}.nav-links a.nav-optional{display:none}.hero{grid-template-columns:1fr;gap:28px;padding:34px 0 44px;display:grid}h1{letter-spacing:-.06em;max-width:850px;margin:16px 0 20px;font-size:clamp(2.6rem,11vw,8.2rem);font-weight:800;line-height:.95}h1 em{letter-spacing:-.05em;font-family:Playfair Display,serif;font-style:italic;font-weight:600}.hero-copy{color:#45443d;max-width:610px;margin:0;font-size:clamp(1rem,1.6vw,1.25rem)}.hero-aside{border-left:0;flex-direction:column;justify-content:flex-start;padding-left:0;display:flex}.availability{background:var(--acid);border:1px solid var(--ink);text-transform:uppercase;padding:15px;font:500 .72rem/1.45 DM Mono,monospace}.availability b{margin-top:4px;font-size:.8rem;display:block}.actions{flex-wrap:wrap;gap:12px;margin-top:28px;display:flex}.button{border:1px solid var(--ink);text-transform:uppercase;cursor:pointer;background:0 0;align-items:center;gap:12px;min-height:44px;padding:13px 17px;font:500 .75rem DM Mono,monospace;transition:all .2s;display:inline-flex}.button:hover{box-shadow:4px 4px 0 var(--ink);transform:translate(-3px,-3px)}.button.dark{color:var(--card);background:var(--ink)}.ticker{border-block:1px solid var(--ink);background:var(--orange);white-space:nowrap;overflow:hidden}.ticker p{letter-spacing:.1em;text-transform:uppercase;margin:0;padding:12px 0;font:500 .72rem DM Mono,monospace;animation:25s linear infinite slide;display:inline-block}@media (prefers-reduced-motion:reduce){.ticker p{animation:none}}@keyframes slide{to{transform:translate(-50%)}}section{border-bottom:1px solid var(--line);padding:62px 0}.section-head{grid-template-columns:1fr;gap:14px;margin-bottom:32px;display:grid}h2{letter-spacing:-.06em;max-width:760px;margin:0;font-size:clamp(2rem,8vw,4.7rem);line-height:1}.intro{max-width:680px;color:var(--muted);margin:20px 0 0;font-size:1.05rem}.project-grid{grid-template-columns:repeat(12,1fr);gap:16px;display:grid}.project{background:var(--card);border:1px solid var(--ink);flex-direction:column;grid-column:span 12;justify-content:space-between;min-height:260px;padding:22px;transition:transform .25s,box-shadow .25s;display:flex;position:relative}.project:hover{box-shadow:8px 8px 0 var(--ink);transform:translateY(-6px)}.project.featured{background:var(--ink);color:#fffdf7}.project.third{background:var(--acid)}.project-top{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.project-index{opacity:.72;font:500 .68rem DM Mono,monospace}.project-arrow{border:1px solid;border-radius:50%;flex:none;place-items:center;width:30px;height:30px;font-size:1rem;transition:all .2s;display:grid}.project:hover .project-arrow{background:var(--orange);color:var(--ink);border-color:var(--orange);transform:rotate(-45deg)}h3{letter-spacing:-.05em;margin:0;font-size:clamp(1.5rem,6vw,2.7rem);line-height:1}.project p{opacity:.78;max-width:530px;margin:12px 0 0;font-size:.92rem}.tags{flex-wrap:wrap;gap:7px;margin-top:20px;display:flex}.tag{text-transform:uppercase;opacity:.8;border:1px solid;padding:5px 8px;font:500 .62rem DM Mono,monospace}.github-stats-status{color:var(--muted);text-transform:uppercase;font:500 .72rem DM Mono,monospace}.contribution-card{border:1px solid var(--ink);background:var(--card);flex-direction:column;align-items:center;width:fit-content;max-width:100%;margin:0 auto;padding:18px 16px;display:flex}.contribution-scroll{align-self:stretch;min-width:0;padding-bottom:2px;overflow-x:auto}.contribution-graph{--cell-size:9px;--cell-gap:3px;display:inline-block}.contribution-months{grid-template-columns:repeat(var(--week-count), var(--cell-size));gap:var(--cell-gap);margin-bottom:4px;display:grid}.contribution-month-label{text-transform:uppercase;color:var(--muted);font:500 .6rem DM Mono,monospace}.contribution-cells{grid-template-columns:repeat(var(--week-count), var(--cell-size));grid-template-rows:repeat(7, var(--cell-size));gap:var(--cell-gap);display:grid}.contribution-cell{width:var(--cell-size);height:var(--cell-size);background:var(--line);border-radius:2px}.contribution-cell.level-0{background:var(--card);border:1px solid var(--line)}.contribution-cell.level-1{background:#93bd2e}.contribution-cell.level-2{background:#6fa01c}.contribution-cell.level-3{background:#4d7815}.contribution-cell.level-4{background:#2a4d05}.contribution-cells .contribution-cell:hover{outline:2px solid var(--ink);outline-offset:1px}.contribution-tooltip{background:var(--ink);max-width:220px;color:var(--card);text-align:center;pointer-events:none;z-index:20;border-radius:2px;padding:6px 9px;font:500 .68rem/1.4 DM Mono,monospace;position:fixed;transform:translate(-50%,-100%)}.contribution-tooltip.flip{transform:translate(-50%)}.contribution-legend{text-transform:uppercase;color:var(--muted);align-items:center;gap:5px;margin-top:14px;font:500 .65rem DM Mono,monospace;display:flex}.contribution-legend .contribution-cell{width:11px;height:11px}.experience{grid-template-columns:1fr;gap:14px;display:grid}.role{border-top:2px solid var(--ink);padding-top:16px}.role-meta{text-transform:uppercase;flex-wrap:wrap;justify-content:space-between;gap:10px;font:500 .72rem DM Mono,monospace;display:flex}.role h3{margin:20px 0 12px;font-size:1.7rem}.role-progression{border-left:1px solid var(--line);margin:20px 0 16px;padding-left:20px}.role-title{padding:0 0 20px;position:relative}.role-title:last-child{padding-bottom:0}.role-title:before{content:"";border:1px solid var(--ink);background:var(--paper);border-radius:50%;width:9px;height:9px;position:absolute;top:4px;left:-25px}.role-title.current:before{background:var(--acid)}.role-title .label{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font:500 .63rem DM Mono,monospace}.role-title-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:10px;display:flex}.role-title h3{margin:0;font-size:1.3rem}.role ul{max-width:760px;color:var(--muted);margin:0;padding-left:19px}.role li+li{margin-top:8px}.skills{border-top:0;grid-template-columns:1fr;display:grid}.skill-group{border-top:1px solid var(--line);border-right:0;padding:16px 0}.skill-group h3{margin-bottom:10px;font-size:1.02rem}.skill-group p{color:var(--muted);margin:0;font-size:.85rem}.contact{background:var(--ink);color:#fffdf7;padding:64px 0 24px}.contact-grid{grid-template-columns:1fr;align-items:start;gap:26px;display:grid}.contact h2{font-size:clamp(2.3rem,10vw,6.7rem)}.contact em{color:var(--acid);font-style:italic}.contact .button{color:var(--ink);background:var(--acid);border-color:var(--acid)}.contact-form{flex-direction:column;gap:12px;max-width:560px;margin-top:40px;display:flex}.contact-form .field{flex-direction:column;gap:6px;display:flex}.contact-form label{text-transform:uppercase;letter-spacing:.08em;color:#cfcec5;font:500 .68rem DM Mono,monospace}.contact-form input,.contact-form textarea{color:#fffdf7;resize:vertical;background:#1c1c19;border:1px solid #3a3a34;width:100%;min-height:44px;padding:12px 14px;font:500 .9rem Manrope,sans-serif}.contact-form input:focus,.contact-form textarea:focus{outline:2px solid var(--acid);outline-offset:1px}.contact-form textarea{min-height:110px}.contact-form .honeypot{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.contact-form button[type=submit]{align-self:flex-start;margin-top:6px}.contact-form button[type=submit]:disabled{opacity:.6;cursor:not-allowed}.footer{color:#a4a39b;text-transform:uppercase;flex-direction:column;justify-content:space-between;gap:16px;padding:44px 0 25px;font:500 .66rem DM Mono,monospace;display:flex}.footer-links{gap:20px;display:flex}.modal-overlay{z-index:40;background:#11110fb8;justify-content:center;align-items:center;padding:20px;animation:.2s ease-out modalOverlayIn;display:flex;position:fixed;inset:0}.modal-box{background:var(--card);width:100%;max-width:380px;color:var(--ink);border:1px solid var(--ink);box-shadow:8px 8px 0 var(--acid);padding:32px 26px 26px;animation:.32s cubic-bezier(.16,1,.3,1) modalBoxIn;position:relative}@keyframes modalOverlayIn{0%{opacity:0}}@keyframes modalBoxIn{0%{opacity:0;transform:translateY(22px)scale(.95)}}@media (prefers-reduced-motion:reduce){.modal-overlay,.modal-box{animation:none}}.modal-box.error{box-shadow:8px 8px 0 var(--orange)}.modal-box h3{letter-spacing:-.03em;margin:0 0 12px;font-size:1.5rem}.modal-box p{color:var(--muted);margin:0 0 22px;font-size:.92rem}.modal-box .button{justify-content:center;width:100%}.modal-close{border:1px solid var(--ink);cursor:pointer;background:0 0;place-items:center;width:32px;height:32px;font-size:.9rem;display:grid;position:absolute;top:12px;right:12px}.chat-toggle{z-index:20;border:1px solid var(--ink);background:var(--ink);width:56px;height:56px;color:var(--card);cursor:pointer;box-shadow:4px 4px 0 var(--orange);border-radius:50%;place-items:center;font-size:1.3rem;transition:transform .15s;animation:.5s cubic-bezier(.34,1.56,.64,1) .4s backwards chatToggleIn;display:grid;position:fixed;bottom:16px;right:16px}.chat-toggle:hover{transform:scale(1.06)}.chat-toggle:active{transform:scale(.94)}@keyframes chatToggleIn{0%{opacity:0;transform:scale(.4)rotate(-20deg)}}.chat-avatar{border:1px solid var(--ink);background:var(--acid);width:26px;height:26px;color:var(--ink);border-radius:50%;flex:none;place-items:center;font:800 .68rem DM Mono,monospace;display:grid}.chat-toggle .chat-avatar{border-color:var(--card);width:34px;height:34px;font-size:.85rem}.chat-panel{z-index:30;background:var(--paper);border:1px solid var(--ink);transform-origin:100% 100%;flex-direction:column;height:100dvh;animation:.3s cubic-bezier(.16,1,.3,1) chatPanelIn;display:flex;position:fixed;top:0;left:0;right:0}@keyframes chatPanelIn{0%{opacity:0;transform:translateY(28px)scale(.96)}}@media (prefers-reduced-motion:reduce){.chat-toggle,.chat-panel{animation:none}}.chat-panel-head{border-bottom:1px solid var(--line);background:var(--card);justify-content:space-between;align-items:center;padding:14px 16px;display:flex}.chat-panel-title{align-items:center;gap:10px;display:flex}.chat-panel-head h4{letter-spacing:-.02em;margin:0;font-size:1rem}.chat-panel-subtitle{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font:500 .62rem DM Mono,monospace}.chat-close{border:1px solid var(--ink);cursor:pointer;background:0 0;place-items:center;width:36px;height:36px;font-size:1rem;display:grid}.chat-log{-webkit-overflow-scrolling:touch;overscroll-behavior:contain;flex-direction:column;flex:1;gap:12px;min-height:0;padding:16px;display:flex;overflow-y:auto}.chat-panel.compact .chat-panel-head{padding:8px 12px}.chat-panel.compact .chat-panel-subtitle,.chat-panel.compact .chat-hint{display:none}.chat-panel.compact .chat-log{padding:12px}.chat-row{transform-origin:0 100%;align-items:flex-end;gap:8px;max-width:88%;animation:.34s cubic-bezier(.34,1.4,.5,1) backwards chatRowInLeft;display:flex}.chat-row.user{transform-origin:100% 100%;align-self:flex-end;animation-name:chatRowInRight}.chat-row.assistant,.chat-row.error{align-self:flex-start}@keyframes chatRowInLeft{0%{opacity:0;transform:translate(-14px)translateY(8px)scale(.82)}}@keyframes chatRowInRight{0%{opacity:0;transform:translate(14px)translateY(8px)scale(.82)}}@media (prefers-reduced-motion:reduce){.chat-row{animation:none}}.chat-msg{border:1px solid var(--line);background:var(--card);padding:10px 13px;font-size:.88rem;line-height:1.45}.chat-msg.user{background:var(--ink);color:var(--card);border-color:var(--ink)}.chat-msg.error{border-color:var(--orange);color:var(--orange)}.chat-hint{color:var(--muted);text-transform:uppercase;justify-content:space-between;align-items:baseline;gap:10px;margin:0;padding:0 16px 8px;font:500 .68rem DM Mono,monospace;display:flex}.chat-quota{border:1px solid var(--line);background:var(--card);color:var(--ink);white-space:nowrap;flex:none;padding:3px 7px}.chat-quota.spent{border-color:var(--orange);color:var(--orange)}.chat-input-row{padding:12px;padding-bottom:calc(12px + env(safe-area-inset-bottom));border-top:1px solid var(--line);background:var(--card);flex:none;gap:8px;display:flex}.chat-input-row input{border:1px solid var(--line);background:var(--paper);flex:1;min-height:44px;padding:10px 12px;font:500 16px Manrope,sans-serif}.chat-input-row input:focus{outline:2px solid var(--ink)}.chat-input-row button{border:1px solid var(--ink);background:var(--ink);min-width:44px;min-height:44px;color:var(--card);cursor:pointer;text-transform:uppercase;padding:0 16px;font:500 .75rem DM Mono,monospace}.chat-input-row button:disabled{opacity:.5;cursor:not-allowed}@media (width>=760px){.shell{width:min(1180px,100% - 40px)}nav{min-height:72px}.brand{font:800 1.05rem/1 Manrope,sans-serif}.brand i{font-size:1rem}.nav-links{gap:25px;font-size:.73rem}.nav-links a.nav-optional{display:inline}.hero{grid-template-columns:1.35fr .65fr;gap:50px;padding:58px 0 76px}h1{letter-spacing:-.085em;margin:19px 0 24px;line-height:.88}.hero-aside{border-left:1px solid var(--line);justify-content:flex-end;align-self:stretch;padding-left:30px}.hero-tetris-wrap{margin-bottom:16px}.hero-tetris{border:1px solid var(--ink);background:var(--card);cursor:pointer;height:clamp(300px,26vw,430px);padding:6px;position:relative}.hero-tetris:focus-visible{outline:2px solid var(--acid);outline-offset:2px}.hero-tetris-grid{gap:2px;width:100%;height:100%;display:grid}.hero-tetris-cell{background:var(--paper);border-radius:2px}.hero-tetris-cell.filled{box-shadow:inset 0 0 0 1px #11110f40}.hero-tetris-overlay{text-align:center;background:#fffdf7eb;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:16px;display:flex;position:absolute;inset:0}.hero-tetris-overlay strong{letter-spacing:-.04em;font-size:1.5rem}.hero-tetris-final{text-transform:uppercase;color:var(--ink);font:500 .78rem DM Mono,monospace}.hero-tetris-cta{text-transform:uppercase;letter-spacing:.06em;border:1px solid var(--ink);background:var(--acid);padding:7px 12px;font:500 .72rem DM Mono,monospace}.hero-tetris-hint{color:var(--muted);margin-top:4px;font:500 .6rem DM Mono,monospace}.hero-tetris-score{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);justify-content:space-between;gap:12px;margin-top:8px;font:500 .66rem DM Mono,monospace;display:flex}.hero-tetris-score b{color:var(--ink);font-weight:700}.actions{margin-top:36px}section{padding:108px 0}.section-head{grid-template-columns:220px 1fr;gap:25px;margin-bottom:42px}.intro{margin-top:24px;font-size:1.1rem}.project-grid{gap:18px}.project{min-height:340px;padding:25px}.project.featured,.project.fourth{grid-column:span 7}.project.secondary,.project.third{grid-column:span 5}.project p{margin-top:13px;font-size:.94rem}.tags{margin-top:24px}.contribution-card{padding:24px}.contribution-graph{--cell-size:12px;--cell-gap:4px}.experience{grid-template-columns:220px 1fr;gap:25px}.role{padding-top:18px}.role h3{margin:25px 0 15px;font-size:2rem}.role-progression{margin:25px 0 18px}.role-title{padding-bottom:22px}.role-title h3{font-size:1.45rem}.skills{border-top:1px solid var(--ink);grid-template-columns:220px repeat(3,1fr)}.skill-group{border-top:0;border-right:1px solid var(--line);min-height:165px;padding:20px}.skill-group:first-of-type{padding-left:0}.contact{padding:112px 0 28px}.contact-grid{grid-template-columns:1fr 1fr;align-items:start;gap:90px}.contact h2{font-size:clamp(2.3rem,10vw,6.4rem)}.contact h2 em{white-space:nowrap}.contact-form{gap:22px;margin-top:0}.contact-form label{font-size:.75rem}.contact-form input,.contact-form textarea{min-height:56px;padding:15px 18px;font-size:1rem}.contact-form textarea{min-height:220px}.contact-form button[type=submit]{margin-top:10px;padding:17px 22px;font-size:.82rem}.footer{flex-direction:row;padding-top:68px}.chat-toggle{bottom:28px;right:28px}.chat-panel{width:380px;height:560px;box-shadow:8px 8px 0 var(--ink);inset:auto 28px 96px auto}.chat-input-row{padding-bottom:12px}.chat-input-row input{font-size:.9rem}}@media (width>=760px) and (aspect-ratio>=1){.hero{align-items:end;min-height:calc(100vh - 72px)}}@media (width>=760px) and (width<=1023px){.hero{grid-template-columns:1.15fr .85fr;gap:32px;padding:44px 0 56px}.hero-aside{padding-left:24px}section{padding:84px 0}.section-head,.experience{grid-template-columns:170px 1fr;gap:20px}.skills{grid-template-columns:repeat(3,1fr)}.skills>.eyebrow{grid-column:1/-1;padding:14px 0 4px}.skill-group{min-height:auto;padding:16px 14px}.skill-group:first-of-type{padding-left:0}.contact-grid{grid-template-columns:1fr;gap:36px}.contact h2 em{font-size:.7em}.contact-form{max-width:100%}.contact-form textarea{min-height:160px}}
