@import url('https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Noto+Serif+SC:wght@400;500;600&display=swap');

:root{--ink:#111111;--paper:#ece8e1;--line:rgba(236,232,225,.34);--muted:rgba(236,232,225,.68)}
.topic-cover{background:url('assets/hero.webp') center/cover no-repeat}
*{box-sizing:border-box} html{scroll-behavior:smooth;scrollbar-width:none} html::-webkit-scrollbar{width:0;height:0} body{margin:0;background:var(--ink);color:var(--paper);font-family:"Noto Serif SC",serif}.site-header{height:84px;position:fixed;inset:0 0 auto;z-index:10;padding:0 4vw;display:flex;align-items:center;justify-content:space-between;mix-blend-mode:normal;background:linear-gradient(#111b,transparent);transition:background .25s}.site-header.solid{background:#111}.logo{color:var(--paper);text-decoration:none;letter-spacing:.13em;font:500 20px "DM Mono",monospace}.logo span{font-size:9px;vertical-align:top;margin-left:2px}nav{display:flex;gap:28px}nav a{font:12px "DM Mono",monospace;text-decoration:none;color:var(--muted);transition:color .2s}nav a:hover,nav a.active{color:var(--paper)}.menu-toggle{display:none}.page{display:none;min-height:100svh}.page.active{display:block}.home-page{position:relative;overflow:hidden}.hero-photo{height:100svh;filter:brightness(.66)}.photo{background-image:url('assets/portfolio-contact-sheet.png');background-size:300% 200%;background-repeat:no-repeat}.lake{background-position:0 0}.coast{background-position:50% 0}.road{background-position:100% 0}.camera{background-position:0 100%}.negative{background-position:50% 100%}.portrait{background-position:100% 100%}.hero-copy{position:absolute;left:8vw;bottom:12vh}.eyebrow{font:11px "DM Mono",monospace;letter-spacing:.09em;margin:0 0 21px;color:var(--muted)}h1,h2{font-weight:400;letter-spacing:-.045em;line-height:1.17;margin:0}h1{font-size:clamp(43px,6.1vw,88px)}h2{font-size:clamp(38px,5vw,70px)}.text-link{display:inline-flex;gap:25px;color:var(--paper);text-decoration:none;margin-top:42px;border-bottom:1px solid var(--paper);padding-bottom:8px;font:12px "DM Mono",monospace}.text-link b,.category b,.contact-email b,button b{font-size:18px;font-weight:400;line-height:.7}.hero-index{position:absolute;right:4vw;bottom:6vh;font:11px "DM Mono",monospace;color:var(--muted)}
.work-page,.about-page,.contact-page{padding:150px 8vw 70px}.page-intro{max-width:600px}.page-intro>p:last-child{color:var(--muted);font-size:16px;margin:24px 0 58px}.category-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.category{height:50vw;max-height:540px;position:relative;overflow:hidden;color:var(--paper);text-decoration:none}.category .photo{display:block;width:100%;height:100%;filter:brightness(.75);transition:transform .7s ease,filter .5s}.category:hover .photo{transform:scale(1.035);filter:brightness(.55)}.category-label{position:absolute;inset:auto 24px 19px;display:flex;justify-content:space-between;align-items:end;font:14px "DM Mono",monospace}.gallery-panel{display:none;margin-top:58px}.gallery-panel.active{display:block}.gallery-heading{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:15px;border-bottom:1px solid var(--line);padding-bottom:14px}.gallery-heading p{margin:0;font-size:21px}.gallery-heading span{font-size:13px;color:var(--muted)}.gallery-grid{display:grid;grid-template-columns:1.1fr .9fr 1.2fr;gap:12px}.gallery-grid .photo{aspect-ratio:1/1.08}.gallery-grid .road{background-position:100% 0}
.about-page{display:none;align-items:center}.about-page.active{display:flex;justify-content:center;min-height:100svh}.contact-page{position:relative;display:none;grid-template-columns:1.25fr .75fr;gap:9vw;align-items:center}.contact-page.active{display:grid}.contact-email{display:inline-flex;align-items:center;gap:26px;color:var(--paper);font:clamp(18px,2vw,29px) "DM Mono",monospace;text-decoration:none;border-bottom:1px solid var(--paper);padding:0 0 9px;margin-top:42px}form{display:grid;gap:24px}label{font:11px "DM Mono",monospace;color:var(--muted)}input,textarea{width:100%;display:block;background:transparent;border:0;border-bottom:1px solid var(--line);border-radius:0;color:var(--paper);padding:10px 0;font:15px "Noto Serif SC",serif;outline:none;resize:none}input:focus,textarea:focus{border-color:var(--paper)}input::placeholder,textarea::placeholder{color:#99948d}button{justify-self:start;background:var(--paper);color:var(--ink);border:0;padding:15px 18px;font:12px "DM Mono",monospace;cursor:pointer}.form-note{min-height:19px;margin:0;font-size:12px;color:var(--muted)}footer{position:absolute;bottom:31px;left:8vw;right:8vw;display:flex;justify-content:space-between;font:10px "DM Mono",monospace;color:var(--muted)}
/* Personal image archive */
.category{height:31vw;max-height:390px}.category img{display:block;width:100%;height:100%;object-fit:cover;filter:brightness(.75);transition:transform .7s ease,filter .5s}.category:hover img{transform:scale(1.035);filter:brightness(.55)}.gallery-grid{display:block;columns:3;column-gap:12px}.gallery-grid img{width:100%;height:auto;display:block;margin:0 0 12px;break-inside:avoid;background:var(--ink);cursor:zoom-in}.gallery-image{opacity:0;animation:photo-in .46s ease-out var(--delay) both}.gallery-grid img{transition:filter .35s ease}.gallery-grid img:hover{filter:brightness(.82)}.page{transform-origin:center top}.gallery-panel.active{animation:panel-in .55s cubic-bezier(.22,1,.36,1) both}@keyframes photo-in{to{opacity:1}}@keyframes panel-in{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}
#lightbox{margin:auto;padding:0;border:0;background:transparent;max-width:min(94vw,1400px);max-height:92vh;overflow:visible}#lightbox::backdrop{background:rgba(0,0,0,.9);backdrop-filter:blur(8px)}#lightbox-image{display:block;max-width:94vw;max-height:88vh;width:auto;height:auto;object-fit:contain;cursor:grab;user-select:none;transform:translate3d(var(--pan-x,0px),var(--pan-y,0px),0) scale(var(--zoom,1));backface-visibility:hidden;will-change:transform}.lightbox-image-dragging{cursor:grabbing}.lightbox-close{position:absolute;right:-2px;top:-42px;border:0;background:transparent;color:var(--paper);font:34px/1 Arial,sans-serif;cursor:pointer;padding:0 4px}.lightbox-zoom{position:absolute;left:0;top:-39px;display:flex;gap:8px}.lightbox-zoom button{padding:3px 10px;background:transparent;border:1px solid var(--line);color:var(--paper);font:22px/1 Arial,sans-serif}
@media(max-width:700px){.site-header{height:68px;padding:0 6vw}nav{position:absolute;top:68px;left:0;right:0;background:var(--ink);padding:24px 6vw;display:none;flex-direction:column;gap:20px}.site-header.open nav{display:flex}.menu-toggle{display:grid;gap:5px;background:transparent;border:0;padding:8px;cursor:pointer}.menu-toggle i{height:1px;width:20px;background:var(--paper);display:block}.hero-copy{left:6vw;right:6vw;bottom:14vh}.work-page,.about-page,.contact-page{padding:116px 6vw 95px}.category-grid{grid-template-columns:1fr}.category{height:70vw}.gallery-heading{display:block}.gallery-heading span{display:block;margin-top:6px}.gallery-grid{columns:2;column-gap:10px}.gallery-grid img{margin-bottom:10px}.about-page.active,.contact-page.active{display:block}.about-portrait{width:100%;max-height:none;margin-bottom:46px}.facts{gap:18px;flex-wrap:wrap}.contact-page>div{margin-bottom:58px}footer{left:6vw;right:6vw;font-size:8px}.hero-index{right:6vw}}

/* 交互按钮：桌面端悬浮时使用红色强调 */
button{transition:background-color .24s ease,color .24s ease,border-color .24s ease,transform .24s ease}
button:hover{background:#7fc9ed;color:var(--ink);transform:translateY(-1px)}
.lightbox-close:hover{background:transparent;color:#a9ddf5;transform:none}
.lightbox-zoom button:hover{background:#7fc9ed;border-color:#7fc9ed;color:var(--ink);transform:none}
.menu-toggle:hover{background:transparent;transform:none}.menu-toggle:hover i{background:#a9ddf5}

/* SpecularButton：适配静态网站的轻量光泽边缘效果 */
.specular-button{--specular-x:50%;--specular-y:50%;--specular-angle:220deg;position:relative;isolation:isolate;overflow:hidden;border:1px solid rgba(255,255,255,.28);border-radius:18px;background:linear-gradient(135deg,rgba(67,67,67,.88),rgba(21,21,21,.94))!important;color:var(--paper)!important;box-shadow:inset 0 1px 0 rgba(255,255,255,.12),0 8px 24px rgba(0,0,0,.28);transition:transform .18s ease,background .28s ease,box-shadow .28s ease}
.specular-button::before{content:"";position:absolute;inset:0;z-index:-1;background:radial-gradient(170px circle at var(--specular-x) var(--specular-y),rgba(169,221,245,.56),rgba(127,201,237,.22) 30%,transparent 68%);opacity:.12;transition:opacity .25s ease}
.specular-button::after{content:"";position:absolute;inset:0;border:1px solid transparent;border-radius:inherit;background:conic-gradient(from var(--specular-angle),transparent 0deg,transparent 33deg,rgba(255,255,255,.08) 53deg,#7fc9ed 74deg,rgba(255,255,255,.92) 84deg,#7fc9ed 94deg,rgba(255,255,255,.08) 115deg,transparent 135deg,transparent 360deg) border-box;mask:linear-gradient(#000 0 0) padding-box,linear-gradient(#000 0 0);mask-composite:exclude;-webkit-mask:linear-gradient(#000 0 0) padding-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;pointer-events:none;opacity:.42;transition:opacity .25s ease}
.specular-button:hover{background:linear-gradient(135deg,#5db4df,#276d91)!important;color:var(--paper)!important;box-shadow:inset 0 1px 0 rgba(255,255,255,.22),0 10px 28px rgba(127,201,237,.28);transform:translateY(-1px)}
.specular-button:hover::before,.specular-button:hover::after{opacity:1}.specular-button:active{transform:scale(.97)}.specular-button:focus-visible{outline:2px solid #a9ddf5;outline-offset:3px}
.lightbox-zoom .specular-button{padding:3px 10px;border-color:rgba(255,255,255,.34);font:22px/1 Arial,sans-serif}.lightbox-zoom .specular-button:hover{border-color:rgba(255,255,255,.65);transform:none}

/* Specular 样式扩展到导航、文字入口和作品分类卡片 */
nav a,.logo,.text-link,.contact-email,.category{--specular-x:50%;--specular-y:50%;--specular-angle:220deg;position:relative;isolation:isolate}
nav a,.logo,.text-link,.contact-email{overflow:hidden;border:1px solid transparent;border-radius:10px;transition:color .22s ease,background .22s ease,border-color .22s ease,transform .22s ease}
nav a::before,.logo::before,.text-link::before,.contact-email::before{content:"";position:absolute;inset:0;z-index:-1;border-radius:inherit;background:radial-gradient(110px circle at var(--specular-x) var(--specular-y),rgba(169,221,245,.3),transparent 68%);opacity:0;transition:opacity .24s ease}
nav a::after,.logo::after,.text-link::after,.contact-email::after,.category::after{content:"";position:absolute;inset:0;border:1px solid transparent;border-radius:inherit;background:conic-gradient(from var(--specular-angle),transparent 0deg,transparent 38deg,rgba(255,255,255,.08) 54deg,#7fc9ed 74deg,rgba(255,255,255,.88) 84deg,#7fc9ed 94deg,rgba(255,255,255,.08) 112deg,transparent 132deg,transparent 360deg) border-box;mask:linear-gradient(#000 0 0) padding-box,linear-gradient(#000 0 0);mask-composite:exclude;-webkit-mask:linear-gradient(#000 0 0) padding-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;pointer-events:none;opacity:0;transition:opacity .24s ease}
nav a:hover,nav a.active,.logo:hover,.text-link:hover,.contact-email:hover{color:var(--paper);border-color:rgba(169,221,245,.4);background:rgba(127,201,237,.16);transform:translateY(-1px)}
nav a:hover::before,.logo:hover::before,.text-link:hover::before,.contact-email:hover::before,nav a:hover::after,nav a.active::after,.logo:hover::after,.text-link:hover::after,.contact-email:hover::after{opacity:1}
nav a{padding:7px 9px;margin:-7px -9px}.logo{padding:6px 8px;margin:-6px -8px}.text-link{padding:9px 12px;margin-left:-12px;border-bottom:0}.contact-email{padding:9px 12px;margin-left:-12px;border-bottom:0}
.category{border:1px solid transparent;border-radius:2px;transition:border-color .25s ease,box-shadow .25s ease}.category:hover{border-color:rgba(169,221,245,.68);box-shadow:0 0 26px rgba(127,201,237,.22)}.category:hover::after{opacity:1}.category .category-label{z-index:2}

/* 作品页、关于页和联系页沿用首页封面，增加深色遮罩以保证可读性 */
.work-page,.about-page,.contact-page{background:linear-gradient(rgba(10,10,10,.83),rgba(10,10,10,.9)),url('assets/hero.webp') center/cover fixed no-repeat;background-color:var(--ink)}
@media(max-width:700px){.work-page,.about-page,.contact-page{background-attachment:scroll}}

/* 创意实验：来自黑白胶卷的 OrbitImages 静态适配 */
.experiment-page{position:relative;padding:150px 8vw 70px;overflow:hidden;background:linear-gradient(rgba(10,10,10,.8),rgba(10,10,10,.93)),url('assets/hero.webp') center/cover fixed no-repeat}.experiment-intro{position:relative;z-index:2;max-width:520px}.experiment-intro>p:last-child{color:var(--muted);font-size:16px;margin:24px 0 0}.orbit-stage{position:relative;height:min(57vw,690px);min-height:490px;margin:12px auto 0;max-width:1280px}.orbit-stage::before{content:"";position:absolute;left:50%;top:50%;width:min(68vw,890px);height:min(20vw,230px);border:1px solid rgba(169,221,245,.18);border-radius:50%;transform:translate(-50%,-50%) rotate(-8deg);box-shadow:0 0 40px rgba(127,201,237,.07)}.orbit-track{position:absolute;inset:0;transform:rotate(-8deg);animation:orbit-rotation 30s linear infinite;will-change:transform}.orbit-item{--orbit-angle:calc(var(--orbit-index) * 45deg);position:absolute;left:50%;top:50%;width:clamp(74px,9vw,132px);aspect-ratio:1;margin:0;transform:translate(-50%,-50%) rotate(var(--orbit-angle)) translateX(min(32vw,420px)) rotate(calc(-1 * var(--orbit-angle)));filter:drop-shadow(0 15px 18px rgba(0,0,0,.42))}.orbit-item img{display:block;width:100%;height:100%;object-fit:cover;filter:grayscale(1) contrast(1.08);border:1px solid rgba(236,232,225,.38);box-shadow:inset 0 0 0 1px rgba(0,0,0,.22)}.orbit-center{position:absolute;inset:0;display:grid;place-content:center;text-align:center;pointer-events:none}.orbit-center>span{font:clamp(46px,6vw,84px)/.9 "DM Mono",monospace;letter-spacing:-.08em;color:rgba(236,232,225,.9)}.orbit-center small{margin-top:12px;font:10px "DM Mono",monospace;letter-spacing:.2em;color:var(--muted)}@keyframes orbit-rotation{to{transform:rotate(352deg)}}
@media(max-width:700px){.experiment-page{padding:116px 6vw 80px;background-attachment:scroll}.orbit-stage{height:105vw;min-height:410px;margin-top:24px}.orbit-stage::before{width:92vw;height:32vw}.orbit-item{width:clamp(58px,18vw,88px);transform:translate(-50%,-50%) rotate(var(--orbit-angle)) translateX(35vw) rotate(calc(-1 * var(--orbit-angle)))}}
@media(prefers-reduced-motion:reduce){.orbit-track{animation:none}}

/* 轨道位置由脚本计算，图片本身始终正面朝向浏览者 */
.orbit-track{transform:none;animation:none}.orbit-item{transform:translate(-50%,-50%);transition:filter .28s ease;cursor:default}.orbit-item img{transition:transform .32s cubic-bezier(.22,1,.36,1),border-color .28s ease,box-shadow .28s ease;transform-origin:center}.orbit-item:hover{z-index:3;filter:drop-shadow(0 20px 22px rgba(0,0,0,.58))}.orbit-item:hover img{transform:scale(1.22);border-color:#a9ddf5;box-shadow:0 0 24px rgba(127,201,237,.38)}
.orbit-item img.is-swapping{opacity:0;transform:scale(.9);transition:opacity .26s ease,transform .26s ease}
.orbit-countdown{position:static;margin:15px 0 0;font:10px "DM Mono",monospace;letter-spacing:.08em;color:rgba(169,221,245,.88)}.orbit-countdown i{display:inline-block;width:5px;height:5px;margin:0 7px 1px 0;border-radius:50%;background:#a9ddf5;box-shadow:0 0 10px #a9ddf5;animation:countdown-pulse 1.5s ease-in-out infinite}@keyframes countdown-pulse{50%{opacity:.38;transform:scale(.72)}}
.orbit-countdown span{font:inherit;letter-spacing:inherit;color:inherit}

/* 创意实验：DomeGallery 的无依赖静态实现 */
.dome-gallery{--dome-radius:min(38vw,480px);position:relative;height:min(62vw,720px);min-height:510px;margin:5px auto 0;max-width:1300px;overflow:hidden;perspective:calc(var(--dome-radius) * 2);perspective-origin:50% 48%;touch-action:none;user-select:none;cursor:grab}.dome-gallery:active{cursor:grabbing}.dome-gallery::before,.dome-gallery::after{content:"";position:absolute;inset:0;z-index:3;pointer-events:none}.dome-gallery::before{background:radial-gradient(ellipse at 50% 48%,transparent 33%,rgba(10,10,10,.13) 56%,rgba(10,10,10,.94) 100%)}.dome-gallery::after{background:linear-gradient(var(--ink),transparent 17%,transparent 80%,var(--ink))}.dome-sphere{position:absolute;inset:50% auto auto 50%;width:0;height:0;transform-style:preserve-3d;will-change:transform}.dome-tile{position:absolute;top:50%;left:50%;width:clamp(48px,5.7vw,82px);height:clamp(64px,7.5vw,112px);padding:0;border:3px solid var(--ink);border-radius:10px;background:var(--ink);overflow:hidden;backface-visibility:hidden;cursor:pointer;transform-style:preserve-3d;transform:translate(-50%,-50%) rotateY(calc(var(--dome-x) * 14deg)) rotateX(calc(var(--dome-y) * -15deg)) translateZ(var(--dome-radius));transition:border-color .22s ease,box-shadow .22s ease,filter .22s ease}.dome-tile img{display:block;width:100%;height:100%;object-fit:cover;filter:grayscale(1) contrast(1.08);pointer-events:none}.dome-tile:hover,.dome-tile:focus-visible{z-index:2;border-color:#a9ddf5;box-shadow:0 0 24px rgba(127,201,237,.48);filter:brightness(1.12);outline:0}.dome-hint{position:absolute;z-index:4;left:50%;bottom:5.5%;margin:0;transform:translateX(-50%);font:10px "DM Mono",monospace;letter-spacing:.15em;color:rgba(169,221,245,.82);white-space:nowrap;pointer-events:none}
.dome-gallery::before,.dome-gallery::after{display:none}
.experiment-page,.dome-gallery,.orbit-stage{background-color:transparent}.dome-tile img{filter:none;transition:transform .32s cubic-bezier(.22,1,.36,1),filter .22s ease}.dome-tile:hover img,.dome-tile:focus-visible img{transform:scale(1.14)}
.experiment-page{background:url('assets/hero.webp') center/cover fixed no-repeat;background-color:var(--ink)}.experiment-page .experiment-intro{padding:18px 20px 20px;margin-left:-20px;text-shadow:0 2px 20px rgba(0,0,0,.72)}
@media(max-width:700px){.experiment-page{background-attachment:scroll}}

/* 大图切换时先隐藏旧图，待新图加载完成后再显示 */
#lightbox-image{will-change:transform,opacity;transition:opacity .18s ease}

/* 创意实验恢复为原始的轨道展示背景 */
.experiment-page{background:linear-gradient(rgba(10,10,10,.8),rgba(10,10,10,.93)),url('assets/hero.webp') center/cover fixed no-repeat;background-color:var(--ink)}.experiment-page .experiment-intro{padding:0;margin-left:0;text-shadow:none}
@media(max-width:700px){.experiment-page{background-attachment:scroll}}

/* DomeGallery 原始网格结构：35 列交错排布到同一球面 */
.dome-gallery{--dome-radius:520px;--dome-item-width:47px;--dome-item-height:47px;position:relative;overflow:hidden;perspective:calc(var(--dome-radius) * 2);perspective-origin:50% 50%;touch-action:none;user-select:none;background:#0c0b11}.dome-sphere,.dome-item,.dome-tile{transform-style:preserve-3d}.dome-sphere{position:absolute;top:50%;left:50%;width:0;height:0;will-change:transform}.dome-item{position:absolute;top:-999px;right:-999px;bottom:-999px;left:-999px;width:calc(var(--dome-item-width) * 2);height:calc(var(--dome-item-height) * 2);margin:auto;transform-origin:50% 50%;backface-visibility:hidden;transition:transform .3s}.dome-tile{position:absolute;inset:7px;width:auto!important;height:auto!important;padding:0;border:0!important;border-radius:30px!important;background:transparent!important;overflow:hidden;backface-visibility:hidden;cursor:pointer;transform:translateZ(0)!important;transition:box-shadow .3s ease,filter .3s ease!important}.dome-tile img{width:100%;height:100%;object-fit:cover;filter:none!important;transition:transform .3s ease}.dome-tile:hover,.dome-tile:focus-visible{box-shadow:0 0 0 1px #a9ddf5,0 0 24px rgba(127,201,237,.4);filter:brightness(1.06);outline:0}.dome-tile:hover img,.dome-tile:focus-visible img{transform:scale(1.08)}
@media(max-width:700px){.dome-tile{inset:4px;border-radius:16px!important}}

/* 穹顶延展到视口两侧 */
.dome-gallery{width:100vw;max-width:none;height:min(68vw,780px);min-height:560px;margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw)}
@media(max-width:700px){.dome-gallery{height:120vw;min-height:480px}}

/* 参考影像穹顶：深色画布、圆角照片与边缘暗角 */
.dome-gallery{--dome-radius:min(43vw,550px);height:min(64vw,750px);min-height:540px;background:#0c0b11;border:1px solid rgba(236,232,225,.16);box-shadow:inset 0 0 0 1px rgba(255,255,255,.025),0 28px 60px rgba(0,0,0,.25)}
.dome-gallery::before,.dome-gallery::after{display:block}.dome-gallery::before{background:radial-gradient(ellipse at 50% 43%,transparent 30%,rgba(12,11,17,.1) 55%,rgba(12,11,17,.98) 100%)}.dome-gallery::after{background:linear-gradient(#0c0b11,transparent 16%,transparent 72%,#0c0b11)}
.dome-tile{width:clamp(80px,9vw,138px);height:clamp(102px,11vw,164px);border:5px solid #0c0b11;border-radius:25px;background:#0c0b11}.dome-tile:hover,.dome-tile:focus-visible{border-color:#a9ddf5}.dome-hint{bottom:3.5%;z-index:5}
@media(max-width:700px){.dome-gallery{--dome-radius:78vw;height:118vw;min-height:470px}.dome-tile{width:16vw;height:21vw;border-width:3px;border-radius:16px}.dome-hint{bottom:3%;font-size:7px}}
@media(max-width:700px){.dome-gallery{--dome-radius:78vw;height:112vw;min-height:460px;margin-top:18px;perspective:calc(var(--dome-radius) * 1.55)}.dome-tile{width:12vw;height:16vw;border-width:3px;border-radius:9px}.dome-hint{bottom:4%;font-size:8px;letter-spacing:.1em}}

/* SplitText：主标题逐字向上显现 */
.split-title{overflow:hidden}.split-title .split-char{display:inline-block;opacity:0;transform:translate3d(0,.7em,0);will-change:transform,opacity}.split-title.is-split-visible .split-char{animation:split-title-in .78s cubic-bezier(.22,1,.36,1) forwards;animation-delay:calc(100ms + var(--char-index) * 58ms)}@keyframes split-title-in{to{opacity:1;transform:translate3d(0,0,0)}}
@media(prefers-reduced-motion:reduce){.split-title .split-char{opacity:1;transform:none}.split-title.is-split-visible .split-char{animation:none}}

/* 关于页彩蛋：标题本身保持原样，但可以点击 */
.about-copy{position:relative}.about-secret{cursor:pointer;outline:0}.about-secret:focus-visible{outline:1px solid rgba(169,221,245,.8);outline-offset:8px}

/* 页面切换：仅让新页面柔和进入，避免内容残留在透明状态 */
.page{will-change:opacity,transform}.page.active{animation:page-in .56s cubic-bezier(.22,1,.36,1) both}@keyframes page-in{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}

/* 岩迹：嵌入作品集的攀岩实验 */
.climb-page{min-height:100svh;padding:148px 8vw 82px;background:linear-gradient(rgba(9,10,9,.78),rgba(9,10,9,.92)),url('assets/hero.webp') center/cover fixed no-repeat}.climb-intro{max-width:600px}.climb-intro>p:last-child{margin:22px 0 38px;color:var(--muted);font-size:16px}.climb-lab{display:grid;grid-template-columns:minmax(0,1.23fr) minmax(330px,.77fr);min-height:650px;border:1px solid rgba(236,232,225,.23);background:#121311;box-shadow:0 24px 70px rgba(0,0,0,.4)}.climb-map{position:relative;min-height:650px;overflow:hidden;background:#e9ded0}.climb-map>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:58% center;filter:saturate(.82) contrast(1.02)}.climb-map::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(12,13,11,.45),transparent 54%),linear-gradient(0deg,rgba(12,13,11,.54),transparent 44%);pointer-events:none}.climb-map-copy{position:absolute;z-index:1;left:28px;top:27px;color:#fff}.climb-map-copy span{display:block;margin-bottom:10px;font:10px "DM Mono",monospace;letter-spacing:.18em;color:#f98234}.climb-map-copy strong{font-size:clamp(28px,3vw,46px);font-weight:400;letter-spacing:-.06em;line-height:1.02}.climb-pin{position:absolute;z-index:2;left:var(--pin-x);top:var(--pin-y);padding:7px 10px;border:1px solid rgba(255,255,255,.64);border-radius:20px;background:rgba(15,16,14,.76);color:#fff;font:11px "DM Mono",monospace;backdrop-filter:blur(8px);transform:translate(-50%,-50%);transition:background .22s ease,color .22s ease,transform .22s ease}.climb-pin::before{content:"";display:inline-block;width:6px;height:6px;margin:0 6px 1px 0;border-radius:50%;background:#f98234;box-shadow:0 0 0 4px rgba(249,130,52,.18)}.climb-pin:hover,.climb-pin.active{background:#f98234;color:#111;transform:translate(-50%,-50%) scale(1.05)}.climb-pin.active::before{background:#111;box-shadow:0 0 0 4px rgba(17,17,17,.18)}.climb-console{padding:24px;display:flex;flex-direction:column;gap:19px;background:rgba(12,13,11,.96)}.climb-console-head{display:flex;align-items:center;justify-content:space-between;padding-bottom:16px;border-bottom:1px solid rgba(236,232,225,.17);font:11px "DM Mono",monospace;color:var(--muted);letter-spacing:.08em}.climb-console-head i{font-style:normal;color:#f98234}.climb-gym-card{position:relative;display:grid;grid-template-columns:88px 1fr auto;gap:13px;align-items:center}.climb-gym-card>img{width:88px;height:88px;object-fit:cover}.climb-gym-card p,.climb-gym-card small{margin:0;color:var(--muted);font:10px "DM Mono",monospace;line-height:1.5}.climb-gym-card h3{margin:6px 0;font-size:19px;font-weight:400;letter-spacing:-.05em}.climb-gym-card>strong{align-self:start;color:#f98234;font:18px "DM Mono",monospace}.climb-actions{display:grid;grid-template-columns:1fr 1fr;border-top:1px solid rgba(236,232,225,.17);border-left:1px solid rgba(236,232,225,.17)}.climb-actions button{display:flex;align-items:center;gap:9px;padding:13px 10px;border-right:1px solid rgba(236,232,225,.17);border-bottom:1px solid rgba(236,232,225,.17);background:transparent;color:var(--paper);font:11px "DM Mono",monospace;text-align:left;transition:color .2s ease,background .2s ease}.climb-actions button span{color:#f98234}.climb-actions button:hover,.climb-actions button.active{background:#f98234;color:#111}.climb-actions button:hover span,.climb-actions button.active span{color:#111}.climb-panel{display:none;min-height:172px;padding:4px 0}.climb-panel.active{display:block}.climb-panel-kicker{margin:0 0 7px;color:#f98234;font:10px "DM Mono",monospace;letter-spacing:.14em}.climb-panel h3{margin:0 0 16px;font-size:25px;font-weight:400;letter-spacing:-.055em}.climb-panel>p:not(.climb-panel-kicker){margin:0;color:var(--muted);font-size:14px}.climb-panel ul{display:grid;gap:10px;margin:0;padding:0;list-style:none}.climb-panel li{display:flex;justify-content:space-between;gap:12px;padding-bottom:10px;border-bottom:1px solid rgba(236,232,225,.14);font-size:13px}.climb-panel li span{color:var(--muted);font:10px "DM Mono",monospace;text-align:right}.climb-join{padding:12px 14px;margin-top:18px;border:1px solid #f98234;background:#f98234;color:#111;font:11px "DM Mono",monospace}.climb-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.climb-stats span{padding:13px 7px;border:1px solid rgba(236,232,225,.18);font:10px "DM Mono",monospace;color:var(--muted);text-align:center}.climb-stats b{display:block;margin-bottom:5px;color:var(--paper);font-size:20px;font-weight:400}.climb-status{min-height:18px;margin:auto 0 0;color:var(--muted);font:11px "DM Mono",monospace}@media(max-width:850px){.climb-page{padding:116px 6vw 76px;background-attachment:scroll}.climb-lab{grid-template-columns:1fr}.climb-map{min-height:470px}.climb-console{min-height:500px}}@media(max-width:470px){.climb-map{min-height:410px}.climb-console{padding:18px}.climb-map-copy{left:18px;top:20px}.climb-pin{font-size:9px;padding:6px 8px}.climb-gym-card{grid-template-columns:72px 1fr}.climb-gym-card>img{width:72px;height:72px}.climb-gym-card>strong{grid-column:2}.climb-panel li{display:block}.climb-panel li span{display:block;margin-top:4px;text-align:left}.climb-actions button{font-size:10px}}
.climb-prototype{height:900px;border:1px solid rgba(236,232,225,.26);background:#f7f8f4;box-shadow:0 24px 70px rgba(0,0,0,.42);overflow:hidden}.climb-prototype iframe{display:block;width:100%;height:100%;border:0;background:#f7f8f4}@media(max-width:700px){.climb-prototype{height:820px}}
