Help
RSS
API
Feed
Maltego
Contact
Domain > vlog.mcxclr.top
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2025-07-29
43.159.98.16
(
ClassC
)
2025-11-21
43.159.98.19
(
ClassC
)
Port 443
HTTP/1.1 200 OKContent-Type: text/htmlCF-Cache-Status: HITETag: 1970fc86d25f168c1566de7c00269a8dVary: accept-encodingReport-To: {group:cf-nel,max_age:604800,endpoints:{url:https://a.nel.cloudflare.com/report/v4?s3WE18gp01QEViQ%2F9Irp%2BELK81TLqdevxNitYgwbbnJKeQsRrX4jF9o0%2FlnoX80tw%2Br%2F%2FXsL0obt6IRCJiT01LLS6jz9lVG244lMcAW8xQu2R}}Nel: {report_to:cf-nel,success_fraction:0.0,max_age:604800}Server: cloudflareCF-RAY: 9a23a25d08ac2f37-LAXalt-svc: h3:443; ma86400Content-Length: 289748Connection: keep-aliveDate: Fri, 21 Nov 2025 22:30:53 GMTEO-LOG-UUID: 4699233943578133786EO-Cache-Status: MISS !DOCTYPE html>html langzh-CN classbg-var(--page-bg) transition text-14px md:text-16px data-overlayscrollbars-initialize data-astro-cid-sckkx6r4 style--bannerOffset: 15vh;--banner-height-home: 65vh;--banner-height: 35vh;--configHue: 250;--page-width: 75rem;> head>title>Starlr blog - 爱你所爱/title>meta charsetUTF-8>meta namedescription content分享网络技术、服务器部署、内网穿透、静态网站搭建、CDN优化、容器化部署等技术教程与实践经验的个人技术博客,专注于云原生、无服务器架构和前后端开发,作者为starlr/星辰旅人>meta nameauthor content星辰旅人>meta propertyog:site_name contentStarlr blog>meta propertyog:url contenthttps://mcxclr.top/>meta propertyog:title contentStarlr blog - 爱你所爱>meta propertyog:description contentStarlr blog - 爱你所爱>meta propertyog:type contentwebsite>meta nametwitter:card contentsummary_large_image>meta propertytwitter:url contenthttps://mcxclr.top/>meta nametwitter:title contentStarlr blog - 爱你所爱>meta nametwitter:description contentStarlr blog - 爱你所爱>meta nameviewport contentwidthdevice-width>meta namegenerator contentAstro v5.12.3>script src/js/umami-share.js defer>/script>link relicon hrefhttps://q2.qlogo.cn/headimg_dl?dst_uin3385016019&spec5 sizes128×128 media(prefers-color-scheme: light)>!-- Set the theme before the page is rendered to avoid a flash -->script>(function(){const DEFAULT_THEME auto;const LIGHT_MODE light;const DARK_MODE dark;const AUTO_MODE auto;const BANNER_HEIGHT_EXTEND 30;const PAGE_WIDTH 75;const configHue 250; // Load the theme from local storage const theme localStorage.getItem(theme) || DEFAULT_THEME; switch (theme) { case LIGHT_MODE: document.documentElement.classList.remove(dark); break case DARK_MODE: document.documentElement.classList.add(dark); break case AUTO_MODE: if (window.matchMedia((prefers-color-scheme: dark)).matches) { document.documentElement.classList.add(dark); } else { document.documentElement.classList.remove(dark); } } // Load the hue from local storage const hue localStorage.getItem(hue) || configHue; document.documentElement.style.setProperty(--hue, hue); // calculate the --banner-height-extend, which needs to be a multiple of 4 to avoid blurry text let offset Math.floor(window.innerHeight * (BANNER_HEIGHT_EXTEND / 100)); offset offset - offset % 4; document.documentElement.style.setProperty(--banner-height-extend, `${offset}px`); })();/script>!-- defines global css variables. This will be applied to html> body> and some other elements idk why -->link relalternate typeapplication/rss+xml title星辰旅人 hrefhttps://mcxclr.top/rss.xml>script defer srchttps://cloud.umami.is/script.js data-website-idaa5190ab-6650-4679-a7a3-376ba2a740a7>/script>link relstylesheet href/_astro/Layout.DSulWsr7.css>link relstylesheet href/_astro/Layout.CFwGdNXj.css>link relstylesheet href/_astro/_page_.8tldBuf8.css>link relstylesheet href/_astro/_page_.BoEJIxtg.css>link relstylesheet href/_astro/_page_.CO27kg37.css>link relstylesheet href/_astro/about.BtniRLn_.css>style>input.svelte-1adkdfv:focus{outline:0}.search-panel.svelte-1adkdfv{max-height:calc(100vh - 100px);overflow-y:auto}#display-setting.svelte-1s19bex inputtyperange:where(.svelte-1s19bex){-webkit-appearance:none;height:1.5rem;background-image:var(--color-selection-bar);transition:background-image .15s ease-in-out}#display-setting.svelte-1s19bex inputtyperange:where(.svelte-1s19bex)::-webkit-slider-thumb{-webkit-appearance:none;height:1rem;width:.5rem;border-radius:.125rem;background:#ffffffb3;box-shadow:none}#display-setting.svelte-1s19bex inputtyperange:where(.svelte-1s19bex)::-webkit-slider-thumb:hover{background:#fffc}#display-setting.svelte-1s19bex inputtyperange:where(.svelte-1s19bex)::-webkit-slider-thumb:active{background:#fff9}#display-setting.svelte-1s19bex inputtyperange:where(.svelte-1s19bex)::-moz-range-thumb{-webkit-appearance:none;height:1rem;width:.5rem;border-radius:.125rem;border-width:0;background:#ffffffb3;box-shadow:none}#display-setting.svelte-1s19bex inputtyperange:where(.svelte-1s19bex)::-moz-range-thumb:hover{background:#fffc}#display-setting.svelte-1s19bex inputtyperange:where(.svelte-1s19bex)::-moz-range-thumb:active{background:#fff9}#display-setting.svelte-1s19bex inputtyperange:where(.svelte-1s19bex)::-ms-thumb{-webkit-appearance:none;height:1rem;width:.5rem;border-radius:.125rem;background:#ffffffb3;box-shadow:none}#display-setting.svelte-1s19bex inputtyperange:where(.svelte-1s19bex)::-ms-thumb:hover{background:#fffc}#display-setting.svelte-1s19bex inputtyperange:where(.svelte-1s19bex)::-ms-thumb:active{background:#fff9}/style>script typemodule src/_astro/page.BVE_is1K.js>/script>/head> body class min-h-screen transition lg:is-home enable-banner data-overlayscrollbars-initialize data-astro-cid-sckkx6r4 style--bannerOffset: 15vh;--banner-height-home: 65vh;--banner-height: 35vh;--configHue: 250;--page-width: 75rem;> div idconfig-carrier data-hue250>/div> div idtop-row classz-50 pointer-events-none relative transition-all duration-700 max-w-var(--page-width) px-0 md:px-4 mx-auto> div idnavbar-wrapper classpointer-events-auto sticky top-0 transition-all> div idnavbar classz-50 onload-animation> div classabsolute h-8 left-0 right-0 -top-8 bg-var(--card-bg) transition>/div> !-- used for onload animation --> div classcard-base !overflow-visible max-w-var(--page-width) h-4.5rem !rounded-t-none mx-auto flex items-center justify-between px-4> a href/ classbtn-plain scale-animation rounded-lg h-3.25rem px-5 font-bold active:scale-95> div classflex flex-row text-var(--primary) items-center text-md> svg width1em height1em classtext-1.75rem mb-1 mr-2 data-iconmaterial-symbols:home-outline-rounded> symbol idai:material-symbols:home-outline-rounded viewBox0 0 24 24>path fillcurrentColor dM6 19h3v-5q0-.425.288-.712T10 13h4q.425 0 .713.288T15 14v5h3v-9l-6-4.5L6 10zm-2 0v-9q0-.475.213-.9t.587-.7l6-4.5q.525-.4 1.2-.4t1.2.4l6 4.5q.375.275.588.7T20 10v9q0 .825-.588 1.413T18 21h-4q-.425 0-.712-.288T13 20v-5h-2v5q0 .425-.288.713T10 21H6q-.825 0-1.412-.587T4 19m8-6.75/>/symbol>use href#ai:material-symbols:home-outline-rounded>/use> /svg> Starlr blog /div> /a> div classhidden md:flex> a aria-label主页 href/ classbtn-plain scale-animation rounded-lg h-11 font-bold px-5 active:scale-95> div classflex items-center> 主页 /div> /a>a aria-label归档 href/archive/ classbtn-plain scale-animation rounded-lg h-11 font-bold px-5 active:scale-95> div classflex items-center> 归档 /div> /a>a aria-label关于 href/about/ classbtn-plain scale-animation rounded-lg h-11 font-bold px-5 active:scale-95> div classflex items-center> 关于 /div> /a>a aria-label友链 href/friends/ classbtn-plain scale-animation rounded-lg h-11 font-bold px-5 active:scale-95> div classflex items-center> 友链 /div> /a>a aria-labelGitHub hrefhttps://github.com/wwwaaa123122 target_blank classbtn-plain scale-animation rounded-lg h-11 font-bold px-5 active:scale-95> div classflex items-center> GitHub svg width1em height1em classtext-0.875rem transition -translate-y-1px ml-1 text-black/0.2 dark:text-white/0.2 data-iconfa6-solid:arrow-up-right-from-square> symbol idai:fa6-solid:arrow-up-right-from-square viewBox0 0 512 512>path fillcurrentColor dM320 0c-17.7 0-32 14.3-32 32s14.3 32 32 32h82.7L201.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L448 109.3V192c0 17.7 14.3 32 32 32s32-14.3 32-32V32c0-17.7-14.3-32-32-32zM80 32C35.8 32 0 67.8 0 112v320c0 44.2 35.8 80 80 80h320c44.2 0 80-35.8 80-80V320c0-17.7-14.3-32-32-32s-32 14.3-32 32v112c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16h112c17.7 0 32-14.3 32-32s-14.3-32-32-32z/>/symbol>use href#ai:fa6-solid:arrow-up-right-from-square>/use> /svg> /div> /a> /div> div classflex> !--SearchPanel client:load>--> style>astro-island,astro-slot,astro-static-slot{display:contents}/style>script>(()>{var easync t>{await(await t())()};(self.Astro||(self.Astro{})).onlye;window.dispatchEvent(new Event(astro:only));})();/script>script>(()>{var AObject.defineProperty;var g(i,o,a)>o in i?A(i,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):ioa;var d(i,o,a)>g(i,typeof o!symbol?o+:o,a);{let i{0:t>m(t),1:t>a(t),2:t>new RegExp(t),3:t>new Date(t),4:t>new Map(a(t)),5:t>new Set(a(t)),6:t>BigInt(t),7:t>new URL(t),8:t>new Uint8Array(t),9:t>new Uint16Array(t),10:t>new Uint32Array(t),11:t>1/0*t},ot>{letl,et;return l in i?il(e):void 0},at>t.map(o),mt>typeof t!object||tnull?t:Object.fromEntries(Object.entries(t).map((l,e)>l,o(e)));class y extends HTMLElement{constructor(){super(...arguments);d(this,Component);d(this,hydrator);d(this,hydrate,async()>{var b;if(!this.hydrator||!this.isConnected)return;let e(bthis.parentElement)null?void 0:b.closest(astro-islandssr);if(e){e.addEventListener(astro:hydrate,this.hydrate,{once:!0});return}let cthis.querySelectorAll(astro-slot),n{},hthis.querySelectorAll(templatedata-astro-template);for(let r of h){let sr.closest(this.tagName);s!null&&s.isSameNode(this)&&(nr.getAttribute(data-astro-template)||defaultr.innerHTML,r.remove())}for(let r of c){let sr.closest(this.tagName);s!null&&s.isSameNode(this)&&(nr.getAttribute(name)||defaultr.innerHTML)}let p;try{pthis.hasAttribute(props)?m(JSON.parse(this.getAttribute(props))):{}}catch(r){let sthis.getAttribute(component-url)||unknown>,vthis.getAttribute(component-export);throw v&&(s+` (export ${v})`),console.error(`hydrate Error parsing props for component ${s}`,this.getAttribute(props),r),r}let u;await this.hydrator(this)(this.Component,p,n,{client:this.getAttribute(client)}),this.removeAttribute(ssr),this.dispatchEvent(new CustomEvent(astro:hydrate))});d(this,unmount,()>{this.isConnected||this.dispatchEvent(new CustomEvent(astro:unmount))})}disconnectedCallback(){document.removeEventListener(astro:after-swap,this.unmount),document.addEventListener(astro:after-swap,this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute(await-children)||document.readyStateinteractive||document.readyStatecomplete)this.childrenConnectedCallback();else{let e()>{document.removeEventListener(DOMContentLoaded,e),c.disconnect(),this.childrenConnectedCallback()},cnew MutationObserver(()>{var n;((nthis.lastChild)null?void 0:n.nodeType)Node.COMMENT_NODE&&this.lastChild.nodeValueastro:end&&(this.lastChild.remove(),e())});c.observe(this,{childList:!0}),document.addEventListener(DOMContentLoaded,e)}}async childrenConnectedCallback(){let ethis.getAttribute(before-hydration-url);e&&await import(e),this.start()}async start(){let eJSON.parse(this.getAttribute(opts)),cthis.getAttribute(client);if(Astrocvoid 0){window.addEventListener(`astro:${c}`,()>this.start(),{once:!0});return}try{await Astroc(async()>{let nthis.getAttribute(renderer-url),h,{default:p}await Promise.all(import(this.getAttribute(component-url)),n?import(n):()>()>{}),uthis.getAttribute(component-export)||default;if(!u.includes(.))this.Componenthu;else{this.Componenth;for(let f of u.split(.))this.Componentthis.Componentf}return this.hydratorp,this.hydrate},e,this)}catch(n){console.error(`astro-island Error hydrating ${this.getAttribute(component-url)}`,n)}}attributeChangedCallback(){this.hydrate()}}d(y,observedAttributes,props),customElements.get(astro-island)||customElements.define(astro-island,y)}})();/script>astro-island uidZEG73h component-url/_astro/Search.C9UbsauP.js component-exportdefault renderer-url/_astro/client.svelte.JU-N2tvQ.js props{} ssr clientonly opts{"name":"Search","value":"svelte"}>/astro-island> button aria-labelDisplay Settings classbtn-plain scale-animation rounded-lg h-11 w-11 active:scale-90 iddisplay-settings-switch> svg width1em height1em classtext-1.25rem data-iconmaterial-symbols:palette-outline> symbol idai:material-symbols:palette-outline viewBox0 0 24 24>path fillcurrentColor dM12 22q-2.05 0-3.875-.788t-3.187-2.15t-2.15-3.187T2 12q0-2.075.813-3.9t2.2-3.175T8.25 2.788T12.2 2q2 0 3.775.688t3.113 1.9t2.125 2.875T22 11.05q0 2.875-1.75 4.413T16 17h-1.85q-.225 0-.312.125t-.088.275q0 .3.375.863t.375 1.287q0 1.25-.687 1.85T12 22m-5.5-9q.65 0 1.075-.425T8 11.5t-.425-1.075T6.5 10t-1.075.425T5 11.5t.425 1.075T6.5 13m3-4q.65 0 1.075-.425T11 7.5t-.425-1.075T9.5 6t-1.075.425T8 7.5t.425 1.075T9.5 9m5 0q.65 0 1.075-.425T16 7.5t-.425-1.075T14.5 6t-1.075.425T13 7.5t.425 1.075T14.5 9m3 4q.65 0 1.075-.425T19 11.5t-.425-1.075T17.5 10t-1.075.425T16 11.5t.425 1.075T17.5 13M12 20q.225 0 .363-.125t.137-.325q0-.35-.375-.825T11.75 17.3q0-1.05.725-1.675T14.25 15H16q1.65 0 2.825-.962T20 11.05q0-3.025-2.312-5.038T12.2 4Q8.8 4 6.4 6.325T4 12q0 3.325 2.338 5.663T12 20/>/symbol>use href#ai:material-symbols:palette-outline>/use> /svg> /button> astro-island uid1zJdxA component-url/_astro/LightDarkSwitch.DJiIriSS.js component-exportdefault renderer-url/_astro/client.svelte.JU-N2tvQ.js props{} ssr clientonly opts{"name":"LightDarkSwitch","value":"svelte"}>/astro-island> button aria-labelMenu nameNav Menu classbtn-plain scale-animation rounded-lg w-11 h-11 active:scale-90 md:!hidden idnav-menu-switch> svg width1em height1em classtext-1.25rem data-iconmaterial-symbols:menu-rounded> symbol idai:material-symbols:menu-rounded viewBox0 0 24 24>path fillcurrentColor dM4 18q-.425 0-.712-.288T3 17t.288-.712T4 16h16q.425 0 .713.288T21 17t-.288.713T20 18zm0-5q-.425 0-.712-.288T3 12t.288-.712T4 11h16q.425 0 .713.288T21 12t-.288.713T20 13zm0-5q-.425 0-.712-.288T3 7t.288-.712T4 6h16q.425 0 .713.288T21 7t-.288.713T20 8z/>/symbol>use href#ai:material-symbols:menu-rounded>/use> /svg> /button> /div> div idnav-menu-panel classfloat-panel float-panel-closed absolute transition-all fixed right-4 px-2 py-2> a href/ classgroup flex justify-between items-center py-2 pl-3 pr-1 rounded-lg gap-8 hover:bg-var(--btn-plain-bg-hover) active:bg-var(--btn-plain-bg-active) transition > div classtransition text-black/75 dark:text-white/75 font-bold group-hover:text-var(--primary) group-active:text-var(--primary)> 主页 /div> svg width1em height1em classtransition text-1.25rem text-var(--primary) data-iconmaterial-symbols:chevron-right-rounded> symbol idai:material-symbols:chevron-right-rounded viewBox0 0 24 24>path fillcurrentColor dM12.6 12L8.7 8.1q-.275-.275-.275-.7t.275-.7t.7-.275t.7.275l4.6 4.6q.15.15.213.325t.062.375t-.062.375t-.213.325l-4.6 4.6q-.275.275-.7.275t-.7-.275t-.275-.7t.275-.7z/>/symbol>use href#ai:material-symbols:chevron-right-rounded>/use> /svg> /a>a href/archive/ classgroup flex justify-between items-center py-2 pl-3 pr-1 rounded-lg gap-8 hover:bg-var(--btn-plain-bg-hover) active:bg-var(--btn-plain-bg-active) transition > div classtransition text-black/75 dark:text-white/75 font-bold group-hover:text-var(--primary) group-active:text-var(--primary)> 归档 /div> svg width1em height1em viewBox0 0 24 24 classtransition text-1.25rem text-var(--primary) data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> /a>a href/about/ classgroup flex justify-between items-center py-2 pl-3 pr-1 rounded-lg gap-8 hover:bg-var(--btn-plain-bg-hover) active:bg-var(--btn-plain-bg-active) transition > div classtransition text-black/75 dark:text-white/75 font-bold group-hover:text-var(--primary) group-active:text-var(--primary)> 关于 /div> svg width1em height1em viewBox0 0 24 24 classtransition text-1.25rem text-var(--primary) data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> /a>a href/friends/ classgroup flex justify-between items-center py-2 pl-3 pr-1 rounded-lg gap-8 hover:bg-var(--btn-plain-bg-hover) active:bg-var(--btn-plain-bg-active) transition > div classtransition text-black/75 dark:text-white/75 font-bold group-hover:text-var(--primary) group-active:text-var(--primary)> 友链 /div> svg width1em height1em viewBox0 0 24 24 classtransition text-1.25rem text-var(--primary) data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> /a>a hrefhttps://github.com/wwwaaa123122 classgroup flex justify-between items-center py-2 pl-3 pr-1 rounded-lg gap-8 hover:bg-var(--btn-plain-bg-hover) active:bg-var(--btn-plain-bg-active) transition target_blank> div classtransition text-black/75 dark:text-white/75 font-bold group-hover:text-var(--primary) group-active:text-var(--primary)> GitHub /div> svg width1em height1em viewBox0 0 512 512 classtransition text-0.75rem text-black/25 dark:text-white/25 -translate-x-1 data-iconfa6-solid:arrow-up-right-from-square> use href#ai:fa6-solid:arrow-up-right-from-square>/use> /svg> /a> /div> astro-island uidZjfqNG component-url/_astro/DisplaySettings.CQk3sBC-.js component-exportdefault renderer-url/_astro/client.svelte.JU-N2tvQ.js props{} ssr clientonly opts{"name":"DisplaySettings","value":"svelte"}>/astro-island> /div> /div> script typemodule>function c(){localStorage.themedark?(document.documentElement.classList.remove(dark),localStorage.themelight):(document.documentElement.classList.add(dark),localStorage.themedark)}function o(){let tdocument.getElementById(scheme-switch);t&&(t.onclickfunction(){c()});let ndocument.getElementById(display-settings-switch);n&&(n.onclickfunction(){let edocument.getElementById(display-setting);e&&e.classList.toggle(float-panel-closed)});let ldocument.getElementById(nav-menu-switch);l&&(l.onclickfunction(){let edocument.getElementById(nav-menu-panel);e&&e.classList.toggle(float-panel-closed)})}o();/script> script>(function(){const scriptUrl /pagefind/pagefind.js;async function loadPagefind() { try { const response await fetch(scriptUrl, { method: HEAD }); if (!response.ok) { throw new Error(`Pagefind script not found: ${response.status}`); } const pagefind await import(scriptUrl); await pagefind.options({ excerptLength: 20 }); window.pagefind pagefind; document.dispatchEvent(new CustomEvent(pagefindready)); console.log(Pagefind loaded and initialized successfully, event dispatched.); } catch (error) { console.error(Failed to load Pagefind:, error); window.pagefind { search: () > Promise.resolve({ results: }), options: () > Promise.resolve(), }; document.dispatchEvent(new CustomEvent(pagefindloaderror)); console.log(Pagefind load error, event dispatched.); }}if (document.readyState loading) { document.addEventListener(DOMContentLoaded, loadPagefind);} else { loadPagefind();}})();/script> /div> /div> div idbanner-wrapper classabsolute z-10 w-full transition duration-700 overflow-hidden styletop: -30vh> div idbanner classobject-cover h-full transition duration-700 opacity-0 scale-105 overflow-hidden relative> div classtransition absolute inset-0 dark:bg-black/10 bg-opacity-50 pointer-events-none>/div> img srchttps://fpic.mcxclr.top altBanner image of the blog classw-full h-full object-cover styleobject-position: center> /div> /div> div classabsolute w-full z-30 pointer-events-none styletop: calc(35vh - 3.5rem)> !-- The pointer-events-none here prevent blocking the click event of the TOC --> div classrelative max-w-var(--page-width) mx-auto pointer-events-auto> div idmain-grid classtransition duration-700 w-full left-0 right-0 grid grid-cols-17.5rem_auto grid-rows-auto_1fr_auto lg:grid-rows-auto mx-auto gap-4 px-0 md:px-4> !-- Banner image credit --> div idsidebar classmb-4 row-start-2 row-end-3 col-span-2 lg:row-start-1 lg:row-end-2 lg:col-span-1 lg:max-w-17.5rem onload-animation w-full> div classflex flex-col w-full gap-4 mb-4> div classcard-base p-3> a aria-labelGo to About Page href/about/ classgroup block relative mx-auto mt-1 lg:mx-0 lg:mt-0 mb-3 max-w-12rem lg:max-w-none overflow-hidden rounded-xl active:scale-95> div classabsolute transition pointer-events-none group-hover:bg-black/30 group-active:bg-black/50 w-full h-full z-50 flex items-center justify-center> svg width1.13em height1em classtransition opacity-0 scale-90 group-hover:scale-100 group-hover:opacity-100 text-white text-5xl data-iconfa6-regular:address-card> symbol idai:fa6-regular:address-card viewBox0 0 576 512>path fillcurrentColor dM512 80c8.8 0 16 7.2 16 16v320c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16zM64 32C28.7 32 0 60.7 0 96v320c0 35.3 28.7 64 64 64h448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64zm144 224a64 64 0 1 0 0-128a64 64 0 1 0 0 128m-32 32c-44.2 0-80 35.8-80 80c0 8.8 7.2 16 16 16h192c8.8 0 16-7.2 16-16c0-44.2-35.8-80-80-80zm200-144c-13.3 0-24 10.7-24 24s10.7 24 24 24h80c13.3 0 24-10.7 24-24s-10.7-24-24-24zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24h80c13.3 0 24-10.7 24-24s-10.7-24-24-24z/>/symbol>use href#ai:fa6-regular:address-card>/use> /svg> /div> div classmx-auto lg:w-full h-full lg:mt-0 overflow-hidden relative> div classtransition absolute inset-0 dark:bg-black/10 bg-opacity-50 pointer-events-none>/div> img srchttps://q2.qlogo.cn/headimg_dl?dst_uin3385016019&spec5 altProfile Image of the Author classw-full h-full object-cover styleobject-position: center> /div> /a> div classpx-2> div classfont-bold text-xl text-center mb-1 dark:text-neutral-50 transition>星辰旅人/div> div classh-1 w-5 bg-var(--primary) mx-auto rounded-full mb-2 transition>/div> div classtext-center text-neutral-400 mb-2.5 transition>Protect What You Love./爱你所爱!/div> div classflex gap-2 justify-center mb-1> a relme aria-labelx hrefhttps://x.com/wwwaaa123122 target_blank classbtn-regular rounded-lg h-10 w-10 active:scale-90> svg width1em height1em classtext-1.5rem data-iconfa6-brands:twitter> symbol idai:fa6-brands:twitter viewBox0 0 512 512>path fillcurrentColor dM459.37 151.716c.325 4.548.325 9.097.325 13.645c0 138.72-105.583 298.558-298.558 298.558c-59.452 0-114.68-17.219-161.137-47.106c8.447.974 16.568 1.299 25.34 1.299c49.055 0 94.213-16.568 130.274-44.832c-46.132-.975-84.792-31.188-98.112-72.772c6.498.974 12.995 1.624 19.818 1.624c9.421 0 18.843-1.3 27.614-3.573c-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319c-28.264-18.843-46.781-51.005-46.781-87.391c0-19.492 5.197-37.36 14.294-52.954c51.655 63.675 129.3 105.258 216.365 109.807c-1.624-7.797-2.599-15.918-2.599-24.04c0-57.828 46.782-104.934 104.934-104.934c30.213 0 57.502 12.67 76.67 33.137c23.715-4.548 46.456-13.32 66.599-25.34c-7.798 24.366-24.366 44.833-46.132 57.827c21.117-2.273 41.584-8.122 60.426-16.243c-14.292 20.791-32.161 39.308-52.628 54.253/>/symbol>use href#ai:fa6-brands:twitter>/use> /svg> /a>a relme aria-labelGitHub hrefhttps://github.com/wwwaaa123122 target_blank classbtn-regular rounded-lg h-10 w-10 active:scale-90> svg width0.97em height1em classtext-1.5rem data-iconfa6-brands:github> symbol idai:fa6-brands:github viewBox0 0 496 512>path fillcurrentColor dM165.9 397.4c0 2-2.3 3.6-5.2 3.6c-3.3.3-5.6-1.3-5.6-3.6c0-2 2.3-3.6 5.2-3.6c3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9c2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9c.3 2 2.9 3.3 5.9 2.6c2.9-.7 4.9-2.6 4.6-4.6c-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2c12.8 2.3 17.3-5.6 17.3-12.1c0-6.2-.3-40.4-.3-61.4c0 0-70 15-84.7-29.8c0 0-11.4-29.1-27.8-36.6c0 0-22.9-15.7 1.6-15.4c0 0 24.9 2 38.6 25.8c21.9 38.6 58.6 27.5 72.9 20.9c2.3-16 8.8-27.1 16-33.7c-55.9-6.2-112.3-14.3-112.3-110.5c0-27.5 7.6-41.3 23.6-58.9c-2.6-6.5-11.1-33.3 2.6-67.9c20.9-6.5 69 27 69 27c20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27c13.7 34.7 5.2 61.4 2.6 67.9c16 17.7 25.8 31.5 25.8 58.9c0 96.5-58.9 104.2-114.8 110.5c9.2 7.9 17 22.9 17 46.4c0 33.7-.3 75.4-.3 83.6c0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252C496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2c1.6 1.6 3.9 2.3 5.2 1c1.3-1 1-3.3-.7-5.2c-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9c1.6 1 3.6.7 4.3-.7c.7-1.3-.3-2.9-2.3-3.9c-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2c2.3 2.3 5.2 2.6 6.5 1c1.3-1.3.7-4.3-1.3-6.2c-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2c-1.4-2.3-4-3.3-5.6-2/>/symbol>use href#ai:fa6-brands:github>/use> /svg> /a> /div> /div> !-- total stats section --> div classborder-t border-dashed border-black/10 dark:border-white/0.15 mt-3 pt-3> div classtext-center text-sm text-neutral-400 mb-2>站点统计/div> div classflex justify-center items-center gap-4 text-xs text-neutral-500> div idtotal-views-display classflex items-center gap-1> svg width1em height1em classtext-base data-iconmaterial-symbols:visibility-outline-rounded> symbol idai:material-symbols:visibility-outline-rounded viewBox0 0 24 24>path fillcurrentColor dM12 16q1.875 0 3.188-1.312T16.5 11.5t-1.312-3.187T12 7T8.813 8.313T7.5 11.5t1.313 3.188T12 16m0-1.8q-1.125 0-1.912-.788T9.3 11.5t.788-1.912T12 8.8t1.913.788t.787 1.912t-.787 1.913T12 14.2m0 4.8q-3.35 0-6.113-1.8t-4.362-4.75q-.125-.225-.187-.462t-.063-.488t.063-.488t.187-.462q1.6-2.95 4.363-4.75T12 4t6.113 1.8t4.362 4.75q.125.225.188.463t.062.487t-.062.488t-.188.462q-1.6 2.95-4.362 4.75T12 19m0-2q2.825 0 5.188-1.487T20.8 11.5q-1.25-2.525-3.613-4.012T12 6T6.813 7.488T3.2 11.5q1.25 2.525 3.613 4.013T12 17/>/symbol>use href#ai:material-symbols:visibility-outline-rounded>/use> /svg> span>统计加载中.../span> /div> div classh-3 w-px bg-neutral-300 dark:bg-neutral-600>/div> div idtotal-visits-display classflex items-center gap-1> svg width1em height1em classtext-base data-iconmaterial-symbols:person-outline-rounded> symbol idai:material-symbols:person-outline-rounded viewBox0 0 24 24>path fillcurrentColor dM12 12q-1.65 0-2.825-1.175T8 8t1.175-2.825T12 4t2.825 1.175T16 8t-1.175 2.825T12 12m-8 6v-.8q0-.85.438-1.562T5.6 14.55q1.55-.775 3.15-1.162T12 13t3.25.388t3.15 1.162q.725.375 1.163 1.088T20 17.2v.8q0 .825-.587 1.413T18 20H6q-.825 0-1.412-.587T4 18m2 0h12v-.8q0-.275-.137-.5t-.363-.35q-1.35-.675-2.725-1.012T12 15t-2.775.338T6.5 16.35q-.225.125-.363.35T6 17.2zm6-8q.825 0 1.413-.587T14 8t-.587-1.412T12 6t-1.412.588T10 8t.588 1.413T12 10m0 8/>/symbol>use href#ai:material-symbols:person-outline-rounded>/use> /svg> span>统计加载中.../span> /div> /div> /div> /div> script>(function(){const umamiConfig {enable:true,baseUrl:https://cloud.umami.is,shareId:DMfBtCxd4Y1VOCMA,region:us,timezone:Asia/Shanghai};const statsConfig {viewsText:浏览,visitsText:访客,loadingText:统计加载中...,unavailableText:统计不可用。请检查是否屏蔽了Umami域名,如AdGuard和AdBlock等插件}; // 获取总访问量统计 async function fetchTotalStats(isRetry false) { if (!umamiConfig.enable) { return; } try { // 调用全局工具获取 Umami 分享数据 const { websiteId, token } await getUmamiShareData(umamiConfig.baseUrl, umamiConfig.shareId, umamiConfig.region); // 获取总统计数据 const currentTimestamp Date.now(); const params new URLSearchParams({ startAt: 0, endAt: currentTimestamp.toString(), unit: hour, timezone: umamiConfig.timezone, compare: false }); const statsUrl `${umamiConfig.baseUrl}/analytics/${umamiConfig.region}/api/websites/${websiteId}/stats?${params.toString()}`; const statsResponse await fetch(statsUrl, { headers: { x-umami-share-token: token } }); if (!statsResponse.ok) { if (statsResponse.status 401 && !isRetry) { clearUmamiShareCache(); return fetchTotalStats(true); } throw new Error(获取统计数据失败); } const statsData await statsResponse.json(); const totalViews statsData.pageviews || 0; const totalVisits statsData.visitors || 0; const viewsElement document.getElementById(total-views-display); const visitsElement document.getElementById(total-visits-display); if (viewsElement) { viewsElement.querySelector(span).textContent `${statsConfig.viewsText} ${totalViews}`; } if (visitsElement) { visitsElement.querySelector(span).textContent `${statsConfig.visitsText} ${totalVisits}`; } } catch (error) { console.error(Error fetching total stats:, error); const viewsElement document.getElementById(total-views-display); const visitsElement document.getElementById(total-visits-display); if (viewsElement) { viewsElement.querySelector(span).textContent statsConfig.unavailableText; } if (visitsElement) { visitsElement.querySelector(span).textContent statsConfig.unavailableText; } } } // 页面加载完成后获取统计数据 if (document.readyState loading) { document.addEventListener(DOMContentLoaded, fetchTotalStats); } else { fetchTotalStats(); }})();/script> /div> div idsidebar-sticky classtransition-all duration-700 flex flex-col w-full gap-4 top-4 sticky top-4> widget-layout data-idcategories data-is-collapsedfalse classpb-4 card-base onload-animation styleanimation-delay: 150ms; --collapsedHeight: 7.5rem; data-astro-cid-ucso7hvetrue> div classfont-bold transition text-lg text-neutral-900 dark:text-neutral-100 relative ml-8 mt-4 mb-2 before:w-1 before:h-4 before:rounded-md before:bg-var(--primary) before:absolute before:left--16px before:top-5.5px data-astro-cid-ucso7hve style--collapsedHeight: 7.5rem;>分类/div> div idcategories classcollapse-wrapper px-4 overflow-hidden data-astro-cid-ucso7hve style--collapsedHeight: 7.5rem;> a href/archive/?categorydaily aria-labelView all posts in the daily category> button class w-full h-10 rounded-lg bg-none hover:bg-var(--btn-plain-bg-hover) active:bg-var(--btn-plain-bg-active) transition-all pl-2 hover:pl-3 text-neutral-700 hover:text-var(--primary) dark:text-neutral-300 dark:hover:text-var(--primary) > div classflex items-center justify-between relative mr-2> div classoverflow-hidden text-left whitespace-nowrap overflow-ellipsis > daily /div> div classtransition px-2 h-7 ml-4 min-w-2rem rounded-lg text-sm font-bold text-var(--btn-content) dark:text-var(--deep-text) bg-oklch(0.95_0.025_var(--hue)) dark:bg-var(--primary) flex items-center justify-center> 1 /div> /div> /button> /a>a href/archive/?categorytech aria-labelView all posts in the tech category> button class w-full h-10 rounded-lg bg-none hover:bg-var(--btn-plain-bg-hover) active:bg-var(--btn-plain-bg-active) transition-all pl-2 hover:pl-3 text-neutral-700 hover:text-var(--primary) dark:text-neutral-300 dark:hover:text-var(--primary) > div classflex items-center justify-between relative mr-2> div classoverflow-hidden text-left whitespace-nowrap overflow-ellipsis > tech /div> div classtransition px-2 h-7 ml-4 min-w-2rem rounded-lg text-sm font-bold text-var(--btn-content) dark:text-var(--deep-text) bg-oklch(0.95_0.025_var(--hue)) dark:bg-var(--primary) flex items-center justify-center> 5 /div> /div> /button> /a>a href/archive/?category%E7%BD%AE%E9%A1%B6 aria-labelView all posts in the 置顶 category> button class w-full h-10 rounded-lg bg-none hover:bg-var(--btn-plain-bg-hover) active:bg-var(--btn-plain-bg-active) transition-all pl-2 hover:pl-3 text-neutral-700 hover:text-var(--primary) dark:text-neutral-300 dark:hover:text-var(--primary) > div classflex items-center justify-between relative mr-2> div classoverflow-hidden text-left whitespace-nowrap overflow-ellipsis > 置顶 /div> div classtransition px-2 h-7 ml-4 min-w-2rem rounded-lg text-sm font-bold text-var(--btn-content) dark:text-var(--deep-text) bg-oklch(0.95_0.025_var(--hue)) dark:bg-var(--primary) flex items-center justify-center> 1 /div> /div> /button> /a> /div> /widget-layout> script typemodule>class d extends HTMLElement{constructor(){if(super(),this.dataset.isCollapsed!true)return;const ethis.dataset.id,tthis.querySelector(.expand-btn),sthis.querySelector(`#${e}`);t.addEventListener(click,()>{s.classList.remove(collapsed),t.classList.add(hidden)})}}customElements.get(widget-layout)||customElements.define(widget-layout,d);/script> widget-layout data-idtags data-is-collapsedfalse classpb-4 card-base onload-animation styleanimation-delay: 200ms; --collapsedHeight: 7.5rem; data-astro-cid-ucso7hvetrue> div classfont-bold transition text-lg text-neutral-900 dark:text-neutral-100 relative ml-8 mt-4 mb-2 before:w-1 before:h-4 before:rounded-md before:bg-var(--primary) before:absolute before:left--16px before:top-5.5px data-astro-cid-ucso7hve style--collapsedHeight: 7.5rem;>标签/div> div idtags classcollapse-wrapper px-4 overflow-hidden data-astro-cid-ucso7hve style--collapsedHeight: 7.5rem;> div classflex gap-2 flex-wrap> a href/archive/?tagblue%20archive aria-labelView all posts with the blue archive tag classbtn-regular h-8 text-sm px-3 rounded-lg> blue archive /a>a href/archive/?tagBot aria-labelView all posts with the Bot tag classbtn-regular h-8 text-sm px-3 rounded-lg> Bot /a>a href/archive/?tagcloudflare aria-labelView all posts with the cloudflare tag classbtn-regular h-8 text-sm px-3 rounded-lg> cloudflare /a>a href/archive/?tagdomain aria-labelView all posts with the domain tag classbtn-regular h-8 text-sm px-3 rounded-lg> domain /a>a href/archive/?tagedgeone aria-labelView all posts with the edgeone tag classbtn-regular h-8 text-sm px-3 rounded-lg> edgeone /a>a href/archive/?tagfuwari aria-labelView all posts with the fuwari tag classbtn-regular h-8 text-sm px-3 rounded-lg> fuwari /a>a href/archive/?tagRSS aria-labelView all posts with the RSS tag classbtn-regular h-8 text-sm px-3 rounded-lg> RSS /a> /div> /div> /widget-layout> /div> /div> main idswup-container classtransition-swup-fade col-span-2 lg:col-span-1 overflow-hidden> div idcontent-wrapper classonload-animation> !-- the overflow-hidden here prevent long text break the layout--> !-- make id different from windows.swup global property --> div classtransition flex flex-col rounded-var(--radius-large) bg-var(--card-bg) py-1 md:py-0 md:bg-transparent md:gap-4 mb-4> div classcard-base flex flex-col-reverse md:flex-col w-full rounded-var(--radius-large) overflow-hidden relative onload-animation styleanimation-delay: calc(var(--content-delay) + 0ms);; --coverWidth: 28%; data-astro-cid-iyiqi2so> div classpl-6 md:pl-9 pr-6 md:pr-2 pt-6 md:pt-7 pb-6 relative w-full md:w-calc(100%_-_52px_-_12px) data-astro-cid-iyiqi2so style--coverWidth: 28%;> div classabsolute top-2 right-2 text-var(--primary) data-astro-cid-iyiqi2so style--coverWidth: 28%;> svg width1em height1em classw-5 h-5 data-astro-cid-iyiqi2sotrue data-iconmdi:pin> symbol idai:mdi:pin viewBox0 0 24 24>path fillcurrentColor dM16 12V4h1V2H7v2h1v8l-2 2v2h5.2v6h1.6v-6H18v-2z/>/symbol>use href#ai:mdi:pin>/use> /svg> /div> a href/posts/site-domain/ classtransition group w-full block font-bold mb-3 text-3xl text-90 hover:text-var(--primary) dark:hover:text-var(--primary) active:text-var(--title-active) dark:active:text-var(--title-active) before:w-1 before:h-5 before:rounded-md before:bg-var(--primary) before:absolute before:top-35px before:left-18px before:hidden md:before:block data-astro-cid-iyiqi2so style--coverWidth: 28%;> 关于本站的一些域名 svg width1em height1em viewBox0 0 24 24 classinline text-2rem text-var(--primary) md:hidden translate-y-0.5 absolute data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> svg width1em height1em viewBox0 0 24 24 classtext-var(--primary) text-2rem transition hidden md:inline absolute translate-y-0.5 opacity-0 group-hover:opacity-100 -translate-x-1 group-hover:translate-x-0 data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> /a> !-- metadata --> div classflex flex-wrap text-neutral-500 dark:text-neutral-400 items-center gap-4 gap-x-4 gap-y-2 mb-4> !-- publish date --> div classflex items-center> div classmeta-icon> svg width1em height1em classtext-xl data-iconmaterial-symbols:calendar-today-outline-rounded> symbol idai:material-symbols:calendar-today-outline-rounded viewBox0 0 24 24>path fillcurrentColor dM5 22q-.825 0-1.412-.587T3 20V6q0-.825.588-1.412T5 4h1V3q0-.425.288-.712T7 2t.713.288T8 3v1h8V3q0-.425.288-.712T17 2t.713.288T18 3v1h1q.825 0 1.413.588T21 6v14q0 .825-.587 1.413T19 22zm0-2h14V10H5zM5 8h14V6H5zm0 0V6z/>/symbol>use href#ai:material-symbols:calendar-today-outline-rounded>/use> /svg> /div> span classtext-50 text-sm font-medium>2099-12-31/span> /div> !-- update date --> !-- categories --> div classflex items-center> div classmeta-icon> svg width1em height1em classtext-xl data-iconmaterial-symbols:book-2-outline-rounded> symbol idai:material-symbols:book-2-outline-rounded viewBox0 0 24 24>path fillcurrentColor dM6 15.325q.35-.175.725-.25T7.5 15H8V4h-.5q-.625 0-1.062.438T6 5.5zM10 15h8V4h-8zm-4 .325V4zM7.5 22q-1.45 0-2.475-1.025T4 18.5v-13q0-1.45 1.025-2.475T7.5 2H18q.825 0 1.413.587T20 4v12.525q0 .2-.162.363t-.588.362q-.35.175-.55.5t-.2.75t.2.763t.55.487t.55.413t.2.562v.25q0 .425-.288.725T19 22zm0-2h9.325q-.15-.35-.237-.712T16.5 18.5q0-.4.075-.775t.25-.725H7.5q-.65 0-1.075.438T6 18.5q0 .65.425 1.075T7.5 20/>/symbol>use href#ai:material-symbols:book-2-outline-rounded>/use> /svg> /div> div classflex flex-row flex-nowrap items-center> a href/archive/?category%E7%BD%AE%E9%A1%B6 aria-labelView all posts in the 置顶 category classlink-lg transition text-50 text-sm font-medium hover:text-var(--primary) dark:hover:text-var(--primary) whitespace-nowrap> 置顶 /a> /div> /div> !-- tags --> div classitems-center hidden md:flex> div classmeta-icon> svg width1em height1em classtext-xl data-iconmaterial-symbols:tag-rounded> symbol idai:material-symbols:tag-rounded viewBox0 0 24 24>path fillcurrentColor dm9 16l-.825 3.275q-.075.325-.325.525t-.6.2q-.475 0-.775-.375T6.3 18.8L7 16H4.275q-.5 0-.8-.387T3.3 14.75q.075-.35.35-.55t.625-.2H7.5l1-4H5.775q-.5 0-.8-.387T4.8 8.75q.075-.35.35-.55t.625-.2H9l.825-3.275Q9.9 4.4 10.15 4.2t.6-.2q.475 0 .775.375t.175.825L11 8h4l.825-3.275q.075-.325.325-.525t.6-.2q.475 0 .775.375t.175.825L17 8h2.725q.5 0 .8.387t.175.863q-.075.35-.35.55t-.625.2H16.5l-1 4h2.725q.5 0 .8.388t.175.862q-.075.35-.35.55t-.625.2H15l-.825 3.275q-.075.325-.325.525t-.6.2q-.475 0-.775-.375T12.3 18.8L13 16zm.5-2h4l1-4h-4z/>/symbol>use href#ai:material-symbols:tag-rounded>/use> /svg> /div> div classflex flex-row flex-nowrap items-center> div classhidden mx-1.5 text-var(--meta-divider) text-sm>//div> a href/archive/?tagdomain aria-labelView all posts with the domain tag classlink-lg transition text-50 text-sm font-medium hover:text-var(--primary) dark:hover:text-var(--primary) whitespace-nowrap> domain /a> /div> /div> !-- page views --> /div> !-- description --> div classtransition text-75 mb-3.5 pr-4 data-astro-cid-iyiqi2so style--coverWidth: 28%;> 此站点可访问的域名 /div> !-- word count and read time --> div classtext-sm text-black/30 dark:text-white/30 flex gap-4 transition data-astro-cid-iyiqi2so style--coverWidth: 28%;> div data-astro-cid-iyiqi2so style--coverWidth: 28%;> 1 字 /div> div data-astro-cid-iyiqi2so style--coverWidth: 28%;>|/div> div data-astro-cid-iyiqi2so style--coverWidth: 28%;> 1 分钟 /div> /div> !-- page views --> div classtext-sm text-black/30 dark:text-white/30 transition data-astro-cid-iyiqi2so style--coverWidth: 28%;> span idpage-views-site-domain data-astro-cid-iyiqi2so style--coverWidth: 28%;>统计加载中.../span> /div> /div> a href/posts/site-domain/ aria-label关于本站的一些域名 class!hidden md:!flex btn-regular w-3.25rem absolute right-3 top-3 bottom-3 rounded-xl bg-var(--enter-btn-bg) hover:bg-var(--enter-btn-bg-hover) active:bg-var(--enter-btn-bg-active) active:scale-95 data-astro-cid-iyiqi2so style--coverWidth: 28%;> svg width1em height1em viewBox0 0 24 24 classtransition text-var(--primary) text-4xl mx-auto data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> /a> /div> div classtransition border-t-1px border-dashed mx-6 border-black/10 dark:border-white/0.15 last:border-t-0 md:hidden data-astro-cid-iyiqi2so style--coverWidth: 28%;>/div> script>(function(){const entry {id:site-domain.md,data:{title:关于本站的一些域名,published:2099-12-31T00:00:00.000Z,draft:false,description:此站点可访问的域名,image:,tags:domain,category:置顶,lang:zh_CN,pinned:true,prevTitle:Bot使用文档,prevSlug:how-use-bot,nextTitle:,nextSlug:},body:- https://mcxclr.top \n- https://blog.182030.xyz \n- https://www.91sssvip.top \n- https://f.1.5.0.9.1.0.0.0.7.4.0.1.0.0.2.ip6.arpa \n- https://20120720.xyz,filePath:src/content/posts/site-domain.md,digest:7025377c135b9c90,rendered:{html:ul>\nli>a href\https://mcxclr.top\>https://mcxclr.top/a>/li>\nli>a href\https://blog.182030.xyz\>https://blog.182030.xyz/a>/li>\nli>a href\https://www.91sssvip.top\>https://www.91sssvip.top/a>/li>\nli>a href\https://f.1.5.0.9.1.0.0.0.7.4.0.1.0.0.2.ip6.arpa\>https://f.1.5.0.9.1.0.0.0.7.4.0.1.0.0.2.ip6.arpa/a>/li>\nli>a href\https://20120720.xyz\>https://20120720.xyz/a>/li>\n/ul>,metadata:{headings:,localImagePaths:,remoteImagePaths:,frontmatter:{title:关于本站的一些域名,published:2099-12-31T00:00:00.000Z,description:此站点可访问的域名,image:,pinned:true,tags:domain,category:置顶,draft:false,lang:zh_CN,minutes:1,words:1,excerpt:},imagePaths:}},collection:posts,slug:site-domain};const umamiConfig {enable:true,baseUrl:https://cloud.umami.is,shareId:DMfBtCxd4Y1VOCMA,region:us,timezone:Asia/Shanghai};const unavailableText 统计不可用。请检查是否屏蔽了Umami域名,如AdGuard和AdBlock等插件;const viewsText 浏览;const visitsText 访客; // 客户端统计文案生成函数 function generateStatsText(pageViews, visits) { return `${viewsText} ${pageViews} · ${visitsText} ${visits}`; } // 获取文章浏览量统计 async function fetchPostCardViews(slug) { if (!umamiConfig.enable) { return; } try { // 调用全局工具获取 Umami 分享数据 const { websiteId, token } await getUmamiShareData(umamiConfig.baseUrl, umamiConfig.shareId, umamiConfig.region); // 第二步:获取统计数据 const currentTimestamp Date.now(); const params new URLSearchParams({ startAt: 0, endAt: currentTimestamp.toString(), unit: hour, timezone: umamiConfig.timezone, path: `eq./posts/${slug}/`, compare: false }); const statsUrl `${umamiConfig.baseUrl}/analytics/${umamiConfig.region}/api/websites/${websiteId}/stats?${params.toString()}`; const statsResponse await fetch(statsUrl, { headers: { x-umami-share-token: token } }); if (statsResponse.status 401) { clearUmamiShareCache(); return await fetchPostCardViews(slug); } if (!statsResponse.ok) { throw new Error(获取统计数据失败); } const statsData await statsResponse.json(); const pageViews statsData.pageviews || 0; const visits statsData.visitors || 0; const displayElement document.getElementById(`page-views-${slug}`); if (displayElement) { displayElement.textContent generateStatsText(pageViews, visits); } } catch (error) { console.error(Error fetching page views for, slug, :, error); const displayElement document.getElementById(`page-views-${slug}`); if (displayElement) { displayElement.textContent unavailableText; } } } // 页面加载完成后获取统计数据 function initPostCardStats() { const slug entry.slug; if (slug) { fetchPostCardViews(slug); } } if (document.readyState loading) { document.addEventListener(DOMContentLoaded, initPostCardStats); } else { initPostCardStats(); }})();/script> div classcard-base flex flex-col-reverse md:flex-col w-full rounded-var(--radius-large) overflow-hidden relative onload-animation styleanimation-delay: calc(var(--content-delay) + 50ms);; --coverWidth: 28%; data-astro-cid-iyiqi2so> div classpl-6 md:pl-9 pr-6 md:pr-2 pt-6 md:pt-7 pb-6 relative w-full md:w-calc(100%_-_var(--coverWidth)_-_12px) data-astro-cid-iyiqi2so style--coverWidth: 28%;> a href/posts/how-use-bot/ classtransition group w-full block font-bold mb-3 text-3xl text-90 hover:text-var(--primary) dark:hover:text-var(--primary) active:text-var(--title-active) dark:active:text-var(--title-active) before:w-1 before:h-5 before:rounded-md before:bg-var(--primary) before:absolute before:top-35px before:left-18px before:hidden md:before:block data-astro-cid-iyiqi2so style--coverWidth: 28%;> Bot使用文档 svg width1em height1em viewBox0 0 24 24 classinline text-2rem text-var(--primary) md:hidden translate-y-0.5 absolute data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> svg width1em height1em viewBox0 0 24 24 classtext-var(--primary) text-2rem transition hidden md:inline absolute translate-y-0.5 opacity-0 group-hover:opacity-100 -translate-x-1 group-hover:translate-x-0 data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> /a> !-- metadata --> div classflex flex-wrap text-neutral-500 dark:text-neutral-400 items-center gap-4 gap-x-4 gap-y-2 mb-4> !-- publish date --> div classflex items-center> div classmeta-icon> svg width1em height1em viewBox0 0 24 24 classtext-xl data-iconmaterial-symbols:calendar-today-outline-rounded> use href#ai:material-symbols:calendar-today-outline-rounded>/use> /svg> /div> span classtext-50 text-sm font-medium>2025-10-25/span> /div> !-- update date --> !-- categories --> div classflex items-center> div classmeta-icon> svg width1em height1em viewBox0 0 24 24 classtext-xl data-iconmaterial-symbols:book-2-outline-rounded> use href#ai:material-symbols:book-2-outline-rounded>/use> /svg> /div> div classflex flex-row flex-nowrap items-center> a href/archive/?categorytech aria-labelView all posts in the tech category classlink-lg transition text-50 text-sm font-medium hover:text-var(--primary) dark:hover:text-var(--primary) whitespace-nowrap> tech /a> /div> /div> !-- tags --> div classitems-center hidden md:flex> div classmeta-icon> svg width1em height1em viewBox0 0 24 24 classtext-xl data-iconmaterial-symbols:tag-rounded> use href#ai:material-symbols:tag-rounded>/use> /svg> /div> div classflex flex-row flex-nowrap items-center> div classhidden mx-1.5 text-var(--meta-divider) text-sm>//div> a href/archive/?tagBot aria-labelView all posts with the Bot tag classlink-lg transition text-50 text-sm font-medium hover:text-var(--primary) dark:hover:text-var(--primary) whitespace-nowrap> Bot /a> /div> /div> !-- page views --> /div> !-- description --> div classtransition text-75 mb-3.5 pr-4 data-astro-cid-iyiqi2so style--coverWidth: 28%;> 星辰旅人Bot使用文档 /div> !-- word count and read time --> div classtext-sm text-black/30 dark:text-white/30 flex gap-4 transition data-astro-cid-iyiqi2so style--coverWidth: 28%;> div data-astro-cid-iyiqi2so style--coverWidth: 28%;> 688 字 /div> div data-astro-cid-iyiqi2so style--coverWidth: 28%;>|/div> div data-astro-cid-iyiqi2so style--coverWidth: 28%;> 3 分钟 /div> /div> !-- page views --> div classtext-sm text-black/30 dark:text-white/30 transition data-astro-cid-iyiqi2so style--coverWidth: 28%;> span idpage-views-how-use-bot data-astro-cid-iyiqi2so style--coverWidth: 28%;>统计加载中.../span> /div> /div> a href/posts/how-use-bot/ aria-labelBot使用文档 classgroup max-h-20vh md:max-h-none mx-4 mt-4 -mb-2 md:mb-0 md:mx-0 md:mt-0 md:w-var(--coverWidth) relative md:absolute md:top-3 md:bottom-3 md:right-3 rounded-xl overflow-hidden active:scale-95 data-astro-cid-iyiqi2so style--coverWidth: 28%;> div classabsolute pointer-events-none z-10 w-full h-full group-hover:bg-black/30 group-active:bg-black/50 transition data-astro-cid-iyiqi2so style--coverWidth: 28%;>/div> div classabsolute pointer-events-none z-20 w-full h-full flex items-center justify-center data-astro-cid-iyiqi2so style--coverWidth: 28%;> svg width1em height1em viewBox0 0 24 24 classtransition opacity-0 group-hover:opacity-100 scale-50 group-hover:scale-100 text-white text-5xl data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> /div> div classw-full h-full overflow-hidden relative> div classtransition absolute inset-0 dark:bg-black/10 bg-opacity-50 pointer-events-none>/div> img srchttps://pic.mcxclr.top/48.webp altCover Image of the Post classw-full h-full object-cover styleobject-position: center> /div> /a> /div> div classtransition border-t-1px border-dashed mx-6 border-black/10 dark:border-white/0.15 last:border-t-0 md:hidden data-astro-cid-iyiqi2so style--coverWidth: 28%;>/div> script>(function(){const entry {id:how-use-bot.md,data:{title:Bot使用文档,published:2025-10-25T00:00:00.000Z,draft:false,description:星辰旅人Bot使用文档,image:https://pic.mcxclr.top/48.webp,tags:Bot,category:tech,lang:zh_CN,pinned:false,prevTitle:fuwari修复RSS图片不显示,prevSlug:fuwari-rss,nextTitle:关于本站的一些域名,nextSlug:site-domain},body::::warning\n变量部分均使用{}包裹,多选项用/分隔\n:::\n# LLM\n## Deepseek\n切换命令:**#Deepseek**\n常用模型,回复速度快,稳定\n缺点:无法识别图片\n## Gemini\n切换命令:#Gemini\n可以识别图片\n缺点:有速率限制,超过范围会报错429\n## GPT \n切换命令:#GPT4/#GPT\n此模型为替代模型,可联网搜索\n缺点:由于是非官方API,服务可能不稳\n\n# rua\n命令:#rua {@一个用户/QQ号}\n介绍:生成rua表情\n\n# 发电\n命令:#发电{目标名称}\n介绍:生成一段表白话(?\n# 我今天棒不棒\n命令:我今天棒不棒\n介绍:给出你今天的分数\n# enc解密\n命令:#enc解密 {解密内容}\n介绍:解密被enc加密过的内容\n# 生图 \n命令:#生图 {Pixiv/ACG} {标签}\n介绍:\n* Pixiv为从p站拉取一张图\n* ACG的标签只有:随机、电脑壁纸、头像、手机背景、壁纸\n# http\n命令:#http {网址}\n介绍:测试网站是否能访问并返回状态码 \n\n# Banme\n命令:banme\n介绍:当bot为该群管理时会禁用1~5小时,适用于安心睡觉\n \n# 今日运势\n命令:今日运势\n介绍:返回今日运势\n\n# 名人名言\n命令:#名人名言 {引用一条消息}\n介绍:制作一个名言图片\n\n# MC服务器状态\n命令:#mcs {服务器地址}\n介绍:查看此服务器状态及在线人数\n\n# 名言\n命令:#名言 {引用一条消息}\n介绍:同上名人名言\n\n# 抖音解析\n命令:发送抖音链接触发\n介绍:解析抖音视频并发送\n\n# 点歌\n命令:#点歌 {歌名/歌曲id}\n介绍:仅能解析网易云歌曲\n\n# 狐狸图\n命令:狐狸图\n介绍:随机发送一张狐狸图\n\n# 一言\n命令:#名言\n介绍:找一句好听的名言\n\n# 天气\n命令:#天气 {城市名称}\n介绍:当前天气及未来三天天气\n\n# 签到\n命令:签到\n介绍:签到功能\n\n# 转码\n命令:#转码 {文字/网址(需带https)}\n介绍:将文字或网页转换为二维码\n\n# ping\n命令:#ping {域名/ip}\n介绍:由bot所运行的服务器ping 4次目标地址\n\n# 大头照\n命令:#大头照 {@一个用户/QQ号}\n介绍:发送该用户的QQ头像\n\n# whois\n命令:#whois {域名}\n介绍:查询该域名信息\n\n# 点赞\n命令:赞我/超我\n介绍:给你QQ名片点赞\n\n# 伪造消息\n命令:#伪造消息 {QQ号/@一个用户}说{内容} \n多条消息格式:#伪造消息 {QQ号/@一个用户}说{消息1}|{QQ号/@一个用户}说{消息2} \n更多条以此类推\n介绍:转发伪造合并转发的消息\n\n# 角色扮演\n命令:#角色扮演 \n介绍:查看Bot的所有预设,filePath:src/content/posts/how-use-bot.md,digest:1974ae665a24a1b1,rendered:{html:blockquote class\admonition bdm-warning\>span class\bdm-title\>WARNING/span>p>变量部分均使用{}包裹,多选项用/分隔/p>/blockquote>\nsection>h1 id\llm\>LLMa class\anchor\ href\#llm\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>section>h2 id\deepseek\>Deepseeka class\anchor\ href\#deepseek\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h2>p>切换命令:strong>#Deepseek/strong>\n常用模型,回复速度快,稳定\n缺点:无法识别图片/p>/section>section>h2 id\gemini\>Geminia class\anchor\ href\#gemini\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h2>p>切换命令:#Gemini\n可以识别图片\n缺点:有速率限制,超过范围会报错429/p>/section>section>h2 id\gpt\>GPTa class\anchor\ href\#gpt\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h2>p>切换命令:#GPT4/#GPT\n此模型为替代模型,可联网搜索\n缺点:由于是非官方API,服务可能不稳/p>/section>/section>\nsection>h1 id\rua\>ruaa class\anchor\ href\#rua\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:#rua {@一个用户/QQ号}\n介绍:生成rua表情/p>/section>\nsection>h1 id\发电\>发电a class\anchor\ href\#发电\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:#发电{目标名称}\n介绍:生成一段表白话(?/p>/section>\nsection>h1 id\我今天棒不棒\>我今天棒不棒a class\anchor\ href\#我今天棒不棒\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:我今天棒不棒\n介绍:给出你今天的分数/p>/section>\nsection>h1 id\enc解密\>enc解密a class\anchor\ href\#enc解密\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:#enc解密 {解密内容}\n介绍:解密被enc加密过的内容/p>/section>\nsection>h1 id\生图\>生图a class\anchor\ href\#生图\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:#生图 {Pixiv/ACG} {标签}\n介绍:/p>ul>\nli>Pixiv为从p站拉取一张图/li>\nli>ACG的标签只有:随机、电脑壁纸、头像、手机背景、壁纸/li>\n/ul>/section>\nsection>h1 id\http\>httpa class\anchor\ href\#http\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:#http {网址}\n介绍:测试网站是否能访问并返回状态码/p>/section>\nsection>h1 id\banme\>Banmea class\anchor\ href\#banme\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:banme\n介绍:当bot为该群管理时会禁用1~5小时,适用于安心睡觉/p>/section>\nsection>h1 id\今日运势\>今日运势a class\anchor\ href\#今日运势\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:今日运势\n介绍:返回今日运势/p>/section>\nsection>h1 id\名人名言\>名人名言a class\anchor\ href\#名人名言\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:#名人名言 {引用一条消息}\n介绍:制作一个名言图片/p>/section>\nsection>h1 id\mc服务器状态\>MC服务器状态a class\anchor\ href\#mc服务器状态\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:#mcs {服务器地址}\n介绍:查看此服务器状态及在线人数/p>/section>\nsection>h1 id\名言\>名言a class\anchor\ href\#名言\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:#名言 {引用一条消息}\n介绍:同上名人名言/p>/section>\nsection>h1 id\抖音解析\>抖音解析a class\anchor\ href\#抖音解析\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:发送抖音链接触发\n介绍:解析抖音视频并发送/p>/section>\nsection>h1 id\点歌\>点歌a class\anchor\ href\#点歌\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:#点歌 {歌名/歌曲id}\n介绍:仅能解析网易云歌曲/p>/section>\nsection>h1 id\狐狸图\>狐狸图a class\anchor\ href\#狐狸图\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:狐狸图\n介绍:随机发送一张狐狸图/p>/section>\nsection>h1 id\一言\>一言a class\anchor\ href\#一言\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:#名言\n介绍:找一句好听的名言/p>/section>\nsection>h1 id\天气\>天气a class\anchor\ href\#天气\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:#天气 {城市名称}\n介绍:当前天气及未来三天天气/p>/section>\nsection>h1 id\签到\>签到a class\anchor\ href\#签到\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:签到\n介绍:签到功能/p>/section>\nsection>h1 id\转码\>转码a class\anchor\ href\#转码\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:#转码 {文字/网址(需带https)}\n介绍:将文字或网页转换为二维码/p>/section>\nsection>h1 id\ping\>pinga class\anchor\ href\#ping\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:#ping {域名/ip}\n介绍:由bot所运行的服务器ping 4次目标地址/p>/section>\nsection>h1 id\大头照\>大头照a class\anchor\ href\#大头照\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:#大头照 {@一个用户/QQ号}\n介绍:发送该用户的QQ头像/p>/section>\nsection>h1 id\whois\>whoisa class\anchor\ href\#whois\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:#whois {域名}\n介绍:查询该域名信息/p>/section>\nsection>h1 id\点赞\>点赞a class\anchor\ href\#点赞\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:赞我/超我\n介绍:给你QQ名片点赞/p>/section>\nsection>h1 id\伪造消息\>伪造消息a class\anchor\ href\#伪造消息\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:#伪造消息 {QQ号/@一个用户}说{内容}br>\n多条消息格式:#伪造消息 {QQ号/@一个用户}说{消息1}|{QQ号/@一个用户}说{消息2}br>\n更多条以此类推\n介绍:转发伪造合并转发的消息/p>/section>\nsection>h1 id\角色扮演\>角色扮演a class\anchor\ href\#角色扮演\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>命令:#角色扮演br>\n介绍:查看Bot的所有预设/p>/section>,metadata:{headings:{depth:1,slug:llm,text:LLM#},{depth:2,slug:deepseek,text:Deepseek#},{depth:2,slug:gemini,text:Gemini#},{depth:2,slug:gpt,text:GPT#},{depth:1,slug:rua,text:rua#},{depth:1,slug:发电,text:发电#},{depth:1,slug:我今天棒不棒,text:我今天棒不棒#},{depth:1,slug:enc解密,text:enc解密#},{depth:1,slug:生图,text:生图#},{depth:1,slug:http,text:http#},{depth:1,slug:banme,text:Banme#},{depth:1,slug:今日运势,text:今日运势#},{depth:1,slug:名人名言,text:名人名言#},{depth:1,slug:mc服务器状态,text:MC服务器状态#},{depth:1,slug:名言,text:名言#},{depth:1,slug:抖音解析,text:抖音解析#},{depth:1,slug:点歌,text:点歌#},{depth:1,slug:狐狸图,text:狐狸图#},{depth:1,slug:一言,text:一言#},{depth:1,slug:天气,text:天气#},{depth:1,slug:签到,text:签到#},{depth:1,slug:转码,text:转码#},{depth:1,slug:ping,text:ping#},{depth:1,slug:大头照,text:大头照#},{depth:1,slug:whois,text:whois#},{depth:1,slug:点赞,text:点赞#},{depth:1,slug:伪造消息,text:伪造消息#},{depth:1,slug:角色扮演,text:角色扮演#},localImagePaths:,remoteImagePaths:,frontmatter:{title:Bot使用文档,published:2025-10-25T00:00:00.000Z,description:星辰旅人Bot使用文档,image:https://pic.mcxclr.top/48.webp,tags:Bot,category:tech,draft:false,lang:zh_CN,minutes:3,words:688,excerpt:切换命令:#Deepseek\n常用模型,回复速度快,稳定\n缺点:无法识别图片},imagePaths:}},collection:posts,slug:how-use-bot};const umamiConfig {enable:true,baseUrl:https://cloud.umami.is,shareId:DMfBtCxd4Y1VOCMA,region:us,timezone:Asia/Shanghai};const unavailableText 统计不可用。请检查是否屏蔽了Umami域名,如AdGuard和AdBlock等插件;const viewsText 浏览;const visitsText 访客; // 客户端统计文案生成函数 function generateStatsText(pageViews, visits) { return `${viewsText} ${pageViews} · ${visitsText} ${visits}`; } // 获取文章浏览量统计 async function fetchPostCardViews(slug) { if (!umamiConfig.enable) { return; } try { // 调用全局工具获取 Umami 分享数据 const { websiteId, token } await getUmamiShareData(umamiConfig.baseUrl, umamiConfig.shareId, umamiConfig.region); // 第二步:获取统计数据 const currentTimestamp Date.now(); const params new URLSearchParams({ startAt: 0, endAt: currentTimestamp.toString(), unit: hour, timezone: umamiConfig.timezone, path: `eq./posts/${slug}/`, compare: false }); const statsUrl `${umamiConfig.baseUrl}/analytics/${umamiConfig.region}/api/websites/${websiteId}/stats?${params.toString()}`; const statsResponse await fetch(statsUrl, { headers: { x-umami-share-token: token } }); if (statsResponse.status 401) { clearUmamiShareCache(); return await fetchPostCardViews(slug); } if (!statsResponse.ok) { throw new Error(获取统计数据失败); } const statsData await statsResponse.json(); const pageViews statsData.pageviews || 0; const visits statsData.visitors || 0; const displayElement document.getElementById(`page-views-${slug}`); if (displayElement) { displayElement.textContent generateStatsText(pageViews, visits); } } catch (error) { console.error(Error fetching page views for, slug, :, error); const displayElement document.getElementById(`page-views-${slug}`); if (displayElement) { displayElement.textContent unavailableText; } } } // 页面加载完成后获取统计数据 function initPostCardStats() { const slug entry.slug; if (slug) { fetchPostCardViews(slug); } } if (document.readyState loading) { document.addEventListener(DOMContentLoaded, initPostCardStats); } else { initPostCardStats(); }})();/script> div classcard-base flex flex-col-reverse md:flex-col w-full rounded-var(--radius-large) overflow-hidden relative onload-animation styleanimation-delay: calc(var(--content-delay) + 100ms);; --coverWidth: 28%; data-astro-cid-iyiqi2so> div classpl-6 md:pl-9 pr-6 md:pr-2 pt-6 md:pt-7 pb-6 relative w-full md:w-calc(100%_-_var(--coverWidth)_-_12px) data-astro-cid-iyiqi2so style--coverWidth: 28%;> a href/posts/fuwari-rss/ classtransition group w-full block font-bold mb-3 text-3xl text-90 hover:text-var(--primary) dark:hover:text-var(--primary) active:text-var(--title-active) dark:active:text-var(--title-active) before:w-1 before:h-5 before:rounded-md before:bg-var(--primary) before:absolute before:top-35px before:left-18px before:hidden md:before:block data-astro-cid-iyiqi2so style--coverWidth: 28%;> fuwari修复RSS图片不显示 svg width1em height1em viewBox0 0 24 24 classinline text-2rem text-var(--primary) md:hidden translate-y-0.5 absolute data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> svg width1em height1em viewBox0 0 24 24 classtext-var(--primary) text-2rem transition hidden md:inline absolute translate-y-0.5 opacity-0 group-hover:opacity-100 -translate-x-1 group-hover:translate-x-0 data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> /a> !-- metadata --> div classflex flex-wrap text-neutral-500 dark:text-neutral-400 items-center gap-4 gap-x-4 gap-y-2 mb-4> !-- publish date --> div classflex items-center> div classmeta-icon> svg width1em height1em viewBox0 0 24 24 classtext-xl data-iconmaterial-symbols:calendar-today-outline-rounded> use href#ai:material-symbols:calendar-today-outline-rounded>/use> /svg> /div> span classtext-50 text-sm font-medium>2025-09-27/span> /div> !-- update date --> !-- categories --> div classflex items-center> div classmeta-icon> svg width1em height1em viewBox0 0 24 24 classtext-xl data-iconmaterial-symbols:book-2-outline-rounded> use href#ai:material-symbols:book-2-outline-rounded>/use> /svg> /div> div classflex flex-row flex-nowrap items-center> a href/archive/?categorytech aria-labelView all posts in the tech category classlink-lg transition text-50 text-sm font-medium hover:text-var(--primary) dark:hover:text-var(--primary) whitespace-nowrap> tech /a> /div> /div> !-- tags --> div classitems-center hidden md:flex> div classmeta-icon> svg width1em height1em viewBox0 0 24 24 classtext-xl data-iconmaterial-symbols:tag-rounded> use href#ai:material-symbols:tag-rounded>/use> /svg> /div> div classflex flex-row flex-nowrap items-center> div classhidden mx-1.5 text-var(--meta-divider) text-sm>//div> a href/archive/?tagfuwari aria-labelView all posts with the fuwari tag classlink-lg transition text-50 text-sm font-medium hover:text-var(--primary) dark:hover:text-var(--primary) whitespace-nowrap> fuwari /a>div classmx-1.5 text-var(--meta-divider) text-sm>//div> a href/archive/?tagRSS aria-labelView all posts with the RSS tag classlink-lg transition text-50 text-sm font-medium hover:text-var(--primary) dark:hover:text-var(--primary) whitespace-nowrap> RSS /a> /div> /div> !-- page views --> /div> !-- description --> div classtransition text-75 mb-3.5 pr-4 data-astro-cid-iyiqi2so style--coverWidth: 28%;> 修复RSS图片链接问题 /div> !-- word count and read time --> div classtext-sm text-black/30 dark:text-white/30 flex gap-4 transition data-astro-cid-iyiqi2so style--coverWidth: 28%;> div data-astro-cid-iyiqi2so style--coverWidth: 28%;> 508 字 /div> div data-astro-cid-iyiqi2so style--coverWidth: 28%;>|/div> div data-astro-cid-iyiqi2so style--coverWidth: 28%;> 3 分钟 /div> /div> !-- page views --> div classtext-sm text-black/30 dark:text-white/30 transition data-astro-cid-iyiqi2so style--coverWidth: 28%;> span idpage-views-fuwari-rss data-astro-cid-iyiqi2so style--coverWidth: 28%;>统计加载中.../span> /div> /div> a href/posts/fuwari-rss/ aria-labelfuwari修复RSS图片不显示 classgroup max-h-20vh md:max-h-none mx-4 mt-4 -mb-2 md:mb-0 md:mx-0 md:mt-0 md:w-var(--coverWidth) relative md:absolute md:top-3 md:bottom-3 md:right-3 rounded-xl overflow-hidden active:scale-95 data-astro-cid-iyiqi2so style--coverWidth: 28%;> div classabsolute pointer-events-none z-10 w-full h-full group-hover:bg-black/30 group-active:bg-black/50 transition data-astro-cid-iyiqi2so style--coverWidth: 28%;>/div> div classabsolute pointer-events-none z-20 w-full h-full flex items-center justify-center data-astro-cid-iyiqi2so style--coverWidth: 28%;> svg width1em height1em viewBox0 0 24 24 classtransition opacity-0 group-hover:opacity-100 scale-50 group-hover:scale-100 text-white text-5xl data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> /div> div classw-full h-full overflow-hidden relative> div classtransition absolute inset-0 dark:bg-black/10 bg-opacity-50 pointer-events-none>/div> img src/_astro/fuwari-rss-fix.CLRM-mjm.jpg altCover Image of the Post styleobject-position: center loadinglazy decodingasync fetchpriorityauto width1080 height720 classw-full h-full object-cover> /div> /a> /div> div classtransition border-t-1px border-dashed mx-6 border-black/10 dark:border-white/0.15 last:border-t-0 md:hidden data-astro-cid-iyiqi2so style--coverWidth: 28%;>/div> script>(function(){const entry {id:fuwari-rss.md,data:{title:fuwari修复RSS图片不显示,published:2025-09-27T00:00:00.000Z,draft:false,description:修复RSS图片链接问题,image:../images/fuwari-rss-fix.jpg,tags:fuwari,RSS,category:tech,lang:zh_CN,pinned:false,prevTitle:为fuwari增加一个404界面,prevSlug:fuwari-404,nextTitle:Bot使用文档,nextSlug:how-use-bot},body:# 前言 \n啊大家都知道,fuwari的RSS如果你用的是相对路径,那么生成的RSS将也是相对路径,但这样就看不了图了啊,所以本章将带你修复它 \n# 修改RSS配置文件 \n打开**src/pages/rss.xml.ts**,当然你也可以直接删了 \n直接一个全选删除再将下面的配置粘贴填入 \n```typescript\nimport rss from @astrojs/rss;\nimport sanitizeHtml from sanitize-html;\nimport MarkdownIt from markdown-it;\nimport { getCollection } from astro:content;\nimport { siteConfig } from @/config;\nimport { parse as htmlParser } from node-html-parser;\nimport { getImage } from astro:assets;\nimport type { APIContext, ImageMetadata } from astro;\nimport type { RSSFeedItem } from @astrojs/rss;\nimport { getSortedPosts } from @/utils/content-utils;\n\nconst markdownParser new MarkdownIt();\n\n// get dynamic import of images as a map collection\nconst imagesGlob import.meta.glob{ default: ImageMetadata }>(\n\t/src/content/**/*.{jpeg,jpg,png,gif,webp}, // include posts and assets\n);\n\nexport async function GET(context: APIContext) {\n\tif (!context.site) {\n\t\tthrow Error(site not set);\n\t}\n\n\t// Use the same ordering as site listing (pinned first, then by published desc)\n\tconst posts await getSortedPosts();\n\tconst feed: RSSFeedItem ;\n\n\tfor (const post of posts) {\n\t\t// convert markdown to html string\n\t\tconst body markdownParser.render(post.body);\n\t\t// convert html string to DOM-like structure\n\t\tconst html htmlParser.parse(body);\n\t\t// hold all img tags in variable images\n\t\tconst images html.querySelectorAll(img);\n\n\t\tfor (const img of images) {\n\t\t\tconst src img.getAttribute(src);\n\t\t\tif (!src) continue;\n\n\t\t\t// Handle content-relative images and convert them to built _astro paths\n\t\t\tif (src.startsWith(./) || src.startsWith(../)) {\n\t\t\t\tlet importPath: string | null null;\n\n\t\t\t\tif (src.startsWith(./)) {\n\t\t\t\t\t// Path relative to the post file directory\n\t\t\t\t\tconst prefixRemoved src.slice(2);\n\t\t\t\t\timportPath `/src/content/posts/${prefixRemoved}`;\n\t\t\t\t} else {\n\t\t\t\t\t// Path like ../assets/images/xxx -> relative to /src/content/\n\t\t\t\t\tconst cleaned src.replace(/^\\.\\.\\//, );\n\t\t\t\t\timportPath `/src/content/${cleaned}`;\n\t\t\t\t}\n\n\t\t\t\tconst imageMod await imagesGlobimportPath?.()?.then((res) > res.default);\n\t\t\t\tif (imageMod) {\n\t\t\t\t\tconst optimizedImg await getImage({ src: imageMod });\n\t\t\t\t\timg.setAttribute(src, new URL(optimizedImg.src, context.site).href);\n\t\t\t\t}\n\t\t\t} else if (src.startsWith(/)) {\n\t\t\t\t// images starting with `/` are in public dir\n\t\t\t\timg.setAttribute(src, new URL(src, context.site).href);\n\t\t\t}\n\t\t}\n\n\t\tfeed.push({\n\t\t\ttitle: post.data.title,\n\t\t\tdescription: post.data.description,\n\t\t\tpubDate: post.data.published,\n\t\t\tlink: `/posts/${post.slug}/`,\n\t\t\t// sanitize the new html string with corrected image paths\n\t\t\tcontent: sanitizeHtml(html.toString(), {\n\t\t\t\tallowedTags: sanitizeHtml.defaults.allowedTags.concat(img),\n\t\t\t}),\n\t\t});\n\t}\n\n\treturn rss({\n\t\ttitle: siteConfig.title,\n\t\tdescription: siteConfig.subtitle || No description,\n\t\tsite: context.site,\n\t\titems: feed,\n\t\tcustomData: `language>${siteConfig.lang}/language>`,\n\t});\n}\n``` \n保存了,还需要安装一个pnpm包,不用管是什么,能帮我们转换成链接就是的了 \n```bash\npnpm add node-html-parser\n``` \n:::warning\n在推送到仓库时,你可能会遇到warning: in the working copy of pnpm-lock.yaml, LF will be replaced by CRLF the next time Git touches it 这是由于空格不同引起的,但并不会影响部署,忽略即可\n:::,filePath:src/content/posts/fuwari-rss.md,digest:4f5426021eac33ec,rendered:{html:section>h1 id\前言\>前言a class\anchor\ href\#前言\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>啊大家都知道,fuwari的RSS如果你用的是相对路径,那么生成的RSS将也是相对路径,但这样就看不了图了啊,所以本章将带你修复它/p>/section>\nsection>h1 id\修改rss配置文件\>修改RSS配置文件a class\anchor\ href\#修改rss配置文件\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>打开strong>src/pages/rss.xml.ts/strong>,当然你也可以直接删了br>\n直接一个全选删除再将下面的配置粘贴填入/p>div class\expressive-code\>link rel\stylesheet\ href\/_astro/ec.d1dr8.css\>script type\module\ src\/_astro/ec.g1fg5.js\>\x3C/script>figure class\frame\>figcaption class\header\>/figcaption>pre data-language\typescript\ class\wrap\ style\--ecMaxLine:86ch\>code>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>1/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\> rss /span>span style\--0:#F97583;--1:#F97583\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>@astrojs/rss/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>2/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\> sanitizeHtml /span>span style\--0:#F97583;--1:#F97583\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>sanitize-html/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>3/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\> MarkdownIt /span>span style\--0:#F97583;--1:#F97583\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>markdown-it/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>4/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\> { getCollection } /span>span style\--0:#F97583;--1:#F97583\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>astro:content/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>5/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\> { siteConfig } /span>span style\--0:#F97583;--1:#F97583\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>@/config/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>6/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\> { parse /span>span style\--0:#F97583;--1:#F97583\>as/span>span style\--0:#E1E4E8;--1:#E1E4E8\> htmlParser } /span>span style\--0:#F97583;--1:#F97583\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>node-html-parser/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>7/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\> { getImage } /span>span style\--0:#F97583;--1:#F97583\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>astro:assets/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>8/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>type/span>span style\--0:#E1E4E8;--1:#E1E4E8\> { APIContext, ImageMetadata } /span>span style\--0:#F97583;--1:#F97583\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>astro/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>9/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>type/span>span style\--0:#E1E4E8;--1:#E1E4E8\> { RSSFeedItem } /span>span style\--0:#F97583;--1:#F97583\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>@astrojs/rss/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>10/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\> { getSortedPosts } /span>span style\--0:#F97583;--1:#F97583\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>@/utils/content-utils/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>11/div>/div>div class\code\>\n/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>12/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>const/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>markdownParser/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>new/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>MarkdownIt/span>span style\--0:#E1E4E8;--1:#E1E4E8\>();/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>13/div>/div>div class\code\>\n/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>14/div>/div>div class\code\>span style\--0:#99A0A6;--1:#99A0A6\>// get dynamic import of images as a map collection/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>15/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>const/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>imagesGlob/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\>./span>span style\--0:#79B8FF;--1:#79B8FF\>meta/span>span style\--0:#E1E4E8;--1:#E1E4E8\>./span>span style\--0:#B392F0;--1:#B392F0\>glob/span>span style\--0:#E1E4E8;--1:#E1E4E8\><{ /span>span style\--0:#FFAB70;--1:#FFAB70\>default/span>span style\--0:#F97583;--1:#F97583\>:/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>ImageMetadata/span>span style\--0:#E1E4E8;--1:#E1E4E8\> }>(/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>16/div>/div>div class\code\>span class\indent\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>/src/content/**/*.{jpeg,jpg,png,gif,webp}/span>span style\--0:#E1E4E8;--1:#E1E4E8\>, /span>span style\--0:#99A0A6;--1:#99A0A6\>// include posts and assets/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>17/div>/div>div class\code\>span style\--0:#E1E4E8;--1:#E1E4E8\>);/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>18/div>/div>div class\code\>\n/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>19/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>export/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>async/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>function/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>GET/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(/span>span style\--0:#FFAB70;--1:#FFAB70\>context/span>span style\--0:#F97583;--1:#F97583\>:/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>APIContext/span>span style\--0:#E1E4E8;--1:#E1E4E8\>) {/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>20/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>if/span>span style\--0:#E1E4E8;--1:#E1E4E8\> (/span>span style\--0:#F97583;--1:#F97583\>!/span>span style\--0:#E1E4E8;--1:#E1E4E8\>context.site) {/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>21/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>throw/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>Error/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(/span>span style\--0:#9ECBFF;--1:#9ECBFF\>site not set/span>span style\--0:#E1E4E8;--1:#E1E4E8\>);/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>22/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>}/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>23/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>24/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\>// Use the same ordering as site listing (pinned first, then by published desc)/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>25/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>const/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>posts/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>await/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>getSortedPosts/span>span style\--0:#E1E4E8;--1:#E1E4E8\>();/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>26/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>const/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>feed/span>span style\--0:#F97583;--1:#F97583\>:/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>RSSFeedItem/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> ;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>27/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>28/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>for/span>span style\--0:#E1E4E8;--1:#E1E4E8\> (/span>span style\--0:#F97583;--1:#F97583\>const/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>post/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>of/span>span style\--0:#E1E4E8;--1:#E1E4E8\> posts) {/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>29/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\>// convert markdown to html string/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>30/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>const/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>body/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> markdownParser./span>span style\--0:#B392F0;--1:#B392F0\>render/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(post.body);/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>31/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\>// convert html string to DOM-like structure/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>32/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>const/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>html/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> htmlParser./span>span style\--0:#B392F0;--1:#B392F0\>parse/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(body);/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>33/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\>// hold all img tags in variable images/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>34/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>const/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>images/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> html./span>span style\--0:#B392F0;--1:#B392F0\>querySelectorAll/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(/span>span style\--0:#9ECBFF;--1:#9ECBFF\>img/span>span style\--0:#E1E4E8;--1:#E1E4E8\>);/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>35/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>36/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>for/span>span style\--0:#E1E4E8;--1:#E1E4E8\> (/span>span style\--0:#F97583;--1:#F97583\>const/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>img/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>of/span>span style\--0:#E1E4E8;--1:#E1E4E8\> images) {/span>/div>/div>div class\ec-line\ style\--ecIndent:6ch\>div class\gutter\>div class\ln\ aria-hidden\true\>37/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>const/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>src/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> img./span>span style\--0:#B392F0;--1:#B392F0\>getAttribute/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(/span>span style\--0:#9ECBFF;--1:#9ECBFF\>src/span>span style\--0:#E1E4E8;--1:#E1E4E8\>);/span>/div>/div>div class\ec-line\ style\--ecIndent:6ch\>div class\gutter\>div class\ln\ aria-hidden\true\>38/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>if/span>span style\--0:#E1E4E8;--1:#E1E4E8\> (/span>span style\--0:#F97583;--1:#F97583\>!/span>span style\--0:#E1E4E8;--1:#E1E4E8\>src) /span>span style\--0:#F97583;--1:#F97583\>continue/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>39/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:6ch\>div class\gutter\>div class\ln\ aria-hidden\true\>40/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\>// Handle content-relative images and convert them to built _astro paths/span>/div>/div>div class\ec-line\ style\--ecIndent:6ch\>div class\gutter\>div class\ln\ aria-hidden\true\>41/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>if/span>span style\--0:#E1E4E8;--1:#E1E4E8\> (src./span>span style\--0:#B392F0;--1:#B392F0\>startsWith/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(/span>span style\--0:#9ECBFF;--1:#9ECBFF\>.//span>span style\--0:#E1E4E8;--1:#E1E4E8\>) /span>span style\--0:#F97583;--1:#F97583\>||/span>span style\--0:#E1E4E8;--1:#E1E4E8\> src./span>span style\--0:#B392F0;--1:#B392F0\>startsWith/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(/span>span style\--0:#9ECBFF;--1:#9ECBFF\>..//span>span style\--0:#E1E4E8;--1:#E1E4E8\>)) {/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>42/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>let/span>span style\--0:#E1E4E8;--1:#E1E4E8\> importPath/span>span style\--0:#F97583;--1:#F97583\>:/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>string/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>|/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>null/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>null/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>43/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>44/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>if/span>span style\--0:#E1E4E8;--1:#E1E4E8\> (src./span>span style\--0:#B392F0;--1:#B392F0\>startsWith/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(/span>span style\--0:#9ECBFF;--1:#9ECBFF\>.//span>span style\--0:#E1E4E8;--1:#E1E4E8\>)) {/span>/div>/div>div class\ec-line\ style\--ecIndent:10ch\>div class\gutter\>div class\ln\ aria-hidden\true\>45/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\>// Path relative to the post file directory/span>/div>/div>div class\ec-line\ style\--ecIndent:10ch\>div class\gutter\>div class\ln\ aria-hidden\true\>46/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>const/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>prefixRemoved/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> src./span>span style\--0:#B392F0;--1:#B392F0\>slice/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(/span>span style\--0:#79B8FF;--1:#79B8FF\>2/span>span style\--0:#E1E4E8;--1:#E1E4E8\>);/span>/div>/div>div class\ec-line\ style\--ecIndent:10ch\>div class\gutter\>div class\ln\ aria-hidden\true\>47/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>importPath /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>`/src/content/posts/${/span>span style\--0:#E1E4E8;--1:#E1E4E8\>prefixRemoved/span>span style\--0:#9ECBFF;--1:#9ECBFF\>}`/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>48/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>} /span>span style\--0:#F97583;--1:#F97583\>else/span>span style\--0:#E1E4E8;--1:#E1E4E8\> {/span>/div>/div>div class\ec-line\ style\--ecIndent:10ch\>div class\gutter\>div class\ln\ aria-hidden\true\>49/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\>// Path like ../assets/images/xxx -> relative to /src/content//span>/div>/div>div class\ec-line\ style\--ecIndent:10ch\>div class\gutter\>div class\ln\ aria-hidden\true\>50/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>const/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>cleaned/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> src./span>span style\--0:#B392F0;--1:#B392F0\>replace/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(/span>span style\--0:#9ECBFF;--1:#9ECBFF\>//span>span style\--0:#F97583;--1:#F97583\>^/span>span style\--0:#85E89D;--0fw:bold;--1:#85E89D;--1fw:bold\>\\.\\.\\//span>span style\--0:#9ECBFF;--1:#9ECBFF\>//span>span style\--0:#E1E4E8;--1:#E1E4E8\>, /span>span style\--0:#9ECBFF;--1:#9ECBFF\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>);/span>/div>/div>div class\ec-line\ style\--ecIndent:10ch\>div class\gutter\>div class\ln\ aria-hidden\true\>51/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>importPath /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>`/src/content/${/span>span style\--0:#E1E4E8;--1:#E1E4E8\>cleaned/span>span style\--0:#9ECBFF;--1:#9ECBFF\>}`/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>52/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>}/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>53/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>54/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>const/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>imageMod/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>await/span>span style\--0:#E1E4E8;--1:#E1E4E8\> imagesGlobimportPath?.()?./span>span style\--0:#B392F0;--1:#B392F0\>then/span>span style\--0:#E1E4E8;--1:#E1E4E8\>((/span>span style\--0:#FFAB70;--1:#FFAB70\>res/span>span style\--0:#E1E4E8;--1:#E1E4E8\>) /span>span style\--0:#F97583;--1:#F97583\>>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> res.default);/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>55/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>if/span>span style\--0:#E1E4E8;--1:#E1E4E8\> (imageMod) {/span>/div>/div>div class\ec-line\ style\--ecIndent:10ch\>div class\gutter\>div class\ln\ aria-hidden\true\>56/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>const/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>optimizedImg/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>await/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>getImage/span>span style\--0:#E1E4E8;--1:#E1E4E8\>({ src: imageMod });/span>/div>/div>div class\ec-line\ style\--ecIndent:10ch\>div class\gutter\>div class\ln\ aria-hidden\true\>57/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>img./span>span style\--0:#B392F0;--1:#B392F0\>setAttribute/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(/span>span style\--0:#9ECBFF;--1:#9ECBFF\>src/span>span style\--0:#E1E4E8;--1:#E1E4E8\>, /span>span style\--0:#F97583;--1:#F97583\>new/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>URL/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(optimizedImg.src, context.site).href);/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>58/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>}/span>/div>/div>div class\ec-line\ style\--ecIndent:6ch\>div class\gutter\>div class\ln\ aria-hidden\true\>59/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>} /span>span style\--0:#F97583;--1:#F97583\>else/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>if/span>span style\--0:#E1E4E8;--1:#E1E4E8\> (src./span>span style\--0:#B392F0;--1:#B392F0\>startsWith/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(/span>span style\--0:#9ECBFF;--1:#9ECBFF\>//span>span style\--0:#E1E4E8;--1:#E1E4E8\>)) {/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>60/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\>// images starting with `/` are in public dir/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>61/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>img./span>span style\--0:#B392F0;--1:#B392F0\>setAttribute/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(/span>span style\--0:#9ECBFF;--1:#9ECBFF\>src/span>span style\--0:#E1E4E8;--1:#E1E4E8\>, /span>span style\--0:#F97583;--1:#F97583\>new/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>URL/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(src, context.site).href);/span>/div>/div>div class\ec-line\ style\--ecIndent:6ch\>div class\gutter\>div class\ln\ aria-hidden\true\>62/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>}/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>63/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>}/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>64/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>65/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>feed./span>span style\--0:#B392F0;--1:#B392F0\>push/span>span style\--0:#E1E4E8;--1:#E1E4E8\>({/span>/div>/div>div class\ec-line\ style\--ecIndent:6ch\>div class\gutter\>div class\ln\ aria-hidden\true\>66/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>title: post.data.title,/span>/div>/div>div class\ec-line\ style\--ecIndent:6ch\>div class\gutter\>div class\ln\ aria-hidden\true\>67/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>description: post.data.description,/span>/div>/div>div class\ec-line\ style\--ecIndent:6ch\>div class\gutter\>div class\ln\ aria-hidden\true\>68/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>pubDate: post.data.published,/span>/div>/div>div class\ec-line\ style\--ecIndent:6ch\>div class\gutter\>div class\ln\ aria-hidden\true\>69/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>link: /span>span style\--0:#9ECBFF;--1:#9ECBFF\>`/posts/${/span>span style\--0:#E1E4E8;--1:#E1E4E8\>post/span>span style\--0:#9ECBFF;--1:#9ECBFF\>./span>span style\--0:#E1E4E8;--1:#E1E4E8\>slug/span>span style\--0:#9ECBFF;--1:#9ECBFF\>}/`/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\ style\--ecIndent:6ch\>div class\gutter\>div class\ln\ aria-hidden\true\>70/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\>// sanitize the new html string with corrected image paths/span>/div>/div>div class\ec-line\ style\--ecIndent:6ch\>div class\gutter\>div class\ln\ aria-hidden\true\>71/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>content: /span>span style\--0:#B392F0;--1:#B392F0\>sanitizeHtml/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(html./span>span style\--0:#B392F0;--1:#B392F0\>toString/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(), {/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>72/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>allowedTags: sanitizeHtml.defaults.allowedTags./span>span style\--0:#B392F0;--1:#B392F0\>concat/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(/span>span style\--0:#9ECBFF;--1:#9ECBFF\>img/span>span style\--0:#E1E4E8;--1:#E1E4E8\>),/span>/div>/div>div class\ec-line\ style\--ecIndent:6ch\>div class\gutter\>div class\ln\ aria-hidden\true\>73/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>}),/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>74/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>});/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>75/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>}/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>76/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>77/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>return/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>rss/span>span style\--0:#E1E4E8;--1:#E1E4E8\>({/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>78/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>title: siteConfig.title,/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>79/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>description: siteConfig.subtitle /span>span style\--0:#F97583;--1:#F97583\>||/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>No description/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>80/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>site: context.site,/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>81/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>items: feed,/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>82/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>customData: /span>span style\--0:#9ECBFF;--1:#9ECBFF\>`<language>${/span>span style\--0:#E1E4E8;--1:#E1E4E8\>siteConfig/span>span style\--0:#9ECBFF;--1:#9ECBFF\>./span>span style\--0:#E1E4E8;--1:#E1E4E8\>lang/span>span style\--0:#9ECBFF;--1:#9ECBFF\>}</language>`/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>83/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>});/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>84/div>/div>div class\code\>span style\--0:#E1E4E8;--1:#E1E4E8\>}/span>/div>/div>/code>button class\copy-btn\ aria-label\Copy code\>div class\copy-btn-icon\>svg viewBox\0 -960 960 960\ xmlns\http://www.w3.org/2000/svg\ class\copy-btn-icon copy-icon\>path d\M368.37-237.37q-34.48 0-58.74-24.26-24.26-24.26-24.26-58.74v-474.26q0-34.48 24.26-58.74 24.26-24.26 58.74-24.26h378.26q34.48 0 58.74 24.26 24.26 24.26 24.26 58.74v474.26q0 34.48-24.26 58.74-24.26 24.26-58.74 24.26H368.37Zm0-83h378.26v-474.26H368.37v474.26Zm-155 238q-34.48 0-58.74-24.26-24.26-24.26-24.26-58.74v-515.76q0-17.45 11.96-29.48 11.97-12.02 29.33-12.02t29.54 12.02q12.17 12.03 12.17 29.48v515.76h419.76q17.45 0 29.48 11.96 12.02 11.97 12.02 29.33t-12.02 29.54q-12.03 12.17-29.48 12.17H213.37Zm155-238v-474.26 474.26Z\>/path>/svg>svg viewBox\0 -960 960 960\ xmlns\http://www.w3.org/2000/svg\ class\copy-btn-icon success-icon\>path d\m389-377.13 294.7-294.7q12.58-12.67 29.52-12.67 16.93 0 29.61 12.67 12.67 12.68 12.67 29.53 0 16.86-12.28 29.14L419.07-288.41q-12.59 12.67-29.52 12.67-16.94 0-29.62-12.67L217.41-430.93q-12.67-12.68-12.79-29.45-.12-16.77 12.55-29.45 12.68-12.67 29.62-12.67 16.93 0 29.28 12.67L389-377.13Z\>/path>/svg>/div>/button>/pre>/figure>/div>p>保存了,还需要安装一个pnpm包,不用管是什么,能帮我们转换成链接就是的了/p>div class\expressive-code\>figure class\frame is-terminal\>figcaption class\header\>span class\title\>/span>span class\sr-only\>Terminal window/span>/figcaption>pre data-language\bash\ class\wrap\ style\--ecMaxLine:25ch\>code>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>1/div>/div>div class\code\>span style\--0:#B392F0;--1:#B392F0\>pnpm/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>add/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>node-html-parser/span>/div>/div>/code>button class\copy-btn\ aria-label\Copy code\>div class\copy-btn-icon\>svg viewBox\0 -960 960 960\ xmlns\http://www.w3.org/2000/svg\ class\copy-btn-icon copy-icon\>path d\M368.37-237.37q-34.48 0-58.74-24.26-24.26-24.26-24.26-58.74v-474.26q0-34.48 24.26-58.74 24.26-24.26 58.74-24.26h378.26q34.48 0 58.74 24.26 24.26 24.26 24.26 58.74v474.26q0 34.48-24.26 58.74-24.26 24.26-58.74 24.26H368.37Zm0-83h378.26v-474.26H368.37v474.26Zm-155 238q-34.48 0-58.74-24.26-24.26-24.26-24.26-58.74v-515.76q0-17.45 11.96-29.48 11.97-12.02 29.33-12.02t29.54 12.02q12.17 12.03 12.17 29.48v515.76h419.76q17.45 0 29.48 11.96 12.02 11.97 12.02 29.33t-12.02 29.54q-12.03 12.17-29.48 12.17H213.37Zm155-238v-474.26 474.26Z\>/path>/svg>svg viewBox\0 -960 960 960\ xmlns\http://www.w3.org/2000/svg\ class\copy-btn-icon success-icon\>path d\m389-377.13 294.7-294.7q12.58-12.67 29.52-12.67 16.93 0 29.61 12.67 12.67 12.68 12.67 29.53 0 16.86-12.28 29.14L419.07-288.41q-12.59 12.67-29.52 12.67-16.94 0-29.62-12.67L217.41-430.93q-12.67-12.68-12.79-29.45-.12-16.77 12.55-29.45 12.68-12.67 29.62-12.67 16.93 0 29.28 12.67L389-377.13Z\>/path>/svg>/div>/button>/pre>/figure>/div>blockquote class\admonition bdm-warning\>span class\bdm-title\>WARNING/span>p>在推送到仓库时,你可能会遇到warning: in the working copy of ‘pnpm-lock.yaml’, LF will be replaced by CRLF the next time Git touches it 这是由于空格不同引起的,但并不会影响部署,忽略即可/p>/blockquote>/section>,metadata:{headings:{depth:1,slug:前言,text:前言#},{depth:1,slug:修改rss配置文件,text:修改RSS配置文件#},localImagePaths:,remoteImagePaths:,frontmatter:{title:fuwari修复RSS图片不显示,published:2025-09-27T00:00:00.000Z,description:修复RSS图片链接问题,image:../images/fuwari-rss-fix.jpg,tags:fuwari,RSS,category:tech,draft:false,lang:zh_CN,minutes:3,words:508,excerpt:啊大家都知道,fuwari的RSS如果你用的是相对路径,那么生成的RSS将也是相对路径,但这样就看不了图了啊,所以本章将带你修复它},imagePaths:}},collection:posts,slug:fuwari-rss};const umamiConfig {enable:true,baseUrl:https://cloud.umami.is,shareId:DMfBtCxd4Y1VOCMA,region:us,timezone:Asia/Shanghai};const unavailableText 统计不可用。请检查是否屏蔽了Umami域名,如AdGuard和AdBlock等插件;const viewsText 浏览;const visitsText 访客; // 客户端统计文案生成函数 function generateStatsText(pageViews, visits) { return `${viewsText} ${pageViews} · ${visitsText} ${visits}`; } // 获取文章浏览量统计 async function fetchPostCardViews(slug) { if (!umamiConfig.enable) { return; } try { // 调用全局工具获取 Umami 分享数据 const { websiteId, token } await getUmamiShareData(umamiConfig.baseUrl, umamiConfig.shareId, umamiConfig.region); // 第二步:获取统计数据 const currentTimestamp Date.now(); const params new URLSearchParams({ startAt: 0, endAt: currentTimestamp.toString(), unit: hour, timezone: umamiConfig.timezone, path: `eq./posts/${slug}/`, compare: false }); const statsUrl `${umamiConfig.baseUrl}/analytics/${umamiConfig.region}/api/websites/${websiteId}/stats?${params.toString()}`; const statsResponse await fetch(statsUrl, { headers: { x-umami-share-token: token } }); if (statsResponse.status 401) { clearUmamiShareCache(); return await fetchPostCardViews(slug); } if (!statsResponse.ok) { throw new Error(获取统计数据失败); } const statsData await statsResponse.json(); const pageViews statsData.pageviews || 0; const visits statsData.visitors || 0; const displayElement document.getElementById(`page-views-${slug}`); if (displayElement) { displayElement.textContent generateStatsText(pageViews, visits); } } catch (error) { console.error(Error fetching page views for, slug, :, error); const displayElement document.getElementById(`page-views-${slug}`); if (displayElement) { displayElement.textContent unavailableText; } } } // 页面加载完成后获取统计数据 function initPostCardStats() { const slug entry.slug; if (slug) { fetchPostCardViews(slug); } } if (document.readyState loading) { document.addEventListener(DOMContentLoaded, initPostCardStats); } else { initPostCardStats(); }})();/script> div classcard-base flex flex-col-reverse md:flex-col w-full rounded-var(--radius-large) overflow-hidden relative onload-animation styleanimation-delay: calc(var(--content-delay) + 150ms);; --coverWidth: 28%; data-astro-cid-iyiqi2so> div classpl-6 md:pl-9 pr-6 md:pr-2 pt-6 md:pt-7 pb-6 relative w-full md:w-calc(100%_-_var(--coverWidth)_-_12px) data-astro-cid-iyiqi2so style--coverWidth: 28%;> a href/posts/fuwari-404/ classtransition group w-full block font-bold mb-3 text-3xl text-90 hover:text-var(--primary) dark:hover:text-var(--primary) active:text-var(--title-active) dark:active:text-var(--title-active) before:w-1 before:h-5 before:rounded-md before:bg-var(--primary) before:absolute before:top-35px before:left-18px before:hidden md:before:block data-astro-cid-iyiqi2so style--coverWidth: 28%;> 为fuwari增加一个404界面 svg width1em height1em viewBox0 0 24 24 classinline text-2rem text-var(--primary) md:hidden translate-y-0.5 absolute data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> svg width1em height1em viewBox0 0 24 24 classtext-var(--primary) text-2rem transition hidden md:inline absolute translate-y-0.5 opacity-0 group-hover:opacity-100 -translate-x-1 group-hover:translate-x-0 data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> /a> !-- metadata --> div classflex flex-wrap text-neutral-500 dark:text-neutral-400 items-center gap-4 gap-x-4 gap-y-2 mb-4> !-- publish date --> div classflex items-center> div classmeta-icon> svg width1em height1em viewBox0 0 24 24 classtext-xl data-iconmaterial-symbols:calendar-today-outline-rounded> use href#ai:material-symbols:calendar-today-outline-rounded>/use> /svg> /div> span classtext-50 text-sm font-medium>2025-09-24/span> /div> !-- update date --> !-- categories --> div classflex items-center> div classmeta-icon> svg width1em height1em viewBox0 0 24 24 classtext-xl data-iconmaterial-symbols:book-2-outline-rounded> use href#ai:material-symbols:book-2-outline-rounded>/use> /svg> /div> div classflex flex-row flex-nowrap items-center> a href/archive/?categorytech aria-labelView all posts in the tech category classlink-lg transition text-50 text-sm font-medium hover:text-var(--primary) dark:hover:text-var(--primary) whitespace-nowrap> tech /a> /div> /div> !-- tags --> div classitems-center hidden md:flex> div classmeta-icon> svg width1em height1em viewBox0 0 24 24 classtext-xl data-iconmaterial-symbols:tag-rounded> use href#ai:material-symbols:tag-rounded>/use> /svg> /div> div classflex flex-row flex-nowrap items-center> div classhidden mx-1.5 text-var(--meta-divider) text-sm>//div> a href/archive/?tagfuwari aria-labelView all posts with the fuwari tag classlink-lg transition text-50 text-sm font-medium hover:text-var(--primary) dark:hover:text-var(--primary) whitespace-nowrap> fuwari /a> /div> /div> !-- page views --> /div> !-- description --> div classtransition text-75 mb-3.5 pr-4 data-astro-cid-iyiqi2so style--coverWidth: 28%;> 为fuwari添加一个好看的404界面 /div> !-- word count and read time --> div classtext-sm text-black/30 dark:text-white/30 flex gap-4 transition data-astro-cid-iyiqi2so style--coverWidth: 28%;> div data-astro-cid-iyiqi2so style--coverWidth: 28%;> 823 字 /div> div data-astro-cid-iyiqi2so style--coverWidth: 28%;>|/div> div data-astro-cid-iyiqi2so style--coverWidth: 28%;> 4 分钟 /div> /div> !-- page views --> div classtext-sm text-black/30 dark:text-white/30 transition data-astro-cid-iyiqi2so style--coverWidth: 28%;> span idpage-views-fuwari-404 data-astro-cid-iyiqi2so style--coverWidth: 28%;>统计加载中.../span> /div> /div> a href/posts/fuwari-404/ aria-label为fuwari增加一个404界面 classgroup max-h-20vh md:max-h-none mx-4 mt-4 -mb-2 md:mb-0 md:mx-0 md:mt-0 md:w-var(--coverWidth) relative md:absolute md:top-3 md:bottom-3 md:right-3 rounded-xl overflow-hidden active:scale-95 data-astro-cid-iyiqi2so style--coverWidth: 28%;> div classabsolute pointer-events-none z-10 w-full h-full group-hover:bg-black/30 group-active:bg-black/50 transition data-astro-cid-iyiqi2so style--coverWidth: 28%;>/div> div classabsolute pointer-events-none z-20 w-full h-full flex items-center justify-center data-astro-cid-iyiqi2so style--coverWidth: 28%;> svg width1em height1em viewBox0 0 24 24 classtransition opacity-0 group-hover:opacity-100 scale-50 group-hover:scale-100 text-white text-5xl data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> /div> div classw-full h-full overflow-hidden relative> div classtransition absolute inset-0 dark:bg-black/10 bg-opacity-50 pointer-events-none>/div> img src/_astro/fuwari-404.Dvb0NH5W.jpg altCover Image of the Post styleobject-position: center loadinglazy decodingasync fetchpriorityauto width724 height537 classw-full h-full object-cover> /div> /a> /div> div classtransition border-t-1px border-dashed mx-6 border-black/10 dark:border-white/0.15 last:border-t-0 md:hidden data-astro-cid-iyiqi2so style--coverWidth: 28%;>/div> script>(function(){const entry {id:fuwari-404.md,data:{title:为fuwari增加一个404界面,published:2025-09-24T00:00:00.000Z,draft:false,description:为fuwari添加一个好看的404界面,image:../images/fuwari-404.jpg,tags:fuwari,category:tech,lang:zh_CN,pinned:false,prevTitle:BA周年庆直接9个彩,prevSlug:ba2th,nextTitle:fuwari修复RSS图片不显示,nextSlug:fuwari-rss},body:# 本文章分为两部分 \n### 适配多语言的404界面 \n打开**src/i18n/i18nKey.ts** \n```typescript\n\tlicense \license\,\n\tfriends \friends\,\n\n\t// 404 page\n\tnotFound \notFound\,\n\tnotFoundTitle \notFoundTitle\,\n\tnotFoundMessage \notFoundMessage\,\n\tbackToHome \backToHome\,\n\tviewArchive \viewArchive\,\n``` \n再分别打开languages下的**en.ts**和**zh_CN.ts** \nen.ts\n```typescript\n\tKey.license: \License\,\n\tKey.friends: \Friends\,\n\n\t// 404 page\n\tKey.notFound: \Page Not Found\,\n\tKey.notFoundTitle: \Oops! Page Not Found\,\n\tKey.notFoundMessage: \The page you are looking for doesnt exist. It may have been moved or deleted.\,\n\tKey.backToHome: \Back to Home\,\n\tKey.viewArchive: \View Archive\,\n``` \nzh_CN.ts\n```typescript\n\tKey.license: \许可协议\,\n\tKey.friends: \友链\,\n\n\t// 404 page\n\tKey.notFound: \页面未找到\,\n\tKey.notFoundTitle: \哎呀!页面走丢了\,\n\tKey.notFoundMessage: \您访问的页面不存在,可能已被删除或链接有误。\,\n\tKey.backToHome: \返回首页\,\n\tKey.viewArchive: \查看归档\,\n``` \n最后在**src/pages**目录下创建**404.astro** \n```astro\n---\nimport { Icon } from \astro-icon/components\;\nimport MainGridLayout from \../layouts/MainGridLayout.astro\;\nimport I18nKey from \../i18n/i18nKey\;\nimport { i18n } from \../i18n/translation\;\nimport { url } from \../utils/url-utils\;\nimport { siteConfig } from \../config\;\n---\n\nMainGridLayout title{i18n(I18nKey.notFound)} description{i18n(I18nKey.notFoundMessage)}>\n div class\flex w-full rounded-var(--radius-large) overflow-hidden relative min-h-96\>\n div class\card-base z-10 px-6 md:px-12 py-8 md:py-12 relative w-full\>\n !-- 404 Content -->\n div class\flex flex-col items-center text-center space-y-6\>\n !-- Large 404 Number -->\n div class\relative opacity-0 animate-fade-in-up\>\n div class\text-8xl md:text-9xl font-bold bg-gradient-to-br from-var(--primary) to-oklch(0.65_0.18_var(--hue)) bg-clip-text text-transparent select-none\>\n 404\n /div>\n !-- Decorative elements -->\n div class\absolute -top-4 -right-4 w-8 h-8 bg-var(--primary) rounded-full opacity-20 animate-pulse\>/div>\n div class\absolute -bottom-2 -left-2 w-6 h-6 bg-var(--primary) rounded-full opacity-30 animate-pulse\ style\animation-delay: 0.5s;\>/div>\n /div>\n\n !-- Title and Message -->\n div class\space-y-3 max-w-md opacity-0 animate-fade-in-up animate-delay-100\>\n h1 class\text-2xl md:text-3xl font-bold text-var(--primary)\>\n {i18n(I18nKey.notFoundTitle)}\n /h1>\n p class\text-75 text-base md:text-lg leading-relaxed\>\n {i18n(I18nKey.notFoundMessage)}\n /p>\n /div>\n\n !-- Illustration -->\n div class\py-4 opacity-0 animate-fade-in-up animate-delay-200\>\n div class\relative w-32 h-32 mx-auto animate-float\>\n !-- Simple geometric illustration -->\n div class\absolute inset-0 bg-gradient-to-br from-var(--primary) to-oklch(0.65_0.18_var(--hue)) rounded-full opacity-10\>/div>\n div class\absolute inset-4 bg-var(--card-bg) rounded-full border-2 border-var(--primary) border-opacity-20\>/div>\n div class\absolute inset-0 flex items-center justify-center\>\n Icon name\fa6-solid:location-crosshairs\ class\w-12 h-12 text-var(--primary) opacity-60\ />\n /div>\n /div>\n /div>\n\n !-- Action Buttons -->\n div class\flex flex-col sm:flex-row gap-3 pt-4 opacity-0 animate-fade-in-up animate-delay-300\>\n a href{url(\/\)} \n class\btn-regular px-6 py-3 rounded-xl font-medium transition-all duration-200 hover:scale-105 active:scale-95 flex items-center justify-center gap-2\>\n Icon name\fa6-solid:house\ class\w-4 h-4\ />\n {i18n(I18nKey.backToHome)}\n /a>\n a href{url(\/archive\)} \n class\btn-card px-6 py-3 rounded-xl font-medium transition-all duration-200 hover:scale-105 active:scale-95 flex items-center justify-center gap-2 border border-var(--line-divider)\>\n Icon name\fa6-solid:box-archive\ class\w-4 h-4\ />\n {i18n(I18nKey.viewArchive)}\n /a>\n a href{url(\/about\)} \n class\btn-card px-6 py-3 rounded-xl font-medium transition-all duration-200 hover:scale-105 active:scale-95 flex items-center justify-center gap-2 border border-var(--line-divider)\>\n Icon name\fa6-solid:circle-info\ class\w-4 h-4\ />\n {i18n(I18nKey.about)}\n /a>\n /div>\n\n !-- Additional Help Text -->\n div class\pt-6 text-sm text-50\>\n p class\transition-all duration-300\>\n {siteConfig.lang zh_CN ? 如果您认为这是一个错误,请联系网站管理员。 : If you believe this is an error, please contact the site administrator.}\n /p>\n /div>\n /div>\n /div>\n /div>\n/MainGridLayout>\n\nstyle>\n @keyframes float {\n 0%, 100% { transform: translateY(0px); }\n 50% { transform: translateY(-10px); }\n }\n \n @keyframes fadeInUp {\n from {\n opacity: 0;\n transform: translateY(30px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n \n .animate-float {\n animation: float 3s ease-in-out infinite;\n }\n \n .animate-fade-in-up {\n animation: fadeInUp 0.6s ease-out forwards;\n }\n \n .animate-delay-100 {\n animation-delay: 0.1s;\n }\n \n .animate-delay-200 {\n animation-delay: 0.2s;\n }\n \n .animate-delay-300 {\n animation-delay: 0.3s;\n }\n \n .animate-delay-400 {\n animation-delay: 0.4s;\n }\n/style>\n``` \n\n### 单语言404.astro \n此方法直接在**src/pages**目录下创建404.astro即可 \n由于我没有语言的404,这里附上二叉树树的404界面 \n预览:!2x-404(../images/2x-404.jpg)\n```astro\n---\nimport Layout from \@/layouts/Layout.astro\;\nimport MainGridLayout from \@/layouts/MainGridLayout.astro\;\nimport { Icon } from \astro-icon/components\;\nimport { siteConfig } from \@/config\;\n---\n\nLayout title\页面未找到\>\n MainGridLayout>\n div class\flex flex-col items-center justify-center min-h-60vh text-center px-4\>\n !-- 404 图标 -->\n div class\mb-8\>\n div class\relative\>\n div class\text-8xl md:text-9xl font-bold text-var(--primary) opacity-20\>\n 404\n /div>\n div class\absolute inset-0 flex items-center justify-center\>\n Icon name\fa6-solid:face-sad-tear\ class\text-6xl md:text-7xl text-var(--primary)\ />\n /div>\n /div>\n /div>\n\n !-- 错误信息 -->\n div class\card-base p-8 max-w-md mx-auto mb-8\>\n h1 class\text-2xl md:text-3xl font-bold text-90 mb-4\>\n 页面走丢了\n /h1>\n p class\text-75 mb-6 leading-relaxed\>\n 抱歉,您访问的页面不存在或已被移动。\n br>\n 请检查URL是否正确,或者返回首页继续浏览。\n /p>\n\n !-- 导航按钮 -->\n div class\flex flex-col sm:flex-row gap-3 justify-center\>\n a href\/\ class\btn-regular-dark px-6 py-3 rounded-lg text-white font-medium\>\n Icon name\fa6-solid:house\ class\mr-2\ />\n 返回首页\n /a>\n a href\/archive/\ class\btn-regular px-6 py-3 rounded-lg font-medium\>\n Icon name\fa6-solid:box-archive\ class\mr-2\ />\n 文章归档\n /a>\n /div>\n /div>\n\n !-- 返回提示 -->\n div class\mt-8 text-50 text-sm\>\n p class\flex items-center justify-center\>\n Icon name\fa6-solid:clock-rotate-left\ class\mr-2\ />\n 您也可以使用浏览器的后退按钮返回上一页\n /p>\n /div>\n /div>\n /MainGridLayout>\n/Layout>\n```,filePath:src/content/posts/fuwari-404.md,assetImports:../images/2x-404.jpg,digest:edeaad8c46911548,rendered:{html:section>h1 id\本文章分为两部分\>本文章分为两部分a class\anchor\ href\#本文章分为两部分\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>section>h3 id\适配多语言的404界面\>适配多语言的404界面a class\anchor\ href\#适配多语言的404界面\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h3>p>打开strong>src/i18n/i18nKey.ts/strong>/p>div class\expressive-code\>link rel\stylesheet\ href\/_astro/ec.d1dr8.css\>script type\module\ src\/_astro/ec.g1fg5.js\>\x3C/script>figure class\frame\>figcaption class\header\>/figcaption>pre data-language\typescript\ class\wrap\ style\--ecMaxLine:38ch\>code>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>1/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>license /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\license\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>2/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>friends /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\friends\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>3/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>4/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\>// 404 page/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>5/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>notFound /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\notFound\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>6/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>notFoundTitle /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\notFoundTitle\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>7/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>notFoundMessage /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\notFoundMessage\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>8/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>backToHome /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\backToHome\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>9/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>viewArchive /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\viewArchive\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>/code>button class\copy-btn\ aria-label\Copy code\>div class\copy-btn-icon\>svg viewBox\0 -960 960 960\ xmlns\http://www.w3.org/2000/svg\ class\copy-btn-icon copy-icon\>path d\M368.37-237.37q-34.48 0-58.74-24.26-24.26-24.26-24.26-58.74v-474.26q0-34.48 24.26-58.74 24.26-24.26 58.74-24.26h378.26q34.48 0 58.74 24.26 24.26 24.26 24.26 58.74v474.26q0 34.48-24.26 58.74-24.26 24.26-58.74 24.26H368.37Zm0-83h378.26v-474.26H368.37v474.26Zm-155 238q-34.48 0-58.74-24.26-24.26-24.26-24.26-58.74v-515.76q0-17.45 11.96-29.48 11.97-12.02 29.33-12.02t29.54 12.02q12.17 12.03 12.17 29.48v515.76h419.76q17.45 0 29.48 11.96 12.02 11.97 12.02 29.33t-12.02 29.54q-12.03 12.17-29.48 12.17H213.37Zm155-238v-474.26 474.26Z\>/path>/svg>svg viewBox\0 -960 960 960\ xmlns\http://www.w3.org/2000/svg\ class\copy-btn-icon success-icon\>path d\m389-377.13 294.7-294.7q12.58-12.67 29.52-12.67 16.93 0 29.61 12.67 12.67 12.68 12.67 29.53 0 16.86-12.28 29.14L419.07-288.41q-12.59 12.67-29.52 12.67-16.94 0-29.62-12.67L217.41-430.93q-12.67-12.68-12.79-29.45-.12-16.77 12.55-29.45 12.68-12.67 29.62-12.67 16.93 0 29.28 12.67L389-377.13Z\>/path>/svg>/div>/button>/pre>/figure>/div>p>再分别打开languages下的strong>en.ts/strong>和strong>zh_CN.ts/strong>br>\nen.ts/p>div class\expressive-code\>figure class\frame\>figcaption class\header\>/figcaption>pre data-language\typescript\ class\wrap\ style\--ecMaxLine:106ch\>code>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>1/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>Key.license: /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\License\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>2/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>Key.friends: /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\Friends\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>3/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>4/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\>// 404 page/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>5/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>Key.notFound: /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\Page Not Found\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>6/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>Key.notFoundTitle: /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\Oops! Page Not Found\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>7/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>Key.notFoundMessage: /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\The page you are looking for doesnt exist. It may have been moved or deleted.\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>8/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>Key.backToHome: /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\Back to Home\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>9/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>Key.viewArchive: /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\View Archive\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>/code>button class\copy-btn\ aria-label\Copy code\>div class\copy-btn-icon\>svg viewBox\0 -960 960 960\ xmlns\http://www.w3.org/2000/svg\ class\copy-btn-icon copy-icon\>path d\M368.37-237.37q-34.48 0-58.74-24.26-24.26-24.26-24.26-58.74v-474.26q0-34.48 24.26-58.74 24.26-24.26 58.74-24.26h378.26q34.48 0 58.74 24.26 24.26 24.26 24.26 58.74v474.26q0 34.48-24.26 58.74-24.26 24.26-58.74 24.26H368.37Zm0-83h378.26v-474.26H368.37v474.26Zm-155 238q-34.48 0-58.74-24.26-24.26-24.26-24.26-58.74v-515.76q0-17.45 11.96-29.48 11.97-12.02 29.33-12.02t29.54 12.02q12.17 12.03 12.17 29.48v515.76h419.76q17.45 0 29.48 11.96 12.02 11.97 12.02 29.33t-12.02 29.54q-12.03 12.17-29.48 12.17H213.37Zm155-238v-474.26 474.26Z\>/path>/svg>svg viewBox\0 -960 960 960\ xmlns\http://www.w3.org/2000/svg\ class\copy-btn-icon success-icon\>path d\m389-377.13 294.7-294.7q12.58-12.67 29.52-12.67 16.93 0 29.61 12.67 12.67 12.68 12.67 29.53 0 16.86-12.28 29.14L419.07-288.41q-12.59 12.67-29.52 12.67-16.94 0-29.62-12.67L217.41-430.93q-12.67-12.68-12.79-29.45-.12-16.77 12.55-29.45 12.68-12.67 29.62-12.67 16.93 0 29.28 12.67L389-377.13Z\>/path>/svg>/div>/button>/pre>/figure>/div>p>zh_CN.ts/p>div class\expressive-code\>figure class\frame\>figcaption class\header\>/figcaption>pre data-language\typescript\ class\wrap\ style\--ecMaxLine:50ch\>code>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>1/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>Key.license: /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\许可协议\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>2/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>Key.friends: /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\友链\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>3/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>4/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\>// 404 page/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>5/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>Key.notFound: /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\页面未找到\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>6/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>Key.notFoundTitle: /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\哎呀!页面走丢了\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>7/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>Key.notFoundMessage: /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\您访问的页面不存在,可能已被删除或链接有误。\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>8/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>Key.backToHome: /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\返回首页\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>9/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>Key.viewArchive: /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\查看归档\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>,/span>/div>/div>/code>button class\copy-btn\ aria-label\Copy code\>div class\copy-btn-icon\>svg viewBox\0 -960 960 960\ xmlns\http://www.w3.org/2000/svg\ class\copy-btn-icon copy-icon\>path d\M368.37-237.37q-34.48 0-58.74-24.26-24.26-24.26-24.26-58.74v-474.26q0-34.48 24.26-58.74 24.26-24.26 58.74-24.26h378.26q34.48 0 58.74 24.26 24.26 24.26 24.26 58.74v474.26q0 34.48-24.26 58.74-24.26 24.26-58.74 24.26H368.37Zm0-83h378.26v-474.26H368.37v474.26Zm-155 238q-34.48 0-58.74-24.26-24.26-24.26-24.26-58.74v-515.76q0-17.45 11.96-29.48 11.97-12.02 29.33-12.02t29.54 12.02q12.17 12.03 12.17 29.48v515.76h419.76q17.45 0 29.48 11.96 12.02 11.97 12.02 29.33t-12.02 29.54q-12.03 12.17-29.48 12.17H213.37Zm155-238v-474.26 474.26Z\>/path>/svg>svg viewBox\0 -960 960 960\ xmlns\http://www.w3.org/2000/svg\ class\copy-btn-icon success-icon\>path d\m389-377.13 294.7-294.7q12.58-12.67 29.52-12.67 16.93 0 29.61 12.67 12.67 12.68 12.67 29.53 0 16.86-12.28 29.14L419.07-288.41q-12.59 12.67-29.52 12.67-16.94 0-29.62-12.67L217.41-430.93q-12.67-12.68-12.79-29.45-.12-16.77 12.55-29.45 12.68-12.67 29.62-12.67 16.93 0 29.28 12.67L389-377.13Z\>/path>/svg>/div>/button>/pre>/figure>/div>p>最后在strong>src/pages/strong>目录下创建strong>404.astro/strong>/p>div class\expressive-code\>figure class\frame\ style\--lnWidth:3ch\>figcaption class\header\>/figcaption>pre data-language\astro\ class\wrap\ style\--ecMaxLine:208ch\>code>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>1/div>/div>div class\code\>span style\--0:#99A0A6;--1:#99A0A6\>---/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>2/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\> { Icon } /span>span style\--0:#F97583;--1:#F97583\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\astro-icon/components\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>3/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\> MainGridLayout /span>span style\--0:#F97583;--1:#F97583\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\../layouts/MainGridLayout.astro\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>4/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\> I18nKey /span>span style\--0:#F97583;--1:#F97583\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\../i18n/i18nKey\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>5/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\> { i18n } /span>span style\--0:#F97583;--1:#F97583\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\../i18n/translation\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>6/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\> { url } /span>span style\--0:#F97583;--1:#F97583\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\../utils/url-utils\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>7/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\> { siteConfig } /span>span style\--0:#F97583;--1:#F97583\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\../config\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>8/div>/div>div class\code\>span style\--0:#99A0A6;--1:#99A0A6\>---/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>9/div>/div>div class\code\>\n/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>10/div>/div>div class\code\>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#79B8FF;--1:#79B8FF\>MainGridLayout/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>title/span>span style\--0:#E1E4E8;--1:#E1E4E8\>{/span>span style\--0:#B392F0;--1:#B392F0\>i18n/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(I18nKey.notFound)} /span>span style\--0:#B392F0;--1:#B392F0\>description/span>span style\--0:#E1E4E8;--1:#E1E4E8\>{/span>span style\--0:#B392F0;--1:#B392F0\>i18n/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(I18nKey.notFoundMessage)}>/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>11/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\flex w-full rounded-var(--radius-large) overflow-hidden relative min-h-96\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>12/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\card-base z-10 px-6 md:px-12 py-8 md:py-12 relative w-full\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:12ch\>div class\gutter\>div class\ln\ aria-hidden\true\>13/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\><!-- 404 Content -->/span>/div>/div>div class\ec-line\ style\--ecIndent:12ch\>div class\gutter\>div class\ln\ aria-hidden\true\>14/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\flex flex-col items-center text-center space-y-6\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:16ch\>div class\gutter\>div class\ln\ aria-hidden\true\>15/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\><!-- Large 404 Number -->/span>/div>/div>div class\ec-line\ style\--ecIndent:16ch\>div class\gutter\>div class\ln\ aria-hidden\true\>16/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\relative opacity-0 animate-fade-in-up\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:20ch\>div class\gutter\>div class\ln\ aria-hidden\true\>17/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\text-8xl md:text-9xl font-bold bg-gradient-to-br from-var(--primary) to-oklch(0.65_0.18_var(--hue)) bg-clip-text text-transparent select-none\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>18/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>404/span>/div>/div>div class\ec-line\ style\--ecIndent:20ch\>div class\gutter\>div class\ln\ aria-hidden\true\>19/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:20ch\>div class\gutter\>div class\ln\ aria-hidden\true\>20/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\><!-- Decorative elements -->/span>/div>/div>div class\ec-line\ style\--ecIndent:20ch\>div class\gutter\>div class\ln\ aria-hidden\true\>21/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\absolute -top-4 -right-4 w-8 h-8 bg-var(--primary) rounded-full opacity-20 animate-pulse\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:20ch\>div class\gutter\>div class\ln\ aria-hidden\true\>22/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\absolute -bottom-2 -left-2 w-6 h-6 bg-var(--primary) rounded-full opacity-30 animate-pulse\/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>style/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\animation-delay: 0.5s;\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:16ch\>div class\gutter\>div class\ln\ aria-hidden\true\>23/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>24/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:16ch\>div class\gutter\>div class\ln\ aria-hidden\true\>25/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\><!-- Title and Message -->/span>/div>/div>div class\ec-line\ style\--ecIndent:16ch\>div class\gutter\>div class\ln\ aria-hidden\true\>26/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\space-y-3 max-w-md opacity-0 animate-fade-in-up animate-delay-100\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:20ch\>div class\gutter\>div class\ln\ aria-hidden\true\>27/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>h1/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\text-2xl md:text-3xl font-bold text-var(--primary)\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>28/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>{/span>span style\--0:#B392F0;--1:#B392F0\>i18n/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(I18nKey.notFoundTitle)}/span>/div>/div>div class\ec-line\ style\--ecIndent:20ch\>div class\gutter\>div class\ln\ aria-hidden\true\>29/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>h1/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:20ch\>div class\gutter\>div class\ln\ aria-hidden\true\>30/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>p/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\text-75 text-base md:text-lg leading-relaxed\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>31/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>{/span>span style\--0:#B392F0;--1:#B392F0\>i18n/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(I18nKey.notFoundMessage)}/span>/div>/div>div class\ec-line\ style\--ecIndent:20ch\>div class\gutter\>div class\ln\ aria-hidden\true\>32/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>p/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:16ch\>div class\gutter\>div class\ln\ aria-hidden\true\>33/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>34/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:16ch\>div class\gutter\>div class\ln\ aria-hidden\true\>35/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\><!-- Illustration -->/span>/div>/div>div class\ec-line\ style\--ecIndent:16ch\>div class\gutter\>div class\ln\ aria-hidden\true\>36/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\py-4 opacity-0 animate-fade-in-up animate-delay-200\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:20ch\>div class\gutter\>div class\ln\ aria-hidden\true\>37/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\relative w-32 h-32 mx-auto animate-float\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>38/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\><!-- Simple geometric illustration -->/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>39/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\absolute inset-0 bg-gradient-to-br from-var(--primary) to-oklch(0.65_0.18_var(--hue)) rounded-full opacity-10\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>40/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\absolute inset-4 bg-var(--card-bg) rounded-full border-2 border-var(--primary) border-opacity-20\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>41/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\absolute inset-0 flex items-center justify-center\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:28ch\>div class\gutter\>div class\ln\ aria-hidden\true\>42/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#79B8FF;--1:#79B8FF\>Icon/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>name/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\fa6-solid:location-crosshairs\/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\w-12 h-12 text-var(--primary) opacity-60\/span>span style\--0:#E1E4E8;--1:#E1E4E8\> />/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>43/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:20ch\>div class\gutter\>div class\ln\ aria-hidden\true\>44/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:16ch\>div class\gutter\>div class\ln\ aria-hidden\true\>45/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>46/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:16ch\>div class\gutter\>div class\ln\ aria-hidden\true\>47/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\><!-- Action Buttons -->/span>/div>/div>div class\ec-line\ style\--ecIndent:16ch\>div class\gutter\>div class\ln\ aria-hidden\true\>48/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\flex flex-col sm:flex-row gap-3 pt-4 opacity-0 animate-fade-in-up animate-delay-300\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:20ch\>div class\gutter\>div class\ln\ aria-hidden\true\>49/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>a/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>href/span>span style\--0:#E1E4E8;--1:#E1E4E8\>{/span>span style\--0:#B392F0;--1:#B392F0\>url/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\/\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>)}/span>/div>/div>div class\ec-line\ style\--ecIndent:23ch\>div class\gutter\>div class\ln\ aria-hidden\true\>50/div>/div>div class\code\>span class\indent\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\btn-regular px-6 py-3 rounded-xl font-medium transition-all duration-200 hover:scale-105 active:scale-95 flex items-center justify-center gap-2\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>51/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#79B8FF;--1:#79B8FF\>Icon/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>name/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\fa6-solid:house\/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\w-4 h-4\/span>span style\--0:#E1E4E8;--1:#E1E4E8\> />/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>52/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>{/span>span style\--0:#B392F0;--1:#B392F0\>i18n/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(I18nKey.backToHome)}/span>/div>/div>div class\ec-line\ style\--ecIndent:20ch\>div class\gutter\>div class\ln\ aria-hidden\true\>53/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>a/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:20ch\>div class\gutter\>div class\ln\ aria-hidden\true\>54/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>a/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>href/span>span style\--0:#E1E4E8;--1:#E1E4E8\>{/span>span style\--0:#B392F0;--1:#B392F0\>url/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\/archive\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>)}/span>/div>/div>div class\ec-line\ style\--ecIndent:23ch\>div class\gutter\>div class\ln\ aria-hidden\true\>55/div>/div>div class\code\>span class\indent\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\btn-card px-6 py-3 rounded-xl font-medium transition-all duration-200 hover:scale-105 active:scale-95 flex items-center justify-center gap-2 border border-var(--line-divider)\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>56/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#79B8FF;--1:#79B8FF\>Icon/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>name/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\fa6-solid:box-archive\/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\w-4 h-4\/span>span style\--0:#E1E4E8;--1:#E1E4E8\> />/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>57/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>{/span>span style\--0:#B392F0;--1:#B392F0\>i18n/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(I18nKey.viewArchive)}/span>/div>/div>div class\ec-line\ style\--ecIndent:20ch\>div class\gutter\>div class\ln\ aria-hidden\true\>58/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>a/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:20ch\>div class\gutter\>div class\ln\ aria-hidden\true\>59/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>a/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>href/span>span style\--0:#E1E4E8;--1:#E1E4E8\>{/span>span style\--0:#B392F0;--1:#B392F0\>url/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\/about\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>)}/span>/div>/div>div class\ec-line\ style\--ecIndent:23ch\>div class\gutter\>div class\ln\ aria-hidden\true\>60/div>/div>div class\code\>span class\indent\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\btn-card px-6 py-3 rounded-xl font-medium transition-all duration-200 hover:scale-105 active:scale-95 flex items-center justify-center gap-2 border border-var(--line-divider)\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>61/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#79B8FF;--1:#79B8FF\>Icon/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>name/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\fa6-solid:circle-info\/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\w-4 h-4\/span>span style\--0:#E1E4E8;--1:#E1E4E8\> />/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>62/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>{/span>span style\--0:#B392F0;--1:#B392F0\>i18n/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(I18nKey.about)}/span>/div>/div>div class\ec-line\ style\--ecIndent:20ch\>div class\gutter\>div class\ln\ aria-hidden\true\>63/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>a/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:16ch\>div class\gutter\>div class\ln\ aria-hidden\true\>64/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>65/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:16ch\>div class\gutter\>div class\ln\ aria-hidden\true\>66/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\><!-- Additional Help Text -->/span>/div>/div>div class\ec-line\ style\--ecIndent:16ch\>div class\gutter\>div class\ln\ aria-hidden\true\>67/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\pt-6 text-sm text-50\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:20ch\>div class\gutter\>div class\ln\ aria-hidden\true\>68/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>p/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\transition-all duration-300\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>69/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>{siteConfig.lang /span>span style\--0:#F97583;--1:#F97583\>/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>zh_CN/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>?/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>如果您认为这是一个错误,请联系网站管理员。/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#F97583;--1:#F97583\>:/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>If you believe this is an error, please contact the site administrator./span>span style\--0:#E1E4E8;--1:#E1E4E8\>}/span>/div>/div>div class\ec-line\ style\--ecIndent:20ch\>div class\gutter\>div class\ln\ aria-hidden\true\>70/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>p/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:16ch\>div class\gutter\>div class\ln\ aria-hidden\true\>71/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:12ch\>div class\gutter\>div class\ln\ aria-hidden\true\>72/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>73/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>74/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>75/div>/div>div class\code\>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#79B8FF;--1:#79B8FF\>MainGridLayout/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>76/div>/div>div class\code\>\n/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>77/div>/div>div class\code\>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>style/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>78/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>@keyframes/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#FFAB70;--1:#FFAB70\>float/span>span style\--0:#E1E4E8;--1:#E1E4E8\> {/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>79/div>/div>div class\code\>span class\indent\> /span>span style\--0:#B392F0;--1:#B392F0\>0%/span>span style\--0:#E1E4E8;--1:#E1E4E8\>, /span>span style\--0:#B392F0;--1:#B392F0\>100%/span>span style\--0:#E1E4E8;--1:#E1E4E8\> { /span>span style\--0:#79B8FF;--1:#79B8FF\>transform/span>span style\--0:#E1E4E8;--1:#E1E4E8\>: /span>span style\--0:#79B8FF;--1:#79B8FF\>translateY/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(/span>span style\--0:#79B8FF;--1:#79B8FF\>0/span>span style\--0:#F97583;--1:#F97583\>px/span>span style\--0:#E1E4E8;--1:#E1E4E8\>); }/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>80/div>/div>div class\code\>span class\indent\> /span>span style\--0:#B392F0;--1:#B392F0\>50%/span>span style\--0:#E1E4E8;--1:#E1E4E8\> { /span>span style\--0:#79B8FF;--1:#79B8FF\>transform/span>span style\--0:#E1E4E8;--1:#E1E4E8\>: /span>span style\--0:#79B8FF;--1:#79B8FF\>translateY/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(/span>span style\--0:#79B8FF;--1:#79B8FF\>-10/span>span style\--0:#F97583;--1:#F97583\>px/span>span style\--0:#E1E4E8;--1:#E1E4E8\>); }/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>81/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>}/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>82/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>83/div>/div>div class\code\>span class\indent\> /span>span style\--0:#F97583;--1:#F97583\>@keyframes/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#FFAB70;--1:#FFAB70\>fadeInUp/span>span style\--0:#E1E4E8;--1:#E1E4E8\> {/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>84/div>/div>div class\code\>span class\indent\> /span>span style\--0:#B392F0;--1:#B392F0\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> {/span>/div>/div>div class\ec-line\ style\--ecIndent:12ch\>div class\gutter\>div class\ln\ aria-hidden\true\>85/div>/div>div class\code\>span class\indent\> /span>span style\--0:#79B8FF;--1:#79B8FF\>opacity/span>span style\--0:#E1E4E8;--1:#E1E4E8\>: /span>span style\--0:#79B8FF;--1:#79B8FF\>0/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\ style\--ecIndent:12ch\>div class\gutter\>div class\ln\ aria-hidden\true\>86/div>/div>div class\code\>span class\indent\> /span>span style\--0:#79B8FF;--1:#79B8FF\>transform/span>span style\--0:#E1E4E8;--1:#E1E4E8\>: /span>span style\--0:#79B8FF;--1:#79B8FF\>translateY/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(/span>span style\--0:#79B8FF;--1:#79B8FF\>30/span>span style\--0:#F97583;--1:#F97583\>px/span>span style\--0:#E1E4E8;--1:#E1E4E8\>);/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>87/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>}/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>88/div>/div>div class\code\>span class\indent\> /span>span style\--0:#B392F0;--1:#B392F0\>to/span>span style\--0:#E1E4E8;--1:#E1E4E8\> {/span>/div>/div>div class\ec-line\ style\--ecIndent:12ch\>div class\gutter\>div class\ln\ aria-hidden\true\>89/div>/div>div class\code\>span class\indent\> /span>span style\--0:#79B8FF;--1:#79B8FF\>opacity/span>span style\--0:#E1E4E8;--1:#E1E4E8\>: /span>span style\--0:#79B8FF;--1:#79B8FF\>1/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\ style\--ecIndent:12ch\>div class\gutter\>div class\ln\ aria-hidden\true\>90/div>/div>div class\code\>span class\indent\> /span>span style\--0:#79B8FF;--1:#79B8FF\>transform/span>span style\--0:#E1E4E8;--1:#E1E4E8\>: /span>span style\--0:#79B8FF;--1:#79B8FF\>translateY/span>span style\--0:#E1E4E8;--1:#E1E4E8\>(/span>span style\--0:#79B8FF;--1:#79B8FF\>0/span>span style\--0:#E1E4E8;--1:#E1E4E8\>);/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>91/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>}/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>92/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>}/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>93/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>94/div>/div>div class\code\>span class\indent\> /span>span style\--0:#B392F0;--1:#B392F0\>.animate-float/span>span style\--0:#E1E4E8;--1:#E1E4E8\> {/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>95/div>/div>div class\code\>span class\indent\> /span>span style\--0:#79B8FF;--1:#79B8FF\>animation/span>span style\--0:#E1E4E8;--1:#E1E4E8\>: float /span>span style\--0:#79B8FF;--1:#79B8FF\>3/span>span style\--0:#F97583;--1:#F97583\>s/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>ease-in-out/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>infinite/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>96/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>}/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>97/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>98/div>/div>div class\code\>span class\indent\> /span>span style\--0:#B392F0;--1:#B392F0\>.animate-fade-in-up/span>span style\--0:#E1E4E8;--1:#E1E4E8\> {/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>99/div>/div>div class\code\>span class\indent\> /span>span style\--0:#79B8FF;--1:#79B8FF\>animation/span>span style\--0:#E1E4E8;--1:#E1E4E8\>: fadeInUp /span>span style\--0:#79B8FF;--1:#79B8FF\>0.6/span>span style\--0:#F97583;--1:#F97583\>s/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>ease-out/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#79B8FF;--1:#79B8FF\>forwards/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>100/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>}/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>101/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>102/div>/div>div class\code\>span class\indent\> /span>span style\--0:#B392F0;--1:#B392F0\>.animate-delay-100/span>span style\--0:#E1E4E8;--1:#E1E4E8\> {/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>103/div>/div>div class\code\>span class\indent\> /span>span style\--0:#79B8FF;--1:#79B8FF\>animation-delay/span>span style\--0:#E1E4E8;--1:#E1E4E8\>: /span>span style\--0:#79B8FF;--1:#79B8FF\>0.1/span>span style\--0:#F97583;--1:#F97583\>s/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>104/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>}/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>105/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>106/div>/div>div class\code\>span class\indent\> /span>span style\--0:#B392F0;--1:#B392F0\>.animate-delay-200/span>span style\--0:#E1E4E8;--1:#E1E4E8\> {/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>107/div>/div>div class\code\>span class\indent\> /span>span style\--0:#79B8FF;--1:#79B8FF\>animation-delay/span>span style\--0:#E1E4E8;--1:#E1E4E8\>: /span>span style\--0:#79B8FF;--1:#79B8FF\>0.2/span>span style\--0:#F97583;--1:#F97583\>s/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>108/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>}/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>109/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>110/div>/div>div class\code\>span class\indent\> /span>span style\--0:#B392F0;--1:#B392F0\>.animate-delay-300/span>span style\--0:#E1E4E8;--1:#E1E4E8\> {/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>111/div>/div>div class\code\>span class\indent\> /span>span style\--0:#79B8FF;--1:#79B8FF\>animation-delay/span>span style\--0:#E1E4E8;--1:#E1E4E8\>: /span>span style\--0:#79B8FF;--1:#79B8FF\>0.3/span>span style\--0:#F97583;--1:#F97583\>s/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>112/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>}/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>113/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>114/div>/div>div class\code\>span class\indent\> /span>span style\--0:#B392F0;--1:#B392F0\>.animate-delay-400/span>span style\--0:#E1E4E8;--1:#E1E4E8\> {/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>115/div>/div>div class\code\>span class\indent\> /span>span style\--0:#79B8FF;--1:#79B8FF\>animation-delay/span>span style\--0:#E1E4E8;--1:#E1E4E8\>: /span>span style\--0:#79B8FF;--1:#79B8FF\>0.4/span>span style\--0:#F97583;--1:#F97583\>s/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\ style\--ecIndent:4ch\>div class\gutter\>div class\ln\ aria-hidden\true\>116/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>}/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>117/div>/div>div class\code\>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>style/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>/code>button class\copy-btn\ aria-label\Copy code\>div class\copy-btn-icon\>svg viewBox\0 -960 960 960\ xmlns\http://www.w3.org/2000/svg\ class\copy-btn-icon copy-icon\>path d\M368.37-237.37q-34.48 0-58.74-24.26-24.26-24.26-24.26-58.74v-474.26q0-34.48 24.26-58.74 24.26-24.26 58.74-24.26h378.26q34.48 0 58.74 24.26 24.26 24.26 24.26 58.74v474.26q0 34.48-24.26 58.74-24.26 24.26-58.74 24.26H368.37Zm0-83h378.26v-474.26H368.37v474.26Zm-155 238q-34.48 0-58.74-24.26-24.26-24.26-24.26-58.74v-515.76q0-17.45 11.96-29.48 11.97-12.02 29.33-12.02t29.54 12.02q12.17 12.03 12.17 29.48v515.76h419.76q17.45 0 29.48 11.96 12.02 11.97 12.02 29.33t-12.02 29.54q-12.03 12.17-29.48 12.17H213.37Zm155-238v-474.26 474.26Z\>/path>/svg>svg viewBox\0 -960 960 960\ xmlns\http://www.w3.org/2000/svg\ class\copy-btn-icon success-icon\>path d\m389-377.13 294.7-294.7q12.58-12.67 29.52-12.67 16.93 0 29.61 12.67 12.67 12.68 12.67 29.53 0 16.86-12.28 29.14L419.07-288.41q-12.59 12.67-29.52 12.67-16.94 0-29.62-12.67L217.41-430.93q-12.67-12.68-12.79-29.45-.12-16.77 12.55-29.45 12.68-12.67 29.62-12.67 16.93 0 29.28 12.67L389-377.13Z\>/path>/svg>/div>/button>/pre>/figure>/div>/section>section>h3 id\单语言404astro\>单语言404.astroa class\anchor\ href\#单语言404astro\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h3>p>此方法直接在strong>src/pages/strong>目录下创建404.astro即可br>\n由于我没有语言的404,这里附上二叉树树的404界面br>\n预览:img __ASTRO_IMAGE_\{"src":"../images/2x-404.jpg","alt":"2x-404","index":0}\>/p>div class\expressive-code\>figure class\frame\>figcaption class\header\>/figcaption>pre data-language\astro\ class\wrap\ style\--ecMaxLine:138ch\>code>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>1/div>/div>div class\code\>span style\--0:#99A0A6;--1:#99A0A6\>---/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>2/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\> Layout /span>span style\--0:#F97583;--1:#F97583\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\@/layouts/Layout.astro\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>3/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\> MainGridLayout /span>span style\--0:#F97583;--1:#F97583\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\@/layouts/MainGridLayout.astro\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>4/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\> { Icon } /span>span style\--0:#F97583;--1:#F97583\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\astro-icon/components\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>5/div>/div>div class\code\>span style\--0:#F97583;--1:#F97583\>import/span>span style\--0:#E1E4E8;--1:#E1E4E8\> { siteConfig } /span>span style\--0:#F97583;--1:#F97583\>from/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#9ECBFF;--1:#9ECBFF\>\@/config\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>;/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>6/div>/div>div class\code\>span style\--0:#99A0A6;--1:#99A0A6\>---/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>7/div>/div>div class\code\>\n/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>8/div>/div>div class\code\>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#79B8FF;--1:#79B8FF\>Layout/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>title/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\页面未找到\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>9/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#79B8FF;--1:#79B8FF\>MainGridLayout/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:16ch\>div class\gutter\>div class\ln\ aria-hidden\true\>10/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\flex flex-col items-center justify-center min-h-60vh text-center px-4\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>11/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\><!-- 404 图标 -->/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>12/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\mb-8\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:32ch\>div class\gutter\>div class\ln\ aria-hidden\true\>13/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\relative\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:40ch\>div class\gutter\>div class\ln\ aria-hidden\true\>14/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\text-8xl md:text-9xl font-bold text-var(--primary) opacity-20\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:48ch\>div class\gutter\>div class\ln\ aria-hidden\true\>15/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>404/span>/div>/div>div class\ec-line\ style\--ecIndent:40ch\>div class\gutter\>div class\ln\ aria-hidden\true\>16/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:40ch\>div class\gutter\>div class\ln\ aria-hidden\true\>17/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\absolute inset-0 flex items-center justify-center\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:48ch\>div class\gutter\>div class\ln\ aria-hidden\true\>18/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#79B8FF;--1:#79B8FF\>Icon/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>name/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\fa6-solid:face-sad-tear\/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\text-6xl md:text-7xl text-var(--primary)\/span>span style\--0:#E1E4E8;--1:#E1E4E8\> />/span>/div>/div>div class\ec-line\ style\--ecIndent:40ch\>div class\gutter\>div class\ln\ aria-hidden\true\>19/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:32ch\>div class\gutter\>div class\ln\ aria-hidden\true\>20/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>21/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>22/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>23/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\><!-- 错误信息 -->/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>24/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\card-base p-8 max-w-md mx-auto mb-8\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:32ch\>div class\gutter\>div class\ln\ aria-hidden\true\>25/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>h1/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\text-2xl md:text-3xl font-bold text-90 mb-4\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:40ch\>div class\gutter\>div class\ln\ aria-hidden\true\>26/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>页面走丢了/span>/div>/div>div class\ec-line\ style\--ecIndent:32ch\>div class\gutter\>div class\ln\ aria-hidden\true\>27/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>h1/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:32ch\>div class\gutter\>div class\ln\ aria-hidden\true\>28/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>p/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\text-75 mb-6 leading-relaxed\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:40ch\>div class\gutter\>div class\ln\ aria-hidden\true\>29/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>抱歉,您访问的页面不存在或已被移动。/span>/div>/div>div class\ec-line\ style\--ecIndent:40ch\>div class\gutter\>div class\ln\ aria-hidden\true\>30/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>br/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:40ch\>div class\gutter\>div class\ln\ aria-hidden\true\>31/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>请检查URL是否正确,或者返回首页继续浏览。/span>/div>/div>div class\ec-line\ style\--ecIndent:32ch\>div class\gutter\>div class\ln\ aria-hidden\true\>32/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>p/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>33/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:32ch\>div class\gutter\>div class\ln\ aria-hidden\true\>34/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\><!-- 导航按钮 -->/span>/div>/div>div class\ec-line\ style\--ecIndent:32ch\>div class\gutter\>div class\ln\ aria-hidden\true\>35/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\flex flex-col sm:flex-row gap-3 justify-center\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:40ch\>div class\gutter\>div class\ln\ aria-hidden\true\>36/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>a/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>href/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\/\/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\btn-regular-dark px-6 py-3 rounded-lg text-white font-medium\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:48ch\>div class\gutter\>div class\ln\ aria-hidden\true\>37/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#79B8FF;--1:#79B8FF\>Icon/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>name/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\fa6-solid:house\/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\mr-2\/span>span style\--0:#E1E4E8;--1:#E1E4E8\> />/span>/div>/div>div class\ec-line\ style\--ecIndent:48ch\>div class\gutter\>div class\ln\ aria-hidden\true\>38/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>返回首页/span>/div>/div>div class\ec-line\ style\--ecIndent:40ch\>div class\gutter\>div class\ln\ aria-hidden\true\>39/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>a/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:40ch\>div class\gutter\>div class\ln\ aria-hidden\true\>40/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>a/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>href/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\/archive/\/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\btn-regular px-6 py-3 rounded-lg font-medium\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:48ch\>div class\gutter\>div class\ln\ aria-hidden\true\>41/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#79B8FF;--1:#79B8FF\>Icon/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>name/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\fa6-solid:box-archive\/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\mr-2\/span>span style\--0:#E1E4E8;--1:#E1E4E8\> />/span>/div>/div>div class\ec-line\ style\--ecIndent:48ch\>div class\gutter\>div class\ln\ aria-hidden\true\>42/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>文章归档/span>/div>/div>div class\ec-line\ style\--ecIndent:40ch\>div class\gutter\>div class\ln\ aria-hidden\true\>43/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>a/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:32ch\>div class\gutter\>div class\ln\ aria-hidden\true\>44/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>45/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>46/div>/div>div class\code\>\n/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>47/div>/div>div class\code\>span class\indent\> /span>span style\--0:#99A0A6;--1:#99A0A6\><!-- 返回提示 -->/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>48/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\mt-8 text-50 text-sm\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:32ch\>div class\gutter\>div class\ln\ aria-hidden\true\>49/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>p/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\flex items-center justify-center\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:40ch\>div class\gutter\>div class\ln\ aria-hidden\true\>50/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#79B8FF;--1:#79B8FF\>Icon/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>name/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\fa6-solid:clock-rotate-left\/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>class/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\mr-2\/span>span style\--0:#E1E4E8;--1:#E1E4E8\> />/span>/div>/div>div class\ec-line\ style\--ecIndent:40ch\>div class\gutter\>div class\ln\ aria-hidden\true\>51/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>您也可以使用浏览器的后退按钮返回上一页/span>/div>/div>div class\ec-line\ style\--ecIndent:32ch\>div class\gutter\>div class\ln\ aria-hidden\true\>52/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>p/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:24ch\>div class\gutter\>div class\ln\ aria-hidden\true\>53/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:16ch\>div class\gutter\>div class\ln\ aria-hidden\true\>54/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:8ch\>div class\gutter\>div class\ln\ aria-hidden\true\>55/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#79B8FF;--1:#79B8FF\>MainGridLayout/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>56/div>/div>div class\code\>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#79B8FF;--1:#79B8FF\>Layout/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>/code>button class\copy-btn\ aria-label\Copy code\>div class\copy-btn-icon\>svg viewBox\0 -960 960 960\ xmlns\http://www.w3.org/2000/svg\ class\copy-btn-icon copy-icon\>path d\M368.37-237.37q-34.48 0-58.74-24.26-24.26-24.26-24.26-58.74v-474.26q0-34.48 24.26-58.74 24.26-24.26 58.74-24.26h378.26q34.48 0 58.74 24.26 24.26 24.26 24.26 58.74v474.26q0 34.48-24.26 58.74-24.26 24.26-58.74 24.26H368.37Zm0-83h378.26v-474.26H368.37v474.26Zm-155 238q-34.48 0-58.74-24.26-24.26-24.26-24.26-58.74v-515.76q0-17.45 11.96-29.48 11.97-12.02 29.33-12.02t29.54 12.02q12.17 12.03 12.17 29.48v515.76h419.76q17.45 0 29.48 11.96 12.02 11.97 12.02 29.33t-12.02 29.54q-12.03 12.17-29.48 12.17H213.37Zm155-238v-474.26 474.26Z\>/path>/svg>svg viewBox\0 -960 960 960\ xmlns\http://www.w3.org/2000/svg\ class\copy-btn-icon success-icon\>path d\m389-377.13 294.7-294.7q12.58-12.67 29.52-12.67 16.93 0 29.61 12.67 12.67 12.68 12.67 29.53 0 16.86-12.28 29.14L419.07-288.41q-12.59 12.67-29.52 12.67-16.94 0-29.62-12.67L217.41-430.93q-12.67-12.68-12.79-29.45-.12-16.77 12.55-29.45 12.68-12.67 29.62-12.67 16.93 0 29.28 12.67L389-377.13Z\>/path>/svg>/div>/button>/pre>/figure>/div>/section>/section>,metadata:{headings:{depth:1,slug:本文章分为两部分,text:本文章分为两部分#},{depth:3,slug:适配多语言的404界面,text:适配多语言的404界面#},{depth:3,slug:单语言404astro,text:单语言404.astro#},localImagePaths:../images/2x-404.jpg,remoteImagePaths:,frontmatter:{title:为fuwari增加一个404界面,published:2025-09-24T00:00:00.000Z,description:为fuwari添加一个好看的404界面,image:../images/fuwari-404.jpg,tags:fuwari,category:tech,draft:false,lang:zh_CN,minutes:4,words:823,excerpt:打开src/i18n/i18nKey.ts},imagePaths:../images/2x-404.jpg}},collection:posts,slug:fuwari-404};const umamiConfig {enable:true,baseUrl:https://cloud.umami.is,shareId:DMfBtCxd4Y1VOCMA,region:us,timezone:Asia/Shanghai};const unavailableText 统计不可用。请检查是否屏蔽了Umami域名,如AdGuard和AdBlock等插件;const viewsText 浏览;const visitsText 访客; // 客户端统计文案生成函数 function generateStatsText(pageViews, visits) { return `${viewsText} ${pageViews} · ${visitsText} ${visits}`; } // 获取文章浏览量统计 async function fetchPostCardViews(slug) { if (!umamiConfig.enable) { return; } try { // 调用全局工具获取 Umami 分享数据 const { websiteId, token } await getUmamiShareData(umamiConfig.baseUrl, umamiConfig.shareId, umamiConfig.region); // 第二步:获取统计数据 const currentTimestamp Date.now(); const params new URLSearchParams({ startAt: 0, endAt: currentTimestamp.toString(), unit: hour, timezone: umamiConfig.timezone, path: `eq./posts/${slug}/`, compare: false }); const statsUrl `${umamiConfig.baseUrl}/analytics/${umamiConfig.region}/api/websites/${websiteId}/stats?${params.toString()}`; const statsResponse await fetch(statsUrl, { headers: { x-umami-share-token: token } }); if (statsResponse.status 401) { clearUmamiShareCache(); return await fetchPostCardViews(slug); } if (!statsResponse.ok) { throw new Error(获取统计数据失败); } const statsData await statsResponse.json(); const pageViews statsData.pageviews || 0; const visits statsData.visitors || 0; const displayElement document.getElementById(`page-views-${slug}`); if (displayElement) { displayElement.textContent generateStatsText(pageViews, visits); } } catch (error) { console.error(Error fetching page views for, slug, :, error); const displayElement document.getElementById(`page-views-${slug}`); if (displayElement) { displayElement.textContent unavailableText; } } } // 页面加载完成后获取统计数据 function initPostCardStats() { const slug entry.slug; if (slug) { fetchPostCardViews(slug); } } if (document.readyState loading) { document.addEventListener(DOMContentLoaded, initPostCardStats); } else { initPostCardStats(); }})();/script> div classcard-base flex flex-col-reverse md:flex-col w-full rounded-var(--radius-large) overflow-hidden relative onload-animation styleanimation-delay: calc(var(--content-delay) + 200ms);; --coverWidth: 28%; data-astro-cid-iyiqi2so> div classpl-6 md:pl-9 pr-6 md:pr-2 pt-6 md:pt-7 pb-6 relative w-full md:w-calc(100%_-_var(--coverWidth)_-_12px) data-astro-cid-iyiqi2so style--coverWidth: 28%;> a href/posts/ba2th/ classtransition group w-full block font-bold mb-3 text-3xl text-90 hover:text-var(--primary) dark:hover:text-var(--primary) active:text-var(--title-active) dark:active:text-var(--title-active) before:w-1 before:h-5 before:rounded-md before:bg-var(--primary) before:absolute before:top-35px before:left-18px before:hidden md:before:block data-astro-cid-iyiqi2so style--coverWidth: 28%;> BA周年庆直接9个彩 svg width1em height1em viewBox0 0 24 24 classinline text-2rem text-var(--primary) md:hidden translate-y-0.5 absolute data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> svg width1em height1em viewBox0 0 24 24 classtext-var(--primary) text-2rem transition hidden md:inline absolute translate-y-0.5 opacity-0 group-hover:opacity-100 -translate-x-1 group-hover:translate-x-0 data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> /a> !-- metadata --> div classflex flex-wrap text-neutral-500 dark:text-neutral-400 items-center gap-4 gap-x-4 gap-y-2 mb-4> !-- publish date --> div classflex items-center> div classmeta-icon> svg width1em height1em viewBox0 0 24 24 classtext-xl data-iconmaterial-symbols:calendar-today-outline-rounded> use href#ai:material-symbols:calendar-today-outline-rounded>/use> /svg> /div> span classtext-50 text-sm font-medium>2025-08-07/span> /div> !-- update date --> !-- categories --> div classflex items-center> div classmeta-icon> svg width1em height1em viewBox0 0 24 24 classtext-xl data-iconmaterial-symbols:book-2-outline-rounded> use href#ai:material-symbols:book-2-outline-rounded>/use> /svg> /div> div classflex flex-row flex-nowrap items-center> a href/archive/?categorydaily aria-labelView all posts in the daily category classlink-lg transition text-50 text-sm font-medium hover:text-var(--primary) dark:hover:text-var(--primary) whitespace-nowrap> daily /a> /div> /div> !-- tags --> div classitems-center hidden md:flex> div classmeta-icon> svg width1em height1em viewBox0 0 24 24 classtext-xl data-iconmaterial-symbols:tag-rounded> use href#ai:material-symbols:tag-rounded>/use> /svg> /div> div classflex flex-row flex-nowrap items-center> div classhidden mx-1.5 text-var(--meta-divider) text-sm>//div> a href/archive/?tagblue%20archive aria-labelView all posts with the blue archive tag classlink-lg transition text-50 text-sm font-medium hover:text-var(--primary) dark:hover:text-var(--primary) whitespace-nowrap> blue archive /a> /div> /div> !-- page views --> /div> !-- description --> div classtransition text-75 mb-3.5 pr-4 data-astro-cid-iyiqi2so style--coverWidth: 28%;> 两个亚子还有礼服日奈 /div> !-- word count and read time --> div classtext-sm text-black/30 dark:text-white/30 flex gap-4 transition data-astro-cid-iyiqi2so style--coverWidth: 28%;> div data-astro-cid-iyiqi2so style--coverWidth: 28%;> 24 字 /div> div data-astro-cid-iyiqi2so style--coverWidth: 28%;>|/div> div data-astro-cid-iyiqi2so style--coverWidth: 28%;> 1 分钟 /div> /div> !-- page views --> div classtext-sm text-black/30 dark:text-white/30 transition data-astro-cid-iyiqi2so style--coverWidth: 28%;> span idpage-views-ba2th data-astro-cid-iyiqi2so style--coverWidth: 28%;>统计加载中.../span> /div> /div> a href/posts/ba2th/ aria-labelBA周年庆直接9个彩 classgroup max-h-20vh md:max-h-none mx-4 mt-4 -mb-2 md:mb-0 md:mx-0 md:mt-0 md:w-var(--coverWidth) relative md:absolute md:top-3 md:bottom-3 md:right-3 rounded-xl overflow-hidden active:scale-95 data-astro-cid-iyiqi2so style--coverWidth: 28%;> div classabsolute pointer-events-none z-10 w-full h-full group-hover:bg-black/30 group-active:bg-black/50 transition data-astro-cid-iyiqi2so style--coverWidth: 28%;>/div> div classabsolute pointer-events-none z-20 w-full h-full flex items-center justify-center data-astro-cid-iyiqi2so style--coverWidth: 28%;> svg width1em height1em viewBox0 0 24 24 classtransition opacity-0 group-hover:opacity-100 scale-50 group-hover:scale-100 text-white text-5xl data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> /div> div classw-full h-full overflow-hidden relative> div classtransition absolute inset-0 dark:bg-black/10 bg-opacity-50 pointer-events-none>/div> img src/_astro/ba3cai.BYOLUvMl.jpg altCover Image of the Post styleobject-position: center loadinglazy decodingasync fetchpriorityauto width2400 height1080 classw-full h-full object-cover> /div> /a> /div> div classtransition border-t-1px border-dashed mx-6 border-black/10 dark:border-white/0.15 last:border-t-0 md:hidden data-astro-cid-iyiqi2so style--coverWidth: 28%;>/div> script>(function(){const entry {id:ba2th.md,data:{title:BA周年庆直接9个彩,published:2025-08-07T00:00:00.000Z,draft:false,description:两个亚子还有礼服日奈,image:../images/ba3cai.jpg,tags:blue archive,category:daily,lang:zh_CN,pinned:false,prevTitle:fuwari接入评论功能,prevSlug:comment,nextTitle:为fuwari增加一个404界面,nextSlug:fuwari-404},body:快哉快哉\n!亚子(../images/yazi.jpg) \n!日奈(../images/rinai.jpg) \n还有我的支付宝和QQ主题😋 \n!支付宝(../images/ba-alipay.jpg) \n!QQ(../images/ba-qq.jpg),filePath:src/content/posts/ba2th.md,assetImports:../images/yazi.jpg,../images/rinai.jpg,../images/ba-alipay.jpg,../images/ba-qq.jpg,digest:366d66068491a5e3,rendered:{html:p>快哉快哉\nimg __ASTRO_IMAGE_\{"src":"../images/yazi.jpg","alt":"亚子","index":0}\>br>\nimg __ASTRO_IMAGE_\{"src":"../images/rinai.jpg","alt":"日奈","index":0}\>br>\n还有我的支付宝和QQ主题😋br>\nimg __ASTRO_IMAGE_\{"src":"../images/ba-alipay.jpg","alt":"支付宝","index":0}\>br>\nimg __ASTRO_IMAGE_\{"src":"../images/ba-qq.jpg","alt":"QQ","index":0}\>/p>,metadata:{headings:,localImagePaths:../images/yazi.jpg,../images/rinai.jpg,../images/ba-alipay.jpg,../images/ba-qq.jpg,remoteImagePaths:,frontmatter:{title:BA周年庆直接9个彩,published:2025-08-07T00:00:00.000Z,description:两个亚子还有礼服日奈,image:../images/ba3cai.jpg,tags:blue archive,category:daily,draft:false,lang:zh_CN,minutes:1,words:24,excerpt:快哉快哉\n亚子日奈还有我的支付宝和QQ主题😋支付宝QQ},imagePaths:../images/yazi.jpg,../images/rinai.jpg,../images/ba-alipay.jpg,../images/ba-qq.jpg}},collection:posts,slug:ba2th};const umamiConfig {enable:true,baseUrl:https://cloud.umami.is,shareId:DMfBtCxd4Y1VOCMA,region:us,timezone:Asia/Shanghai};const unavailableText 统计不可用。请检查是否屏蔽了Umami域名,如AdGuard和AdBlock等插件;const viewsText 浏览;const visitsText 访客; // 客户端统计文案生成函数 function generateStatsText(pageViews, visits) { return `${viewsText} ${pageViews} · ${visitsText} ${visits}`; } // 获取文章浏览量统计 async function fetchPostCardViews(slug) { if (!umamiConfig.enable) { return; } try { // 调用全局工具获取 Umami 分享数据 const { websiteId, token } await getUmamiShareData(umamiConfig.baseUrl, umamiConfig.shareId, umamiConfig.region); // 第二步:获取统计数据 const currentTimestamp Date.now(); const params new URLSearchParams({ startAt: 0, endAt: currentTimestamp.toString(), unit: hour, timezone: umamiConfig.timezone, path: `eq./posts/${slug}/`, compare: false }); const statsUrl `${umamiConfig.baseUrl}/analytics/${umamiConfig.region}/api/websites/${websiteId}/stats?${params.toString()}`; const statsResponse await fetch(statsUrl, { headers: { x-umami-share-token: token } }); if (statsResponse.status 401) { clearUmamiShareCache(); return await fetchPostCardViews(slug); } if (!statsResponse.ok) { throw new Error(获取统计数据失败); } const statsData await statsResponse.json(); const pageViews statsData.pageviews || 0; const visits statsData.visitors || 0; const displayElement document.getElementById(`page-views-${slug}`); if (displayElement) { displayElement.textContent generateStatsText(pageViews, visits); } } catch (error) { console.error(Error fetching page views for, slug, :, error); const displayElement document.getElementById(`page-views-${slug}`); if (displayElement) { displayElement.textContent unavailableText; } } } // 页面加载完成后获取统计数据 function initPostCardStats() { const slug entry.slug; if (slug) { fetchPostCardViews(slug); } } if (document.readyState loading) { document.addEventListener(DOMContentLoaded, initPostCardStats); } else { initPostCardStats(); }})();/script> div classcard-base flex flex-col-reverse md:flex-col w-full rounded-var(--radius-large) overflow-hidden relative onload-animation styleanimation-delay: calc(var(--content-delay) + 250ms);; --coverWidth: 28%; data-astro-cid-iyiqi2so> div classpl-6 md:pl-9 pr-6 md:pr-2 pt-6 md:pt-7 pb-6 relative w-full md:w-calc(100%_-_var(--coverWidth)_-_12px) data-astro-cid-iyiqi2so style--coverWidth: 28%;> a href/posts/comment/ classtransition group w-full block font-bold mb-3 text-3xl text-90 hover:text-var(--primary) dark:hover:text-var(--primary) active:text-var(--title-active) dark:active:text-var(--title-active) before:w-1 before:h-5 before:rounded-md before:bg-var(--primary) before:absolute before:top-35px before:left-18px before:hidden md:before:block data-astro-cid-iyiqi2so style--coverWidth: 28%;> fuwari接入评论功能 svg width1em height1em viewBox0 0 24 24 classinline text-2rem text-var(--primary) md:hidden translate-y-0.5 absolute data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> svg width1em height1em viewBox0 0 24 24 classtext-var(--primary) text-2rem transition hidden md:inline absolute translate-y-0.5 opacity-0 group-hover:opacity-100 -translate-x-1 group-hover:translate-x-0 data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> /a> !-- metadata --> div classflex flex-wrap text-neutral-500 dark:text-neutral-400 items-center gap-4 gap-x-4 gap-y-2 mb-4> !-- publish date --> div classflex items-center> div classmeta-icon> svg width1em height1em viewBox0 0 24 24 classtext-xl data-iconmaterial-symbols:calendar-today-outline-rounded> use href#ai:material-symbols:calendar-today-outline-rounded>/use> /svg> /div> span classtext-50 text-sm font-medium>2025-08-04/span> /div> !-- update date --> !-- categories --> div classflex items-center> div classmeta-icon> svg width1em height1em viewBox0 0 24 24 classtext-xl data-iconmaterial-symbols:book-2-outline-rounded> use href#ai:material-symbols:book-2-outline-rounded>/use> /svg> /div> div classflex flex-row flex-nowrap items-center> a href/archive/?categorytech aria-labelView all posts in the tech category classlink-lg transition text-50 text-sm font-medium hover:text-var(--primary) dark:hover:text-var(--primary) whitespace-nowrap> tech /a> /div> /div> !-- tags --> div classitems-center hidden md:flex> div classmeta-icon> svg width1em height1em viewBox0 0 24 24 classtext-xl data-iconmaterial-symbols:tag-rounded> use href#ai:material-symbols:tag-rounded>/use> /svg> /div> div classflex flex-row flex-nowrap items-center> div classhidden mx-1.5 text-var(--meta-divider) text-sm>//div> a href/archive/?tagfuwari aria-labelView all posts with the fuwari tag classlink-lg transition text-50 text-sm font-medium hover:text-var(--primary) dark:hover:text-var(--primary) whitespace-nowrap> fuwari /a> /div> /div> !-- page views --> /div> !-- description --> div classtransition text-75 mb-3.5 pr-4 data-astro-cid-iyiqi2so style--coverWidth: 28%;> 让你的fuwari接入评论,并让它在文章末显示出 /div> !-- word count and read time --> div classtext-sm text-black/30 dark:text-white/30 flex gap-4 transition data-astro-cid-iyiqi2so style--coverWidth: 28%;> div data-astro-cid-iyiqi2so style--coverWidth: 28%;> 235 字 /div> div data-astro-cid-iyiqi2so style--coverWidth: 28%;>|/div> div data-astro-cid-iyiqi2so style--coverWidth: 28%;> 1 分钟 /div> /div> !-- page views --> div classtext-sm text-black/30 dark:text-white/30 transition data-astro-cid-iyiqi2so style--coverWidth: 28%;> span idpage-views-comment data-astro-cid-iyiqi2so style--coverWidth: 28%;>统计加载中.../span> /div> /div> a href/posts/comment/ aria-labelfuwari接入评论功能 classgroup max-h-20vh md:max-h-none mx-4 mt-4 -mb-2 md:mb-0 md:mx-0 md:mt-0 md:w-var(--coverWidth) relative md:absolute md:top-3 md:bottom-3 md:right-3 rounded-xl overflow-hidden active:scale-95 data-astro-cid-iyiqi2so style--coverWidth: 28%;> div classabsolute pointer-events-none z-10 w-full h-full group-hover:bg-black/30 group-active:bg-black/50 transition data-astro-cid-iyiqi2so style--coverWidth: 28%;>/div> div classabsolute pointer-events-none z-20 w-full h-full flex items-center justify-center data-astro-cid-iyiqi2so style--coverWidth: 28%;> svg width1em height1em viewBox0 0 24 24 classtransition opacity-0 group-hover:opacity-100 scale-50 group-hover:scale-100 text-white text-5xl data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> /div> div classw-full h-full overflow-hidden relative> div classtransition absolute inset-0 dark:bg-black/10 bg-opacity-50 pointer-events-none>/div> img src/_astro/comment.BsJjvYB8.jpg altCover Image of the Post styleobject-position: center loadinglazy decodingasync fetchpriorityauto width775 height359 classw-full h-full object-cover> /div> /a> /div> div classtransition border-t-1px border-dashed mx-6 border-black/10 dark:border-white/0.15 last:border-t-0 md:hidden data-astro-cid-iyiqi2so style--coverWidth: 28%;>/div> script>(function(){const entry {id:comment.md,data:{title:fuwari接入评论功能,published:2025-08-04T00:00:00.000Z,draft:false,description:让你的fuwari接入评论,并让它在文章末显示出,image:../images/comment.jpg,tags:fuwari,category:tech,lang:zh_CN,pinned:false,prevTitle:edgeone加速worker,prevSlug:edgeone-worker,nextTitle:BA周年庆直接9个彩,nextSlug:ba2th},body:# Giscus\n想要接入评论,肯定需要一个三方平台 Giscus(https://giscus.app/zh-CN)\nGiscus就是一个非常合适的平台 \n# 配置Giscus\n首先去github创建一个存储库,**一定要是公开库**\n然后在仓库设置中**启用**`Discussion`功能 \n前往https://giscus.app/zh-CN\n在`仓库`一栏中点击第二步的蓝字安装giscus,最后填写自己的用户名及刚刚创建的仓库名称 \n### 映射\n我只建议使用`pathname`:以文章路径区分评论区,即使换域名也能匹配 \n其它映射可以看官方介绍 \n分类选择**公告(announcements)** \n特性个人建议勾选**1 3 4** \n主题默认即可,也可以尝试官方的其它主题 \n最后将给出的JS复制 \n# 配置fuwari\n在`src/pages/posts/`目录下找到`...slug.astro`,在它的**135行**插入\n```astro\ndiv id\giscus-comments\ style\margin-top: 3rem;\>\n 你的JS\n/div>\n```\n\n最后本地测试一下,没问题就可以部署到服务器了,filePath:src/content/posts/comment.md,digest:f4316ce613aed7d7,rendered:{html:section>h1 id\giscus\>Giscusa class\anchor\ href\#giscus\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>想要接入评论,肯定需要一个三方平台 a href\https://giscus.app/zh-CN\>Giscus/a>\nGiscus就是一个非常合适的平台/p>/section>\nsection>h1 id\配置giscus\>配置Giscusa class\anchor\ href\#配置giscus\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>首先去github创建一个存储库,strong>一定要是公开库/strong>\n然后在仓库设置中strong>启用/strong>code>Discussion/code>功能br>\n前往a href\https://giscus.app/zh-CN\>https://giscus.app/zh-CN/a>\n在code>仓库/code>一栏中点击第二步的蓝字安装giscus,最后填写自己的用户名及刚刚创建的仓库名称/p>section>h3 id\映射\>映射a class\anchor\ href\#映射\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h3>p>我只建议使用code>pathname/code>:以文章路径区分评论区,即使换域名也能匹配br>\n其它映射可以看官方介绍br>\n分类选择strong>公告(announcements)/strong>br>\n特性个人建议勾选strong>1 3 4/strong>br>\n主题默认即可,也可以尝试官方的其它主题br>\n最后将给出的JS复制/p>/section>/section>\nsection>h1 id\配置fuwari\>配置fuwaria class\anchor\ href\#配置fuwari\>span class\anchor-icon\ data-pagefind-ignore\\>#/span>/a>/h1>p>在code>src/pages/posts//code>目录下找到code>...slug.astro/code>,在它的strong>135行/strong>插入/p>div class\expressive-code\>link rel\stylesheet\ href\/_astro/ec.d1dr8.css\>script type\module\ src\/_astro/ec.g1fg5.js\>\x3C/script>figure class\frame\>figcaption class\header\>/figcaption>pre data-language\astro\ class\wrap\ style\--ecMaxLine:52ch\>code>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>1/div>/div>div class\code\>span style\--0:#E1E4E8;--1:#E1E4E8\></span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>id/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\giscus-comments\/span>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>span style\--0:#B392F0;--1:#B392F0\>style/span>span style\--0:#E1E4E8;--1:#E1E4E8\>/span>span style\--0:#9ECBFF;--1:#9ECBFF\>\margin-top: 3rem;\/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>div class\ec-line\ style\--ecIndent:2ch\>div class\gutter\>div class\ln\ aria-hidden\true\>2/div>/div>div class\code\>span class\indent\>span style\--0:#E1E4E8;--1:#E1E4E8\> /span>/span>span style\--0:#E1E4E8;--1:#E1E4E8\>你的JS/span>/div>/div>div class\ec-line\>div class\gutter\>div class\ln\ aria-hidden\true\>3/div>/div>div class\code\>span style\--0:#E1E4E8;--1:#E1E4E8\><//span>span style\--0:#85E89D;--1:#85E89D\>div/span>span style\--0:#E1E4E8;--1:#E1E4E8\>>/span>/div>/div>/code>button class\copy-btn\ aria-label\Copy code\>div class\copy-btn-icon\>svg viewBox\0 -960 960 960\ xmlns\http://www.w3.org/2000/svg\ class\copy-btn-icon copy-icon\>path d\M368.37-237.37q-34.48 0-58.74-24.26-24.26-24.26-24.26-58.74v-474.26q0-34.48 24.26-58.74 24.26-24.26 58.74-24.26h378.26q34.48 0 58.74 24.26 24.26 24.26 24.26 58.74v474.26q0 34.48-24.26 58.74-24.26 24.26-58.74 24.26H368.37Zm0-83h378.26v-474.26H368.37v474.26Zm-155 238q-34.48 0-58.74-24.26-24.26-24.26-24.26-58.74v-515.76q0-17.45 11.96-29.48 11.97-12.02 29.33-12.02t29.54 12.02q12.17 12.03 12.17 29.48v515.76h419.76q17.45 0 29.48 11.96 12.02 11.97 12.02 29.33t-12.02 29.54q-12.03 12.17-29.48 12.17H213.37Zm155-238v-474.26 474.26Z\>/path>/svg>svg viewBox\0 -960 960 960\ xmlns\http://www.w3.org/2000/svg\ class\copy-btn-icon success-icon\>path d\m389-377.13 294.7-294.7q12.58-12.67 29.52-12.67 16.93 0 29.61 12.67 12.67 12.68 12.67 29.53 0 16.86-12.28 29.14L419.07-288.41q-12.59 12.67-29.52 12.67-16.94 0-29.62-12.67L217.41-430.93q-12.67-12.68-12.79-29.45-.12-16.77 12.55-29.45 12.68-12.67 29.62-12.67 16.93 0 29.28 12.67L389-377.13Z\>/path>/svg>/div>/button>/pre>/figure>/div>p>最后本地测试一下,没问题就可以部署到服务器了/p>/section>,metadata:{headings:{depth:1,slug:giscus,text:Giscus#},{depth:1,slug:配置giscus,text:配置Giscus#},{depth:3,slug:映射,text:映射#},{depth:1,slug:配置fuwari,text:配置fuwari#},localImagePaths:,remoteImagePaths:,frontmatter:{title:fuwari接入评论功能,published:2025-08-04T00:00:00.000Z,description:让你的fuwari接入评论,并让它在文章末显示出,image:../images/comment.jpg,tags:fuwari,category:tech,draft:false,lang:zh_CN,minutes:1,words:235,excerpt:想要接入评论,肯定需要一个三方平台 Giscus\nGiscus就是一个非常合适的平台},imagePaths:}},collection:posts,slug:comment};const umamiConfig {enable:true,baseUrl:https://cloud.umami.is,shareId:DMfBtCxd4Y1VOCMA,region:us,timezone:Asia/Shanghai};const unavailableText 统计不可用。请检查是否屏蔽了Umami域名,如AdGuard和AdBlock等插件;const viewsText 浏览;const visitsText 访客; // 客户端统计文案生成函数 function generateStatsText(pageViews, visits) { return `${viewsText} ${pageViews} · ${visitsText} ${visits}`; } // 获取文章浏览量统计 async function fetchPostCardViews(slug) { if (!umamiConfig.enable) { return; } try { // 调用全局工具获取 Umami 分享数据 const { websiteId, token } await getUmamiShareData(umamiConfig.baseUrl, umamiConfig.shareId, umamiConfig.region); // 第二步:获取统计数据 const currentTimestamp Date.now(); const params new URLSearchParams({ startAt: 0, endAt: currentTimestamp.toString(), unit: hour, timezone: umamiConfig.timezone, path: `eq./posts/${slug}/`, compare: false }); const statsUrl `${umamiConfig.baseUrl}/analytics/${umamiConfig.region}/api/websites/${websiteId}/stats?${params.toString()}`; const statsResponse await fetch(statsUrl, { headers: { x-umami-share-token: token } }); if (statsResponse.status 401) { clearUmamiShareCache(); return await fetchPostCardViews(slug); } if (!statsResponse.ok) { throw new Error(获取统计数据失败); } const statsData await statsResponse.json(); const pageViews statsData.pageviews || 0; const visits statsData.visitors || 0; const displayElement document.getElementById(`page-views-${slug}`); if (displayElement) { displayElement.textContent generateStatsText(pageViews, visits); } } catch (error) { console.error(Error fetching page views for, slug, :, error); const displayElement document.getElementById(`page-views-${slug}`); if (displayElement) { displayElement.textContent unavailableText; } } } // 页面加载完成后获取统计数据 function initPostCardStats() { const slug entry.slug; if (slug) { fetchPostCardViews(slug); } } if (document.readyState loading) { document.addEventListener(DOMContentLoaded, initPostCardStats); } else { initPostCardStats(); }})();/script> div classcard-base flex flex-col-reverse md:flex-col w-full rounded-var(--radius-large) overflow-hidden relative onload-animation styleanimation-delay: calc(var(--content-delay) + 300ms);; --coverWidth: 28%; data-astro-cid-iyiqi2so> div classpl-6 md:pl-9 pr-6 md:pr-2 pt-6 md:pt-7 pb-6 relative w-full md:w-calc(100%_-_var(--coverWidth)_-_12px) data-astro-cid-iyiqi2so style--coverWidth: 28%;> a href/posts/edgeone-worker/ classtransition group w-full block font-bold mb-3 text-3xl text-90 hover:text-var(--primary) dark:hover:text-var(--primary) active:text-var(--title-active) dark:active:text-var(--title-active) before:w-1 before:h-5 before:rounded-md before:bg-var(--primary) before:absolute before:top-35px before:left-18px before:hidden md:before:block data-astro-cid-iyiqi2so style--coverWidth: 28%;> edgeone加速worker svg width1em height1em viewBox0 0 24 24 classinline text-2rem text-var(--primary) md:hidden translate-y-0.5 absolute data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> svg width1em height1em viewBox0 0 24 24 classtext-var(--primary) text-2rem transition hidden md:inline absolute translate-y-0.5 opacity-0 group-hover:opacity-100 -translate-x-1 group-hover:translate-x-0 data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> /a> !-- metadata --> div classflex flex-wrap text-neutral-500 dark:text-neutral-400 items-center gap-4 gap-x-4 gap-y-2 mb-4> !-- publish date --> div classflex items-center> div classmeta-icon> svg width1em height1em viewBox0 0 24 24 classtext-xl data-iconmaterial-symbols:calendar-today-outline-rounded> use href#ai:material-symbols:calendar-today-outline-rounded>/use> /svg> /div> span classtext-50 text-sm font-medium>2025-07-29/span> /div> !-- update date --> !-- categories --> div classflex items-center> div classmeta-icon> svg width1em height1em viewBox0 0 24 24 classtext-xl data-iconmaterial-symbols:book-2-outline-rounded> use href#ai:material-symbols:book-2-outline-rounded>/use> /svg> /div> div classflex flex-row flex-nowrap items-center> a href/archive/?categorytech aria-labelView all posts in the tech category classlink-lg transition text-50 text-sm font-medium hover:text-var(--primary) dark:hover:text-var(--primary) whitespace-nowrap> tech /a> /div> /div> !-- tags --> div classitems-center hidden md:flex> div classmeta-icon> svg width1em height1em viewBox0 0 24 24 classtext-xl data-iconmaterial-symbols:tag-rounded> use href#ai:material-symbols:tag-rounded>/use> /svg> /div> div classflex flex-row flex-nowrap items-center> div classhidden mx-1.5 text-var(--meta-divider) text-sm>//div> a href/archive/?tagcloudflare aria-labelView all posts with the cloudflare tag classlink-lg transition text-50 text-sm font-medium hover:text-var(--primary) dark:hover:text-var(--primary) whitespace-nowrap> cloudflare /a>div classmx-1.5 text-var(--meta-divider) text-sm>//div> a href/archive/?tagedgeone aria-labelView all posts with the edgeone tag classlink-lg transition text-50 text-sm font-medium hover:text-var(--primary) dark:hover:text-var(--primary) whitespace-nowrap> edgeone /a> /div> /div> !-- page views --> /div> !-- description --> div classtransition text-75 mb-3.5 pr-4 data-astro-cid-iyiqi2so style--coverWidth: 28%;> 如何使用edgeone加速cf worker /div> !-- word count and read time --> div classtext-sm text-black/30 dark:text-white/30 flex gap-4 transition data-astro-cid-iyiqi2so style--coverWidth: 28%;> div data-astro-cid-iyiqi2so style--coverWidth: 28%;> 209 字 /div> div data-astro-cid-iyiqi2so style--coverWidth: 28%;>|/div> div data-astro-cid-iyiqi2so style--coverWidth: 28%;> 1 分钟 /div> /div> !-- page views --> div classtext-sm text-black/30 dark:text-white/30 transition data-astro-cid-iyiqi2so style--coverWidth: 28%;> span idpage-views-edgeone-worker data-astro-cid-iyiqi2so style--coverWidth: 28%;>统计加载中.../span> /div> /div> a href/posts/edgeone-worker/ aria-labeledgeone加速worker classgroup max-h-20vh md:max-h-none mx-4 mt-4 -mb-2 md:mb-0 md:mx-0 md:mt-0 md:w-var(--coverWidth) relative md:absolute md:top-3 md:bottom-3 md:right-3 rounded-xl overflow-hidden active:scale-95 data-astro-cid-iyiqi2so style--coverWidth: 28%;> div classabsolute pointer-events-none z-10 w-full h-full group-hover:bg-black/30 group-active:bg-black/50 transition data-astro-cid-iyiqi2so style--coverWidth: 28%;>/div> div classabsolute pointer-events-none z-20 w-full h-full flex items-center justify-center data-astro-cid-iyiqi2so style--coverWidth: 28%;> svg width1em height1em viewBox0 0 24 24 classtransition opacity-0 group-hover:opacity-100 scale-50 group-hover:scale-100 text-white text-5xl data-astro-cid-iyiqi2sotrue data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> /div> div classw-full h-full overflow-hidden relative> div classtransition absolute inset-0 dark:bg-black/10 bg-opacity-50 pointer-events-none>/div> img src/_astro/aluona.BH82Ub3Y.jpg altCover Image of the Post styleobject-position: center loadinglazy decodingasync fetchpriorityauto width5824 height3264 classw-full h-full object-cover> /div> /a> /div> div classtransition border-t-1px border-dashed mx-6 border-black/10 dark:border-white/0.15 last:border-t-0 md:hidden data-astro-cid-iyiqi2so style--coverWidth: 28%;>/div> script>(function(){const entry {id:edgeone-worker.md,data:{title:edgeone加速worker,published:2025-07-29T00:00:00.000Z,draft:false,description:如何使用edgeone加速cf worker,image:../images/aluona.jpg,tags:cloudflare,edgeone,category:tech,lang:zh_CN,pinned:false,prevTitle:,prevSlug:,nextTitle:fuwari接入评论功能,nextSlug:comment},body:有人问:主包主包cloudflare worker访问速度太慢了,有没有更强势的访问速度呢?\n\n有的兄弟,有的\n\n去 edgeone(https://edgeone.ai/zh/get-free-plan) 拿下不要钱的计划,添加你的域名,验证所有权,这步如果不会请退出\n\n回到我们的cloudflare,选择你想加速的worker,添加自定义域,**选择路由**,选择你要加速的根域名,在你想要加速的子域+eo(方便区分),如我要加速www.91sssvip.top,就填wwweo.91sssvip.top/\\*,在去cloudflare添加dns解析A记录随便指向一个IP,但**一定要开小黄云**,保存回到edgeone\n\n添加加速域名,我就填www,v6随便,我个人选择关闭,源站就写刚刚路由的域名协议https即可,**回源Host头一定要选使用源站域名**,最后保存就好啦\n\nEND,filePath:src/content/posts/edgeone-worker.md,digest:b9ade76e24673904,rendered:{html:p>有人问:主包主包cloudflare worker访问速度太慢了,有没有更强势的访问速度呢?/p>\np>有的兄弟,有的/p>\np>去 a href\https://edgeone.ai/zh/get-free-plan\>edgeone/a> 拿下不要钱的计划,添加你的域名,验证所有权,这步如果不会请退出/p>\np>回到我们的cloudflare,选择你想加速的worker,添加自定义域,strong>选择路由/strong>,选择你要加速的根域名,在你想要加速的子域+eo(方便区分),如我要加速www.91sssvip.top,就填wwweo.91sssvip.top/*,在去cloudflare添加dns解析A记录随便指向一个IP,但strong>一定要开小黄云/strong>,保存回到edgeone/p>\np>添加加速域名,我就填www,v6随便,我个人选择关闭,源站就写刚刚路由的域名协议https即可,strong>回源Host头一定要选使用源站域名/strong>,最后保存就好啦/p>\np>END/p>,metadata:{headings:,localImagePaths:,remoteImagePaths:,frontmatter:{title:edgeone加速worker,published:2025-07-29T00:00:00.000Z,description:如何使用edgeone加速cf worker,image:../images/aluona.jpg,tags:cloudflare,edgeone,category:tech,draft:false,lang:zh_CN,minutes:1,words:209,excerpt:有人问:主包主包cloudflare worker访问速度太慢了,有没有更强势的访问速度呢?},imagePaths:}},collection:posts,slug:edgeone-worker};const umamiConfig {enable:true,baseUrl:https://cloud.umami.is,shareId:DMfBtCxd4Y1VOCMA,region:us,timezone:Asia/Shanghai};const unavailableText 统计不可用。请检查是否屏蔽了Umami域名,如AdGuard和AdBlock等插件;const viewsText 浏览;const visitsText 访客; // 客户端统计文案生成函数 function generateStatsText(pageViews, visits) { return `${viewsText} ${pageViews} · ${visitsText} ${visits}`; } // 获取文章浏览量统计 async function fetchPostCardViews(slug) { if (!umamiConfig.enable) { return; } try { // 调用全局工具获取 Umami 分享数据 const { websiteId, token } await getUmamiShareData(umamiConfig.baseUrl, umamiConfig.shareId, umamiConfig.region); // 第二步:获取统计数据 const currentTimestamp Date.now(); const params new URLSearchParams({ startAt: 0, endAt: currentTimestamp.toString(), unit: hour, timezone: umamiConfig.timezone, path: `eq./posts/${slug}/`, compare: false }); const statsUrl `${umamiConfig.baseUrl}/analytics/${umamiConfig.region}/api/websites/${websiteId}/stats?${params.toString()}`; const statsResponse await fetch(statsUrl, { headers: { x-umami-share-token: token } }); if (statsResponse.status 401) { clearUmamiShareCache(); return await fetchPostCardViews(slug); } if (!statsResponse.ok) { throw new Error(获取统计数据失败); } const statsData await statsResponse.json(); const pageViews statsData.pageviews || 0; const visits statsData.visitors || 0; const displayElement document.getElementById(`page-views-${slug}`); if (displayElement) { displayElement.textContent generateStatsText(pageViews, visits); } } catch (error) { console.error(Error fetching page views for, slug, :, error); const displayElement document.getElementById(`page-views-${slug}`); if (displayElement) { displayElement.textContent unavailableText; } } } // 页面加载完成后获取统计数据 function initPostCardStats() { const slug entry.slug; if (slug) { fetchPostCardViews(slug); } } if (document.readyState loading) { document.addEventListener(DOMContentLoaded, initPostCardStats); } else { initPostCardStats(); }})();/script> /div> div classmx-auto onload-animation flex flex-row gap-3 justify-center styleanimation-delay: calc(var(--content-delay) + 350ms)> a href classbtn-card overflow-hidden rounded-lg text-var(--primary) w-11 h-11 disabled> svg width1em height1em classtext-1.75rem data-iconmaterial-symbols:chevron-left-rounded> symbol idai:material-symbols:chevron-left-rounded viewBox0 0 24 24>path fillcurrentColor dm10.8 12l3.9 3.9q.275.275.275.7t-.275.7t-.7.275t-.7-.275l-4.6-4.6q-.15-.15-.212-.325T8.425 12t.063-.375t.212-.325l4.6-4.6q.275-.275.7-.275t.7.275t.275.7t-.275.7z/>/symbol>use href#ai:material-symbols:chevron-left-rounded>/use> /svg> /a> div classbg-var(--card-bg) flex flex-row rounded-lg items-center text-neutral-700 dark:text-neutral-300 font-bold> div classh-11 w-11 rounded-lg bg-var(--primary) flex items-center justify-center font-bold text-white dark:text-black/70> 1 /div> /div> a href classbtn-card overflow-hidden rounded-lg text-var(--primary) w-11 h-11 disabled> svg width1em height1em viewBox0 0 24 24 classtext-1.75rem data-iconmaterial-symbols:chevron-right-rounded> use href#ai:material-symbols:chevron-right-rounded>/use> /svg> /a> /div> div classfooter col-span-2 onload-animation hidden lg:block> !--div classborder-t border-var(--primary) mx-16 border-dashed py-8 max-w-var(--page-width) flex flex-col items-center justify-center px-6>-->div classtransition border-t border-black/10 dark:border-white/15 my-10 border-dashed mx-32>/div> !--div classtransition bg-oklch(92%_0.01_var(--hue)) dark:bg-black rounded-2xl py-8 mt-4 mb-8 flex flex-col items-center justify-center px-6>--> div classtransition border-dashed border-oklch(85%_0.01_var(--hue)) dark:border-white/15 rounded-2xl mb-12 flex flex-col items-center justify-center px-6> div classtransition text-50 text-sm text-center>© span idcopyright-year>2025/span> 星辰旅人. All Rights Reserved. /a classtransition link text-var(--primary) font-medium target_blank href/rss.xml>RSS/a> /a classtransition link text-var(--primary) font-medium target_blank href/sitemap-index.xml>Sitemap/a>br>Powered bya classtransition link text-var(--primary) font-medium target_blank hrefhttps://astro.build>Astro/a> &a classtransition link text-var(--primary) font-medium target_blank hrefhttps://github.com/saicaca/fuwari>Fuwari/a> /div> /div> div styledisplay: flex; justify-content: center;> a hrefhttps://hopedomain.com/zh/age/mcxclr.top target_blank> img srchttps://hopedomain.com/api/badge/domain-age/mcxclr.top?themeblue&langzh alt域名年龄> /a> /div> div styletext-align: center;> a hrefhttps://ipw.cn/ipv6webcheck/?siteblog.mcxclr.top title本站支持IPv6访问 target_blank>img styledisplay:inline-block;vertical-align:middle alt本站支持IPv6访问 srchttps://static.ipw.cn/icon/ipv6-s1.svg>/a> /div> div styletext-align: center;> a hrefhttps://icp.gov.moe/?keyword20252072 target_blank>萌ICP备20252072号/a> a hrefhttps://icp.wudu.ltd/id.php?keyword07201314 target_blank>雾ICP备07201314号/a> /div> div styletext-align: center;> a hrefhttps://icp.we2050.com/id.php?keyword20250720 target_blank>团ICP备20250720号/a> a hrefhttps://icp.redcha.cn/beian/ICP-2025080040.html title茶ICP备2025080040号 target_blank>茶ICP备2025080040号/a> /div> /div> /div> /main> div classfooter col-span-2 onload-animation block lg:hidden> !--div classborder-t border-var(--primary) mx-16 border-dashed py-8 max-w-var(--page-width) flex flex-col items-center justify-center px-6>-->div classtransition border-t border-black/10 dark:border-white/15 my-10 border-dashed mx-32>/div> !--div classtransition bg-oklch(92%_0.01_var(--hue)) dark:bg-black rounded-2xl py-8 mt-4 mb-8 flex flex-col items-center justify-center px-6>--> div classtransition border-dashed border-oklch(85%_0.01_var(--hue)) dark:border-white/15 rounded-2xl mb-12 flex flex-col items-center justify-center px-6> div classtransition text-50 text-sm text-center>© span idcopyright-year>2025/span> 星辰旅人. All Rights Reserved. /a classtransition link text-var(--primary) font-medium target_blank href/rss.xml>RSS/a> /a classtransition link text-var(--primary) font-medium target_blank href/sitemap-index.xml>Sitemap/a>br>Powered bya classtransition link text-var(--primary) font-medium target_blank hrefhttps://astro.build>Astro/a> &a classtransition link text-var(--primary) font-medium target_blank hrefhttps://github.com/saicaca/fuwari>Fuwari/a> /div> /div> div styledisplay: flex; justify-content: center;> a hrefhttps://hopedomain.com/zh/age/mcxclr.top target_blank> img srchttps://hopedomain.com/api/badge/domain-age/mcxclr.top?themeblue&langzh alt域名年龄> /a> /div> div styletext-align: center;> a hrefhttps://ipw.cn/ipv6webcheck/?siteblog.mcxclr.top title本站支持IPv6访问 target_blank>img styledisplay:inline-block;vertical-align:middle alt本站支持IPv6访问 srchttps://static.ipw.cn/icon/ipv6-s1.svg>/a> /div> div styletext-align: center;> a hrefhttps://icp.gov.moe/?keyword20252072 target_blank>萌ICP备20252072号/a> a hrefhttps://icp.wudu.ltd/id.php?keyword07201314 target_blank>雾ICP备07201314号/a> /div> div styletext-align: center;> a hrefhttps://icp.we2050.com/id.php?keyword20250720 target_blank>团ICP备20250720号/a> a hrefhttps://icp.redcha.cn/beian/ICP-2025080040.html title茶ICP备2025080040号 target_blank>茶ICP备2025080040号/a> /div> /div> /div> !-- There cant be a filter on parent element, or it will break `fixed` -->div classback-to-top-wrapper hidden lg:block data-astro-cid-eymb5ayk> div idback-to-top-btn classback-to-top-btn hide flex items-center rounded-2xl overflow-hidden transition onclickbackToTop() data-astro-cid-eymb5ayk> button aria-labelBack to Top classbtn-card h-3.75rem w-3.75rem data-astro-cid-eymb5ayk> svg width1em height1em classmx-auto data-astro-cid-eymb5ayktrue data-iconmaterial-symbols:keyboard-arrow-up-rounded> symbol idai:material-symbols:keyboard-arrow-up-rounded viewBox0 0 24 24>path fillcurrentColor dm12 10.8l-3.9 3.9q-.275.275-.7.275t-.7-.275t-.275-.7t.275-.7l4.6-4.6q.3-.3.7-.3t.7.3l4.6 4.6q.275.275.275.7t-.275.7t-.7.275t-.7-.275z/>/symbol>use href#ai:material-symbols:keyboard-arrow-up-rounded>/use> /svg> /button> /div> /div> script>function backToTop() { window.scroll({ top: 0, behavior: smooth });}/script> /div> /div> div classabsolute w-full z-0 hidden 2xl:block> div classrelative max-w-var(--page-width) mx-auto> !-- TOC component --> div idtoc-wrapper classhidden lg:block transition absolute top-0 -right-var(--toc-width) w-var(--toc-width) items-center toc-hide> div idtoc-inner-wrapper classfixed top-14 w-var(--toc-width) h-calc(100vh_-_20rem) overflow-y-scroll overflow-x-hidden hide-scrollbar> div idtoc classw-full h-full transition-swup-fade > div classh-8 w-full>/div> script typemodule>class l extends HTMLElement{tocElnull;visibleClassvisible;observer;anchorNavTargetnull;headingIdxMapnew Map;headings;sections;tocEntries;active;activeIndicatornull;constructor(){super(),this.observernew IntersectionObserver(this.markVisibleSection,{threshold:0})}markVisibleSectiont>{t.forEach(e>{const ie.target.children0?.getAttribute(id),si?this.headingIdxMap.get(i):void 0;s!null&&(this.activese.isIntersecting),e.isIntersecting&&this.anchorNavTargete.target.firstChild&&(this.anchorNavTargetnull)}),this.active.includes(!0)||this.fallback(),this.update()};toggleActiveHeading()>{let tthis.active.length-1,ethis.active.length-1,i0;for(;t>0&&!this.activet;)this.tocEntriest.classList.remove(this.visibleClass),t--;for(;t>0&&this.activet;)this.tocEntriest.classList.add(this.visibleClass),eMath.min(e,t),iMath.max(i,t),t--;for(;t>0;)this.tocEntriest.classList.remove(this.visibleClass),t--;let sthis.tocEl?.getBoundingClientRect().top||0,nthis.tocEl?.scrollTop||0,othis.tocEntriese.getBoundingClientRect().top-s+n,cthis.tocEntriesi.getBoundingClientRect().bottom-s+n;this.activeIndicator?.setAttribute(style,`top: ${o}px; height: ${c-o}px`)};scrollToActiveHeading()>{if(this.anchorNavTarget||!this.tocEl)return;const tdocument.querySelectorAll(`#toc .${this.visibleClass}`);if(!t.length)return;const et0,itt.length-1,sthis.tocEl.clientHeight;let n;i.getBoundingClientRect().bottom-e.getBoundingClientRect().top.9*s?ne.offsetTop-32:ni.offsetTop-s*.8,this.tocEl.scrollTo({top:n,left:0,behavior:smooth})};update()>{requestAnimationFrame(()>{this.toggleActiveHeading(),this.scrollToActiveHeading()})};fallback()>{if(this.sections.length)for(let t0;tthis.sections.length;t++){let ethis.sectionst.getBoundingClientRect().top,ithis.sectionst.getBoundingClientRect().bottom;if(this.isInRange(e,0,window.innerHeight)||this.isInRange(i,0,window.innerHeight)||e0&&i>window.innerHeight)this.markActiveHeading(t);else if(e>window.innerHeight)break}};markActiveHeadingt>{this.activet!0};handleAnchorClickt>{const et.composedPath().find(i>i instanceof HTMLAnchorElement);if(e){const idecodeURIComponent(e.hash?.substring(1)),sthis.headingIdxMap.get(i);s!void 0?this.anchorNavTargetthis.headingss:this.anchorNavTargetnull}};isInRange(t,e,i){return et&&ti}connectedCallback(){const tdocument.querySelector(.prose);t?t.addEventListener(animationend,()>{this.init()},{once:!0}):console.debug(Animation element not found)}init(){if(this.tocEldocument.getElementById(toc-inner-wrapper),!!this.tocEl&&(this.tocEl.addEventListener(click,this.handleAnchorClick,{capture:!0}),this.activeIndicatordocument.getElementById(active-indicator),this.tocEntriesArray.from(document.querySelectorAll(#toc ahref^#)),this.tocEntries.length!0)){this.sectionsnew Array(this.tocEntries.length),this.headingsnew Array(this.tocEntries.length);for(let t0;tthis.tocEntries.length;t++){const edecodeURIComponent(this.tocEntriest.hash?.substring(1)),idocument.getElementById(e),si?.parentElement;i instanceof HTMLElement&&s instanceof HTMLElement&&(this.headingsti,this.sectionsts,this.headingIdxMap.set(e,t))}this.activenew Array(this.tocEntries.length).fill(!1),this.sections.forEach(t>this.observer.observe(t)),this.fallback(),this.update()}}disconnectedCallback(){this.sections.forEach(t>this.observer.unobserve(t)),this.observer.disconnect(),this.tocEl?.removeEventListener(click,this.handleAnchorClick)}}customElements.get(table-of-contents)||customElements.define(table-of-contents,l);/script> div classh-8 w-full>/div> /div> /div> /div> !-- #toc needs to exist for Swup to work normally --> /div> /div> !-- increase the page height during page transition to prevent the scrolling animation from jumping --> div idpage-height-extend classhidden h-300vh data-astro-cid-sckkx6r4 style--bannerOffset: 15vh;--banner-height-home: 65vh;--banner-height: 35vh;--configHue: 250;--page-width: 75rem;>/div> script typemodule src/_astro/Layout.astro_astro_type_script_index_0_lang.DAHrxWCB.js>/script> script typemodule src/_astro/Layout.astro_astro_type_script_index_1_lang.DFtXWr46.js>/script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]