@font-face{font-family:Satoshi;src:url('Satoshi_Complete/Fonts/WEB/fonts/Satoshi-Variable.woff2') format('woff2');font-weight:300 900;font-display:swap}
*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden}body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;color:#24242a;background:#18334e}button,input{font:inherit}button,a,input{touch-action:manipulation}button{cursor:pointer}a{color:inherit;text-decoration:none}button:disabled{cursor:default;opacity:.35}button:focus-visible,a:focus-visible,input:focus-visible,[tabindex]:focus-visible{outline:3px solid #2989fa;outline-offset:3px}[hidden]{display:none!important}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.desktop{--ease:cubic-bezier(.22,1,.36,1);position:relative;width:100%;height:100svh;overflow:hidden;background:#d54579 url('assets/desktop-wallpaper.png') center/cover;transition:transform 600ms var(--ease),filter 400ms ease;transform-origin:55% 45%}
.desktop-menubar{height:29px;display:flex;align-items:center;gap:22px;padding:0 20px;color:#fff;background:#36436235;backdrop-filter:blur(30px);font-size:12px;text-shadow:0 1px 4px #10244330}.desktop-brand{font-weight:800;font-size:17px;letter-spacing:-1px}.active-app{font-weight:700}.menubar-right{margin-left:auto;display:flex;align-items:center;gap:16px;font-size:11px}.menubar-right button{display:grid;place-items:center;width:30px;height:27px;border:0;background:none;color:inherit}.menubar-right svg{width:18px;height:18px}
.desktop-content{position:absolute;inset:60px 32px 92px;display:grid;grid-template-columns:minmax(0,1fr) 210px;gap:38px;max-width:1460px;margin:0 auto;align-items:start;pointer-events:none}.desktop-content>*{pointer-events:auto}
.portfolio-window{width:100%;height:100%;max-height:860px;min-height:0;display:flex;flex-direction:column;overflow:hidden;position:relative;border:1px solid #fff8;border-radius:11px;background:#fff;box-shadow:0 25px 65px #15233455,0 2px 8px #0003;transform:translate(var(--window-x,0px),var(--window-y,0px));transition:opacity 240ms,scale 400ms var(--ease);animation:window-in 450ms var(--ease);transform-origin:50% 100%}.portfolio-window.is-dragging{transition:none}.portfolio-window.is-minimized{opacity:0;scale:.8;pointer-events:none}.portfolio-window.is-expanded{position:fixed;inset:35px 8px 91px;width:auto;height:auto;max-height:none;z-index:5;transform:none!important}.desktop-content:has(.is-expanded){position:static}
.browser-titlebar{height:41px;flex-shrink:0;display:flex;align-items:end;gap:14px;padding:0 12px;background:#dce0e7;user-select:none;touch-action:none;cursor:grab}.traffic-lights{display:flex;align-items:center;gap:8px;height:41px;padding-right:12px}.traffic-lights button{width:12px;height:12px;padding:0;border:1px solid #0001;border-radius:50%;background:#ff6058}.traffic-lights button:nth-child(2){background:#ffbd2e}.traffic-lights button:nth-child(3){background:#28c840}.traffic-lights:hover button:first-child::after{content:'×';font-size:10px;display:block;line-height:9px;color:#681610}.traffic-lights:hover button:nth-child(2)::after{content:'−';font-size:10px;display:block;line-height:9px;color:#655019}.browser-tab{display:flex;align-items:center;gap:8px;width:250px;height:33px;padding:0 11px;background:#f6f7fa;border-radius:9px 9px 0 0;font-size:11px;cursor:default}.browser-tab img{width:15px;height:15px;border-radius:3px}.browser-tab button{margin-left:auto;border:0;background:none;color:#6c727b;font-size:16px;padding:2px}.browser-new{height:34px;background:none;border:0;font-size:19px;color:#515964}.browser-toolbar{display:flex;align-items:center;gap:13px;flex-shrink:0;height:42px;padding:0 13px;background:#f6f7fa;border-bottom:1px solid #d6dbe2;font-size:17px;color:#596372}.browser-toolbar button{border:0;background:none;width:23px;padding:0;color:inherit;font-size:24px}.browser-toolbar>a{width:23px;text-align:center}.browser-address{flex:1;min-width:0;display:flex;align-items:center;gap:10px;background:#e7eaf0;border-radius:20px;padding:7px 13px;font-size:11px;color:#5d6571}.browser-address>span:last-child{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.browser-toolbar button:last-child{font-size:20px}
.portfolio-nav{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:17px 28px;border-bottom:1px solid #eee;flex-shrink:0;font-family:Satoshi,sans-serif;font-size:12px;font-weight:650}.portfolio-nav>a>span{display:block;font-size:9px;color:#92909a;font-weight:400;margin-top:3px}.portfolio-nav>div{display:flex;align-items:center;gap:22px}.portfolio-nav [aria-current=page]{color:#7062ad}.browser-page{min-height:0;flex:1;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#c4c4cc transparent;background:#fff;font-family:Satoshi,sans-serif;scroll-behavior:smooth}.portfolio-content{padding:32px 32px 0;max-width:1100px;margin:0 auto}.desktop-intro{display:grid;grid-template-columns:1fr 100px;gap:24px;align-items:center;margin-bottom:30px}.desktop-eyebrow{font-size:9px!important;font-weight:700;letter-spacing:.12em;color:#8a8397!important;margin:0 0 18px!important}.desktop-intro h1{margin:0;font-size:clamp(32px,3.1vw,47px);line-height:1.1;letter-spacing:-.055em;font-weight:650}.desktop-intro h1 em{color:#78629c;font-family:Georgia,serif;font-weight:400}.desktop-intro p{max-width:470px;font-size:13px;line-height:1.7;color:#787383;margin:17px 0}.desktop-portrait{width:100px;height:128px;object-fit:cover;object-position:50% 25%;border-radius:50px 50px 8px 8px;background:#f7f7f7}.intro-links{display:flex;gap:22px;align-items:center;font-size:11px;font-weight:650}.intro-links a:first-child{display:flex;gap:22px;background:#292632;color:#fff;padding:11px 15px;border-radius:6px}.desktop-work-heading{display:flex;justify-content:space-between;align-items:center;border-top:1px solid #eee;padding-top:22px;margin-bottom:18px}.desktop-work-heading h2{margin:0;font-size:15px}.desktop-work-heading>span{font-size:10px;color:#8b8694}.desktop-projects{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:25px 22px}.desktop-project-image{height:clamp(130px,16vh,200px);overflow:hidden;border-radius:7px;background:#e6e9e7}.desktop-project-image img{width:100%;height:100%;object-fit:cover;transition:transform 250ms var(--ease)}.desktop-projects a:hover img{transform:scale(1.035)}.brio-preview{background:#e9dbe5}.brio-preview img{object-fit:contain;padding:22px}.project-type{display:block;margin-top:13px;color:#86818c;font-size:8px;font-weight:650;letter-spacing:.035em}.desktop-projects h3{display:flex;justify-content:space-between;margin:5px 0;font-size:20px;letter-spacing:-.04em}.desktop-projects h3 span{font-size:15px;font-weight:400}.desktop-projects p{font-size:12px;color:#827b89;margin:0}.desktop-window-footer{display:flex;justify-content:space-between;gap:15px;border-top:1px solid #eee;margin-top:28px;padding:20px 0;font-size:10px;color:#8b8390}.desktop-window-footer a{color:#4d4459}
.desktop-side{display:flex;flex-direction:column;gap:25px;width:210px;justify-self:end}.date-widget{background:#fffffff0;border:1px solid #ffffff80;border-radius:20px;box-shadow:0 10px 24px #17243924;padding:18px 20px;display:grid;grid-template-columns:1fr auto;align-items:center;backdrop-filter:blur(24px)}#widget-weekday{font-size:10px;color:#dc3c55;grid-column:1/-1;text-transform:uppercase;font-weight:650;letter-spacing:.07em}#widget-day{font-size:49px;font-weight:300;letter-spacing:-.045em;line-height:1.15}#widget-month{font-size:12px;color:#8e8492}.date-widget>div{border-top:1px solid #e8e3e8;padding-top:12px;margin-top:9px;font-size:10px;color:#7d7484;grid-column:1/-1;display:flex;justify-content:space-between}.date-widget time{color:#3a3340}.desktop-shortcuts{display:grid;grid-template-columns:repeat(2,1fr);gap:22px 10px}.desktop-shortcut{display:flex;align-items:center;flex-direction:column;gap:8px;border:0;border-radius:10px;background:none;color:#fff;font-size:11px;text-shadow:0 1px 4px #0009;padding:5px}.desktop-shortcut:focus-visible{outline:3px solid #fff;outline-offset:2px;background:#ffffff26;box-shadow:0 0 0 6px #2989fa}.folder-icon{position:relative;width:52px;height:37px;margin-top:8px;background:linear-gradient(#8cd5ff,#53b3fa);border:1px solid #a8e0ff;border-radius:4px;box-shadow:0 3px 7px #25435740}.folder-icon::before{content:'';position:absolute;top:-7px;left:-1px;width:25px;height:7px;border-radius:4px 4px 0 0;background:#79cafa}.file-icon{display:grid;place-items:center;width:36px;height:45px;border-radius:3px;background:#fff;color:#797382;font-size:11px;font-weight:700;text-shadow:none;box-shadow:0 3px 8px #1235}.room-button{display:flex;align-items:center;justify-content:center;gap:12px;border:1px solid #fff6;background:#ffffff30;backdrop-filter:blur(30px);border-radius:15px;padding:15px;color:#fff;text-align:left;box-shadow:0 8px 22px #24315920}.room-button>span:first-child{font-size:25px}.room-button>span:last-child{font-size:13px;font-weight:600}.room-button small{font-size:10px;font-weight:400;display:block;margin-top:3px;color:#fffd}
.desktop-dock{position:absolute;z-index:10000;bottom:max(10px,env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:7px;padding:8px 10px 10px;border:1px solid #fff8;border-radius:19px;background:#e9e5f56b;backdrop-filter:blur(30px) saturate(1.5);box-shadow:0 12px 28px #1b21413d,inset 0 1px #fff4}.dock-app{position:relative;display:grid;place-items:center;width:44px;height:44px;padding:4px;border:0;border-radius:10px;background:#ffffffec;box-shadow:0 2px 4px #1113,inset 0 1px #fff;transition:transform 220ms var(--ease);transform-origin:50% 100%}.dock-app[data-app=Spotify]{background:#202323}.dock-app[data-app=Figma]{background:#272727}.dock-app[data-app=Obsidian]{background:#241e34}.dock-app img{width:100%;height:100%;object-fit:contain}.dock-app>span{position:absolute;z-index:1;bottom:58px;white-space:nowrap;font-size:11px;background:#f3f0f6ed;color:#282431;border-radius:6px;padding:7px 10px;opacity:0;pointer-events:none;transition:opacity 150ms}.dock-app:hover,.dock-app:focus-visible{transform:translateY(-7px) scale(1.12)}.dock-app:hover>span,.dock-app:focus-visible>span{opacity:1}.dock-app.is-running::after{content:'';position:absolute;bottom:-7px;width:4px;height:4px;border-radius:50%;background:#282136}.dock-divider{height:36px;border-left:1px solid #6665;margin:0 2px}.dock-desktop{font-size:23px;background:#c2dafa;color:#36659a}
.sound-mixer{position:absolute;z-index:30;top:40px;right:18px;width:290px;padding:20px;background:#f6f4f2ed;border:1px solid #fff9;border-radius:18px;backdrop-filter:blur(35px);box-shadow:0 16px 45px #22344940;animation:window-in 200ms var(--ease)}.sound-mixer header{display:flex;align-items:center;justify-content:space-between;gap:10px}.sound-mixer h2{font-size:14px;margin:0}.sound-mixer header button{border:0;border-radius:20px;background:#3e3748;color:#fff;padding:8px 11px;font-size:10px}.sound-mixer>p{font-size:11px;color:#847a8b;margin:9px 0 22px}.sound-mixer>label:not(.music-file-label){display:flex;justify-content:space-between;font-size:12px}.sound-mixer output{font-size:11px;color:#8d8093}.sound-mixer input[type=range]{width:100%;height:27px;margin:4px 0 17px;accent-color:#658fd7}.music-file-label{display:flex;justify-content:space-between;border-top:1px solid #ddd3df;padding:14px 0;font-size:11px;cursor:pointer}.music-file-label:has(+input:focus-visible){outline:3px solid #2989fa}.music-transport{display:flex;align-items:center;gap:10px;color:#8a7c90;font-size:11px}.music-transport>span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.music-transport button{width:32px;height:32px;border:0;border-radius:50%;background:#fff}.sound-mixer .mixer-note{font-size:10px;margin:13px 0 0;line-height:1.5}
.reading-page{max-width:850px;margin:auto;padding:30px 34px 55px;font-size:14px;line-height:1.8;color:#605b69}.reading-page h1,.reading-page h2,.reading-page h3{color:#282530;line-height:1.2;letter-spacing:-.03em}.reading-page h1{font-size:42px}.reading-page h2{font-size:24px;margin-top:34px}.reading-page h3{font-size:30px}.reading-page p{margin:15px 0}.reading-page a{color:#6155a0;text-decoration:underline;text-underline-offset:3px}.reading-page img,.reading-page video{display:block;max-width:100%;max-height:460px;object-fit:contain;margin:22px auto;border-radius:8px}.reading-page video{width:100%}.reading-page figure{margin:25px 0}.reading-page figcaption,.case-page-caption,.case-page-meta,.eyebrow,.case-page-kicker,.case-file-stamp{font-size:11px;color:#8b8195}.case-page-meta{display:flex;justify-content:space-between;gap:16px}.case-page-lede,.hero-lede{font-size:22px;line-height:1.4}.reading-page dt{font-weight:700;color:#312c3a}.reading-page dd{margin:4px 0 19px}.reading-page .build-core{display:flex;gap:20px;list-style:none;padding:0;flex-wrap:wrap}.build-core li{display:flex;gap:10px;align-items:center;font-size:12px}.reading-page .build-core img{width:32px;height:32px;margin:0}.build-core small{display:block;color:#8d8095}.reading-page .app-store-badge img{width:130px;margin:15px 0}.reading-page .about-photo img{width:150px;height:180px;object-fit:cover;margin:0;border-radius:10px}.listening-sticker-row{display:flex;gap:18px;flex-wrap:wrap}.listening-sticker-row figure{width:130px}.listening-sticker-row img{height:145px;margin:0 auto 12px}.listening-sticker-row figcaption span{display:block}.reading-page svg{width:18px;height:18px;stroke:currentColor;fill:none}.case-impact-grid,.case-facts{display:grid;gap:18px;grid-template-columns:repeat(3,minmax(0,1fr))}.case-facts h2{font-size:15px;margin-top:10px}.case-callout{padding:8px 18px;background:#f4f1f7;border-left:3px solid #b5a5c6}.case-role-tags span{display:inline-block;margin:0 5px 5px 0}.case-read-time{font-size:11px}.case-image-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.case-video-player{position:relative}
@keyframes window-in{from{opacity:0;scale:.98;translate:0 8px}to{opacity:1;scale:1;translate:0 0}}
@media(min-width:1700px){.desktop-content{inset:70px 6vw 94px;gap:50px}.desktop-side{width:210px}.portfolio-window{max-height:850px}.portfolio-content{padding:34px 42px 0}}
@media(max-width:1000px){.desktop-content{inset:50px 18px 92px;grid-template-columns:minmax(0,1fr) 160px;gap:20px}.desktop-side{width:160px}.date-widget{padding:15px}.desktop-intro{grid-template-columns:1fr}.desktop-portrait{display:none}.portfolio-content{padding:26px 24px 0}.portfolio-nav{padding:15px 22px}.desktop-work-heading>span{display:none}.desktop-intro h1{font-size:36px}.portfolio-nav>div{gap:15px}}
@media(max-width:700px){.desktop-menubar{height:32px;padding:0 12px;gap:14px;font-size:11px}.menu-contact{display:none}.menubar-right{gap:7px}.menubar-right time{max-width:65px;white-space:nowrap;overflow:hidden;font-size:10px}.desktop-content{display:block;inset:45px 10px 81px}.portfolio-window{z-index:2;height:100%;border-radius:9px}.portfolio-window.is-minimized{visibility:hidden}.portfolio-window.is-expanded{inset:35px 4px 75px}.desktop-side{position:absolute;inset:20px 8px auto auto;width:180px}.browser-titlebar{height:38px;padding:0 9px;gap:7px}.traffic-lights{gap:1px;padding-right:2px;height:38px}.traffic-lights button{width:22px;height:22px;border:5px solid #dce0e7}.browser-tab{width:auto;min-width:0;flex:1;font-size:10px}.browser-tab>span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.browser-new{display:none}.browser-toolbar{gap:7px;height:40px;padding:0 10px}.browser-address{font-size:10px;padding:7px 10px}.portfolio-nav{padding:12px 16px;font-size:11px;gap:8px}.portfolio-nav>a>span{display:none}.portfolio-nav>div{gap:13px}.portfolio-content{padding:24px 20px 0}.desktop-intro h1{font-size:34px}.desktop-intro p{font-size:13px}.desktop-eyebrow{font-size:8px!important;letter-spacing:.08em}.intro-links{gap:16px;font-size:10px}.intro-links a:first-child{gap:12px;padding:10px 12px}.desktop-projects{grid-template-columns:1fr;gap:24px}.desktop-project-image{height:155px}.desktop-work-heading{padding-top:19px}.desktop-window-footer{font-size:9px}.desktop-window-footer a{white-space:nowrap}.desktop-dock{gap:5px;bottom:max(9px,env(safe-area-inset-bottom));padding:8px 8px 12px;border-radius:17px;width:calc(100% - 18px);justify-content:space-between}.dock-app{width:calc((100vw - 97px)/9);height:calc((100vw - 97px)/9);max-width:42px;max-height:42px;border-radius:8px;padding:3px;box-shadow:0 2px 3px #1112}.dock-app>span{display:none}.dock-divider{height:28px;margin:0 1px}.dock-desktop{font-size:20px}.dock-app:hover{transform:none}.sound-mixer{right:10px;top:39px;width:min(290px,calc(100vw - 20px));max-height:calc(100svh - 115px);overflow:auto}.sound-mixer input[type=range]{height:30px}.reading-page{padding:20px 22px 35px;font-size:13px}.reading-page h1{font-size:34px}.reading-page h2{font-size:22px}.case-facts,.case-impact-grid,.case-image-grid{grid-template-columns:1fr}.desktop-content:has(.is-expanded){position:absolute}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
.dock-app[data-app="LM Lab"]{background:#645780}.chess-shortcut-icon{width:45px;height:45px;border-radius:11px;box-shadow:0 4px 10px #17213e55}
.spotify-window{position:fixed;z-index:120;top:70px;right:38px;width:390px;max-width:calc(100vw - 24px);border:1px solid #ffffff45;border-radius:14px;overflow:hidden;background:#181818;color:#fff;box-shadow:0 25px 65px #0006;transition:opacity 200ms,transform 300ms cubic-bezier(.22,1,.36,1);transform-origin:50% 100%}.spotify-window.is-minimized{opacity:0;transform:translateY(20px) scale(.97);pointer-events:none}.spotify-window>header{display:flex;align-items:center;gap:9px;padding:12px 15px;background:#292929;font-size:12px}.spotify-window>header img{width:21px;height:21px}.spotify-window>header>span{font-size:10px;color:#aaa;margin-left:auto}.spotify-window button{font:inherit;border:1px solid #ffffff30;color:#fff;background:#ffffff12;border-radius:6px;padding:7px 10px;cursor:pointer}.spotify-window>header button{font-size:17px;margin-left:8px;padding:0 8px}.spotify-window iframe{display:block;width:100%;height:352px;border:0}.spotify-window #spotify-loading{padding:20px;font-size:12px;color:#bbb;line-height:1.5}.spotify-note{font-size:11px;line-height:1.5;color:#aaa;padding:0 16px;margin:13px 0}.spotify-actions{display:flex;gap:10px;padding:0 16px 15px;font-size:11px}.spotify-window:focus-within{outline:1px solid #ffffff35}@media(max-width:700px){.spotify-window{top:40px;right:12px;max-height:calc(100svh - 120px);overflow-y:auto}.spotify-window iframe{height:352px}.spotify-window button{min-height:36px}}
.document-window{position:fixed;z-index:115;top:11vh;left:50%;width:min(590px,calc(100vw - 32px));max-height:min(700px,78vh);overflow:hidden;border:1px solid #ffffff70;border-radius:13px;background:#fbfafc;color:#302b37;box-shadow:0 25px 65px #15102755;transform:translate(calc(-50% + var(--document-x,0px)),var(--document-y,0px));transition:opacity 200ms,transform 300ms cubic-bezier(.22,1,.36,1);transform-origin:50% 100%}.document-window.is-dragging{transition:none}.document-window.is-minimized{opacity:0;transform:translate(calc(-50% + var(--document-x,0px)),calc(18px + var(--document-y,0px))) scale(.97);pointer-events:none}.document-window>header{display:flex;align-items:center;gap:10px;padding:11px 14px;background:#e5e1e8;border-bottom:1px solid #d7d1db;font-size:12px;cursor:grab;user-select:none;touch-action:none}.document-window>header button{margin-left:auto;border:0;background:none;color:#716a78;font-size:21px;line-height:1;padding:0 5px;cursor:pointer}.document-icon{display:grid;place-items:center;width:22px;height:26px;border-radius:3px;background:#fff;color:#777080;font-size:7px;font-weight:800;box-shadow:0 1px 3px #32274422}.document-icon-md{color:#5c4f92}.document-body{overflow:auto;max-height:calc(min(700px,78vh) - 47px);padding:34px 40px 42px;font-family:Satoshi,sans-serif}.document-body h1{margin:0 0 9px;font-size:42px;letter-spacing:-.055em}.document-body h2{margin:27px 0 7px;font-size:14px;letter-spacing:-.02em}.document-body p{font-size:13px;line-height:1.65;color:#716977}.document-eyebrow,.markdown-meta{margin:0 0 18px!important;font-size:9px!important;letter-spacing:.12em;font-weight:700;color:#8b8095!important}.document-lede{font-size:20px!important;line-height:1.4!important;color:#433b49!important;max-width:450px}.resume-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:17px 24px;margin-top:30px;border-top:1px solid #e7e1e9;padding-top:4px}.resume-grid h2{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:#8b8095}.resume-grid p{margin:0}.document-footnote{border-top:1px solid #e7e1e9;margin-top:31px!important;padding-top:17px;font-size:11px!important}.document-body a{color:#6556a0;text-decoration:underline;text-underline-offset:3px}.markdown-document{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.markdown-document h1{font-family:Satoshi,sans-serif;font-size:38px}.markdown-document h2{font-family:Satoshi,sans-serif;font-size:16px}.markdown-document p{font-size:12px;line-height:1.75}.markdown-signoff{margin-top:32px;font-style:italic;color:#8b8095!important}
@media(max-width:700px){.document-window{top:53px;max-height:calc(100svh - 128px)}.document-body{max-height:calc(100svh - 175px);padding:27px 24px 32px}.document-body h1{font-size:34px}.resume-grid{grid-template-columns:1fr;gap:8px}.document-window>header{min-height:43px}}
.chess-window{position:fixed;z-index:116;top:8vh;left:50%;width:min(650px,calc(100vw - 32px));max-height:min(790px,86vh);overflow:auto;border:1px solid #ffffff70;border-radius:13px;background:#fbfafc;color:#302b37;box-shadow:0 25px 65px #15102755;transform:translate(calc(-50% + var(--chess-x,0px)),var(--chess-y,0px));transition:opacity 200ms,transform 300ms cubic-bezier(.22,1,.36,1);transform-origin:50% 100%}.chess-window.is-minimized{opacity:0;transform:translate(calc(-50% + var(--chess-x,0px)),calc(18px + var(--chess-y,0px))) scale(.97);pointer-events:none}.chess-window.is-dragging{transition:none}.chess-window>header{display:flex;align-items:center;gap:10px;padding:11px 14px;background:#e5e1e8;border-bottom:1px solid #d7d1db;font-size:12px;cursor:grab;user-select:none;touch-action:none}.chess-window>header button{margin-left:0;border:0;background:none;color:#716a78;font-size:21px;line-height:1;padding:0 5px;cursor:pointer}.chess-source-label{margin-left:auto;font-size:10px;color:#8b8095}.chess-body{padding:29px 34px 27px}.chess-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:20px}.chess-heading h1{margin:0 0 7px;font-size:32px;letter-spacing:-.055em}.chess-heading p:not(.document-eyebrow){margin:0;max-width:410px;color:#716977;font-size:12px;line-height:1.55}.chess-rating{display:grid;justify-items:end;gap:2px;padding:8px 0}.chess-rating strong{font-size:27px;letter-spacing:-.05em}.chess-rating span{font-size:9px;color:#8b8095;white-space:nowrap}.chess-board-wrap{position:relative;width:min(480px,100%);margin:25px auto 17px}.chess-board{display:grid;grid-template-columns:repeat(8,1fr);aspect-ratio:1;border:7px solid #312c39;border-radius:5px;overflow:hidden;box-shadow:0 10px 25px #2b213722}.chess-square{display:grid;place-items:center;border:0;padding:0;font-family:'DejaVu Sans',serif;font-size:clamp(24px,5vw,46px);line-height:1;cursor:pointer;color:#222;background:#b58863;text-shadow:0 1px 1px #fff8}.chess-square.is-light{background:#f0d9b5}.chess-square.is-selected{box-shadow:inset 0 0 0 4px #b39ad8;background:#c4a8dc}.chess-board.is-solved .chess-square[data-square="f5"]{background:#b6c989;box-shadow:inset 0 0 0 4px #788d4c}.chess-square:nth-child(-n+8)::before{content:''}.chess-coordinates{position:absolute;left:8px;right:8px;bottom:1px;display:grid;grid-template-columns:repeat(8,1fr);pointer-events:none;font-size:8px;color:#312c39aa;text-align:center}.chess-status{margin:0;text-align:center;font-size:12px;color:#544b5e;min-height:19px}.chess-solution{display:grid;gap:4px;margin:15px auto 0;padding:12px 14px;max-width:480px;border-radius:8px;background:#edf1e1;color:#485335;font-size:11px;line-height:1.45}.chess-solution strong{font-size:15px}.chess-actions{display:flex;justify-content:center;gap:9px;margin-top:17px}.chess-actions button{border:1px solid #d8d1df;background:#fff;color:#50465d;border-radius:6px;padding:8px 12px;font:inherit;font-size:11px;cursor:pointer}.chess-actions button:hover{background:#f2eef6}.chess-source{margin:18px 0 0;text-align:center;font-size:9px!important;color:#948b99!important;line-height:1.5}.chess-source a{color:#6656a1}.document-icon-chess{font-size:15px;color:#4d3d5d}
@media(max-width:700px){.chess-window{top:46px;max-height:calc(100svh - 120px)}.chess-body{padding:22px 20px 24px}.chess-heading h1{font-size:26px}.chess-source-label{display:none}.chess-board{border-width:4px}.chess-square{font-size:clamp(22px,9vw,39px)}}
.chess-window{max-height:min(650px,calc(100vh - 72px));overflow:hidden}.chess-body{padding:20px 28px 16px}.chess-heading h1{font-size:27px}.chess-heading p:not(.document-eyebrow){font-size:11px}.chess-board-wrap{width:min(365px,100%);margin:14px auto 10px}.chess-coordinates-files,.chess-coordinates-ranks{position:absolute;display:grid;pointer-events:none;font-size:8px;font-weight:700;color:#302a38aa;text-align:center}.chess-coordinates-files{left:7px;right:7px;bottom:2px;grid-template-columns:repeat(8,1fr)}.chess-coordinates-ranks{top:7px;bottom:7px;left:1px;grid-template-rows:repeat(8,1fr);align-items:center}.chess-status{font-size:11px}.chess-actions{margin-top:10px}.chess-source{margin-top:10px!important}.chess-solution{margin-top:8px;padding:8px 12px}.chess-solution strong{font-size:13px}
.document-titlebar{height:41px;flex-shrink:0;display:flex;align-items:end;gap:14px;padding:0 12px;background:#dce0e7;border-bottom:1px solid #cfd3dc;user-select:none;touch-action:none;cursor:grab}.document-titlebar .traffic-lights{display:flex;align-items:center;gap:8px;height:41px;padding-right:12px}.document-titlebar .traffic-lights button{width:12px;height:12px;margin:0;padding:0;border:1px solid #0001;border-radius:50%;background:#ff6058;font-size:0}.document-titlebar .traffic-lights button:nth-child(2){background:#ffbd2e}.document-titlebar .traffic-lights button:nth-child(3){background:#28c840}.document-titlebar .browser-tab{display:flex;align-items:center;gap:8px;width:250px;height:33px;padding:0 11px;background:#f6f7fa;border-radius:9px 9px 0 0;font-size:11px;cursor:default}.document-titlebar .browser-tab>span:last-child{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.document-titlebar>.chess-source-label{align-self:center;margin-left:auto;margin-right:5px}.document-window.is-expanded{position:fixed;inset:35px 8px 91px;width:auto;max-height:none;transform:none!important}.document-window.is-expanded .document-body{max-height:none}.chess-window.is-expanded{inset:35px 8px 91px;width:auto;max-height:none;transform:none!important}.chess-window.is-expanded .chess-body{max-width:650px;margin:auto}.chess-titlebar .browser-tab{width:250px}
.chess-brand-icon{width:22px!important;height:26px!important;padding:0!important;object-fit:contain;background:transparent!important;box-shadow:none!important}.chess-titlebar .browser-tab{width:150px}.chess-window{max-height:min(570px,calc(100vh - 65px))}.chess-body{padding:16px 22px 10px}.chess-heading h1{font-size:24px}.chess-heading p:not(.document-eyebrow){font-size:10px}.chess-board-wrap{width:min(330px,100%);padding:0 17px 17px;box-sizing:border-box;margin:10px auto 7px}.chess-coordinates-files{left:17px;right:17px;bottom:0}.chess-coordinates-ranks{top:7px;bottom:17px;left:1px}.chess-rating{padding:1px 0}.chess-rating strong{font-size:23px}.chess-actions{margin-top:6px}.chess-window .chess-source{display:none}
.chess-window{width:min(720px,calc(100vw - 32px));max-height:min(760px,calc(100vh - 26px))}.chess-body{padding:22px 30px 18px}.chess-heading h1{font-size:31px}.chess-heading p:not(.document-eyebrow){font-size:12px}.chess-board-wrap{width:min(430px,100%);padding:0;margin:17px auto 12px}.chess-board{border-width:7px}.chess-square{position:relative}.chess-piece{position:relative;z-index:1}.square-coordinate{position:absolute;z-index:2;font-family:Satoshi,sans-serif;font-size:10px;font-weight:700;line-height:1;color:#302a38aa;pointer-events:none}.square-file{right:4px;bottom:3px}.square-rank{left:4px;top:3px}.chess-square:nth-child(odd) .square-coordinate{color:#f7e7c9aa}.chess-actions{margin-top:10px}
.chess-square{background:#4fa34a}.chess-square.is-light{background:#ebe7d2}.chess-board{border-color:#252d27}.chess-square .square-coordinate{color:#f5f1dcaa}.chess-square.is-light .square-coordinate{color:#456845aa}
.chess-board{grid-template-columns:repeat(8,minmax(0,1fr));grid-template-rows:repeat(8,minmax(0,1fr))}.chess-square{min-width:0;min-height:0}
.chess-piece.is-draggable{cursor:grab;touch-action:none;user-select:none}.chess-piece.is-drag-source{opacity:.18}.chess-drag-piece{position:fixed;z-index:20000;left:0;top:0;pointer-events:none;transform:translate(-50%,-50%) scale(1.12);font-family:'DejaVu Sans',serif;line-height:1;color:#222;text-shadow:0 4px 9px #0005}
.is-room-hidden{opacity:0!important;visibility:hidden;pointer-events:none!important;transition:opacity 180ms ease,visibility 0s 180ms!important}
.is-room-restoring{transition:none!important;animation:none!important}
.document-icon-txt{color:#7c5b9c;font-size:6px}.note-window{width:min(620px,calc(100vw - 32px))}.note-body{display:flex;flex-direction:column;gap:12px;padding:24px 26px 22px}.note-meta{margin:0;color:#93889d;font:700 9px/1.2 ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.12em}.note-body textarea{min-height:340px;resize:vertical;border:0;outline:0;border-radius:8px;background:#fffefc;color:#302b37;padding:16px;font:14px/1.7 ui-monospace,SFMono-Regular,Menlo,monospace;box-shadow:inset 0 0 0 1px #ece6ee}.note-body textarea:focus{box-shadow:inset 0 0 0 2px #b5a2cf}.note-hint{margin:0;color:#9a91a0;font-size:10px}
@media(max-width:700px){.note-body{padding:18px 16px 17px}.note-body textarea{min-height:280px}}

/* Home — editorial portfolio layout */
.portfolio-content:has(.desktop-intro){max-width:1180px;padding:42px clamp(30px,4.2vw,58px) 0}
.desktop-intro{grid-template-columns:minmax(0,1fr) minmax(250px,38%);gap:clamp(30px,6vw,76px);min-height:clamp(270px,38vh,370px);margin-bottom:34px;align-items:center}
.desktop-intro h1{font-size:clamp(43px,4.5vw,66px);line-height:.98;letter-spacing:-.065em;font-weight:620}
.desktop-intro h1 em{display:inline-block;margin-top:8px;color:#76609d;font-size:1.04em;line-height:1;font-weight:400;letter-spacing:-.055em}
.desktop-intro p{max-width:540px;margin:25px 0 24px;font-size:14px;line-height:1.65;color:#77717f}
.desktop-portrait{display:block;width:100%;height:clamp(245px,35vh,350px);object-fit:contain;object-position:center bottom;border-radius:0;background:transparent}
.intro-links{gap:30px;font-size:12px}
.intro-links a{position:relative;padding:11px 0;color:#292532}
.intro-links a:first-child{gap:0;padding:11px 17px;border:1px solid #76609d;border-radius:3px;background:#fff;color:#69528f}
.intro-links a:not(:first-child)::after{content:'';position:absolute;right:0;bottom:7px;left:0;height:1px;background:#292532;transform:scaleX(0);transform-origin:right;transition:transform 220ms var(--ease)}
.intro-links a:not(:first-child):hover::after{transform:scaleX(1);transform-origin:left}
.desktop-work-heading{margin-bottom:20px;padding-top:25px}
.desktop-work-heading h2{font-size:17px;letter-spacing:-.03em}
.desktop-work-heading>span{font-size:10px}
.desktop-projects{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(300px,.85fr);grid-template-rows:repeat(3,minmax(105px,auto));gap:0 40px}
.desktop-projects>a{position:relative;min-width:0}
.desktop-projects>a:first-child{grid-row:1/4;display:grid;grid-template-columns:minmax(0,1.5fr) minmax(145px,.7fr);grid-template-rows:1fr auto auto;column-gap:24px;padding-right:40px;border-right:1px solid #e8e5eb}
.desktop-projects>a:first-child .desktop-project-image{grid-row:1/4;height:clamp(285px,39vh,405px)}
.desktop-projects>a:first-child .project-type{align-self:end;margin:0 0 10px}
.desktop-projects>a:first-child h3{margin:0 0 29px;font-size:30px}
.desktop-projects>a:first-child p{align-self:start;padding-top:15px;border-top:2px solid #76609d}
.desktop-projects>a:not(:first-child){display:grid;grid-template-columns:minmax(120px,42%) minmax(0,1fr);grid-template-rows:auto auto 1fr;column-gap:20px;padding:14px 0;border-bottom:1px solid #e8e5eb}
.desktop-projects>a:nth-child(2){padding-top:0}
.desktop-projects>a:not(:first-child) .desktop-project-image{grid-row:1/4;height:92px;border-radius:2px}
.desktop-projects>a:not(:first-child) .project-type{align-self:end;margin:0 0 5px}
.desktop-projects>a:not(:first-child) h3{margin:0;font-size:19px}
.desktop-projects>a:not(:first-child) p{align-self:start;margin-top:5px;font-size:11px}
.desktop-project-image{border-radius:2px}
.desktop-projects h3 span{transition:transform 220ms var(--ease)}
.desktop-projects a:hover h3 span{transform:translate(3px,-3px)}
.desktop-window-footer{margin-top:36px}

@media(max-width:1050px){
  .portfolio-content:has(.desktop-intro){padding:34px 30px 0}
  .desktop-intro{grid-template-columns:minmax(0,1fr) minmax(190px,31%);gap:28px;min-height:260px}
  .desktop-intro h1{font-size:clamp(40px,5.4vw,56px)}
  .desktop-portrait{display:block;height:250px}
  .desktop-projects{grid-template-columns:minmax(0,1.15fr) minmax(270px,.85fr);column-gap:28px}
  .desktop-projects>a:first-child{grid-template-columns:1fr;padding-right:28px}
  .desktop-projects>a:first-child .desktop-project-image{grid-row:auto;height:260px}
  .desktop-projects>a:first-child .project-type{margin-top:12px}
  .desktop-projects>a:first-child h3{margin:2px 0 5px}
  .desktop-projects>a:first-child p{padding-top:0;border-top:0}
}

@media(max-width:760px){
  .portfolio-content:has(.desktop-intro){padding:26px 20px 0}
  .desktop-intro{grid-template-columns:1fr;min-height:0;margin-bottom:30px}
  .desktop-intro h1{font-size:clamp(38px,11vw,52px)}
  .desktop-portrait{display:none}
  .desktop-projects{grid-template-columns:1fr;grid-template-rows:auto;gap:0}
  .desktop-projects>a:first-child{grid-row:auto;display:block;padding:0 0 25px;border-right:0;border-bottom:1px solid #e8e5eb}
  .desktop-projects>a:first-child .desktop-project-image{height:230px}
  .desktop-projects>a:first-child h3{margin:3px 0 5px}
  .desktop-projects>a:first-child p{padding-top:0;border-top:0}
  .desktop-projects>a:not(:first-child){grid-template-columns:minmax(110px,40%) minmax(0,1fr)}
  .desktop-work-heading>span{display:none}
}

/* Project cards stay static on hover. */
.desktop-projects .desktop-project-image img,
.desktop-projects a:hover .desktop-project-image img,
.desktop-projects a:focus-visible .desktop-project-image img{transform:none;transition:none}
.desktop-projects h3 span,
.desktop-projects a:hover h3 span,
.desktop-projects a:focus-visible h3 span{transform:none;transition:none}

.linkedin-link{display:grid!important;place-items:center;width:18px;height:18px;padding:2px;border:1px solid currentColor;border-radius:3px;color:inherit}
.linkedin-link svg{display:block;width:100%;height:100%;fill:currentColor}
.dock-app-static{cursor:default}
.dock-app-static:hover{transform:translateY(-7px) scale(1.12)}
.spire-shortcut-icon{display:block;width:52px;height:37px;object-fit:cover;border:1px solid #ffffffbb;border-radius:5px;box-shadow:0 3px 8px #10152566}
.desktop-shortcut-spire{display:none}
@media(min-width:701px){
 .desktop-shortcut-spire{display:flex;position:absolute;left:clamp(18px,calc(50% - 930px),120px);top:clamp(205px,30vh,300px);z-index:1000;width:120px;align-items:center;text-align:center;animation:none!important;transition:none!important}
 .desktop-shortcut-spire>span{white-space:nowrap}
 .portfolio-window{z-index:1}
}
@media(max-width:700px){.desktop-side{display:none}}

/* Give the work list more breathing room without changing its structure. */
.dock-app.is-running::after{background:#f3f1ef}
.desktop-projects{row-gap:28px}
.desktop-projects>a:not(:first-child){padding-top:24px;padding-bottom:24px}
@media(max-width:760px){
 .desktop-projects{row-gap:26px}
 .desktop-projects>a:first-child{padding-bottom:34px}
 .desktop-projects>a:not(:first-child){padding-top:24px;padding-bottom:24px}
}
.dock-app[data-app="Audible"] img{border-radius:9px}
.dock-app[data-app="Paper Design"] img{transform:scale(1.18)}
.footer-links{display:flex;align-items:center;justify-content:flex-end;gap:16px}
.case-external-cta{margin:20px 0 28px!important}
.case-external-cta a{display:inline-flex;align-items:center;gap:8px;padding:9px 12px;border:1px solid #6155a0;border-radius:999px;text-decoration:none;font-size:12px;font-weight:650;color:#6155a0;transition:background-color 180ms var(--ease),color 180ms var(--ease),transform 180ms var(--ease)}
.case-external-cta a:hover,.case-external-cta a:focus-visible{background:#6155a0;color:#fff;transform:translateY(-1px)}
.footer-explorations{letter-spacing:.02em;color:#8b8390}
.github-link{display:grid;place-items:center;width:18px;height:18px;padding:2px;color:#4d4459;border:1px solid currentColor;border-radius:50%;transition:background-color 180ms var(--ease),color 180ms var(--ease),transform 180ms var(--ease)}
.github-link svg{display:block;width:100%;height:100%;fill:currentColor}
.github-link:hover,.github-link:focus-visible{background:#4d4459;color:#fff;transform:translateY(-1px)}
@media(max-width:700px){
 .footer-links{gap:10px;flex-wrap:wrap}
 .case-external-cta{margin:18px 0 24px!important}
 .footer-explorations{flex-basis:100%;text-align:right}
}
@media(max-width:700px){
 .dock-app-static[data-app="Audible"]:hover{transform:none}
}
