@font-face{font-family:OpenCherry;src:url("./assets/OpenCherry-Regular.otf") format("opentype");font-style:normal;font-weight:400;font-display:swap}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:#fafaf7;color:#172129;font-family:Manrope,Arial,sans-serif;font-size:15px;line-height:1.65;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button,select{font:inherit;color:inherit}a,button,select{-webkit-tap-highlight-color:transparent}a:hover{color:#2869ac}a:focus-visible,button:focus-visible,select:focus-visible{outline:2px solid #2869ac;outline-offset:6px}main:focus{outline:none}.skip{position:fixed;top:-70px;left:20px;background:#172129;color:white;padding:10px;z-index:10}.skip:focus{top:12px}#app{min-height:100svh;display:flex;flex-direction:column}header{display:flex;justify-content:space-between;align-items:center;padding:30px 4.5vw;gap:20px}.identity{display:flex;align-items:center;gap:12px;font-size:14px;font-weight:600}.identity img{object-fit:contain}header nav{display:flex;gap:27px;font-size:14px}header nav a[aria-current]{text-decoration:underline;text-underline-offset:6px}.home{width:min(1080px,100%);margin:auto;flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px 30px 36px;text-align:center}.portrait{width:44px;height:44px;object-fit:cover;border-radius:50%;margin-bottom:8px}.eyebrow{font-size:14px;margin:0 0 14px;color:#5f686e}h1{font-weight:500;font-size:clamp(32px,4vw,52px);line-height:1.13;letter-spacing:-.035em;margin:0 0 20px}p{margin:0 0 20px}.intro-copy{font-size:15px;line-height:1.8;color:#677177;margin-bottom:0}.key-area{width:100%;max-width:780px}#key-scene{height:285px;width:100%;touch-action:pan-y}#key-scene canvas{display:block;width:100%;height:100%;outline:none}.key-links{display:flex;justify-content:center;gap:32px;font-size:14px}.key-links a{display:flex;align-items:center;gap:7px}kbd{font-family:inherit;font-size:14px;font-weight:600;width:21px;height:23px;border:1px solid #d5dadd;border-bottom-width:2px;display:inline-flex;justify-content:center;align-items:center;border-radius:4px;color:#546570}.key-links a:hover kbd{border-color:#2869ac;color:#2869ac}#key-hint{font-size:14px;color:#667178;min-height:22px;margin:20px 0 0}footer{display:flex;justify-content:space-between;gap:20px;align-items:center;padding:23px 4.5vw;font-size:14px;color:#6d767b}.controls{display:flex;align-items:center;gap:25px}.controls label{display:flex;gap:8px;align-items:center}.controls select{background:transparent;border:0;border-bottom:1px solid #d6dbdd;max-width:205px;font-size:14px;padding:4px 14px 4px 2px;cursor:pointer}.page{width:min(740px,100%);padding:35px 28px 70px;margin:0 auto;flex:1}.back{display:inline-block;font-size:14px;color:#69747c;margin-bottom:50px}.page h1{font-size:clamp(38px,5vw,58px)}.lead{font-size:19px;line-height:1.65;color:#59666e;max-width:620px}.entries{margin-top:56px}.entries article{border-top:1px solid #dce0df;padding:27px 0}.entry-heading{display:flex;justify-content:space-between;gap:20px;align-items:center;margin-bottom:12px}.entry-heading h2{margin:0;font-size:23px;font-weight:500;letter-spacing:-.03em}.entry-heading span,.stack,.small-label{font-size:14px;color:#616d74}.entries p{margin-bottom:10px}.project{margin-top:55px;border-top:1px solid #dce0df;padding-top:27px;max-width:630px}.project h2{font-size:32px;letter-spacing:-.04em;font-weight:500;margin:8px 0 18px}.pipeline{display:flex;align-items:center;gap:22px;margin:32px 0;font-size:14px;color:#4c687a}.pipeline span:nth-child(even){color:#94a1a9}.text-link{font-size:14px;border-bottom:1px solid #bbc6ce;padding-bottom:4px}.page-nav{display:flex;gap:30px;margin-top:70px;font-size:14px;border-top:1px solid #dce0df;padding-top:23px}.keyboard-photo{margin:42px 0 25px}.keyboard-photo>img{display:block;width:100%;height:340px;object-fit:cover}.keyboard-photo figcaption{display:flex;justify-content:space-between;align-items:center;gap:15px;margin-top:14px;font-size:14px;color:#68757d}.gallery-controls{display:flex;gap:13px;align-items:center;white-space:nowrap}.gallery-controls button{border:0;background:transparent;cursor:pointer;width:35px;height:35px;font-size:20px}.gallery-controls button:hover{background:#eaf0f3}.body-note{max-width:600px;color:#68757d;font-size:14px}.about-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.bio-photo{width:125px;height:150px;object-fit:cover;border-radius:3px}.bio-copy{max-width:620px}.bio-copy>p:not(.lead){color:#56636b;line-height:1.9}.contact{display:flex;gap:26px;margin-top:30px}body[data-layout=cluster]{font-family:'DM Sans',Arial,sans-serif;background:#f4f6f7}body[data-layout=cluster] .home{display:grid;grid-template-columns:1fr 1.2fr;gap:20px;max-width:1170px;text-align:left;padding-top:60px;padding-bottom:80px}body[data-layout=cluster] .intro{padding-left:15px;align-self:center}body[data-layout=cluster] .portrait{width:65px;height:65px;margin-bottom:24px;border-radius:6px}body[data-layout=cluster] h1{font-size:clamp(35px,4vw,51px);letter-spacing:-.035em}body[data-layout=cluster] .wide-only{display:none}body[data-layout=cluster] .intro-copy{max-width:330px}body[data-layout=cluster] #key-scene{height:360px}body[data-layout=cluster] .key-links{gap:20px}body[data-layout=cluster] #key-hint{text-align:center;font-size:14px}body[data-layout=arc]{background:#fffdf8;font-family:'DM Sans',Arial,sans-serif}body[data-layout=arc] h1{font-family:Newsreader,Georgia,serif;font-weight:400;font-size:clamp(50px,6.5vw,84px);letter-spacing:-.035em}body[data-layout=arc] .home{padding-top:20px}body[data-layout=arc] .portrait{width:39px;height:39px}body[data-layout=arc] .eyebrow{margin-bottom:11px}body[data-layout=arc] #key-scene{height:300px}body[data-layout=arc] .intro-copy{max-width:490px;font-size:15px}body[data-layout=arc] .intro{display:flex;flex-direction:column;align-items:center}body[data-layout=arc] .page h1{font-size:60px}@media(min-width:1500px){.home{max-width:1150px}#key-scene{height:330px}}@media(max-width:700px){header{padding:23px 22px}.identity{font-size:14px;gap:8px}header nav{gap:18px;font-size:14px}.home{padding:20px 20px 30px;justify-content:flex-start}.portrait{margin-top:15px}h1{font-size:37px}.intro-copy{font-size:14px;max-width:330px}.wide-only{display:none}#key-scene{height:265px}.key-links{gap:17px;font-size:14px}.key-links a{gap:5px}#key-hint{font-size:14px;margin-top:22px}footer{padding:20px 22px;flex-direction:column;gap:12px}.footer-note{display:none}.controls{gap:15px;flex-wrap:wrap;justify-content:center}.controls label{font-size:14px;gap:5px}.controls select{max-width:165px;font-size:14px}body[data-layout=cluster] .home{display:flex;flex-direction:column;gap:0;padding:15px 22px 30px;text-align:left;align-items:stretch}body[data-layout=cluster] .intro{padding-left:0;width:100%}body[data-layout=cluster] .portrait{float:right;width:53px;height:64px;margin:0 0 12px 15px}body[data-layout=cluster] h1{font-size:35px;max-width:350px}body[data-layout=cluster] #key-scene{height:295px}body[data-layout=cluster] .key-links{gap:17px}body[data-layout=arc] h1{font-size:56px}body[data-layout=arc] #key-scene{height:275px}.page{padding-top:10px}.back{margin-bottom:36px}.page h1{font-size:39px}.lead{font-size:17px}.entry-heading{display:block}.entry-heading span{display:block;margin-top:6px}.keyboard-photo>img{height:230px}.keyboard-photo figcaption{align-items:flex-start;font-size:14px}.bio-photo{width:91px;height:112px}.about-top{gap:15px}.page-nav{gap:23px}.pipeline{gap:13px}.page-nav{margin-top:45px}body[data-layout=arc] .page h1{font-size:52px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}}

.intro .portrait{display:block;margin:0 auto 18px}.intro-copy{max-width:540px;margin:0 auto}.home{padding-top:12px;padding-bottom:20px}body[data-layout=cluster] .intro .portrait{margin:0 0 22px}body[data-layout=cluster] .intro-copy{margin:0}::selection{background:#174780;color:white}.controls select{min-height:40px}.key-links a{min-height:36px}@media(max-width:700px){.intro .portrait{margin-top:10px}body[data-layout=cluster] .intro .portrait{margin:0 0 12px 15px}.key-links{flex-wrap:wrap;gap:10px 18px}.key-links a{min-height:40px}}

#reset-view{border:0;background:none;padding:8px 12px;color:#526271;font-size:13px;cursor:pointer;text-decoration:underline;text-underline-offset:4px}#reset-view:hover{color:#2869ac}

body[data-route="home"] .key-area{width:min(1080px,94vw)}body[data-route="home"] #key-scene{height:clamp(260px,35vw,420px);width:100%}body[data-route="home"] .home{padding-top:32px;gap:10px}.compact-board{width:min(420px,85vw);margin:0 auto;height:140px}.compact-board #compact-scene{width:100%;height:100%}#key-hint{font-size:13px}body[data-route="home"] .controls label:first-child{display:none}@media(max-width:700px){body[data-route="home"] #key-scene{height:240px}.compact-board{height:110px}#key-hint{max-width:320px;margin-left:auto;margin-right:auto}}

.controls label:first-child{display:none}

.model-views{display:flex;justify-content:center;gap:4px;margin:12px auto 0}.model-views button{border:1px solid transparent;background:none;padding:7px 13px;border-radius:5px;font-size:13px;cursor:pointer;color:#566477}.model-views button[aria-pressed="true"]{border-color:#d1d7dc;background:#eef0f2;color:#172129}.model-views button:hover{background:#e8edf2}

.model-views{flex-wrap:wrap;max-width:520px}.model-views button{padding:7px 10px}

/* Finished renderer: local, independent viewport; original materials and lighting. */
.keyboard-render{display:block;width:100%;height:100%;border:0;background:#fafaf7}body[data-route="home"] #key-scene{height:clamp(270px,40vw,470px)}body[data-route="home"] .key-area{max-width:940px}footer{font-size:12px}footer a:hover{color:#172129}@media(max-width:700px){body[data-route="home"] #key-scene{height:260px}}
