@charset "UTF-8";
:root{--canvas:#F7F7F7;--paper:#fefffc;--ink:#171717;--muted:#667174;--blue:#0081c0;--sky:#cceffc;--ice:#f0faff;--line:#dce4e5;--yellow:#fff1ab;--green:#287459;--sans:'Inter Tight',Arial,sans-serif;--serif:'Instrument Serif',Georgia,serif;--mono:'Geist Mono',monospace;color:var(--ink);font-family:var(--sans);font-synthesis:none}
*{box-sizing:border-box}body{margin:0;background:var(--canvas);overflow:hidden}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer}button{border:0}a{color:inherit}button:focus-visible,a:focus-visible{outline:3px solid var(--blue);outline-offset:5px}button:disabled{cursor:default}svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}button:hover{filter:brightness(.99)}.skip{position:fixed;z-index:100;top:-60px;left:24px;padding:12px;background:white}.skip:focus{top:12px}.site-header{height:86px;padding:0 44px;display:flex;gap:26px;align-items:center;position:relative;z-index:10}.brand{display:flex;align-items:center;gap:10px;text-decoration:none;font-size:27px;font-weight:700;letter-spacing:-1px}.brand img{image-rendering:pixelated}.header-note{font-size:13px;color:var(--muted);border-left:1px solid #cbd6d9;padding-left:26px}.header-actions{margin-left:auto;display:flex;align-items:center;gap:25px}.availability span{width:6px;height:6px;background:var(--green);border-radius:50%;display:inline-block;box-shadow:0 0 0 3px #28745910}.share-button{display:flex;align-items:center;gap:8px;font-size:13px;background:transparent;padding:10px 13px;border:1px solid #cedadd;border-radius:7px}.intro{position:absolute;left:4.5vw;top:17vh;width:330px;z-index:3;pointer-events:none}.intro button{pointer-events:auto}.availability{font-size:12px;color:#637174;display:flex;gap:9px;align-items:center;margin:0 0 28px}h1{font:72px/.97 var(--sans);letter-spacing:-1.5px;margin:0 0 22px}.intro-description{font-size:18px;color:#677276;line-height:1.5;margin:0 0 25px}.read-link{background:none;padding:0 0 5px;border-bottom:1px solid #a6b5b9;font-size:14px;display:flex;gap:36px}.read-link span{color:var(--blue)}.intro-footnote{display:flex;gap:7px;margin:22px 0 0 93px;align-items:center;transform:rotate(-9deg)}.scribble{font:italic 23px var(--sans);color:#0081c0}.intro-footnote svg{width:60px;height:46px;color:#0081c0;stroke-width:1.2}.stage{position:absolute;inset:86px 0 94px;perspective:1800px;overflow:hidden;touch-action:none;cursor:grab;isolation:isolate}.stage.dragging{cursor:grabbing}.ambient-floor{position:absolute;inset:0;background:radial-gradient(ellipse at 60% 41%,#ffffff 0,#f5f9fa70 33%,transparent 73%);pointer-events:none}.ambient-floor:after{content:'';position:absolute;inset:60% -30% -70%;background-image:linear-gradient(#bdcfd621 1px,transparent 1px),linear-gradient(90deg,#bdcfd621 1px,transparent 1px);background-size:55px 55px;transform:perspective(500px) rotateX(45deg);mask-image:radial-gradient(ellipse,black,transparent 66%)}.scene-anchor{position:absolute;left:calc(50% + 91px);top:48%;width:0;height:0;transform-style:preserve-3d}.world{--scale:.6;--rx:8deg;--ry:-13deg;--rz:-4deg;--zoom:1;width:1380px;height:1080px;position:absolute;left:-690px;top:-540px;transform-style:preserve-3d;transform:scale(calc(var(--scale) * var(--zoom))) rotateX(calc(var(--rx) + var(--look-x,0deg))) rotateY(calc(var(--ry) + var(--look-y,0deg))) rotateZ(var(--rz));will-change:transform;transition:transform .6s cubic-bezier(.2,.8,.2,1)}.dragging .world{transition:none}.paper-stack{position:absolute;left:317px;top:56px;width:680px;height:946px;border-radius:3px;background:#e2eaeb;transform:translateZ(-12px) rotateZ(1.5deg);box-shadow:0 30px 20px -15px #536d7945,0 65px 60px -20px #536d7930}.resume{position:absolute;left:310px;top:40px;width:680px;min-height:946px;padding:36px 38px 27px;background:var(--paper);border:1px solid #d6e0e1;border-radius:3px;box-shadow:0 2px 0 #ced8d9,0 5px 0 #e6eded,0 6px 0 #cbd5d6,0 20px 35px -14px #49616e35;transform-style:preserve-3d}.paper-corner{position:absolute;right:-1px;top:-1px;width:24px;height:24px;background:linear-gradient(45deg,#dfe8e9 0 48%,var(--canvas) 51%);filter:drop-shadow(-2px 2px 1px #54758619);border-bottom-left-radius:3px}.resume-head{display:flex;justify-content:space-between;align-items:center;gap:25px}.document-label{font:9px var(--mono);letter-spacing:.4px;color:var(--muted);margin:0 0 12px}.resume h2{font:95px/.98 var(--sans);letter-spacing:-3px;margin:0 0 11px}.job-title{font-size:21px;font-weight:600;margin:0}.portrait{background:var(--ice);border-radius:9px;display:flex;flex-direction:column;align-items:center;padding:16px 19px 12px;gap:12px;transform:translateZ(16px);transition:transform .2s}.portrait:hover{transform:translateZ(28px) rotateZ(3deg)}.portrait img{image-rendering:pixelated;transition:transform .3s}.portrait span{font-size:9px;color:var(--blue);background:var(--sky);padding:5px 9px;border-radius:5px;white-space:nowrap}.summary{font-size:13px;line-height:1.65;color:#637074;margin:19px 0 20px}.resume-meta{display:flex;gap:20px;border-bottom:1px solid var(--line);padding-bottom:21px;font:8px var(--mono);color:var(--muted)}.resume-meta a{color:var(--blue);text-decoration:none}.resume-columns{display:grid;grid-template-columns:1fr 176px;gap:32px;padding-top:25px}.section-label{font:10px var(--mono);color:var(--muted);margin:0 0 17px;letter-spacing:.3px}.experience-entry{display:block;text-align:left;width:100%;background:transparent;padding:0;margin:0 0 23px;border-radius:4px;transition:color .2s}.experience-entry:hover strong{color:var(--blue)}.experience-title{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:7px}.experience-title strong{font-size:14px;font-weight:600}.experience-title time{font:7px var(--mono);color:var(--muted);white-space:nowrap}.company{display:block;color:var(--blue);font-size:10px;margin-bottom:9px}.job-description{display:block;font-size:12px;color:#687175;line-height:1.6}.peek{display:flex;align-items:center;gap:7px;font-size:10px;margin-top:8px;color:var(--blue)}.education{border-top:1px solid var(--line);padding-top:20px}.education strong{font-size:14px}.education p{font-size:11px;margin:7px 0;color:var(--muted)}.education .blue,.blue{color:var(--blue)}.education .section-label{margin-bottom:12px}.skill{display:block;padding:0;margin:0 0 18px;background:none;width:100%;text-align:left}.skill>span{display:flex;justify-content:space-between;font-size:12px}.skill small{font:9px var(--mono);color:var(--blue)}.skill i{display:block;height:3px;margin-top:8px;background:repeating-linear-gradient(90deg,var(--blue) 0 20px,transparent 20px 23px);border-right:20px solid var(--sky);transition:transform .2s;transform-origin:left}.skill:hover i{transform:scaleX(.9)}.copium{font-size:9px;color:var(--blue);padding:6px 7px;display:inline-block;background:var(--ice);border-radius:4px}.lore{margin-top:22px;border-top:1px solid var(--line);padding-top:18px}.lore p{font-size:11px;line-height:1.5;margin:0 0 13px}.lore small{display:block;font:8px var(--mono);color:var(--muted);margin-bottom:4px}.aura{text-align:left;width:100%;margin-top:3px;padding:14px;background:var(--ice);border-radius:5px;transition:transform .3s}.aura:hover{transform:rotate(-3deg)}.aura strong{font:italic 28px var(--sans);color:var(--blue);display:block;margin-bottom:7px}.aura span{font-size:10px;line-height:1.6;color:var(--muted);display:block}.reference{margin-top:24px;padding-top:22px;border-top:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;gap:10px}.reference blockquote{font:italic 23px var(--sans);margin:0}.reference p{font:8px var(--mono);color:var(--muted);margin:7px 0 0}.signature{font:italic 34px var(--serif);color:var(--blue);padding-right:28px}.paper-footer{display:flex;justify-content:space-between;font:7px var(--mono);color:var(--muted);margin-top:25px}.id-object{position:absolute;left:1040px;top:140px;width:236px;min-height:332px;padding:31px 20px 17px;background:#dff4fe;border:1px solid #b9dfed;border-radius:14px;transform:translateZ(92px) rotateZ(11deg);box-shadow:2px 3px 0 #abc9d6,14px 25px 30px -12px #406b8550;transform-style:preserve-3d}.id-hole{position:absolute;top:11px;left:94px;width:46px;height:7px;border-radius:5px;background:#52798c35;box-shadow:inset 0 2px 2px #52798c40}.lanyard{position:absolute;width:19px;height:138px;background:#0081c0;top:-130px;left:108px;border-radius:2px;transform:rotateZ(-5deg) translateZ(2px);box-shadow:inset 4px 0 0 #006fab,4px 1px 4px #29374215}.mascot-button{display:block;padding:4px 0 0;margin:0 auto;background:none;transform:translateZ(20px);transition:transform .2s}.mascot-button img{display:block;image-rendering:pixelated}.mascot-button:hover{transform:translateZ(45px) rotate(-6deg)}.id-name{font-size:23px;font-weight:600;margin:18px 0 13px}.id-name span{display:block;font:10px var(--mono);font-weight:400;margin-top:5px;color:#40809d}.id-bottom{display:flex;justify-content:space-between;font-size:9px;color:#48778e;border-top:1px solid #afdae8;padding-top:11px}.barcode{height:13px;margin-top:12px;width:85px;opacity:.5;background:repeating-linear-gradient(90deg,#497c93 0 1px,transparent 1px 3px,#497c93 3px 5px,transparent 5px 7px,#497c93 7px 8px,transparent 8px 12px)}.mascot-bubble{position:absolute;left:1072px;top:505px;width:245px;padding:13px 18px;border:1px solid #d6e2e7;background:#fffffff2;box-shadow:0 8px 24px #708c9c10;border-radius:12px;font-size:13px;line-height:1.4;transform:translateZ(135px) rotateZ(5deg);text-align:center}.mascot-bubble:before{content:'';position:absolute;width:12px;height:12px;top:-7px;left:43px;background:#fff;border-top:1px solid #d6e2e7;border-left:1px solid #d6e2e7;transform:rotate(45deg)}.floating-ticket{display:flex;align-items:center;gap:14px;position:absolute;left:1070px;width:256px;padding:17px 16px;border-radius:8px;background:var(--paper);box-shadow:1px 3px 0 #d2dce0,7px 17px 24px -11px #43687835;border:1px solid #dce6e9;text-align:left;transform-style:preserve-3d;transition:filter .2s}.floating-ticket b{font-size:17px;color:var(--blue);margin-left:auto;font-weight:400}.floating-ticket:hover{filter:drop-shadow(0 2px 8px #0081c030)}.envelope{position:absolute;left:1038px;top:860px;width:290px;height:173px;background:none;padding:0;transform:rotateZ(9deg) translateZ(65px);transform-style:preserve-3d;filter:drop-shadow(12px 22px 17px #8d895437)}.envelope-back{position:absolute;inset:0;border-radius:4px;background:#f1dc84;border:1px solid #dbcb8e}.letter-peek{position:absolute;left:20px;right:20px;top:-21px;background:#fffdf2;bottom:24px;padding:16px;text-align:left;font:19px/1.2 var(--sans);border:1px solid #e2d9b7;transform:translateZ(1px);transition:transform .4s,top .4s}.letter-peek em{font-size:28px}.envelope:hover .letter-peek{top:-62px;transform:translateZ(9px) rotateZ(-4deg)}.envelope-fold{position:absolute;inset:0;background:linear-gradient(30deg,#fff0b0 49.7%,transparent 50%) bottom left/50.2% 100% no-repeat,linear-gradient(-30deg,#fbe99e 49.7%,transparent 50%) bottom right/50.2% 100% no-repeat;transform:translateZ(5px);border-bottom:1px solid #d2c184}.envelope-label{position:absolute;bottom:18px;left:18px;font:9px var(--mono);color:#8a7940;transform:translateZ(8px)}.envelope-seal{position:absolute;left:124px;top:76px;width:42px;height:42px;border-radius:50%;background:#0081c0;color:white;display:grid;place-items:center;font:italic 28px var(--sans);box-shadow:0 2px 0 #006c9f,0 4px 10px #5c713340;transform:translateZ(10px)}.application-object{position:absolute;left:26px;top:665px;width:230px;padding:25px 20px 18px;text-align:left;background:var(--paper);border:1px solid #d9e1e4;border-radius:3px;transform:rotateZ(7deg) translateZ(72px);box-shadow:2px 3px 0 #e1e8e9,3px 5px 0 #cbd6d9,8px 22px 22px -10px #40657935;display:block}.clip{position:absolute;top:-19px;left:96px;width:24px;height:54px;border:3px solid #93a7b0;border-radius:14px;transform:rotateZ(-4deg);box-shadow:inset 1px 1px 0 white,1px 0 0 white}.application-object strong{display:block;font:35px/.95 var(--sans);margin-bottom:19px}.scene-caption{position:absolute;bottom:15px;left:4.5vw;transform:none;display:flex;align-items:center;gap:10px;color:#7b8b92;font-size:11px;pointer-events:none}.drag-symbol{font-size:22px}.desk-controls{position:fixed;bottom:0;left:0;right:0;height:86px;z-index:10;display:flex;align-items:center;gap:23px;padding:0 44px;background:transparent}.view-switch{display:flex;padding:4px;border:1px solid #cbd8dd;border-radius:9px;gap:3px}.view-switch button{display:flex;align-items:center;gap:8px;background:transparent;padding:10px 13px;font-size:12px;border-radius:6px;color:#63747d}.view-switch button[aria-pressed=true]{background:var(--paper);color:#1c292f;box-shadow:0 1px 4px #6887951a}.view-switch svg{width:16px;height:16px}.camera-controls{display:flex;gap:6px;align-items:center}.camera-controls button{background:transparent;width:30px;height:32px;font-size:20px;color:#647982}.camera-controls>span{height:16px;width:1px;background:#cbd8dd;margin:0 7px}.camera-controls .reset-button{font-size:11px;width:auto;margin-left:7px}.hire-button{margin-left:auto;display:flex;align-items:center;gap:35px;background:var(--ink);color:var(--paper);padding:15px 20px;font-size:13px;border-radius:8px;box-shadow:0 5px 10px #1f405615}.hire-button:hover{background:#0081c0}.hire-button span{font-size:18px}.aura-particles{position:absolute;left:1040px;top:420px;transform:translateZ(180px);pointer-events:none}.aura-particles span{display:block;position:absolute;font:italic 30px var(--sans);color:var(--blue);animation:float-away 1.6s ease-out forwards}@keyframes float-away{to{transform:translate(var(--px),-200px) rotate(var(--r));opacity:0}}
dialog{border:1px solid #d7e1e3;padding:42px;width:min(550px,calc(100vw - 34px));max-height:85dvh;overflow:auto;background:var(--paper);color:var(--ink);border-radius:17px;box-shadow:0 30px 120px #193c5950}dialog::backdrop{background:#29444c44;backdrop-filter:blur(8px)}.dialog-close{position:absolute;right:16px;top:12px;width:32px;height:32px;background:none;font-size:26px;color:var(--muted)}.dialog-label{font:11px var(--mono);color:var(--blue);margin:0 0 18px}.dialog-title{font:44px/1 var(--sans);margin:0 0 22px;letter-spacing:-.5px}.dialog-body{font-size:16px;line-height:1.65;color:#647074}.dialog-body p{margin:0 0 17px}.dialog-body ul{padding-left:20px}.dialog-body li{margin:9px 0}.dialog-cta{display:inline-flex;padding:13px 18px;color:white;background:var(--blue);text-decoration:none;border-radius:7px;font-size:14px;margin-top:10px}.dialog-note{font-size:12px;color:var(--muted);margin-top:21px}.receipt{padding:20px;background:var(--ice);border:1px solid #d9edf6;border-radius:9px;margin:20px 0}.receipt p:last-child{margin:0}.receipt strong{color:var(--ink)}.job-list{list-style:none!important;padding:0!important}.job-list li{display:flex;justify-content:space-between;gap:14px;padding:14px 0;margin:0;border-bottom:1px solid var(--line);font-size:14px}.job-list span{color:var(--green);white-space:nowrap}.share-field{display:block;width:100%;padding:12px;border:1px solid var(--line);border-radius:6px;font:12px var(--mono);margin:14px 0;user-select:all}.toast{position:fixed;left:50%;bottom:104px;transform:translate(-50%,10px);opacity:0;pointer-events:none;padding:13px 20px;border:1px solid #d5e0e4;background:var(--paper);border-radius:9px;box-shadow:0 8px 35px #3455651c;font-size:13px;z-index:100;transition:opacity .2s,transform .2s;max-width:90vw;text-align:center}.toast.visible{opacity:1;transform:translate(-50%,0)}
body.read-mode{overflow-y:auto;background:var(--canvas)}body.read-mode .site-header{position:relative}body.read-mode .intro{display:none}body.read-mode .stage{position:relative;inset:auto;perspective:none;overflow:visible;touch-action:auto;cursor:auto;padding:32px 22px 130px}body.read-mode .scene-anchor{position:static;width:auto;height:auto;transform:none}body.read-mode .world{position:static;width:auto;height:auto;transform:none!important;will-change:auto}body.read-mode .resume{position:relative;left:auto;top:auto;width:760px;max-width:100%;margin:0 auto;padding:42px 45px;transform:none;min-height:0}body.read-mode .resume-head{gap:22px}body.read-mode .resume h2{font-size:103px}body.read-mode .summary{font-size:15px}body.read-mode .resume-columns{grid-template-columns:1fr 200px;gap:37px}body.read-mode .experience-title strong{font-size:17px}body.read-mode .job-description{font-size:14px}body.read-mode .company{font-size:12px}body.read-mode .section-label{font-size:11px}body.read-mode .experience-title time{font-size:8px}body.read-mode .skill>span{font-size:14px}body.read-mode .lore p{font-size:13px}body.read-mode .aura span{font-size:12px}body.read-mode .education p{font-size:13px}body.read-mode .education strong{font-size:16px}body.read-mode .paper-stack,body.read-mode .id-object,body.read-mode .mascot-bubble,body.read-mode .floating-ticket,body.read-mode .envelope,body.read-mode .application-object,body.read-mode .ambient-floor,body.read-mode .scene-caption,body.read-mode .aura-particles,body.read-mode .camera-controls{display:none}body.read-mode .view-switch{background:#edf3f5ec}body.read-mode .aura:hover,body.read-mode .portrait{transform:none}
@media(min-width:1800px){.intro{left:6vw;top:21vh}h1{font-size:86px}.scene-anchor{left:calc(50% + 135px)}}
@media(max-width:1150px){.intro{left:32px;width:240px;top:16vh}h1{font-size:59px}.intro-description{font-size:16px}.availability{font-size:10px;gap:6px}.intro-footnote{margin-left:48px}.scene-anchor{left:calc(50% + 60px)}.site-header,.desk-controls{padding-left:26px;padding-right:26px}}
@media(max-width:760px){.site-header{height:68px;padding:0 20px;gap:15px}.brand{font-size:25px}.brand img{width:25px;height:28px}.header-note{display:none}.header-actions{gap:0}.share-button{font-size:11px;padding:8px 10px;border:0}.share-button svg{width:16px;height:16px}.stage{inset:68px 0 130px}.intro{left:25px;top:88px;width:auto}.availability{font-size:10px;margin-bottom:14px}h1{font-size:49px;line-height:.95}.intro-description,.intro-footnote,.read-link{display:none}.scene-anchor{left:48%;top:60%}.scene-caption{bottom:4px;left:50%;transform:translateX(-50%);width:max-content;font-size:9px}.desk-controls{height:118px;flex-wrap:wrap;gap:9px;padding:10px 16px 17px;justify-content:center}.view-switch{padding:3px;gap:0}.view-switch button{padding:10px 11px;font-size:11px;gap:6px}.view-switch svg{width:14px;height:14px}.hire-button{padding:13px 14px;gap:12px;font-size:11px;margin-left:auto}.camera-controls{width:100%;justify-content:center;order:3;height:23px}.camera-controls button{height:24px;font-size:18px}.camera-controls .reset-button{font-size:11px}body.read-mode .stage{padding:10px 13px 118px}body.read-mode .resume{padding:27px 21px;border-radius:4px}body.read-mode .resume h2{font-size:82px}body.read-mode .document-label{font-size:7px;line-height:1.5;max-width:140px}body.read-mode .resume-head{gap:12px}body.read-mode .job-title{font-size:18px}body.read-mode .portrait{padding:13px 10px 10px;gap:10px}body.read-mode .portrait img{width:62px;height:68px}body.read-mode .portrait span{font-size:8px;padding:4px 6px}body.read-mode .summary{font-size:13px;margin-top:22px}body.read-mode .summary br{display:none}body.read-mode .resume-meta{flex-wrap:wrap;gap:9px 14px;font-size:8px;padding-bottom:20px}body.read-mode .resume-columns{grid-template-columns:1fr;gap:26px}body.read-mode .experience-title strong{font-size:16px}body.read-mode .experience-title time{font-size:8px}body.read-mode .job-description{font-size:13px}body.read-mode .experience-entry{margin-bottom:25px}body.read-mode .skills-column{border-top:1px solid var(--line);padding-top:22px}body.read-mode .skill{margin-bottom:21px}body.read-mode .skill i{background-size:23px 3px}.lore{display:grid;grid-template-columns:1fr 1fr;gap:14px}.lore h3{grid-column:1/-1;margin-bottom:0}.lore p{margin:0}.aura{margin-top:16px}.reference blockquote{font-size:22px}.signature{font-size:27px;padding:0}.paper-footer{font-size:6px;gap:20px;line-height:1.5}body.read-mode .desk-controls{height:84px;flex-wrap:nowrap;padding-bottom:13px;gap:8px}body.read-mode .view-switch button{padding:10px 8px}body.read-mode .view-switch svg{display:none}body.read-mode .hire-button{gap:9px;padding:13px 11px}.toast{bottom:130px;width:max-content;max-width:90vw}dialog{padding:32px 26px;border-radius:12px}.dialog-title{font-size:38px}.dialog-body{font-size:15px}.job-list li{font-size:12px}.header-actions .share-button span{font-size:11px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.world{will-change:auto}.aura-particles{display:none}}
@media print{body{overflow:visible;background:white}.site-header,.intro,.desk-controls,.scene-caption,.ambient-floor,.id-object,.envelope,.application-object,.floating-ticket,.mascot-bubble,.aura-particles,.paper-stack,.paper-corner,.peek{display:none!important}.stage,.scene-anchor,.world,.resume{position:static!important;transform:none!important;perspective:none!important;margin:0!important;padding:0!important;width:100%!important;height:auto!important;overflow:visible!important;box-shadow:none!important;border:0!important}.resume{padding:20px!important}.resume-columns{grid-template-columns:1fr 200px!important}.portrait{transform:none!important}.lore{display:block}.experience-entry{break-inside:avoid}}

/* Each desk object owns its position; the camera only rotates the shared space. */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
.movable{position:absolute;transform-style:preserve-3d;transform:translate3d(var(--dx,0px),var(--dy,0px),var(--lift,0px)) rotateZ(var(--twist,0deg));transition:transform .55s cubic-bezier(.2,1.35,.3,1);cursor:grab;touch-action:none}
.movable:focus-visible{outline:3px dashed var(--blue);outline-offset:12px;border-radius:6px}
.movable.is-grabbed{transition:none;will-change:transform;cursor:grabbing}
body:not(.read-mode) .stage{user-select:none;-webkit-user-select:none}
body:not(.read-mode) .movable button{cursor:grab}
body:not(.read-mode) .stage.dragging,body:not(.read-mode) .stage.dragging *{cursor:grabbing!important}
.resume-piece{left:310px;top:40px;width:680px;height:946px}
.resume-piece>.resume{left:0;top:0}
.resume-piece>.paper-stack{left:7px;top:16px}
.badge-piece{left:1040px;top:140px;width:236px;height:332px}
.badge-piece>.id-object{left:0;top:0}
.badge-piece>.mascot-bubble{left:32px;top:365px;white-space:pre-line;pointer-events:none}
.creative-piece{left:1070px;top:610px;width:256px;height:79px}
.web-piece{left:1070px;top:702px;width:256px;height:79px}
.letter-piece{left:1038px;top:860px;width:290px;height:173px}
.applications-piece{left:26px;top:665px;width:230px;height:278px}
.movable>.floating-ticket,.movable>.envelope,.movable>.application-object{left:0;top:0}
.is-grabbed>.resume{box-shadow:0 2px 0 #ced8d9,0 5px 0 #e6eded,0 6px 0 #cbd5d6,0 50px 65px -20px #49616e55}
.is-grabbed>.floating-ticket,.is-grabbed>.application-object{box-shadow:1px 3px 0 #d2dce0,12px 40px 36px -15px #43687850}
.is-grabbed .letter-peek{top:-21px!important;transform:translateZ(1px)!important}
.reaction-mark{position:absolute;right:10px;top:36px;font:italic 42px var(--sans);color:var(--blue);transform:translateZ(48px) rotate(14deg) scale(.6);opacity:0;transition:transform .2s,opacity .2s;pointer-events:none}
.badge-piece[data-mood] .reaction-mark{opacity:1;transform:translateZ(48px) rotate(14deg) scale(1)}
.badge-piece[data-mood=panic] .reaction-mark{color:#bb5837}
.badge-piece[data-mood=panic] .mascot-bubble{background:#fff8dd;border-color:#e5d7a6}
.badge-piece[data-mood=relieved] .reaction-mark,.badge-piece[data-mood=amused] .reaction-mark{opacity:0}
.mascot-button.reacting{animation:desk-reaction .65s ease-in-out}
.badge-piece[data-mood=panic] .mascot-button.reacting{animation:desk-panic .5s steps(5)}
@keyframes desk-reaction{25%{transform:translate3d(-5px,-15px,28px) rotate(-9deg)}60%{transform:translate3d(4px,-4px,22px) rotate(7deg)}85%{transform:translate3d(0,-7px,20px)}}
@keyframes desk-panic{20%,60%{transform:translate3d(-9px,-13px,25px) rotate(-12deg)}40%,80%{transform:translate3d(9px,-13px,25px) rotate(12deg)}}
#drag-plane{position:absolute;left:0;top:0;width:1000px;height:1000px;transform-style:preserve-3d;pointer-events:none}
#drag-plane i{position:absolute;left:0;top:0;width:0;height:0}
#drag-plane i:nth-child(2){left:1000px}
#drag-plane i:nth-child(3){left:1000px;top:1000px}
#drag-plane i:nth-child(4){top:1000px}
.hire-button{text-decoration:none}
body.read-mode .movable{display:none}
body.read-mode .resume-piece{display:block;position:static;width:auto;height:auto;transform:none;transition:none;cursor:auto;touch-action:auto}
body.read-mode #drag-plane{display:none}
body.read-mode .resume-piece>.resume{left:auto;top:auto}
@media(prefers-reduced-motion:reduce){.movable,.reaction-mark{transition:none!important}.mascot-button.reacting{animation:none!important}}
@media print{.movable,#drag-plane{display:none!important}.resume-piece{display:block!important;position:static!important;width:auto!important;height:auto!important;transform:none!important}.reaction-mark{display:none!important}}

/* Vibi's office: the room supplies depth, while the papers stay crisp and readable. */
.office-scene{position:fixed;inset:0;pointer-events:none;background:linear-gradient(#e8e9df 0 66%,#c6ae83 66% 85%,#c7c5b6 85%);z-index:0}
.office-scene canvas{display:block;width:100%;height:100%}
.office-veil{position:fixed;inset:0;pointer-events:none;z-index:1;background:radial-gradient(ellipse 40% 53% at 7% 25%,#eef0e3ef 0%,#eef0e3b5 38%,#eef0e335 75%,transparent 100%);transition:background .5s}
.stage{z-index:2}.ambient-floor{display:none}
/* Controls float over the continuous scene; only individual buttons have surfaces. */
.site-header,.desk-controls{background:transparent;border:0;backdrop-filter:none}
.intro-description{color:#536565}.availability{color:#536565}
.scene-caption{color:#405753;background:#f4f5e0c7;padding:4px 10px;border-radius:6px;backdrop-filter:blur(4px)}
.shift-toggle{display:none;align-items:center;gap:8px;background:transparent;font-size:12px;padding:9px 11px;border:1px solid #81928b50;border-radius:6px}
body[data-office=ready] .shift-toggle{display:flex}
.shift-toggle svg{width:16px;height:16px}
body.read-mode .office-scene,body.read-mode .office-veil,body.read-mode .shift-toggle{display:none}
body.read-mode .site-header{background:transparent;backdrop-filter:none}
body[data-office=fallback] #office-canvas{display:none}
body.night-mode:not(.read-mode) .office-veil{background:linear-gradient(90deg,#273c45eb 0%,#273c45ca 17%,#273c4544 32%,transparent 48%)}
body.night-mode:not(.read-mode) .site-header{color:#eef4ed}
body.night-mode:not(.read-mode) .header-note,body.night-mode:not(.read-mode) .intro,body.night-mode:not(.read-mode) .intro-description,body.night-mode:not(.read-mode) .availability,body.night-mode:not(.read-mode) .scribble,body.night-mode:not(.read-mode) .read-link,body.night-mode:not(.read-mode) .intro-footnote svg{color:#e6eee7}
body.night-mode:not(.read-mode) .availability span{background:#b2d1b5}
body.night-mode:not(.read-mode) .view-switch button:not([aria-pressed=true]),body.night-mode:not(.read-mode) .camera-controls button{color:#e7eee5}
body.night-mode:not(.read-mode) .hire-button{background:#dfece3;color:#243b41}
body.night-mode:not(.read-mode) .view-switch,body.night-mode:not(.read-mode) .camera-controls button{background:#1c303dcc;border-radius:6px}
@media(max-width:760px){.office-veil{background:linear-gradient(#edf0e5e0 0%,#edf0e56b 28%,transparent 60%)}.header-actions{gap:9px}.shift-toggle{font-size:10px;padding:6px 8px;gap:5px}.shift-toggle svg{width:13px;height:13px}.scene-caption{font-size:9px;padding:2px 8px}.header-actions .share-button{padding:7px 0}.intro{top:90px}body.night-mode:not(.read-mode) .office-veil{background:linear-gradient(#273c45e8 0%,#273c4590 29%,transparent 65%)}}
@media print{.office-scene,.office-veil{display:none!important}}

/* Small labels follow the real props and keep covered objects reachable. */
.office-prop-controls{position:absolute;inset:0;z-index:3;pointer-events:none;display:none}
body[data-office=ready]:not(.read-mode) .office-prop-controls{display:block}
.office-prop{position:absolute;left:0;top:0;display:flex;gap:7px;align-items:center;white-space:nowrap;pointer-events:auto;touch-action:none;transform:translate(-50%,-50%);padding:7px 10px;border:1px solid #78938d55;background:#f7f8eef0;color:#3d5c60;border-radius:20px;font-size:11px;box-shadow:0 2px 8px #243c4010;cursor:grab;transition:background .15s,box-shadow .15s}
.office-prop b{font-size:14px;font-weight:400}.office-prop i{width:6px;height:6px;border-radius:50%;background:#cbcbbe}
.office-prop[aria-pressed=true] i{background:#e1ae3e;box-shadow:0 0 7px #eac554}
.office-prop[data-office-prop=lamp]{cursor:pointer}
.office-prop:hover,.office-prop.is-hovered,.office-prop:focus-visible{background:#fffdf0;box-shadow:0 3px 16px #325d6a25}
.stage[data-office-hover=lamp]{cursor:pointer}
body.night-mode:not(.read-mode) .office-prop{background:#263e48f0;color:#edf3e5;border-color:#93b7b35e}
body.night-mode:not(.read-mode) .office-prop:hover,body.night-mode:not(.read-mode) .office-prop.is-hovered{background:#365665}
@media(max-width:760px){.office-prop{font-size:10px;padding:7px 8px;gap:5px}.office-prop b{font-size:12px}}
@media print{.office-prop-controls{display:none!important}}

/* The Paper room keeps the brand canvas and quiet gray grid. */
.header-actions{gap:18px}.intro-footnote{display:none}
.office-prop{border-color:transparent;box-shadow:none;background:#f7f8eeb8}
body[data-scene=paper]:not(.read-mode){--canvas:#F7F7F7}
body[data-scene=paper]:not(.read-mode) .office-veil{background:radial-gradient(ellipse 50% 65% at 9% 20%,#F7F7F7ed,transparent)}
body[data-scene=paper]:not(.night-mode):not(.read-mode) .office-prop,body[data-scene=paper]:not(.night-mode):not(.read-mode) .scene-caption{background:#F7F7F7cc;color:#646464}
body[data-scene=paper] .office-scene{background:#F7F7F7}
body.night-mode[data-scene=paper]:not(.read-mode) .office-veil{background:radial-gradient(ellipse 45% 75% at 8% 25%,#192e42f0,transparent)}
/* The big reaction belongs to Vibi, rather than shaking the whole page. */
.panic-face{display:none;position:absolute;left:23%;top:39%;width:58%;height:28%;background:#f5fbff;pointer-events:none}
.panic-face:before,.panic-face:after{content:'';position:absolute;top:2px;width:16px;height:23px;background:#263238;border:4px solid white;outline:2px solid #263238;box-shadow:inset 0 5px 0 #263238;border-radius:2px}
.panic-face:before{left:2px}.panic-face:after{right:2px}.panic-face i{position:absolute;left:36%;bottom:-1px;width:22px;height:17px;background:#263238;border-radius:2px;box-shadow:inset 0 -5px #a76a63}
.badge-piece[data-mood=meltdown] .panic-face{display:block}
.badge-piece[data-mood=meltdown] .reaction-mark{opacity:1;transform:translateZ(48px) rotate(12deg) scale(1.4);color:#bc4e2a}
.badge-piece[data-mood=meltdown] .id-object{animation:caffeine-emergency .32s ease-in-out 7;border-color:#c98060}
.badge-piece[data-mood=meltdown] .mascot-bubble{background:#fff3db;border:2px solid #cc8456;font-size:16px;font-weight:600;box-shadow:0 7px 24px #9b57392a}
@keyframes caffeine-emergency{0%,100%{transform:translateZ(92px) rotateZ(11deg)}25%{transform:translate3d(-9px,-12px,92px) rotateZ(7deg)}75%{transform:translate3d(9px,-7px,92px) rotateZ(15deg)}}
body[data-coffee=spilled]:not(.read-mode) .camera-controls .reset-button{color:#a94624;background:#fff0d7;border-radius:5px;padding:0 10px}
@media(max-width:760px){.header-actions{gap:8px}.header-actions .share-button{padding:7px}.share-button span{display:none}.scene-caption{font-size:8px}.site-header{padding:0 14px;gap:10px}}
@media(prefers-reduced-motion:reduce){.badge-piece[data-mood=meltdown] .id-object{animation:none}}

@media(max-width:380px){.brand>span{display:none}.view-switch svg{display:none}.view-switch button{font-size:10px;padding:9px 7px}.hire-button{font-size:10px;padding:12px 10px;gap:6px}.desk-controls{gap:7px}}

/* One view action keeps the floating toolbar compact without hiding the desk. */
body.read-mode{--canvas:#F7F7F7}
body.read-mode .desk-controls{background:linear-gradient(transparent,#F7F7F7 22%)}
.view-switch,body.read-mode .view-switch{border:0;background:none;padding:0}
.view-switch button[aria-pressed=true]{display:none}
.view-switch button{background:transparent;padding:12px 0}
/* Tangible desk: printed samples, paper stock, stitched fabric, and molded plastic. */
body:not(.read-mode) .stage{perspective:1450px}
.resume{background-color:#fefffc;background-image:linear-gradient(105deg,#ffffff80,transparent 28%,#d4dadb16 62%,#ffffffb0 63%,transparent 65%),url('assets/paper-grain.svg');border-color:#d6dad8;box-shadow:1px 2px 0 #b7c2c5,2px 4px 0 #f4f7f6,3px 6px 0 #bdc8cb,4px 8px 0 #edf1f0,18px 32px 30px -17px #273d4d38}
body:not(.read-mode) .resume-piece{transform:translate3d(var(--dx,0px),var(--dy,0px),var(--lift,0px)) rotateZ(var(--twist,0deg)) rotateX(var(--bend-x,0deg)) rotateY(var(--bend-y,0deg))}
body:not(.read-mode) .resume{transition:box-shadow .4s}
.is-grabbed>.resume{transition:box-shadow .25s;box-shadow:1px 2px 0 #aebec3,2px 4px 0 #f4f7f6,3px 6px 0 #c4cfd1,35px 65px 45px -18px #253f5355}
.paper-stack{background:#f3f6f2;border:1px solid #cad4d5;transform:translateZ(-18px) rotateZ(2deg);box-shadow:1px 3px 0 #becbd0,2px 6px 0 #eef2f0,3px 9px 0 #c9d4d6,24px 40px 38px -20px #28495a4d}
.portrait{background:linear-gradient(140deg,#f0faff,#cceffc);box-shadow:inset 0 1px 0 #fff,1px 2px 0 #d8e6ec}
.portrait img{filter:drop-shadow(2px 5px 1px #0081c022)}
.id-object{background:linear-gradient(125deg,#edfaff 2%,#bde5f7 30%,#e5f6ff 56%,#aed9ed 100%);border:2px solid #c6e7f3;border-radius:17px;box-shadow:inset 0 1px 1px #fff,1px 2px 0 #92bfd3,2px 4px 0 #6fa8c2,3px 6px 0 #9bc3d4,5px 8px 0 #5e95ad,24px 34px 26px -10px #25475f40;transform:translateZ(125px) rotateZ(12deg) rotateY(-12deg)}
.id-object:after{content:'';position:absolute;inset:2px;border-radius:14px;pointer-events:none;background:linear-gradient(115deg,transparent 20%,#fff8 25%,#fff1 34%,transparent 38%,transparent 62%,#fff7 64%,transparent 66%);background-position:var(--glint,50%) 0;background-size:160% 100%;mix-blend-mode:screen;transform:translateZ(26px)}
.id-hole{background:#5b81948a;box-shadow:inset 0 2px 3px #2344548c,0 1px 0 #fff}
.lanyard{width:23px;left:106px;background:repeating-linear-gradient(0deg,#0081c0 0 2px,#0878ae 2px 3px);border-left:2px dashed #6bc2e6;border-right:2px dashed #045b87;box-shadow:inset 3px 0 3px #fff3,3px 2px 0 #00496e,9px 10px 9px #243f5c24;transform:rotateZ(-7deg) rotateY(8deg) translateZ(8px)}
.lanyard:after{content:'';position:absolute;bottom:-10px;left:-5px;width:28px;height:23px;border:5px solid #c4cdd1;border-radius:5px;background:linear-gradient(90deg,#e8eef0,#8c9ca5 50%,#f8fafb);box-shadow:1px 2px 0 #648192,2px 4px 4px #24405355}
.mascot-button img{filter:drop-shadow(3px 6px 0 #0081c025)}
.mascot-bubble{border-color:#d2d9dc;box-shadow:0 2px 0 #c8d4d9,10px 18px 22px -8px #324b6330}
.creative-piece{left:1050px;top:615px;height:163px}
.web-piece{left:28px;top:377px;height:168px}
.letter-piece{left:-20px;top:900px}
.applications-piece{left:10px;top:615px}
.floating-ticket{display:block;overflow:visible;border-radius:2px;padding:18px;width:256px;height:163px;box-shadow:1px 2px 0 #a9b8c0,2px 4px 0 #dce6e9,16px 26px 20px -10px #243e5745;border:1px solid #c9d7df;transform:rotateZ(-9deg) rotateY(-7deg) translateZ(90px)}
.floating-ticket:before{content:'';position:absolute;left:87px;top:-13px;width:82px;height:24px;background:repeating-linear-gradient(90deg,#f8edce72 0 2px,#ece1c862 2px 3px);border:1px solid #ece4c7aa;box-shadow:0 1px 3px #20384813;transform:translateZ(2px) rotate(-3deg);pointer-events:none}















.application-object{background:#fcfdf8 url('assets/paper-grain.svg');border:1px solid #dce2df;border-left:8px solid #72a7b9;border-radius:2px;box-shadow:2px 3px 0 #bac9cb,4px 6px 0 #f8fbf8,5px 8px 0 #bdcace,6px 11px 0 #47758c,24px 32px 25px -13px #2b465750;transform:rotateZ(9deg) rotateY(7deg) translateZ(72px)}
.clip{border-color:#a6b6bd;background:linear-gradient(90deg,#fff0,#dce7eb44);box-shadow:inset 2px 1px 0 #fff,2px 1px 0 #fff,3px 3px 2px #3b546560;transform:rotateZ(-8deg) translateZ(9px)}
.envelope{transform:rotateZ(-13deg) rotateX(12deg) translateZ(78px);filter:drop-shadow(17px 28px 16px #3b4c513e)}
.envelope-back{background:linear-gradient(130deg,#e6c85c,#f4dc87);border-color:#d1b964;box-shadow:1px 2px 0 #c7b161}
.envelope-fold{background:linear-gradient(30deg,#fff0af 49.4%,#d3bb7159 49.7%,transparent 50%) bottom left/50.2% 100% no-repeat,linear-gradient(-30deg,#f3de8e 49.4%,#d3bb7159 49.7%,transparent 50%) bottom right/50.2% 100% no-repeat}
.envelope-seal{box-shadow:inset 1px 2px 2px #7dd2f0,0 2px 0 #00587f,0 4px 0 #0071a3,3px 7px 7px #3b57644d}
body .office-veil{opacity:.38}
body:not(.read-mode) .scene-caption{background:none;backdrop-filter:none}
@media(hover:hover) and (pointer:fine){.office-prop{opacity:0;transition:opacity .2s,background .2s}.office-prop:hover,.office-prop:focus-visible,.office-prop.is-hovered{opacity:1}}
@media(max-width:760px){.letter-piece{left:26px;top:905px}.creative-piece{left:1050px;top:605px}.web-piece{left:28px;top:385px}}
@media print{.resume{background:#fff!important;box-shadow:none!important}.portrait{box-shadow:none!important}}
@media(max-height:800px) and (min-width:761px){.intro{top:15vh;width:270px}.intro h1{font-size:56px;margin-bottom:16px}.intro .availability{margin-bottom:20px}.intro-description{font-size:16px;line-height:1.4}.intro .read-link{display:none}}

/* Tiny room: the documents and WebGL use the same perspective camera. */
body.room-active .stage{position:fixed;inset:0;perspective:none;overflow:hidden;isolation:isolate}
.room-documents{position:fixed;inset:0;z-index:1;pointer-events:none}
body.room-active .office-scene{position:fixed;inset:0;z-index:2;pointer-events:none;background:transparent;filter:none}
body.room-active .office-veil,body.room-active .ambient-floor,body.room-active .scene-anchor{display:none}
body.room-active .movable{inset:0 auto auto 0;margin:0;transition:none;transform-origin:50% 50%;pointer-events:auto;backface-visibility:hidden}
body.room-active .movable>.resume,body.room-active .movable>.id-object,body.room-active .movable>.floating-ticket,body.room-active .movable>.envelope,body.room-active .movable>.application-object{position:relative;inset:auto;transform:none!important;margin:0;box-shadow:none;filter:none;animation:none}
body.room-active .paper-stack,body.room-active .paper-corner,body.room-active .lanyard,body.room-active .clip,body.room-active .floating-ticket:before{display:none}
body.room-active .id-object:after{transform:none}
body.room-active .envelope{height:210px;background:#f1d882;border:1px solid #c9b674;border-radius:2px;overflow:hidden}
body.room-active .letter-peek{top:22px;transform:none}
body.room-active .envelope:hover .letter-peek,body.room-active .envelope:focus-visible .letter-peek{top:6px;transform:none}
body.room-active .is-grabbed .letter-peek{top:22px!important;transform:none!important}
body.room-active .office-prop-controls{z-index:5}
body.room-active .mascot-bubble{position:fixed;width:206px;min-height:0;margin:0;padding:12px 15px;transform:none;font-size:13px;line-height:1.3;z-index:5;pointer-events:none;background:#fffdf8;box-shadow:0 4px 20px #24384920;white-space:pre-line}
body.room-active[data-coffee=spilled] .mascot-bubble{background:#fff0da;border:1px solid #c87548;font-weight:600}
body.room-active .scene-caption{position:fixed;left:36px;bottom:96px;z-index:5;background:none;pointer-events:none;font-size:11px;color:#646464}
body.room-active .intro{left:36px;top:108px;width:240px;pointer-events:none}
body.room-active .intro h1{font-size:50px;line-height:.95;margin:0 0 18px}
body.room-active .intro .availability{font-size:10px;margin-bottom:16px}
body.room-active .intro-description{font-size:14px;line-height:1.4}
body.room-active .intro .read-link{display:none}
body.room-active .intro-footnote{display:none}
.camera-controls .room-preset{width:auto;padding:0 9px;font:12px var(--sans)}
body:not(.room-active) .room-documents,body:not(.room-active) #stage>.mascot-bubble{display:none}
@media(max-width:1000px){body.room-active .intro{top:95px;width:190px;left:24px}body.room-active .intro h1{font-size:38px}body.room-active .intro-description{display:none}.camera-controls .room-preset{font-size:10px;padding:0 6px}}
@media(max-width:760px){body.room-active .intro{top:88px;left:22px}body.room-active .intro h1{font-size:38px}.camera-controls .room-preset{font-size:10px}body.room-active .scene-caption{left:22px;bottom:130px;font-size:9px;max-width:calc(100vw - 44px)}body.room-active .mascot-bubble{width:166px;font-size:11px;padding:9px 11px}.camera-controls{gap:3px}}
@media print{.room-documents,.room-preset{display:none!important}}

body.room-active .scene-caption{transform:none}
.camera-controls .room-preset{white-space:nowrap}
body.room-active #aura-particles{position:fixed;left:65%;top:50%;z-index:6;transform:none}



body:not(.read-mode):not(.room-active) .scene-anchor{visibility:hidden}

body.room-active .mascot-bubble:before{content:'';position:absolute;width:10px;height:10px;inset:auto;background:inherit;transform:rotate(45deg);border:0;box-shadow:none}
body.room-active .mascot-bubble[data-side=above]:before{left:calc(var(--tail-x) - 5px);bottom:-5px}
body.room-active .mascot-bubble[data-side=below]:before{left:calc(var(--tail-x) - 5px);top:-5px}
body.room-active .mascot-bubble[data-side=right]:before{left:-5px;top:calc(var(--tail-y) - 5px)}
body.room-active .mascot-bubble[data-side=left]:before{right:-5px;top:calc(var(--tail-y) - 5px)}
body.room-active .office-prop[data-office-prop=lamp],.stage[data-office-hover=lamp]{cursor:grab}
body.room-active .stage.dragging,body.room-active .stage.dragging *{cursor:grabbing}
/* Floating chrome leaves the uncovered desk available to the pointer. */
body.room-active .desk-controls,body.room-active .site-header{pointer-events:none}
body.room-active .desk-controls button,body.room-active .desk-controls a,body.room-active .site-header a,body.room-active .header-actions{pointer-events:auto}

/* Bigger, darker type on the physical sheet; keep the document view responsive. */
body.room-active .resume{width:800px;min-height:0;padding:30px 36px 24px;background-color:#fff;background-image:url('assets/paper-grain.svg');color:#171717;border-color:#c5c9cd}
body.room-active .resume h2{font-size:100px}
body.room-active .job-title{font-size:25px}
body.room-active .document-label{font-size:10px;color:#50555a}
body.room-active .summary{font-size:17px;line-height:1.5;color:#353b40;margin:16px 0}
body.room-active .resume-meta{font-size:10px;color:#50555a;padding-bottom:16px}
body.room-active .resume-columns{grid-template-columns:1fr 216px;gap:28px;padding-top:20px}
body.room-active .section-label{font-size:12px;color:#434a50;margin-bottom:14px}
body.room-active .experience-entry{margin-bottom:20px}
body.room-active .experience-title strong{font-size:19px;font-weight:700}
body.room-active .experience-title time{font-size:9px;color:#50555a}
body.room-active .company{font-size:14px;margin-bottom:7px;color:#006da3}
body.room-active .job-description{font-size:16px;line-height:1.5;color:#353b40}
body.room-active .peek{font-size:12px}
body.room-active .skill>span{font-size:16px;font-weight:500}
body.room-active .skill small{font-size:10px}
body.room-active .lore p,body.room-active .education p{font-size:14px;color:#353b40}
body.room-active .lore small{font-size:10px;color:#50555a}
body.room-active .education{padding-top:16px}
body.room-active .education strong{font-size:18px}
body.room-active .aura span{font-size:12px;color:#353b40}
body.room-active .copium{font-size:11px}
body.room-active .reference{margin-top:20px;padding-top:18px}
body.room-active .paper-footer{font-size:9px;color:#50555a}

body.read-mode .summary,body.read-mode .job-description,body.read-mode .lore p,body.read-mode .education p{color:#353b40}
@media(min-width:761px){body.read-mode .job-description{font-size:16px;line-height:1.65}body.read-mode .company{font-size:14px}body.read-mode .experience-title strong{font-size:19px}}
@media(max-width:760px){body.read-mode .job-description{font-size:15px;line-height:1.6}body.read-mode .summary,body.read-mode .lore p,body.read-mode .education p{font-size:14px}body.read-mode .company{font-size:13px}}

.music-toggle{display:inline-flex;align-items:center;gap:7px;padding:8px 10px;border:1px solid #a4b3bc66;border-radius:7px;background:#f7f7f770;font:12px var(--sans);white-space:nowrap}
.music-toggle svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.music-toggle[aria-pressed=true]{color:#006da3;background:#e4f5ffdf;border-color:#8dcce6}
.stage.over-interactive{cursor:pointer}
.stage.over-screen{cursor:zoom-in}
#work-dialog{width:min(1120px,calc(100vw - 36px),calc((100dvh - 280px)*1.7778 + 56px));max-width:none;padding:28px;border:1px solid #cbd5dc;border-radius:18px;background:#f7f9fa;max-height:calc(100dvh - 36px);overflow:auto}
#work-dialog::backdrop{background:#12212c80;backdrop-filter:blur(7px)}
.work-heading{display:flex;justify-content:space-between;align-items:center;padding-right:42px;margin-bottom:20px;gap:20px}
.work-heading p{margin:0 0 6px;font-size:12px;color:#64737e}.work-heading h2{font:42px/1 var(--sans);margin:0;color:#171717}
.work-heading button,.work-task-controls button{padding:10px 14px;background:#fff;border:1px solid #d5dde2;border-radius:7px;font:13px var(--sans)}
#work-screen-host{background:#16212a;border:7px solid #16212a;border-radius:10px;overflow:hidden;aspect-ratio:16/9}
#work-screen-host canvas{display:block;width:100%;height:100%}
.work-task-controls{display:flex;gap:8px;flex-wrap:wrap;margin-top:18px}.work-task-controls button[aria-pressed=true]{background:#e6f4fc;border-color:#82bed9;color:#006da3}
#work-status{font-size:13px;color:#384f60;margin:16px 0 8px}.work-source{display:flex;align-items:center;justify-content:space-between;gap:20px;font-size:12px;color:#657580}.work-source p{margin:0}.work-source a{color:#0079b1;white-space:nowrap}
body.night-mode .music-toggle{color:#dce8ec;background:#20333fd9}
@media(max-width:1100px){.header-actions{gap:10px}.music-toggle span{display:none}.music-toggle{padding:8px}}
@media(max-width:760px){.header-actions{gap:6px}.music-toggle{padding:7px}.music-toggle svg{width:15px;height:15px}.camera-controls{flex-wrap:wrap;justify-content:center}.work-heading h2{font-size:34px}#work-dialog{padding:16px;width:calc(100vw - 20px);max-height:calc(100dvh - 20px)}.work-heading{padding-right:23px;gap:8px}.work-heading button{padding:8px;font-size:11px}.work-task-controls{gap:5px}.work-task-controls button{padding:8px;font-size:11px}.work-source{display:block;line-height:1.6}.work-source a{display:inline-block;margin-top:8px}}
@media print{.music-toggle,#work-dialog{display:none!important}}
@media(max-width:760px){body.room-active .desk-controls{height:146px}.camera-controls{height:auto;row-gap:2px}.camera-controls .room-preset{flex:0 0 29%;height:28px;font-size:11px}.camera-controls>span{display:none}body.room-active .scene-caption{bottom:160px}}
@media(max-width:760px){.camera-controls{display:grid;grid-template-columns:repeat(6,1fr)}.camera-controls button{justify-self:center}.camera-controls .room-preset{grid-column:span 2}.camera-controls .reset-button{grid-column:span 2;margin-left:0}}

/* Landing-page headline typography; the handwritten sign-off keeps Instrument Serif. */
:root{--headline-gradient:linear-gradient(135deg,#262626,#404040 50%,#737373)}
.intro h1,.resume h2,.dialog-title,.work-heading h2,.application-object strong{font-family:var(--sans);font-style:normal;font-weight:700;letter-spacing:-.04em;line-height:1.08}
.headline-line,.resume h2,.dialog-title,.work-heading h2,.application-object strong{background-image:var(--headline-gradient);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent;padding-bottom:.06em}
.headline-line{display:block}
body.room-active .intro{width:280px}
body.room-active .intro h1{font-size:42px;line-height:1.08}
.resume h2{font-size:92px;line-height:1.04}
.letter-peek{font-family:var(--sans);font-size:16px;line-height:1.25}
.letter-peek em{font-size:24px;font-weight:650;font-style:normal;letter-spacing:-.035em}
.reference blockquote{font-family:var(--sans);font-size:19px;font-weight:500;font-style:normal}
.application-object strong{font-size:30px}


.aura strong{font-style:normal;font-weight:650}
.dialog-title em{font-style:normal}
body.night-mode:not(.read-mode) .headline-line{background-image:linear-gradient(135deg,#fff,#d6d6d6 50%,#a3a3a3)}
@media(max-width:760px){body.room-active .intro{width:250px}body.room-active .intro h1{font-size:34px}body.read-mode .resume h2{font-size:70px}}
@media print{.resume h2{background:none;color:#262626;-webkit-text-fill-color:#262626}}

/* The room is the whole viewport; the headline lives in the résumé instead of a blank side rail. */
body.room-active .intro{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;pointer-events:none}
