:root{--bg:#fff;--accent:#9b8f85;--text:#71665c;--line:#9b8f8552;--header-height:96px;color-scheme:light;font-family:"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;font-synthesis:none;scroll-behavior:smooth;scroll-padding-top:130px}
:root[data-theme="dark"]{--bg:#000;--accent:#ad6079;--text:#ad6079;--line:#ad607952;color-scheme:dark}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-size:1rem;line-height:1.8}button,input,textarea{font:inherit}button,a{-webkit-tap-highlight-color:transparent}button{cursor:pointer;color:inherit}button:disabled{cursor:wait;opacity:.6}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--text);outline-offset:5px}::selection{background:var(--accent);color:var(--bg)}[hidden]{display:none!important}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:fixed;left:18px;top:-100px;padding:12px;background:var(--bg);border:1px solid var(--text);z-index:20}.skip-link:focus{top:12px}
.site-header{height:var(--header-height);position:sticky;top:0;z-index:10;background:var(--bg)}.navigation{max-width:1180px;padding:0 44px;margin:auto;display:flex;align-items:center;justify-content:space-between;gap:20px;height:100%;color:var(--accent)}.nav-icons,.nav-right{display:flex;align-items:center;gap:25px}.nav-right{gap:24px}.icon-button{position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:44px;height:44px;padding:0;border:0;background:transparent;color:inherit}.icon{display:block;width:22px;height:22px;background:currentColor;mask:var(--icon-url) center/contain no-repeat;-webkit-mask:var(--icon-url) center/contain no-repeat}.icon-wrench{--icon-url:url("assets/icons/wrench.svg")}.icon-apps{--icon-url:url("assets/icons/layout-grid.svg")}.icon-gallery{--icon-url:url("assets/icons/landmark.svg")}.icon-mail{--icon-url:url("assets/icons/mail.svg")}.icon-down{--icon-url:url("assets/icons/chevron-down.svg")}.icon-theme{--icon-url:url("assets/icons/moon.svg")}:root[data-theme="dark"] .icon-theme{--icon-url:url("assets/icons/sun.svg")}.nav-label{position:absolute;top:calc(100% + 3px);left:50%;transform:translate(-50%,3px);font-size:.875rem;white-space:nowrap;color:var(--text);opacity:0;visibility:hidden;transition:opacity .14s,transform .14s;pointer-events:none}.icon-button:hover .nav-label,.icon-button:focus .nav-label{opacity:1;visibility:visible;transform:translate(-50%,0)}.discover{position:relative}#discover-button{border:0;background:none;padding:10px 4px;letter-spacing:.14em;font-size:1.1875rem;font-weight:700;min-height:44px;color:var(--accent)} .discover-panel{position:absolute;right:0;top:calc(100% + 18px);width:208px;max-width:calc(100vw - 36px);padding:18px;background:var(--bg);border:1px solid var(--line);color:var(--text)}
.social-icons{display:flex;gap:14px}.social-icon{display:flex;align-items:center;justify-content:center;width:46px;height:46px;padding:10px;flex-shrink:0;border:1px solid var(--line);border-radius:0;background:transparent;color:var(--accent)}
.social-icon:hover,.social-icon:focus-visible{border-color:var(--accent)}.social-icon[aria-disabled="true"]{opacity:.45;cursor:default}.social-info{border-top:1px solid var(--line);margin-top:16px;padding-top:14px}.social-account{margin:0;font-size:1rem;overflow-wrap:anywhere}.social-hint{margin:4px 0 0;font-size:.75rem}.social-qr{display:block;width:100%;height:auto;margin-top:12px}
.brand-icon{display:block;width:32px;height:32px;flex-shrink:0;background:currentColor;mask:var(--brand-url) center/contain no-repeat;-webkit-mask:var(--brand-url) center/contain no-repeat}.social-icon .brand-icon{width:24px;height:24px}
.brand-wechat{--brand-url:url("assets/brands/wechat.svg")}
.brand-tiktok{--brand-url:url("assets/brands/tiktok.svg")}
.brand-bilibili{--brand-url:url("assets/brands/bilibili.svg")}
.brand-obsidian{--brand-url:url("assets/brands/obsidian.svg")}
.brand-openai{--brand-url:url("assets/brands/openai.svg")}
.brand-googlechrome{--brand-url:url("assets/brands/googlechrome.svg")}
.brand-anki{--brand-url:url("assets/brands/anki.svg")}
.brand-everything{--brand-url:url("assets/brands/everything.svg")}

.hero{min-height:calc(100svh - var(--header-height));position:relative;display:flex;align-items:center;justify-content:center;padding:20px 28px 110px;scroll-margin-top:var(--header-height)}.hero-art{width:min(760px,70vw);display:flex;flex-direction:column;align-items:center;gap:18px}.art-cn{width:100%}.art-en{width:49%;max-width:390px}.art-clip{overflow:hidden}.art-slide{animation:emerge .42s cubic-bezier(.18,.72,.24,1) both}.art-en .art-slide{animation-delay:.04s}.art-slide img{display:block;width:100%;height:auto}.art-slide .art-dark{display:none}:root[data-theme="dark"] .art-slide .art-light{display:none}:root[data-theme="dark"] .art-slide .art-dark{display:block}.scroll-cue{position:absolute;bottom:32px;left:calc(50% - 22px);color:var(--accent)}@keyframes emerge{from{transform:translateY(108%);opacity:.4}to{transform:translateY(0);opacity:1}}
.sections{max-width:1000px;margin:auto;padding:0 44px}.content-section{padding:0;border-top:1px solid var(--line);scroll-margin-top:24px}.section-header{display:flex;align-items:center;gap:24px;margin:0;padding:32px 0;color:var(--accent);list-style:none;cursor:pointer}.section-header::-webkit-details-marker{display:none}.section-header::marker{content:""}.section-header:focus-visible{outline:2px solid var(--text);outline-offset:5px}.section-header h2{flex:1}.section-body{padding:6px 0 52px 44px}.section-intro{margin:0 0 16px}.gallery-halls{display:grid;grid-template-columns:1fr 1fr;gap:32px}.gallery-hall{min-width:0}.gallery-hall+.gallery-hall{border-left:1px solid var(--line);padding-left:32px}.gallery-hall h3{font-size:1.125rem;margin:0 0 20px;font-weight:400}.gallery-item h4{font-size:1rem;margin:12px 0;font-weight:500}.hall-empty{margin:0}.section-index{font-family:Consolas,monospace;font-size:.8125rem;color:var(--text)}h2{font-size:2rem;line-height:1.4;font-weight:400;letter-spacing:.12em;margin:0}h3{font-weight:500;line-height:1.5}.empty-state{margin:0 0 0 44px;padding:4px 0 16px;font-size:1rem}.entry-list{display:grid;gap:20px}.entry{display:grid;grid-template-columns:minmax(140px,1fr) 2fr;gap:24px;padding:20px 0;border-bottom:1px solid var(--line)}.entry h3{margin:0;font-size:1.125rem}.entry p{margin:0;white-space:pre-wrap;overflow-wrap:anywhere}.entry a{text-decoration:underline;text-underline-offset:5px}.gallery-list{display:grid;gap:30px}.gallery-item{margin:0}.gallery-item img{display:block;max-width:100%;max-height:700px;object-fit:contain;margin:auto}.gallery-item figcaption{padding-top:14px}.gallery-item h3{margin:0 0 12px}.gallery-item p{white-space:pre-wrap;overflow-wrap:anywhere}

.guestbook-layout{max-width:620px;margin-left:0}
#message-form label{display:block;margin:0 0 10px;font-size:.9375rem;letter-spacing:.05em}
#message-form .letter-label{margin-top:28px}
#message-form input,#message-form textarea{display:block;width:100%;padding:14px 16px;border:1px solid var(--line);border-radius:0;background:var(--bg);color:var(--text);min-width:0;line-height:1.8}
#message-form textarea{resize:vertical;min-height:205px}
#message-form input::placeholder,#message-form textarea::placeholder{color:var(--text);opacity:.8}
#message-form [aria-invalid="true"]{border-color:var(--text)}
.letter-field{position:relative;perspective:1000px}
.delivery-actions{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-top:18px}
.text-button{display:inline-flex;align-items:center;justify-content:space-between;min-height:42px;min-width:100px;width:auto;gap:26px;border:1px solid var(--line);background:transparent;padding:7px 15px;font-size:.875rem;transition:border-color .16s,background .16s,color .16s}
.text-button:hover{border-color:var(--text);background:var(--text);color:var(--bg)}
#character-count{font-size:.8125rem;font-variant-numeric:tabular-nums}
.form-status{font-size:.875rem;min-height:1.8em;margin:10px 0 0}
.delivery-scene{position:absolute;inset:0;pointer-events:none;perspective:900px;z-index:1}
.paper-sheet{position:absolute;inset:0;display:flex;flex-direction:column;transform-style:preserve-3d;transform-origin:center}
.paper-panel{height:33.333333%;position:relative;overflow:hidden;background:var(--bg);border:1px solid var(--line);flex-shrink:0;backface-visibility:hidden}
.paper-top{transform-origin:bottom;border-bottom:0}
.paper-bottom{transform-origin:top;border-top:0}
.paper-copy{position:absolute;left:0;right:0;display:block;padding:14px 16px;white-space:pre-wrap;overflow-wrap:break-word;line-height:1.8;font-size:1rem;color:var(--text)}
.delivery-envelope{position:absolute;top:50%;left:50%;width:120px;height:86px;margin:-30px 0 0 -60px;opacity:0;transform-origin:center;color:var(--accent)}
.delivery-envelope svg{display:block;width:100%;height:100%;overflow:visible;stroke:currentColor;stroke-width:1.15;stroke-linejoin:round}
.envelope-back,.envelope-front,.envelope-flap{fill:var(--bg)}
.envelope-flap{transform-origin:60px 28px}
#message-form.is-delivering textarea{opacity:0}
.is-delivering .paper-top{animation:fold-top .38s cubic-bezier(.4,0,.2,1) both}
.is-delivering .paper-bottom{animation:fold-bottom .38s .07s cubic-bezier(.4,0,.2,1) both}
.is-delivering .paper-sheet{animation:paper-in .72s cubic-bezier(.4,0,.2,1) both}
.is-delivering .delivery-envelope{animation:envelope-send 1.3s cubic-bezier(.4,0,.2,1) both}
.is-delivering .envelope-flap{animation:seal-letter .24s .69s ease-in-out both}
@keyframes fold-top{to{transform:rotateX(-178deg)}}
@keyframes fold-bottom{to{transform:rotateX(178deg)}}
@keyframes paper-in{0%,24%{transform:translateY(0) scale(1);opacity:1}76%{transform:translateY(8px) scale(var(--paper-x,.2),var(--paper-y,.7));opacity:1}100%{transform:translateY(28px) scale(var(--paper-x,.2),var(--paper-y,.7));opacity:0}}
@keyframes seal-letter{to{transform:scaleY(-1)}}
@keyframes envelope-send{0%,30%{opacity:0;transform:translateY(28px)}45%,73%{opacity:1;transform:translate(0,0)}100%{opacity:0;transform:translate(115px,-90px) rotate(-12deg) scale(.85)}}
@media(prefers-reduced-motion:reduce){.text-button{transition:none}.is-delivering .paper-top,.is-delivering .paper-bottom,.is-delivering .paper-sheet,.is-delivering .delivery-envelope,.is-delivering .envelope-flap{animation:none}}
.site-footer{max-width:1090px;padding:26px 44px 36px;margin:auto;display:flex;align-items:center;justify-content:space-between;gap:20px;font-size:.8125rem;border-top:1px solid var(--line)}.back-top{padding:8px 0}
@media(max-width:700px){:root{--header-height:84px;scroll-padding-top:110px}.navigation{padding:0 20px;gap:8px}.nav-icons{gap:10px}.nav-right{gap:12px}.hero{padding:0 22px 84px}.hero-art{width:92vw;gap:14px}.art-en{width:54%}.scroll-cue{bottom:22px}.sections{padding:0 25px}.content-section{padding:0}.section-header{padding:26px 0;margin:0;gap:14px}.section-body{padding:6px 0 36px 0}.gallery-halls{grid-template-columns:1fr;gap:28px}.gallery-hall+.gallery-hall{border-left:0;border-top:1px solid var(--line);padding:26px 0 0}h2{font-size:1.7rem}.empty-state{margin-left:36px}.guestbook-layout{margin-left:0}.entry{grid-template-columns:1fr;gap:12px}.site-footer{margin:0 25px;padding:22px 0 30px}.discover-panel{right:-54px}}
@media(max-width:380px){.navigation{padding:0 12px}.nav-icons{gap:1px}.nav-right{gap:5px}.sections{padding:0 20px}.site-footer{margin:0 20px}.hero-art{gap:9px}}
@media(prefers-reduced-motion:reduce){:root{scroll-behavior:auto}.art-slide{animation:none}.nav-label,.text-button{transition:none}}

.software-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:18px}
.software-card{position:relative;min-width:0}.software-trigger{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;width:100%;min-height:112px;padding:16px 5px;border:0;background:none;color:var(--accent);font-size:.9375rem}
.software-detail{position:absolute;top:100%;left:0;width:220px;max-width:calc(100vw - 72px);padding:14px 16px;border:1px solid var(--line);background:var(--bg);color:var(--text);font-size:.8125rem;opacity:0;visibility:hidden;transform:translateY(4px);transition:opacity .14s,transform .14s;z-index:3;pointer-events:none}
.software-card:last-child .software-detail{left:auto;right:0}.software-detail p{margin:0}.software-visit{display:inline-block;margin-top:8px;min-height:32px;padding:4px 0;text-decoration:underline;text-underline-offset:4px}
.software-card:focus-within:not(.description-dismissed) .software-detail{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}
@media(hover:hover){.software-card:hover:not(.description-dismissed) .software-detail{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}}
.gallery-status{margin:0 0 22px 44px;font-size:.875rem}.gallery-retry{margin-left:12px;border:0;border-bottom:1px solid var(--line);padding:2px 0;background:none}
@media(max-width:700px){.software-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 22px}.software-card:last-child .software-detail{left:0;right:auto}.software-card:nth-child(even) .software-detail{left:auto;right:0}.gallery-status{margin-left:0}}
@media(prefers-reduced-motion:reduce){.software-detail{transition:none}}

/* 动效只回应栏目展开与图标交互，首页保留手写标题与留白。 */
.content-section[open]>.section-body{animation:section-arrive .28s cubic-bezier(.2,.7,.2,1) both}
@keyframes section-arrive{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.software-trigger .brand-icon,.icon-button>.icon{transition:transform .2s cubic-bezier(.2,.7,.2,1)}
.software-trigger>span:last-child{position:relative}.software-trigger>span:last-child::after{content:"";position:absolute;left:0;right:0;bottom:-6px;height:1px;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform .22s}
.software-card:focus-within .software-trigger .brand-icon{transform:translateY(-3px)}.software-card:focus-within .software-trigger>span:last-child::after{transform:scaleX(1)}
.social-icon{position:relative}.social-icon::after{content:"";position:absolute;inset:-1px;border:1px solid var(--accent);opacity:0;pointer-events:none}
.social-icon:focus-visible:not([aria-disabled="true"])::after{animation:square-pulse .5s ease-out}
@keyframes square-pulse{from{opacity:.55;transform:scale(1)}to{opacity:0;transform:scale(1.25)}}
.gallery-list{position:relative;min-height:90px;padding:18px}.gallery-list::before,.gallery-list::after{content:"";position:absolute;width:12px;height:12px;pointer-events:none;border-color:var(--accent);opacity:.55}.gallery-list::before{top:0;left:0;border-top:1px solid;border-left:1px solid}.gallery-list::after{right:0;bottom:0;border-right:1px solid;border-bottom:1px solid}
@media(hover:hover){.software-card:hover .software-trigger .brand-icon{transform:translateY(-3px)}.software-card:hover .software-trigger>span:last-child::after{transform:scaleX(1)}.icon-button:hover>.icon{transform:translateY(-2px)}.social-icon:hover:not([aria-disabled="true"])::after{animation:square-pulse .5s ease-out}}
@media(prefers-reduced-motion:reduce){.content-section[open]>.section-body,.social-icon::after{animation:none!important}.software-trigger .brand-icon,.software-trigger>span:last-child::after,.icon-button>.icon{transition:none}.software-card .software-trigger .brand-icon,.icon-button:hover>.icon{transform:none}}

@media(max-width:700px){.nav-icons{gap:8px}.nav-right{gap:8px}}
@media(max-width:380px){.nav-icons{gap:0}.nav-right{gap:3px}.navigation .icon-button{width:38px}#discover-button{font-size:1rem;letter-spacing:.08em}}

/* 每个栏目是一张纸：错位、微倾、少量重叠，阅读时摆正。 */
.sections{padding-top:24px;padding-bottom:52px}
.content-section{--paper-angle:0deg;--paper-shift:0px;position:relative;width:98%;margin:0;padding:0 32px;border:1px solid var(--accent);background:var(--bg);transform:translateX(var(--paper-shift)) rotate(var(--paper-angle));transform-origin:50% 56px;transition:transform .32s cubic-bezier(.2,.65,.2,1);isolation:isolate}
.content-section+.content-section{margin-top:-76px}
#tools{--paper-angle:-1.3deg;--paper-shift:-8px;z-index:1}
#software{--paper-angle:.9deg;--paper-shift:10px;width:96%;z-index:2}
#gallery{--paper-angle:-.7deg;--paper-shift:-2px;width:99%;z-index:3}
#guestbook{--paper-angle:1.1deg;--paper-shift:5px;width:97%;z-index:4}
.section-header{padding:40px 0 150px;min-height:clamp(280px,40vw,400px);align-items:flex-start}.section-header .section-index{padding-top:10px}
.content-section[open]{transform:translateX(var(--paper-shift)) rotate(0deg);z-index:5!important}
.content-section[open]>.section-header{padding:34px 0 26px;min-height:110px;align-items:center}.content-section[open]>.section-header .section-index{padding-top:0}
.content-section[open]:focus-within{z-index:6!important}
.section-body{padding-bottom:88px}
.section-header::before{content:"";position:absolute;top:-1px;left:0;width:64px;height:1px;background:var(--text);opacity:0;pointer-events:none}
.content-section[open]>.section-header::before,.section-header:focus-visible::before{animation:divider-scan .72s cubic-bezier(.25,.65,.3,1) both}
@keyframes divider-scan{0%{left:0;opacity:0;transform:scaleX(.3)}15%{opacity:1;transform:scaleX(1)}80%{opacity:1}100%{left:calc(100% - 64px);opacity:0;transform:scaleX(.3)}}
@media(hover:hover){.content-section:not([open]):has(>.section-header:hover){transform:translate(var(--paper-shift),-4px) rotate(var(--paper-angle))}.section-header:hover::before{animation:divider-scan .72s cubic-bezier(.25,.65,.3,1) both}}
.gallery-status{margin-left:44px}
@media(max-width:700px){.sections{padding-top:18px;padding-bottom:36px}.content-section{padding:0 18px;width:98%}.content-section+.content-section{margin-top:-54px}#tools{--paper-shift:-3px;--paper-angle:-1.4deg}#software{--paper-shift:5px;--paper-angle:1deg;width:97%}#gallery{--paper-shift:-1px;--paper-angle:-.8deg;width:99%}#guestbook{--paper-shift:3px;--paper-angle:1.2deg;width:97%}.section-header{padding:30px 0 130px;min-height:260px}.content-section[open]>.section-header{min-height:98px;padding:28px 0 22px}.section-body{padding-bottom:64px}.software-grid{gap:12px}.software-detail{max-width:calc(100vw - 112px)}.gallery-status{margin-left:0}}
@media(prefers-reduced-motion:reduce){.content-section{transition:none}.section-header::before{animation:none!important}}
@media(hover:hover){.content-section:has(.software-card:hover){z-index:7!important}}

.content-section[open]+.content-section,.content-section+.content-section[open]{margin-top:24px}

/* 辉光管所有材质只取背景色与主题色，透明度构成玻璃和灯丝层次。 */
.hero{flex-direction:column;gap:30px;padding-top:42px;padding-bottom:108px}
.nixie-clock{display:flex;flex-direction:column;align-items:center;gap:12px;color:var(--accent);max-width:100%;animation:clock-emerge .5s .15s both;--tube-hot:var(--accent)}
.clock-date{display:flex;align-items:baseline;justify-content:center;gap:10px;font-family:"Bahnschrift","DIN Alternate",Consolas,monospace;font-variant-numeric:tabular-nums;font-weight:300;line-height:1.2;color:var(--accent)}
.clock-date-number{font-size:clamp(21px,3vw,28px);letter-spacing:.12em}.clock-date-unit{font-family:"Microsoft YaHei",sans-serif;font-size:11px;letter-spacing:.12em;margin-right:10px}.clock-date-unit:last-child{margin-right:0}
.clock-digits{display:flex;align-items:center;gap:7px}.clock-time{display:block;line-height:1}
.nixie-tube{position:relative;display:block;width:clamp(48px,8vw,72px);flex-shrink:0}
.nixie-tube svg{display:block;width:100%;height:auto;overflow:visible}
.tube-interior{fill:var(--bg)}.cathode-ghosts{fill:none;stroke:currentColor;stroke-opacity:.12;stroke-width:.4}
.cathode-halo,.cathode,.cathode-core{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round}
.cathode-halo{stroke-width:3.4;opacity:.45;filter:blur(2.2px)}
.cathode{stroke-width:1.3;filter:drop-shadow(0 0 2px var(--accent)) drop-shadow(0 0 4px var(--accent))}
.cathode-core{stroke:var(--tube-hot);stroke-width:.45;opacity:.95}
.clock-colon{font:300 30px/1 Georgia,serif;padding:0 1px 20px;color:var(--accent);text-shadow:0 0 7px var(--accent)}
.clock-zone{display:block;max-width:100%;border:0;background:none;padding:6px 12px;min-height:36px;font-size:.6875rem;letter-spacing:.08em;color:var(--accent);overflow-wrap:anywhere;text-align:center;text-decoration:underline;text-decoration-color:transparent;text-underline-offset:5px;transition:text-decoration-color .18s}
.clock-zone:hover,.clock-zone:focus-visible{text-decoration-color:var(--accent)}
.hero-intro{max-width:36rem;margin:0;text-align:center;text-wrap:balance;color:var(--accent);font-size:.875rem;line-height:2.1;letter-spacing:.08em}
.site-footer{display:grid;grid-template-columns:1fr auto 1fr;gap:24px;align-items:center}.footer-motto{text-align:center;letter-spacing:.12em}.site-footer .back-top{justify-self:end}
@keyframes clock-emerge{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}
@media(max-width:700px){.hero{gap:28px;padding-top:32px;padding-bottom:98px}.nixie-clock{gap:12px}.nixie-tube{width:clamp(29px,10.5vw,48px)}.clock-digits{gap:4px}.clock-colon{font-size:21px;padding-bottom:12px}.clock-date{gap:6px}.clock-date-number{font-size:22px}.clock-date-unit{font-size:10px;margin-right:6px}.hero-intro{max-width:28em;font-size:.8125rem}.site-footer{grid-template-columns:1fr 1fr;gap:14px}.footer-motto{grid-column:1/-1;grid-row:1;padding:8px 0}.site-footer .back-top{grid-column:2}}
@media(prefers-reduced-motion:reduce){.nixie-clock{animation:none}.clock-zone{transition:none}}

.hero-intro>span{display:block}.hero-intro>span:last-child{margin-top:10px}

.clock-switch{display:block;border:0;padding:0;background:none;color:inherit;line-height:1}.clock-date-number{display:inline-block;text-align:center;min-width:2ch}.clock-date-number:first-child{min-width:4ch}

/* 纸面上的服务入口：整块可点，双线图形提供轻微的空间层次。 */
.tool-portals{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:38px}
.tool-portal{position:relative;display:flex;flex-direction:column;gap:20px;min-width:0;padding:18px 16px 24px;color:var(--accent);border-bottom:1px solid var(--line)}
.tool-portal::before{content:"";position:absolute;top:0;left:0;width:12px;height:12px;border-top:1px solid var(--accent);border-left:1px solid var(--accent);opacity:.45;transition:width .25s,opacity .25s}
.tool-portal::after{content:"";position:absolute;bottom:-1px;left:0;width:100%;height:1px;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform .3s}
.tool-portal-top{display:flex;align-items:center;justify-content:space-between;gap:20px}.tool-drawing{width:64px;height:56px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round;overflow:visible}
.folder-back,.memo-back{opacity:.45}.memo-paper,.folder-front{fill:var(--bg)}.folder-file{transition:transform .25s}.memo-line{stroke-dasharray:20;stroke-dashoffset:7;transition:stroke-dashoffset .25s}
.tool-arrow{font-size:24px;font-weight:300;opacity:.55;transition:transform .25s,opacity .25s}
.tool-portal-copy{display:flex;flex-direction:column;gap:4px;min-width:0}.tool-name{font-size:1.375rem;letter-spacing:.04em;line-height:1.5}.tool-description{font-size:.8125rem;letter-spacing:.025em}
.tool-portal:is(:hover,:focus-visible)::before{width:32px;opacity:1}.tool-portal:is(:hover,:focus-visible)::after{transform:scaleX(1)}
.tool-portal:is(:hover,:focus-visible) .tool-arrow{transform:translate(3px,-3px);opacity:1}.tool-portal:is(:hover,:focus-visible) .folder-file{transform:translateY(-4px)}.tool-portal:is(:hover,:focus-visible) .memo-line{stroke-dashoffset:0}
@media(max-width:700px){#tools>.section-body{padding-left:0}.tool-portals{grid-template-columns:1fr;gap:24px}.tool-portal{display:grid;grid-template-columns:64px 1fr;gap:20px;align-items:center;padding:16px 8px 20px}.tool-portal-top{display:contents}.tool-drawing{grid-column:1;grid-row:1}.tool-portal-copy{grid-column:2;grid-row:1;padding-right:20px}.tool-arrow{position:absolute;right:6px;top:25px}.tool-name{font-size:1.1875rem}.tool-description{font-size:.75rem}}
@media(prefers-reduced-motion:reduce){.tool-portal::before,.tool-portal::after,.tool-arrow,.folder-file,.memo-line{transition:none}}

.tool-drawing{display:block;background:currentColor;mask:var(--tool-logo) center/contain no-repeat;-webkit-mask:var(--tool-logo) center/contain no-repeat;transition:transform .25s}
.tool-brand-sftpgo{--tool-logo:url("assets/brands/sftpgo-mono.svg")}.tool-brand-memos{--tool-logo:url("assets/brands/memos-mono.svg")}
.tool-portal:is(:hover,:focus-visible) .tool-drawing{transform:translateY(-2px)}
@media(prefers-reduced-motion:reduce){.tool-drawing{transition:none}}

.gallery-item .gallery-preface{font-size:.8125rem;margin:0 0 16px;letter-spacing:.05em}.gallery-item .gallery-text{line-height:2}

/* 一条参观路线串联常展与临展，作品在独立留白中陈列。 */
#gallery>.gallery-halls{position:relative;display:flex;flex-direction:column;gap:52px;padding:12px 0 64px}
.gallery-halls::before{content:"";position:absolute;left:18px;top:30px;bottom:64px;width:1px;background:var(--line);pointer-events:none}
.gallery-hall{position:relative;min-width:0}.gallery-hall+.gallery-hall{border:0;padding:0}
.hall-heading{display:flex;align-items:center;gap:20px;margin-bottom:26px;position:relative}
.hall-plan{position:relative;z-index:1;display:block;width:38px;height:38px;flex-shrink:0;background:var(--bg);color:var(--accent);stroke:currentColor;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter}
.hall-plan-pending{stroke-dasharray:2 3;opacity:.5}.hall-titles{display:flex;align-items:baseline;gap:16px;flex-shrink:0}.hall-titles h3{margin:0;font-size:1.1875rem;letter-spacing:.12em;color:var(--accent)}.hall-theme{font-size:.75rem;letter-spacing:.16em;color:var(--accent)}
.hall-rule{position:relative;height:1px;flex:1;background:var(--line)}.hall-rule::after{content:"";position:absolute;right:0;top:-2px;width:5px;height:5px;border:1px solid var(--accent);background:var(--bg)}
.gallery-list{counter-reset:exhibit;display:grid;gap:38px;min-height:120px;margin-left:58px;padding:0 0 14px}
.gallery-list::before,.gallery-list::after{content:none}
.gallery-item{counter-increment:exhibit;position:relative;padding:32px 32px 38px;border-bottom:1px solid var(--line);color:var(--accent)}
.gallery-item::before{content:counter(exhibit,decimal-leading-zero);position:absolute;top:0;left:0;font:11px/1.4 Consolas,monospace;letter-spacing:.12em;color:var(--accent)}
.gallery-item::after{content:"";position:absolute;top:4px;right:0;width:16px;height:16px;border-top:1px solid var(--line);border-right:1px solid var(--line);pointer-events:none}
.gallery-item figcaption{padding-top:0;max-width:42rem}.gallery-item img+figcaption{padding-top:24px}
.gallery-item h4{font-size:1.375rem;font-weight:400;letter-spacing:.12em;line-height:1.6;margin:0 0 16px}
.gallery-item .gallery-preface{font-size:.8125rem;line-height:1.9;margin:0 0 22px;color:var(--accent)}
.gallery-item .gallery-text{margin:0;font-size:1rem;line-height:2.3;letter-spacing:.06em;color:var(--accent)}
.gallery-item img{width:auto;height:auto;max-width:100%;max-height:700px}
.hall-empty{display:flex;align-items:center;gap:16px;min-height:116px;margin:0;color:var(--accent);font-size:.8125rem;letter-spacing:.1em}
.hall-empty::before{content:"";display:block;width:38px;height:38px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);transform:skewY(-14deg);flex-shrink:0}
@media(max-width:700px){#gallery>.gallery-halls{gap:40px;padding:8px 0 42px}.gallery-halls::before{left:13px;bottom:42px}.hall-heading{gap:12px;margin-bottom:20px}.hall-plan{width:28px;height:32px}.hall-titles{gap:10px}.hall-titles h3{font-size:1rem}.hall-theme{font-size:.6875rem;letter-spacing:.08em}.gallery-list{margin-left:40px;gap:30px}.gallery-item{padding:28px 4px 30px}.gallery-item h4{font-size:1.2rem}.gallery-item .gallery-text{font-size:.9375rem;letter-spacing:0}.hall-empty{min-height:96px;font-size:.75rem;gap:12px}.hall-empty::before{width:24px;height:30px}}

/* 诗词便签：相邻纸面使用不同的固定倾角，不随刷新随机晃动。 */
.gallery-list{grid-template-columns:repeat(auto-fit,minmax(min(100%,230px),1fr));gap:38px 28px;align-items:start;padding:10px 8px 24px}
.gallery-item:not(.gallery-note),.gallery-list>.hall-empty{grid-column:1/-1}
.gallery-note{--note-angle:-.85deg;box-sizing:border-box;width:100%;max-width:360px;justify-self:start;min-width:0;min-height:280px;margin:0;padding:44px 26px 36px;border:1px solid var(--line);background:var(--bg);transform:rotate(var(--note-angle));transform-origin:center center}
.gallery-note:nth-child(4n+2){--note-angle:.7deg}.gallery-note:nth-child(4n+3){--note-angle:-.4deg}.gallery-note:nth-child(4n){--note-angle:1.05deg}
.gallery-note::before{top:16px;left:20px;font-size:10px}
.gallery-note::after{top:-1px;left:calc(50% - 14px);right:auto;width:28px;height:1px;border:0;background:var(--accent);opacity:.65}
.gallery-note h4{font-size:1.25rem;overflow-wrap:anywhere}.gallery-note .gallery-preface{margin-bottom:20px}.gallery-note .gallery-text{font-size:.9375rem;line-height:2.2;letter-spacing:.03em}
@media(max-width:700px){.gallery-list{grid-template-columns:1fr;gap:28px;padding:8px 3px 20px}.gallery-note{padding:40px 18px 30px;min-height:250px}.gallery-note h4{font-size:1.125rem}.gallery-note .gallery-text{font-size:.875rem;letter-spacing:0}.gallery-note::before{left:16px}.gallery-note{--note-angle:-.6deg}.gallery-note:nth-child(4n+2){--note-angle:.5deg}.gallery-note:nth-child(4n+3){--note-angle:-.3deg}.gallery-note:nth-child(4n){--note-angle:.7deg}}
