diff --git a/README.md b/README.md index b990d3d..329dbb3 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ ## 环境要求 -- Halo **2.26.0 及以上**(页面布局契约、微信读书页面均依赖 2.26 的新能力) +- Halo **2.27.0 及以上**(页面布局契约、微信读书页面均依赖 2.27 的新能力) - v1.2.0 起内置主题配色系统(纯 CSS 变量实现);更低版本的 Halo 请使用主题 v1.1.x ## 特点 @@ -15,7 +15,7 @@ 2. **插件兼容性** — 适配 11 款常用 Halo 插件,安装即用;提供页面布局契约,插件前台页面自动复用主题外观 3. **内置灯箱** — 主题内置 LightGallery 灯箱,支持 EXIF 信息展示;安装 lightgallery.js 插件后自动禁用 4. **可配置性** — 17 个设置分组、122 个配置项,几乎所有模块可独立开关 -5. **性能优化** — 服务端字数统计(API 扩展包)、图片懒加载与响应式缩略图、滚动吸附、CSS/HTML 压缩 +5. **性能优化** — 服务端字数统计(API 扩展包)、图片懒加载与响应式缩略图、首屏整屏吸附(仅首屏边界接管,内容区保留原生滚动)、Hero 离屏停绘、CSS/HTML 压缩;详见[开发指南 - 性能与滚动顺滑](docs/customize/development.md) 6. **页面布局契约** — 提供 `templates/layout.html`,插件页面不再回退到 Halo 内置布局 ## 预览 @@ -56,7 +56,7 @@ - Hero 首屏:明暗双背景图、大标题/副标题独立配色、一言(支持自动刷新与淡入淡出过渡)、下滑箭头平滑滚动 - 欢迎弹窗:基于访客 IP 地理定位的欢迎提示,支持 5 种位置、自定义 API 与会话去重开关 -- 滚动吸附:首屏与内容区之间滚轮/触摸自动吸附 +- 滚动吸附:首屏与内容区之间滚轮/触摸自动吸附,进入内容区后恢复原生自由滚动 - 文章卡片:可配置显示字数(依赖 API 扩展包)、阅读量、分类、标签、摘要行数 ### 文章 @@ -177,7 +177,7 @@ pnpm smoke ## 技术栈 -- [Halo](https://halo.run) 2.26+ +- [Halo](https://halo.run) 2.27+ - [Astro](https://astro.build) 6(构建输出 Thymeleaf 模板) - [Thymeleaf](https://www.thymeleaf.org) 模板引擎 - [Sass](https://sass-lang.com/) 样式 diff --git a/compat/assets/Layout.BbFUS7dL.css b/compat/assets/Layout.BbFUS7dL.css new file mode 100644 index 0000000..68a9e9d --- /dev/null +++ b/compat/assets/Layout.BbFUS7dL.css @@ -0,0 +1 @@ +@charset "UTF-8";:root{--bg: #faf7f2;--bg-raised: #f3ede5;--bg-overlay: color-mix(in srgb, var(--bg) 85%, transparent);--ink: #2c2420;--ink-2: #7a6e64;--ink-3: #b5a99e;--rule: #e8e0d6;--accent: #d4764e;--accent-hover: #c4613a;--accent-bg: #fdf0e8;--mist-pink: #f0e4de;--sea-salt: #e8e0d6;--caramel: #8b6f5e;--glass-bg: color-mix(in srgb, var(--bg) 72%, transparent);--glass-border: color-mix(in srgb, var(--rule) 50%, transparent);--shadow-sm: 0 1px 3px color-mix(in srgb, var(--ink) 6%, transparent);--shadow-md: 0 4px 16px color-mix(in srgb, var(--ink) 8%, transparent);--shadow-lg: 0 8px 32px color-mix(in srgb, var(--ink) 12%, transparent);--shadow-glow: 0 0 40px color-mix(in srgb, var(--accent) 15%, transparent)}html.dark{--bg: #1e1c1a;--bg-raised: #292623;--bg-overlay: color-mix(in srgb, var(--bg) 85%, transparent);--ink: #e9e4dd;--ink-2: #aaa096;--ink-3: #7c7268;--rule: #3b362f;--accent: #e89a64;--accent-hover: #f2ad79;--accent-bg: #2c231b;--mist-pink: #2e2823;--sea-salt: #302b26;--caramel: #a38b7b;--glass-bg: color-mix(in srgb, var(--bg) 72%, transparent);--glass-border: color-mix(in srgb, var(--rule) 50%, transparent);--shadow-sm: 0 1px 3px rgba(0, 0, 0, .24);--shadow-md: 0 4px 16px rgba(0, 0, 0, .3);--shadow-lg: 0 8px 32px rgba(0, 0, 0, .4);--shadow-glow: 0 0 40px rgba(232, 154, 100, .12)}html[data-palette=matcha]{--bg: #f6f8f1;--bg-raised: #ecf1e3;--ink: #26302a;--ink-2: #6d7a6e;--ink-3: #a8b3a4;--rule: #dde5d4;--accent: #6f9d52;--accent-hover: #5d8943;--accent-bg: #ecf3e2;--mist-pink: #e7eddc;--sea-salt: #dfe8d3;--caramel: #7d8a68}html[data-palette=matcha].dark{--bg: #1b1f1a;--bg-raised: #252b22;--ink: #e6e9e0;--ink-2: #a3ab9c;--ink-3: #767e70;--rule: #363d33;--accent: #9cc47f;--accent-hover: #aed493;--accent-bg: #242c1f;--mist-pink: #262d22;--sea-salt: #282f24;--caramel: #98a387}html[data-palette=indigo]{--bg: #f5f7fa;--bg-raised: #eaeff5;--ink: #232a33;--ink-2: #66707d;--ink-3: #a3adb8;--rule: #dce2ea;--accent: #4a6fa5;--accent-hover: #3d5d8c;--accent-bg: #e9eff8;--mist-pink: #e2e8f0;--sea-salt: #dbe4ee;--caramel: #707c8e}html[data-palette=indigo].dark{--bg: #191d23;--bg-raised: #222831;--ink: #e4e7ec;--ink-2: #9aa4b1;--ink-3: #6d7683;--rule: #323a45;--accent: #7fa3d1;--accent-hover: #93b4dc;--accent-bg: #1f2632;--mist-pink: #232830;--sea-salt: #252b34;--caramel: #8b95a6}html[data-palette=sakura]{--bg: #faf5f6;--bg-raised: #f3eaec;--ink: #322a2c;--ink-2: #7d6e72;--ink-3: #b4a6aa;--rule: #ecdfe2;--accent: #d97387;--accent-hover: #c85d72;--accent-bg: #fbeef1;--mist-pink: #f2e2e6;--sea-salt: #eddfe3;--caramel: #96757e}html[data-palette=sakura].dark{--bg: #201b1c;--bg-raised: #2a2425;--ink: #ece5e6;--ink-2: #b0a4a7;--ink-3: #7f7276;--rule: #3c3436;--accent: #e89aab;--accent-hover: #f0aec0;--accent-bg: #2d2225;--mist-pink: #2f2729;--sea-salt: #31282a;--caramel: #a88d94}html[data-palette=violet]{--bg: #f7f5fa;--bg-raised: #eeeaf5;--ink: #2b2733;--ink-2: #6f6a7c;--ink-3: #aaa5b6;--rule: #e2ddeb;--accent: #8a6fc0;--accent-hover: #7759ae;--accent-bg: #f0eaf9;--mist-pink: #e8e2f0;--sea-salt: #e3dcee;--caramel: #7f7590}html[data-palette=violet].dark{--bg: #1c1a21;--bg-raised: #26222f;--ink: #e8e5ee;--ink-2: #a49eaf;--ink-3: #746e80;--rule: #373241;--accent: #b49ae0;--accent-hover: #c3ace8;--accent-bg: #262033;--mist-pink: #292434;--sea-salt: #2b2536;--caramel: #948caa}html[data-palette=sea]{--bg: #f3f8f7;--bg-raised: #e8f0ee;--ink: #21302d;--ink-2: #647872;--ink-3: #9fb1ac;--rule: #d9e6e3;--accent: #3d9c8f;--accent-hover: #2f8578;--accent-bg: #e5f3f0;--mist-pink: #dee9e6;--sea-salt: #d6e5e1;--caramel: #6c8680}html[data-palette=sea].dark{--bg: #181f1e;--bg-raised: #212a28;--ink: #e3eae8;--ink-2: #9aaba6;--ink-3: #6d7d79;--rule: #2f3b39;--accent: #6cc3b4;--accent-hover: #82d0c2;--accent-bg: #1d2a27;--mist-pink: #222c2a;--sea-salt: #242e2c;--caramel: #869894}html[data-palette=amber]{--bg: #faf7ef;--bg-raised: #f3eddc;--ink: #322b1e;--ink-2: #7d7360;--ink-3: #b5ab94;--rule: #eae1cb;--accent: #b97f1c;--accent-hover: #9f6a0e;--accent-bg: #f9efd8;--mist-pink: #f0e8d2;--sea-salt: #ebe2ca;--caramel: #96835c}html[data-palette=amber].dark{--bg: #201d16;--bg-raised: #2a261d;--ink: #ebe6d9;--ink-2: #b0a893;--ink-3: #7f7866;--rule: #3c3729;--accent: #e0a83e;--accent-hover: #ebba5c;--accent-bg: #2c251a;--mist-pink: #2f2a1e;--sea-salt: #312c20;--caramel: #a89a76}html[data-palette=plum]{--bg: #f9f4f5;--bg-raised: #f1e8ea;--ink: #2f2427;--ink-2: #796a6f;--ink-3: #b1a2a7;--rule: #e9dde0;--accent: #a4506b;--accent-hover: #8d3f59;--accent-bg: #f7e9ee;--mist-pink: #ecdee2;--sea-salt: #e5d8db;--caramel: #8d6f77}html[data-palette=plum].dark{--bg: #1f1a1b;--bg-raised: #292223;--ink: #eae2e4;--ink-2: #ada0a4;--ink-3: #7c6e73;--rule: #3a3133;--accent: #d98aa3;--accent-hover: #e39fb5;--accent-bg: #2b2023;--mist-pink: #2d2527;--sea-salt: #2f2729;--caramel: #a08890}html[data-palette=graphite]{--bg: #f7f7f6;--bg-raised: #eeedeb;--ink: #262626;--ink-2: #6e6e6c;--ink-3: #ababa8;--rule: #e0e0de;--accent: #3f3f3e;--accent-hover: #262626;--accent-bg: #ececea;--mist-pink: #e9e9e7;--sea-salt: #e5e5e3;--caramel: #7b7b78}html[data-palette=graphite].dark{--bg: #1b1b1a;--bg-raised: #252524;--ink: #e8e8e6;--ink-2: #a5a5a2;--ink-3: #757572;--rule: #353534;--accent: #c9c9c5;--accent-hover: #d8d8d4;--accent-bg: #262625;--mist-pink: #2a2a29;--sea-salt: #2c2c2b;--caramel: #8f8f8c}html[data-palette=cocoa]{--bg: #f8f4f0;--bg-raised: #f0e8e1;--ink: #2e2722;--ink-2: #786c62;--ink-3: #b3a89d;--rule: #e7ddd3;--accent: #9a6b4f;--accent-hover: #835539;--accent-bg: #f5e9e0;--mist-pink: #ecdfd4;--sea-salt: #e6d9cd;--caramel: #8a6f5b}html[data-palette=cocoa].dark{--bg: #1e1a17;--bg-raised: #282320;--ink: #eae4dd;--ink-2: #aca199;--ink-3: #7b7169;--rule: #3a332e;--accent: #cd9878;--accent-hover: #daa98c;--accent-bg: #2a211c;--mist-pink: #2d2721;--sea-salt: #2f2923;--caramel: #a08d7c}html[data-palette=azure]{--bg: #f4f8fb;--bg-raised: #e9f1f7;--ink: #223038;--ink-2: #62737e;--ink-3: #a0b0ba;--rule: #dbe7ee;--accent: #3b82c4;--accent-hover: #2e6ba5;--accent-bg: #e7f1f9;--mist-pink: #e0ebf2;--sea-salt: #d8e6ef;--caramel: #6d8090}html[data-palette=azure].dark{--bg: #172026;--bg-raised: #202a31;--ink: #e3eaef;--ink-2: #99a8b3;--ink-3: #6b7a85;--rule: #2e3a42;--accent: #74b3e0;--accent-hover: #88c1e8;--accent-bg: #1d2830;--mist-pink: #222c34;--sea-salt: #243038;--caramel: #8496a3}:root{--font-sans: "LXGW WenKai", "Noto Serif SC", "Source Han Serif SC", Georgia, serif;--font-body: "LXGW WenKai", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono: "JetBrains Mono", "Fira Code", monospace;--text-xs: clamp(.75rem, .7rem + .2vw, .8rem);--text-sm: clamp(.875rem, .82rem + .2vw, .95rem);--text-base: clamp(1rem, .94rem + .25vw, 1.05rem);--text-md: clamp(1.1rem, 1.02rem + .3vw, 1.2rem);--text-lg: clamp(1.2rem, 1.1rem + .45vw, 1.3rem);--text-xl: clamp(1.35rem, 1.2rem + .7vw, 1.6rem);--text-2xl: clamp(1.65rem, 1.4rem + 1.05vw, 2rem);--text-3xl: clamp(1.95rem, 1.6rem + 1.65vw, 2.4rem);--text-4xl: clamp(2.3rem, 1.8rem + 2.25vw, 3.2rem);--text-5xl: clamp(2.8rem, 2rem + 3.5vw, 4rem);--leading-none: 1;--leading-tight: 1.2;--leading-snug: 1.35;--leading-normal: 1.6;--leading-relaxed: 1.75;--leading-loose: 2;--tracking-tight: -.02em;--tracking-normal: 0;--tracking-wide: .04em;--tracking-wider: .08em;--tracking-widest: .12em}h1,h2,h3,h4,h5,h6{font-family:var(--font-sans);font-weight:700;line-height:var(--leading-tight);letter-spacing:var(--tracking-tight);color:var(--ink);margin-bottom:var(--space-sm)}h1{font-size:var(--text-3xl);margin-bottom:var(--space-lg)}h2{font-size:var(--text-2xl);padding-left:var(--space-md);border-left:3px solid var(--accent);margin-bottom:var(--space-sm)}h3{font-size:var(--text-xl);position:relative;padding-left:var(--space-lg)}h3:before{content:"";display:block;position:absolute;left:0;top:50%;transform:translateY(-50%);width:6px;height:6px;border-radius:50%;background:var(--accent);opacity:.6}h4{font-size:var(--text-md);color:var(--ink-2)}h5{font-size:var(--text-base);color:var(--ink-2)}h6{font-size:var(--text-sm);color:var(--ink-3)}.wi-post__body :is(h1,h2,h3,h4,h5,h6),.wi-page__body :is(h1,h2,h3,h4,h5,h6),.wi-messageboard__body :is(h1,h2,h3,h4,h5,h6){font-family:var(--font-sans);font-weight:700;line-height:1.35;letter-spacing:-.01em;color:var(--ink);scroll-margin-top:88px;text-wrap:balance;padding-left:0;border-left:0}.wi-post__body :is(h1,h2,h3,h4,h5,h6):before,.wi-post__body :is(h1,h2,h3,h4,h5,h6):after,.wi-page__body :is(h1,h2,h3,h4,h5,h6):before,.wi-page__body :is(h1,h2,h3,h4,h5,h6):after,.wi-messageboard__body :is(h1,h2,h3,h4,h5,h6):before,.wi-messageboard__body :is(h1,h2,h3,h4,h5,h6):after{content:none}.wi-post__body h1,.wi-page__body h1,.wi-messageboard__body h1{font-size:clamp(1.6rem,1.4rem + 1vw,2rem);margin-top:2em;margin-bottom:.7em}.wi-post__body h2,.wi-page__body h2,.wi-messageboard__body h2{font-size:clamp(1.42rem,1.3rem + .6vw,1.68rem);margin-top:1.9em;margin-bottom:.65em}.wi-post__body h3,.wi-page__body h3,.wi-messageboard__body h3{font-size:clamp(1.24rem,1.16rem + .4vw,1.4rem);margin-top:1.7em;margin-bottom:.6em}.wi-post__body h4,.wi-page__body h4,.wi-messageboard__body h4{font-size:clamp(1.1rem,1.05rem + .25vw,1.2rem);margin-top:1.5em;margin-bottom:.5em}.wi-post__body h5,.wi-page__body h5,.wi-messageboard__body h5{font-size:1.04rem;margin-top:1.4em;margin-bottom:.45em}.wi-post__body h6,.wi-page__body h6,.wi-messageboard__body h6{font-size:.98rem;font-weight:600;color:var(--ink-3);margin-top:1.4em;margin-bottom:.45em}.wi-post__body :is(h1,h2,h3,h4,h5,h6)+:is(h1,h2,h3,h4,h5,h6),.wi-page__body :is(h1,h2,h3,h4,h5,h6)+:is(h1,h2,h3,h4,h5,h6),.wi-messageboard__body :is(h1,h2,h3,h4,h5,h6)+:is(h1,h2,h3,h4,h5,h6){margin-top:.6em}.wi-post__body>:is(h1,h2,h3,h4,h5,h6):first-child,.wi-page__body>:is(h1,h2,h3,h4,h5,h6):first-child,.wi-messageboard__body>:is(h1,h2,h3,h4,h5,h6):first-child{margin-top:0}.wi-post__body p,.wi-page__body p,.wi-messageboard__body p{margin-block-end:1.2em}.wi-post__body *,.wi-page__body *,.wi-messageboard__body *{max-width:100%}.wi-post__body :is(pre,code,table),.wi-page__body :is(pre,code,table),.wi-messageboard__body :is(pre,code,table){overflow-x:auto}.wi-post__body pre,.wi-page__body pre,.wi-messageboard__body pre{margin-block:1.5em;padding:1.25em;border-radius:12px;border:1px solid var(--rule);background:var(--bg-raised);font-size:.875em;line-height:1.6}.wi-post__body pre code,.wi-page__body pre code,.wi-messageboard__body pre code{background:none;padding:0;border:none;border-radius:0;font-size:inherit}.wi-post__body code,.wi-page__body code,.wi-messageboard__body code{background:var(--bg-raised);padding:.15em .4em;border-radius:8px;font-size:.875em;border:1px solid var(--rule)}.wi-post__body blockquote,.wi-page__body blockquote,.wi-messageboard__body blockquote{margin-block:2em}.wi-post__body :is(ul,ol),.wi-page__body :is(ul,ol),.wi-messageboard__body :is(ul,ol){padding-inline-start:1.5em;margin-block-end:1.2em}.wi-post__body li,.wi-page__body li,.wi-messageboard__body li{margin-block-end:.6em}.wi-post__body a,.wi-page__body a,.wi-messageboard__body a{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.2em}.wi-post__body :is(.ai-summary,.abstract),.wi-post__body [class*=ai-summary],.wi-post__body [class*=ai-abstract],.wi-post__body [class*=likcc-article-summary],.wi-page__body :is(.ai-summary,.abstract),.wi-page__body [class*=ai-summary],.wi-page__body [class*=ai-abstract],.wi-page__body [class*=likcc-article-summary],.wi-messageboard__body :is(.ai-summary,.abstract),.wi-messageboard__body [class*=ai-summary],.wi-messageboard__body [class*=ai-abstract],.wi-messageboard__body [class*=likcc-article-summary]{margin-bottom:15px}.wi-post__body img,.wi-post__body video,.wi-page__body img,.wi-page__body video,.wi-messageboard__body img,.wi-messageboard__body video{display:block;max-width:100%;height:auto;margin-inline:auto}.wi-post__body img,.wi-post__body video,.wi-page__body img,.wi-page__body video,.wi-messageboard__body img,.wi-messageboard__body video{border-radius:12px;margin-block:1.5em}.wi-post__body img[role=presentation],.wi-post__body img[aria-hidden=true],.wi-post__body :is(.emoji,.icon,.avatar,.badge),.wi-page__body img[role=presentation],.wi-page__body img[aria-hidden=true],.wi-page__body :is(.emoji,.icon,.avatar,.badge),.wi-messageboard__body img[role=presentation],.wi-messageboard__body img[aria-hidden=true],.wi-messageboard__body :is(.emoji,.icon,.avatar,.badge){display:inline;margin-inline:0;border-radius:0}.wi-post__body [align=center],.wi-post__body [style*="text-align:center"],.wi-post__body [style*="text-align: center"],.wi-page__body [align=center],.wi-page__body [style*="text-align:center"],.wi-page__body [style*="text-align: center"],.wi-messageboard__body [align=center],.wi-messageboard__body [style*="text-align:center"],.wi-messageboard__body [style*="text-align: center"]{text-align:center}.wi-post__body iframe,.wi-page__body iframe,.wi-messageboard__body iframe{display:block;max-width:100%;margin-inline:auto;border:none}.wi-post__body figure,.wi-page__body figure,.wi-messageboard__body figure{display:block;max-width:100%;margin-inline:auto;margin-block:1.5em;text-align:center}.wi-post__body figure :is(img,video),.wi-page__body figure :is(img,video),.wi-messageboard__body figure :is(img,video){margin-block:0}.wi-post__body figcaption,.wi-page__body figcaption,.wi-messageboard__body figcaption{color:var(--ink-3);font-size:.875rem;line-height:1.6;text-align:center;margin-top:.6em}.wi-post__body .wi-lightgallery-item,.wi-page__body .wi-lightgallery-item,.wi-messageboard__body .wi-lightgallery-item{display:block;width:fit-content;max-width:100%;margin-inline:auto;border-radius:12px;line-height:0}.wi-post__body .wi-lightgallery-item>img,.wi-page__body .wi-lightgallery-item>img,.wi-messageboard__body .wi-lightgallery-item>img{margin-block:0}.wi-post__body .wi-embed,.wi-page__body .wi-embed,.wi-messageboard__body .wi-embed{position:relative;width:100%;max-width:100%;margin-inline:auto;margin-block:1.5em;overflow:hidden;border-radius:12px;background:var(--bg-raised)}.wi-post__body .wi-embed>:is(iframe,video,embed,object),.wi-page__body .wi-embed>:is(iframe,video,embed,object),.wi-messageboard__body .wi-embed>:is(iframe,video,embed,object){position:absolute;inset:0;width:100%;height:100%;margin:0;border-radius:0;border:0}.wi-post__body .wi-media-loading,.wi-page__body .wi-media-loading,.wi-messageboard__body .wi-media-loading{filter:blur(20px);opacity:.6}.wi-post__body .wi-media-loaded,.wi-page__body .wi-media-loaded,.wi-messageboard__body .wi-media-loaded{filter:blur(0);opacity:1}@media(max-width:768px){.wi-post__body h1,.wi-page__body h1,.wi-messageboard__body h1{font-size:1.4rem}.wi-post__body h2,.wi-page__body h2,.wi-messageboard__body h2{font-size:1.28rem}.wi-post__body h3,.wi-page__body h3,.wi-messageboard__body h3{font-size:1.16rem}.wi-post__body h4,.wi-page__body h4,.wi-messageboard__body h4{font-size:1.05rem}.wi-post__body h5,.wi-page__body h5,.wi-messageboard__body h5{font-size:1rem}.wi-post__body h6,.wi-page__body h6,.wi-messageboard__body h6{font-size:.95rem}.wi-post__body p,.wi-page__body p,.wi-messageboard__body p{margin-block-end:1.35em}.wi-post__body pre,.wi-page__body pre,.wi-messageboard__body pre{font-size:.9em;padding:1em}.wi-post__body code,.wi-page__body code,.wi-messageboard__body code{font-size:.9em}.wi-post__body img,.wi-post__body video,.wi-page__body img,.wi-page__body video,.wi-messageboard__body img,.wi-messageboard__body video{margin-block:1.2em}.wi-post__body img,.wi-post__body video,.wi-post__body .wi-lightgallery-item,.wi-post__body figure,.wi-page__body img,.wi-page__body video,.wi-page__body .wi-lightgallery-item,.wi-page__body figure,.wi-messageboard__body img,.wi-messageboard__body video,.wi-messageboard__body .wi-lightgallery-item,.wi-messageboard__body figure{max-width:100%}}@media(max-width:480px){.wi-post__body h1,.wi-page__body h1,.wi-messageboard__body h1{font-size:1.32rem}.wi-post__body h2,.wi-page__body h2,.wi-messageboard__body h2{font-size:1.22rem}.wi-post__body h3,.wi-page__body h3,.wi-messageboard__body h3{font-size:1.12rem}}:root{--space-xs: .25rem;--space-sm: .5rem;--space-md: 1rem;--space-lg: 1.5rem;--space-xl: 2rem;--space-2xl: 3rem;--space-3xl: 4rem;--space-4xl: 6rem;--container-sm: 640px;--container-md: 768px;--container-lg: 1024px;--container-xl: 1200px;--content-max: 800px;--section-spacing: clamp(3rem, 2rem + 3vw, 6rem)}:root{--ease-out-expo: cubic-bezier(.16, 1, .3, 1);--ease-out-quart: cubic-bezier(.25, 1, .5, 1);--ease-in-out-cubic: cubic-bezier(.65, 0, .35, 1);--duration-fast: .15s;--duration-normal: .3s;--duration-slow: .5s;--duration-breath: 3s}@keyframes breathe{0%,to{opacity:.4;transform:scale(1)}50%{opacity:.7;transform:scale(1.08)}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes scrollHint{0%,to{opacity:.4;transform:translateY(0)}50%{opacity:1;transform:translateY(8px)}}.halo-comment-widget{background:var(--glass-bg);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid var(--glass-border);border-radius:16px;padding:var(--space-md);margin-top:var(--space-xl);width:100%;max-width:600px;margin-inline:auto}.halo-comment-widget .comment-item{background:var(--bg-raised);border:1px solid var(--rule);border-radius:12px;padding:var(--space-sm);margin-bottom:var(--space-xs);transition:box-shadow var(--duration-normal) var(--ease-out-expo),transform var(--duration-normal) var(--ease-out-expo)}.halo-comment-widget .comment-item:hover{box-shadow:var(--shadow-sm);transform:translateY(-1px)}.halo-comment-widget .comment-reply-item{background:var(--bg);border:1px solid var(--rule);border-radius:12px;padding:var(--space-xs) var(--space-sm);margin-top:var(--space-xs);transition:box-shadow var(--duration-normal) var(--ease-out-expo),transform var(--duration-normal) var(--ease-out-expo)}.halo-comment-widget .comment-reply-item:hover{box-shadow:var(--shadow-sm);transform:translateY(-1px)}.halo-comment-widget .comment-header{display:flex;align-items:center;gap:var(--space-xs);margin-bottom:var(--space-xs)}.halo-comment-widget .comment-avatar{width:24px;height:24px;border-radius:9999px;box-shadow:var(--shadow-sm)}.halo-comment-widget .comment-author{font-weight:600;color:var(--ink);font-size:var(--text-xs)}.halo-comment-widget .comment-time{font-size:var(--text-xs);color:var(--ink-3);letter-spacing:var(--tracking-wide)}.halo-comment-widget .comment-content{font-size:var(--text-sm);line-height:var(--leading-relaxed);color:var(--ink);margin-bottom:var(--space-xs)}.halo-comment-widget .comment-form{background:var(--bg-raised);border:1px solid var(--rule);border-radius:12px;padding:var(--space-sm);margin-bottom:var(--space-md)}.halo-comment-widget .comment-input,.halo-comment-widget .comment-textarea{width:100%;padding:var(--space-sm) var(--space-md);background:var(--bg);border:1px solid var(--rule);border-radius:8px;color:var(--ink);font-family:var(--font-body);font-size:var(--text-sm);transition:border-color var(--duration-fast) var(--ease-out-quart),box-shadow var(--duration-fast) var(--ease-out-quart)}.halo-comment-widget .comment-input:focus,.halo-comment-widget .comment-textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 15%,transparent)}.halo-comment-widget .comment-input::placeholder,.halo-comment-widget .comment-textarea::placeholder{color:var(--ink-3)}.halo-comment-widget .comment-textarea{min-height:80px;resize:vertical}.halo-comment-widget .comment-button{display:inline-flex;align-items:center;justify-content:center;padding:var(--space-sm) var(--space-lg);background:var(--accent);color:var(--bg);border:none;border-radius:8px;font-family:var(--font-body);font-size:var(--text-sm);font-weight:600;cursor:pointer;transition:background var(--duration-fast) var(--ease-out-quart),transform var(--duration-fast) var(--ease-out-quart),box-shadow var(--duration-fast) var(--ease-out-quart)}.halo-comment-widget .comment-button:hover{background:var(--accent-hover);transform:translateY(-1px);box-shadow:var(--shadow-md)}.halo-comment-widget .comment-button:active{transform:translateY(0)}.halo-comment-widget .comment-pagination{display:flex;justify-content:center;align-items:center;gap:var(--space-md);margin-top:var(--space-lg)}.halo-comment-widget .comment-pagination-button{padding:var(--space-xs) var(--space-md);background:var(--bg-raised);border:1px solid var(--rule);border-radius:8px;color:var(--ink-2);font-size:var(--text-sm);cursor:pointer;transition:border-color var(--duration-fast) var(--ease-out-quart),color var(--duration-fast) var(--ease-out-quart)}.halo-comment-widget .comment-pagination-button:hover{border-color:var(--accent);color:var(--accent)}.halo-comment-widget .comment-reply-button{font-size:var(--text-xs);color:var(--ink-3);cursor:pointer;transition:color var(--duration-fast) var(--ease-out-quart)}.halo-comment-widget .comment-reply-button:hover{color:var(--accent)}.halo-comment-widget .comment-smiley-button{background:none;border:none;cursor:pointer;font-size:var(--text-lg);transition:transform var(--duration-fast) var(--ease-out-quart)}.halo-comment-widget .comment-smiley-button:hover{transform:scale(1.2)}html.dark .halo-comment-widget .comment-input:focus,html.dark .halo-comment-widget .comment-textarea:focus{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 15%,transparent)}html.dark .halo-comment-widget .comment-button:hover{box-shadow:var(--shadow-md)}[data-comment-style=minimal] .halo-comment-widget{background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;border:none;border-top:1px solid var(--rule);border-radius:0;padding:var(--space-lg) 0}[data-comment-style=minimal] .halo-comment-widget .comment-item{background:transparent;border:none;border-bottom:1px solid var(--rule);border-radius:0;padding:var(--space-md) 0}[data-comment-style=minimal] .halo-comment-widget .comment-item:hover{box-shadow:none;transform:none}[data-comment-style=minimal] .halo-comment-widget .comment-reply-item{background:transparent;border:none;border-radius:0;padding:var(--space-xs) 0}[data-comment-style=minimal] .halo-comment-widget .comment-reply-item:hover{box-shadow:none;transform:none}[data-comment-style=minimal] .halo-comment-widget .comment-form{background:transparent;border:1px solid var(--rule);border-radius:12px;padding:var(--space-md)}[data-show-avatar=false] .halo-comment-widget .comment-avatar{display:none}.halo-search-widget .search-modal{background:var(--glass-bg);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);border:1px solid var(--glass-border);border-radius:24px;box-shadow:var(--shadow-lg);overflow:hidden}.halo-search-widget .search-input{width:100%;padding:var(--space-lg) var(--space-xl);background:transparent;border:none;border-bottom:1px solid var(--rule);color:var(--ink);font-family:var(--font-body);font-size:var(--text-lg);outline:none;transition:border-color var(--duration-fast) var(--ease-out-quart)}.halo-search-widget .search-input::placeholder{color:var(--ink-3)}.halo-search-widget .search-input:focus{border-bottom-color:var(--accent)}.halo-search-widget .search-result-item{padding:var(--space-md) var(--space-xl);border-bottom:1px solid var(--rule);cursor:pointer;transition:background var(--duration-fast) var(--ease-out-quart),padding-left var(--duration-fast) var(--ease-out-quart)}.halo-search-widget .search-result-item:hover{background:var(--accent-bg);padding-left:calc(var(--space-xl) + 4px)}.halo-search-widget .search-result-item:last-child{border-bottom:none}.halo-search-widget .search-result-title{font-size:var(--text-md);font-weight:600;color:var(--ink);margin-bottom:var(--space-xs)}.halo-search-widget .search-result-content{font-size:var(--text-sm);color:var(--ink-2);line-height:var(--leading-relaxed);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.halo-search-widget .search-result-label{font-size:var(--text-xs);color:var(--ink-3);letter-spacing:var(--tracking-wide)}.halo-search-widget .search-empty{padding:var(--space-3xl) var(--space-xl);text-align:center;color:var(--ink-3);font-size:var(--text-sm)}.halo-search-widget .search-hint{font-size:var(--text-xs);color:var(--ink-3);padding:var(--space-sm) var(--space-xl);border-top:1px solid var(--rule);text-align:center}.halo-search-widget .search-highlight{color:var(--accent);font-weight:600}.halo-search-widget .search-backdrop{background:#2c242066;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}html.dark .halo-search-widget .search-backdrop{background:#00000080}html.dark .halo-search-widget .search-result-item:hover{background:var(--accent-bg)}.lg-backdrop{background-color:#120e0cf5}.lg-toolbar{background:#ffffff14;backdrop-filter:blur(24px) saturate(1.2);-webkit-backdrop-filter:blur(24px) saturate(1.2);border-bottom:none;padding:4px 12px;height:44px}.lg-toolbar .lg-icon{color:#ffffffb3;width:36px;height:36px;font-size:17px;border-radius:8px;transition:all .2s ease;padding:0!important;line-height:36px!important}.lg-toolbar .lg-icon:before{vertical-align:middle!important;line-height:36px!important}.lg-toolbar .lg-icon:hover{color:#fff;background:#ffffff1f}.lg-inner{top:44px!important;bottom:0!important;transition:bottom .35s cubic-bezier(.16,1,.3,1),transform .35s cubic-bezier(.16,1,.3,1);will-change:bottom,transform}.lg-actions .lg-next,.lg-actions .lg-prev{background:#ffffff14;backdrop-filter:blur(16px) saturate(1.2);-webkit-backdrop-filter:blur(16px) saturate(1.2);color:#ffffffb3;border-radius:14px;width:48px;height:48px;font-size:24px;transition:all .25s cubic-bezier(.16,1,.3,1);border:1px solid rgba(255,255,255,.06)}.lg-actions .lg-next:hover,.lg-actions .lg-prev:hover{color:#fff;background:#ffffff26;border-color:#ffffff1f;transform:scale(1.05)}.lg-sub-html{position:absolute;left:0;right:0;bottom:0;background:linear-gradient(to top,rgba(18,14,12,.8) 0%,transparent 100%);color:#ffffffd9;font-family:var(--font-body);font-size:13px;letter-spacing:.02em;padding:48px 16px 12px;transition:bottom .35s cubic-bezier(.16,1,.3,1)}.wi-lg-caption{font-size:13px;color:#ffffffd9;margin-bottom:6px}.wi-lg-exif{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}.wi-lg-exif__camera,.wi-lg-exif__lens{font-size:11px;color:#ffffff8c;letter-spacing:.03em}.wi-lg-exif__params{display:flex;flex-wrap:wrap;gap:4px}.wi-lg-exif__aperture,.wi-lg-exif__shutter,.wi-lg-exif__iso,.wi-lg-exif__focal{display:inline-flex;align-items:center;font-size:10px;font-weight:500;color:#ffffffb3;background:#ffffff14;border-radius:4px;padding:2px 6px;letter-spacing:.04em;font-variant-numeric:tabular-nums;line-height:1.4}.lg-thumb-outer{background:#120e0cd9;backdrop-filter:blur(24px) saturate(1.2);-webkit-backdrop-filter:blur(24px) saturate(1.2);border-top:1px solid rgba(255,255,255,.06);padding:8px 0}.lg-thumb-item{border-color:transparent;border-radius:8px;overflow:hidden;border-width:2px;transition:all .25s cubic-bezier(.16,1,.3,1);opacity:.5;cursor:pointer}.lg-thumb-item.active{border-color:var(--accent)!important;opacity:1;transform:scale(1.05)}.lg-thumb-item:hover{border-color:#ffffff4d!important;opacity:.85}.lg-counter{color:#ffffff80;font-size:12px;font-family:var(--font-body);letter-spacing:.08em;font-variant-numeric:tabular-nums}.lg-progress-bar{height:2px;top:0}.lg-progress-bar .lg-progress{background:linear-gradient(90deg,var(--accent),var(--accent-hover));height:2px;border-radius:1px}.lg-outer .lg-thumb-outer{transform:translateY(100%);transition:transform .35s cubic-bezier(.16,1,.3,1);will-change:transform}.lg-outer.wi-thumb-shown .lg-thumb-outer{transform:translateY(0)}.lg-outer.wi-thumb-shown .lg-inner{bottom:100px!important;transition:bottom .35s cubic-bezier(.16,1,.3,1)}.lg-outer.wi-thumb-shown .lg-sub-html{bottom:100px;transition:bottom .35s cubic-bezier(.16,1,.3,1)}.lg-outer .lg-item{transition:opacity .3s ease,transform .3s ease}.lg-outer .lg-image{transition:opacity .25s ease}.lg-outer .lg-item.lg-complete .lg-image{opacity:1}.lg-outer .lg-item .lg-image{opacity:0}html.dark .lg-backdrop{background-color:#0a0806f7}html.dark .lg-toolbar{background:#ffffff0f}html.dark .lg-toolbar .lg-icon{color:#fff9}html.dark .lg-toolbar .lg-icon:hover{color:#fff;background:#ffffff1a}html.dark .lg-actions .lg-next,html.dark .lg-actions .lg-prev{background:#ffffff0f;color:#fff9;border-color:#ffffff0a}html.dark .lg-actions .lg-next:hover,html.dark .lg-actions .lg-prev:hover{color:#fff;background:#ffffff1f;border-color:#ffffff14}html.dark .lg-sub-html{background:linear-gradient(to top,rgba(10,8,6,.85) 0%,transparent 100%);color:#ffffffbf}html.dark .lg-thumb-outer{background:#0a0806e0;border-top-color:#ffffff0a}html.dark .lg-thumb-item{opacity:.4}html.dark .lg-thumb-item.active{border-color:var(--accent)!important;opacity:1}html.dark .lg-thumb-item:hover{border-color:#fff3!important;opacity:.75}html.dark .lg-counter{color:#fff6}html.dark .wi-lg-caption{color:#ffffffbf}html.dark .wi-lg-exif__camera,html.dark .wi-lg-exif__lens{color:#ffffff73}html.dark .wi-lg-exif__aperture,html.dark .wi-lg-exif__shutter,html.dark .wi-lg-exif__iso,html.dark .wi-lg-exif__focal{color:#fff9;background:#ffffff0f}@media(max-width:768px){.lg-toolbar{padding:2px 8px;height:40px}.lg-toolbar .lg-icon{width:32px;height:32px;font-size:15px;line-height:32px!important}.lg-toolbar .lg-icon:before{line-height:32px!important}.lg-inner{top:40px!important;bottom:0!important;transition:bottom .35s cubic-bezier(.16,1,.3,1)}.lg-actions .lg-next,.lg-actions .lg-prev{width:40px;height:40px;font-size:20px;border-radius:12px}.lg-sub-html{font-size:12px;padding:36px 12px 8px}.wi-lg-caption{font-size:12px;margin-bottom:4px}.wi-lg-exif{gap:4px 8px}.wi-lg-exif__camera,.wi-lg-exif__lens{font-size:10px}.wi-lg-exif__aperture,.wi-lg-exif__shutter,.wi-lg-exif__iso,.wi-lg-exif__focal{font-size:9px;padding:1px 5px}.lg-outer.wi-thumb-shown .lg-inner{bottom:80px!important}.lg-outer.wi-thumb-shown .lg-sub-html{bottom:80px}.lg-sub-html{padding:32px 12px 8px}.lg-outer .lg-thumb-outer{padding:6px 0}.lg-thumb-item{border-radius:6px}}@media(max-width:639px){.lg-toolbar .lg-icon{width:28px;height:28px;font-size:14px;line-height:28px!important}.lg-toolbar .lg-icon:before{line-height:28px!important}.lg-actions .lg-next,.lg-actions .lg-prev{width:44px;height:44px;font-size:20px;border-radius:12px}.lg-sub-html{font-size:11px;padding:28px 10px 6px}.wi-lg-exif{display:none}.lg-outer.wi-thumb-shown .lg-inner{bottom:64px!important}.lg-outer.wi-thumb-shown .lg-sub-html{bottom:64px}}:root{--xhhao-com-text-1: var(--ink);--xhhao-com-text-2: var(--ink-2);--xhhao-com-bg: var(--bg);--xhhao-com-bg-card: var(--bg-raised);--xhhao-com-bg-2: var(--bg-raised);--xhhao-com-border: var(--rule);--xhhao-com-primary: var(--accent);--xhhao-com-shadow: rgb(15 23 42 / .08)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0;min-width:0}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;text-size-adjust:100%;hanging-punctuation:first last}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{margin:0;padding:0;font-family:var(--font-body);font-size:var(--text-base);line-height:var(--leading-normal);color:var(--ink);background-color:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;word-wrap:break-word;overflow-wrap:break-word;overflow-x:hidden;tab-size:4}::selection{background-color:var(--accent);color:var(--bg)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--caramel);border-radius:9999px}::-webkit-scrollbar-thumb:hover{background:var(--accent)}a{color:var(--accent);text-decoration:none;transition:color var(--duration-fast) var(--ease-out-quart)}a:hover{color:var(--accent-hover)}a:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:8px}img,video,svg{max-width:100%;height:auto}.wi-main img,.wi-main video{display:block}img{border-radius:12px}p{margin-block-end:var(--space-md)}blockquote{margin-block:var(--space-lg);padding:var(--space-md) var(--space-lg);border-left:3px solid var(--accent);color:var(--ink-2);font-size:var(--text-md);line-height:var(--leading-relaxed);background:var(--bg-raised);border-radius:0 8px 8px 0}pre{padding:var(--space-lg);border-radius:12px;overflow-x:auto;background:var(--ink);color:#f8f8f2;font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--leading-relaxed);tab-size:2;scrollbar-width:none;-ms-overflow-style:none}pre::-webkit-scrollbar{display:none}code{font-family:var(--font-mono);font-size:.88em;padding:.15em .4em;background:var(--bg-raised);border:1px solid var(--rule);border-radius:8px}pre>code{all:unset;font-size:.9em;color:inherit}hr{margin-block:var(--space-2xl);border:none;border-top:1px solid var(--rule)}table{width:100%;border-collapse:collapse;font-size:var(--text-sm);overflow-x:auto;display:block}table th,table td{padding:var(--space-sm) var(--space-md);border:1px solid var(--rule);text-align:left}table th{background:var(--bg-raised);font-weight:600;color:var(--ink)}table td{color:var(--ink-2)}.wi-container{width:100%;max-width:1200px;margin-inline:auto;padding-inline:clamp(1rem,3vw,2rem)}.wi-section{padding-block:var(--section-spacing)}.wi-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.wi-main{padding-top:100px;padding-bottom:0;position:relative;z-index:1;background-color:var(--bg);width:100%;overflow-x:hidden;overflow-x:clip}.wi-main--wide.wi-main--home{padding-top:0;padding-bottom:0;padding-inline:0;background-color:transparent;max-width:100%;margin:0;overflow-x:hidden;overflow-x:clip;z-index:auto}.wi-content-wrap{max-width:800px;margin:0 auto;padding-inline:clamp(1rem,3vw,2rem);overflow-x:hidden;overflow-x:clip}.wi-content-wrap--wide{max-width:1200px}.wi-main--wide{max-width:1400px;width:100%;margin:0 auto}@media(max-width:768px){body{font-size:var(--text-base)}p{margin-block-end:1.2em}.wi-content-wrap{padding-inline:1.25rem}blockquote{padding:var(--space-sm) var(--space-md);font-size:var(--text-base)}pre{padding:var(--space-md);font-size:var(--text-sm)}}@media(max-width:480px){body{font-size:var(--text-base)}.wi-content-wrap{padding-inline:1rem}blockquote{padding:var(--space-sm) var(--space-sm);font-size:var(--text-base)}table{font-size:var(--text-sm)}th,td{padding:var(--space-sm) var(--space-sm)}}.theme-toggle[data-astro-cid-dz5h74bc]{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:34px;height:34px;padding:0;border:none;border-radius:8px;background:transparent;color:var(--ink-2);cursor:pointer;transition:background .15s ease,color .15s ease}.theme-toggle[data-astro-cid-dz5h74bc]:hover{background:var(--bg-raised);color:var(--ink)}.wi-navbar-wrapper[data-astro-cid-5blmo7yk]{position:fixed;top:0;left:0;right:0;z-index:100;display:flex;justify-content:center;padding:.75rem 1rem;pointer-events:none;transition:transform .35s cubic-bezier(.16,1,.3,1),padding var(--duration-normal) var(--ease-out-expo)}.wi-navbar--hidden[data-astro-cid-5blmo7yk]{transform:translateY(-100%)}.wi-navbar__capsule[data-astro-cid-5blmo7yk]{display:flex;align-items:center;gap:.5rem;width:100%;height:56px;padding:0 1.5rem;margin:0 auto;pointer-events:auto;transition:background var(--duration-normal) var(--ease-out-expo),box-shadow var(--duration-normal) var(--ease-out-expo),transform var(--duration-normal) var(--ease-out-expo)}.wi-navbar--glass[data-astro-cid-5blmo7yk] .wi-navbar__capsule[data-astro-cid-5blmo7yk]{border-radius:9999px;background:var(--glass-bg);backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);border:1px solid var(--glass-border);box-shadow:var(--shadow-md);max-width:900px}.wi-navbar--glass[data-astro-cid-5blmo7yk].wi-navbar--scrolled .wi-navbar__capsule[data-astro-cid-5blmo7yk]{background:var(--bg-overlay);box-shadow:var(--shadow-lg);transform:scale(.98)}.wi-navbar--minimal[data-astro-cid-5blmo7yk]{padding:0}.wi-navbar--minimal[data-astro-cid-5blmo7yk] .wi-navbar__capsule[data-astro-cid-5blmo7yk]{border-radius:0;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;border:none;border-bottom:1px solid transparent;box-shadow:none;max-width:100%;padding:0 2rem;transition:background .3s ease,border-color .3s ease}.wi-navbar--minimal[data-astro-cid-5blmo7yk].wi-navbar--scrolled .wi-navbar__capsule[data-astro-cid-5blmo7yk]{background:var(--bg);border-bottom-color:var(--rule)}.wi-navbar--float[data-astro-cid-5blmo7yk] .wi-navbar__capsule[data-astro-cid-5blmo7yk]{border-radius:16px;background:var(--glass-bg);backdrop-filter:blur(24px) saturate(180%);-webkit-backdrop-filter:blur(24px) saturate(180%);border:1px solid var(--glass-border);box-shadow:var(--shadow-lg);max-width:800px;transition:transform .3s cubic-bezier(.16,1,.3,1),background .3s ease,box-shadow .3s ease}.wi-navbar--float[data-astro-cid-5blmo7yk].wi-navbar--scrolled .wi-navbar__capsule[data-astro-cid-5blmo7yk]{transform:scale(.96);box-shadow:var(--shadow-md)}.wi-navbar__brand[data-astro-cid-5blmo7yk]{display:flex;align-items:center;gap:.5rem;text-decoration:none;flex-shrink:0}.wi-navbar__logo[data-astro-cid-5blmo7yk]{height:32px;width:auto;border-radius:8px;object-fit:contain}.wi-navbar__logo--square[data-astro-cid-5blmo7yk]{border-radius:0}.wi-navbar__logo--rounded[data-astro-cid-5blmo7yk]{border-radius:8px}.wi-navbar__logo--circle[data-astro-cid-5blmo7yk]{border-radius:50%}.wi-navbar__title[data-astro-cid-5blmo7yk]{font-family:var(--font-sans);font-weight:700;font-size:var(--text-md);color:var(--ink);letter-spacing:var(--tracking-tight);white-space:nowrap;transition:color var(--duration-fast) var(--ease-out-quart)}.wi-navbar__brand[data-astro-cid-5blmo7yk]:hover .wi-navbar__title[data-astro-cid-5blmo7yk]{color:var(--accent)}.wi-navbar__nav[data-astro-cid-5blmo7yk]{display:flex;align-items:center;gap:.25rem;flex:1;justify-content:center;min-width:0}.wi-navbar__item[data-astro-cid-5blmo7yk]{position:relative;display:inline-flex}.wi-navbar__submenu[data-astro-cid-5blmo7yk]{position:absolute;top:100%;left:50%;transform:translate(-50%) translateY(6px);display:flex;flex-direction:column;min-width:168px;padding:6px;margin:0;list-style:none;border-radius:var(--radius-md, 12px);background:var(--bg-raised);border:1px solid var(--rule);box-shadow:var(--shadow-lg);opacity:0;visibility:hidden;transition:opacity .18s ease,transform .18s var(--ease-out-quart),visibility .18s;z-index:101}.wi-navbar__item--has-children[data-astro-cid-5blmo7yk]:after{content:"";position:absolute;left:0;right:0;top:100%;height:10px}.wi-navbar__item--has-children[data-astro-cid-5blmo7yk]:hover .wi-navbar__submenu[data-astro-cid-5blmo7yk],.wi-navbar__item--has-children[data-astro-cid-5blmo7yk]:focus-within .wi-navbar__submenu[data-astro-cid-5blmo7yk]{opacity:1;visibility:visible;transform:translate(-50%) translateY(0)}.wi-navbar__submenu-link[data-astro-cid-5blmo7yk]{display:block;padding:.5rem .75rem;border-radius:8px;font-size:var(--text-sm);color:var(--ink-2);text-decoration:none;white-space:nowrap;transition:color .15s ease,background .15s ease}.wi-navbar__submenu-link[data-astro-cid-5blmo7yk]:hover{color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent)}.wi-navbar__item--has-children[data-astro-cid-5blmo7yk]>.wi-navbar__link[data-astro-cid-5blmo7yk]:after{content:"";display:inline-block;width:4px;height:4px;margin-left:.3rem;margin-top:-2px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg);opacity:.6;transition:transform .18s var(--ease-out-quart)}.wi-navbar__item--has-children[data-astro-cid-5blmo7yk]:hover>.wi-navbar__link[data-astro-cid-5blmo7yk]:after{transform:rotate(225deg);margin-top:2px}.wi-navbar__link[data-astro-cid-5blmo7yk]{display:inline-flex;align-items:center;padding:.3rem .7rem;border-radius:9999px;font-size:var(--text-sm);color:var(--ink-2);text-decoration:none;white-space:nowrap;transition:color var(--duration-fast) var(--ease-out-quart),background var(--duration-fast) var(--ease-out-quart)}.wi-navbar__link[data-astro-cid-5blmo7yk]:hover{color:var(--accent);background:var(--bg-raised)}.wi-navbar__link--active[data-astro-cid-5blmo7yk]{color:var(--ink);background:var(--bg-raised);font-weight:600}.wi-navbar__actions[data-astro-cid-5blmo7yk]{display:flex;align-items:center;gap:.25rem;flex-shrink:0;margin-left:auto}.wi-navbar__action-btn[data-astro-cid-5blmo7yk]{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;padding:0;border:none;border-radius:9999px;background:transparent;color:var(--ink-2);cursor:pointer;transition:background var(--duration-fast) var(--ease-out-quart),color var(--duration-fast) var(--ease-out-quart)}.wi-navbar__action-btn[data-astro-cid-5blmo7yk]:hover{background:var(--bg-raised);color:var(--ink)}.wi-navbar__action-btn[data-astro-cid-5blmo7yk]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.wi-navbar__menu-btn[data-astro-cid-5blmo7yk]{display:none}@media(max-width:768px){.wi-navbar-wrapper[data-astro-cid-5blmo7yk]{padding:.5rem .75rem}.wi-navbar__capsule[data-astro-cid-5blmo7yk]{padding:0 1rem}.wi-navbar__nav[data-astro-cid-5blmo7yk]{display:none}.wi-navbar__action-btn[data-astro-cid-5blmo7yk]{width:40px;height:40px}.wi-navbar__menu-btn[data-astro-cid-5blmo7yk]{display:inline-flex}}footer[data-astro-cid-sz7xmlte]{position:relative;border-top:1px solid var(--rule);background-color:var(--bg)}footer[data-astro-cid-sz7xmlte]:before{content:"";position:absolute;inset:0;pointer-events:none;background-color:color-mix(in srgb,var(--bg) 97%,var(--accent) 3%);-webkit-mask-image:linear-gradient(to bottom,transparent,#000);mask-image:linear-gradient(to bottom,transparent,#000)}.footer-inner[data-astro-cid-sz7xmlte]{position:relative;max-width:1200px;width:100%;margin:0 auto;padding:1.25rem;display:flex;flex-direction:column;align-items:center;gap:.75rem}.footer-bottom[data-astro-cid-sz7xmlte]{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:1rem;font-size:.85rem;color:var(--ink-3);width:100%}.footer-bottom--center[data-astro-cid-sz7xmlte]{justify-content:center}.footer-bottom--center[data-astro-cid-sz7xmlte] .footer-bottom__left[data-astro-cid-sz7xmlte]{flex:none}.footer-bottom__left[data-astro-cid-sz7xmlte]{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}.footer-copyright[data-astro-cid-sz7xmlte]{color:var(--ink-3)}.footer-icp[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]{color:var(--ink-3);text-decoration:none;transition:color .15s ease}.footer-icp[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]:hover{color:var(--ink-2)}.footer-mps[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]{display:inline-flex;align-items:center;gap:.3rem;color:var(--ink-3);text-decoration:none;transition:color .15s ease}.footer-mps[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]:hover{color:var(--ink-2)}.footer-mps__icon[data-astro-cid-sz7xmlte]{flex:none;vertical-align:middle}.footer-stats[data-astro-cid-sz7xmlte]{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:.5rem 1.25rem;width:100%;font-size:.8rem;color:var(--ink-3)}.footer-stat[data-astro-cid-sz7xmlte]{display:inline-flex;align-items:baseline;gap:.3rem}.footer-stat__value[data-astro-cid-sz7xmlte]{font-weight:600;color:var(--ink-2);font-variant-numeric:tabular-nums}.footer-stat__label[data-astro-cid-sz7xmlte]{opacity:.8}.footer-socials[data-astro-cid-sz7xmlte]{display:inline-flex;align-items:center;gap:.75rem}.footer-socials[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]{display:inline-flex;align-items:center;justify-content:center;color:var(--ink-3);text-decoration:none;font-size:1.05rem;transition:color .15s ease}.footer-socials[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]:hover{color:var(--ink-2)}.footer-bottom__right[data-astro-cid-sz7xmlte]{display:flex;align-items:center;gap:.5rem}.footer-bottom__right[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]{color:var(--ink-3);text-decoration:none;transition:color .15s ease}.footer-bottom__right[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]:hover{color:var(--ink-2)}.footer-separator[data-astro-cid-sz7xmlte]{color:var(--ink-3);opacity:.5}.footer-custom[data-astro-cid-sz7xmlte]{width:100%;text-align:center;font-size:.85rem;color:var(--ink-3);line-height:1.8}.footer-custom[data-astro-cid-sz7xmlte] a,.footer-custom[data-astro-cid-sz7xmlte] p,.footer-custom[data-astro-cid-sz7xmlte] span{display:inline;margin-inline:.25em}.footer-custom[data-astro-cid-sz7xmlte] a{color:var(--ink-3);text-decoration:none;transition:color .15s ease}.footer-custom[data-astro-cid-sz7xmlte] a:hover{color:var(--ink-2)}.footer-custom[data-astro-cid-sz7xmlte] img{display:inline-block;vertical-align:middle;border-radius:4px}.footer-custom[data-astro-cid-sz7xmlte] div{text-align:center}.footer-injected[data-astro-cid-sz7xmlte]{width:100%;text-align:center;font-size:.85rem;color:var(--ink-3);line-height:1.8}.footer-injected[data-astro-cid-sz7xmlte] a,.footer-injected[data-astro-cid-sz7xmlte] p,.footer-injected[data-astro-cid-sz7xmlte] span{display:inline;margin-inline:.25em}.footer-injected[data-astro-cid-sz7xmlte] a{color:var(--ink-3);text-decoration:none;transition:color .15s ease}.footer-injected[data-astro-cid-sz7xmlte] a:hover{color:var(--ink-2)}.footer-injected[data-astro-cid-sz7xmlte] img{display:inline-block;vertical-align:middle;border-radius:4px}.footer-injected[data-astro-cid-sz7xmlte] div{text-align:center}@media(max-width:768px){.footer-bottom[data-astro-cid-sz7xmlte]{flex-direction:column;align-items:center;text-align:center}.footer-bottom__left[data-astro-cid-sz7xmlte],.footer-bottom__right[data-astro-cid-sz7xmlte]{justify-content:center}.footer-custom[data-astro-cid-sz7xmlte],.footer-injected[data-astro-cid-sz7xmlte]{font-size:.75rem}}.wi-mobile-menu[data-astro-cid-6aabv5oc]{position:fixed;inset:0;z-index:200;pointer-events:none;visibility:hidden}.wi-mobile-menu--open[data-astro-cid-6aabv5oc]{pointer-events:auto;visibility:visible}.wi-mobile-menu__backdrop[data-astro-cid-6aabv5oc]{position:absolute;inset:0;background:#0006;opacity:0;transition:opacity var(--duration-normal) var(--ease-out-expo)}.wi-mobile-menu--open[data-astro-cid-6aabv5oc] .wi-mobile-menu__backdrop[data-astro-cid-6aabv5oc]{opacity:1}.wi-mobile-menu__panel[data-astro-cid-6aabv5oc]{position:absolute;top:0;right:0;bottom:0;width:min(85vw,360px);display:flex;flex-direction:column;background:var(--glass-bg);backdrop-filter:blur(24px) saturate(180%);-webkit-backdrop-filter:blur(24px) saturate(180%);border-left:1px solid var(--glass-border);box-shadow:var(--shadow-lg);transform:translate(100%);transition:transform var(--duration-normal) var(--ease-out-expo)}.wi-mobile-menu--open[data-astro-cid-6aabv5oc] .wi-mobile-menu__panel[data-astro-cid-6aabv5oc]{transform:translate(0)}.wi-mobile-menu__header[data-astro-cid-6aabv5oc]{display:flex;align-items:center;justify-content:flex-end;padding:1rem 1.25rem;border-bottom:1px solid var(--glass-border)}.wi-mobile-menu__close[data-astro-cid-6aabv5oc]{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border:none;border-radius:9999px;background:transparent;color:var(--ink-2);cursor:pointer;transition:background var(--duration-fast) var(--ease-out-quart),color var(--duration-fast) var(--ease-out-quart)}.wi-mobile-menu__close[data-astro-cid-6aabv5oc]:hover{background:var(--bg-raised);color:var(--ink)}.wi-mobile-menu__close[data-astro-cid-6aabv5oc]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.wi-mobile-menu__nav[data-astro-cid-6aabv5oc]{flex:1;overflow-y:auto;padding:1rem 1.25rem;display:flex;flex-direction:column;gap:.25rem}.wi-mobile-menu__link[data-astro-cid-6aabv5oc]{display:flex;align-items:center;padding:.75rem 1rem;border-radius:12px;font-size:var(--text-lg);font-weight:500;color:var(--ink-2);text-decoration:none;transition:color var(--duration-fast) var(--ease-out-quart),background var(--duration-fast) var(--ease-out-quart)}.wi-mobile-menu__link--sub[data-astro-cid-6aabv5oc]{padding-left:2rem;font-size:var(--text-base);font-weight:400;color:var(--ink-3)}.wi-mobile-menu__link[data-astro-cid-6aabv5oc]:hover{color:var(--accent);background:var(--bg-raised)}.wi-mobile-menu__link--active[data-astro-cid-6aabv5oc]{color:var(--accent);background:var(--bg-raised);font-weight:600}.wi-mobile-menu__footer[data-astro-cid-6aabv5oc]{display:flex;flex-direction:column;gap:.5rem;padding:1rem 1.25rem;border-top:1px solid var(--glass-border)}.wi-mobile-menu__action-btn[data-astro-cid-6aabv5oc]{display:flex;align-items:center;gap:.75rem;width:100%;padding:.75rem 1rem;border:none;border-radius:12px;background:transparent;color:var(--ink-2);font-size:var(--text-md);font-family:var(--font-sans);cursor:pointer;transition:color var(--duration-fast) var(--ease-out-quart),background var(--duration-fast) var(--ease-out-quart)}.wi-mobile-menu__action-btn[data-astro-cid-6aabv5oc]:hover{color:var(--ink);background:var(--bg-raised)}.wi-mobile-menu__action-btn[data-astro-cid-6aabv5oc]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.wi-mobile-menu__icon-sun[data-astro-cid-6aabv5oc],.dark .wi-mobile-menu__icon-moon[data-astro-cid-6aabv5oc]{display:none}.dark .wi-mobile-menu__icon-sun[data-astro-cid-6aabv5oc]{display:block}.wi-click-fx-layer{position:fixed;inset:0;z-index:12050;pointer-events:none;overflow:hidden}.wi-click-fx{position:fixed;pointer-events:none;will-change:transform,opacity;user-select:none}.wi-click-fx--text{font-size:18px;font-weight:700;transform:translate(-50%,-50%);animation:wi-fx-text 1.2s ease-out forwards;text-shadow:0 1px 2px rgba(0,0,0,.18)}.wi-click-fx--heart{font-size:20px;opacity:1;transition:transform 1s cubic-bezier(.16,1,.3,1),opacity 1s ease-out}.wi-click-fx--spark{width:6px;height:6px;border-radius:50%;opacity:1;transition:transform .8s cubic-bezier(.16,1,.3,1),opacity .8s ease-out}.wi-click-fx--ripple{width:30px;height:30px;border:2px solid;border-radius:50%;transform:translate(-50%,-50%) scale(.5);opacity:.9;transition:transform .7s ease-out,opacity .7s ease-out}.wi-click-fx--particle{width:8px;height:8px;border-radius:50%;opacity:1;transition:transform .7s cubic-bezier(.16,1,.3,1),opacity .7s ease-out}.wi-click-fx--star{font-size:16px;opacity:1;transition:transform .8s cubic-bezier(.16,1,.3,1),opacity .8s ease-out}.wi-click-fx--trail-star{font-size:12px;transform:translate(-50%,-50%);opacity:.9;transition:opacity .6s ease-out,transform .6s ease-out}.wi-click-fx--trail-particle{width:6px;height:6px;border-radius:50%;transform:translate(-50%,-50%);opacity:.9;transition:opacity .5s ease-out,transform .5s ease-out}@keyframes wi-fx-text{0%{opacity:0;transform:translate(-50%,-50%) scale(.5)}20%{opacity:1;transform:translate(-50%,-80%) scale(1.1)}to{opacity:0;transform:translate(-50%,-120%) scale(.9)}}html{min-height:100vh}html.wi-theme-transition,html.wi-theme-transition *,html.wi-theme-transition *:before,html.wi-theme-transition *:after{transition:background-color .3s ease,color .3s ease,border-color .3s ease,box-shadow .3s ease,fill .3s ease,stroke .3s ease!important}.wi-body{min-height:100vh;display:flex;flex-direction:column}.wi-main{flex:1}.wi-reveal{opacity:0;transform:translateY(20px);transition:opacity var(--duration-normal, .3s) var(--ease-out-expo, cubic-bezier(.16, 1, .3, 1)),transform var(--duration-normal, .3s) var(--ease-out-expo, cubic-bezier(.16, 1, .3, 1))}.wi-revealed{opacity:1;transform:translateY(0)}html.wi-no-animations .wi-reveal{opacity:1;transform:none;transition:none} diff --git a/compat/assets/Layout.CSNOE3Co.css b/compat/assets/Layout.CSNOE3Co.css new file mode 100644 index 0000000..6b71236 --- /dev/null +++ b/compat/assets/Layout.CSNOE3Co.css @@ -0,0 +1 @@ +@charset "UTF-8";:root{--bg: #faf7f2;--bg-raised: #f3ede5;--bg-overlay: color-mix(in srgb, var(--bg) 85%, transparent);--ink: #2c2420;--ink-2: #7a6e64;--ink-3: #b5a99e;--rule: #e8e0d6;--accent: #d4764e;--accent-hover: #c4613a;--accent-bg: #fdf0e8;--mist-pink: #f0e4de;--sea-salt: #e8e0d6;--caramel: #8b6f5e;--glass-bg: color-mix(in srgb, var(--bg) 72%, transparent);--glass-border: color-mix(in srgb, var(--rule) 50%, transparent);--shadow-sm: 0 1px 3px color-mix(in srgb, var(--ink) 6%, transparent);--shadow-md: 0 4px 16px color-mix(in srgb, var(--ink) 8%, transparent);--shadow-lg: 0 8px 32px color-mix(in srgb, var(--ink) 12%, transparent);--shadow-glow: 0 0 40px color-mix(in srgb, var(--accent) 15%, transparent)}html.dark{--bg: #1e1c1a;--bg-raised: #292623;--bg-overlay: color-mix(in srgb, var(--bg) 85%, transparent);--ink: #e9e4dd;--ink-2: #aaa096;--ink-3: #7c7268;--rule: #3b362f;--accent: #e89a64;--accent-hover: #f2ad79;--accent-bg: #2c231b;--mist-pink: #2e2823;--sea-salt: #302b26;--caramel: #a38b7b;--glass-bg: color-mix(in srgb, var(--bg) 72%, transparent);--glass-border: color-mix(in srgb, var(--rule) 50%, transparent);--shadow-sm: 0 1px 3px rgba(0, 0, 0, .24);--shadow-md: 0 4px 16px rgba(0, 0, 0, .3);--shadow-lg: 0 8px 32px rgba(0, 0, 0, .4);--shadow-glow: 0 0 40px rgba(232, 154, 100, .12)}html[data-palette=matcha]{--bg: #f6f8f1;--bg-raised: #ecf1e3;--ink: #26302a;--ink-2: #6d7a6e;--ink-3: #a8b3a4;--rule: #dde5d4;--accent: #6f9d52;--accent-hover: #5d8943;--accent-bg: #ecf3e2;--mist-pink: #e7eddc;--sea-salt: #dfe8d3;--caramel: #7d8a68}html[data-palette=matcha].dark{--bg: #1b1f1a;--bg-raised: #252b22;--ink: #e6e9e0;--ink-2: #a3ab9c;--ink-3: #767e70;--rule: #363d33;--accent: #9cc47f;--accent-hover: #aed493;--accent-bg: #242c1f;--mist-pink: #262d22;--sea-salt: #282f24;--caramel: #98a387}html[data-palette=indigo]{--bg: #f5f7fa;--bg-raised: #eaeff5;--ink: #232a33;--ink-2: #66707d;--ink-3: #a3adb8;--rule: #dce2ea;--accent: #4a6fa5;--accent-hover: #3d5d8c;--accent-bg: #e9eff8;--mist-pink: #e2e8f0;--sea-salt: #dbe4ee;--caramel: #707c8e}html[data-palette=indigo].dark{--bg: #191d23;--bg-raised: #222831;--ink: #e4e7ec;--ink-2: #9aa4b1;--ink-3: #6d7683;--rule: #323a45;--accent: #7fa3d1;--accent-hover: #93b4dc;--accent-bg: #1f2632;--mist-pink: #232830;--sea-salt: #252b34;--caramel: #8b95a6}html[data-palette=sakura]{--bg: #faf5f6;--bg-raised: #f3eaec;--ink: #322a2c;--ink-2: #7d6e72;--ink-3: #b4a6aa;--rule: #ecdfe2;--accent: #d97387;--accent-hover: #c85d72;--accent-bg: #fbeef1;--mist-pink: #f2e2e6;--sea-salt: #eddfe3;--caramel: #96757e}html[data-palette=sakura].dark{--bg: #201b1c;--bg-raised: #2a2425;--ink: #ece5e6;--ink-2: #b0a4a7;--ink-3: #7f7276;--rule: #3c3436;--accent: #e89aab;--accent-hover: #f0aec0;--accent-bg: #2d2225;--mist-pink: #2f2729;--sea-salt: #31282a;--caramel: #a88d94}html[data-palette=violet]{--bg: #f7f5fa;--bg-raised: #eeeaf5;--ink: #2b2733;--ink-2: #6f6a7c;--ink-3: #aaa5b6;--rule: #e2ddeb;--accent: #8a6fc0;--accent-hover: #7759ae;--accent-bg: #f0eaf9;--mist-pink: #e8e2f0;--sea-salt: #e3dcee;--caramel: #7f7590}html[data-palette=violet].dark{--bg: #1c1a21;--bg-raised: #26222f;--ink: #e8e5ee;--ink-2: #a49eaf;--ink-3: #746e80;--rule: #373241;--accent: #b49ae0;--accent-hover: #c3ace8;--accent-bg: #262033;--mist-pink: #292434;--sea-salt: #2b2536;--caramel: #948caa}html[data-palette=sea]{--bg: #f3f8f7;--bg-raised: #e8f0ee;--ink: #21302d;--ink-2: #647872;--ink-3: #9fb1ac;--rule: #d9e6e3;--accent: #3d9c8f;--accent-hover: #2f8578;--accent-bg: #e5f3f0;--mist-pink: #dee9e6;--sea-salt: #d6e5e1;--caramel: #6c8680}html[data-palette=sea].dark{--bg: #181f1e;--bg-raised: #212a28;--ink: #e3eae8;--ink-2: #9aaba6;--ink-3: #6d7d79;--rule: #2f3b39;--accent: #6cc3b4;--accent-hover: #82d0c2;--accent-bg: #1d2a27;--mist-pink: #222c2a;--sea-salt: #242e2c;--caramel: #869894}html[data-palette=amber]{--bg: #faf7ef;--bg-raised: #f3eddc;--ink: #322b1e;--ink-2: #7d7360;--ink-3: #b5ab94;--rule: #eae1cb;--accent: #b97f1c;--accent-hover: #9f6a0e;--accent-bg: #f9efd8;--mist-pink: #f0e8d2;--sea-salt: #ebe2ca;--caramel: #96835c}html[data-palette=amber].dark{--bg: #201d16;--bg-raised: #2a261d;--ink: #ebe6d9;--ink-2: #b0a893;--ink-3: #7f7866;--rule: #3c3729;--accent: #e0a83e;--accent-hover: #ebba5c;--accent-bg: #2c251a;--mist-pink: #2f2a1e;--sea-salt: #312c20;--caramel: #a89a76}html[data-palette=plum]{--bg: #f9f4f5;--bg-raised: #f1e8ea;--ink: #2f2427;--ink-2: #796a6f;--ink-3: #b1a2a7;--rule: #e9dde0;--accent: #a4506b;--accent-hover: #8d3f59;--accent-bg: #f7e9ee;--mist-pink: #ecdee2;--sea-salt: #e5d8db;--caramel: #8d6f77}html[data-palette=plum].dark{--bg: #1f1a1b;--bg-raised: #292223;--ink: #eae2e4;--ink-2: #ada0a4;--ink-3: #7c6e73;--rule: #3a3133;--accent: #d98aa3;--accent-hover: #e39fb5;--accent-bg: #2b2023;--mist-pink: #2d2527;--sea-salt: #2f2729;--caramel: #a08890}html[data-palette=graphite]{--bg: #f7f7f6;--bg-raised: #eeedeb;--ink: #262626;--ink-2: #6e6e6c;--ink-3: #ababa8;--rule: #e0e0de;--accent: #3f3f3e;--accent-hover: #262626;--accent-bg: #ececea;--mist-pink: #e9e9e7;--sea-salt: #e5e5e3;--caramel: #7b7b78}html[data-palette=graphite].dark{--bg: #1b1b1a;--bg-raised: #252524;--ink: #e8e8e6;--ink-2: #a5a5a2;--ink-3: #757572;--rule: #353534;--accent: #c9c9c5;--accent-hover: #d8d8d4;--accent-bg: #262625;--mist-pink: #2a2a29;--sea-salt: #2c2c2b;--caramel: #8f8f8c}html[data-palette=cocoa]{--bg: #f8f4f0;--bg-raised: #f0e8e1;--ink: #2e2722;--ink-2: #786c62;--ink-3: #b3a89d;--rule: #e7ddd3;--accent: #9a6b4f;--accent-hover: #835539;--accent-bg: #f5e9e0;--mist-pink: #ecdfd4;--sea-salt: #e6d9cd;--caramel: #8a6f5b}html[data-palette=cocoa].dark{--bg: #1e1a17;--bg-raised: #282320;--ink: #eae4dd;--ink-2: #aca199;--ink-3: #7b7169;--rule: #3a332e;--accent: #cd9878;--accent-hover: #daa98c;--accent-bg: #2a211c;--mist-pink: #2d2721;--sea-salt: #2f2923;--caramel: #a08d7c}html[data-palette=azure]{--bg: #f4f8fb;--bg-raised: #e9f1f7;--ink: #223038;--ink-2: #62737e;--ink-3: #a0b0ba;--rule: #dbe7ee;--accent: #3b82c4;--accent-hover: #2e6ba5;--accent-bg: #e7f1f9;--mist-pink: #e0ebf2;--sea-salt: #d8e6ef;--caramel: #6d8090}html[data-palette=azure].dark{--bg: #172026;--bg-raised: #202a31;--ink: #e3eaef;--ink-2: #99a8b3;--ink-3: #6b7a85;--rule: #2e3a42;--accent: #74b3e0;--accent-hover: #88c1e8;--accent-bg: #1d2830;--mist-pink: #222c34;--sea-salt: #243038;--caramel: #8496a3}:root{--font-sans: "LXGW WenKai", "Noto Serif SC", "Source Han Serif SC", Georgia, serif;--font-body: "LXGW WenKai", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono: "JetBrains Mono", "Fira Code", monospace;--text-xs: clamp(.75rem, .7rem + .2vw, .8rem);--text-sm: clamp(.875rem, .82rem + .2vw, .95rem);--text-base: clamp(1rem, .94rem + .25vw, 1.05rem);--text-md: clamp(1.1rem, 1.02rem + .3vw, 1.2rem);--text-lg: clamp(1.2rem, 1.1rem + .45vw, 1.3rem);--text-xl: clamp(1.35rem, 1.2rem + .7vw, 1.6rem);--text-2xl: clamp(1.65rem, 1.4rem + 1.05vw, 2rem);--text-3xl: clamp(1.95rem, 1.6rem + 1.65vw, 2.4rem);--text-4xl: clamp(2.3rem, 1.8rem + 2.25vw, 3.2rem);--text-5xl: clamp(2.8rem, 2rem + 3.5vw, 4rem);--leading-none: 1;--leading-tight: 1.2;--leading-snug: 1.35;--leading-normal: 1.6;--leading-relaxed: 1.75;--leading-loose: 2;--tracking-tight: -.02em;--tracking-normal: 0;--tracking-wide: .04em;--tracking-wider: .08em;--tracking-widest: .12em}h1,h2,h3,h4,h5,h6{font-family:var(--font-sans);font-weight:700;line-height:var(--leading-tight);letter-spacing:var(--tracking-tight);color:var(--ink);margin-bottom:var(--space-sm)}h1{font-size:var(--text-3xl);margin-bottom:var(--space-lg)}h2{font-size:var(--text-2xl);padding-left:var(--space-md);border-left:3px solid var(--accent);margin-bottom:var(--space-sm)}h3{font-size:var(--text-xl);position:relative;padding-left:var(--space-lg)}h3:before{content:"";display:block;position:absolute;left:0;top:50%;transform:translateY(-50%);width:6px;height:6px;border-radius:50%;background:var(--accent);opacity:.6}h4{font-size:var(--text-md);color:var(--ink-2)}h5{font-size:var(--text-base);color:var(--ink-2)}h6{font-size:var(--text-sm);color:var(--ink-3)}.wi-post__body :is(h1,h2,h3,h4,h5,h6),.wi-page__body :is(h1,h2,h3,h4,h5,h6),.wi-messageboard__body :is(h1,h2,h3,h4,h5,h6){font-family:var(--font-sans);font-weight:700;line-height:1.35;letter-spacing:-.01em;color:var(--ink);scroll-margin-top:88px;text-wrap:balance;padding-left:0;border-left:0}.wi-post__body :is(h1,h2,h3,h4,h5,h6):before,.wi-post__body :is(h1,h2,h3,h4,h5,h6):after,.wi-page__body :is(h1,h2,h3,h4,h5,h6):before,.wi-page__body :is(h1,h2,h3,h4,h5,h6):after,.wi-messageboard__body :is(h1,h2,h3,h4,h5,h6):before,.wi-messageboard__body :is(h1,h2,h3,h4,h5,h6):after{content:none}.wi-post__body h1,.wi-page__body h1,.wi-messageboard__body h1{font-size:clamp(1.6rem,1.4rem + 1vw,2rem);margin-top:2em;margin-bottom:.7em}.wi-post__body h2,.wi-page__body h2,.wi-messageboard__body h2{font-size:clamp(1.42rem,1.3rem + .6vw,1.68rem);margin-top:1.9em;margin-bottom:.65em}.wi-post__body h3,.wi-page__body h3,.wi-messageboard__body h3{font-size:clamp(1.24rem,1.16rem + .4vw,1.4rem);margin-top:1.7em;margin-bottom:.6em}.wi-post__body h4,.wi-page__body h4,.wi-messageboard__body h4{font-size:clamp(1.1rem,1.05rem + .25vw,1.2rem);margin-top:1.5em;margin-bottom:.5em}.wi-post__body h5,.wi-page__body h5,.wi-messageboard__body h5{font-size:1.04rem;margin-top:1.4em;margin-bottom:.45em}.wi-post__body h6,.wi-page__body h6,.wi-messageboard__body h6{font-size:.98rem;font-weight:600;color:var(--ink-3);margin-top:1.4em;margin-bottom:.45em}.wi-post__body :is(h1,h2,h3,h4,h5,h6)+:is(h1,h2,h3,h4,h5,h6),.wi-page__body :is(h1,h2,h3,h4,h5,h6)+:is(h1,h2,h3,h4,h5,h6),.wi-messageboard__body :is(h1,h2,h3,h4,h5,h6)+:is(h1,h2,h3,h4,h5,h6){margin-top:.6em}.wi-post__body>:is(h1,h2,h3,h4,h5,h6):first-child,.wi-page__body>:is(h1,h2,h3,h4,h5,h6):first-child,.wi-messageboard__body>:is(h1,h2,h3,h4,h5,h6):first-child{margin-top:0}.wi-post__body p,.wi-page__body p,.wi-messageboard__body p{margin-block-end:1.2em}.wi-post__body *,.wi-page__body *,.wi-messageboard__body *{max-width:100%}.wi-post__body :is(pre,code,table),.wi-page__body :is(pre,code,table),.wi-messageboard__body :is(pre,code,table){overflow-x:auto}.wi-post__body pre,.wi-page__body pre,.wi-messageboard__body pre{margin-block:1.5em;padding:1.25em;border-radius:12px;border:1px solid var(--rule);background:var(--bg-raised);font-size:.875em;line-height:1.6}.wi-post__body pre code,.wi-page__body pre code,.wi-messageboard__body pre code{background:none;padding:0;border:none;border-radius:0;font-size:inherit}.wi-post__body code,.wi-page__body code,.wi-messageboard__body code{background:var(--bg-raised);padding:.15em .4em;border-radius:8px;font-size:.875em;border:1px solid var(--rule)}.wi-post__body blockquote,.wi-page__body blockquote,.wi-messageboard__body blockquote{margin-block:2em}.wi-post__body :is(ul,ol),.wi-page__body :is(ul,ol),.wi-messageboard__body :is(ul,ol){padding-inline-start:1.5em;margin-block-end:1.2em}.wi-post__body li,.wi-page__body li,.wi-messageboard__body li{margin-block-end:.6em}.wi-post__body a,.wi-page__body a,.wi-messageboard__body a{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.2em}.wi-post__body :is(.ai-summary,.abstract),.wi-post__body [class*=ai-summary],.wi-post__body [class*=ai-abstract],.wi-post__body [class*=likcc-article-summary],.wi-page__body :is(.ai-summary,.abstract),.wi-page__body [class*=ai-summary],.wi-page__body [class*=ai-abstract],.wi-page__body [class*=likcc-article-summary],.wi-messageboard__body :is(.ai-summary,.abstract),.wi-messageboard__body [class*=ai-summary],.wi-messageboard__body [class*=ai-abstract],.wi-messageboard__body [class*=likcc-article-summary]{margin-bottom:15px}.wi-post__body img,.wi-post__body video,.wi-page__body img,.wi-page__body video,.wi-messageboard__body img,.wi-messageboard__body video{display:block;max-width:100%;height:auto;margin-inline:auto}.wi-post__body img,.wi-post__body video,.wi-page__body img,.wi-page__body video,.wi-messageboard__body img,.wi-messageboard__body video{border-radius:12px;margin-block:1.5em}.wi-post__body img[role=presentation],.wi-post__body img[aria-hidden=true],.wi-post__body :is(.emoji,.icon,.avatar,.badge),.wi-page__body img[role=presentation],.wi-page__body img[aria-hidden=true],.wi-page__body :is(.emoji,.icon,.avatar,.badge),.wi-messageboard__body img[role=presentation],.wi-messageboard__body img[aria-hidden=true],.wi-messageboard__body :is(.emoji,.icon,.avatar,.badge){display:inline;margin-inline:0;border-radius:0}.wi-post__body [align=center],.wi-post__body [style*="text-align:center"],.wi-post__body [style*="text-align: center"],.wi-page__body [align=center],.wi-page__body [style*="text-align:center"],.wi-page__body [style*="text-align: center"],.wi-messageboard__body [align=center],.wi-messageboard__body [style*="text-align:center"],.wi-messageboard__body [style*="text-align: center"]{text-align:center}.wi-post__body iframe,.wi-page__body iframe,.wi-messageboard__body iframe{display:block;max-width:100%;margin-inline:auto;border:none}.wi-post__body figure,.wi-page__body figure,.wi-messageboard__body figure{display:block;max-width:100%;margin-inline:auto;margin-block:1.5em;text-align:center}.wi-post__body figure :is(img,video),.wi-page__body figure :is(img,video),.wi-messageboard__body figure :is(img,video){margin-block:0}.wi-post__body figcaption,.wi-page__body figcaption,.wi-messageboard__body figcaption{color:var(--ink-3);font-size:.875rem;line-height:1.6;text-align:center;margin-top:.6em}.wi-post__body .wi-lightgallery-item,.wi-page__body .wi-lightgallery-item,.wi-messageboard__body .wi-lightgallery-item{display:block;width:fit-content;max-width:100%;margin-inline:auto;border-radius:12px;line-height:0}.wi-post__body .wi-lightgallery-item>img,.wi-page__body .wi-lightgallery-item>img,.wi-messageboard__body .wi-lightgallery-item>img{margin-block:0}.wi-post__body .wi-embed,.wi-page__body .wi-embed,.wi-messageboard__body .wi-embed{position:relative;width:100%;max-width:100%;margin-inline:auto;margin-block:1.5em;overflow:hidden;border-radius:12px;background:var(--bg-raised)}.wi-post__body .wi-embed>:is(iframe,video,embed,object),.wi-page__body .wi-embed>:is(iframe,video,embed,object),.wi-messageboard__body .wi-embed>:is(iframe,video,embed,object){position:absolute;inset:0;width:100%;height:100%;margin:0;border-radius:0;border:0}.wi-post__body .wi-media-loading,.wi-page__body .wi-media-loading,.wi-messageboard__body .wi-media-loading{filter:blur(20px);opacity:.6}.wi-post__body .wi-media-loaded,.wi-page__body .wi-media-loaded,.wi-messageboard__body .wi-media-loaded{filter:blur(0);opacity:1}@media(max-width:768px){.wi-post__body h1,.wi-page__body h1,.wi-messageboard__body h1{font-size:1.4rem}.wi-post__body h2,.wi-page__body h2,.wi-messageboard__body h2{font-size:1.28rem}.wi-post__body h3,.wi-page__body h3,.wi-messageboard__body h3{font-size:1.16rem}.wi-post__body h4,.wi-page__body h4,.wi-messageboard__body h4{font-size:1.05rem}.wi-post__body h5,.wi-page__body h5,.wi-messageboard__body h5{font-size:1rem}.wi-post__body h6,.wi-page__body h6,.wi-messageboard__body h6{font-size:.95rem}.wi-post__body p,.wi-page__body p,.wi-messageboard__body p{margin-block-end:1.35em}.wi-post__body pre,.wi-page__body pre,.wi-messageboard__body pre{font-size:.9em;padding:1em}.wi-post__body code,.wi-page__body code,.wi-messageboard__body code{font-size:.9em}.wi-post__body img,.wi-post__body video,.wi-page__body img,.wi-page__body video,.wi-messageboard__body img,.wi-messageboard__body video{margin-block:1.2em}.wi-post__body img,.wi-post__body video,.wi-post__body .wi-lightgallery-item,.wi-post__body figure,.wi-page__body img,.wi-page__body video,.wi-page__body .wi-lightgallery-item,.wi-page__body figure,.wi-messageboard__body img,.wi-messageboard__body video,.wi-messageboard__body .wi-lightgallery-item,.wi-messageboard__body figure{max-width:100%}}@media(max-width:480px){.wi-post__body h1,.wi-page__body h1,.wi-messageboard__body h1{font-size:1.32rem}.wi-post__body h2,.wi-page__body h2,.wi-messageboard__body h2{font-size:1.22rem}.wi-post__body h3,.wi-page__body h3,.wi-messageboard__body h3{font-size:1.12rem}}:root{--space-xs: .25rem;--space-sm: .5rem;--space-md: 1rem;--space-lg: 1.5rem;--space-xl: 2rem;--space-2xl: 3rem;--space-3xl: 4rem;--space-4xl: 6rem;--container-sm: 640px;--container-md: 768px;--container-lg: 1024px;--container-xl: 1200px;--content-max: 800px;--section-spacing: clamp(3rem, 2rem + 3vw, 6rem)}:root{--ease-out-expo: cubic-bezier(.16, 1, .3, 1);--ease-out-quart: cubic-bezier(.25, 1, .5, 1);--ease-in-out-cubic: cubic-bezier(.65, 0, .35, 1);--duration-fast: .15s;--duration-normal: .3s;--duration-slow: .5s;--duration-breath: 3s}@keyframes breathe{0%,to{opacity:.4;transform:scale(1)}50%{opacity:.7;transform:scale(1.08)}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes scrollHint{0%,to{opacity:.4;transform:translateY(0)}50%{opacity:1;transform:translateY(8px)}}.halo-comment-widget{background:var(--glass-bg);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid var(--glass-border);border-radius:16px;padding:var(--space-md);margin-top:var(--space-xl);width:100%;max-width:600px;margin-inline:auto}.halo-comment-widget .comment-item{background:var(--bg-raised);border:1px solid var(--rule);border-radius:12px;padding:var(--space-sm);margin-bottom:var(--space-xs);transition:box-shadow var(--duration-normal) var(--ease-out-expo),transform var(--duration-normal) var(--ease-out-expo)}.halo-comment-widget .comment-item:hover{box-shadow:var(--shadow-sm);transform:translateY(-1px)}.halo-comment-widget .comment-reply-item{background:var(--bg);border:1px solid var(--rule);border-radius:12px;padding:var(--space-xs) var(--space-sm);margin-top:var(--space-xs);transition:box-shadow var(--duration-normal) var(--ease-out-expo),transform var(--duration-normal) var(--ease-out-expo)}.halo-comment-widget .comment-reply-item:hover{box-shadow:var(--shadow-sm);transform:translateY(-1px)}.halo-comment-widget .comment-header{display:flex;align-items:center;gap:var(--space-xs);margin-bottom:var(--space-xs)}.halo-comment-widget .comment-avatar{width:24px;height:24px;border-radius:9999px;box-shadow:var(--shadow-sm)}.halo-comment-widget .comment-author{font-weight:600;color:var(--ink);font-size:var(--text-xs)}.halo-comment-widget .comment-time{font-size:var(--text-xs);color:var(--ink-3);letter-spacing:var(--tracking-wide)}.halo-comment-widget .comment-content{font-size:var(--text-sm);line-height:var(--leading-relaxed);color:var(--ink);margin-bottom:var(--space-xs)}.halo-comment-widget .comment-form{background:var(--bg-raised);border:1px solid var(--rule);border-radius:12px;padding:var(--space-sm);margin-bottom:var(--space-md)}.halo-comment-widget .comment-input,.halo-comment-widget .comment-textarea{width:100%;padding:var(--space-sm) var(--space-md);background:var(--bg);border:1px solid var(--rule);border-radius:8px;color:var(--ink);font-family:var(--font-body);font-size:var(--text-sm);transition:border-color var(--duration-fast) var(--ease-out-quart),box-shadow var(--duration-fast) var(--ease-out-quart)}.halo-comment-widget .comment-input:focus,.halo-comment-widget .comment-textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 15%,transparent)}.halo-comment-widget .comment-input::placeholder,.halo-comment-widget .comment-textarea::placeholder{color:var(--ink-3)}.halo-comment-widget .comment-textarea{min-height:80px;resize:vertical}.halo-comment-widget .comment-button{display:inline-flex;align-items:center;justify-content:center;padding:var(--space-sm) var(--space-lg);background:var(--accent);color:var(--bg);border:none;border-radius:8px;font-family:var(--font-body);font-size:var(--text-sm);font-weight:600;cursor:pointer;transition:background var(--duration-fast) var(--ease-out-quart),transform var(--duration-fast) var(--ease-out-quart),box-shadow var(--duration-fast) var(--ease-out-quart)}.halo-comment-widget .comment-button:hover{background:var(--accent-hover);transform:translateY(-1px);box-shadow:var(--shadow-md)}.halo-comment-widget .comment-button:active{transform:translateY(0)}.halo-comment-widget .comment-pagination{display:flex;justify-content:center;align-items:center;gap:var(--space-md);margin-top:var(--space-lg)}.halo-comment-widget .comment-pagination-button{padding:var(--space-xs) var(--space-md);background:var(--bg-raised);border:1px solid var(--rule);border-radius:8px;color:var(--ink-2);font-size:var(--text-sm);cursor:pointer;transition:border-color var(--duration-fast) var(--ease-out-quart),color var(--duration-fast) var(--ease-out-quart)}.halo-comment-widget .comment-pagination-button:hover{border-color:var(--accent);color:var(--accent)}.halo-comment-widget .comment-reply-button{font-size:var(--text-xs);color:var(--ink-3);cursor:pointer;transition:color var(--duration-fast) var(--ease-out-quart)}.halo-comment-widget .comment-reply-button:hover{color:var(--accent)}.halo-comment-widget .comment-smiley-button{background:none;border:none;cursor:pointer;font-size:var(--text-lg);transition:transform var(--duration-fast) var(--ease-out-quart)}.halo-comment-widget .comment-smiley-button:hover{transform:scale(1.2)}html.dark .halo-comment-widget .comment-input:focus,html.dark .halo-comment-widget .comment-textarea:focus{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 15%,transparent)}html.dark .halo-comment-widget .comment-button:hover{box-shadow:var(--shadow-md)}[data-comment-style=minimal] .halo-comment-widget{background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;border:none;border-top:1px solid var(--rule);border-radius:0;padding:var(--space-lg) 0}[data-comment-style=minimal] .halo-comment-widget .comment-item{background:transparent;border:none;border-bottom:1px solid var(--rule);border-radius:0;padding:var(--space-md) 0}[data-comment-style=minimal] .halo-comment-widget .comment-item:hover{box-shadow:none;transform:none}[data-comment-style=minimal] .halo-comment-widget .comment-reply-item{background:transparent;border:none;border-radius:0;padding:var(--space-xs) 0}[data-comment-style=minimal] .halo-comment-widget .comment-reply-item:hover{box-shadow:none;transform:none}[data-comment-style=minimal] .halo-comment-widget .comment-form{background:transparent;border:1px solid var(--rule);border-radius:12px;padding:var(--space-md)}[data-show-avatar=false] .halo-comment-widget .comment-avatar{display:none}.halo-search-widget .search-modal{background:var(--glass-bg);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);border:1px solid var(--glass-border);border-radius:24px;box-shadow:var(--shadow-lg);overflow:hidden}.halo-search-widget .search-input{width:100%;padding:var(--space-lg) var(--space-xl);background:transparent;border:none;border-bottom:1px solid var(--rule);color:var(--ink);font-family:var(--font-body);font-size:var(--text-lg);outline:none;transition:border-color var(--duration-fast) var(--ease-out-quart)}.halo-search-widget .search-input::placeholder{color:var(--ink-3)}.halo-search-widget .search-input:focus{border-bottom-color:var(--accent)}.halo-search-widget .search-result-item{padding:var(--space-md) var(--space-xl);border-bottom:1px solid var(--rule);cursor:pointer;transition:background var(--duration-fast) var(--ease-out-quart),padding-left var(--duration-fast) var(--ease-out-quart)}.halo-search-widget .search-result-item:hover{background:var(--accent-bg);padding-left:calc(var(--space-xl) + 4px)}.halo-search-widget .search-result-item:last-child{border-bottom:none}.halo-search-widget .search-result-title{font-size:var(--text-md);font-weight:600;color:var(--ink);margin-bottom:var(--space-xs)}.halo-search-widget .search-result-content{font-size:var(--text-sm);color:var(--ink-2);line-height:var(--leading-relaxed);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.halo-search-widget .search-result-label{font-size:var(--text-xs);color:var(--ink-3);letter-spacing:var(--tracking-wide)}.halo-search-widget .search-empty{padding:var(--space-3xl) var(--space-xl);text-align:center;color:var(--ink-3);font-size:var(--text-sm)}.halo-search-widget .search-hint{font-size:var(--text-xs);color:var(--ink-3);padding:var(--space-sm) var(--space-xl);border-top:1px solid var(--rule);text-align:center}.halo-search-widget .search-highlight{color:var(--accent);font-weight:600}.halo-search-widget .search-backdrop{background:#2c242066;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}html.dark .halo-search-widget .search-backdrop{background:#00000080}html.dark .halo-search-widget .search-result-item:hover{background:var(--accent-bg)}.lg-backdrop{background-color:#120e0cf5}.lg-toolbar{background:#ffffff14;backdrop-filter:blur(24px) saturate(1.2);-webkit-backdrop-filter:blur(24px) saturate(1.2);border-bottom:none;padding:4px 12px;height:44px}.lg-toolbar .lg-icon{color:#ffffffb3;width:36px;height:36px;font-size:17px;border-radius:8px;transition:all .2s ease;padding:0!important;line-height:36px!important}.lg-toolbar .lg-icon:before{vertical-align:middle!important;line-height:36px!important}.lg-toolbar .lg-icon:hover{color:#fff;background:#ffffff1f}.lg-inner{top:44px!important;bottom:0!important;transition:bottom .35s cubic-bezier(.16,1,.3,1),transform .35s cubic-bezier(.16,1,.3,1);will-change:bottom,transform}.lg-actions .lg-next,.lg-actions .lg-prev{background:#ffffff14;backdrop-filter:blur(16px) saturate(1.2);-webkit-backdrop-filter:blur(16px) saturate(1.2);color:#ffffffb3;border-radius:14px;width:48px;height:48px;font-size:24px;transition:all .25s cubic-bezier(.16,1,.3,1);border:1px solid rgba(255,255,255,.06)}.lg-actions .lg-next:hover,.lg-actions .lg-prev:hover{color:#fff;background:#ffffff26;border-color:#ffffff1f;transform:scale(1.05)}.lg-sub-html{position:absolute;left:0;right:0;bottom:0;background:linear-gradient(to top,rgba(18,14,12,.8) 0%,transparent 100%);color:#ffffffd9;font-family:var(--font-body);font-size:13px;letter-spacing:.02em;padding:48px 16px 12px;transition:bottom .35s cubic-bezier(.16,1,.3,1)}.wi-lg-caption{font-size:13px;color:#ffffffd9;margin-bottom:6px}.wi-lg-exif{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}.wi-lg-exif__camera,.wi-lg-exif__lens{font-size:11px;color:#ffffff8c;letter-spacing:.03em}.wi-lg-exif__params{display:flex;flex-wrap:wrap;gap:4px}.wi-lg-exif__aperture,.wi-lg-exif__shutter,.wi-lg-exif__iso,.wi-lg-exif__focal{display:inline-flex;align-items:center;font-size:10px;font-weight:500;color:#ffffffb3;background:#ffffff14;border-radius:4px;padding:2px 6px;letter-spacing:.04em;font-variant-numeric:tabular-nums;line-height:1.4}.lg-thumb-outer{background:#120e0cd9;backdrop-filter:blur(24px) saturate(1.2);-webkit-backdrop-filter:blur(24px) saturate(1.2);border-top:1px solid rgba(255,255,255,.06);padding:8px 0}.lg-thumb-item{border-color:transparent;border-radius:8px;overflow:hidden;border-width:2px;transition:all .25s cubic-bezier(.16,1,.3,1);opacity:.5;cursor:pointer}.lg-thumb-item.active{border-color:var(--accent)!important;opacity:1;transform:scale(1.05)}.lg-thumb-item:hover{border-color:#ffffff4d!important;opacity:.85}.lg-counter{color:#ffffff80;font-size:12px;font-family:var(--font-body);letter-spacing:.08em;font-variant-numeric:tabular-nums}.lg-progress-bar{height:2px;top:0}.lg-progress-bar .lg-progress{background:linear-gradient(90deg,var(--accent),var(--accent-hover));height:2px;border-radius:1px}.lg-outer .lg-thumb-outer{transform:translateY(100%);transition:transform .35s cubic-bezier(.16,1,.3,1);will-change:transform}.lg-outer.wi-thumb-shown .lg-thumb-outer{transform:translateY(0)}.lg-outer.wi-thumb-shown .lg-inner{bottom:100px!important;transition:bottom .35s cubic-bezier(.16,1,.3,1)}.lg-outer.wi-thumb-shown .lg-sub-html{bottom:100px;transition:bottom .35s cubic-bezier(.16,1,.3,1)}.lg-outer .lg-item{transition:opacity .3s ease,transform .3s ease}.lg-outer .lg-image{transition:opacity .25s ease}.lg-outer .lg-item.lg-complete .lg-image{opacity:1}.lg-outer .lg-item .lg-image{opacity:0}html.dark .lg-backdrop{background-color:#0a0806f7}html.dark .lg-toolbar{background:#ffffff0f}html.dark .lg-toolbar .lg-icon{color:#fff9}html.dark .lg-toolbar .lg-icon:hover{color:#fff;background:#ffffff1a}html.dark .lg-actions .lg-next,html.dark .lg-actions .lg-prev{background:#ffffff0f;color:#fff9;border-color:#ffffff0a}html.dark .lg-actions .lg-next:hover,html.dark .lg-actions .lg-prev:hover{color:#fff;background:#ffffff1f;border-color:#ffffff14}html.dark .lg-sub-html{background:linear-gradient(to top,rgba(10,8,6,.85) 0%,transparent 100%);color:#ffffffbf}html.dark .lg-thumb-outer{background:#0a0806e0;border-top-color:#ffffff0a}html.dark .lg-thumb-item{opacity:.4}html.dark .lg-thumb-item.active{border-color:var(--accent)!important;opacity:1}html.dark .lg-thumb-item:hover{border-color:#fff3!important;opacity:.75}html.dark .lg-counter{color:#fff6}html.dark .wi-lg-caption{color:#ffffffbf}html.dark .wi-lg-exif__camera,html.dark .wi-lg-exif__lens{color:#ffffff73}html.dark .wi-lg-exif__aperture,html.dark .wi-lg-exif__shutter,html.dark .wi-lg-exif__iso,html.dark .wi-lg-exif__focal{color:#fff9;background:#ffffff0f}@media(max-width:768px){.lg-toolbar{padding:2px 8px;height:40px}.lg-toolbar .lg-icon{width:32px;height:32px;font-size:15px;line-height:32px!important}.lg-toolbar .lg-icon:before{line-height:32px!important}.lg-inner{top:40px!important;bottom:0!important;transition:bottom .35s cubic-bezier(.16,1,.3,1)}.lg-actions .lg-next,.lg-actions .lg-prev{width:40px;height:40px;font-size:20px;border-radius:12px}.lg-sub-html{font-size:12px;padding:36px 12px 8px}.wi-lg-caption{font-size:12px;margin-bottom:4px}.wi-lg-exif{gap:4px 8px}.wi-lg-exif__camera,.wi-lg-exif__lens{font-size:10px}.wi-lg-exif__aperture,.wi-lg-exif__shutter,.wi-lg-exif__iso,.wi-lg-exif__focal{font-size:9px;padding:1px 5px}.lg-outer.wi-thumb-shown .lg-inner{bottom:80px!important}.lg-outer.wi-thumb-shown .lg-sub-html{bottom:80px}.lg-sub-html{padding:32px 12px 8px}.lg-outer .lg-thumb-outer{padding:6px 0}.lg-thumb-item{border-radius:6px}}@media(max-width:639px){.lg-toolbar .lg-icon{width:28px;height:28px;font-size:14px;line-height:28px!important}.lg-toolbar .lg-icon:before{line-height:28px!important}.lg-actions .lg-next,.lg-actions .lg-prev{width:44px;height:44px;font-size:20px;border-radius:12px}.lg-sub-html{font-size:11px;padding:28px 10px 6px}.wi-lg-exif{display:none}.lg-outer.wi-thumb-shown .lg-inner{bottom:64px!important}.lg-outer.wi-thumb-shown .lg-sub-html{bottom:64px}}:root{--xhhao-com-text-1: var(--ink);--xhhao-com-text-2: var(--ink-2);--xhhao-com-bg: var(--bg);--xhhao-com-bg-card: var(--bg-raised);--xhhao-com-bg-2: var(--bg-raised);--xhhao-com-border: var(--rule);--xhhao-com-primary: var(--accent);--xhhao-com-shadow: rgb(15 23 42 / .08)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0;min-width:0}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;text-size-adjust:100%;hanging-punctuation:first last}html.wi-home-snap{scroll-snap-type:y proximity}.wi-home-content--with-hero{scroll-snap-align:start}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}html.wi-home-snap{scroll-snap-type:none}}body{margin:0;padding:0;font-family:var(--font-body);font-size:var(--text-base);line-height:var(--leading-normal);color:var(--ink);background-color:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;word-wrap:break-word;overflow-wrap:break-word;overflow-x:hidden;tab-size:4}::selection{background-color:var(--accent);color:var(--bg)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--caramel);border-radius:9999px}::-webkit-scrollbar-thumb:hover{background:var(--accent)}a{color:var(--accent);text-decoration:none;transition:color var(--duration-fast) var(--ease-out-quart)}a:hover{color:var(--accent-hover)}a:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:8px}img,video,svg{max-width:100%;height:auto}.wi-main img,.wi-main video{display:block}img{border-radius:12px}p{margin-block-end:var(--space-md)}blockquote{margin-block:var(--space-lg);padding:var(--space-md) var(--space-lg);border-left:3px solid var(--accent);color:var(--ink-2);font-size:var(--text-md);line-height:var(--leading-relaxed);background:var(--bg-raised);border-radius:0 8px 8px 0}pre{padding:var(--space-lg);border-radius:12px;overflow-x:auto;background:var(--ink);color:#f8f8f2;font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--leading-relaxed);tab-size:2;scrollbar-width:none;-ms-overflow-style:none}pre::-webkit-scrollbar{display:none}code{font-family:var(--font-mono);font-size:.88em;padding:.15em .4em;background:var(--bg-raised);border:1px solid var(--rule);border-radius:8px}pre>code{all:unset;font-size:.9em;color:inherit}hr{margin-block:var(--space-2xl);border:none;border-top:1px solid var(--rule)}table{width:100%;border-collapse:collapse;font-size:var(--text-sm);overflow-x:auto;display:block}table th,table td{padding:var(--space-sm) var(--space-md);border:1px solid var(--rule);text-align:left}table th{background:var(--bg-raised);font-weight:600;color:var(--ink)}table td{color:var(--ink-2)}.wi-container{width:100%;max-width:1200px;margin-inline:auto;padding-inline:clamp(1rem,3vw,2rem)}.wi-section{padding-block:var(--section-spacing)}.wi-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.wi-main{padding-top:100px;padding-bottom:0;position:relative;z-index:1;background-color:var(--bg);width:100%;overflow-x:hidden;overflow-x:clip}.wi-main--wide.wi-main--home{padding-top:0;padding-bottom:0;padding-inline:0;background-color:transparent;max-width:100%;margin:0;overflow-x:hidden;overflow-x:clip;z-index:auto}.wi-content-wrap{max-width:800px;margin:0 auto;padding-inline:clamp(1rem,3vw,2rem);overflow-x:hidden;overflow-x:clip}.wi-content-wrap--wide{max-width:1200px}.wi-main--wide{max-width:1400px;width:100%;margin:0 auto}@media(max-width:768px){body{font-size:var(--text-base)}p{margin-block-end:1.2em}.wi-content-wrap{padding-inline:1.25rem}blockquote{padding:var(--space-sm) var(--space-md);font-size:var(--text-base)}pre{padding:var(--space-md);font-size:var(--text-sm)}}@media(max-width:480px){body{font-size:var(--text-base)}.wi-content-wrap{padding-inline:1rem}blockquote{padding:var(--space-sm) var(--space-sm);font-size:var(--text-base)}table{font-size:var(--text-sm)}th,td{padding:var(--space-sm) var(--space-sm)}}.theme-toggle[data-astro-cid-dz5h74bc]{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:34px;height:34px;padding:0;border:none;border-radius:8px;background:transparent;color:var(--ink-2);cursor:pointer;transition:background .15s ease,color .15s ease}.theme-toggle[data-astro-cid-dz5h74bc]:hover{background:var(--bg-raised);color:var(--ink)}.wi-navbar-wrapper[data-astro-cid-5blmo7yk]{position:fixed;top:0;left:0;right:0;z-index:100;display:flex;justify-content:center;padding:.75rem 1rem;pointer-events:none;transition:transform .35s cubic-bezier(.16,1,.3,1),padding var(--duration-normal) var(--ease-out-expo)}.wi-navbar--hidden[data-astro-cid-5blmo7yk]{transform:translateY(-100%)}.wi-navbar__capsule[data-astro-cid-5blmo7yk]{display:flex;align-items:center;gap:.5rem;width:100%;height:56px;padding:0 1.5rem;margin:0 auto;pointer-events:auto;transition:background var(--duration-normal) var(--ease-out-expo),box-shadow var(--duration-normal) var(--ease-out-expo),transform var(--duration-normal) var(--ease-out-expo)}.wi-navbar--glass[data-astro-cid-5blmo7yk] .wi-navbar__capsule[data-astro-cid-5blmo7yk]{border-radius:9999px;background:var(--glass-bg);backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);border:1px solid var(--glass-border);box-shadow:var(--shadow-md);max-width:900px}.wi-navbar--glass[data-astro-cid-5blmo7yk].wi-navbar--scrolled .wi-navbar__capsule[data-astro-cid-5blmo7yk]{background:var(--bg-overlay);box-shadow:var(--shadow-lg);transform:scale(.98)}.wi-navbar--minimal[data-astro-cid-5blmo7yk]{padding:0}.wi-navbar--minimal[data-astro-cid-5blmo7yk] .wi-navbar__capsule[data-astro-cid-5blmo7yk]{border-radius:0;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;border:none;border-bottom:1px solid transparent;box-shadow:none;max-width:100%;padding:0 2rem;transition:background .3s ease,border-color .3s ease}.wi-navbar--minimal[data-astro-cid-5blmo7yk].wi-navbar--scrolled .wi-navbar__capsule[data-astro-cid-5blmo7yk]{background:var(--bg);border-bottom-color:var(--rule)}.wi-navbar--float[data-astro-cid-5blmo7yk] .wi-navbar__capsule[data-astro-cid-5blmo7yk]{border-radius:16px;background:var(--glass-bg);backdrop-filter:blur(24px) saturate(180%);-webkit-backdrop-filter:blur(24px) saturate(180%);border:1px solid var(--glass-border);box-shadow:var(--shadow-lg);max-width:800px;transition:transform .3s cubic-bezier(.16,1,.3,1),background .3s ease,box-shadow .3s ease}.wi-navbar--float[data-astro-cid-5blmo7yk].wi-navbar--scrolled .wi-navbar__capsule[data-astro-cid-5blmo7yk]{transform:scale(.96);box-shadow:var(--shadow-md)}.wi-navbar__brand[data-astro-cid-5blmo7yk]{display:flex;align-items:center;gap:.5rem;text-decoration:none;flex-shrink:0}.wi-navbar__logo[data-astro-cid-5blmo7yk]{height:32px;width:auto;border-radius:8px;object-fit:contain}.wi-navbar__logo--square[data-astro-cid-5blmo7yk]{border-radius:0}.wi-navbar__logo--rounded[data-astro-cid-5blmo7yk]{border-radius:8px}.wi-navbar__logo--circle[data-astro-cid-5blmo7yk]{border-radius:50%}.wi-navbar__title[data-astro-cid-5blmo7yk]{font-family:var(--font-sans);font-weight:700;font-size:var(--text-md);color:var(--ink);letter-spacing:var(--tracking-tight);white-space:nowrap;transition:color var(--duration-fast) var(--ease-out-quart)}.wi-navbar__brand[data-astro-cid-5blmo7yk]:hover .wi-navbar__title[data-astro-cid-5blmo7yk]{color:var(--accent)}.wi-navbar__nav[data-astro-cid-5blmo7yk]{display:flex;align-items:center;gap:.25rem;flex:1;justify-content:center;min-width:0}.wi-navbar__item[data-astro-cid-5blmo7yk]{position:relative;display:inline-flex}.wi-navbar__submenu[data-astro-cid-5blmo7yk]{position:absolute;top:100%;left:50%;transform:translate(-50%) translateY(6px);display:flex;flex-direction:column;min-width:168px;padding:6px;margin:0;list-style:none;border-radius:var(--radius-md, 12px);background:var(--bg-raised);border:1px solid var(--rule);box-shadow:var(--shadow-lg);opacity:0;visibility:hidden;transition:opacity .18s ease,transform .18s var(--ease-out-quart),visibility .18s;z-index:101}.wi-navbar__item--has-children[data-astro-cid-5blmo7yk]:after{content:"";position:absolute;left:0;right:0;top:100%;height:10px}.wi-navbar__item--has-children[data-astro-cid-5blmo7yk]:hover .wi-navbar__submenu[data-astro-cid-5blmo7yk],.wi-navbar__item--has-children[data-astro-cid-5blmo7yk]:focus-within .wi-navbar__submenu[data-astro-cid-5blmo7yk]{opacity:1;visibility:visible;transform:translate(-50%) translateY(0)}.wi-navbar__submenu-link[data-astro-cid-5blmo7yk]{display:block;padding:.5rem .75rem;border-radius:8px;font-size:var(--text-sm);color:var(--ink-2);text-decoration:none;white-space:nowrap;transition:color .15s ease,background .15s ease}.wi-navbar__submenu-link[data-astro-cid-5blmo7yk]:hover{color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent)}.wi-navbar__item--has-children[data-astro-cid-5blmo7yk]>.wi-navbar__link[data-astro-cid-5blmo7yk]:after{content:"";display:inline-block;width:4px;height:4px;margin-left:.3rem;margin-top:-2px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg);opacity:.6;transition:transform .18s var(--ease-out-quart)}.wi-navbar__item--has-children[data-astro-cid-5blmo7yk]:hover>.wi-navbar__link[data-astro-cid-5blmo7yk]:after{transform:rotate(225deg);margin-top:2px}.wi-navbar__link[data-astro-cid-5blmo7yk]{display:inline-flex;align-items:center;padding:.3rem .7rem;border-radius:9999px;font-size:var(--text-sm);color:var(--ink-2);text-decoration:none;white-space:nowrap;transition:color var(--duration-fast) var(--ease-out-quart),background var(--duration-fast) var(--ease-out-quart)}.wi-navbar__link[data-astro-cid-5blmo7yk]:hover{color:var(--accent);background:var(--bg-raised)}.wi-navbar__link--active[data-astro-cid-5blmo7yk]{color:var(--ink);background:var(--bg-raised);font-weight:600}.wi-navbar__actions[data-astro-cid-5blmo7yk]{display:flex;align-items:center;gap:.25rem;flex-shrink:0;margin-left:auto}.wi-navbar__action-btn[data-astro-cid-5blmo7yk]{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;padding:0;border:none;border-radius:9999px;background:transparent;color:var(--ink-2);cursor:pointer;transition:background var(--duration-fast) var(--ease-out-quart),color var(--duration-fast) var(--ease-out-quart)}.wi-navbar__action-btn[data-astro-cid-5blmo7yk]:hover{background:var(--bg-raised);color:var(--ink)}.wi-navbar__action-btn[data-astro-cid-5blmo7yk]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.wi-navbar__menu-btn[data-astro-cid-5blmo7yk]{display:none}@media(max-width:768px){.wi-navbar-wrapper[data-astro-cid-5blmo7yk]{padding:.5rem .75rem}.wi-navbar__capsule[data-astro-cid-5blmo7yk]{padding:0 1rem}.wi-navbar__nav[data-astro-cid-5blmo7yk]{display:none}.wi-navbar__action-btn[data-astro-cid-5blmo7yk]{width:40px;height:40px}.wi-navbar__menu-btn[data-astro-cid-5blmo7yk]{display:inline-flex}}footer[data-astro-cid-sz7xmlte]{position:relative;border-top:1px solid var(--rule);background-color:var(--bg)}footer[data-astro-cid-sz7xmlte]:before{content:"";position:absolute;inset:0;pointer-events:none;background-color:color-mix(in srgb,var(--bg) 97%,var(--accent) 3%);-webkit-mask-image:linear-gradient(to bottom,transparent,#000);mask-image:linear-gradient(to bottom,transparent,#000)}.footer-inner[data-astro-cid-sz7xmlte]{position:relative;max-width:1200px;width:100%;margin:0 auto;padding:1.25rem;display:flex;flex-direction:column;align-items:center;gap:.75rem}.footer-bottom[data-astro-cid-sz7xmlte]{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:1rem;font-size:.85rem;color:var(--ink-3);width:100%}.footer-bottom--center[data-astro-cid-sz7xmlte]{justify-content:center}.footer-bottom--center[data-astro-cid-sz7xmlte] .footer-bottom__left[data-astro-cid-sz7xmlte]{flex:none}.footer-bottom__left[data-astro-cid-sz7xmlte]{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}.footer-copyright[data-astro-cid-sz7xmlte]{color:var(--ink-3)}.footer-icp[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]{color:var(--ink-3);text-decoration:none;transition:color .15s ease}.footer-icp[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]:hover{color:var(--ink-2)}.footer-mps[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]{display:inline-flex;align-items:center;gap:.3rem;color:var(--ink-3);text-decoration:none;transition:color .15s ease}.footer-mps[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]:hover{color:var(--ink-2)}.footer-mps__icon[data-astro-cid-sz7xmlte]{flex:none;vertical-align:middle}.footer-stats[data-astro-cid-sz7xmlte]{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:.5rem 1.25rem;width:100%;font-size:.8rem;color:var(--ink-3)}.footer-stat[data-astro-cid-sz7xmlte]{display:inline-flex;align-items:baseline;gap:.3rem}.footer-stat__value[data-astro-cid-sz7xmlte]{font-weight:600;color:var(--ink-2);font-variant-numeric:tabular-nums}.footer-stat__label[data-astro-cid-sz7xmlte]{opacity:.8}.footer-socials[data-astro-cid-sz7xmlte]{display:inline-flex;align-items:center;gap:.75rem}.footer-socials[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]{display:inline-flex;align-items:center;justify-content:center;color:var(--ink-3);text-decoration:none;font-size:1.05rem;transition:color .15s ease}.footer-socials[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]:hover{color:var(--ink-2)}.footer-bottom__right[data-astro-cid-sz7xmlte]{display:flex;align-items:center;gap:.5rem}.footer-bottom__right[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]{color:var(--ink-3);text-decoration:none;transition:color .15s ease}.footer-bottom__right[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]:hover{color:var(--ink-2)}.footer-separator[data-astro-cid-sz7xmlte]{color:var(--ink-3);opacity:.5}.footer-custom[data-astro-cid-sz7xmlte]{width:100%;text-align:center;font-size:.85rem;color:var(--ink-3);line-height:1.8}.footer-custom[data-astro-cid-sz7xmlte] a,.footer-custom[data-astro-cid-sz7xmlte] p,.footer-custom[data-astro-cid-sz7xmlte] span{display:inline;margin-inline:.25em}.footer-custom[data-astro-cid-sz7xmlte] a{color:var(--ink-3);text-decoration:none;transition:color .15s ease}.footer-custom[data-astro-cid-sz7xmlte] a:hover{color:var(--ink-2)}.footer-custom[data-astro-cid-sz7xmlte] img{display:inline-block;vertical-align:middle;border-radius:4px}.footer-custom[data-astro-cid-sz7xmlte] div{text-align:center}.footer-injected[data-astro-cid-sz7xmlte]{width:100%;text-align:center;font-size:.85rem;color:var(--ink-3);line-height:1.8}.footer-injected[data-astro-cid-sz7xmlte] a,.footer-injected[data-astro-cid-sz7xmlte] p,.footer-injected[data-astro-cid-sz7xmlte] span{display:inline;margin-inline:.25em}.footer-injected[data-astro-cid-sz7xmlte] a{color:var(--ink-3);text-decoration:none;transition:color .15s ease}.footer-injected[data-astro-cid-sz7xmlte] a:hover{color:var(--ink-2)}.footer-injected[data-astro-cid-sz7xmlte] img{display:inline-block;vertical-align:middle;border-radius:4px}.footer-injected[data-astro-cid-sz7xmlte] div{text-align:center}@media(max-width:768px){.footer-bottom[data-astro-cid-sz7xmlte]{flex-direction:column;align-items:center;text-align:center}.footer-bottom__left[data-astro-cid-sz7xmlte],.footer-bottom__right[data-astro-cid-sz7xmlte]{justify-content:center}.footer-custom[data-astro-cid-sz7xmlte],.footer-injected[data-astro-cid-sz7xmlte]{font-size:.75rem}}.wi-mobile-menu[data-astro-cid-6aabv5oc]{position:fixed;inset:0;z-index:200;pointer-events:none;visibility:hidden}.wi-mobile-menu--open[data-astro-cid-6aabv5oc]{pointer-events:auto;visibility:visible}.wi-mobile-menu__backdrop[data-astro-cid-6aabv5oc]{position:absolute;inset:0;background:#0006;opacity:0;transition:opacity var(--duration-normal) var(--ease-out-expo)}.wi-mobile-menu--open[data-astro-cid-6aabv5oc] .wi-mobile-menu__backdrop[data-astro-cid-6aabv5oc]{opacity:1}.wi-mobile-menu__panel[data-astro-cid-6aabv5oc]{position:absolute;top:0;right:0;bottom:0;width:min(85vw,360px);display:flex;flex-direction:column;background:var(--glass-bg);backdrop-filter:blur(24px) saturate(180%);-webkit-backdrop-filter:blur(24px) saturate(180%);border-left:1px solid var(--glass-border);box-shadow:var(--shadow-lg);transform:translate(100%);transition:transform var(--duration-normal) var(--ease-out-expo)}.wi-mobile-menu--open[data-astro-cid-6aabv5oc] .wi-mobile-menu__panel[data-astro-cid-6aabv5oc]{transform:translate(0)}.wi-mobile-menu__header[data-astro-cid-6aabv5oc]{display:flex;align-items:center;justify-content:flex-end;padding:1rem 1.25rem;border-bottom:1px solid var(--glass-border)}.wi-mobile-menu__close[data-astro-cid-6aabv5oc]{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border:none;border-radius:9999px;background:transparent;color:var(--ink-2);cursor:pointer;transition:background var(--duration-fast) var(--ease-out-quart),color var(--duration-fast) var(--ease-out-quart)}.wi-mobile-menu__close[data-astro-cid-6aabv5oc]:hover{background:var(--bg-raised);color:var(--ink)}.wi-mobile-menu__close[data-astro-cid-6aabv5oc]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.wi-mobile-menu__nav[data-astro-cid-6aabv5oc]{flex:1;overflow-y:auto;padding:1rem 1.25rem;display:flex;flex-direction:column;gap:.25rem}.wi-mobile-menu__link[data-astro-cid-6aabv5oc]{display:flex;align-items:center;padding:.75rem 1rem;border-radius:12px;font-size:var(--text-lg);font-weight:500;color:var(--ink-2);text-decoration:none;transition:color var(--duration-fast) var(--ease-out-quart),background var(--duration-fast) var(--ease-out-quart)}.wi-mobile-menu__link--sub[data-astro-cid-6aabv5oc]{padding-left:2rem;font-size:var(--text-base);font-weight:400;color:var(--ink-3)}.wi-mobile-menu__link[data-astro-cid-6aabv5oc]:hover{color:var(--accent);background:var(--bg-raised)}.wi-mobile-menu__link--active[data-astro-cid-6aabv5oc]{color:var(--accent);background:var(--bg-raised);font-weight:600}.wi-mobile-menu__footer[data-astro-cid-6aabv5oc]{display:flex;flex-direction:column;gap:.5rem;padding:1rem 1.25rem;border-top:1px solid var(--glass-border)}.wi-mobile-menu__action-btn[data-astro-cid-6aabv5oc]{display:flex;align-items:center;gap:.75rem;width:100%;padding:.75rem 1rem;border:none;border-radius:12px;background:transparent;color:var(--ink-2);font-size:var(--text-md);font-family:var(--font-sans);cursor:pointer;transition:color var(--duration-fast) var(--ease-out-quart),background var(--duration-fast) var(--ease-out-quart)}.wi-mobile-menu__action-btn[data-astro-cid-6aabv5oc]:hover{color:var(--ink);background:var(--bg-raised)}.wi-mobile-menu__action-btn[data-astro-cid-6aabv5oc]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.wi-mobile-menu__icon-sun[data-astro-cid-6aabv5oc],.dark .wi-mobile-menu__icon-moon[data-astro-cid-6aabv5oc]{display:none}.dark .wi-mobile-menu__icon-sun[data-astro-cid-6aabv5oc]{display:block}.wi-click-fx-layer{position:fixed;inset:0;z-index:12050;pointer-events:none;overflow:hidden}.wi-click-fx{position:fixed;pointer-events:none;will-change:transform,opacity;user-select:none}.wi-click-fx--text{font-size:18px;font-weight:700;transform:translate(-50%,-50%);animation:wi-fx-text 1.2s ease-out forwards;text-shadow:0 1px 2px rgba(0,0,0,.18)}.wi-click-fx--heart{font-size:20px;opacity:1;transition:transform 1s cubic-bezier(.16,1,.3,1),opacity 1s ease-out}.wi-click-fx--spark{width:6px;height:6px;border-radius:50%;opacity:1;transition:transform .8s cubic-bezier(.16,1,.3,1),opacity .8s ease-out}.wi-click-fx--ripple{width:30px;height:30px;border:2px solid;border-radius:50%;transform:translate(-50%,-50%) scale(.5);opacity:.9;transition:transform .7s ease-out,opacity .7s ease-out}.wi-click-fx--particle{width:8px;height:8px;border-radius:50%;opacity:1;transition:transform .7s cubic-bezier(.16,1,.3,1),opacity .7s ease-out}.wi-click-fx--star{font-size:16px;opacity:1;transition:transform .8s cubic-bezier(.16,1,.3,1),opacity .8s ease-out}.wi-click-fx--trail-star{font-size:12px;transform:translate(-50%,-50%);opacity:.9;transition:opacity .6s ease-out,transform .6s ease-out}.wi-click-fx--trail-particle{width:6px;height:6px;border-radius:50%;transform:translate(-50%,-50%);opacity:.9;transition:opacity .5s ease-out,transform .5s ease-out}@keyframes wi-fx-text{0%{opacity:0;transform:translate(-50%,-50%) scale(.5)}20%{opacity:1;transform:translate(-50%,-80%) scale(1.1)}to{opacity:0;transform:translate(-50%,-120%) scale(.9)}}html{min-height:100vh}html.wi-theme-transition,html.wi-theme-transition *,html.wi-theme-transition *:before,html.wi-theme-transition *:after{transition:background-color .3s ease,color .3s ease,border-color .3s ease,box-shadow .3s ease,fill .3s ease,stroke .3s ease!important}.wi-body{min-height:100vh;display:flex;flex-direction:column}.wi-main{flex:1}.wi-reveal{opacity:0;transform:translateY(20px);transition:opacity var(--duration-normal, .3s) var(--ease-out-expo, cubic-bezier(.16, 1, .3, 1)),transform var(--duration-normal, .3s) var(--ease-out-expo, cubic-bezier(.16, 1, .3, 1))}.wi-revealed{opacity:1;transform:translateY(0)}html.wi-no-animations .wi-reveal{opacity:1;transform:none;transition:none} diff --git a/compat/assets/index@_@astro.CDhydtRA.css b/compat/assets/index@_@astro.CDhydtRA.css new file mode 100644 index 0000000..287c283 --- /dev/null +++ b/compat/assets/index@_@astro.CDhydtRA.css @@ -0,0 +1 @@ +.hero[data-astro-cid-nlow4r3u]{position:fixed;inset:0;z-index:-1;display:flex;align-items:center;justify-content:center;overflow:hidden;background:linear-gradient(160deg,var(--bg) 0%,color-mix(in srgb,var(--bg) 85%,var(--accent) 15%) 40%,color-mix(in srgb,var(--bg) 90%,var(--mist-pink) 10%) 70%,var(--bg) 100%);width:100%}.hero__bg[data-astro-cid-nlow4r3u]{position:absolute;inset:0;pointer-events:none}.hero__blur-overlay[data-astro-cid-nlow4r3u]{position:absolute;inset:0;z-index:1;background:color-mix(in srgb,var(--bg) 26%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);opacity:0;will-change:opacity;pointer-events:none}.hero[data-astro-cid-nlow4r3u].wi-hero--offscreen{visibility:hidden}.hero[data-astro-cid-nlow4r3u].wi-hero--offscreen .hero__orb[data-astro-cid-nlow4r3u],.hero[data-astro-cid-nlow4r3u].wi-hero--offscreen .hero__scroll-indicator[data-astro-cid-nlow4r3u]{animation-play-state:paused}.hero__orb[data-astro-cid-nlow4r3u]{position:absolute;border-radius:50%;filter:blur(80px);animation:breathe 5s ease-in-out infinite}.hero__orb--1[data-astro-cid-nlow4r3u]{width:420px;height:420px;top:-10%;right:-5%;background:radial-gradient(circle,rgba(212,118,78,.4) 0%,transparent 70%);animation-delay:0s;animation-duration:5s}.hero__orb--2[data-astro-cid-nlow4r3u]{width:350px;height:350px;bottom:-8%;left:-5%;background:radial-gradient(circle,rgba(220,140,160,.3) 0%,transparent 70%);animation-delay:-1.8s;animation-duration:6s}.hero__orb--3[data-astro-cid-nlow4r3u]{width:300px;height:300px;top:40%;left:50%;transform:translate(-50%);background:radial-gradient(circle,rgba(180,150,200,.2) 0%,transparent 70%);animation-delay:-3.2s;animation-duration:4.5s}.hero__bg-image[data-astro-cid-nlow4r3u]{position:absolute;inset:0;background-size:cover;background-position:center;opacity:1}.hero__bg-image--dark[data-astro-cid-nlow4r3u],html.dark .hero__bg-image--light[data-astro-cid-nlow4r3u]{display:none}html.dark .hero__bg-image--dark[data-astro-cid-nlow4r3u]{display:block}.hero__content[data-astro-cid-nlow4r3u]{position:relative;z-index:2;display:flex;flex-direction:column;align-items:center;text-align:center;padding:var(--space-xl);gap:var(--space-lg);transition:opacity .4s ease,transform .4s ease}.hero__title[data-astro-cid-nlow4r3u]{font-family:var(--font-sans);font-size:clamp(3rem,8vw,6rem);font-weight:700;letter-spacing:-.03em;color:var(--hero-title-text, var(--ink));line-height:var(--leading-tight)}.hero__subtitle[data-astro-cid-nlow4r3u]{font-family:var(--font-body);font-size:var(--text-xl);color:var(--hero-subtitle-text, var(--ink-2));letter-spacing:.05em;line-height:var(--leading-normal)}.hero__description[data-astro-cid-nlow4r3u]{font-size:var(--text-lg);color:var(--hero-quote-text, var(--ink-2));line-height:var(--leading-relaxed);max-width:560px;text-align:center;transition:opacity .3s ease}.hero--fx-shadow[data-astro-cid-nlow4r3u] .hero__title[data-astro-cid-nlow4r3u],.hero--fx-shadow[data-astro-cid-nlow4r3u] .hero__subtitle[data-astro-cid-nlow4r3u],.hero--fx-shadow[data-astro-cid-nlow4r3u] .hero__description[data-astro-cid-nlow4r3u]{text-shadow:0 1px 2px rgba(0,0,0,.22),0 2px 10px rgba(0,0,0,.16)}html.dark .hero--fx-shadow[data-astro-cid-nlow4r3u] .hero__title[data-astro-cid-nlow4r3u],html.dark .hero--fx-shadow[data-astro-cid-nlow4r3u] .hero__subtitle[data-astro-cid-nlow4r3u],html.dark .hero--fx-shadow[data-astro-cid-nlow4r3u] .hero__description[data-astro-cid-nlow4r3u]{text-shadow:0 1px 3px rgba(0,0,0,.6),0 2px 12px rgba(0,0,0,.4)}.hero--fx-glow[data-astro-cid-nlow4r3u] .hero__title[data-astro-cid-nlow4r3u],.hero--fx-glow[data-astro-cid-nlow4r3u] .hero__subtitle[data-astro-cid-nlow4r3u],.hero--fx-glow[data-astro-cid-nlow4r3u] .hero__description[data-astro-cid-nlow4r3u]{text-shadow:0 0 10px rgba(255,255,255,.85),0 0 26px rgba(255,255,255,.5)}html.dark .hero--fx-glow[data-astro-cid-nlow4r3u] .hero__title[data-astro-cid-nlow4r3u],html.dark .hero--fx-glow[data-astro-cid-nlow4r3u] .hero__subtitle[data-astro-cid-nlow4r3u],html.dark .hero--fx-glow[data-astro-cid-nlow4r3u] .hero__description[data-astro-cid-nlow4r3u]{text-shadow:0 0 8px rgba(255,255,255,.45),0 0 24px rgba(255,255,255,.22)}.hero--fx-scrim[data-astro-cid-nlow4r3u] .hero__content[data-astro-cid-nlow4r3u]{background:#ffffff73;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-radius:24px;padding:var(--space-2xl)}html.dark .hero--fx-scrim[data-astro-cid-nlow4r3u] .hero__content[data-astro-cid-nlow4r3u]{background:#0006}.hero--fx-gradient[data-astro-cid-nlow4r3u] .hero__content[data-astro-cid-nlow4r3u]{background:linear-gradient(135deg,#ffffff8c,#ffffff2e);border-radius:24px;padding:var(--space-2xl)}html.dark .hero--fx-gradient[data-astro-cid-nlow4r3u] .hero__content[data-astro-cid-nlow4r3u]{background:linear-gradient(135deg,#00000080,#00000029)}.hero--fx-frame[data-astro-cid-nlow4r3u] .hero__content[data-astro-cid-nlow4r3u]{border:1px solid color-mix(in srgb,var(--ink) 22%,transparent);background:color-mix(in srgb,var(--bg) 30%,transparent);border-radius:24px;padding:var(--space-2xl) var(--space-3xl);gap:var(--space-xl)}html.dark .hero--fx-frame[data-astro-cid-nlow4r3u] .hero__content[data-astro-cid-nlow4r3u]{border-color:color-mix(in srgb,#ffffff 32%,transparent)}.hero--fx-frame[data-astro-cid-nlow4r3u] .hero__title[data-astro-cid-nlow4r3u]{letter-spacing:.08em}.hero--fx-frame[data-astro-cid-nlow4r3u] .hero__subtitle[data-astro-cid-nlow4r3u]{letter-spacing:.22em}.hero__scroll-indicator[data-astro-cid-nlow4r3u]{position:absolute;bottom:2rem;left:50%;transform:translate(-50%);z-index:2;display:flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border:none;border-radius:50%;background:transparent;color:var(--ink-3);cursor:pointer;animation:scrollHint 2s ease-in-out infinite;transition:opacity .4s ease,color .2s ease,background .2s ease}.hero__scroll-indicator[data-astro-cid-nlow4r3u]:hover{color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent)}.hero__scroll-indicator[data-astro-cid-nlow4r3u]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.hero--no-breath[data-astro-cid-nlow4r3u] .hero__orb[data-astro-cid-nlow4r3u]{animation:none}@media(prefers-reduced-motion:reduce){.hero__orb[data-astro-cid-nlow4r3u],.hero__scroll-indicator[data-astro-cid-nlow4r3u]{animation:none}.hero__content[data-astro-cid-nlow4r3u]{transition:none}}html.dark .hero[data-astro-cid-nlow4r3u]{background:linear-gradient(160deg,var(--bg) 0%,color-mix(in srgb,var(--bg) 85%,var(--accent) 12%) 40%,var(--bg) 100%)}html.dark .hero__orb--1[data-astro-cid-nlow4r3u]{background:radial-gradient(circle,rgba(232,149,95,.25) 0%,transparent 70%)}html.dark .hero__orb--2[data-astro-cid-nlow4r3u]{background:radial-gradient(circle,rgba(200,120,140,.18) 0%,transparent 70%)}html.dark .hero__orb--3[data-astro-cid-nlow4r3u]{background:radial-gradient(circle,rgba(160,130,180,.12) 0%,transparent 70%)}@media(max-width:768px){.hero__title[data-astro-cid-nlow4r3u]{font-size:clamp(2.25rem,10vw,3.5rem)}.hero__orb--1[data-astro-cid-nlow4r3u]{width:260px;height:260px}.hero__orb--2[data-astro-cid-nlow4r3u]{width:220px;height:220px}.hero__orb--3[data-astro-cid-nlow4r3u]{width:180px;height:180px}.hero__content[data-astro-cid-nlow4r3u]{padding:var(--space-lg);gap:var(--space-md)}.hero--fx-scrim[data-astro-cid-nlow4r3u] .hero__content[data-astro-cid-nlow4r3u],.hero--fx-gradient[data-astro-cid-nlow4r3u] .hero__content[data-astro-cid-nlow4r3u]{padding:var(--space-xl) var(--space-lg)}.hero--fx-frame[data-astro-cid-nlow4r3u] .hero__content[data-astro-cid-nlow4r3u]{padding:var(--space-xl) var(--space-lg);gap:var(--space-lg)}.hero__description[data-astro-cid-nlow4r3u]{max-width:90vw}}.wi-welcome-popup[data-astro-cid-4xlqga3i]{position:fixed;z-index:9999;max-width:min(380px,calc(100vw - 32px));pointer-events:none;opacity:0;transform:translateY(-12px);transition:opacity .4s var(--ease-out-expo),transform .4s var(--ease-out-expo);will-change:opacity,transform}.wi-welcome-popup[data-astro-cid-4xlqga3i][data-position=top-left]{top:88px;left:24px}.wi-welcome-popup[data-astro-cid-4xlqga3i][data-position=top-right]{top:88px;right:24px}.wi-welcome-popup[data-astro-cid-4xlqga3i][data-position=bottom-left]{bottom:24px;left:24px;transform:translateY(12px)}.wi-welcome-popup[data-astro-cid-4xlqga3i][data-position=bottom-right]{bottom:24px;right:24px;transform:translateY(12px)}.wi-welcome-popup[data-astro-cid-4xlqga3i][data-position=top-center]{top:88px;left:50%;transform:translate(-50%) translateY(-12px)}.wi-welcome-popup--visible[data-astro-cid-4xlqga3i]{opacity:1;pointer-events:auto}.wi-welcome-popup--visible[data-astro-cid-4xlqga3i][data-position=top-left],.wi-welcome-popup--visible[data-astro-cid-4xlqga3i][data-position=top-right],.wi-welcome-popup--visible[data-astro-cid-4xlqga3i][data-position=bottom-left],.wi-welcome-popup--visible[data-astro-cid-4xlqga3i][data-position=bottom-right]{transform:translateY(0)}.wi-welcome-popup--visible[data-astro-cid-4xlqga3i][data-position=top-center]{transform:translate(-50%) translateY(0)}.wi-welcome-popup--leaving[data-astro-cid-4xlqga3i]{opacity:0;pointer-events:none}.wi-welcome-popup--leaving[data-astro-cid-4xlqga3i][data-position^=top]{transform:translateY(-12px)}.wi-welcome-popup--leaving[data-astro-cid-4xlqga3i][data-position=bottom-left],.wi-welcome-popup--leaving[data-astro-cid-4xlqga3i][data-position=bottom-right]{transform:translateY(12px)}.wi-welcome-popup--leaving[data-astro-cid-4xlqga3i][data-position=top-center]{transform:translate(-50%) translateY(-12px)}.wi-welcome-popup__inner[data-astro-cid-4xlqga3i]{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:9999px;background:color-mix(in srgb,var(--bg-raised) 92%,transparent);backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);border:1px solid var(--rule);box-shadow:0 8px 24px -8px #0000001f,0 2px 8px -2px #0000000f;color:var(--ink);font-size:var(--text-sm);line-height:1.4}.wi-welcome-popup__icon[data-astro-cid-4xlqga3i]{display:flex;align-items:center;justify-content:center;width:28px;height:28px;flex-shrink:0;border-radius:50%;background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent)}.wi-welcome-popup__icon[data-astro-cid-4xlqga3i] svg[data-astro-cid-4xlqga3i]{animation:wi-welcome-popup-pulse 2s ease-in-out infinite}.wi-welcome-popup__content[data-astro-cid-4xlqga3i]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wi-welcome-popup__close[data-astro-cid-4xlqga3i]{display:flex;align-items:center;justify-content:center;width:20px;height:20px;flex-shrink:0;padding:0;border:none;border-radius:50%;background:transparent;color:var(--ink-3);cursor:pointer;opacity:.6;transition:opacity .2s ease,background .2s ease,color .2s ease}.wi-welcome-popup__close[data-astro-cid-4xlqga3i]:hover{opacity:1;background:color-mix(in srgb,var(--ink-3) 12%,transparent);color:var(--ink)}.wi-welcome-popup__progress[data-astro-cid-4xlqga3i]{position:absolute;left:14px;right:14px;bottom:4px;height:2px;border-radius:1px;background:color-mix(in srgb,var(--accent) 30%,transparent);transform-origin:left center;transform:scaleX(1);opacity:.7}.wi-welcome-popup--visible[data-astro-cid-4xlqga3i] .wi-welcome-popup__progress[data-astro-cid-4xlqga3i]{opacity:1}@keyframes wi-welcome-popup-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.12)}}@media(max-width:480px){.wi-welcome-popup[data-astro-cid-4xlqga3i][data-position]{max-width:calc(100vw - 24px)}}@media(prefers-reduced-motion:reduce){.wi-welcome-popup[data-astro-cid-4xlqga3i],.wi-welcome-popup--visible[data-astro-cid-4xlqga3i],.wi-welcome-popup--leaving[data-astro-cid-4xlqga3i],.wi-welcome-popup__icon[data-astro-cid-4xlqga3i] svg[data-astro-cid-4xlqga3i]{transition:opacity .2s ease!important;transform:none!important;animation:none!important}}.wi-home-content[data-astro-cid-j7pv25f6]{position:relative;z-index:1;background:var(--bg);min-height:100vh;padding-bottom:2rem}.wi-home-content--with-hero[data-astro-cid-j7pv25f6]{margin-top:100vh;margin-top:100dvh}.wi-home-pinned[data-astro-cid-j7pv25f6]{padding-block:2rem;background:var(--bg)}.wi-home-pinned[data-astro-cid-j7pv25f6]:not(:has(.wi-pinned__card)){display:none}.wi-section__header[data-astro-cid-j7pv25f6]{margin-bottom:var(--space-xl)}.wi-section__title[data-astro-cid-j7pv25f6]{font-family:var(--font-sans);font-size:var(--text-2xl);font-weight:700;color:var(--ink);letter-spacing:var(--tracking-tight);display:flex;align-items:center;gap:.5rem}.wi-section__title[data-astro-cid-j7pv25f6]:before{content:"";display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--accent);flex-shrink:0}.wi-pinned[data-astro-cid-j7pv25f6]{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-lg)}.wi-pinned__card[data-astro-cid-j7pv25f6]{display:flex;flex-direction:column;border-radius:16px;overflow:hidden;background:var(--bg-raised);box-shadow:var(--shadow-sm);text-decoration:none;color:inherit;transition:transform var(--duration-normal) var(--ease-out-expo),box-shadow var(--duration-normal) var(--ease-out-expo)}.wi-pinned__card[data-astro-cid-j7pv25f6]:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg)}.wi-pinned__card[data-astro-cid-j7pv25f6]:first-child:nth-last-child(1){grid-column:1 / -1}.wi-pinned__card[data-astro-cid-j7pv25f6]:first-child:nth-last-child(1) .wi-pinned__cover[data-astro-cid-j7pv25f6]{aspect-ratio:21 / 9}.wi-pinned__card[data-astro-cid-j7pv25f6]:first-child:nth-last-child(1) .wi-pinned__title[data-astro-cid-j7pv25f6]{font-size:var(--text-2xl)}.wi-pinned__cover[data-astro-cid-j7pv25f6]{aspect-ratio:16 / 10;overflow:hidden}.wi-pinned__image[data-astro-cid-j7pv25f6]{width:100%;height:100%;object-fit:cover;transition:transform var(--duration-normal) var(--ease-out-expo);border-radius:0}.wi-pinned__card[data-astro-cid-j7pv25f6]:hover .wi-pinned__image[data-astro-cid-j7pv25f6]{transform:scale(1.03)}.wi-pinned__body[data-astro-cid-j7pv25f6]{padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-sm);flex:1}.wi-pinned__meta[data-astro-cid-j7pv25f6]{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.wi-pinned__category[data-astro-cid-j7pv25f6]{font-size:var(--text-xs);color:var(--accent);letter-spacing:var(--tracking-wide);text-transform:uppercase;font-weight:600}.wi-pinned__category[data-astro-cid-j7pv25f6]:after{content:"·";margin-left:var(--space-sm);color:var(--ink-3)}.wi-pinned__date[data-astro-cid-j7pv25f6]{font-size:var(--text-xs);color:var(--ink-3);letter-spacing:var(--tracking-wide);text-transform:uppercase}.wi-pinned__title[data-astro-cid-j7pv25f6]{font-family:var(--font-sans);font-size:var(--text-xl);font-weight:700;color:var(--ink);line-height:var(--leading-tight);letter-spacing:var(--tracking-tight);transition:color var(--duration-fast) var(--ease-out-quart)}.wi-pinned__card[data-astro-cid-j7pv25f6]:hover .wi-pinned__title[data-astro-cid-j7pv25f6]{color:var(--accent)}.wi-pinned__excerpt[data-astro-cid-j7pv25f6]{font-size:var(--text-sm);color:var(--ink-2);line-height:var(--leading-relaxed);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}@media(max-width:768px){.wi-pinned[data-astro-cid-j7pv25f6]{grid-template-columns:1fr}.wi-pinned__card[data-astro-cid-j7pv25f6]:first-child:nth-last-child(1) .wi-pinned__cover[data-astro-cid-j7pv25f6]{aspect-ratio:16 / 9}.wi-pinned__card[data-astro-cid-j7pv25f6]:first-child:nth-last-child(1) .wi-pinned__title[data-astro-cid-j7pv25f6]{font-size:var(--text-xl)}}.wi-home-posts[data-astro-cid-j7pv25f6]{padding-block:2rem;background:var(--bg);content-visibility:auto;contain-intrinsic-size:auto 600px}.wi-flow[data-astro-cid-j7pv25f6]{display:flex;flex-direction:column;gap:var(--space-lg)}.wi-flow__card[data-astro-cid-j7pv25f6]{display:flex;flex-direction:row;align-items:stretch;border-radius:16px;overflow:hidden;background:var(--bg-raised);box-shadow:var(--shadow-sm);color:inherit;position:relative;transition:transform var(--duration-normal) var(--ease-out-expo),box-shadow var(--duration-normal) var(--ease-out-expo)}.wi-flow__stretched-link[data-astro-cid-j7pv25f6]{position:absolute;inset:0;z-index:1}.wi-flow__card[data-astro-cid-j7pv25f6]:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg)}.wi-flow__card--with-cover[data-astro-cid-j7pv25f6] .wi-flow__body[data-astro-cid-j7pv25f6]{flex:1;min-width:0}.wi-flow__cover[data-astro-cid-j7pv25f6]{width:240px;flex-shrink:0;overflow:hidden}.wi-flow__image[data-astro-cid-j7pv25f6]{width:100%;height:100%;display:block;object-fit:cover;transition:transform var(--duration-normal) var(--ease-out-expo);border-radius:0}.wi-flow__card[data-astro-cid-j7pv25f6]:hover .wi-flow__image[data-astro-cid-j7pv25f6]{transform:scale(1.03)}.wi-flow__body[data-astro-cid-j7pv25f6]{padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-sm);flex:1;justify-content:center}.wi-flow__meta[data-astro-cid-j7pv25f6]{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap}.wi-flow__categories[data-astro-cid-j7pv25f6]{font-size:var(--text-xs);letter-spacing:var(--tracking-wide);font-weight:600}.wi-flow__categories[data-astro-cid-j7pv25f6]:after{content:"·";margin-left:var(--space-sm);margin-right:var(--space-sm);color:var(--ink-3)}.wi-flow__category-link[data-astro-cid-j7pv25f6]{color:var(--accent);text-decoration:none;position:relative;z-index:2;transition:color var(--duration-fast) var(--ease-out-quart)}.wi-flow__category-link[data-astro-cid-j7pv25f6]:hover{color:var(--accent-hover);text-decoration:underline}.wi-flow__category-link[data-astro-cid-j7pv25f6]+.wi-flow__category-link[data-astro-cid-j7pv25f6]:before{content:"、";color:var(--accent)}.wi-flow__date[data-astro-cid-j7pv25f6]{font-size:var(--text-xs);color:var(--ink-3);letter-spacing:var(--tracking-wide);text-transform:uppercase}.wi-flow__title-link[data-astro-cid-j7pv25f6]{text-decoration:none;position:relative;z-index:2}.wi-flow__title[data-astro-cid-j7pv25f6]{font-family:var(--font-sans);font-size:var(--text-lg);font-weight:700;color:var(--ink);line-height:var(--leading-tight);letter-spacing:var(--tracking-tight);transition:color var(--duration-fast) var(--ease-out-quart)}.wi-flow__card[data-astro-cid-j7pv25f6]:hover .wi-flow__title[data-astro-cid-j7pv25f6]{color:var(--accent)}.wi-flow__excerpt[data-astro-cid-j7pv25f6]{font-size:var(--text-sm);color:var(--ink-2);line-height:var(--leading-relaxed);display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;margin-block-end:0}.wi-flow__footer[data-astro-cid-j7pv25f6]{display:flex;align-items:center;justify-content:space-between;gap:.5rem;flex-wrap:wrap;margin-top:auto;padding-top:var(--space-xs)}.wi-flow__tags[data-astro-cid-j7pv25f6]{display:flex;flex-wrap:wrap;gap:4px}.wi-flow__tag-link[data-astro-cid-j7pv25f6]{font-size:11px;color:var(--ink-3);text-decoration:none;padding:2px 8px;border-radius:4px;background:var(--bg);border:1px solid var(--rule);position:relative;z-index:2;transition:color var(--duration-fast) var(--ease-out-quart),border-color var(--duration-fast) var(--ease-out-quart),background var(--duration-fast) var(--ease-out-quart);white-space:nowrap}.wi-flow__tag-link[data-astro-cid-j7pv25f6]:hover{color:var(--accent);border-color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,var(--bg))}.wi-flow__stats[data-astro-cid-j7pv25f6]{display:flex;align-items:center;gap:.5rem;font-size:var(--text-xs);color:var(--ink-3);white-space:nowrap}.wi-flow__stat[data-astro-cid-j7pv25f6]+.wi-flow__stat[data-astro-cid-j7pv25f6]:before{content:"·";margin-right:.5rem;color:var(--ink-3)}.wi-pagination[data-astro-cid-j7pv25f6]{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding-top:var(--space-xl);margin-top:var(--space-xl);border-top:1px solid var(--rule);font-size:var(--text-sm)}.wi-pagination__prev[data-astro-cid-j7pv25f6],.wi-pagination__next[data-astro-cid-j7pv25f6]{color:var(--ink-2);text-decoration:none;transition:color var(--duration-fast) var(--ease-out-quart)}.wi-pagination__prev[data-astro-cid-j7pv25f6]:hover,.wi-pagination__next[data-astro-cid-j7pv25f6]:hover{color:var(--accent)}.wi-pagination__info[data-astro-cid-j7pv25f6]{color:var(--ink-3)}.wi-infinite-scroll__loader[data-astro-cid-j7pv25f6]{display:flex;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-xl) 0;color:var(--ink-3);font-size:var(--text-sm)}.wi-infinite-scroll__spinner[data-astro-cid-j7pv25f6]{width:18px;height:18px;border:2px solid var(--rule);border-top-color:var(--accent);border-radius:50%;animation:wi-spin .6s linear infinite}@keyframes wi-spin{to{transform:rotate(360deg)}}.wi-infinite-scroll__end[data-astro-cid-j7pv25f6]{text-align:center;padding:var(--space-xl) 0;color:var(--ink-3);font-size:var(--text-sm)}@media(max-width:640px){.wi-flow__card[data-astro-cid-j7pv25f6]{flex-direction:column}.wi-flow__cover[data-astro-cid-j7pv25f6]{width:100%;aspect-ratio:16 / 9}.wi-flow__footer[data-astro-cid-j7pv25f6]{flex-direction:column;align-items:flex-start;gap:.4rem}.wi-flow__tag-link[data-astro-cid-j7pv25f6]{padding:4px 10px}}@media(max-width:480px){.wi-pinned__card[data-astro-cid-j7pv25f6]{border-radius:12px}} diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index a1c2dd9..60ce41d 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -80,7 +80,7 @@ export default defineConfig({ ], socialLinks: [ - { icon: 'github', link: 'https://github.com/nxxy335top/halo-theme-WarmIsland' } + { icon: 'github', link: 'https://git.nxxy335.top/nxxy335/halo-theme-WarmIsland', ariaLabel: '源码仓库' } ], search: { diff --git a/docs/changelog.md b/docs/changelog.md index bd56473..51e1a44 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,5 +1,30 @@ # 更新日志 +## v1.2.5 + +### 兼容性与元数据 + +- ⬆️ Halo 版本要求提升至 **2.27.0+**(页面布局契约、微信读书页面依赖 2.27 的能力) +- 🔗 源码仓库与问题反馈地址统一为 `https://git.nxxy335.top/nxxy335/halo-theme-WarmIsland` +- 📚 完善安装、开发、FAQ 文档,修正过时的技术栈与构建打包说明 + +### 性能优化 + +- 🚀 **首页滚动顺滑性**:移除逐帧改写全屏 `backdrop-filter` 模糊半径的逻辑。 + 旧实现让 Chromium 每个滚动帧都重做一次全屏背景采样 + 高斯模糊,是首页掉帧主因; + 现改为固定模糊半径 + 只调整 `opacity`(合成层操作),并缓存进度值避免重复写 DOM +- 🚀 **首屏离屏即停**:滚过首屏后 Hero 已被不透明内容区完全盖住,此时隐藏 Hero + 并暂停光球动画,长页面后半段不再有额外绘制 +- 🚀 **首屏整屏吸附回归(顺滑版)**:v1.2.5 初版改用 CSS `scroll-snap: y proximity` 后吸附 + 实际失效——内容区顶部是唯一吸附点、页面顶部 `0` 没有吸附点,`proximity` 几乎不触发; + 换成 `mandatory` 又会把长内容反复拉回内容区顶部。现改为**边界吸附**:只在 + `0 ↔ 内容区顶部` 接管一次滚轮 / 触摸,进入内容区后完全交给原生滚动惯性;解锁用 + `scrollend` + 600ms 兜底(原为固定 800ms 输入锁),已在目标位置时不再接管 +- 🚀 **导航栏滚动状态去重**:只在状态真正变化时写 class,不再每帧触发样式重算 +- ♿ 补充 `prefers-reduced-motion` 支持:减少动态效果时关闭平滑滚动与光球 / 指示箭头动画, + 吸附改为即时定位(不再关闭吸附) +- 🖼️ 首页文章列表继续使用 `content-visibility: auto` 跳过视口外渲染,图片保持懒加载 + ## v1.2.4 ### 问题修复 diff --git a/docs/config/footer.md b/docs/config/footer.md index e07af1e..f5d52a1 100644 --- a/docs/config/footer.md +++ b/docs/config/footer.md @@ -80,7 +80,7 @@ ICP 备案号通常需要链接到工信部的备案查询页面。主题会自 footer_socials: - platform: GitHub icon: fa-brands fa-github - url: https://github.com/your-username + url: https://git.nxxy335.top/nxxy335/halo-theme-WarmIsland - platform: 微博 icon: fa-brands fa-weibo url: https://weibo.com/your-username diff --git a/docs/customize/development.md b/docs/customize/development.md index ff1f6b4..542546c 100644 --- a/docs/customize/development.md +++ b/docs/customize/development.md @@ -27,8 +27,8 @@ git --version # git version 2.x.x ## 克隆与安装 ```bash -git clone https://github.com/your-username/WarmIsland.git -cd WarmIsland +git clone https://git.nxxy335.top/nxxy335/halo-theme-WarmIsland.git +cd halo-theme-WarmIsland pnpm install ``` @@ -66,6 +66,36 @@ ZIP 根目录直接放 `theme.yaml` / `settings.yaml` / `templates/`,不要额 > `Template index was not found.` 并让首页 404。现在打包脚本会先校验 > `index.html` 等模板、资源目录与版本号,不满足即报错退出。 +## 性能与滚动顺滑 + +首页滚动曾经卡顿,根因不是 DOM 数量,而是「每帧高成本绘制 + 劫持滚动输入」: + +| 问题 | 原因 | 现在的做法 | +|------|------|------------| +| 全屏模糊逐帧重算 | 滚动回调每帧改写 `backdrop-filter: blur(Npx)`,Chromium 每帧重做一次全屏背景采样 + 高斯模糊 | 模糊半径固定,滚动只改整层 `opacity`(合成层操作) | +| 吸附吞掉滚动惯性 | 旧实现在 `wheel` / `touchend` 上 `preventDefault()` 并固定锁 800ms | 保留整屏吸附,但只在 `0 ↔ 内容区顶部` 边界接管一次;进入内容区后完全交给原生滚动。解锁用 `scrollend` + 600ms 兜底,已在目标位置时不再接管 | +| Hero 一直绘制 | 固定全屏 Hero 的光球动画与模糊层在滚过首屏后仍在跑 | 内容区盖满视口后加 `wi-hero--offscreen` 隐藏并暂停动画 | +| 状态反复写入 | 导航栏每个滚动帧都 `classList.add/remove` | 缓存状态,只在变化时写 | + +**为什么吸附不用 CSS `scroll-snap`**:v1.2.5 初版试过 `html { scroll-snap-type: y proximity }` +加内容区 `scroll-snap-align: start`,实际几乎不吸附——只有内容区顶部一个吸附点,页面顶部 +`0` 没有吸附点,`proximity` 只在滚动结束位置接近吸附点时才生效;换成 `mandatory` 则会在 +长内容的每次滚动后把页面拉回内容区顶部,正文无法阅读。`prefers-reduced-motion` 下 CSS 方案 +还会直接关闭吸附。因此改为脚本的边界吸附,CSS 侧不再设置 `scroll-snap`,避免与 `scrollTo` +平滑动画抢夺滚动位置。 + +涉及文件:`src/pages/index.astro`(滚动渐隐 + 边界吸附脚本)、`src/components/HeroSection.astro`(模糊层与离屏规则)、 +`src/components/Navbar.astro`(状态去重)、`src/styles/main.scss`(平滑滚动与 reduced-motion)。 + +**可调项**:后台「总体样式 → 启用动效」可一键关闭滚动渐入,「Hero 首屏」可关闭整个 Hero; +系统开启「减少动态效果」(`prefers-reduced-motion: reduce`)时,平滑滚动与光球 / 箭头动画停用, +吸附改为即时定位(仍然可用)。长列表使用 `content-visibility: auto` 跳过视口外渲染, +图片统一 `loading="lazy" decoding="async"`。 + +> 改动滚动逻辑后建议用浏览器 Performance 面板录制一次首页滚动:滚动帧里不应出现大面积 +> `Paint` / `Update Layer Tree`;也不要在 `scroll` 回调里读取 `getBoundingClientRect()` 之类 +> 会强制同步布局的属性(当前实现只在初始化 / resize 时测量内容区位置)。 + ## 项目结构 ``` @@ -130,26 +160,26 @@ WarmIsland/ | 技术 | 版本 | 用途 | |------|------|------| -| [Astro](https://astro.build) | 5.x | 静态站点生成,组件开发 | -| [vite-plugin-halo-theme](https://github.com/halo-sigs/vite-plugin-halo-theme) | - | Halo 主题开发集成 | -| [Thymeleaf](https://www.thymeleaf.org/) | - | Halo 服务端模板引擎 | +| [Halo](https://www.halo.run/) | 2.27+ | 博客运行时,提供 Finder API 与主题渲染 | +| [Astro](https://astro.build) | 6.x | 组件开发,构建输出静态 `.html` 模板 | +| [Thymeleaf](https://www.thymeleaf.org/) | - | Halo 服务端模板引擎(源码里直接写 `th:*`) | ### 前端技术 | 技术 | 用途 | |------|------| -| [Vue 3](https://vuejs.org/) | 交互组件(目录、点赞、无限滚动等) | -| [SCSS](https://sass-lang.com/) | 样式预处理 | -| [Prism.js](https://prismjs.com/) | 代码高亮 | -| [LightGallery](https://www.lightgalleryjs.com/) | 图片灯箱 | +| [SCSS](https://sass-lang.com/) | 样式预处理,CSS 变量驱动的配色系统 | +| 原生 JavaScript | 滚动、菜单、主题切换、无限滚动等交互,无前端框架运行时 | +| [LightGallery](https://www.lightgalleryjs.com/) | 图片灯箱(可选) | +| Halo 插件生态 | 评论、代码高亮、服务端字数统计等由 Halo 与可选插件提供 | ### 构建工具 | 技术 | 用途 | |------|------| -| [Vite](https://vitejs.dev/) | 构建打包 | +| [Vite](https://vitejs.dev/)(Astro 内置) | 资源打包与内容哈希 | | [pnpm](https://pnpm.io/) | 包管理 | -| [TypeScript](https://www.typescriptlang.org/) | 类型安全 | +| [TypeScript](https://www.typescriptlang.org/) | 类型定义(`env.d.ts` / `pages.ts`) | ## 模板语法 diff --git a/docs/faq.md b/docs/faq.md index fefe308..6e18a25 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -24,7 +24,7 @@ ZIP 里缺少 `templates/index.html` 时,渲染首页找不到 `index` 模板 检查以下几点: -1. 确认 Halo 版本 >= 2.26.0 +1. 确认 Halo 版本 >= 2.27.0 2. 确认主题已启用 3. 清除浏览器缓存后重试(Ctrl+Shift+R 强制刷新) 4. 检查 Halo 后台日志是否有报错 @@ -170,7 +170,7 @@ v1.2.1 起安装包会保留各版本的哈希资源(v1.1.7 之后全部覆盖 ### 如何报告 Bug? -请在 [GitHub Issues](https://github.com/sunny-335/halo-theme-WarmIsland/issues) 中提交,包含以下信息: +请在 [源码仓库 Issues](https://git.nxxy335.top/nxxy335/halo-theme-WarmIsland/issues) 中提交,包含以下信息: - Halo 版本 - 主题版本 diff --git a/docs/guide/getting-started.md b/docs/guide/getting-started.md index 1628a1e..44678be 100644 --- a/docs/guide/getting-started.md +++ b/docs/guide/getting-started.md @@ -27,7 +27,7 @@ WarmIsland(暖屿)是一款为 [Halo](https://halo.run) 打造的博客主 ### 方式二:本地上传安装 -1. 从 [GitHub Releases](https://github.com/nxxy335top/halo-theme-WarmIsland/releases) 下载最新版本的 `.zip` 安装包 +1. 从 [源码仓库](https://git.nxxy335.top/nxxy335/halo-theme-WarmIsland) 的 Releases / 发行版页面下载最新版本的 `.zip` 安装包 2. 登录 Halo 后台管理控制台 3. 进入 **主题** → **安装** → 选择 **本地上传** 4. 上传下载的 `.zip` 文件 diff --git a/docs/index.md b/docs/index.md index 5c3d2e4..ffbd9f4 100644 --- a/docs/index.md +++ b/docs/index.md @@ -13,8 +13,8 @@ hero: text: 配置项 link: /config/basic - theme: alt - text: GitHub - link: https://github.com/nxxy335top/halo-theme-WarmIsland + text: 源码仓库 + link: https://git.nxxy335.top/nxxy335/halo-theme-WarmIsland features: - title: 🎨 精致视觉 diff --git a/package.json b/package.json index 951cca3..46db3f3 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "version": "1.2.4", + "version": "1.2.5", "type": "module", "engines": { "node": ">=22.12.0" diff --git a/src/components/HeroSection.astro b/src/components/HeroSection.astro index 750a898..e6d8c56 100644 --- a/src/components/HeroSection.astro +++ b/src/components/HeroSection.astro @@ -229,12 +229,28 @@ position: absolute; inset: 0; z-index: 1; - backdrop-filter: blur(0px); - -webkit-backdrop-filter: blur(0px); - will-change: backdrop-filter; + /* 模糊半径固定,滚动时只改这层的 opacity(合成层操作)。 + 逐帧改写 backdrop-filter 的 px 值会让浏览器每帧重做全屏背景采样, + 是首页滚动掉帧的主因;固定值 + opacity 可复用已合成的结果。 */ + background: color-mix(in srgb, var(--bg) 26%, transparent); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + opacity: 0; + will-change: opacity; pointer-events: none; } + /* 滚过首屏后 Hero 已被不透明内容区完全盖住,隐藏它可停掉 + 光球动画与模糊层的持续绘制(由首页滚动脚本切换 wi-hero--offscreen) */ + .hero.wi-hero--offscreen { + visibility: hidden; + } + + .hero.wi-hero--offscreen .hero__orb, + .hero.wi-hero--offscreen .hero__scroll-indicator { + animation-play-state: paused; + } + .hero__orb { position: absolute; border-radius: 50%; @@ -454,6 +470,17 @@ animation: none; } + @media (prefers-reduced-motion: reduce) { + .hero__orb, + .hero__scroll-indicator { + animation: none; + } + + .hero__content { + transition: none; + } + } + html.dark .hero { background: linear-gradient( 160deg, diff --git a/src/components/Navbar.astro b/src/components/Navbar.astro index 024b1d8..8c10fe0 100644 --- a/src/components/Navbar.astro +++ b/src/components/Navbar.astro @@ -97,29 +97,34 @@ import ThemeSwitcher from "./ThemeSwitcher.astro"; const navbar = document.getElementById("wi-navbar"); let lastScrollY = window.scrollY; let ticking = false; + /* 缓存状态:只在状态真正变化时才写 class,避免每个滚动帧都触发样式重算 */ + let scrolled = null; + let hidden = null; function onScroll() { - if (!ticking) { - requestAnimationFrame(() => { - const currentScrollY = window.scrollY; + if (ticking) return; + ticking = true; + requestAnimationFrame(() => { + ticking = false; + const currentScrollY = window.scrollY; + const nextScrolled = currentScrollY > 20; + const nextHidden = + currentScrollY > lastScrollY && currentScrollY > 80 + ? true + : currentScrollY < lastScrollY + ? false + : hidden; - if (currentScrollY > 20) { - navbar?.classList.add("wi-navbar--scrolled"); - } else { - navbar?.classList.remove("wi-navbar--scrolled"); - } - - if (currentScrollY > lastScrollY && currentScrollY > 80) { - navbar?.classList.add("wi-navbar--hidden"); - } else if (currentScrollY < lastScrollY) { - navbar?.classList.remove("wi-navbar--hidden"); - } - - lastScrollY = currentScrollY; - ticking = false; - }); - ticking = true; - } + if (nextScrolled !== scrolled) { + scrolled = nextScrolled; + navbar?.classList.toggle("wi-navbar--scrolled", scrolled); + } + if (nextHidden !== hidden) { + hidden = nextHidden; + navbar?.classList.toggle("wi-navbar--hidden", !!hidden); + } + lastScrollY = currentScrollY; + }); } window.addEventListener("scroll", onScroll, { passive: true }); diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 6d0d656..d79b58b 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -21,7 +21,6 @@ const fragmentAttr = layoutFragment ? "html (head, content)" : undefined; = contentTop - 1; + if (hidden !== lastHidden) { + lastHidden = hidden; + hero.classList.toggle("wi-hero--offscreen", hidden); + } + if (hidden) return; + + var progress = Math.max(0, Math.min(1, (scrollY - fadeStart) / (fadeEnd - fadeStart))); + if (progress === lastProgress) return; + lastProgress = progress; + + /* 模糊半径固定,只调整整层不透明度:GPU 合成,无需重新采样背景 */ + blurOverlay.style.opacity = String(Math.min(1, scrollY / 300)); + if (heroContent) { + heroContent.style.opacity = String(1 - progress); + if (!reduceMotion) { + heroContent.style.transform = "translateY(" + (-20 * progress) + "px)"; + } + } + if (scrollIndicator) { + scrollIndicator.style.opacity = String(1 - progress); + } + } function onScroll() { if (ticking) return; ticking = true; - requestAnimationFrame(function () { - ticking = false; - var scrollY = window.scrollY || window.pageYOffset; + requestAnimationFrame(update); + } - var currentBlur = Math.min(scrollY / triggerDistance * maxBlur, maxBlur); - blurOverlay.style.backdropFilter = "blur(" + currentBlur + "px)"; - blurOverlay.style.webkitBackdropFilter = "blur(" + currentBlur + "px)"; - - if (heroContent) { - var progress = Math.max(0, Math.min(1, (scrollY - fadeStart) / (fadeEnd - fadeStart))); - heroContent.style.opacity = String(1 - progress); - heroContent.style.transform = "translateY(" + (-20 * progress) + "px)"; - } - - if (scrollIndicator) { - var indicatorProgress = Math.max(0, Math.min(1, (scrollY - fadeStart) / (fadeEnd - fadeStart))); - scrollIndicator.style.opacity = String(1 - indicatorProgress); - } - }); + function onResize() { + measure(); + onScroll(); } window.addEventListener("scroll", onScroll, { passive: true }); - onScroll(); - })(); - + window.addEventListener("resize", onResize, { passive: true }); + measure(); + update(); - + +