.scene-canvas[data-v-a93cd871]{width:100%;height:100%;display:block;touch-action:pan-y;cursor:grab;filter:saturate(.88) contrast(.95) brightness(.98);transition:filter .7s ease}.scene-canvas.interacting[data-v-a93cd871]{cursor:grabbing;filter:saturate(.94) contrast(.97) brightness(.99)}.scene-area.is-immersive{filter:saturate(.96) contrast(.98) brightness(1)}.tabs[data-v-5d75d60c]{position:relative;z-index:10;display:grid;grid-template-columns:repeat(4,minmax(80px,1fr));width:min(564px,calc(100vw - 32px));padding:6px;border:1px solid var(--line);border-radius:999px;background:#ffffffa3;backdrop-filter:blur(18px) saturate(130%);-webkit-backdrop-filter:blur(18px) saturate(130%);box-shadow:0 16px 42px #26435614}.tab[data-v-5d75d60c]{position:relative;z-index:1;min-width:0;display:flex;flex-direction:column;align-items:center;gap:1px;padding:9px 14px;color:var(--muted);background:transparent;border:0;border-radius:999px;cursor:pointer;transition:transform .18s ease-out,color .18s ease-out,background-color .18s ease-out}.tab[data-v-5d75d60c]:hover{background:color-mix(in srgb,var(--accent) 4%,transparent);transform:translateY(-1px)}.tab.active[data-v-5d75d60c]{color:var(--ink)}.label[data-v-5d75d60c]{font-size:17px;font-weight:700}.en[data-v-5d75d60c]{font-size:10px;letter-spacing:.12em}.indicator[data-v-5d75d60c]{position:absolute;top:6px;left:6px;z-index:0;width:calc((100% - 12px)/4);height:calc(100% - 12px);border:1px solid color-mix(in srgb,var(--accent) 24%,transparent);border-radius:999px;background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 20%,white),#ffffffe6);box-shadow:0 10px 26px color-mix(in srgb,var(--accent) 12%,transparent),inset 0 1px #fffc;transition:transform .52s cubic-bezier(.22,.61,.36,1),background-color .7s ease,border-color .7s ease}@media(max-width:640px){.tabs[data-v-5d75d60c]{width:calc(100vw - 24px);height:56px}.tab[data-v-5d75d60c]{padding:7px 8px}.label[data-v-5d75d60c]{font-size:14px}.en[data-v-5d75d60c]{font-size:8px}}:root{--bg: #f4f7f5;--bg-tint: #f4f8f8;--bg-soft: #edf4f3;--halo: rgba(255, 245, 223, .48);--surface: rgba(255, 255, 255, .64);--surface-strong: rgba(255, 255, 255, .9);--text: #17212b;--muted: #667684;--line: rgba(70, 115, 130, .14);--sea: #6fa8b7;--sand: #d9c5a3;--moss: #8fa69a;--ink: #24384a;--accent: #78aebc;--light: #fff5df;font-family:Inter,Segoe UI,PingFang SC,Microsoft YaHei,system-ui,sans-serif;color:var(--text);background:var(--bg);font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}*{box-sizing:border-box}html,body,#app{width:100%;min-height:100%;margin:0;overflow-x:hidden}html{scroll-behavior:smooth}body{overflow-y:auto;color:var(--text);background:var(--bg)}body.modal-open{overflow:hidden}button,a{font:inherit;color:inherit}.portfolio-shell{position:relative;min-height:100svh;overflow-x:clip;background:radial-gradient(circle at 50% 20%,var(--halo),transparent 34rem),linear-gradient(180deg,var(--bg-tint),var(--bg) 52%,var(--bg-soft));transition:background .8s ease}.noise,.waterline,.gridline{position:fixed;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none}.noise{opacity:.025;background-image:repeating-radial-gradient(circle at 12% 18%,#17212b 0 1px,transparent 1px 4px),repeating-radial-gradient(circle at 78% 36%,#17212b 0 1px,transparent 1px 5px)}.waterline{opacity:.055;background:linear-gradient(105deg,transparent 0%,rgba(255,255,255,.7) 45%,transparent 60%);background-size:220% 100%;animation:tide 14s linear infinite}.gridline{opacity:.03;background-image:linear-gradient(var(--line) 1px,transparent 1px),linear-gradient(90deg,var(--line) 1px,transparent 1px);background-size:44px 44px;transition:opacity .6s ease}.gridline.strong{opacity:.08}.stage-layer{position:relative;z-index:10;height:62svh;min-height:520px;pointer-events:none}.stage-layer.has-immersive{z-index:80}.tab-zone{position:absolute;top:20px;left:50%;z-index:30;transform:translate(-50%);pointer-events:auto}.scene-area{position:absolute;left:50%;top:82px;width:min(1280px,100vw);height:100%;transform:translate(-50%);pointer-events:auto;isolation:isolate;border:0;border-radius:28px;overflow:hidden;background:transparent;box-shadow:none;transition:box-shadow .7s ease,border-radius .42s ease}.scene-area.is-immersive{position:fixed;top:16px;right:16px;bottom:16px;left:16px;z-index:90;width:auto;height:auto;transform:none;border-radius:18px;border:1px solid color-mix(in srgb,var(--accent) 24%,transparent);background:var(--bg-tint);box-shadow:0 30px 110px #182a3747;animation:immersiveIn .42s cubic-bezier(.22,.61,.36,1) both}.scene-blend{position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;z-index:3;pointer-events:none;background:linear-gradient(90deg,var(--bg-tint) 0%,color-mix(in srgb,var(--bg-tint) 82%,transparent) 3%,transparent 13%,transparent 87%,color-mix(in srgb,var(--bg-tint) 82%,transparent) 97%,var(--bg-tint) 100%),linear-gradient(180deg,color-mix(in srgb,var(--bg-tint) 76%,transparent) 0%,transparent 11%,transparent 64%,color-mix(in srgb,var(--bg) 28%,transparent) 78%,var(--bg) 100%);transition:opacity .42s ease}.scene-blend:after{position:absolute;top:0;right:0;bottom:0;left:0;content:"";opacity:0;background:radial-gradient(ellipse at 50% 54%,transparent 34%,color-mix(in srgb,var(--bg-tint) 54%,transparent) 100%),linear-gradient(180deg,color-mix(in srgb,var(--accent) 8%,transparent),color-mix(in srgb,var(--bg-tint) 62%,transparent));animation:chapterMist .92s cubic-bezier(.22,.61,.36,1) both}.scene-area.is-immersive .scene-blend{opacity:0}.render-plaque{position:absolute;left:clamp(24px,5vw,72px);bottom:54px;z-index:6;width:min(340px,calc(100% - 48px));padding:10px 13px 9px 14px;border:1px solid color-mix(in srgb,var(--accent) 16%,transparent);border-left:2px solid color-mix(in srgb,var(--accent) 62%,white);border-radius:4px 12px 12px 4px;color:var(--ink);background:linear-gradient(90deg,#ffffffb3,#ffffff75);box-shadow:0 10px 30px #1936480e;backdrop-filter:blur(14px) saturate(112%);-webkit-backdrop-filter:blur(14px) saturate(112%);transition:border-color .7s ease,background-color .7s ease,transform .26s ease,opacity .26s ease}.scene-area.is-interacting .render-plaque{transform:translateY(-2px)}.plaque-title,.plaque-data,.plaque-stack{display:flex;align-items:center}.plaque-title{gap:7px;color:var(--muted);font-size:9px;letter-spacing:.14em}.plaque-title strong{color:var(--ink);font-size:9px}.plaque-title small{margin-left:auto;color:var(--accent);font-weight:800}.live-dot{width:6px;height:6px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 13%,transparent);animation:livePulse 2.4s ease-in-out infinite}.plaque-data{gap:11px;margin-top:7px;white-space:nowrap;font-size:9px;letter-spacing:.04em}.plaque-data>strong{color:var(--accent);font-size:10px;letter-spacing:.08em}.plaque-data span{color:var(--muted)}.plaque-data b{color:var(--ink);font-size:10px}.plaque-stack{gap:6px;margin-top:7px;padding-top:6px;border-top:1px solid color-mix(in srgb,var(--line) 70%,transparent);color:var(--muted);font-size:8px;letter-spacing:.09em}.plaque-stack i{width:2px;height:2px;border-radius:50%;background:var(--accent)}.plaque-stack small{margin-left:auto;color:var(--muted);font-size:9px;letter-spacing:0}.scene-expand{position:absolute;top:14px;right:14px;z-index:7;min-height:34px;display:inline-flex;align-items:center;gap:7px;padding:0 11px;border:1px solid color-mix(in srgb,var(--accent) 22%,transparent);border-radius:999px;color:var(--ink);background:#ffffff8a;box-shadow:0 8px 24px #1936480b;backdrop-filter:blur(16px) saturate(125%);-webkit-backdrop-filter:blur(16px) saturate(125%);cursor:pointer;opacity:.48;transition:transform .18s ease,border-color .5s ease,background-color .5s ease,opacity .18s ease}.scene-area:hover .scene-expand,.scene-expand:focus-visible,.scene-area.is-immersive .scene-expand{opacity:.92}.scene-expand:hover{transform:translateY(-1px);border-color:color-mix(in srgb,var(--accent) 48%,transparent);background:#ffffffd1}.scene-expand svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.scene-expand span{font-size:11px;font-weight:750}.chapter{position:relative;z-index:12;min-height:70svh;margin-top:0;padding:0 max(24px,calc((100vw - 1180px)/2)) 120px}.chapter-inner{width:min(1180px,100%);margin:0 auto;padding-top:48px}.eyebrow,.section-heading p,.hero-card .eyebrow,.project-card span,.feature-project p,.contact-card>p,.project-modal>p{margin:0 0 12px;color:var(--accent);font-size:12px;font-weight:800;letter-spacing:.14em}.section-heading p{font-size:14px}.hero-card,.soft-card,.metric-card,.feature-project button,.project-card button,.timeline-item,.skill-card,.contact-card,.closing-card{border:1px solid var(--line);border-radius:12px;background:var(--surface);box-shadow:0 18px 48px #26435614;-webkit-backdrop-filter:blur(18px) saturate(130%);backdrop-filter:blur(18px) saturate(130%);transition:transform .22s ease,border-color .5s ease,background-color .5s ease,box-shadow .22s ease}.tech-surface{--pointer-x: 50%;--pointer-y: 50%;position:relative;isolation:isolate;overflow:hidden}.tech-surface:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:4;content:"";pointer-events:none;opacity:0;background:radial-gradient(220px circle at var(--pointer-x) var(--pointer-y),color-mix(in srgb,var(--accent) 14%,white),transparent 68%);mix-blend-mode:soft-light;transition:opacity .26s ease}.tech-surface:hover:after{opacity:.82}button:focus-visible,a:focus-visible{outline:2px solid color-mix(in srgb,var(--accent) 72%,white);outline-offset:3px}.hero-card{width:min(760px,100%);padding:28px}.hero-card h1{margin:0;color:var(--text);font-size:clamp(58px,9vw,120px);line-height:.95;letter-spacing:0}.hero-card strong{display:block;margin-top:14px;color:var(--ink);font-size:18px}.hero-card p:not(.eyebrow){max-width:560px;margin:16px 0 0;color:var(--muted);font-size:19px;line-height:1.7}.tag-row,.metric-row,.contact-actions{display:flex;flex-wrap:wrap;gap:8px}.tag-row{margin-top:20px}.tag-row span,.metric-row small{padding:7px 10px;border:1px solid var(--line);border-radius:999px;color:var(--muted);background:#ffffff80;font-size:12px}.tag-row.compact{margin-top:14px}.intro-grid,.method-row{display:grid;grid-template-columns:1.3fr repeat(3,minmax(0,.7fr));gap:16px;margin-top:72px}.soft-card,.metric-card,.closing-card{padding:24px}.soft-card h2,.section-heading h2,.timeline-item h3,.skill-card h3,.contact-card h3,.project-modal h3{margin:0;color:var(--ink);line-height:1.18;letter-spacing:0}.soft-card p,.timeline-item p,.closing-card p{margin:14px 0 0;color:var(--muted);line-height:1.85}.metric-card span{display:block;color:var(--accent);font-size:42px;font-weight:850;line-height:1}.metric-card p{margin:14px 0 0;color:var(--ink);line-height:1.6}.section-heading{margin-bottom:28px}.section-heading h2{font-size:clamp(34px,5vw,64px)}.featured-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.feature-project button,.project-card button{width:100%;height:100%;padding:0;overflow:hidden;text-align:left;cursor:pointer}.feature-project button:hover,.project-card button:hover,.timeline-item:hover,.skill-card:hover,.soft-card:hover,.metric-card:hover{transform:translateY(-4px);border-color:color-mix(in srgb,var(--accent) 34%,transparent);box-shadow:0 22px 56px #2643561c}.feature-project img,.project-modal img,.modal-placeholder{width:100%;height:210px;object-fit:cover;background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 18%,white),#f7f1e5)}.feature-project img{transition:transform .22s ease}.feature-project button:hover img{transform:scale(1.025)}.project-mark{height:210px;display:grid;place-items:center;color:var(--ink);font-size:52px;font-weight:850;background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 18%,white),#f7f1e5)}.feature-project p,.feature-project h3,.feature-project small{display:block;margin-left:18px;margin-right:18px}.feature-project p{margin-top:18px}.feature-project h3{margin-top:0;margin-bottom:12px;color:var(--ink);font-size:22px;line-height:1.25}.feature-project small{margin-bottom:18px;color:var(--muted);line-height:1.6}.project-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-top:72px}.project-card button{padding:22px}.project-card h3{margin:0 0 12px;color:var(--ink);font-size:22px}.project-card p{display:-webkit-box;margin:0;overflow:hidden;color:var(--muted);line-height:1.75;-webkit-box-orient:vertical;-webkit-line-clamp:3}.metric-row{margin-top:18px}.timeline{position:relative;display:grid;gap:18px}.timeline-item{padding:24px}.timeline-item time{color:var(--accent);font-size:13px;font-weight:850}.timeline-item h3{margin-top:10px}.timeline-item strong{display:block;margin-top:8px;color:var(--text)}.skill-matrix{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-top:72px}.skill-card{padding:24px}.skill-card .tag-row{animation:slowDrift 12s ease-in-out infinite alternate}.echo-grid{display:grid;grid-template-columns:380px minmax(0,1fr);gap:22px;align-items:start}.contact-card{padding:26px;background:#fffaf0b8}.contact-card>a{display:inline-block;margin:12px 0 22px;color:var(--muted);text-decoration:none}.contact-actions{display:grid}.contact-actions button,.contact-actions a,.project-modal>a{min-height:42px;display:flex;align-items:center;justify-content:space-between;padding:0 16px;border:1px solid transparent;border-radius:999px;color:#fff;background:var(--moss);text-decoration:none;cursor:pointer;transition:transform .18s ease,border-color .5s ease}.contact-actions button:hover,.contact-actions a:hover,.project-modal>a:hover{transform:translateY(-1px);border-color:color-mix(in srgb,var(--accent) 42%,transparent)}.gallery{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.photo{position:relative;height:clamp(160px,18vw,220px);overflow:hidden;padding:0;border:1px solid var(--line);border-radius:8px;background:var(--surface);cursor:pointer;transition:transform .22s ease,border-color .22s ease}.photo:hover{transform:translateY(-3px);border-color:color-mix(in srgb,var(--accent) 34%,transparent)}.photo img{width:100%;height:100%;object-fit:cover;transition:transform .22s ease}.photo:hover img{transform:scale(1.025)}.photo span{position:absolute;left:8px;bottom:8px;padding:5px 8px;border-radius:999px;color:var(--ink);background:#ffffffc2;font-size:12px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.closing-card{margin-top:72px}.chapter-enter-active{transition:opacity .52s ease .12s,transform .52s ease .12s}.chapter-leave-active{transition:opacity .22s ease,transform .22s ease}.chapter-enter-from{opacity:0;transform:translateY(18px)}.chapter-leave-to{opacity:0;transform:translateY(12px)}.closing-card small{display:block;margin-top:18px;color:var(--muted);line-height:1.7}.closing-card a{color:var(--ink);text-decoration:none}.loader,.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;display:grid;place-items:center;background:#f4f7f5d6;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px)}.loader{gap:10px;align-content:center;color:var(--ink)}.ring{width:58px;height:58px;border:3px solid color-mix(in srgb,var(--accent) 18%,transparent);border-top-color:var(--accent);border-radius:50%;animation:spin 1s linear infinite}.loader p{margin:14px 0 0;font-weight:700}.loader span{color:var(--muted)}.project-modal,.image-modal{position:relative;width:min(900px,calc(100vw - 32px));max-height:calc(100svh - 48px);overflow:auto;padding:22px;border:1px solid var(--line);border-radius:12px;background:var(--surface-strong);box-shadow:0 24px 80px #2643562e}.project-modal img,.modal-placeholder{height:min(360px,42svh);border-radius:8px}.modal-placeholder{display:grid;place-items:center;color:var(--ink);font-weight:850;letter-spacing:.12em}.project-modal h3{margin:6px 0 10px;color:var(--text);font-size:30px}.project-modal>span{display:block;color:var(--muted);line-height:1.85}.project-modal ul{display:grid;gap:8px;margin:18px 0 0;padding-left:20px;color:var(--ink)}.project-modal>a{display:inline-flex;justify-content:center;margin-top:20px;background:var(--ink)}.image-modal{width:min(460px,calc(100vw - 32px));text-align:center}.image-modal img{width:100%;max-height:68svh;object-fit:contain;border-radius:8px;background:#fff}.image-modal p{margin:12px 0 0;color:var(--ink);font-weight:700}.close{position:absolute;top:12px;right:12px;z-index:1;width:36px;height:36px;border:1px solid var(--line);border-radius:50%;background:#ffffffd1;cursor:pointer}.reveal{opacity:0;transform:translateY(24px);transition:opacity .62s ease,transform .62s ease;transition-delay:calc(var(--stagger, 0) * 80ms)}.reveal.is-visible,.is-visible.reveal{opacity:1;transform:translateY(0)}.loader-fade-leave-active,.modal-enter-active,.modal-leave-active{transition:opacity .3s ease}.loader-fade-leave-to,.modal-enter-from,.modal-leave-to{opacity:0}.modal-enter-active .project-modal,.modal-enter-active .image-modal{animation:modalIn .36s ease both}@keyframes tide{to{background-position:-220% 0}}@keyframes slowDrift{0%{transform:translate(0)}to{transform:translate(8px)}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes modalIn{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@keyframes chapterMist{0%{opacity:0}28%{opacity:.42}to{opacity:0}}@keyframes livePulse{0%,to{opacity:.72;transform:scale(.88)}50%{opacity:1;transform:scale(1)}}@keyframes immersiveIn{0%{opacity:0;transform:scale(.985)}to{opacity:1;transform:scale(1)}}@media(max-width:760px){.stage-layer{height:58svh;min-height:430px}.scene-area{top:64px;width:100vw;height:calc(100% - 24px);border-radius:18px}.scene-area.is-immersive{top:8px;right:8px;bottom:8px;left:8px;width:auto;height:auto;border-radius:12px}.render-plaque{left:20px;bottom:12px;width:min(250px,calc(100% - 24px));padding:8px 10px}.plaque-stack,.plaque-data span:last-child{display:none}.plaque-data{gap:10px}.scene-expand{top:10px;right:10px}.tab-zone{top:10px}.chapter{padding:0 16px 90px}.chapter-inner{padding-top:36px}.hero-card{padding:22px}.hero-card h1{font-size:56px}.intro-grid,.method-row,.featured-grid,.project-grid,.skill-matrix,.echo-grid,.gallery{grid-template-columns:1fr}.intro-grid,.method-row,.project-grid,.skill-matrix,.closing-card{margin-top:42px}.feature-project img,.project-mark{height:180px}.contact-card{padding:22px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important}.reveal{opacity:1;transform:none}.tech-surface:after{display:none}}
