@xingwangzhe/stalux 1.57.0 → 1.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,200 @@
1
+ /**
2
+ * The three correctness guards `@swup/astro` cannot express as options.
3
+ *
4
+ * `@swup/astro` builds and owns the Swup instance, so the theme attaches these
5
+ * as hooks on `window.swup` instead of writing its own `new Swup({...})`:
6
+ *
7
+ * 1. Page scripts run once per session (analytics SDKs must not be replayed)
8
+ * but new pages must still boot their own modules.
9
+ * 2. A superseded visit may be revived by swup's post-abort state reset and
10
+ * would then replace the page the reader is already looking at.
11
+ * 3. The head plugin keeps old stylesheets readable while the incoming sheet
12
+ * loads; whoever put them there has to remove the ones the new page does
13
+ * not use, or a long session grows the head without bound.
14
+ */
15
+ import type Swup from "swup";
16
+ import type { Visit } from "swup";
17
+ import { getRouteKind } from "../utils/public-routes";
18
+ import { installBackToTop } from "./back-to-top";
19
+ import "./navigation-client";
20
+ import { prepareNavigationFont } from "./navigation-font";
21
+ import { prepareNavigationScripts } from "./navigation-scripts";
22
+ import { hydrateShells, markRetainedShells } from "./shell-hydration";
23
+
24
+ const MAIN = "#swup-main";
25
+ const MAX_CACHED_PAGES = 32;
26
+
27
+ /** Theme-authored styles for the page on screen, and the ones it does not share. */
28
+ let authoredStyles: Element[] = [];
29
+ let obsoleteStyles: Element[] = [];
30
+
31
+ const runners = new WeakMap<Visit, () => Promise<void>>();
32
+ const scripts = new WeakMap<Visit, Promise<void>>();
33
+ const controllers = new WeakMap<Visit, AbortController>();
34
+
35
+ let installed = false;
36
+
37
+ /**
38
+ * Swup marks a superseded visit aborted, but its awaited `visit:start` chain
39
+ * still resumes and resets the state to `started`, reviving it. Aborting again
40
+ * at the transition boundary stops the rest of its chain: every hook handler
41
+ * and the default renderer are skipped for a done visit.
42
+ */
43
+ function abortSuperseded(swup: Swup, visit: Visit): void {
44
+ if (visit !== swup.visit) visit.abort();
45
+ }
46
+
47
+ function abortScripts(visit: Visit): void {
48
+ controllers.get(visit)?.abort();
49
+ }
50
+
51
+ function setRoute(visit: Visit): void {
52
+ const route = visit.to.route ?? getRouteKind(visit.to.url);
53
+ document.documentElement.dataset.staluxRoute = route;
54
+ document.querySelector(MAIN)?.setAttribute("data-stalux-route", route);
55
+ }
56
+
57
+ /** Capture what belongs to the outgoing page while it is still on screen. */
58
+ async function prepare(visit: Visit): Promise<void> {
59
+ const next = visit.to.document;
60
+ if (!next) return;
61
+ markRetainedShells();
62
+ const incoming = [...next.head.querySelectorAll("style,link[rel=stylesheet]")];
63
+ obsoleteStyles = authoredStyles.filter(
64
+ (element) => !incoming.some((other) => element.isEqualNode(other)),
65
+ );
66
+ const controller = new AbortController();
67
+ controllers.set(visit, controller);
68
+ // The destination page's body font gets a bounded head start so the first
69
+ // painted frame is already in the right face; a slow font never blocks.
70
+ await prepareNavigationFont(next, controller.signal);
71
+ // Resolved against the target URL: the parsed document has no usable base.
72
+ const baseUrl = new URL(visit.to.url, window.location.origin).href;
73
+ const run = prepareNavigationScripts(next, { baseUrl });
74
+ runners.set(visit, () => {
75
+ const started = run(controller.signal);
76
+ scripts.set(visit, started);
77
+ return started;
78
+ });
79
+ }
80
+
81
+ /** Bring the incoming page's own content and assets online. */
82
+ function settle(visit: Visit): void {
83
+ const next = visit.to.document;
84
+ // A link navigation always lands at the top. Doing it here, before
85
+ // `astro:after-swap` and before any page script runs, keeps every later
86
+ // measurement (shell slots, list reveals) on the final scroll position
87
+ // instead of the one the outgoing page left behind. History entries and
88
+ // hash targets keep whatever position the browser restores.
89
+ if (
90
+ !(visit.history.popstate || visit.to.hash) &&
91
+ (window.scrollY !== 0 || window.scrollX !== 0)
92
+ ) {
93
+ window.scrollTo({ top: 0, left: 0, behavior: "instant" });
94
+ }
95
+ // Kept shells take the incoming lists before any page module mounts.
96
+ hydrateShells(next);
97
+ for (const element of obsoleteStyles) element.remove();
98
+ obsoleteStyles = [];
99
+ // Only styles the incoming page also has stay tracked: anything a live SDK
100
+ // injected is not authored by the theme and must never be pruned.
101
+ const incoming = [...(next?.head.querySelectorAll("style,link[rel=stylesheet]") ?? [])];
102
+ authoredStyles = [...document.head.querySelectorAll("style,link[rel=stylesheet]")].filter(
103
+ (element) => incoming.some((other) => element.isEqualNode(other)),
104
+ );
105
+ setRoute(visit);
106
+ // `@swup/astro` always turns on the route-name plugin's `paths` classes
107
+ // (`from-*` / `to-*` on <html>) when routes are configured, and the plugin
108
+ // only ever removes `from-*`. Clearing both here keeps the document element
109
+ // from collecting one `to-*` class per visited page.
110
+ for (const name of [...document.documentElement.classList]) {
111
+ if (name.startsWith("to-") || name.startsWith("from-")) {
112
+ document.documentElement.classList.remove(name);
113
+ }
114
+ }
115
+ runners.get(visit)?.();
116
+ }
117
+
118
+ function install(swup: Swup): void {
119
+ if (installed) return;
120
+ installed = true;
121
+ authoredStyles = [...document.head.querySelectorAll("style,link[rel=stylesheet]")];
122
+ // The instance's first visit is created with an empty URL, so the current
123
+ // route comes from the document instead.
124
+ document.documentElement.dataset.staluxRoute = getRouteKind(window.location.pathname);
125
+ swup.hooks.before("visit:transition", (visit) => abortSuperseded(swup, visit), {
126
+ priority: -1000,
127
+ });
128
+ // `visit:transition` runs only after the target document has been fetched, so
129
+ // a burst of clicks queues several fetches and the oldest one wins the race:
130
+ // the reader ends up on the second link they clicked, not the last. Retire
131
+ // the previous visit the moment a newer one starts.
132
+ let previous: Visit | undefined;
133
+ swup.hooks.on("visit:start", (visit) => {
134
+ if (previous && previous !== visit && !previous.done) previous.abort();
135
+ previous = visit;
136
+ });
137
+ swup.hooks.on("visit:abort", abortScripts);
138
+ swup.hooks.on("visit:fail", abortScripts);
139
+ swup.hooks.before("content:replace", prepare, { priority: -1000 });
140
+ swup.hooks.on("content:replace", settle, { priority: -1000 });
141
+ // `@swup/astro` dispatches `astro:page-load` from its own `page:view`
142
+ // handler, so the page scripts have to be live before it runs.
143
+ swup.hooks.on(
144
+ "page:view",
145
+ async (visit) => {
146
+ await scripts.get(visit);
147
+ },
148
+ { priority: -1000 },
149
+ );
150
+ // The cache is a session-long map of parsed documents.
151
+ swup.hooks.on("cache:set", () => {
152
+ while (swup.cache.size > MAX_CACHED_PAGES) {
153
+ const oldest = swup.cache.all.keys().next();
154
+ if (oldest.done) break;
155
+ swup.cache.delete(oldest.value);
156
+ }
157
+ });
158
+
159
+ if (import.meta.env.DEV) {
160
+ void import("virtual:stalux-swup-debug")
161
+ .then(({ default: Debug }) => {
162
+ if (Debug) swup.use(new Debug());
163
+ })
164
+ .catch(() => {
165
+ // The debug plugin is an optional devDependency.
166
+ });
167
+ }
168
+ }
169
+
170
+ // Neither of these needs the Swup instance, and both are expected on the very
171
+ // first document: doing them here keeps them off the instance that
172
+ // `@swup/astro` may still be creating.
173
+ installBackToTop();
174
+ // Astro dispatches `astro:page-load` for the first document; the swup
175
+ // integration only dispatches it after a visit.
176
+ const initialLoad = () => document.dispatchEvent(new Event("astro:page-load"));
177
+ if (document.readyState === "loading") {
178
+ document.addEventListener("DOMContentLoaded", initialLoad, { once: true });
179
+ } else queueMicrotask(initialLoad);
180
+
181
+ /**
182
+ * Attach the guards to the instance `@swup/astro` created.
183
+ *
184
+ * The init script is injected by the swup integration and this module by the
185
+ * theme's own, so the evaluation order is not guaranteed. If the instance is
186
+ * not there yet, the first hook event swup dispatches installs the guards.
187
+ */
188
+ export function installRouteGuards(): void {
189
+ if (window.swup) {
190
+ install(window.swup);
191
+ return;
192
+ }
193
+ document.addEventListener(
194
+ "swup:any",
195
+ () => {
196
+ if (window.swup) install(window.swup);
197
+ },
198
+ { once: true },
199
+ );
200
+ }
@@ -28,4 +28,19 @@ declare module "swup" {
28
28
  */
29
29
  abort(): void;
30
30
  }
31
+ /**
32
+ * Added by `@swup/route-name-plugin`, which `@swup/astro` instantiates from
33
+ * its own package. The theme never imports the plugin, so its augmentation
34
+ * has to be restored here for `visit.to.route` to typecheck.
35
+ */
36
+ interface VisitTo {
37
+ route?: string;
38
+ }
39
+ interface Swup {
40
+ /**
41
+ * Added by `@swup/preload-plugin`, enabled through `@swup/astro`; used by
42
+ * `route-prefetch.ts` to warm the main navigation routes.
43
+ */
44
+ preload?: (url: string, options?: { priority?: boolean }) => Promise<unknown>;
45
+ }
31
46
  }
@@ -149,7 +149,6 @@
149
149
 
150
150
  /* 卡片和标签颜色 Token(可在这里统一调整主题色/透明度) */
151
151
  --card-bg: var(--surface-glass);
152
- --card-border: rgb(255 255 255 / 0.1);
153
152
  --card-box-shadow: 0 10px 24px rgb(0 0 0 / 0.08);
154
153
  --card-box-shadow-hover: 0 14px 28px rgb(0 0 0 / 0.12);
155
154
 
@@ -202,10 +201,6 @@
202
201
  --transition-medium: 0.2s ease;
203
202
  --transition-normal: 0.25s ease;
204
203
  --transition-slow: 0.3s ease;
205
- --transition-slower: 0.5s ease;
206
- --transition-slowest: 0.6s ease;
207
-
208
- --easing-bounce: cubic-bezier(0.175, 0.885, 0.32, 1.275);
209
204
 
210
205
  /* 常用间距值 */
211
206
  --space-2xs: 0.25rem;
@@ -231,9 +226,6 @@
231
226
  --shadow-sidebar:
232
227
  0 16px 20px -12px rgb(0 0 0 / 0.84), 10px 4px 16px -12px rgb(0 0 0 / 0.58),
233
228
  -10px 4px 16px -12px rgb(0 0 0 / 0.58);
234
- --shadow-raised-hover:
235
- 0 20px 24px -13px rgb(0 0 0 / 0.9), 12px 5px 18px -13px rgb(0 0 0 / 0.68),
236
- -12px 5px 18px -13px rgb(0 0 0 / 0.68);
237
229
  --shadow-dark: rgb(0 0 0 / 0.753);
238
230
 
239
231
  /* 语义化颜色 */
@@ -1,2 +1,2 @@
1
- @layer theme,base;@layer components{.stalux-prose{font-family:var(--font-body), "Noto Sans SC", "Noto Sans CJK SC", system-ui, -apple-system, sans-serif;font-size:var(--font-size-base);color:var(--white-85p);text-rendering:optimizelegibility;line-height:1.75}.stalux-prose h1,.stalux-prose h2,.stalux-prose h3,.stalux-prose h4,.stalux-prose h5,.stalux-prose h6{color:var(--white-full);margin-top:var(--space-xl);margin-bottom:var(--space-md);font-weight:600;line-height:1.3}.stalux-prose h1{margin-top:2.5rem;margin-bottom:var(--space-lg);border-bottom:3px solid var(--accent-50p);padding-bottom:.6rem;font-size:2.6rem;font-weight:700;line-height:1.25}.stalux-prose h2{border-bottom:2px solid var(--accent-30p);margin-top:2.5rem;padding-bottom:.4rem;font-size:2rem;font-weight:650}.stalux-prose h3{color:var(--white-95p);margin-top:2rem;font-size:1.5rem;line-height:1.4}.stalux-prose h4{color:var(--white-90p);margin-top:1.5rem;margin-bottom:.6rem;font-size:1.25rem;line-height:1.45}.stalux-prose h5{color:var(--white-90p);margin-top:1.5rem;margin-bottom:.5rem;font-size:1.1rem;line-height:1.5}.stalux-prose h6{color:var(--white-80p);margin-top:1.5rem;margin-bottom:.5rem;font-size:1rem;line-height:1.5}.stalux-prose p{margin:0 0 var(--space-lg);line-height:1.75}.stalux-prose .stalux-pagination-content{line-height:inherit;margin:0}.stalux-prose strong{color:#ffd966;font-weight:600}.stalux-prose em{color:var(--white-85p);font-style:italic}.stalux-prose strong em,.stalux-prose em strong{color:#ffd966}.stalux-prose del{color:var(--white-60p)}.stalux-prose mark{color:inherit;background-color:#ffd96640;border-radius:2px;padding:.1em .2em}.stalux-prose kbd{font-family:var(--font-code), "JetBrains Mono", "Fira Code", "Consolas", "Courier New", monospace;background-color:var(--white-10p);border:1px solid var(--white-20p);color:var(--white-85p);border-radius:4px;padding:.15em .4em;font-size:.85em}.stalux-prose sup,.stalux-prose sub{font-size:.8em}.stalux-prose a{color:var(--accent-80p);text-underline-offset:.2em;transition:color var(--transition-fast), text-decoration-color var(--transition-fast);overflow-wrap:anywhere;text-decoration-line:underline;text-decoration-color:#0000;text-decoration-thickness:2px}.stalux-prose a:focus-visible{color:var(--accent-90p);text-decoration-color:var(--accent-60p)}@media (hover:hover) and (pointer:fine){.stalux-prose a:hover{color:var(--accent-90p);text-decoration-color:var(--accent-60p)}}.stalux-prose code{font-family:var(--font-code), "JetBrains Mono", "Fira Code", "Consolas", "Courier New", monospace;color:#ff92d0;background-color:#ff79c626;border:1px solid #ff79c640;border-radius:4px;padding:.2em .4em;font-size:.88em}.stalux-prose pre{background:var(--black-30p);color:var(--white-85p);border-left:4px solid var(--accent-60p);margin:var(--space-xl) 0;font-size:.92em;line-height:1.65;font-family:var(--font-code), "JetBrains Mono", "Fira Code", "Consolas", "Courier New", monospace;box-shadow:var(--shadow-md);border-radius:8px;padding:1.2rem 1.5rem;overflow-x:auto}.stalux-prose pre code{color:inherit;font-size:inherit;background:0 0;border:none;padding:0;font-family:inherit}.expressive-code pre,.expressive-code code{all:revert}.stalux-prose ul,.stalux-prose ol{margin:0 0 var(--space-lg);padding-left:1.75rem}.stalux-prose li{color:var(--white-85p);margin:.4rem 0;line-height:1.75}.stalux-prose ul li{list-style:outside}.stalux-prose ul li ul li{list-style:circle}.stalux-prose ul li ul li ul li{list-style:square}.stalux-prose ol li{list-style:decimal}.stalux-prose ol li ol li{list-style:lower-alpha}.stalux-prose li>ul,.stalux-prose li>ol{margin-top:.3rem;margin-bottom:.3rem}.stalux-prose blockquote{margin:var(--space-xl) 0;border-left:4px solid var(--accent-60p);background:var(--surface-glass);border-top:1px solid var(--white-10p);border-right:1px solid var(--white-10p);border-bottom:1px solid var(--white-10p);color:var(--white-85p);border-radius:12px;padding:1rem 1.5rem;box-shadow:0 4px 16px #0002}.stalux-prose blockquote p{margin:0;line-height:1.7}.stalux-prose blockquote p+p{margin-top:.8rem}.stalux-prose blockquote strong{color:#ffd966}.stalux-prose blockquote code{font-size:.85em}.stalux-prose table{border-collapse:collapse;width:100%;margin:var(--space-xl) 0;box-shadow:var(--shadow-md);border-radius:8px;display:block;overflow:auto hidden}.stalux-prose th,.stalux-prose td{text-align:left;border-bottom:1px solid var(--white-10p);padding:.75rem 1rem;line-height:1.6}.stalux-prose th{white-space:nowrap;background:var(--accent-30p);color:var(--white-full);font-size:.95em;font-weight:600}.stalux-prose td{color:var(--white-85p)}.stalux-prose tr:nth-child(2n) td{background-color:var(--white-05p)}@media (hover:hover) and (pointer:fine){.stalux-prose tr:hover td{background-color:var(--black-10p)}}.stalux-prose table code{font-size:.85em}.stalux-prose img{max-width:100%;height:auto;margin:var(--space-xl) auto;box-shadow:var(--shadow-lg);transition:transform var(--transition-normal), box-shadow var(--transition-normal);border-radius:8px;display:block}@media (hover:hover) and (pointer:fine){.stalux-prose img:hover{box-shadow:var(--shadow-xl);transform:none}}.stalux-prose embed,.stalux-prose video{max-width:100%;height:auto;margin:var(--space-xl) auto;border-radius:8px;display:block}.stalux-prose hr{margin:var(--space-2xl) 0;background:linear-gradient(90deg, transparent, var(--white-15p) 20%, var(--accent-40p) 50%, var(--white-15p) 80%, transparent);border:none;height:1.5px}.stalux-prose details{margin:var(--space-lg) 0;background-color:var(--white-05p);border:1px solid var(--white-10p);transition:border-color var(--transition-fast);border-radius:6px;padding:.8rem 1rem}@media (hover:hover) and (pointer:fine){.stalux-prose details:hover{border-color:var(--white-20p)}}.stalux-prose summary{cursor:pointer;color:var(--white-90p);font-weight:600}.stalux-prose details[open] summary{border-bottom:1px solid var(--white-10p);margin-bottom:.8rem;padding-bottom:.6rem}.stalux-prose figure{text-align:center;margin:var(--space-xl) 0}.stalux-prose figcaption{color:var(--white-70p);margin-top:.5rem;font-size:.9em;font-style:italic}.stalux-prose figure[data-stalux-image]>figcaption{color:var(--muted-text);overflow-wrap:anywhere;font-size:.85rem;font-style:normal;line-height:1.6}.stalux-prose .footnotes{color:var(--white-75p);border-top:1px solid var(--white-15p);margin-top:var(--space-2xl);padding-top:var(--space-lg);font-size:.88em}.stalux-prose .footnotes ol{margin-left:1rem;padding-left:.5rem}.stalux-prose .footnotes li{margin:.5rem 0;line-height:1.6}.stalux-prose .footnotes a{font-size:.9em}@media (width<=1024px){.stalux-prose{font-size:1.05rem}.stalux-prose h1{font-size:2.2rem}.stalux-prose h2{font-size:1.8rem}.stalux-prose h3{font-size:1.35rem}.stalux-prose h4{font-size:1.15rem}.stalux-prose pre{padding:1rem 1.2rem;font-size:.88em}}@media (width<=768px){.stalux-prose{font-size:1rem;line-height:1.7}.stalux-prose h1{margin-top:1.5rem;font-size:1.8rem}.stalux-prose h2{margin-top:1.5rem;font-size:1.4rem}.stalux-prose h3{margin-top:1.25rem;font-size:1.2rem}.stalux-prose h4{margin-top:1rem;font-size:1.1rem}.stalux-prose h5{font-size:1rem}.stalux-prose h6{font-size:.95rem}.stalux-prose p{margin-bottom:var(--space-md)}.stalux-prose pre{margin:var(--space-lg) 0;border-left-width:3px;padding:.8rem 1rem;font-size:.82em}.stalux-prose table{font-size:.85rem}.stalux-prose th,.stalux-prose td{padding:.5rem .7rem}.stalux-prose blockquote{padding:.8rem 1rem;font-size:.9em}.stalux-prose ul,.stalux-prose ol{padding-left:1.5rem}}.stalux-prose,.stalux-prose>*,.stalux-prose div,.stalux-prose .expressive-code,.stalux-prose .expressive-code .frame{box-sizing:border-box;min-width:0;max-width:100%}.stalux-prose{overflow-wrap:anywhere}.stalux-prose a:after{content:none}.stalux-prose a{text-decoration-color:var(--accent-50p);text-decoration-thickness:1px}.stalux-prose a:has(img){text-decoration:none}.stalux-prose pre,.stalux-prose table,.stalux-prose .mermaid,.stalux-prose math{overscroll-behavior-x:contain;max-width:100%;overflow-x:auto}.stalux-prose pre,.stalux-prose pre code{overflow-wrap:normal;word-break:normal}.stalux-prose :is(img,video,iframe,embed,svg,canvas){max-width:100%}.stalux-prose :is(img,video,svg,canvas){height:auto}.stalux-prose iframe{margin:var(--space-xl) auto;border-radius:8px;display:block}.stalux-prose .mermaid svg{max-width:none}.stalux-prose canvas{box-sizing:border-box}.stalux-prose summary{overflow-wrap:anywhere}}@layer utilities;@font-face{font-family:Stalux Math Aux;src:url(/fonts/StaluxMathAux.woff2)format("woff2");font-weight:400;font-style:normal}@font-face{font-family:Latin Modern Math;src:url(/fonts/latinmodern-math.woff2)format("woff2");font-display:swap}math{font-size-adjust:none;text-indent:0;text-transform:none;letter-spacing:normal;word-wrap:normal;font-feature-settings:"dtls" off;font-style:normal;font-weight:400;line-height:normal;font-family:"Latin Modern Math", var(--font-body), math;direction:ltr}math *{border-color:currentColor}math.tml-display{width:100%;display:block}.mathscr{font-family:Stalux Math Aux,serif}mfrac>:nth-child(2),msqrt,mover>:first-child{math-shift:compact}.menclose{padding:.5ex 0;display:inline-block;position:relative}.tml-cancelto{background-color:currentColor;padding:.5ex 0;display:inline-block;position:absolute;top:0;left:0;-webkit-mask-image:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'><defs><marker id='a' markerHeight='5' markerUnits='strokeWidth' markerWidth='7' orient='auto' refX='7' refY='2.5'><path fill='black' d='m0 0 7 2.5L0 5z'/></marker></defs><line x2='100%25' y1='100%25' stroke='black' stroke-width='.06em' marker-end='url(%23a)' vector-effect='non-scaling-stroke'/></svg>");mask-image:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'><defs><marker id='a' markerHeight='5' markerUnits='strokeWidth' markerWidth='7' orient='auto' refX='7' refY='2.5'><path fill='black' d='m0 0 7 2.5L0 5z'/></marker></defs><line x2='100%25' y1='100%25' stroke='black' stroke-width='.06em' marker-end='url(%23a)' vector-effect='non-scaling-stroke'/></svg>");-webkit-mask-position:0 0;mask-position:0 0;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}@-moz-document url-prefix(){math{display:inline}math>mrow{padding:0}mtd,mtable.tml-small mtd{padding-top:0;padding-bottom:0}mtable.tml-jot mtd{padding-top:.2ex;padding-bottom:0}.tml-vec{transform:scale(.75)}.ff-narrow{width:0}.ff-nudge-left{margin-left:-.2em}.ff-squash mtd{height:0;display:block}}@supports not ((-moz-appearance:none)){mo.tml-prime{font-family:Stalux Math Aux,serif}.tml-sml-pad{padding-left:.05em}.tml-med-pad{padding-left:.1em}.tml-lrg-pad{padding-left:.15em}}@supports ((-webkit-backdrop-filter:blur(1px))){.wbk-acc{transform:translateY(.431em)}.wbk-sml{transform:translate(.07em)}.wbk-sml-acc{transform:translate(.07em,.431em)}.wbk-sml-vec{transform:scale(.75)translate(.07em)}.wbk-med{transform:translate(.14em)}.wbk-med-acc{transform:translate(.14em,.431em)}.wbk-med-vec{transform:scale(.75)translate(.14em)}.wbk-lrg{transform:translate(.21em)}.wbk-lrg-acc{transform:translate(.21em,.431em)}.wbk-lrg-vec{transform:scale(.75)translate(.21em)}}@supports (not ((-webkit-backdrop-filter:blur(1px)))) and (not ((-moz-appearance:none))){.chr-sml{transform:translate(.07em)}.chr-sml-vec{transform:scale(.75)translate(.07em)}.chr-med{transform:translate(.14em)}.chr-med-vec{transform:scale(.75)translate(.14em)}.chr-lrg{transform:translate(.21em)}.chr-lrg-vec{transform:scale(.75)translate(.21em)}.tml-shift-left{margin-left:-100%}menclose{padding:.5ex 0;position:relative}.tml-overline{border-top:.065em solid;padding:.1em 0 0}.tml-underline{border-bottom:.065em solid;padding:0 0 .1em}.tml-cancel{background-color:currentColor;width:100%;height:100%;display:inline-block;position:absolute;bottom:0;left:.5px}.upstrike{clip-path:polygon(.05em 100%,0 calc(100% - .05em),calc(100% - .05em) 0,100% .05em)}.downstrike{clip-path:polygon(0 .05em,.05em 0,100% calc(100% - .05em),calc(100% - .05em) 100%)}.sout{clip-path:polygon(0 calc(55% + .0333em),0 calc(55% - .0333em),100% calc(55% - .0333em),100% calc(55% + .0333em))}.tml-xcancel{clip-path:polygon(.05em 0,0 .05em,calc(50% - .05em) 50%,0 calc(100% - .05em),.05em 100%,50% calc(50% + .05em),calc(100% - .05em) 100%,100% calc(100% - .05em),calc(50% + .05em) 50%,100% .05em,calc(100% - .05em) 0%,50% calc(50% - .05em))}.longdiv-top{border-top:.067em solid;padding:.1em .2em .2em .433em}.longdiv-arc{clip-path:inset(0 0 0 .4em);box-sizing:border-box;border:.067em solid;border-radius:70%;width:.7em;position:absolute;top:0;bottom:.1em;left:-.4em;transform:translateY(-.067em)}.menclose{text-align:left;display:inline-block;position:relative}.phasor-bottom{border-bottom:.067em solid;padding:.2em .2em .1em .6em}.phasor-angle{aspect-ratio:.5;clip-path:polygon(.05em 100%,0 calc(100% - .05em),calc(100% - .05em) 0,100% .05em);background-color:currentColor;height:100%;display:inline-block;position:absolute;bottom:-.04em;left:.5px}.tml-fbox{border:1px solid;padding:3pt}.circle-pad{padding:.267em}.textcircle{border:.067em solid;border-radius:50%;position:absolute;inset:0}.actuarial{border-style:solid;border-width:.08em .08em 0 0;margin-right:.03889em;padding:.03889em .03889em 0}.tml-crooked-2{transform:scale(2,1.1)}.tml-crooked-3{transform:scale(3,1.3)}.tml-crooked-4{transform:scale(4,1.4)}.tml-right{text-align:-webkit-right}.tml-left{text-align:-webkit-left}}menclose{-webkit-print-color-adjust:exact;print-color-adjust:exact}.tml-right{text-align:right}.tml-left{text-align:left}.special-fraction{font-family:Times New Roman,Times,STIX TWO,Tinos,serif}math{flex-wrap:wrap;align-items:baseline;display:inline-flex}math>mrow{padding:.5ex 0}mtable.tml-jot mtd{padding-top:.7ex;padding-bottom:.7ex}mtable.tml-small mtd{padding-top:.35ex;padding-bottom:.35ex}.tml-shift-left{margin-left:-200%}.tml-eqn:before{counter-increment:tmlEqnNo;content:"(" counter(tmlEqnNo) ")"}body{counter-reset:tmlEqnNo}
1
+ @layer theme,base;@layer components{.stalux-prose{font-family:var(--font-body), "Noto Sans SC", "Noto Sans CJK SC", system-ui, -apple-system, sans-serif;font-size:var(--font-size-base);color:var(--white-85p);text-rendering:optimizelegibility;line-height:1.75}.stalux-prose h1,.stalux-prose h2,.stalux-prose h3,.stalux-prose h4,.stalux-prose h5,.stalux-prose h6{color:var(--white-full);margin-top:var(--space-xl);margin-bottom:var(--space-md);font-weight:600;line-height:1.3}.stalux-prose h1{margin-top:2.5rem;margin-bottom:var(--space-lg);border-bottom:3px solid var(--accent-50p);padding-bottom:.6rem;font-size:2.6rem;font-weight:700;line-height:1.25}.stalux-prose h2{border-bottom:2px solid var(--accent-30p);margin-top:2.5rem;padding-bottom:.4rem;font-size:2rem;font-weight:650}.stalux-prose h3{color:var(--white-95p);margin-top:2rem;font-size:1.5rem;line-height:1.4}.stalux-prose h4{color:var(--white-90p);margin-top:1.5rem;margin-bottom:.6rem;font-size:1.25rem;line-height:1.45}.stalux-prose h5{color:var(--white-90p);margin-top:1.5rem;margin-bottom:.5rem;font-size:1.1rem;line-height:1.5}.stalux-prose h6{color:var(--white-80p);margin-top:1.5rem;margin-bottom:.5rem;font-size:1rem;line-height:1.5}.stalux-prose p{margin:0 0 var(--space-lg);line-height:1.75}.stalux-prose .stalux-pagination-content{line-height:inherit;margin:0}.stalux-prose strong{color:#ffd966;font-weight:600}.stalux-prose em{color:var(--white-85p);font-style:italic}.stalux-prose strong em,.stalux-prose em strong{color:#ffd966}.stalux-prose del{color:var(--white-60p)}.stalux-prose mark{color:inherit;background-color:#ffd96640;border-radius:2px;padding:.1em .2em}.stalux-prose kbd{font-family:var(--font-code), "JetBrains Mono", "Fira Code", "Consolas", "Courier New", monospace;background-color:var(--white-10p);border:1px solid var(--white-20p);color:var(--white-85p);border-radius:4px;padding:.15em .4em;font-size:.85em}.stalux-prose sup,.stalux-prose sub{font-size:.8em}.stalux-prose a{color:var(--accent-80p);text-underline-offset:.2em;transition:color var(--transition-fast), text-decoration-color var(--transition-fast);overflow-wrap:anywhere;text-decoration-line:underline;text-decoration-color:#0000;text-decoration-thickness:2px}.stalux-prose a:focus-visible{color:var(--accent-90p);text-decoration-color:var(--accent-60p)}@media (hover:hover) and (pointer:fine){.stalux-prose a:hover{color:var(--accent-90p);text-decoration-color:var(--accent-60p)}}.stalux-prose code{font-family:var(--font-code), "JetBrains Mono", "Fira Code", "Consolas", "Courier New", monospace;color:#ff92d0;background-color:#ff79c626;border:1px solid #ff79c640;border-radius:4px;padding:.2em .4em;font-size:.88em}.stalux-prose pre{background:var(--black-30p);color:var(--white-85p);border-left:4px solid var(--accent-60p);margin:var(--space-xl) 0;font-size:.92em;line-height:1.65;font-family:var(--font-code), "JetBrains Mono", "Fira Code", "Consolas", "Courier New", monospace;box-shadow:var(--shadow-md);border-radius:8px;padding:1.2rem 1.5rem;overflow-x:auto}.stalux-prose pre code{color:inherit;font-size:inherit;background:0 0;border:none;padding:0;font-family:inherit}.expressive-code pre,.expressive-code code{all:revert}.stalux-prose ul,.stalux-prose ol{margin:0 0 var(--space-lg);padding-left:1.75rem}.stalux-prose li{color:var(--white-85p);margin:.4rem 0;line-height:1.75}.stalux-prose ul li{list-style:outside}.stalux-prose ul li ul li{list-style:circle}.stalux-prose ul li ul li ul li{list-style:square}.stalux-prose ol li{list-style:decimal}.stalux-prose ol li ol li{list-style:lower-alpha}.stalux-prose li>ul,.stalux-prose li>ol{margin-top:.3rem;margin-bottom:.3rem}.stalux-prose blockquote{margin:var(--space-xl) 0;border-left:4px solid var(--accent-60p);background:var(--surface-glass);border-top:1px solid var(--white-10p);border-right:1px solid var(--white-10p);border-bottom:1px solid var(--white-10p);color:var(--white-85p);border-radius:12px;padding:1rem 1.5rem;box-shadow:0 4px 16px #0002}.stalux-prose blockquote p{margin:0;line-height:1.7}.stalux-prose blockquote p+p{margin-top:.8rem}.stalux-prose blockquote strong{color:#ffd966}.stalux-prose blockquote code{font-size:.85em}.stalux-prose table{border-collapse:collapse;width:100%;margin:var(--space-xl) 0;box-shadow:var(--shadow-md);border-radius:8px;display:block;overflow:auto hidden}.stalux-prose th,.stalux-prose td{text-align:left;border-bottom:1px solid var(--white-10p);padding:.75rem 1rem;line-height:1.6}.stalux-prose th{white-space:nowrap;background:var(--accent-30p);color:var(--white-full);font-size:.95em;font-weight:600}.stalux-prose td{color:var(--white-85p)}.stalux-prose tr:nth-child(2n) td{background-color:var(--white-05p)}@media (hover:hover) and (pointer:fine){.stalux-prose tr:hover td{background-color:var(--black-10p)}}.stalux-prose table code{font-size:.85em}.stalux-prose img{max-width:100%;height:auto;margin:var(--space-xl) auto;box-shadow:var(--shadow-lg);transition:transform var(--transition-normal), box-shadow var(--transition-normal);border-radius:8px;display:block}@media (hover:hover) and (pointer:fine){.stalux-prose img:hover{box-shadow:var(--shadow-xl);transform:none}}.stalux-prose embed,.stalux-prose video{max-width:100%;height:auto;margin:var(--space-xl) auto;border-radius:8px;display:block}.stalux-prose hr{margin:var(--space-2xl) 0;background:linear-gradient(90deg, transparent, var(--white-15p) 20%, var(--accent-40p) 50%, var(--white-15p) 80%, transparent);border:none;height:1.5px}.stalux-prose details{margin:var(--space-lg) 0;background-color:var(--white-05p);border:1px solid var(--white-10p);transition:border-color var(--transition-fast);border-radius:6px;padding:.8rem 1rem}@media (hover:hover) and (pointer:fine){.stalux-prose details:hover{border-color:var(--white-20p)}}.stalux-prose summary{cursor:pointer;color:var(--white-90p);font-weight:600}.stalux-prose details[open] summary{border-bottom:1px solid var(--white-10p);margin-bottom:.8rem;padding-bottom:.6rem}.stalux-prose figure{text-align:center;margin:var(--space-xl) 0}.stalux-prose figcaption{color:var(--white-70p);margin-top:.5rem;font-size:.9em;font-style:italic}.stalux-prose figure[data-stalux-image]>figcaption{color:var(--muted-text);overflow-wrap:anywhere;font-size:.85rem;font-style:normal;line-height:1.6}.stalux-prose .footnotes{color:var(--white-75p);border-top:1px solid var(--white-15p);margin-top:var(--space-2xl);padding-top:var(--space-lg);font-size:.88em}.stalux-prose .footnotes ol{margin-left:1rem;padding-left:.5rem}.stalux-prose .footnotes li{margin:.5rem 0;line-height:1.6}.stalux-prose .footnotes a{font-size:.9em}@media (width<=1024px){.stalux-prose{font-size:1.05rem}.stalux-prose h1{font-size:2.2rem}.stalux-prose h2{font-size:1.8rem}.stalux-prose h3{font-size:1.35rem}.stalux-prose h4{font-size:1.15rem}.stalux-prose pre{padding:1rem 1.2rem;font-size:.88em}}@media (width<=768px){.stalux-prose{font-size:1rem;line-height:1.7}.stalux-prose h1{margin-top:1.5rem;font-size:1.8rem}.stalux-prose h2{margin-top:1.5rem;font-size:1.4rem}.stalux-prose h3{margin-top:1.25rem;font-size:1.2rem}.stalux-prose h4{margin-top:1rem;font-size:1.1rem}.stalux-prose h5{font-size:1rem}.stalux-prose h6{font-size:.95rem}.stalux-prose p{margin-bottom:var(--space-md)}.stalux-prose pre{margin:var(--space-lg) 0;border-left-width:3px;padding:.8rem 1rem;font-size:.82em}.stalux-prose table{font-size:.85rem}.stalux-prose th,.stalux-prose td{padding:.5rem .7rem}.stalux-prose blockquote{padding:.8rem 1rem;font-size:.9em}.stalux-prose ul,.stalux-prose ol{padding-left:1.5rem}}.stalux-prose,.stalux-prose>*,.stalux-prose div,.stalux-prose .expressive-code,.stalux-prose .expressive-code .frame{box-sizing:border-box;min-width:0;max-width:100%}.stalux-prose{overflow-wrap:anywhere}.stalux-prose a:after{content:none}.stalux-prose a{text-decoration-color:var(--accent-50p);text-decoration-thickness:1px}.stalux-prose a:has(img){text-decoration:none}.stalux-prose pre,.stalux-prose table,.stalux-prose .mermaid,.stalux-prose math{overscroll-behavior-x:contain;max-width:100%;overflow-x:auto}.stalux-prose pre,.stalux-prose pre code{overflow-wrap:normal;word-break:normal}.stalux-prose :is(img,video,iframe,embed,svg,canvas){max-width:100%}.stalux-prose :is(img,video,svg,canvas){height:auto}.stalux-prose iframe{margin:var(--space-xl) auto;border-radius:8px;display:block}.stalux-prose .mermaid svg{max-width:none}.stalux-prose canvas{box-sizing:border-box}.stalux-prose summary{overflow-wrap:anywhere}}@layer utilities;@font-face{font-family:Stalux Math Aux;src:url(/fonts/StaluxMathAux.woff2)format("woff2");font-weight:400;font-style:normal}@font-face{font-family:Latin Modern Math;src:url(/fonts/latinmodern-math.woff2)format("woff2");font-display:swap}math{font-size-adjust:none;text-indent:0;text-transform:none;letter-spacing:normal;word-wrap:normal;font-feature-settings:"dtls" off;font-style:normal;font-weight:400;line-height:normal;font-family:"Latin Modern Math", var(--font-body), math;direction:ltr}math *{border-color:currentColor}math.tml-display{width:100%;display:block}.mathscr{font-family:Stalux Math Aux,serif}mfrac>:nth-child(2),msqrt,mover>:first-child{math-shift:compact}.menclose{padding:.5ex 0;display:inline-block;position:relative}.tml-cancelto{background-color:currentColor;padding:.5ex 0;display:inline-block;position:absolute;top:0;left:0;-webkit-mask-image:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'><defs><marker id='a' markerHeight='5' markerUnits='strokeWidth' markerWidth='7' orient='auto' refX='7' refY='2.5'><path fill='black' d='m0 0 7 2.5L0 5z'/></marker></defs><line x2='100%25' y1='100%25' stroke='black' stroke-width='.06em' marker-end='url(%23a)' vector-effect='non-scaling-stroke'/></svg>");mask-image:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'><defs><marker id='a' markerHeight='5' markerUnits='strokeWidth' markerWidth='7' orient='auto' refX='7' refY='2.5'><path fill='black' d='m0 0 7 2.5L0 5z'/></marker></defs><line x2='100%25' y1='100%25' stroke='black' stroke-width='.06em' marker-end='url(%23a)' vector-effect='non-scaling-stroke'/></svg>");-webkit-mask-position:0 0;mask-position:0 0;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}@supports ((-moz-appearance:none)){math{display:inline}math>mrow{padding:0}mtd,mtable.tml-small mtd{padding-top:0;padding-bottom:0}mtable.tml-jot mtd{padding-top:.2ex;padding-bottom:0}.tml-vec{transform:scale(.75)}.ff-narrow{width:0}.ff-nudge-left{margin-left:-.2em}.ff-squash mtd{height:0;display:block}}@supports not ((-moz-appearance:none)){mo.tml-prime{font-family:Stalux Math Aux,serif}.tml-sml-pad{padding-left:.05em}.tml-med-pad{padding-left:.1em}.tml-lrg-pad{padding-left:.15em}}@supports ((-webkit-backdrop-filter:blur(1px))){.wbk-acc{transform:translateY(.431em)}.wbk-sml{transform:translate(.07em)}.wbk-sml-acc{transform:translate(.07em,.431em)}.wbk-sml-vec{transform:scale(.75)translate(.07em)}.wbk-med{transform:translate(.14em)}.wbk-med-acc{transform:translate(.14em,.431em)}.wbk-med-vec{transform:scale(.75)translate(.14em)}.wbk-lrg{transform:translate(.21em)}.wbk-lrg-acc{transform:translate(.21em,.431em)}.wbk-lrg-vec{transform:scale(.75)translate(.21em)}}@supports (not ((-webkit-backdrop-filter:blur(1px)))) and (not ((-moz-appearance:none))){.chr-sml{transform:translate(.07em)}.chr-sml-vec{transform:scale(.75)translate(.07em)}.chr-med{transform:translate(.14em)}.chr-med-vec{transform:scale(.75)translate(.14em)}.chr-lrg{transform:translate(.21em)}.chr-lrg-vec{transform:scale(.75)translate(.21em)}.tml-shift-left{margin-left:-100%}menclose{padding:.5ex 0;position:relative}.tml-overline{border-top:.065em solid;padding:.1em 0 0}.tml-underline{border-bottom:.065em solid;padding:0 0 .1em}.tml-cancel{background-color:currentColor;width:100%;height:100%;display:inline-block;position:absolute;bottom:0;left:.5px}.upstrike{clip-path:polygon(.05em 100%,0 calc(100% - .05em),calc(100% - .05em) 0,100% .05em)}.downstrike{clip-path:polygon(0 .05em,.05em 0,100% calc(100% - .05em),calc(100% - .05em) 100%)}.sout{clip-path:polygon(0 calc(55% + .0333em),0 calc(55% - .0333em),100% calc(55% - .0333em),100% calc(55% + .0333em))}.tml-xcancel{clip-path:polygon(.05em 0,0 .05em,calc(50% - .05em) 50%,0 calc(100% - .05em),.05em 100%,50% calc(50% + .05em),calc(100% - .05em) 100%,100% calc(100% - .05em),calc(50% + .05em) 50%,100% .05em,calc(100% - .05em) 0%,50% calc(50% - .05em))}.longdiv-top{border-top:.067em solid;padding:.1em .2em .2em .433em}.longdiv-arc{clip-path:inset(0 0 0 .4em);box-sizing:border-box;border:.067em solid;border-radius:70%;width:.7em;position:absolute;top:0;bottom:.1em;left:-.4em;transform:translateY(-.067em)}.menclose{text-align:left;display:inline-block;position:relative}.phasor-bottom{border-bottom:.067em solid;padding:.2em .2em .1em .6em}.phasor-angle{aspect-ratio:.5;clip-path:polygon(.05em 100%,0 calc(100% - .05em),calc(100% - .05em) 0,100% .05em);background-color:currentColor;height:100%;display:inline-block;position:absolute;bottom:-.04em;left:.5px}.tml-fbox{border:1px solid;padding:3pt}.circle-pad{padding:.267em}.textcircle{border:.067em solid;border-radius:50%;position:absolute;inset:0}.actuarial{border-style:solid;border-width:.08em .08em 0 0;margin-right:.03889em;padding:.03889em .03889em 0}.tml-crooked-2{transform:scale(2,1.1)}.tml-crooked-3{transform:scale(3,1.3)}.tml-crooked-4{transform:scale(4,1.4)}.tml-right{text-align:-webkit-right}.tml-left{text-align:-webkit-left}}menclose{-webkit-print-color-adjust:exact;print-color-adjust:exact}.tml-right{text-align:right}.tml-left{text-align:left}.special-fraction{font-family:Times New Roman,Times,STIX TWO,Tinos,serif}math{flex-wrap:wrap;align-items:baseline;display:inline-flex}math>mrow{padding:.5ex 0}mtable.tml-jot mtd{padding-top:.7ex;padding-bottom:.7ex}mtable.tml-small mtd{padding-top:.35ex;padding-bottom:.35ex}.tml-shift-left{margin-left:-200%}.tml-eqn:before{counter-increment:tmlEqnNo;content:"(" counter(tmlEqnNo) ")"}body{counter-reset:tmlEqnNo}
2
2
  /*$vite$:1*/
@@ -1,2 +1,2 @@
1
- .waline-comment-container{--waline-font-family:system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", "Noto Sans CJK SC", sans-serif;font-family:var(--waline-font-family)}.waline-comment-container :where(input,textarea,button,select){font-family:var(--waline-font-family)}.waline-comment-container :where(pre,code,kbd,samp){font-family:ui-monospace,Cascadia Code,Consolas,monospace}.waline-retry{border:1px solid var(--accent-50p);background:var(--white-05p);min-height:44px;color:inherit;cursor:pointer;border-radius:8px;padding:.6rem 1rem}.waline-retry:focus-visible{outline:2px solid var(--stalux-accent-color);outline-offset:3px}:root{--waline-accent-rgb:var(--stalux-accent-rgb)}.waline-comment-container{border-radius:12px;margin-top:3rem;margin-bottom:1rem;padding:2rem}.waline-comment-title{text-align:center;background:linear-gradient(90deg, var(--white-90p), rgb(var(--waline-accent-rgb) / .9));color:#0000;background-clip:text;margin:0 0 1.5rem;font-size:2rem}.wl-panel{background-color:#1111114d;border:1px solid #ffffff1a;border-radius:12px;margin-bottom:1.5rem;padding:1rem}.wl-editor,.wl-input{border-radius:8px;transition:background-color .2s,border-color .2s,color .2s;color:var(--white-90p)!important;background-color:#11111180!important;border:1px solid #6464644d!important}.wl-editor:focus,.wl-input:focus{outline:none;border-color:rgb(var(--waline-accent-rgb) / .5)!important;box-shadow:0 0 5px rgb(var(--waline-accent-rgb) / .3)!important}.wl-login-nick{height:var(--waline-avatar-size,52px);overflow:hidden;display:block!important}.wl-login-nick:after{display:none}.waline-comment-container img{margin:0!important}.wl-btn{cursor:pointer;border-radius:6px;padding:8px 15px;font-weight:500;transition:background-color .18s,border-color .18s,color .18s;background:rgb(var(--waline-accent-rgb) / .6)!important;color:var(--white-full)!important;border:none!important}@media (hover:hover) and (pointer:fine){.wl-btn:hover{transform:none;background:rgb(var(--waline-accent-rgb) / .7)!important;box-shadow:none!important}}.wl-btn.primary{background:rgb(var(--waline-accent-rgb) / .6)!important}@media (hover:hover) and (pointer:fine){.wl-btn.primary:hover{transform:none;background:rgb(var(--waline-accent-rgb) / .7)!important;box-shadow:none!important}}.wl-header label{color:var(--white-85p);font-weight:500}.wl-card{border-radius:12px;margin-top:1.2rem;padding:1.2rem;transition:background-color .2s,border-color .2s,color .2s;background-color:#1111110d!important;border:1px solid #46464633!important}@media (hover:hover) and (pointer:fine){.wl-card:hover{transform:none;box-shadow:0 10px 24px #00000014;border-color:rgb(var(--waline-accent-rgb) / .3)!important}}.wl-nick{font-weight:600;transition:background-color .18s,border-color .18s,color .18s;color:rgb(var(--waline-accent-rgb) / .95)!important}@media (hover:hover) and (pointer:fine){.wl-nick:hover{color:rgb(var(--waline-accent-rgb) / 1)!important}}.wl-content{color:var(--white-90p);overflow-wrap:anywhere;margin:.8rem 0;line-height:1.7}.wl-reply{opacity:.8;transition:background-color .18s,border-color .18s,color .18s}@media (hover:hover) and (pointer:fine){.wl-reply:hover{opacity:1;text-decoration:none}}.wl-emoji-popup,.wl-gif-popup{backdrop-filter:blur(10px);border-radius:10px;box-shadow:0 8px 24px #0003;background-color:#191919f2!important;border:1px solid #4646464d!important}.wl-emoji-popup button{border-radius:6px;transition:background-color .18s,border-color .18s,color .18s}@media (hover:hover) and (pointer:fine){.wl-emoji-popup button:hover{background-color:rgb(var(--waline-accent-rgb) / .2);transform:scale(1.05)}}.wl-reaction{text-align:center;background-color:#1111114d;border:1px solid #46464633;border-radius:12px;margin-bottom:1.5rem;padding:1rem}.wl-reaction-title{color:var(--white-90p);margin-bottom:1rem;font-size:1.1rem}.wl-reaction-list{flex-wrap:wrap;justify-content:center;display:flex}.wl-reaction-item{cursor:pointer;border-radius:8px;margin:5px;transition:background-color .2s,border-color .2s,color .2s;background-color:#1e1e1e80!important;border:1px solid #46464633!important}@media (hover:hover) and (pointer:fine){.wl-reaction-item:hover{transform:none;box-shadow:0 5px 10px #0003;border-color:rgb(var(--waline-accent-rgb) / .3)!important;background-color:#282828cc!important}}.wl-reaction-img{padding:6px}.wl-reaction-img img{transition:transform .3s}@media (hover:hover) and (pointer:fine){.wl-reaction-item:hover .wl-reaction-img img{transform:scale(1.05)}}.wl-reaction-votes{background-color:rgb(var(--waline-accent-rgb) / .7);color:var(--white-full);padding:5px 0;font-size:.8rem}.wl-meta-head{border-bottom:1px solid #4646464d;justify-content:space-between;align-items:center;margin-bottom:1.2rem;padding-bottom:.8rem;display:flex}.wl-count{color:var(--white-90p);font-size:1.1rem;font-weight:500}.wl-sort{gap:1rem;display:flex}.wl-sort li{cursor:pointer;color:var(--white-70p);transition:background-color .18s,border-color .18s,color .18s}@media (hover:hover) and (pointer:fine){.wl-sort li:hover{color:var(--white-90p)}}.wl-sort li.active{color:rgb(var(--waline-accent-rgb) / 1);font-weight:500}.wl-page{text-align:center;margin-top:1.2rem}.wl-page button{border-radius:6px;margin:0 5px;padding:5px 10px;transition:background-color .18s,border-color .18s,color .18s;color:var(--white-80p)!important;background:#1e1e1e80!important;border:1px solid #4646464d!important}@media (hover:hover) and (pointer:fine){.wl-page button:hover:not(:disabled){transform:none;background:rgb(var(--waline-accent-rgb) / .7)!important;color:var(--white-full)!important}}.wl-page button.active{background:rgb(var(--waline-accent-rgb) / .8)!important;color:var(--white-full)!important}.wl-power{text-align:center;opacity:.6;margin-top:2rem;font-size:.85rem}.wl-power a{color:rgb(var(--waline-accent-rgb) / .9);text-decoration:none;transition:background-color .18s,border-color .18s,color .18s}@media (hover:hover) and (pointer:fine){.wl-power a:hover{color:rgb(var(--waline-accent-rgb) / 1);text-decoration:underline}}.wl-empty{text-align:center;color:var(--white-60p);padding:2rem 0;font-size:1.1rem}.wl-text-number{color:var(--white-60p);font-size:.9rem}.waline-comment-container ::selection{background:rgb(var(--waline-accent-rgb) / .25);color:inherit;border:none;outline:none}.waline-comment-container ::selection{background:rgb(var(--waline-accent-rgb) / .25);color:inherit;border:none;outline:none}@media (width<=768px){.waline-comment-container{margin-top:2rem;padding:1.5rem}.waline-comment-title{font-size:1.8rem}.wl-panel{padding:.8rem}.wl-header{flex-direction:column}.wl-header-item{width:100%;margin-bottom:.5rem}.wl-card{margin-left:0;padding:.8rem}.wl-children{margin-left:0;padding-left:0}.wl-children .wl-card{border-left:3px solid rgb(var(--waline-accent-rgb) / .4);margin-left:0;padding-left:.8rem}}@media (width<=480px){.waline-comment-container{margin-top:1.5rem;padding:1rem}.waline-comment-title{font-size:1.6rem}.wl-panel{padding:.8rem}.wl-reaction-list{gap:5px}.wl-card{box-sizing:border-box;width:100%;margin-left:0;padding:.75rem}.wl-children{box-sizing:border-box;width:100%;margin-left:0;padding-left:0}.wl-children .wl-card{border-left:3px solid rgb(var(--waline-accent-rgb) / .4);width:100%;margin-left:0;padding-left:.6rem}.wl-children .wl-children .wl-card{border-left:3px solid rgb(var(--waline-accent-rgb) / .3);padding-left:.6rem}.wl-meta-head{flex-direction:column;align-items:flex-start;gap:.5rem}}.waline-comment-container,.waline-comment-container *,.wl-panel,.wl-content{box-sizing:border-box;overflow-wrap:anywhere;min-width:0;max-width:100%}@media (hover:none){.wl-reaction-img img{transform:none}}@media (prefers-reduced-motion:reduce){.waline-comment-container *,.waline-comment-container :before,.waline-comment-container :after{transition:none!important;animation:none!important;transform:none!important}}
1
+ .waline-comment-container{--waline-font-family:system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", "Noto Sans CJK SC", sans-serif;font-family:var(--waline-font-family)}.waline-comment-container :where(input,textarea,button,select){font-family:var(--waline-font-family)}.waline-comment-container :where(pre,code,kbd,samp){font-family:ui-monospace,Cascadia Code,Consolas,monospace}.waline-retry{border:1px solid var(--accent-50p);background:var(--white-05p);min-height:44px;color:inherit;cursor:pointer;border-radius:8px;padding:.6rem 1rem}.waline-retry:focus-visible{outline:2px solid var(--stalux-accent-color);outline-offset:3px}:root{--waline-accent-rgb:var(--stalux-accent-rgb)}.waline-comment-container{--waline-theme-color:var(--accent-text);--waline-color:var(--white-90p);--waline-info-color:var(--white-50p);--waline-light-grey:var(--white-70p);--waline-dark-grey:var(--white-70p);border-radius:12px;margin-top:3rem;margin-bottom:1rem;padding:2rem}.waline-comment-title{text-align:center;background:linear-gradient(90deg, var(--white-90p), rgb(var(--waline-accent-rgb) / .9));color:#0000;background-clip:text;margin:0 0 1.5rem;font-size:2rem}.wl-panel{background-color:#1111114d;border:1px solid #ffffff1a;border-radius:12px;margin-bottom:1.5rem;padding:1rem}.wl-editor,.wl-input{border-radius:8px;transition:background-color .2s,border-color .2s,color .2s;color:var(--white-90p)!important;background-color:#11111180!important;border:1px solid #6464644d!important}.wl-editor:focus,.wl-input:focus{outline:none;border-color:rgb(var(--waline-accent-rgb) / .5)!important;box-shadow:0 0 5px rgb(var(--waline-accent-rgb) / .3)!important}.wl-login-nick{height:var(--waline-avatar-size,52px);overflow:hidden;display:block!important}.wl-login-nick:after{display:none}.waline-comment-container img{margin:0!important}.wl-btn{cursor:pointer;border-radius:6px;padding:8px 15px;font-weight:500;transition:background-color .18s,border-color .18s,color .18s;background:rgb(var(--waline-accent-rgb) / .6)!important;color:var(--white-full)!important;border:none!important}@media (hover:hover) and (pointer:fine){.wl-btn:hover{transform:none;background:rgb(var(--waline-accent-rgb) / .7)!important;box-shadow:none!important}}.wl-btn.primary{background:rgb(var(--waline-accent-rgb) / .6)!important}@media (hover:hover) and (pointer:fine){.wl-btn.primary:hover{transform:none;background:rgb(var(--waline-accent-rgb) / .7)!important;box-shadow:none!important}}.wl-header label{color:var(--white-85p);font-weight:500}.wl-card{border-radius:12px;margin-top:1.2rem;padding:1.2rem;transition:background-color .2s,border-color .2s,color .2s;background-color:#1111110d!important;border:1px solid #46464633!important}@media (hover:hover) and (pointer:fine){.wl-card:hover{transform:none;box-shadow:0 10px 24px #00000014;border-color:rgb(var(--waline-accent-rgb) / .3)!important}}.wl-nick{font-weight:600;transition:background-color .18s,border-color .18s,color .18s;color:var(--waline-theme-color)!important}.wl-content{color:var(--white-90p);overflow-wrap:anywhere;margin:.8rem 0;line-height:1.7}.wl-reply{opacity:.8;transition:background-color .18s,border-color .18s,color .18s}@media (hover:hover) and (pointer:fine){.wl-reply:hover{opacity:1;text-decoration:none}}.wl-emoji-popup,.wl-gif-popup{backdrop-filter:blur(10px);border-radius:10px;box-shadow:0 8px 24px #0003;background-color:#191919f2!important;border:1px solid #4646464d!important}.wl-emoji-popup button{border-radius:6px;transition:background-color .18s,border-color .18s,color .18s}@media (hover:hover) and (pointer:fine){.wl-emoji-popup button:hover{background-color:rgb(var(--waline-accent-rgb) / .2);transform:scale(1.05)}}.wl-reaction{text-align:center;background-color:#1111114d;border:1px solid #46464633;border-radius:12px;margin-bottom:1.5rem;padding:1rem}.wl-reaction-title{color:var(--white-90p);margin-bottom:1rem;font-size:1.1rem}.wl-reaction-list{flex-wrap:wrap;justify-content:center;display:flex}.wl-reaction-item{cursor:pointer;border-radius:8px;margin:5px;transition:background-color .2s,border-color .2s,color .2s;background-color:#1e1e1e80!important;border:1px solid #46464633!important}@media (hover:hover) and (pointer:fine){.wl-reaction-item:hover{transform:none;box-shadow:0 5px 10px #0003;border-color:rgb(var(--waline-accent-rgb) / .3)!important;background-color:#282828cc!important}}.wl-reaction-img{padding:6px}.wl-reaction-img img{transition:transform .3s}@media (hover:hover) and (pointer:fine){.wl-reaction-item:hover .wl-reaction-img img{transform:scale(1.05)}}.wl-reaction-votes{background-color:rgb(var(--waline-accent-rgb) / .7);color:var(--white-full);padding:5px 0;font-size:.8rem}.wl-meta-head{border-bottom:1px solid #4646464d;justify-content:space-between;align-items:center;margin-bottom:1.2rem;padding-bottom:.8rem;display:flex}.wl-count{color:var(--white-90p);font-size:1.1rem;font-weight:500}.wl-sort{gap:1rem;display:flex}.wl-sort li{cursor:pointer;color:var(--white-70p);transition:background-color .18s,border-color .18s,color .18s}@media (hover:hover) and (pointer:fine){.wl-sort li:hover{color:var(--white-90p)}}.wl-sort li.active{color:var(--waline-theme-color);font-weight:500}.wl-page{text-align:center;margin-top:1.2rem}.wl-page button{border-radius:6px;margin:0 5px;padding:5px 10px;transition:background-color .18s,border-color .18s,color .18s;color:var(--white-80p)!important;background:#1e1e1e80!important;border:1px solid #4646464d!important}@media (hover:hover) and (pointer:fine){.wl-page button:hover:not(:disabled){transform:none;background:rgb(var(--waline-accent-rgb) / .7)!important;color:var(--white-full)!important}}.wl-page button.active{background:rgb(var(--waline-accent-rgb) / .8)!important;color:var(--white-full)!important}.wl-power{text-align:center;opacity:.6;margin-top:2rem;font-size:.85rem}.wl-power a{color:var(--waline-theme-color);text-decoration:none;transition:background-color .18s,border-color .18s,color .18s}@media (hover:hover) and (pointer:fine){.wl-power a:hover{text-decoration:underline}}.wl-empty{text-align:center;color:var(--white-60p);padding:2rem 0;font-size:1.1rem}.wl-text-number{color:var(--white-60p);font-size:.9rem}.waline-comment-container ::selection{background:rgb(var(--waline-accent-rgb) / .25);color:inherit;border:none;outline:none}@media (width<=768px){.waline-comment-container{margin-top:2rem;padding:1.5rem}.waline-comment-title{font-size:1.8rem}.wl-panel{padding:.8rem}.wl-header{flex-direction:column}.wl-header-item{width:100%;margin-bottom:.5rem}.wl-card{margin-left:0;padding:.8rem}.wl-children{margin-left:0;padding-left:0}.wl-children .wl-card{border-left:3px solid rgb(var(--waline-accent-rgb) / .4);margin-left:0;padding-left:.8rem}}@media (width<=480px){.waline-comment-container{margin-top:1.5rem;padding:1rem}.waline-comment-title{font-size:1.6rem}.wl-panel{padding:.8rem}.wl-reaction-list{gap:5px}.wl-card{box-sizing:border-box;width:100%;margin-left:0;padding:.75rem}.wl-children{box-sizing:border-box;width:100%;margin-left:0;padding-left:0}.wl-children .wl-card{border-left:3px solid rgb(var(--waline-accent-rgb) / .4);width:100%;margin-left:0;padding-left:.6rem}.wl-children .wl-children .wl-card{border-left:3px solid rgb(var(--waline-accent-rgb) / .3);padding-left:.6rem}.wl-meta-head{flex-direction:column;align-items:flex-start;gap:.5rem}}.waline-comment-container,.waline-comment-container *,.wl-panel,.wl-content{box-sizing:border-box;overflow-wrap:anywhere;min-width:0;max-width:100%}@media (hover:none){.wl-reaction-img img{transform:none}}@media (prefers-reduced-motion:reduce){.waline-comment-container *,.waline-comment-container :before,.waline-comment-container :after{transition:none!important;animation:none!important;transform:none!important}}
2
2
  /*$vite$:1*/
@@ -1,3 +1,3 @@
1
1
  @layer theme, base, components, utilities;
2
- @layer components{.stalux-ai-prompt{clip-path:inset(50%);white-space:pre-wrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.stalux-badge-group{border:none}.stalux-badge-group-arrow{font-size:.65rem;transition:transform .2s;display:inline-block}.stalux-badge-group-summary{user-select:none;cursor:pointer;color:var(--white-70p);gap:.4rem;padding:.2rem 0;font-size:.85rem;list-style-type:none;transition:color .2s}.stalux-beian-public-security-beian{color:#ffffffb3;gap:5px;font-size:.9rem;text-decoration:none;transition:color .3s;display:inline-flex}.stalux-card-time{gap:.45rem;margin:0;display:inline-flex}.stalux-copyright{color:var(--white-70p);gap:.3em;font-weight:500}.stalux-footer{backdrop-filter:blur(10px);color:var(--white-full);background-color:#0000001a;margin-top:auto;padding:1.5rem 0;font-size:.9rem}.stalux-footer-content{gap:.8rem;max-width:1200px;margin:0 auto;padding:0 1rem}.stalux-nav-list{transform:scale(var(--nav-scale,1));transform-origin:50%;box-sizing:border-box;gap:2rem;max-width:100%;transition:transform .22s cubic-bezier(.22,.72,.22,1);overflow:visible}.stalux-nav-overlay{pointer-events:none;z-index:999;opacity:0;background:#0009;height:100%;transition:opacity .3s;display:none;position:fixed;top:0;left:0}.stalux-nav-scroll-btn{background:var(--black-30p);backdrop-filter:blur(8px);box-shadow:var(--shadow-md);pointer-events:none;z-index:10;cursor:pointer;width:36px;height:36px;color:var(--white-full);opacity:0;border:none;border-radius:9999px;padding:0;transition:opacity .25s;display:none;position:absolute;top:50%;transform:translateY(-50%)}.stalux-nav-toggle{z-index:998;cursor:pointer;min-width:48px;min-height:48px;color:inherit;background:0 0;border:none;padding:.75rem;display:none}.stalux-stats-site-build-time{color:#fffc;margin:.5rem 0 0;font-size:.9rem}.stalux-stats-stats-separator{color:#ffffff80}.stalux-theme-info{color:var(--white-70p);gap:.3em;margin:0;font-size:.85rem}.stalux-nav-container{box-sizing:border-box;max-width:100%;position:relative;overflow:hidden}.stalux-beian-beian-info{gap:1rem;margin:0}.stalux-nav-item{text-shadow:var(--stalux-text-shadow);flex-shrink:0;margin-left:1em;margin-right:1em;font-size:1.3em}.stalux-page-description{color:var(--white-60p);margin-top:0;margin-bottom:1.5em;font-size:1.2em}.stalux-page-title{text-shadow:var(--stalux-text-shadow);margin-top:1.5em;font-size:2.5em}.stalux-badge,.stalux-badges-wrapper .stalux-badge{width:auto}.stalux-u-min-w-0{min-width:0}.stalux-u-w-full{width:100%}.stalux-u-flex{display:flex}.stalux-u-flex-col{flex-direction:column}.stalux-u-flex-wrap{flex-wrap:wrap}.stalux-u-items-center{align-items:center}.stalux-u-justify-center{justify-content:center}.stalux-badges,.stalux-badges-wrapper{gap:.5rem}.stalux-stats-site-stats{gap:.5rem;font-size:.9rem}.stalux-nav-text{white-space:nowrap;color:var(--white-full)}.stalux-badge-group-items{padding-top:.35rem}.stalux-u-text-center{text-align:center}.stalux-badge-group-hint{color:var(--white-70p);font-size:.7rem}.stalux-badge-group-title{color:var(--white-80p)}.stalux-weather-heading{font-size:inherit;font-weight:inherit;margin:0}nav{width:100%;min-width:0;max-width:100%}html{scroll-padding-top:var(--stalux-nav-offset,var(--stalux-site-header-height))}.stalux-site-header{z-index:990;width:100%;min-height:var(--stalux-site-header-min-height);isolation:isolate;justify-content:center;align-items:center;display:flex;position:sticky;top:0}.stalux-nav-scroll-btn[data-visible]{pointer-events:auto;opacity:1}.stalux-nav-scroll-btn[data-side=left]{left:4px}.stalux-nav-scroll-btn[data-side=right]{right:4px}.stalux-nav-scroll-btn svg{stroke:currentColor;stroke-width:2px;fill:none;width:20px;height:20px}.stalux-nav-link,.stalux-nav-link:visited{cursor:pointer;width:100%;color:inherit;min-height:44px;font:inherit;background:0 0;border:none;align-items:center;gap:.5rem;padding:.5rem .75rem;text-decoration:none;display:flex}.stalux-nav-link .nav-icon{stroke:var(--white-full)}.stalux-nav-toggle svg{width:32px;height:32px}.stalux-nav-overlay[data-state=show]{pointer-events:auto;opacity:1;display:block}#stalux-to-archive-archs{margin:2em 0 0}#stalux-date-date-time{text-shadow:var(--stalux-text-shadow);color:var(--white-full);flex-direction:column;align-items:center;margin:2em 0 0;display:flex}#stalux-date-date-time #stalux-date-date{min-height:1.25em;margin-bottom:.5em;font-size:2em;line-height:1.25}#stalux-date-date-time #stalux-date-time{font-variant-numeric:tabular-nums;min-height:1.25em;font-size:3em;line-height:1.25}.stalux-theme-info span,.stalux-copyright span{margin:0}.stalux-theme-info a{color:#fffc;margin:0 .2em;text-decoration:none;transition:color .3s}.stalux-beian-beian-info a{color:#ffffffb3;font-size:.9rem;text-decoration:none;transition:color .3s}.stalux-beian-public-security-beian img{width:15px;height:15px;display:inline-block}.stalux-badge-group-summary::-webkit-details-marker,.stalux-badge-group[open] .stalux-badge-group-hint[data-hint=collapsed],.stalux-badge-group:not([open]) .stalux-badge-group-hint[data-hint=expanded]{display:none}.stalux-badge-group[open] .stalux-badge-group-arrow{transform:rotate(90deg)}@media (hover:hover) and (pointer:fine){.stalux-nav-scroll-btn:hover{background:0 0}.stalux-nav-container:hover .stalux-nav-scroll-btn[data-visible]{opacity:1}.stalux-nav-link:hover .nav-icon,.stalux-nav-link:hover .stalux-nav-text{stroke:var(--stalux-accent-color);color:var(--stalux-accent-color)}.stalux-theme-info a:hover{color:#fff;text-decoration:none}.stalux-beian-beian-info a:hover,.stalux-beian-public-security-beian:hover{color:#ffffffe6;text-decoration:none}.stalux-badge-group-summary:hover{color:var(--white-70p)}}@media (width>=601px){.stalux-site-nav{isolation:isolate;border-radius:0 0 16px 16px;transition:background-color .18s}.stalux-site-nav[data-scrolled]{backdrop-filter:blur(20px)saturate(140%);box-shadow:0 1px 0 var(--white-10p), 0 8px 24px #0000001f;background:#181818c7}}@media (width<=1100px){.stalux-nav-list{gap:1rem}.stalux-nav-item{margin-left:.6em;margin-right:.6em;font-size:1em}}@media (width<=900px){.stalux-nav-item{margin-left:.25em;margin-right:.25em;font-size:.95em}.stalux-nav-list{gap:.5rem}}@media (width<=768px){.stalux-footer{padding:1.2rem 0;font-size:.8rem}.stalux-footer-content{gap:.6rem;padding:0 .8rem}.stalux-badges{gap:.3rem}.stalux-badge{width:auto}}@media (width<=600px){html{--stalux-site-header-min-height:4rem}.stalux-nav-toggle[data-state=open]{visibility:hidden;pointer-events:none}.stalux-nav-toggle[data-scrolled]{backdrop-filter:blur(20px)saturate(140%);box-shadow:0 1px 0 var(--white-10p), 0 8px 24px #0000001f;background:#181818c7;border-radius:12px}.stalux-nav-toggle{display:block;position:fixed;top:.75rem;left:.75rem}.stalux-nav-container{overflow:visible}nav{width:auto}.stalux-nav-list{pointer-events:none;z-index:1000;background:var(--black-20p);backdrop-filter:blur(20px);flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:0;width:min(220px,100vw - 1rem);height:100vh;padding:.5rem 1rem 2rem;position:fixed;top:0;left:0;right:auto;overflow-y:auto;transform:translate(-100%)}.stalux-nav-list[data-state=open]{pointer-events:auto;transform:translate(0)}.stalux-nav-item{border-bottom:1px solid var(--white-10p);flex-shrink:0;width:100%;margin:0;font-size:.9em}.stalux-nav-text{display:inline}.stalux-nav-link{width:100%;min-height:44px;font-size:inherit;padding:.45rem .75rem}.stalux-nav-link .nav-icon{width:18px;height:18px}}@media (width<=480px){.stalux-footer{padding:1rem 0;font-size:.8rem}.stalux-footer-content{gap:.6rem;padding:0 .8rem}}.stalux-main,.stalux-post-page,.stalux-post-layout>*,.stalux-link-card-content,.stalux-word-list-item,.stalux-word-card{box-sizing:border-box;min-width:0;max-width:100%}.stalux-main{overflow-wrap:anywhere}.stalux-link-shell{min-width:0;max-width:100%;display:block}.stalux-link-card{box-sizing:border-box;width:100%;max-width:100%}.stalux-category-shell{width:100%;min-width:0}.stalux-author-figure>a{flex-shrink:0;display:inline-block}.stalux-author-figure img{display:block}.stalux-post-card-shell,.stalux-category-shell,.stalux-link-shell{position:relative}.stalux-post-card,.stalux-category-card,.stalux-link-card,.stalux-word-card{transition:transform .2s,background-color .2s,border-color .2s,box-shadow .2s}:is(.stalux-post-card-shell,.stalux-category-shell):focus-within>*,.stalux-link-shell:focus-visible>*{box-shadow:var(--card-box-shadow-hover)}:is(button,summary,[role=button]):focus-visible{outline:2px solid var(--stalux-accent-color);outline-offset:3px}@media (prefers-reduced-motion:reduce){.stalux-main *,.stalux-main :before,.stalux-main :after{transition-duration:0s!important;animation:none!important}.stalux-post-card,.stalux-category-card,.stalux-link-card,.stalux-link-card-content,.stalux-card-post-cover img,.stalux-category-icon,.stalux-author-figure img,.stalux-link-card-avatar img{transform:none!important}}@keyframes stalux-social-stalux-social-arrive{0%{opacity:0;transform:translateY(.75rem)rotate(-12deg)}to{opacity:1;transform:translateY(0)rotate(0)}}@keyframes stalux-random-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes stalux-link-avatar-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}}@layer utilities{.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.visible{visibility:visible}.absolute{position:absolute}.static{position:static}.grid{display:grid}.block{display:block}.inline-block{display:inline-block}.hidden{display:none}.h-full{height:100%}.flex{display:flex}.flex-shrink{flex-shrink:1}.flex-wrap{flex-wrap:wrap}.transform{transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.b,.border{border-width:1px}.text-inherit{color:inherit}.no-underline{text-decoration:none}.outline{outline-style:solid}}@layer theme;@layer base{html,body{color:#fff;width:100%;height:100%;margin:0;& main{flex:1}scrollbar-color:var(--stalux-scrollbar-thumb) var(--stalux-scrollbar-track);scrollbar-width:auto;font-family:var(--font-body), "Noto Sans SC", "Noto Sans CJK SC", system-ui, -apple-system, sans-serif;text-rendering:optimizelegibility;line-height:1.25;display:block}body{height:auto;min-height:100%}html{scrollbar-gutter:stable;background-color:var(--stalux-bg-color,#202020)}html[data-clarity-id]{opacity:1!important}a{color:inherit;cursor:pointer;text-decoration-skip-ink:auto;background-color:#0000;text-decoration:none;transition:color .2s,text-shadow .2s;position:relative}.a-none{cursor:pointer;text-decoration-skip-ink:auto;background-color:#0000;color:inherit!important;text-decoration:none!important}.a-none:after{display:none!important}a:not(.a-none):not([data-stalux-card]):not(.stalux-nav-link):after{content:"";background:linear-gradient(90deg, var(--stalux-accent-color), var(--accent-50p));transform-origin:0;pointer-events:none;width:100%;height:1px;transition:transform .25s cubic-bezier(.25,.9,.2,1);position:absolute;bottom:-2px;left:0;transform:scaleX(0)}a:not(.a-none):not([data-stalux-card]):not(.stalux-nav-link):focus-visible:after,a:not(.a-none):not([data-stalux-card]):not(.stalux-nav-link):active:after{transform:scaleX(1)}@media (hover:hover) and (pointer:fine){a:not(.a-none):not([data-stalux-card]):not(.stalux-nav-link):hover:after{transform:scaleX(1)}}a:active,a:focus-visible{text-decoration:none}@media (hover:hover) and (pointer:fine){a:hover{text-decoration:none}}a:focus{outline:none}a:focus-visible{outline:2px solid var(--stalux-accent-color);outline-offset:2px}ul{margin:0;padding:0;list-style:none}.none{display:none}.stalux-root{color:#fff;min-height:100vh}.stalux-main{min-height:calc(100vh - var(--stalux-site-header-height,3rem))}:root{--stalux-bg-color:#202020;--stalux-bg-filter:none;--stalux-scrollbar-thumb:#7d7d7d;--stalux-scrollbar-thumb-hover:#9a9a9a;--stalux-scrollbar-track:#2a2a2a;--stalux-site-header-min-height:3.75rem;--stalux-site-header-height:var(--stalux-site-header-min-height);--stalux-text-shadow:var(--stalux-accent-color) .08rem .08rem .18rem;--stalux-accent-color:#eab308;--stalux-accent-rgb:234 179 8;--surface-glass:var(--black-05p);--surface-glass-shadow:var(--shadow-sidebar);--card-bg:var(--surface-glass);--card-border:#ffffff1a;--card-box-shadow:0 10px 24px #00000014;--card-box-shadow-hover:0 14px 28px #0000001f;--tag-bg:#ffffff1f;--tag-bg-hover:#ffffff2e;--category-bg:#ffffff14;--category-bg-hover:#ffffff24;--date-bg:#42a0ff2e;--date-border:#42a0ff40;--updated-bg:#ffc94733;--updated-border:#ffc9474d;--white-full:#fff;--white-95p:#fffffff2;--white-90p:#ffffffe6;--white-85p:#ffffffd9;--white-80p:#ffffffe6;--white-78p:#ffffffc7;--white-75p:#ffffffbf;--white-70p:#ffffffdb;--white-60p:#fff9;--white-50p:#ffffff80;--white-30p:#ffffff4d;--white-20p:#fff3;--white-15p:#ffffff26;--white-10p:#ffffff1a;--white-05p:#ffffff0d;--black-30p:#0000004d;--black-20p:#0003;--black-15p:#00000026;--black-10p:#0000001a;--black-05p:#0000000d;--accent-90p:rgb(var(--stalux-accent-rgb) / .9);--accent-85p:rgb(var(--stalux-accent-rgb) / .85);--accent-80p:rgb(var(--stalux-accent-rgb) / .8);--accent-70p:rgb(var(--stalux-accent-rgb) / .7);--accent-60p:rgb(var(--stalux-accent-rgb) / .6);--accent-50p:rgb(var(--stalux-accent-rgb) / .5);--accent-40p:rgb(var(--stalux-accent-rgb) / .4);--accent-30p:rgb(var(--stalux-accent-rgb) / .3);--accent-20p:rgb(var(--stalux-accent-rgb) / .2);--transition-fast:.18s ease;--transition-medium:.2s ease;--transition-normal:.25s ease;--transition-slow:.3s ease;--transition-slower:.5s ease;--transition-slowest:.6s ease;--easing-bounce:cubic-bezier(.175, .885, .32, 1.275);--space-2xs:.25rem;--space-xs:.75rem;--space-sm:.5rem;--space-md:1rem;--space-lg:1.5rem;--space-xl:2rem;--space-2xl:3rem;--space-3xl:4rem;--radius-sm:4px;--radius-md:6px;--radius-lg:8px;--radius-full:9999px;--shadow-sm:0 2px 5px #0000001a;--shadow-md:0 6px 16px #0003;--shadow-lg:0 8px 20px #0000004d;--shadow-xl:0 12px 26px #00000047;--shadow-sidebar:0 16px 20px -12px #000000d6, 10px 4px 16px -12px #00000094, -10px 4px 16px -12px #00000094;--shadow-raised-hover:0 20px 24px -13px #000000e6, 12px 5px 18px -13px #000000ad, -12px 5px 18px -13px #000000ad;--shadow-dark:#000000c0;--muted-text:#bbb;--font-body:"Noto Sans SC", "Noto Sans CJK SC", system-ui, sans-serif;--font-size-subtitle:1.35rem;--font-size-base:1.1rem;--font-size-small:.95rem;--font-size-smaller:.9rem;--font-size-tiny:.85rem;--border-thin:1px;--border-medium:2px;--border-thick:3px}@supports not (scrollbar-color:auto){::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--stalux-scrollbar-track);border-radius:4px}::-webkit-scrollbar-thumb{background:var(--stalux-scrollbar-thumb);border-radius:4px;transition:background .3s ease-out}@media (hover:hover) and (pointer:fine){::-webkit-scrollbar-thumb:hover{background:var(--stalux-scrollbar-thumb-hover)}}::-webkit-scrollbar-corner{background:var(--stalux-scrollbar-track)}}.bg-layer{z-index:-10;background-position:50%;background-repeat:repeat;background-size:auto;background-color:var(--stalux-bg-color,transparent);filter:var(--stalux-bg-filter,none);pointer-events:none;opacity:0;forced-color-adjust:none;color-scheme:light only;transition:opacity .2s ease-out;position:fixed;inset:0}@media (prefers-reduced-motion:reduce){.bg-layer{transition-duration:0s}}footer{padding:var(--space-lg) var(--space-md);text-align:center;color:var(--muted-text);border-top:1px solid var(--white-10p);backdrop-filter:blur(16px);background:linear-gradient(#0c0e122e,#0c0e12b8)}}@media print{[data-stalux-offscreen-code],[data-stalux-offscreen-svg]{content-visibility:visible!important;contain-intrinsic-block-size:none!important}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}[data-stalux-home-content]{flex-direction:column;align-items:center;width:100%;display:flex}[data-stalux-scroll-sentinel]{visibility:hidden;pointer-events:none;width:1px;height:1px;position:absolute;top:240px;left:0}@media (prefers-reduced-motion:reduce){.stalux-main,.stalux-main *,.postLayout *{scroll-behavior:auto!important;transition-duration:1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important}}
2
+ @layer components{.stalux-ai-prompt{clip-path:inset(50%);white-space:pre-wrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.stalux-badge-group{border:none}.stalux-badge-group-arrow{font-size:.65rem;transition:transform .2s;display:inline-block}.stalux-badge-group-summary{user-select:none;cursor:pointer;color:var(--white-70p);gap:.4rem;padding:.2rem 0;font-size:.85rem;list-style-type:none;transition:color .2s}.stalux-beian-public-security-beian{color:#ffffffb3;gap:5px;font-size:.9rem;text-decoration:none;transition:color .3s;display:inline-flex}.stalux-card-time{gap:.45rem;margin:0;display:inline-flex}.stalux-copyright{color:var(--white-70p);gap:.3em;font-weight:500}.stalux-footer{backdrop-filter:blur(10px);color:var(--white-full);background-color:#0000001a;margin-top:auto;padding:1.5rem 0;font-size:.9rem}.stalux-footer-content{gap:.8rem;max-width:1200px;margin:0 auto;padding:0 1rem}.stalux-nav-list{transform:scale(var(--nav-scale,1));transform-origin:50%;box-sizing:border-box;gap:2rem;max-width:100%;transition:transform .22s cubic-bezier(.22,.72,.22,1);overflow:visible}.stalux-nav-overlay{pointer-events:none;z-index:999;opacity:0;background:#0009;height:100%;transition:opacity .3s;display:none;position:fixed;top:0;left:0}.stalux-nav-scroll-btn{background:var(--black-30p);backdrop-filter:blur(8px);box-shadow:var(--shadow-md);pointer-events:none;z-index:10;cursor:pointer;width:36px;height:36px;color:var(--white-full);opacity:0;border:none;border-radius:9999px;padding:0;transition:opacity .25s;display:none;position:absolute;top:50%;transform:translateY(-50%)}.stalux-nav-toggle{z-index:998;cursor:pointer;min-width:48px;min-height:48px;color:inherit;background:0 0;border:none;padding:.75rem;display:none}.stalux-stats-site-build-time{color:#fffc;margin:.5rem 0 0;font-size:.9rem}.stalux-stats-stats-separator{color:#ffffff80}.stalux-theme-info{color:var(--white-70p);gap:.3em;margin:0;font-size:.85rem}.stalux-nav-container{box-sizing:border-box;max-width:100%;position:relative;overflow:hidden}.stalux-beian-beian-info{gap:1rem;margin:0}.stalux-nav-item{text-shadow:var(--stalux-text-shadow);flex-shrink:0;margin-left:1em;margin-right:1em;font-size:1.3em}.stalux-page-description{color:var(--white-60p);margin-top:0;margin-bottom:1.5em;font-size:1.2em}.stalux-page-title{text-shadow:var(--stalux-text-shadow);margin-top:1.5em;font-size:2.5em}.stalux-badge,.stalux-badges-wrapper .stalux-badge{width:auto}.stalux-u-min-w-0{min-width:0}.stalux-u-w-full{width:100%}.stalux-u-flex{display:flex}.stalux-u-flex-col{flex-direction:column}.stalux-u-flex-wrap{flex-wrap:wrap}.stalux-u-items-center{align-items:center}.stalux-u-justify-center{justify-content:center}.stalux-badges,.stalux-badges-wrapper{gap:.5rem}.stalux-stats-site-stats{gap:.5rem;font-size:.9rem}.stalux-nav-text{white-space:nowrap;color:var(--white-full)}.stalux-badge-group-items{padding-top:.35rem}.stalux-u-text-center{text-align:center}.stalux-badge-group-hint{color:var(--white-70p);font-size:.7rem}.stalux-badge-group-title{color:var(--white-80p)}.stalux-weather-heading{font-size:inherit;font-weight:inherit;margin:0}nav{width:100%;min-width:0;max-width:100%}html{scroll-padding-top:var(--stalux-nav-offset,var(--stalux-site-header-height))}.stalux-site-header{z-index:990;width:100%;min-height:var(--stalux-site-header-min-height);isolation:isolate;justify-content:center;align-items:center;display:flex;position:sticky;top:0}.stalux-nav-scroll-btn[data-visible]{pointer-events:auto;opacity:1}.stalux-nav-scroll-btn[data-side=left]{left:4px}.stalux-nav-scroll-btn[data-side=right]{right:4px}.stalux-nav-scroll-btn svg{stroke:currentColor;stroke-width:2px;fill:none;width:20px;height:20px}.stalux-nav-link,.stalux-nav-link:visited{cursor:pointer;width:100%;color:inherit;min-height:44px;font:inherit;background:0 0;border:none;align-items:center;gap:.5rem;padding:.5rem .75rem;text-decoration:none;display:flex}.stalux-nav-link .nav-icon{stroke:var(--white-full)}.stalux-nav-toggle svg{width:32px;height:32px}.stalux-nav-overlay[data-state=show]{pointer-events:auto;opacity:1;display:block}#stalux-to-archive-archs{margin:2em 0 0}#stalux-date-date-time{text-shadow:var(--stalux-text-shadow);color:var(--white-full);flex-direction:column;align-items:center;margin:2em 0 0;display:flex}#stalux-date-date-time #stalux-date-date{min-height:1.25em;margin-bottom:.5em;font-size:2em;line-height:1.25}#stalux-date-date-time #stalux-date-time{font-variant-numeric:tabular-nums;min-height:1.25em;font-size:3em;line-height:1.25}.stalux-theme-info span,.stalux-copyright span{margin:0}.stalux-theme-info a{color:#fffc;margin:0 .2em;text-decoration:none;transition:color .3s}.stalux-beian-beian-info a{color:#ffffffb3;font-size:.9rem;text-decoration:none;transition:color .3s}.stalux-beian-public-security-beian img{width:15px;height:15px;display:inline-block}.stalux-badge-group-summary::-webkit-details-marker,.stalux-badge-group[open] .stalux-badge-group-hint[data-hint=collapsed],.stalux-badge-group:not([open]) .stalux-badge-group-hint[data-hint=expanded]{display:none}.stalux-badge-group[open] .stalux-badge-group-arrow{transform:rotate(90deg)}@media (hover:hover) and (pointer:fine){.stalux-nav-scroll-btn:hover{background:0 0}.stalux-nav-container:hover .stalux-nav-scroll-btn[data-visible]{opacity:1}.stalux-nav-link:hover .nav-icon,.stalux-nav-link:hover .stalux-nav-text{stroke:var(--stalux-accent-color);color:var(--stalux-accent-color)}.stalux-theme-info a:hover{color:#fff;text-decoration:none}.stalux-beian-beian-info a:hover,.stalux-beian-public-security-beian:hover{color:#ffffffe6;text-decoration:none}.stalux-badge-group-summary:hover{color:var(--white-70p)}}@media (width>=601px){.stalux-site-nav{isolation:isolate;border-radius:0 0 16px 16px;transition:background-color .18s}.stalux-site-nav[data-scrolled]{backdrop-filter:blur(20px)saturate(140%);box-shadow:0 1px 0 var(--white-10p), 0 8px 24px #0000001f;background:#181818c7}}@media (width<=1100px){.stalux-nav-list{gap:1rem}.stalux-nav-item{margin-left:.6em;margin-right:.6em;font-size:1em}}@media (width<=900px){.stalux-nav-item{margin-left:.25em;margin-right:.25em;font-size:.95em}.stalux-nav-list{gap:.5rem}}@media (width<=768px){.stalux-footer{padding:1.2rem 0;font-size:.8rem}.stalux-footer-content{gap:.6rem;padding:0 .8rem}.stalux-badges{gap:.3rem}.stalux-badge{width:auto}}@media (width<=600px){html{--stalux-site-header-min-height:4rem}.stalux-nav-toggle[data-state=open]{visibility:hidden;pointer-events:none}.stalux-nav-toggle[data-scrolled]{backdrop-filter:blur(20px)saturate(140%);box-shadow:0 1px 0 var(--white-10p), 0 8px 24px #0000001f;background:#181818c7;border-radius:12px}.stalux-nav-toggle{display:block;position:fixed;top:.75rem;left:.75rem}.stalux-nav-container{overflow:visible}nav{width:auto}.stalux-nav-list{pointer-events:none;z-index:1000;background:var(--black-20p);backdrop-filter:blur(20px);flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:0;width:min(220px,100vw - 1rem);height:100vh;padding:.5rem 1rem 2rem;position:fixed;top:0;left:0;right:auto;overflow-y:auto;transform:translate(-100%)}.stalux-nav-list[data-state=open]{pointer-events:auto;transform:translate(0)}.stalux-nav-item{border-bottom:1px solid var(--white-10p);flex-shrink:0;width:100%;margin:0;font-size:.9em}.stalux-nav-text{display:inline}.stalux-nav-link{width:100%;min-height:44px;font-size:inherit;padding:.45rem .75rem}.stalux-nav-link .nav-icon{width:18px;height:18px}}@media (width<=480px){.stalux-footer{padding:1rem 0;font-size:.8rem}.stalux-footer-content{gap:.6rem;padding:0 .8rem}}.stalux-main,.stalux-post-page,.stalux-post-layout>*,.stalux-link-card-content,.stalux-word-list-item,.stalux-word-card{box-sizing:border-box;min-width:0;max-width:100%}.stalux-main{overflow-wrap:anywhere}.stalux-link-shell{min-width:0;max-width:100%;display:block}.stalux-link-card{box-sizing:border-box;width:100%;max-width:100%}.stalux-category-shell{width:100%;min-width:0}.stalux-author-figure>a{flex-shrink:0;display:inline-block}.stalux-author-figure img{display:block}.stalux-post-card-shell,.stalux-category-shell,.stalux-link-shell{position:relative}.stalux-post-card,.stalux-category-card,.stalux-link-card,.stalux-word-card{transition:transform .2s,background-color .2s,border-color .2s,box-shadow .2s}:is(.stalux-post-card-shell,.stalux-category-shell):focus-within>*,.stalux-link-shell:focus-visible>*{box-shadow:var(--card-box-shadow-hover)}:is(button,summary,[role=button]):focus-visible{outline:2px solid var(--stalux-accent-color);outline-offset:3px}@media (prefers-reduced-motion:reduce){.stalux-main *,.stalux-main :before,.stalux-main :after{transition-duration:0s!important;animation:none!important}.stalux-post-card,.stalux-category-card,.stalux-link-card,.stalux-link-card-content,.stalux-card-post-cover img,.stalux-category-icon,.stalux-author-figure img,.stalux-link-card-avatar img{transform:none!important}}@keyframes stalux-social-stalux-social-arrive{0%{opacity:0;transform:translateY(.75rem)rotate(-12deg)}to{opacity:1;transform:translateY(0)rotate(0)}}@keyframes stalux-random-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}}@layer utilities{.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.visible{visibility:visible}.absolute{position:absolute}.static{position:static}.grid{display:grid}.block{display:block}.inline-block{display:inline-block}.hidden{display:none}.h-full{height:100%}.flex{display:flex}.flex-shrink{flex-shrink:1}.flex-wrap{flex-wrap:wrap}.transform{transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.b,.border{border-width:1px}.text-inherit{color:inherit}.no-underline{text-decoration:none}.outline{outline-style:solid}}@layer theme;@layer base{html,body{color:#fff;width:100%;height:100%;margin:0;& main{flex:1}scrollbar-color:var(--stalux-scrollbar-thumb) var(--stalux-scrollbar-track);scrollbar-width:auto;font-family:var(--font-body), "Noto Sans SC", "Noto Sans CJK SC", system-ui, -apple-system, sans-serif;text-rendering:optimizelegibility;line-height:1.25;display:block}body{height:auto;min-height:100%}html{scrollbar-gutter:stable;background-color:var(--stalux-bg-color,#202020)}html[data-clarity-id]{opacity:1!important}a{color:inherit;cursor:pointer;text-decoration-skip-ink:auto;background-color:#0000;text-decoration:none;transition:color .2s,text-shadow .2s;position:relative}.a-none{cursor:pointer;text-decoration-skip-ink:auto;background-color:#0000;color:inherit!important;text-decoration:none!important}.a-none:after{display:none!important}a:not(.a-none):not([data-stalux-card]):not(.stalux-nav-link):after{content:"";background:linear-gradient(90deg, var(--stalux-accent-color), var(--accent-50p));transform-origin:0;pointer-events:none;width:100%;height:1px;transition:transform .25s cubic-bezier(.25,.9,.2,1);position:absolute;bottom:-2px;left:0;transform:scaleX(0)}a:not(.a-none):not([data-stalux-card]):not(.stalux-nav-link):focus-visible:after,a:not(.a-none):not([data-stalux-card]):not(.stalux-nav-link):active:after{transform:scaleX(1)}@media (hover:hover) and (pointer:fine){a:not(.a-none):not([data-stalux-card]):not(.stalux-nav-link):hover:after{transform:scaleX(1)}}a:active,a:focus-visible{text-decoration:none}@media (hover:hover) and (pointer:fine){a:hover{text-decoration:none}}a:focus{outline:none}a:focus-visible{outline:2px solid var(--stalux-accent-color);outline-offset:2px}ul{margin:0;padding:0;list-style:none}.none{display:none}.stalux-root{color:#fff;min-height:100vh}.stalux-main{min-height:calc(100vh - var(--stalux-site-header-height,3rem))}:root{--stalux-bg-color:#202020;--stalux-bg-filter:none;--stalux-scrollbar-thumb:#7d7d7d;--stalux-scrollbar-thumb-hover:#9a9a9a;--stalux-scrollbar-track:#2a2a2a;--stalux-site-header-min-height:3.75rem;--stalux-site-header-height:var(--stalux-site-header-min-height);--stalux-text-shadow:var(--stalux-accent-color) .08rem .08rem .18rem;--stalux-accent-color:#eab308;--stalux-accent-rgb:234 179 8;--surface-glass:var(--black-05p);--surface-glass-shadow:var(--shadow-sidebar);--card-bg:var(--surface-glass);--card-box-shadow:0 10px 24px #00000014;--card-box-shadow-hover:0 14px 28px #0000001f;--tag-bg:#ffffff1f;--tag-bg-hover:#ffffff2e;--category-bg:#ffffff14;--category-bg-hover:#ffffff24;--date-bg:#42a0ff2e;--date-border:#42a0ff40;--updated-bg:#ffc94733;--updated-border:#ffc9474d;--white-full:#fff;--white-95p:#fffffff2;--white-90p:#ffffffe6;--white-85p:#ffffffd9;--white-80p:#ffffffe6;--white-78p:#ffffffc7;--white-75p:#ffffffbf;--white-70p:#ffffffdb;--white-60p:#fff9;--white-50p:#ffffff80;--white-30p:#ffffff4d;--white-20p:#fff3;--white-15p:#ffffff26;--white-10p:#ffffff1a;--white-05p:#ffffff0d;--black-30p:#0000004d;--black-20p:#0003;--black-15p:#00000026;--black-10p:#0000001a;--black-05p:#0000000d;--accent-90p:rgb(var(--stalux-accent-rgb) / .9);--accent-85p:rgb(var(--stalux-accent-rgb) / .85);--accent-80p:rgb(var(--stalux-accent-rgb) / .8);--accent-70p:rgb(var(--stalux-accent-rgb) / .7);--accent-60p:rgb(var(--stalux-accent-rgb) / .6);--accent-50p:rgb(var(--stalux-accent-rgb) / .5);--accent-40p:rgb(var(--stalux-accent-rgb) / .4);--accent-30p:rgb(var(--stalux-accent-rgb) / .3);--accent-20p:rgb(var(--stalux-accent-rgb) / .2);--transition-fast:.18s ease;--transition-medium:.2s ease;--transition-normal:.25s ease;--transition-slow:.3s ease;--space-2xs:.25rem;--space-xs:.75rem;--space-sm:.5rem;--space-md:1rem;--space-lg:1.5rem;--space-xl:2rem;--space-2xl:3rem;--space-3xl:4rem;--radius-sm:4px;--radius-md:6px;--radius-lg:8px;--radius-full:9999px;--shadow-sm:0 2px 5px #0000001a;--shadow-md:0 6px 16px #0003;--shadow-lg:0 8px 20px #0000004d;--shadow-xl:0 12px 26px #00000047;--shadow-sidebar:0 16px 20px -12px #000000d6, 10px 4px 16px -12px #00000094, -10px 4px 16px -12px #00000094;--shadow-dark:#000000c0;--muted-text:#bbb;--font-body:"Noto Sans SC", "Noto Sans CJK SC", system-ui, sans-serif;--font-size-subtitle:1.35rem;--font-size-base:1.1rem;--font-size-small:.95rem;--font-size-smaller:.9rem;--font-size-tiny:.85rem;--border-thin:1px;--border-medium:2px;--border-thick:3px}@supports not (scrollbar-color:auto){::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--stalux-scrollbar-track);border-radius:4px}::-webkit-scrollbar-thumb{background:var(--stalux-scrollbar-thumb);border-radius:4px;transition:background .3s ease-out}@media (hover:hover) and (pointer:fine){::-webkit-scrollbar-thumb:hover{background:var(--stalux-scrollbar-thumb-hover)}}::-webkit-scrollbar-corner{background:var(--stalux-scrollbar-track)}}.bg-layer{z-index:-10;background-position:50%;background-repeat:repeat;background-size:auto;background-color:var(--stalux-bg-color,transparent);filter:var(--stalux-bg-filter,none);pointer-events:none;opacity:0;forced-color-adjust:none;color-scheme:light only;transition:opacity .2s ease-out;position:fixed;inset:0}@media (prefers-reduced-motion:reduce){.bg-layer{transition-duration:0s}}footer{padding:var(--space-lg) var(--space-md);text-align:center;color:var(--muted-text);border-top:1px solid var(--white-10p);backdrop-filter:blur(16px);background:linear-gradient(#0c0e122e,#0c0e12b8)}}@media print{[data-stalux-offscreen-code],[data-stalux-offscreen-svg]{content-visibility:visible!important;contain-intrinsic-block-size:none!important}}[data-stalux-home-content]{flex-direction:column;align-items:center;width:100%;display:flex}[data-stalux-scroll-sentinel]{visibility:hidden;pointer-events:none;width:1px;height:1px;position:absolute;top:240px;left:0}@media (prefers-reduced-motion:reduce){.stalux-main,.stalux-main *,.postLayout *{scroll-behavior:auto!important;transition-duration:1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important}}
3
3
  /*$vite$:1*/
@@ -30,6 +30,17 @@
30
30
  --waline-accent-rgb: var(--stalux-accent-rgb);
31
31
  }
32
32
 
33
+ /* Waline ships its own light palette. Pin the text tokens to the theme scale so
34
+ comment text, timestamps and the credit line stay above WCAG AA (4.5:1) on the
35
+ dark canvas, and keep accent-coloured text on the build-time lightened accent. */
36
+ .waline-comment-container {
37
+ --waline-theme-color: var(--accent-text);
38
+ --waline-color: var(--white-90p);
39
+ --waline-info-color: var(--white-50p);
40
+ --waline-light-grey: var(--white-70p);
41
+ --waline-dark-grey: var(--white-70p);
42
+ }
43
+
33
44
  /* 评论区容器与博客风格一致 */
34
45
  .waline-comment-container {
35
46
  margin-top: 3rem;
@@ -153,18 +164,13 @@
153
164
 
154
165
  /* 修改用户名样式 */
155
166
  .wl-nick {
156
- color: rgb(var(--waline-accent-rgb) / 0.95) !important;
167
+ color: var(--waline-theme-color) !important;
157
168
  font-weight: 600;
158
169
  transition:
159
170
  background-color 180ms ease,
160
171
  border-color 180ms ease,
161
172
  color 180ms ease;
162
173
  }
163
- @media (hover: hover) and (pointer: fine) {
164
- .wl-nick:hover {
165
- color: rgb(var(--waline-accent-rgb) / 1) !important;
166
- }
167
- }
168
174
 
169
175
  /* 评论内容样式 */
170
176
  .wl-content {
@@ -312,7 +318,7 @@
312
318
  }
313
319
 
314
320
  .wl-sort li.active {
315
- color: rgb(var(--waline-accent-rgb) / 1);
321
+ color: var(--waline-theme-color);
316
322
  font-weight: 500;
317
323
  }
318
324
 
@@ -356,7 +362,7 @@
356
362
  }
357
363
 
358
364
  .wl-power a {
359
- color: rgb(var(--waline-accent-rgb) / 0.9);
365
+ color: var(--waline-theme-color);
360
366
  text-decoration: none;
361
367
  transition:
362
368
  background-color 180ms ease,
@@ -365,7 +371,6 @@
365
371
  }
366
372
  @media (hover: hover) and (pointer: fine) {
367
373
  .wl-power a:hover {
368
- color: rgb(var(--waline-accent-rgb) / 1);
369
374
  text-decoration: underline;
370
375
  }
371
376
  }
@@ -392,13 +397,6 @@
392
397
  outline: none;
393
398
  }
394
399
 
395
- .waline-comment-container *::-moz-selection {
396
- background: rgb(var(--waline-accent-rgb) / 0.25);
397
- color: inherit;
398
- border: none;
399
- outline: none;
400
- }
401
-
402
400
  /* 响应式调整 */
403
401
  @media (max-width: 768px) {
404
402
  .waline-comment-container {
@@ -85,7 +85,9 @@ mover > :first-child {
85
85
 
86
86
  /* ===== Firefox fixes ===== */
87
87
 
88
- @-moz-document url-prefix() {
88
+ /* `-moz-appearance` only resolves in Gecko, so this replaces the deprecated
89
+ `@-moz-document url-prefix()` gate with feature detection. */
90
+ @supports (-moz-appearance: none) {
89
91
  /* Prevent flex-wrap */
90
92
  math {
91
93
  display: inline;
@@ -1,14 +1,4 @@
1
- @keyframes spin {
2
- from {
3
- transform: rotate(0deg);
4
- }
5
- to {
6
- transform: rotate(360deg);
7
- }
8
- }
9
-
10
- /* Swup animates one bounded introductory region through route-motion.ts.
11
- Long documents stay visible; the shell is never part of an outgoing layer. */
1
+ /* Page layout only: the router swaps containers without any route animation. */
12
2
  [data-stalux-home-content] {
13
3
  display: flex;
14
4
  flex-direction: column;
@@ -61,14 +51,3 @@
61
51
  }
62
52
  }
63
53
  }
64
-
65
- @layer components {
66
- @keyframes stalux-link-avatar-spin {
67
- from {
68
- transform: rotate(0deg);
69
- }
70
- to {
71
- transform: rotate(360deg);
72
- }
73
- }
74
- }
@@ -4,6 +4,57 @@ const ACCENT_COLOR_PATTERN = /^#[\da-fA-F]{6}$/u;
4
4
 
5
5
  const ACCENT_OPACITIES = [90, 85, 80, 70, 60, 50, 40, 30, 20] as const;
6
6
 
7
+ /** Page canvas the accent text has to stay legible on (see `--stalux-bg-color`). */
8
+ const CANVAS_LUMINANCE = relativeLuminance([32, 32, 32]);
9
+
10
+ /** WCAG AA for normal text is 4.5:1; keep a small margin for translucent surfaces. */
11
+ const MIN_TEXT_CONTRAST = 4.6;
12
+
13
+ function linearChannel(value: number): number {
14
+ const channel = value / 255;
15
+ return channel <= 0.04045 ? channel / 12.92 : ((channel + 0.055) / 1.055) ** 2.4;
16
+ }
17
+
18
+ function relativeLuminance([red, green, blue]: readonly number[]): number {
19
+ return (
20
+ 0.2126 * linearChannel(red ?? 0) +
21
+ 0.7152 * linearChannel(green ?? 0) +
22
+ 0.0722 * linearChannel(blue ?? 0)
23
+ );
24
+ }
25
+
26
+ function contrastOnCanvas(color: readonly number[]): number {
27
+ const luminance = relativeLuminance(color);
28
+ const [lighter, darker] =
29
+ luminance > CANVAS_LUMINANCE
30
+ ? [luminance, CANVAS_LUMINANCE]
31
+ : [CANVAS_LUMINANCE, luminance];
32
+ return (lighter + 0.05) / (darker + 0.05);
33
+ }
34
+
35
+ function toHex([red, green, blue]: readonly number[]): string {
36
+ return `#${[red, green, blue]
37
+ .map((value) => (value ?? 0).toString(16).padStart(2, "0"))
38
+ .join("")}`;
39
+ }
40
+
41
+ /**
42
+ * Lighten the accent toward white until it clears WCAG AA as body text.
43
+ * Accents that already pass keep their exact value, so default themes are unchanged.
44
+ */
45
+ export function accentTextColor(accentColor: string): string {
46
+ const hex = accentColor.slice(1);
47
+ const channels = [0, 2, 4].map((offset) => Number.parseInt(hex.slice(offset, offset + 2), 16));
48
+ if (contrastOnCanvas(channels) >= MIN_TEXT_CONTRAST) return accentColor.toLowerCase();
49
+
50
+ for (let step = 1; step <= 20; step++) {
51
+ const mix = step / 20;
52
+ const lifted = channels.map((value) => Math.round(value + (255 - value) * mix));
53
+ if (contrastOnCanvas(lifted) >= MIN_TEXT_CONTRAST) return toHex(lifted);
54
+ }
55
+ return "#ffffff";
56
+ }
57
+
7
58
  /** Build the CSS custom properties shared by Stalux and its comment styles. */
8
59
  export function getAccentColorStyle(accentColor = "#EAB308"): string {
9
60
  if (!ACCENT_COLOR_PATTERN.test(accentColor)) {
@@ -19,6 +70,7 @@ export function getAccentColorStyle(accentColor = "#EAB308"): string {
19
70
  return [
20
71
  `--stalux-accent-color: ${accentColor.toLowerCase()}`,
21
72
  `--stalux-accent-rgb: ${rgb}`,
73
+ `--accent-text: ${accentTextColor(accentColor)}`,
22
74
  ...ACCENT_OPACITIES.map(
23
75
  (opacity) =>
24
76
  `${productionStyleName(`--accent-${opacity}p`)}: rgb(${red} ${green} ${blue} / ${opacity / 100})`,