@xingwangzhe/stalux 1.56.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.
- package/package.json +4 -12
- package/src/components/stalux/archives/archivesList.astro +1 -1
- package/src/components/stalux/categories/categoriesCard.astro +1 -1
- package/src/components/stalux/posts/PostTaxonomy.astro +1 -1
- package/src/components/stalux/posts/postCard.astro +3 -3
- package/src/components/stalux/tags/tagHeader.astro +2 -2
- package/src/components/stalux/tags/tagsCloud.astro +2 -2
- package/src/index.ts +39 -13
- package/src/internal/html-output.ts +18 -0
- package/src/internal/modern-css.ts +1 -0
- package/src/internal/route-hrefs.ts +47 -0
- package/src/internal/social-card-data.ts +1 -1
- package/src/internal/style-names.generated.ts +87 -94
- package/src/internal/swup-options.ts +98 -0
- package/src/layouts/Stalux.astro +0 -1
- package/src/pages/404.astro +1 -1
- package/src/pages/api/posts.json.ts +1 -1
- package/src/pages/atom.xml.ts +2 -0
- package/src/pages/posts/[post].md.ts +2 -2
- package/src/pages/rss.xml.ts +2 -0
- package/src/scripts/analytics-runtime.ts +4 -9
- package/src/scripts/list-reveal.ts +3 -15
- package/src/scripts/module-motion.ts +2 -3
- package/src/scripts/navigation-scripts.ts +12 -7
- package/src/scripts/route-guards.ts +200 -0
- package/src/scripts/swup-internals.d.ts +15 -0
- package/src/styles/base.css +0 -8
- package/src/styles/generated-prose.css +1 -1
- package/src/styles/generated-waline.css +1 -1
- package/src/styles/generated.css +1 -1
- package/src/styles/integrations.css +14 -16
- package/src/styles/math.css +3 -1
- package/src/styles/motion.css +1 -22
- package/src/utils/accent-color.ts +52 -0
- package/src/utils/ai-discovery.ts +1 -1
- package/src/utils/feed.ts +1 -1
- package/src/utils/public-routes.ts +14 -4
- package/src/utils/seo-document.ts +3 -2
- package/src/scripts/route-motion.ts +0 -340
- package/src/scripts/route-out.ts +0 -63
- package/src/scripts/smooth-scroll.ts +0 -139
- package/src/scripts/swup-router.ts +0 -580
- package/src/scripts/view-transitions.ts +0 -4
- package/src/utils/route-motion-policy.ts +0 -72
package/src/pages/404.astro
CHANGED
|
@@ -25,7 +25,7 @@ const { t } = createTranslator(siteConfig.lang || "zh-CN");
|
|
|
25
25
|
<p data-stalux-motion-content>{t("page404.pageNotFound")}</p>
|
|
26
26
|
<p class="agent-recovery" data-stalux-motion-content>
|
|
27
27
|
This URL does not exist. Continue at the <a href="/">home page</a>, browse the
|
|
28
|
-
<a href="/archives
|
|
28
|
+
<a href="/archives">archive</a>, read <a href="/llms.txt">llms.txt</a>, or inspect
|
|
29
29
|
the
|
|
30
30
|
<a href="/sitemap-index.xml">sitemap</a>
|
|
31
31
|
to find published content.
|
|
@@ -29,7 +29,7 @@ export const GET: APIRoute = async ({ logger }) => {
|
|
|
29
29
|
categories: post.data.categories ?? [],
|
|
30
30
|
desc: post.data.desc ?? "",
|
|
31
31
|
wordCount: descriptions.get(String(post.data.abbrlink))?.wordCount ?? 0,
|
|
32
|
-
url: sitePath(`posts/${encodeURIComponent(String(post.data.abbrlink))}
|
|
32
|
+
url: sitePath(`posts/${encodeURIComponent(String(post.data.abbrlink))}`),
|
|
33
33
|
}));
|
|
34
34
|
|
|
35
35
|
return new Response(JSON.stringify(payload), {
|
package/src/pages/atom.xml.ts
CHANGED
|
@@ -19,6 +19,8 @@ export const GET: APIRoute = async ({ logger }) => {
|
|
|
19
19
|
title: stalux?.title || "Stalux Blog",
|
|
20
20
|
description: stalux?.description || "A blog powered by Stalux theme",
|
|
21
21
|
site: stalux.url,
|
|
22
|
+
// 页面路由不带尾斜杠,feed 里的条目链接要与之保持一致
|
|
23
|
+
trailingSlash: false,
|
|
22
24
|
items,
|
|
23
25
|
customData: `<language>${langToFeedLanguage(lang)}</language>\n<copyright>${t("rss.copyright")}</copyright>`,
|
|
24
26
|
xmlns: {
|
|
@@ -17,8 +17,8 @@ function generateCCFooter(post: CollectionEntry<"posts">, config: ConfigMap): st
|
|
|
17
17
|
const baseUrl = (siteConfig.url as string) || "";
|
|
18
18
|
const author = (config.get("author")?.name as string) || "";
|
|
19
19
|
const postUrl = baseUrl
|
|
20
|
-
? `${baseUrl}/posts/${post.data.abbrlink}
|
|
21
|
-
: `/posts/${post.data.abbrlink}
|
|
20
|
+
? `${baseUrl}/posts/${post.data.abbrlink}`
|
|
21
|
+
: `/posts/${post.data.abbrlink}`;
|
|
22
22
|
|
|
23
23
|
const lines: string[] = [];
|
|
24
24
|
lines.push(`**${t("post.author")}**${author}`);
|
package/src/pages/rss.xml.ts
CHANGED
|
@@ -19,6 +19,8 @@ export const GET: APIRoute = async ({ logger }) => {
|
|
|
19
19
|
title: stalux?.title || "Stalux Blog",
|
|
20
20
|
description: stalux?.description || "A blog powered by Stalux theme",
|
|
21
21
|
site: stalux.url,
|
|
22
|
+
// 页面路由不带尾斜杠,feed 里的条目链接要与之保持一致
|
|
23
|
+
trailingSlash: false,
|
|
22
24
|
items,
|
|
23
25
|
customData: `<language>${langToFeedLanguage(lang)}</language>\n<copyright>${t("rss.copyright")}</copyright>`,
|
|
24
26
|
xmlns: {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/** Async native SDKs keep live DOM events out of worker proxies during Astro swaps. */
|
|
2
2
|
|
|
3
3
|
import { createClientLogger } from "./logger";
|
|
4
|
-
import { prepareRouteMotion, type RouteMotionEvent } from "./route-motion";
|
|
5
4
|
|
|
6
5
|
const logger = createClientLogger("analytics");
|
|
7
6
|
|
|
@@ -32,7 +31,6 @@ const state = window.__staluxAnalyticsRuntime;
|
|
|
32
31
|
state.scripts ??= new Map();
|
|
33
32
|
|
|
34
33
|
type GooglePage = {
|
|
35
|
-
ready: Promise<unknown>;
|
|
36
34
|
payload: {
|
|
37
35
|
page_location: string;
|
|
38
36
|
page_path: string;
|
|
@@ -41,7 +39,6 @@ type GooglePage = {
|
|
|
41
39
|
};
|
|
42
40
|
};
|
|
43
41
|
const googlePages: GooglePage[] = [];
|
|
44
|
-
let transitionReady: Promise<unknown> = Promise.resolve();
|
|
45
42
|
let googleScheduled = false;
|
|
46
43
|
let googleSchedule = 0;
|
|
47
44
|
let googleTimer: ReturnType<typeof setTimeout> | undefined;
|
|
@@ -77,9 +74,9 @@ function scheduleGooglePages(): void {
|
|
|
77
74
|
// A burst of visits stays FIFO, with a separate task for each SDK call.
|
|
78
75
|
scheduleGooglePages();
|
|
79
76
|
};
|
|
80
|
-
// A queued visit can outlive
|
|
81
|
-
//
|
|
82
|
-
void Promise.
|
|
77
|
+
// A queued visit can outlive the page it belongs to; only the paint
|
|
78
|
+
// ordering of the current document matters here.
|
|
79
|
+
void Promise.resolve(page).then(() => {
|
|
83
80
|
if (schedule !== googleSchedule) return;
|
|
84
81
|
// Let the routed content paint after native rendering resumes and its own
|
|
85
82
|
// motion is installed. The timer also covers throttled/background frames.
|
|
@@ -336,7 +333,6 @@ function trackGooglePage(): void {
|
|
|
336
333
|
// Capture the visit before yielding: another navigation must not replace its
|
|
337
334
|
// URL, title or virtual referrer while the SDK is waiting for its task.
|
|
338
335
|
googlePages.push({
|
|
339
|
-
ready: transitionReady,
|
|
340
336
|
payload: {
|
|
341
337
|
page_location: window.location.href,
|
|
342
338
|
page_path: window.location.pathname + window.location.search,
|
|
@@ -439,11 +435,10 @@ if (state.installed && (!state.native || state.revision !== 4)) {
|
|
|
439
435
|
state.native = true;
|
|
440
436
|
state.revision = 4;
|
|
441
437
|
state.installed = true;
|
|
442
|
-
document.addEventListener("astro:before-swap", (
|
|
438
|
+
document.addEventListener("astro:before-swap", () => {
|
|
443
439
|
pendingEarlyView++;
|
|
444
440
|
earlyViewPending = false;
|
|
445
441
|
viewedEarly = false;
|
|
446
|
-
transitionReady = prepareRouteMotion(event as Event & RouteMotionEvent).ready;
|
|
447
442
|
// Invalidate an older page's frames, timer and posted task before this
|
|
448
443
|
// incoming snapshot starts. Its captured visit remains in the FIFO.
|
|
449
444
|
cancelGoogleSchedule();
|
|
@@ -11,10 +11,6 @@ const MAX_ITEMS = 16;
|
|
|
11
11
|
const STAGGER_MS = 22;
|
|
12
12
|
const MAX_DELAY_MS = 200;
|
|
13
13
|
const DURATION_MS = 190;
|
|
14
|
-
// When a route cue is already moving the page body, the sheet waits for it to
|
|
15
|
-
// mostly settle before unrolling. Starting both at once makes the rows wipe
|
|
16
|
-
// open while the whole page is still semi-transparent, which reads as a smudge.
|
|
17
|
-
const ROUTE_LEAD_IN_MS = 75;
|
|
18
14
|
// Strong ease-out: the row arrives fast and settles softly. The built-in
|
|
19
15
|
// ease-out is too weak to read at this size.
|
|
20
16
|
const EASING = "cubic-bezier(0.23, 1, 0.32, 1)";
|
|
@@ -59,9 +55,7 @@ function canReveal(): boolean {
|
|
|
59
55
|
if (typeof IntersectionObserver !== "function") return false;
|
|
60
56
|
if (typeof document === "undefined") return false;
|
|
61
57
|
if (document.hidden) return false;
|
|
62
|
-
|
|
63
|
-
// Returning to a history entry restores what the reader already saw.
|
|
64
|
-
return document.documentElement.dataset.staluxVtPreset !== "restore";
|
|
58
|
+
return !window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
65
59
|
}
|
|
66
60
|
|
|
67
61
|
function groups(): Element[] {
|
|
@@ -102,11 +96,6 @@ function staggerOf(index: number): number {
|
|
|
102
96
|
return Math.min(index * STAGGER_MS, MAX_DELAY_MS);
|
|
103
97
|
}
|
|
104
98
|
|
|
105
|
-
function leadIn(): number {
|
|
106
|
-
// A route cue leaves its preset on the document element while it runs.
|
|
107
|
-
return document.documentElement.dataset.staluxVtPreset ? ROUTE_LEAD_IN_MS : 0;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
99
|
/**
|
|
111
100
|
* Hold every incoming row on the wipe's first frame the moment the router has
|
|
112
101
|
* its new document, before the browser paints it.
|
|
@@ -201,7 +190,6 @@ export function mountListReveal(): (() => void) | undefined {
|
|
|
201
190
|
};
|
|
202
191
|
const reveal = (container: Element) => {
|
|
203
192
|
if (document.hidden || preference.matches) return;
|
|
204
|
-
const lead = leadIn();
|
|
205
193
|
for (const [index, row] of rows(container).entries()) {
|
|
206
194
|
if (typeof row.animate !== "function") continue;
|
|
207
195
|
// Prefer the effect created during the swap: it already owns the
|
|
@@ -216,7 +204,7 @@ export function mountListReveal(): (() => void) | undefined {
|
|
|
216
204
|
primed?.animation ??
|
|
217
205
|
row.animate(UNROLL_KEYFRAMES, {
|
|
218
206
|
duration: DURATION_MS,
|
|
219
|
-
delay:
|
|
207
|
+
delay: staggerOf(index),
|
|
220
208
|
easing: EASING,
|
|
221
209
|
// Hidden during the stagger delay instead of popping in.
|
|
222
210
|
fill: "backwards",
|
|
@@ -224,7 +212,7 @@ export function mountListReveal(): (() => void) | undefined {
|
|
|
224
212
|
if (primed) {
|
|
225
213
|
// The stagger is counted from now, not from the swap.
|
|
226
214
|
primed.animation.effect?.updateTiming({
|
|
227
|
-
delay:
|
|
215
|
+
delay: primed.stagger,
|
|
228
216
|
});
|
|
229
217
|
primed.animation.play();
|
|
230
218
|
}
|
|
@@ -27,13 +27,12 @@ export function mountModuleMotion(): (() => void) | undefined {
|
|
|
27
27
|
// so the observer's target needs no assertion.
|
|
28
28
|
const element = entry.target;
|
|
29
29
|
observer.unobserve(element);
|
|
30
|
-
// The router owns
|
|
31
|
-
//
|
|
30
|
+
// The router owns the swap. Do not layer an observer entry over
|
|
31
|
+
// it or make long comments slide.
|
|
32
32
|
if (
|
|
33
33
|
document.hidden ||
|
|
34
34
|
motionPreference.matches ||
|
|
35
35
|
document.documentElement.classList.contains("is-changing") ||
|
|
36
|
-
document.documentElement.dataset.staluxVtPreset ||
|
|
37
36
|
// A persisted node kept its identity across the visit; it was
|
|
38
37
|
// never rebuilt, so re-entering it would be a second cue.
|
|
39
38
|
element.closest("[data-swup-persist]") ||
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import SwupScriptsPlugin from "@swup/scripts-plugin";
|
|
2
1
|
import { createClientLogger } from "./logger";
|
|
3
2
|
|
|
4
3
|
const logger = createClientLogger("navigation-scripts");
|
|
@@ -28,12 +27,18 @@ const javascript = new Set([
|
|
|
28
27
|
]);
|
|
29
28
|
|
|
30
29
|
/**
|
|
31
|
-
*
|
|
32
|
-
* needs an ordered completion barrier and once-per-session
|
|
33
|
-
*
|
|
34
|
-
*
|
|
30
|
+
* The theme owns script execution instead of the swup scripts plugin: Astro's
|
|
31
|
+
* page-load event needs an ordered completion barrier and once-per-session
|
|
32
|
+
* semantics. The plugin's whole-document pass would also replay analytics SDKs
|
|
33
|
+
* and the scripts of retained shells on every visit.
|
|
35
34
|
*/
|
|
36
|
-
|
|
35
|
+
function runScript(from: HTMLScriptElement): HTMLScriptElement {
|
|
36
|
+
const script = document.createElement("script");
|
|
37
|
+
for (const { name, value } of from.attributes) script.setAttribute(name, value);
|
|
38
|
+
script.textContent = from.textContent;
|
|
39
|
+
from.replaceWith(script);
|
|
40
|
+
return script;
|
|
41
|
+
}
|
|
37
42
|
|
|
38
43
|
function describeScript(script: HTMLScriptElement, base: string) {
|
|
39
44
|
const type = (script.getAttribute("type") ?? "").trim().toLowerCase();
|
|
@@ -112,7 +117,7 @@ export function prepareNavigationScripts(
|
|
|
112
117
|
);
|
|
113
118
|
if (copy) copy.replaceWith(inert);
|
|
114
119
|
else (item.head ? document.head : document.body).append(inert);
|
|
115
|
-
const script =
|
|
120
|
+
const script = runScript(inert);
|
|
116
121
|
script.async = false;
|
|
117
122
|
executedNodes.add(script);
|
|
118
123
|
let observed = script;
|
|
@@ -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
|
}
|
package/src/styles/base.css
CHANGED
|
@@ -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:
|
|
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*/
|