:root{--bg: #0a0a0a;--tile: #1a1a1a;--white: #ffffff;--shadow: #4a4a4a;--accent: #cfcfcf;--body: #e0e0e0;--metal: #666666;--rust: #d2691e;--ease-out: cubic-bezier(.23, 1, .32, 1);--dither: none;--sans: "Inter", system-ui, sans-serif;--blackletter: "Jacquarda Bastarda 9", var(--sans);--mono: "IBM Plex Mono", ui-monospace, monospace}span.bl{font-family:var(--blackletter);font-weight:400;letter-spacing:0}*{box-sizing:border-box}html,body{margin:0;height:100%;overflow:hidden;background:var(--bg);color:var(--white);font-family:var(--sans);-webkit-font-smoothing:antialiased;-webkit-user-select:none;user-select:none;touch-action:none}#app{position:fixed;top:0;right:0;bottom:0;left:0}#app canvas{display:block}.hidden{display:none!important}#boot{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:var(--bg);background-image:var(--dither);image-rendering:pixelated;transition:opacity .5s ease}#boot.gone{opacity:0;pointer-events:none}.boot-mark{font-weight:500;letter-spacing:.02em;font-size:28px;color:var(--white)}.boot-mark .ch{position:relative;display:inline-block;animation:ascii-dim 1.7s linear infinite}.boot-mark .ch:after{content:attr(data-g);position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-weight:500;color:var(--accent);opacity:0;animation:ascii-glyph 1.7s linear infinite}.boot-mark .ch:nth-child(2),.boot-mark .ch:nth-child(2):after{animation-delay:.09s}.boot-mark .ch:nth-child(3),.boot-mark .ch:nth-child(3):after{animation-delay:.18s}.boot-mark .ch:nth-child(4),.boot-mark .ch:nth-child(4):after{animation-delay:.27s}.boot-mark .ch:nth-child(5),.boot-mark .ch:nth-child(5):after{animation-delay:.36s}.boot-mark .ch:nth-child(6),.boot-mark .ch:nth-child(6):after{animation-delay:.45s}.boot-mark .ch:nth-child(7),.boot-mark .ch:nth-child(7):after{animation-delay:.54s}.boot-mark .ch:nth-child(8),.boot-mark .ch:nth-child(8):after{animation-delay:.63s}.boot-mark .ch:nth-child(9),.boot-mark .ch:nth-child(9):after{animation-delay:.72s}.boot-mark .ch:nth-child(10),.boot-mark .ch:nth-child(10):after{animation-delay:.81s}@keyframes ascii-dim{0%,3.9%{opacity:1}4%,12%{opacity:0}12.1%,to{opacity:1}}@keyframes ascii-glyph{0%,3.9%{opacity:0}4%,12%{opacity:1}12.1%,to{opacity:0}}.boot-sub{font-family:var(--mono);font-size:12px;letter-spacing:.35em;color:var(--accent)}#hud{position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;pointer-events:none}.hud-corner{position:absolute;padding:22px 26px}.hud-corner.tl{top:0;left:0}.hud-corner.tr{top:0;right:0;text-align:right}.hud-corner.bl{bottom:0;left:0}.hud-corner.br{bottom:0;right:0}.loc{font-weight:500;font-size:22px;letter-spacing:.02em;color:var(--white)}.sub{margin-top:6px;font-family:var(--mono);font-size:11px;letter-spacing:.3em;color:var(--shadow)}.coord{font-family:var(--mono);font-size:13px;letter-spacing:.22em;color:var(--body)}.disc-corner{display:flex;align-items:center;gap:16px}.disc-box{width:44px;height:44px;display:grid;place-items:center;background:var(--bg);border:1px solid var(--shadow);font-family:var(--mono);font-size:13px;letter-spacing:.08em;color:var(--body)}.disc-box.tick{animation:tick .45s var(--ease-out)}@keyframes tick{0%{transform:scale(1.1);border-color:var(--rust);color:var(--white)}to{transform:scale(1);border-color:var(--shadow);color:var(--body)}}.prompt{position:absolute;left:50%;bottom:96px;transform:translate(-50%);display:flex;align-items:center;gap:12px;padding:10px 16px;background:var(--bg);background-image:var(--dither);image-rendering:pixelated;border:1px solid var(--accent);font-weight:700;letter-spacing:.28em;font-size:13px;color:var(--white);animation:prompt-in .26s var(--ease-out)}@keyframes prompt-in{0%{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%)}}.prompt .chev{color:var(--accent);animation:bob 1s steps(4) infinite}.prompt .key{font-family:var(--mono);font-weight:500;border:1px solid var(--body);padding:2px 8px;color:var(--body);letter-spacing:0}@keyframes bob{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}.btn-info{pointer-events:auto;width:44px;height:44px;background:var(--bg);border:1px solid var(--shadow);color:var(--body);font-family:var(--mono);font-weight:500;font-size:20px;line-height:1;cursor:pointer;transition:border-color .12s,color .12s,background .12s,transform .1s var(--ease-out);-webkit-tap-highlight-color:transparent}.btn-info:hover,.btn-info:active{border-color:var(--accent);color:var(--white);background:var(--tile)}.btn-info:active{transform:scale(.96)}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30}.modal-scrim{position:absolute;top:0;right:0;bottom:0;left:0;background:#0a0a0a8c;background-image:var(--dither);image-rendering:pixelated;opacity:0;transition:opacity .24s var(--ease-out)}.modal.is-open .modal-scrim{opacity:.72}.modal-panel{position:absolute;top:50%;left:50%;width:min(720px,92vw);max-height:84vh;padding:56px 52px 44px;background:#000;overflow-y:auto;will-change:transform;transform:translate(-50%,-48%) scale(.97);opacity:0;transition:transform .24s var(--ease-out),opacity .24s var(--ease-out)}.modal.is-open .modal-panel{transform:translate(-50%,-50%) scale(1);opacity:1}.modal.is-open .modal-tag{animation:rise .35s var(--ease-out) both}.modal.is-open .modal-title{animation:rise .35s var(--ease-out) .05s both}.modal.is-open .modal-body{animation:rise .4s var(--ease-out) .1s both}@keyframes rise{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.modal-panel::-webkit-scrollbar{width:8px}.modal-panel::-webkit-scrollbar-track{background:#000}.modal-panel::-webkit-scrollbar-thumb{background:var(--tile);border:1px solid var(--shadow)}.modal-close{position:absolute;top:24px;right:28px;background:transparent;border:1px solid var(--shadow);color:var(--body);font-family:var(--mono);font-size:11px;letter-spacing:.2em;padding:8px 12px;cursor:pointer;transition:border-color .12s,color .12s,transform .1s var(--ease-out)}.modal-close:hover{border-color:var(--accent);color:var(--white)}.modal-close:active{transform:scale(.96)}.modal-tag{font-family:var(--mono);font-size:11px;letter-spacing:.32em;color:var(--accent);margin-bottom:18px}.modal-title{margin:0 0 28px;font-weight:500;font-size:42px;line-height:1.08;letter-spacing:.01em;color:var(--white)}.modal-body{max-width:65ch}.modal-body p{font-weight:500;font-size:17px;line-height:1.55;color:var(--white);margin:0 0 18px}.about{display:grid;grid-template-columns:minmax(0,200px) minmax(0,1fr);gap:28px;align-items:start}.about-shot{margin:0}.about-shot img{display:block;width:100%;border:1px solid var(--tile)}.about-role{margin:0 0 16px;font-weight:500;font-size:26px;line-height:1.1;letter-spacing:.01em;color:var(--white)}.about-copy p{font-size:16px}.about-copy p:last-child{margin-bottom:0}.social{margin-top:34px}.social-label{display:flex;align-items:center;gap:14px;margin-bottom:16px;font-family:var(--mono);font-size:10px;letter-spacing:.3em;color:var(--shadow)}.social-label:after{content:"";flex:1;border-top:1px solid var(--tile)}.social-row{display:flex;gap:12px}.social-link{width:44px;height:44px;display:grid;place-items:center;background:var(--bg);border:1px solid var(--shadow);transition:border-color .12s,transform .1s var(--ease-out);-webkit-tap-highlight-color:transparent}.social-link:hover,.social-link:focus-visible{border-color:var(--accent);outline:none}.social-link:active{transform:scale(.96)}.social-mark{position:relative;width:20px;height:20px;background:var(--white);-webkit-mask:var(--logo) center / var(--logo-size, 100%) no-repeat;mask:var(--logo) center / var(--logo-size, 100%) no-repeat}.social-mark:before,.social-mark:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;image-rendering:pixelated;opacity:0}.social-mark:before{background:var(--dither-a) repeat 0 0}.social-mark:after{background:var(--dither-b) repeat 0 0}.social-link:hover .social-mark:before,.social-link:focus-visible .social-mark:before{animation:logo-erode .06s steps(1) both}.social-link:hover .social-mark:after,.social-link:focus-visible .social-mark:after{animation:logo-erode .14s steps(1) both,logo-churn .5s steps(1) .14s infinite}@keyframes logo-erode{0%{opacity:0}to{opacity:1}}@keyframes logo-churn{0%{background-position:0 0}25%{background-position:3px 1px}50%{background-position:1px 4px}75%{background-position:5px 2px}to{background-position:0 0}}.meta-list,.entry-list{list-style:none;padding:0;margin:28px 0 0}.meta-list li{display:flex;gap:16px;align-items:baseline;padding:12px 0;border-top:1px solid var(--tile);font-weight:500;font-size:15px;line-height:1.5;color:var(--white)}.meta-list li span{font-family:var(--mono);font-size:11px;letter-spacing:.2em;color:var(--shadow);min-width:84px}.entry-list li{display:flex;gap:18px;align-items:baseline;padding:16px 0;border-top:1px solid var(--tile)}.entry-list .idx{font-family:var(--mono);font-size:13px;color:var(--accent);min-width:24px}.entry-list strong{display:block;font-weight:500;font-size:17px;letter-spacing:.01em;color:var(--white)}.entry-list em{display:block;margin-top:4px;font-style:normal;font-weight:500;font-size:14px;color:var(--body)}.work-grid{display:grid;grid-template-columns:1fr;gap:48px;margin-top:30px}.work-grid figure{margin:0;animation:resolve .4s steps(4) both}.work-grid figure:nth-child(1){animation-delay:.1s}.work-grid figure:nth-child(2){animation-delay:.22s}.work-grid figure:nth-child(3){animation-delay:.34s}.work-grid figure:nth-child(4){animation-delay:.46s}.work-grid figure:nth-child(5){animation-delay:.58s}@keyframes resolve{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.work-grid .num{display:flex;align-items:center;gap:14px;margin-bottom:12px;font-family:var(--mono);font-size:10px;letter-spacing:.3em;color:var(--shadow)}.work-grid .num:after{content:"";flex:1;border-top:1px solid var(--tile)}.shot{position:relative}.shot+.shot{margin-top:14px}.work-grid img,.work-grid video{width:100%;display:block;border:1px solid var(--tile)}.shot canvas.dither-cover{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;image-rendering:pixelated;pointer-events:none}.work-grid figure figcaption,.work-grid figure .num{opacity:.35}.work-grid figcaption{margin-top:16px}.work-grid figcaption strong{display:block;font-weight:500;font-size:26px;line-height:1.1;letter-spacing:.01em;color:var(--white)}.work-grid figcaption em{display:block;margin-top:7px;font-style:normal;font-family:var(--mono);font-size:11px;letter-spacing:.18em;color:var(--body)}.work-deck{--deck-card-w: max(184px, min(252px, 46vw, calc((84vh - 310px) / 1.62)));--deck-card-h: calc(var(--deck-card-w) * 1.375);--deck-ease-settle: var(--ease-out);--deck-ease-glide: var(--ease-out);--deck-focus-ring: 2px solid var(--accent);position:relative;height:calc(var(--deck-card-h) * 1.18);margin:30px 0 6px}.work-deck .deck-face{display:flex;flex-direction:column;padding:18px 20px 20px;background:var(--bg);background-image:var(--dither);image-rendering:pixelated;border:1px solid var(--tile)}.work-deck .deck-slot[data-hero=true] .deck-face{border-color:var(--accent)}.work-deck .deck-slot[data-hero=false] .deck-face>*{opacity:.4}.work-deck .deck-slot[data-hero=false] .deck-turn{visibility:hidden}.work-deck .deck-num{display:flex;align-items:center;gap:12px;margin-bottom:14px;font-family:var(--mono);font-size:13px;letter-spacing:.24em;color:var(--accent)}.work-deck .deck-num:after{content:"";flex:1;border-top:1px solid var(--tile)}.work-deck .shot{aspect-ratio:4 / 3;flex:none;border:1px solid var(--tile);overflow:hidden}.work-deck .shot img{display:block;width:100%;height:100%;object-fit:cover;image-rendering:auto}.work-deck .deck-name{margin:16px 0 0;font-weight:500;font-size:22px;line-height:1.1;letter-spacing:.01em;color:var(--white)}.work-deck .deck-face-back .deck-name{margin-top:0}.work-deck .deck-label{margin-top:20px;font-family:var(--mono);font-size:13px;letter-spacing:.24em;text-transform:uppercase;color:var(--accent)}.work-deck .deck-meta{list-style:none;padding:0;margin:12px 0 0}.work-deck .deck-meta li{padding:9px 0;border-top:1px solid var(--tile);font-weight:500;font-size:16px;line-height:1.3;color:var(--white)}.work-deck .deck-turn{margin-top:auto;padding-top:14px;font-family:var(--mono);font-size:13px;letter-spacing:.2em;text-transform:uppercase;color:var(--body)}.work-deck .deck-turn:after{content:" ▸";color:var(--accent)}.modal-body .deck-hint{margin:0;font-family:var(--mono);font-size:13px;letter-spacing:.2em;text-transform:uppercase;color:var(--accent)}.modal-close{z-index:2}.modal-panel{overflow-x:hidden}@media (prefers-reduced-motion: reduce){.work-grid figure,.prompt,.prompt .chev,.disc-box.tick,.boot-mark .ch,.boot-mark .ch:after,.modal.is-open .modal-tag,.modal.is-open .modal-title,.modal.is-open .modal-body,.controls-modal.is-open .controls-tag,.controls-modal.is-open .controls-title,.controls-modal.is-open .controls-list{animation:none}.social-link:hover .social-mark:before,.social-link:hover .social-mark:after,.social-link:focus-visible .social-mark:before,.social-link:focus-visible .social-mark:after{animation:none;opacity:1}.modal-panel,.modal-scrim,.controls-box,.controls-scrim{transition:none}}.controls-modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:31}.controls-scrim{position:absolute;top:0;right:0;bottom:0;left:0;background:#0a0a0a8c;background-image:var(--dither);image-rendering:pixelated;opacity:0;transition:opacity .24s var(--ease-out)}.controls-modal.is-open .controls-scrim{opacity:.72}.controls-box{position:absolute;top:50%;left:50%;width:min(440px,90vw);padding:48px 44px 40px;background:#000;will-change:transform;transform:translate(-50%,-48%) scale(.97);opacity:0;transition:transform .24s var(--ease-out),opacity .24s var(--ease-out)}.controls-modal.is-open .controls-box{transform:translate(-50%,-50%) scale(1);opacity:1}.controls-modal.is-open .controls-tag{animation:rise .35s var(--ease-out) both}.controls-modal.is-open .controls-title{animation:rise .35s var(--ease-out) .05s both}.controls-modal.is-open .controls-list{animation:rise .4s var(--ease-out) .1s both}.controls-tag{font-family:var(--mono);font-size:11px;letter-spacing:.32em;color:var(--accent);margin-bottom:14px}.controls-title{margin:0 0 26px;font-weight:500;font-size:32px;line-height:1.08;letter-spacing:.01em;color:var(--white)}.controls-list{list-style:none;padding:0;margin:0}.controls-list li{display:flex;gap:18px;align-items:baseline;padding:14px 0;border-top:1px solid var(--tile)}.controls-list li:first-child{border-top:none}.controls-list .keys{font-family:var(--mono);font-weight:500;font-size:13px;letter-spacing:.12em;color:var(--white);border:1px solid var(--body);padding:4px 9px;white-space:nowrap;flex-shrink:0;min-width:96px;text-align:center}.controls-list em{font-style:normal;font-weight:500;font-size:14px;line-height:1.4;color:var(--body)}@media (max-width: 720px){.modal-panel{width:94vw;padding:44px 24px 32px}.modal-title{font-size:32px}.about{grid-template-columns:1fr;gap:20px}.about-shot{max-width:200px}.about-role{font-size:22px}.work-grid figcaption strong{font-size:21px}.hud-corner{padding:16px 18px}.loc{font-size:16px}.controls-box{padding:44px 26px 32px}.controls-title{font-size:26px}.work-deck{--deck-fan-spread: .35}.work-deck .deck-face{padding:16px 16px 18px}.work-deck .deck-name{font-size:19px}}@media (max-height: 520px){.work-deck{--deck-fan-spread: .3;height:calc(var(--deck-card-h) * 1.1);margin:20px 0 4px}.work-deck .deck-face{padding:14px 16px 16px}.work-deck .deck-num{margin-bottom:10px}.work-deck .deck-name{margin-top:12px;font-size:18px}.work-deck .deck-meta li{padding:7px 0}}:root{--deck-card-w: 272px;--deck-card-h: 374px;--deck-perspective: calc(var(--deck-card-w) * 7);--deck-fan-spread: 1;--deck-flip-dur: .7s;--deck-deal-dur: .62s;--deck-throw-dur: .38s;--deck-settle-dur: .52s;--deck-float-dur: 2009ms;--deck-float-lift: -14px;--deck-float-stagger: 60ms;--deck-ease-flip: cubic-bezier(.65, 0, .35, 1);--deck-ease-glide: cubic-bezier(.32, .72, 0, 1);--deck-ease-throw: cubic-bezier(.25, .6, .4, 1);--deck-ease-settle: cubic-bezier(.22, 1, .36, 1);--deck-focus-ring: 2px solid currentColor;--deck-focus-offset: 3px}.deck-root{position:relative;width:100%;height:100%;isolation:isolate}.deck-slot{position:absolute;left:50%;top:50%;width:var(--deck-card-w);height:var(--deck-card-h);margin-left:calc(var(--deck-card-w) / -2);margin-top:calc(var(--deck-card-h) / -2);transform:translate(var(--slot-x, 0px),var(--slot-y, 0px)) rotate(var(--slot-rot, 0deg)) scale(var(--slot-scale, 1));transition:transform var(--deck-deal-dur) var(--deck-ease-glide);pointer-events:none;user-select:none;-webkit-user-select:none}.deck-slot.is-flipping{transition:transform var(--deck-flip-dur) var(--deck-ease-flip)}.deck-slot[data-instant=true]{transition:none}.deck-slot[data-instant=true] .deck-flip,.deck-slot[data-instant=true] .deck-float{transition:none;animation:none}.deck-slot[data-hero=true]{pointer-events:auto;cursor:grab}.deck-slot[data-hero=true].is-dragging{cursor:grabbing}.deck-root[data-axis=x] .deck-slot[data-hero=true]{touch-action:pan-y}.deck-root[data-axis=y] .deck-slot[data-hero=true]{touch-action:pan-x}.deck-root[data-axis=both] .deck-slot[data-hero=true]{touch-action:none}.deck-slot:focus{outline:none}.deck-slot:focus-visible .deck-face{outline:var(--deck-focus-ring);outline-offset:var(--deck-focus-offset)}.deck-float{width:100%;height:100%;animation:deck-float var(--deck-float-dur) ease-in-out infinite alternate;animation-delay:var(--slot-float-delay, 0ms);transition:transform var(--deck-flip-dur) var(--deck-ease-flip)}.deck-slot[data-flipped=true] .deck-float{animation:none;transform:translateY(0)}@keyframes deck-float{0%{transform:translateY(0)}55%{transform:translateY(var(--deck-float-lift))}to{transform:translateY(calc(var(--deck-float-lift) * .067))}}.deck-drag{width:100%;height:100%;perspective:var(--deck-perspective)}.deck-slot.is-dragging .deck-drag,.deck-slot.is-busy .deck-drag{will-change:transform}.deck-flip{position:relative;width:100%;height:100%;transform-style:preserve-3d;transform:rotateY(var(--deck-flip-angle, 0deg));transition:transform var(--deck-flip-dur) var(--deck-ease-flip)}.deck-slot[data-flipped=true] .deck-flip{--deck-flip-angle: 180deg}.deck-face{position:absolute;top:0;right:0;bottom:0;left:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;-webkit-user-drag:none}.deck-face-back{transform:rotateY(180deg)}.deck-face img,.deck-face canvas,.deck-face video{-webkit-user-drag:none;-webkit-user-select:none;user-select:none}@media (prefers-reduced-motion: reduce){.deck-float{animation:none}.deck-slot,.deck-float,.deck-flip,.deck-drag{transition-duration:1ms}}
