@charset "UTF-8";
:root{font-family:Arial,"Helvetica Neue","Microsoft YaHei",sans-serif;color:#131313;background:#e7e8d6;font-synthesis:none;--edge:22px;--paper:#fff;--muted:#898989}
*{box-sizing:border-box}body{margin:0;padding:var(--edge);height:100svh;min-height:600px}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;border:0;background:none;cursor:pointer}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible,[tabindex]:focus-visible{outline:1px solid currentColor;outline-offset:6px}button:disabled{cursor:default}button:hover,a:hover{opacity:.66}[hidden]{display:none!important}h1,h2,p{margin:0}.site-shell{position:relative;width:100%;height:100%;background:var(--paper);overflow:hidden;transition:background .35s,color .35s}.site-header{position:absolute;inset:26px 26px auto;display:flex;align-items:flex-start;justify-content:space-between;z-index:15}.wordmark{font-size:clamp(25px,2.28vw,42px);font-weight:400;line-height:1;letter-spacing:-1.2px;white-space:nowrap}.site-header nav{display:flex;gap:clamp(24px,3.5vw,68px);align-items:center;padding-top:2px;font-size:12px;line-height:1.4}.site-header nav button{padding:0}.site-header nav a{position:relative}.site-header nav a::after{content:"";position:absolute;left:0;right:0;bottom:-7px;height:1px;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform .25s}.site-header nav a.active::after{transform:scaleX(1)}main{height:100%}.home-view{height:100%;position:relative}.intro{position:absolute;right:26px;top:111px;width:clamp(240px,23vw,345px);font-size:12px;color:#929292;line-height:1.65;letter-spacing:.15px}.gallery{position:absolute;inset:22% 0 17%;perspective:1150px;cursor:grab;touch-action:none;outline-offset:-12px!important;user-select:none}.gallery.dragging{cursor:grabbing}.orbit{position:absolute;inset:0;transform-style:preserve-3d}.project-card{position:absolute;left:50%;top:50%;width:clamp(180px,18vw,310px);aspect-ratio:1;margin-left:clamp(-155px,-9vw,-90px);margin-top:clamp(-155px,-9vw,-90px);transform-style:preserve-3d;will-change:transform;cursor:pointer;padding:0;text-align:left;opacity:var(--orbit-opacity,1)!important}.card-surface{width:100%;height:100%;position:relative;overflow:hidden;background:var(--card-color);backface-visibility:hidden;box-shadow:0 0 0 1px #00000004}.card-art,.cover-canvas{width:100%;height:100%;position:absolute;inset:0;object-fit:cover;display:block}.cover-canvas{opacity:0;pointer-events:none}.project-card.refracting .cover-canvas{opacity:1}.card-no{position:absolute;top:14px;left:14px;font-size:10px;letter-spacing:1px;opacity:.5}.placeholder-line{position:absolute;top:50%;left:50%;width:32px;height:1px;background:currentColor;opacity:.4;transform:translate(-50%,-50%)}.placeholder-line::after{content:"";position:absolute;width:1px;height:32px;top:-16px;left:16px;background:currentColor}.card-label{position:absolute;bottom:13px;left:14px;right:12px;font-size:8px;letter-spacing:.2px;display:flex;justify-content:space-between;gap:6px}.card-label span:last-child{opacity:.6}.project-card[data-index="1"] .card-label{background:#ffffffdd;color:#111;bottom:0;left:0;right:0;padding:11px 12px}.gallery-caption{position:absolute;left:50%;bottom:20%;transform:translateX(-50%);font-size:10px;letter-spacing:.3px;display:flex;gap:16px;white-space:nowrap;color:#757575}.gallery-caption span:first-child{color:#ababab;font-size:9px}.gallery-controls{position:absolute;left:50%;bottom:12.5%;transform:translateX(-50%);display:flex;align-items:center;gap:22px;color:#999;font-size:8px;letter-spacing:.8px;white-space:nowrap}.gallery-controls button{font-size:20px;padding:5px 8px;color:#333}.site-footer{position:absolute;left:26px;right:26px;bottom:23px;display:flex;justify-content:space-between;align-items:flex-end;z-index:15}.about-button{background:#111;color:#fff;padding:13px 12px;width:120px;display:flex;justify-content:space-between;font-size:11px}.about-button span{font-size:12px}.copyright{font-size:10px;color:#bdbdbd}.detail-view{height:100%;position:relative}.project-info{position:absolute;left:4.1%;top:20%;width:23%;bottom:15%;overflow:auto;scrollbar-width:thin;padding-right:18px}.back-link{font-size:9px;color:#999;display:inline-block;margin-bottom:26px}.eyebrow{font-size:9px;letter-spacing:1px;color:#999}.project-heading h1{font-size:clamp(19px,1.7vw,29px);font-weight:400;line-height:1.45;letter-spacing:-.5px;margin-top:12px}.project-info dl{margin:28px 0 0}.project-info dl>div{margin-bottom:23px}.project-info dt{font-size:10px;margin-bottom:9px}.project-info dt span{font-size:8px;letter-spacing:.6px;margin-left:9px;color:#999}.project-info dd{margin:0;font-size:11px;line-height:1.85;color:#858585}.project-info dd.skills{font-size:10px;line-height:1.9}.work-stage{position:absolute;left:29%;right:4.1%;top:20%;height:62%;isolation:isolate}.work-reader{height:100%;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#aaa transparent;background:#f3f3f3;overflow-anchor:none}.work-document{width:100%;line-height:0}.work-segment{position:relative;width:100%;overflow:hidden;background:#f5f5f5}.work-segment img{display:block;width:100%;height:100%;object-fit:fill}.reader-tools{position:absolute;bottom:0;right:0;display:flex;z-index:3;background:#fff;box-shadow:0 0 0 1px #00000008}.reader-tools button{height:46px;min-width:46px;display:flex;justify-content:center;align-items:center;gap:8px;padding:0 13px;font-size:10px;background:#fff}.reader-tools button+button{border-left:1px solid #eee}.reader-tools svg{width:19px;height:19px}.reader-status{position:absolute;left:0;right:0;bottom:-57px;display:flex;justify-content:space-between;color:#aaa;font-size:8px;letter-spacing:.8px}.loading-text{padding:60px 25px;line-height:1.5;font-size:12px;color:#888}.reading-expanded .site-shell{background:#080808;color:#eee}.reading-expanded .project-info{display:none}.reading-expanded .work-stage{left:18px;right:18px;top:77px;height:auto;bottom:57px}.reading-expanded .work-stage::before,.reading-expanded .work-stage::after,.reading-expanded .reader-status{display:none}.reading-expanded .work-reader{background:#080808;scrollbar-color:#666 #080808}.reading-expanded .reader-tools{position:fixed;right:calc(var(--edge) + 30px);bottom:calc(var(--edge) + 70px);opacity:.85}.reading-expanded .reader-tools button{background:#171717;color:#fff}.reading-expanded .reader-tools button+button{border-color:#444}.reading-expanded .copyright{color:#888}.detail-open .about-button{display:none}.reading-expanded .work-segment{background:#fff}.reading-expanded .site-header{top:24px}.reading-expanded .site-footer{bottom:22px}.site-shell:has(.detail-view:not([hidden])) .site-footer{justify-content:flex-end}
dialog{border:0;width:min(560px,calc(100% - 32px));max-height:85svh;overflow:auto;padding:55px 48px 40px;color:#181818;box-shadow:0 20px 100px #0002}dialog::backdrop{background:#0004;backdrop-filter:blur(6px)}dialog h2{font-size:clamp(30px,4vw,48px);font-weight:400;letter-spacing:-1.7px;line-height:1.2;margin:30px 0}dialog p{font-size:12px;line-height:1.9;color:#777;margin:16px 0}.dialog-close{position:absolute;right:18px;top:12px;font-size:26px}.dialog-signature{display:block;margin-top:36px;font-size:13px;letter-spacing:1px}#toast{position:absolute;bottom:90px;left:50%;transform:translate(-50%,8px);background:#111;color:#fff;font-size:11px;padding:13px 22px;pointer-events:none;opacity:0;transition:opacity .2s,transform .2s;z-index:30;white-space:nowrap}#toast.visible{opacity:1;transform:translate(-50%,0)}
@media(min-width:1700px){.intro{top:130px;font-size:13px}.project-info dd{font-size:12px}.project-info dt{font-size:11px}.site-header nav{font-size:13px}.project-info dl>div{margin-bottom:30px}}
@media(max-width:760px){:root{--edge:10px}body{min-height:640px}.site-header{inset:22px 18px auto;gap:15px;flex-wrap:wrap}.wordmark{font-size:27px}.site-header nav{gap:20px;font-size:10px;width:100%;margin-top:10px;justify-content:flex-end}.intro{top:120px;left:18px;right:auto;width:min(300px,80%);font-size:11px}.gallery{inset:29% 0 21%;perspective:800px}.project-card{width:160px;margin-left:-80px;margin-top:-80px}.gallery-caption{bottom:20%;font-size:9px}.gallery-controls{bottom:12%;font-size:7px;gap:10px}.site-footer{left:18px;right:18px;bottom:18px}.copyright{font-size:7px;max-width:190px;text-align:right;line-height:1.5}.about-button{width:95px;font-size:10px;padding:11px 10px}.detail-view{overflow:auto;padding:130px 18px 90px}.project-info{position:relative;left:auto;top:auto;width:100%;bottom:auto;overflow:visible;padding:0}.back-link{margin-bottom:20px}.project-heading h1{font-size:25px}.project-info dl{display:grid;grid-template-columns:1fr 2fr;gap:0 20px;margin-top:20px}.project-info dl>div:nth-child(2){grid-row:span 2}.project-info dl>div{margin-bottom:18px}.project-info dd{font-size:10px}.project-info dd.skills{font-size:9px}.work-stage{position:relative;left:auto;right:auto;top:auto;height:58svh;margin:40px 0 50px}.reader-status{bottom:-36px;font-size:7px}.reader-tools button{height:39px;font-size:9px;padding:0 10px;min-width:39px}.reading-expanded .detail-view{padding:0;overflow:hidden}.reading-expanded .work-stage{position:absolute;top:112px;bottom:50px;left:10px;right:10px;margin:0;height:auto}.reading-expanded .reader-tools{right:25px;bottom:75px}.detail-open .site-footer{background:var(--paper);bottom:0;padding:12px 0;left:18px;right:18px}.reading-expanded .site-footer{background:#080808}.reading-expanded .site-header{top:22px}dialog{padding:48px 28px 30px}}
@media(min-width:761px) and (max-height:820px){.project-info{top:18%;bottom:10%}.back-link{margin-bottom:18px}.project-heading h1{font-size:20px;line-height:1.35;margin-top:9px}.project-info dl{margin-top:22px}.project-info dl>div{margin-bottom:17px}.project-info dd{font-size:10px;line-height:1.7}.project-info dd.skills{font-size:9px;line-height:1.7}.project-info dt{margin-bottom:7px}}
.project-heading h1:focus{outline:none}
@media(max-width:760px){.detail-open:not(.reading-expanded) .site-header::before{content:"";position:absolute;inset:-22px -18px -14px;background:#fff;z-index:-1}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.cover-canvas{display:none}}
