:root{--bg: #fbe6d7;--pale-peach: #fbe6d7;--soft-coral: #f6ab95;--apricot: #f8c595;--paper: #fff9f3;--paper-border: #d9b7a4;--ink: #523a33;--outline: #6e4940;--button-accent: #ec8f7b;--button-text: #3f2a24}*,*:before,*:after{box-sizing:border-box}[hidden]{display:none!important}html,body{margin:0;padding:0;min-height:100%}body{font-family:Space Grotesk,Trebuchet MS,sans-serif;background:var(--bg);color:var(--ink)}.site-header{width:min(1800px,100%);margin:0 auto;padding:clamp(.7rem,1.4vw,1.35rem) clamp(.85rem,2vw,2.25rem) 0}.site-nav{display:flex;align-items:center;justify-content:space-between;gap:.9rem}.nav-tabs{display:flex;flex-wrap:wrap;gap:.55rem}.nav-tab{text-decoration:none;color:var(--button-text);background:var(--apricot);border:3px solid var(--outline);border-radius:999px;padding:.5rem 1.1rem;font-weight:700;letter-spacing:.01em;transition:transform .12s ease,filter .12s ease}.nav-tab:hover{filter:brightness(1.03)}.nav-tab:focus-visible{outline:3px solid var(--outline);outline-offset:2px}.nav-tab.is-active,.nav-tab[aria-current=page]{background:var(--soft-coral)}.social-links{display:inline-flex;gap:.52rem}.social-link{width:2.6rem;height:2.6rem;display:inline-grid;place-items:center;border-radius:999px;border:3px solid var(--outline);background:var(--pale-peach);color:var(--ink);text-decoration:none;transition:transform .12s ease,filter .12s ease}.social-link svg{width:1.34rem;height:1.34rem;display:block;shape-rendering:geometricPrecision}.social-link:hover{filter:brightness(1.03);transform:translateY(-1px)}.social-link:focus-visible{outline:3px solid var(--outline);outline-offset:2px}.page-shell{width:min(1800px,100%);margin:0 auto;padding:clamp(1.2rem,2.2vw,2.5rem) clamp(.85rem,2vw,2.25rem) clamp(2rem,2.8vw,3rem);text-align:center}.page-shell--main{text-align:left;padding-top:clamp(.7rem,1.8vw,1.7rem)}.headline{margin:0;font-size:clamp(1.6rem,3.2vw,2.4rem);font-weight:700;letter-spacing:.02em}.headline--main{margin-bottom:.35rem}.subhead{margin:.75rem auto 2rem;max-width:42ch;line-height:1.45;font-weight:500}.subhead--main{margin:0;max-width:58ch}.about-section{background:var(--paper);border:4px solid var(--outline);border-radius:1.2rem;padding:clamp(1rem,1.4vw,2rem);container-type:inline-size}.about-section .headline--main{margin-bottom:clamp(.5rem,.9cqw,1rem);font-size:clamp(1.8rem,2.4cqw,3.1rem)}.about-text{margin:0;max-width:none;width:100%;font-size:clamp(1rem,1.05cqw,1.35rem);line-height:1.58}.about-text--intro{user-select:none}.intro-text-line{cursor:text;user-select:all}.about-text+.about-text{margin-top:clamp(.55rem,.8cqw,.95rem)}.projects-section{margin-top:clamp(1.6rem,2.3vw,2.5rem)}.projects-heading{margin:0 0 1rem;font-size:clamp(1.25rem,1.9vw,1.8rem)}.projects-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:1rem;align-items:stretch}.project-card{background:var(--paper);border:4px solid var(--outline);border-radius:1.2rem;padding:clamp(.9rem,1.1vw,1.1rem);display:flex;flex-direction:column;gap:.72rem;height:100%;position:relative;overflow:hidden}.project-media{width:100%;position:relative;margin-top:.05rem;padding:clamp(.45rem,.78vw,.62rem);border:3px solid var(--outline);border-radius:.95rem;background:var(--soft-coral);box-shadow:inset 0 1px #fff5ec80,inset 0 -1px #61403657}.project-console-top{min-height:clamp(1.7rem,2.1vw,2.3rem);width:100%;display:flex;align-items:flex-end;padding:clamp(.12rem,.25vw,.2rem) clamp(.16rem,.45vw,.32rem) clamp(.44rem,.66vw,.62rem);position:relative}.project-console-top:after{content:"";position:absolute;left:clamp(.16rem,.45vw,.32rem);right:clamp(.16rem,.45vw,.32rem);bottom:clamp(.18rem,.35vw,.3rem);height:2px;border-radius:999px;background:#7a5c4c52;box-shadow:0 1px #fff8f1cc}.project-console-top:before{content:none}.project-screen{width:100%;aspect-ratio:16 / 9;border:3px solid var(--outline);border-radius:.95rem;background:var(--pale-peach);overflow:hidden;position:relative}.project-screen--has-image{--project-boot-delay: .12s;background:#17100e}.project-screen--has-image:before,.project-screen--has-image:after{content:"";position:absolute;pointer-events:none}.project-screen--has-image:before{inset:0;z-index:2;background:linear-gradient(#fff9f30f 50%,#2e1c1824 50%) 0 0 / 100% 4px,radial-gradient(circle at 50% 52%,#f6ab953d,#17100eeb 44%,#17100e 72%);opacity:1}.project-screen--has-image:after{left:0;right:0;top:50%;z-index:3;height:3px;background:linear-gradient(90deg,transparent,rgba(255,249,243,.9),transparent);box-shadow:0 0 .75rem #fff9f3b8,0 0 1.2rem #f6ab9585;opacity:0;transform:translateY(-50%) scaleX(.14);transform-origin:center}.project-screen--has-image[data-boot-state=ready]:before{animation:project-screen-dark-boot 1.12s steps(8,end) var(--project-boot-delay) forwards}.project-screen--has-image[data-boot-state=ready]:after{animation:project-screen-boot-line .76s ease-out var(--project-boot-delay) forwards}.project-image{width:100%;height:100%;display:block;object-fit:cover}.project-screen--has-image .project-image{position:relative;z-index:1;opacity:0;filter:brightness(0) saturate(.7) contrast(1.25);transform:scale(1.018)}.project-screen--has-image[data-boot-state=ready] .project-image{animation:project-image-boot-in 1.12s steps(8,end) var(--project-boot-delay) forwards}.project-image-placeholder{width:100%;height:100%;display:grid;place-items:center;padding:.75rem;color:var(--ink);font-weight:600;font-size:clamp(.84rem,1vw,1rem);letter-spacing:.01em;text-align:center}.project-title{margin:0;font-size:1.16rem}.project-console-name{max-width:100%;padding:0;border:0;background:none;color:#6f5a46;font-family:"Press Start 2P",Space Grotesk,sans-serif;font-size:clamp(.64rem,.72vw,.84rem);font-weight:400;letter-spacing:.1em;text-transform:uppercase;line-height:1.28;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none;text-shadow:0 1px 0 rgba(255,248,235,.94),0 -1px 0 rgba(108,84,68,.38),0 0 1px rgba(105,79,63,.35);transform:none}.project-console-name:before{content:none}.project-console-name:after{content:none}.project-dpad{position:absolute;right:clamp(.86rem,1.4vw,1.2rem);bottom:clamp(.8rem,1.4vw,1.14rem);width:clamp(4.4rem,6.8vw,5.55rem);height:clamp(4.4rem,6.8vw,5.55rem);z-index:4;pointer-events:none}.project-dpad-btn{position:absolute;width:43%;height:43%;display:grid;place-items:center;border:2px solid rgba(108,80,64,.44);border-radius:.9rem;background:#eadbce;color:transparent;font-size:0;font-weight:700;line-height:1;user-select:none;overflow:hidden;box-shadow:inset 0 1px #fffaf4db,inset 0 -2px 3px #6348393d}.project-dpad-btn:before{content:"";position:absolute;inset:11%;border:1.5px solid rgba(109,82,66,.26);border-radius:.62rem;background:#fffbf614}.project-dpad:before{content:none}.project-dpad:after{content:none}.project-dpad-btn:after{content:"";position:absolute;left:50%;top:50%;width:18%;height:18%;background:#6c53445c;clip-path:polygon(50% 0,100% 100%,0 100%);transform:translate(-50%,-50%) rotate(var(--dpad-arrow-rotation, 0deg))}.project-dpad-btn-up{top:0;left:50%;transform:translate(-50%);clip-path:polygon(24% 0,76% 0,100% 24%,84% 72%,50% 100%,16% 72%,0 24%);--dpad-arrow-rotation: 0deg}.project-dpad-btn-left{left:0;top:50%;transform:translateY(-50%);clip-path:polygon(0 24%,24% 0,72% 16%,100% 50%,72% 84%,24% 100%,0 76%);--dpad-arrow-rotation: -90deg}.project-dpad-btn-right{right:0;top:50%;transform:translateY(-50%);clip-path:polygon(28% 16%,76% 0,100% 24%,100% 76%,76% 100%,28% 84%,0 50%);--dpad-arrow-rotation: 90deg}.project-dpad-btn-down{bottom:0;left:50%;transform:translate(-50%);clip-path:polygon(16% 28%,50% 0,84% 28%,100% 76%,76% 100%,24% 100%,0 76%);--dpad-arrow-rotation: 180deg}.project-description{margin:0;line-height:1.45}.project-tags{list-style:none;margin:auto 0 0;padding:0;padding-right:clamp(4.6rem,8.2vw,6rem);display:flex;flex-wrap:wrap;gap:.45rem}.project-tag{display:inline-flex;align-items:center;gap:.4rem;padding:.24rem .62rem;border:2px solid var(--outline);border-radius:999px;background:var(--apricot);font-size:.84rem;font-weight:700}.project-tag-icon{width:clamp(1.1rem,1.1vw,1.22rem);height:clamp(1.1rem,1.1vw,1.22rem);min-width:clamp(1.1rem,1.1vw,1.22rem);display:inline-grid;place-items:center;border:2px solid var(--outline);border-radius:999px;background:var(--paper);color:var(--ink);overflow:hidden;flex-shrink:0}.project-tag-icon-image{width:78%;height:78%;display:block;object-fit:contain}.project-tag-label{line-height:1}.project-link{margin-top:.15rem;align-self:flex-start;text-decoration:none;color:var(--button-text);background:var(--soft-coral);border:3px solid var(--outline);border-radius:999px;padding:.4rem .85rem;font-weight:700}.project-link:focus-visible{outline:3px solid var(--outline);outline-offset:2px}.typewriter-scene{position:relative;width:clamp(340px,84vw,1580px);margin:0 auto;padding-top:1rem;container-type:inline-size}.machine-wrap{position:relative;z-index:3}.carriage{width:86%;margin:0 auto;height:3.4rem;background:var(--apricot);border:5px solid var(--outline);border-radius:1.6rem;position:relative;display:flex;align-items:center;justify-content:center}.carriage-bar{width:74%;height:.75rem;border-radius:999px;background:var(--paper);border:4px solid var(--outline)}.carriage-knob{position:absolute;top:50%;width:1.6rem;height:1.6rem;margin-top:-.8rem;background:var(--soft-coral);border:4px solid var(--outline);border-radius:.45rem}.carriage-knob-left{left:-.9rem}.carriage-knob-right{right:-.9rem}.machine{margin-top:-.3rem;width:100%;background:var(--soft-coral);border:6px solid var(--outline);border-radius:1.7rem;padding:1.35rem 1rem 1.2rem;position:relative}.machine-top{width:76%;margin:0 auto;height:3rem;border:5px solid var(--outline);border-radius:1.2rem 1.2rem .8rem .8rem;background:var(--apricot)}.machine-panel{width:86%;margin:.65rem auto .8rem;height:2.4rem;border:5px solid var(--outline);border-radius:1rem;background:var(--pale-peach)}.type-hammer{width:31%;margin:0 auto .55rem;height:1.6rem;position:relative}.type-hammer span{display:block;width:100%;height:100%;border:5px solid var(--outline);border-radius:.8rem;background:var(--apricot)}.keyboard{width:min(96%,1520px);margin:.45rem auto 0;display:flex;flex-direction:column;--keyboard-auto-scale: 1;--key-size-base: clamp(1.2rem, 4.9cqw, 5rem);--key-gap-base: clamp(.14rem, .35cqw, .6rem);--key-size: calc(var(--key-size-base) * var(--keyboard-auto-scale));--key-gap: calc(var(--key-gap-base) * var(--keyboard-auto-scale));gap:calc(var(--key-gap) * 1.05)}.key-row{display:flex;justify-content:center;align-items:center;gap:var(--key-gap)}.key-row-2{transform:translate(calc(var(--key-size) * .22))}.key-row-3{transform:translate(calc(var(--key-size) * .08))}.key-row-4{transform:translate(calc(var(--key-size) * .06))}.key-row-space{margin-top:.1rem}.key{display:inline-flex;align-items:center;justify-content:center;min-width:var(--key-size);height:var(--key-size);border-radius:999px;background:var(--paper);border:clamp(2.6px,.2cqw,4.4px) solid var(--outline);color:var(--ink);font-size:clamp(.52rem,.9cqw,1.1rem);font-weight:700;letter-spacing:.01em;line-height:1;transform-origin:center;transition:transform 95ms ease,background-color 95ms ease,box-shadow 95ms ease;box-shadow:inset 0 1px #ffffff73}.key-word{display:block}.key--wide{min-width:calc(var(--key-size) * 2.12);border-radius:1rem;font-size:clamp(.34rem,.52cqw,.74rem);padding-inline:calc(var(--key-size) * .12);text-transform:uppercase}.key--space{width:clamp(240px,76%,1100px);max-width:none;min-width:180px;height:calc(var(--key-size) * .84);border-radius:999px}.print-btn{margin:.95rem auto 0;display:inline-flex;align-items:center;justify-content:center;min-height:clamp(2.2rem,3.2cqw,4.4rem);padding:clamp(.38rem,.7cqw,.85rem) clamp(1rem,2.4cqw,2.45rem);border:clamp(3px,.2cqw,5px) solid var(--outline);border-radius:999px;background:var(--button-accent);color:var(--button-text);font-family:inherit;font-size:clamp(.95rem,1.2cqw,1.65rem);font-weight:700;letter-spacing:.02em;cursor:pointer;transition:transform .14s ease,filter .14s ease}.print-btn:hover{filter:brightness(1.02)}.print-btn:focus-visible{outline:3px solid var(--outline);outline-offset:3px}.print-btn:active{transform:translateY(2px)}.print-btn[disabled]{cursor:default;opacity:.75}.output-slot{width:clamp(180px,58cqw,1040px);margin:1rem auto .05rem;height:clamp(.82rem,1.05cqw,1.5rem);border-radius:999px;background:var(--ink);border:4px solid var(--outline)}.paper-stage{position:relative;z-index:1;width:clamp(340px,66vw,1180px);margin:-.7rem auto 0;aspect-ratio:210 / 297;overflow:hidden}.paper-sheet{width:100%;height:100%;aspect-ratio:210 / 297;background:var(--paper);border:4px solid var(--paper-border);border-radius:.25rem;transform:translateY(calc(-100% + 1.15rem));position:relative;overflow:hidden;box-shadow:0 0 0 1px #e8cec0 inset}.cv-canvas{width:100%;height:100%;display:block;background:var(--paper)}.cv-canvas[hidden]{display:none}.cv-embed{width:100%;height:100%;display:block;border:0;background:var(--paper)}.cv-embed[hidden]{display:none}.paper-overlay{position:absolute;inset:0;display:grid;place-items:center;text-align:center;padding:1rem;font-weight:600;letter-spacing:.01em;color:var(--ink);background:var(--paper)}.paper-error{background:#fdebe4;color:#663c32}.status-text{margin:1.35rem 0 .7rem;font-weight:600}.cv-actions{display:inline-flex;flex-wrap:wrap;gap:.6rem;justify-content:center}.action-btn{text-decoration:none;border:3px solid var(--outline);border-radius:999px;background:var(--apricot);color:var(--button-text);padding:.55rem 1rem;font-weight:700}.action-btn:focus-visible{outline:3px solid var(--outline);outline-offset:2px}.typewriter-scene.is-printing .machine-wrap{animation:machine-jitter .12s steps(2,end) infinite}.typewriter-scene.is-printing .print-btn{animation:press-pulse .28s ease-in-out infinite}.typewriter-scene.is-printing .type-hammer span{animation:hammer-bounce .23s ease-in-out infinite}.typewriter-scene.is-printing .key{will-change:transform}.typewriter-scene.is-printing .paper-sheet{transition:transform 7s linear;transform:translateY(0)}.typewriter-scene.is-done .machine-wrap{animation:none}.typewriter-scene.is-done .print-btn{transform:translateY(2px)}.typewriter-scene.is-done .paper-sheet{transition:transform 7s linear;transform:translateY(0)}.key.is-active{transform:translateY(2.8px) scale(.965);background:#f0d8c8;box-shadow:inset 0 1px #4b342d33}.key--space.is-active{transform:translateY(2.8px) scale(.992)}@keyframes machine-jitter{0%{transform:translate(0)}25%{transform:translate(.7px,.4px)}50%{transform:translate(-.8px,-.4px)}75%{transform:translate(.4px,-.6px)}to{transform:translate(0)}}@keyframes press-pulse{0%,to{transform:translateY(0)}50%{transform:translateY(3px)}}@keyframes hammer-bounce{0%,to{transform:translateY(0)}55%{transform:translateY(2px)}}@keyframes project-screen-dark-boot{0%,16%{opacity:1}28%{opacity:.58}40%{opacity:.92}56%{opacity:.28}72%{opacity:.12}to{opacity:0}}@keyframes project-screen-boot-line{0%{opacity:0;transform:translateY(-50%) scaleX(.14)}18%{opacity:1}58%{opacity:.88;transform:translateY(-50%) scaleX(1)}to{opacity:0;transform:translateY(-50%) scaleX(1)}}@keyframes project-image-boot-in{0%{opacity:0;clip-path:inset(50% 0 50% 0);filter:brightness(0) saturate(.7) contrast(1.25);transform:scale(1.018)}18%{opacity:.18;clip-path:inset(48% 0 48% 0)}34%{opacity:.72;clip-path:inset(18% 0 18% 0);filter:brightness(1.18) saturate(.9) contrast(1.18)}52%{opacity:.92;clip-path:inset(0);filter:brightness(.74) saturate(1.06) contrast(1.3)}72%{opacity:.86;filter:brightness(1.08) saturate(1) contrast(1.1)}to{opacity:1;clip-path:inset(0);filter:none;transform:scale(1)}}@media(max-width:600px){.site-header{padding:.75rem .8rem 0}.site-nav{flex-wrap:wrap;justify-content:center;gap:.7rem}.nav-tabs,.social-links{justify-content:center}.page-shell{padding:1.8rem 1rem 2.3rem}.page-shell--main{padding-top:1rem}.projects-grid{grid-template-columns:1fr}.typewriter-scene{width:97vw}.machine{padding:1rem .7rem}.keyboard{width:100%;gap:.2rem;--key-size-base: 1.25rem;--key-gap-base: .16rem;--keyboard-auto-scale: 1}.key-row{gap:.16rem}.key{min-width:var(--key-size);height:var(--key-size);font-size:.47rem;border-width:2.6px}.key--wide{min-width:calc(var(--key-size) * 1.92);font-size:.36rem}.key--space{min-width:150px;height:calc(var(--key-size) * .92)}.paper-stage{width:min(92vw,560px)}}@media(prefers-reduced-motion:reduce){.project-screen--has-image:before,.project-screen--has-image:after,.project-screen--has-image[data-boot-state=ready]:before,.project-screen--has-image[data-boot-state=ready]:after,.project-screen--has-image[data-boot-state=ready] .project-image{animation:none}.project-screen--has-image:before,.project-screen--has-image:after{opacity:0}.project-screen--has-image .project-image{opacity:1;clip-path:none;filter:none;transform:none}}
