@zaisma/game-server 1.25.0 → 1.26.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/bench/glass.js +332 -69
- package/bin/node-parts.js +78 -1
- package/bin/node.js +24 -1
- package/package.json +1 -1
- package/src/index.d.ts +1 -1
- package/src/requests.d.ts +13 -0
- package/src/room-calls.d.ts +35 -1
- package/src/room-calls.js +35 -1
- package/src/room.d.ts +27 -1
- package/src/room.js +28 -2
package/bench/glass.js
CHANGED
|
@@ -6309,8 +6309,16 @@ var ERROR_CODES = {
|
|
|
6309
6309
|
too_many_secrets: { httpStatus: 403, meaning: "The game has 50 secrets, the most it can have.", messageForPeople: "The game has 50 secrets, the most it can have. Delete one to add another." },
|
|
6310
6310
|
secrets_unavailable: { httpStatus: 503, meaning: "The game's secrets didn't answer.", messageForPeople: "The game's secrets didn't answer. Try again in a minute." },
|
|
6311
6311
|
no_kept_room: { httpStatus: 404, meaning: "The game has no kept room with that code.", messageForPeople: "The game has no kept room with that code." },
|
|
6312
|
+
no_kept_room_restore: { httpStatus: 404, meaning: "The kept room has no restore with that ID in the last 30 days.", messageForPeople: "This world has no such restore in the last 30 days." },
|
|
6313
|
+
no_kept_room_restore_batch: { httpStatus: 404, meaning: "The game has no restore of every kept room with that ID in the last 30 days.", messageForPeople: "This game has no such restore of its kept rooms in the last 30 days." },
|
|
6314
|
+
kept_room_restore_unavailable: { httpStatus: 501, meaning: "This Zaisma's rooms can't go back in time: their storage keeps no history, like a local preview.", messageForPeople: "This copy of Zaisma keeps no history of its kept rooms, so they can't go back." },
|
|
6315
|
+
kept_room_restore_batch_running: { httpStatus: 409, meaning: "The game's worlds are going back to a moment already, and one batch runs at a time.", messageForPeople: "This game's kept rooms are going back already. Wait for it to finish." },
|
|
6316
|
+
kept_room_copies_unavailable: { httpStatus: 501, meaning: "This Zaisma can't read its worlds' copies, so an erased world can't come back.", messageForPeople: "This copy of Zaisma can't read its copies of kept rooms, so this one can't come back." },
|
|
6317
|
+
no_kept_room_copy: { httpStatus: 404, meaning: "No copy of the deleted world is left: a copy lasts about 28 days after a world is deleted.", messageForPeople: "No copy of this world is left to bring back." },
|
|
6318
|
+
room_code_in_use: { httpStatus: 409, meaning: "Another room of the game has that code now, so the deleted world can't come back under it.", messageForPeople: "Another room has this code now. End it first, then bring this world back." },
|
|
6319
|
+
game_storage_full: { httpStatus: 403, meaning: "The deleted world doesn't fit in the 10 GB a game can keep.", messageForPeople: "This world doesn't fit in the game's 10 GB now. Delete kept rooms or rows first." },
|
|
6312
6320
|
kept_room_not_waiting: { httpStatus: 409, meaning: "The kept room isn't deleted and waiting to be erased, so there's nothing to bring back or erase now.", messageForPeople: "This world isn't waiting to be erased." },
|
|
6313
|
-
kept_room_erasing: { httpStatus: 409, meaning: "The kept room's week is over and its erasing has started
|
|
6321
|
+
kept_room_erasing: { httpStatus: 409, meaning: "The kept room's week is over and its erasing has started: in a minute it comes back only from its last copy.", messageForPeople: "This world is being erased. Try again in a minute, to bring it back from its last copy." },
|
|
6314
6322
|
// Reaching live rooms
|
|
6315
6323
|
no_room: { httpStatus: 404, meaning: "The game has no live room with that code on Zaisma.", messageForPeople: "No room with that code is running now." },
|
|
6316
6324
|
no_player_in_room: { httpStatus: 404, meaning: "That player isn't in the room now.", messageForPeople: "That player isn't in the room now." },
|
|
@@ -6440,7 +6448,7 @@ var ADMIN_ERROR_CODES = {
|
|
|
6440
6448
|
decision_refused: { httpStatus: 409, meaning: "The decision didn't go through, like putting back an update that matched known abuse material.", messageForPeople: "The decision didn't go through." },
|
|
6441
6449
|
bad_why: { httpStatus: 400, meaning: "why is blank or over 500 characters.", messageForPeople: "The reason is 1 to 500 characters." },
|
|
6442
6450
|
// Notices
|
|
6443
|
-
bad_notice_kind: { httpStatus: 400, meaning: "notice_kind isn't copyright or
|
|
6451
|
+
bad_notice_kind: { httpStatus: 400, meaning: "notice_kind isn't copyright, defamation or trademark.", messageForPeople: "A notice is about copyright, defamation or a trademark." },
|
|
6444
6452
|
bad_country_code: { httpStatus: 400, meaning: "country_code isn't a country's two-letter code (ISO 3166-1 alpha-2), like GB.", messageForPeople: "A country is its two-letter code, like GB." },
|
|
6445
6453
|
// Precedents
|
|
6446
6454
|
no_precedent: { httpStatus: 404, meaning: "There's no precedent with that ID.", messageForPeople: "There's no such precedent." },
|
|
@@ -6513,7 +6521,7 @@ var ApiError = class extends Error {
|
|
|
6513
6521
|
};
|
|
6514
6522
|
|
|
6515
6523
|
// ../core/src/ids.ts
|
|
6516
|
-
var ID_KINDS = ["game", "version", "image", "shader", "tester", "topic", "post", "report", "media", "precedent", "review_precedent", "player", "owner", "save_copy", "play_ticket", "room_key", "sign_in_app", "chat_group", "player_tag", "webhook", "webhook_event", "chat_review", "mcp_client", "database_restore", "announcement", "top_up", "credit_entry", "purchase", "spending_request", "game_deletion_request", "pending_refund", "scheduled_room_message", "ban_match", "review_batch"];
|
|
6524
|
+
var ID_KINDS = ["game", "version", "image", "shader", "tester", "topic", "post", "report", "media", "precedent", "review_precedent", "player", "owner", "save_copy", "play_ticket", "room_key", "sign_in_app", "chat_group", "player_tag", "webhook", "webhook_event", "chat_review", "mcp_client", "database_restore", "kept_room_restore", "kept_room_restore_batch", "announcement", "top_up", "credit_entry", "purchase", "spending_request", "game_deletion_request", "pending_refund", "scheduled_room_message", "ban_match", "review_batch"];
|
|
6517
6525
|
function newRandomPart() {
|
|
6518
6526
|
const bytes = crypto.getRandomValues(new Uint8Array(12));
|
|
6519
6527
|
return Array.from(bytes, (byte) => byte.toString(36).padStart(2, "0")).join("").slice(0, 20);
|
|
@@ -6814,6 +6822,7 @@ var CONTENT_RULES = {
|
|
|
6814
6822
|
real_people: "Private details about real people, real threats, or calls for real violence.",
|
|
6815
6823
|
copyright: "Other people's games, art, music or characters used without permission.",
|
|
6816
6824
|
defamation: "False claims that a real private person committed a crime.",
|
|
6825
|
+
trademark: "Other people's trademarks used so that players would think their owner made or backs the game.",
|
|
6817
6826
|
personal_details: "Asking players for personal details like emails, real names, birthdays or location inside the game. Every player has a Zaisma ID and name; games with their own accounts link them through Sign in with Zaisma, and anything more happens on the developer's own site.",
|
|
6818
6827
|
chat: "Typed chat between players outside Zaisma's chat hosting. In Zaisma rooms, chat goes through room.chat; on your own server, through canChat and checkChat. Preset phrases and emotes are always fine.",
|
|
6819
6828
|
crypto: "Cryptocurrency other than Bitcoin: using or promoting other coins, tokens, NFTs or airdrops. A story that mentions one is fine. Bitcoin games are welcome, but not investment advice, mining on the player's device, paying players sats, or asking for seed phrases or permission to spend from a wallet.",
|
|
@@ -6866,6 +6875,13 @@ var CONTENT_RULE_DETAILS = {
|
|
|
6866
6875
|
fine: "satire, jokes and wild stories about politicians, celebrities and other public figures; crimes someone was publicly charged with or convicted of; made-up people.",
|
|
6867
6876
|
notFine: "a game that names your neighbor Emma Clarke as the town's thief, or says a real classmate sells drugs."
|
|
6868
6877
|
},
|
|
6878
|
+
trademark: {
|
|
6879
|
+
title: "Trademark",
|
|
6880
|
+
test: "Does the game's name, a picture of it or anything in it use someone else's registered trademark so that players would think its owner made or backs the game?",
|
|
6881
|
+
explanation: "Zaisma acts on it only when the owner sends a notice (see Trademark notices); Zaisma does not judge it itself.",
|
|
6882
|
+
fine: "a brand mentioned in a game's story or description, parody, and a common word that happens to be someone's trademark.",
|
|
6883
|
+
notFine: `calling your game "Minecraft Lava Parkour", or a football club's crest as your game's logo.`
|
|
6884
|
+
},
|
|
6869
6885
|
personal_details: {
|
|
6870
6886
|
title: "Personal details",
|
|
6871
6887
|
test: "Does the game ask players for an email, real name, birthday, age, location, phone number or password?",
|
|
@@ -6898,7 +6914,7 @@ var CONTENT_RULE_DETAILS = {
|
|
|
6898
6914
|
notFine: "scripts that open your game in a thousand tabs, click farms, or bots that fill rooms."
|
|
6899
6915
|
}
|
|
6900
6916
|
};
|
|
6901
|
-
var NOTICE_ONLY_CONTENT_RULES = ["copyright", "defamation"];
|
|
6917
|
+
var NOTICE_ONLY_CONTENT_RULES = ["copyright", "defamation", "trademark"];
|
|
6902
6918
|
var REPORT_ONLY_CONTENT_RULES = ["real_people"];
|
|
6903
6919
|
var REVIEWED_CONTENT_RULES = Object.keys(CONTENT_RULES).filter((rule) => !NOTICE_ONLY_CONTENT_RULES.includes(rule) && !REPORT_ONLY_CONTENT_RULES.includes(rule));
|
|
6904
6920
|
var ALLOWED_CONTENT = [
|
|
@@ -7134,6 +7150,13 @@ var REVIEW_CODES = {
|
|
|
7134
7150
|
fix: `Take out what the notice names and publish a fixed version (upload_files, then publish_version): ${NOTICE_CHECKED} If the claim is true or isn't about a private person, send a counter-notice to safety@zaisma.com instead; zaisma.com/legal/defamation says what to put in it.`,
|
|
7135
7151
|
hasOwnMessage: true
|
|
7136
7152
|
},
|
|
7153
|
+
trademark_notice: {
|
|
7154
|
+
meaning: "The owner of a registered trademark sent a notice, so players can't open the game; the message says what it names.",
|
|
7155
|
+
messageForPeople: "A trademark notice names something on or in the game, so players can't open it. Change it, and a person at Zaisma shows the game again, usually within a day. If you own the mark or may use it, send a counter-notice to dmca@zaisma.com.",
|
|
7156
|
+
contentRule: "trademark",
|
|
7157
|
+
fix: `Change what the notice names. In the game's files, publish a fixed version (upload_files, then publish_version): ${NOTICE_CHECKED} In the title or a picture, change it with update_game or add_image, then message_zaisma with the game_slug so a person shows the game again. If you own the mark or may use it, send a counter-notice to dmca@zaisma.com instead, with "Trademark notice" in the subject; zaisma.com/legal/trademark says what to put in it.`,
|
|
7158
|
+
hasOwnMessage: true
|
|
7159
|
+
},
|
|
7137
7160
|
country_law_notice: {
|
|
7138
7161
|
meaning: "A notice says the game breaks a law of one country that US law allows, so players in that country can't open it, and everyone else still can; the message says which law and what it names.",
|
|
7139
7162
|
messageForPeople: "A notice says the game breaks a law of one country, so players there can't open it; everyone else still can. Take out what it names and publish a fixed version, and a person at Zaisma lifts the block, usually within a day.",
|
|
@@ -7157,7 +7180,7 @@ var REVIEW_CODES = {
|
|
|
7157
7180
|
meaning: "A person at Zaisma didn't approve the image; the message says why.",
|
|
7158
7181
|
messageForPeople: "A person at Zaisma didn't approve this picture for the reason given. Send a different one in Add image: covers and screenshots show the game itself.",
|
|
7159
7182
|
contentRule: null,
|
|
7160
|
-
fix: "Send a different one with add_image. Covers and screenshots show the actual game, with no fake rewards
|
|
7183
|
+
fix: "Send a different one with add_image. Covers and screenshots show the actual game, with no fake rewards.",
|
|
7161
7184
|
hasOwnMessage: true,
|
|
7162
7185
|
isRulePicked: true
|
|
7163
7186
|
},
|
|
@@ -7190,13 +7213,6 @@ var REVIEW_CODES = {
|
|
|
7190
7213
|
fix: `Send the picture without it with add_image. ${BACK_ON_LISTS} ${COVER_GUIDE} ${IF_THE_CHECK_IS_WRONG}`,
|
|
7191
7214
|
hasOwnMessage: true
|
|
7192
7215
|
},
|
|
7193
|
-
famous_name: {
|
|
7194
|
-
meaning: "The cover, square cover, share picture or title shows a famous character, logo or name, from a film, show, game, brand or club, that the developer doesn't own; the message names it.",
|
|
7195
|
-
messageForPeople: "A picture or the title shows a famous character, logo or name the game doesn't own. Use your own in Add image or the game's details. If you own it or have permission, message Zaisma.",
|
|
7196
|
-
contentRule: null,
|
|
7197
|
-
fix: `Use your own characters and name with add_image or update_game. Only obvious ones count, and the game itself may borrow (Zaisma acts on that only when the owner sends a notice). If you own it or have permission, message_zaisma with the game_slug. ${BACK_ON_LISTS} ${COVER_GUIDE}`,
|
|
7198
|
-
hasOwnMessage: true
|
|
7199
|
-
},
|
|
7200
7216
|
cover_not_from_game: {
|
|
7201
7217
|
meaning: "The cover, square cover or share picture is built around a character, creature or thing that doesn't appear in any of the game's screenshots; the message says what.",
|
|
7202
7218
|
messageForPeople: "The picture is built around something that isn't in any screenshot. Send a cover of something players meet in the game in Add image, or add a screenshot that shows it.",
|
|
@@ -7246,13 +7262,6 @@ var REVIEW_CODES = {
|
|
|
7246
7262
|
fix: `Send the background without it (add_image, or add_shader for a shader). ${COVER_GUIDE} ${IF_THE_CHECK_IS_WRONG}`,
|
|
7247
7263
|
hasOwnMessage: true
|
|
7248
7264
|
},
|
|
7249
|
-
famous_name_on_background: {
|
|
7250
|
-
meaning: "A background shows a famous character, logo or name, from a film, show, game, brand or club, so it doesn't show; the message names it.",
|
|
7251
|
-
messageForPeople: "The background shows a famous character, logo or name. Send one of the game's own setting in Background. If you own it or have permission, message Zaisma.",
|
|
7252
|
-
contentRule: null,
|
|
7253
|
-
fix: `Send a background of your game's own world (add_image, or add_shader for a shader). Only obvious ones count. If you own it or have permission, message_zaisma with the game_slug. ${COVER_GUIDE}`,
|
|
7254
|
-
hasOwnMessage: true
|
|
7255
|
-
},
|
|
7256
7265
|
// The shader check (Backgrounds in docs/DEVELOPER-API.md): a shader is drawn before anyone sees it
|
|
7257
7266
|
shader_does_not_compile: {
|
|
7258
7267
|
meaning: "The shader didn't compile; the message gives the first compiler error.",
|
|
@@ -7288,7 +7297,8 @@ function decidedReason(code, contentRule, words3) {
|
|
|
7288
7297
|
}
|
|
7289
7298
|
var NOTICE_CODES = {
|
|
7290
7299
|
copyright: { code: "copyright_notice", contentRule: "copyright" },
|
|
7291
|
-
defamation: { code: "defamation_notice", contentRule: "defamation" }
|
|
7300
|
+
defamation: { code: "defamation_notice", contentRule: "defamation" },
|
|
7301
|
+
trademark: { code: "trademark_notice", contentRule: "trademark" }
|
|
7292
7302
|
};
|
|
7293
7303
|
var NOTICE_KINDS = Object.keys(NOTICE_CODES);
|
|
7294
7304
|
var isNoticeKind = (candidate) => typeof candidate === "string" && Object.hasOwn(NOTICE_CODES, candidate);
|
|
@@ -7956,6 +7966,8 @@ var SECURITY_EVENT_DESCRIPTIONS = {
|
|
|
7956
7966
|
kept_room_deleted: "Deleted a kept room",
|
|
7957
7967
|
kept_rooms_deleted: "A key or AI app deleted a kept room",
|
|
7958
7968
|
kept_room_brought_back: "Brought a deleted kept room back",
|
|
7969
|
+
kept_room_restored: "Restored a kept room's world to an earlier time",
|
|
7970
|
+
kept_rooms_restored: "A key or AI app restored a kept room's world to an earlier time",
|
|
7959
7971
|
kept_room_erase_asked: "Asked to erase a kept room at once",
|
|
7960
7972
|
kept_room_erased_now: "Erased a kept room at once",
|
|
7961
7973
|
room_player_kicked: "Removed a player from a live room",
|
|
@@ -8647,6 +8659,7 @@ var FILE_LIMITS = {
|
|
|
8647
8659
|
maximumVersionsPerDay: 100,
|
|
8648
8660
|
maximumPatchNotesCharacterCount: 2e3
|
|
8649
8661
|
};
|
|
8662
|
+
var MAXIMUM_RAW_BODY_SIZE_BYTES = 110 * 1024 * 1024;
|
|
8650
8663
|
var KEPT_VERSION_COUNT = 5;
|
|
8651
8664
|
var blobKey = (sha256) => `blobs/${sha256}`;
|
|
8652
8665
|
var ownedBlobKey = (ownerId, sha256) => `owned/${ownerId}/${sha256}`;
|
|
@@ -8681,6 +8694,28 @@ var BROTLI_LIMITS = {
|
|
|
8681
8694
|
|
|
8682
8695
|
// ../core/src/game-database.ts
|
|
8683
8696
|
var MAXIMUM_DATABASE_SIZE_BYTES = 10 * 1024 ** 3;
|
|
8697
|
+
var DATABASE_RESTORE_LIMITS = {
|
|
8698
|
+
restorableDurationDays: 30,
|
|
8699
|
+
marginMs: 6e4,
|
|
8700
|
+
listedRestoreCount: 50
|
|
8701
|
+
};
|
|
8702
|
+
|
|
8703
|
+
// ../core/src/kept-room-restores.ts
|
|
8704
|
+
var KEPT_ROOM_RESTORE_LIMITS = {
|
|
8705
|
+
restorableDurationDays: DATABASE_RESTORE_LIMITS.restorableDurationDays,
|
|
8706
|
+
marginMs: DATABASE_RESTORE_LIMITS.marginMs,
|
|
8707
|
+
listedRestoreCount: 50,
|
|
8708
|
+
/** Worlds a batch asks for per queue message, and how many of them at once. */
|
|
8709
|
+
batchPageRoomCount: 200,
|
|
8710
|
+
restoredAtOnceCount: 50,
|
|
8711
|
+
/** Failed room codes a batch names. */
|
|
8712
|
+
listedFailedRoomCount: 100,
|
|
8713
|
+
/** How long a world's last copy lasts after it's deleted: the bucket's lock. */
|
|
8714
|
+
copyKeptDurationDays: 28,
|
|
8715
|
+
listedDeletedRoomCount: 200,
|
|
8716
|
+
/** What a game brings back from the copies in a day: Backblaze charges about a cent a GB to read, on nobody's meter. */
|
|
8717
|
+
maximumBroughtBackSizeBytesPerDay: 100 * 1024 ** 3
|
|
8718
|
+
};
|
|
8684
8719
|
|
|
8685
8720
|
// ../core/src/hosting.ts
|
|
8686
8721
|
var monthStartDateOf = (nowMs = Date.now()) => `${new Date(nowMs).toISOString().slice(0, 7)}-01`;
|
|
@@ -9131,6 +9166,31 @@ function roomCallChecksParts() {
|
|
|
9131
9166
|
if (typeof message2 !== "string") throw mistake("room.end", "room.end's message must be text.", "Give the text players see, or leave it out.");
|
|
9132
9167
|
return message2.slice(0, limits2.maximumKickMessageCharacterCount);
|
|
9133
9168
|
};
|
|
9169
|
+
const checkRestoreToAt = (restoreOptions, call3) => {
|
|
9170
|
+
const fix = 'Give { restoreToAt } as an ISO time from the last 30 days, like "2026-10-18T14:05:00Z"; server.listKeptRoomRestores says the earliest.';
|
|
9171
|
+
const { restoreToAt } = closed(restoreOptions, ["restoreToAt"], call3);
|
|
9172
|
+
const atMs = typeof restoreToAt === "string" && /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2})$/.test(restoreToAt) ? Date.parse(restoreToAt) : NaN;
|
|
9173
|
+
if (!Number.isFinite(atMs)) throw mistake(call3, call3 + " needs restoreToAt as an ISO time.", fix);
|
|
9174
|
+
return atMs;
|
|
9175
|
+
};
|
|
9176
|
+
const checkKeptRoomRestoreId = (keptRoomRestoreId, call3) => {
|
|
9177
|
+
if (typeof keptRoomRestoreId !== "string" || !keptRoomRestoreId) throw mistake(call3, call3 + " needs a restore's ID.", "Give an id from server.listKeptRoomRestores.");
|
|
9178
|
+
return keptRoomRestoreId;
|
|
9179
|
+
};
|
|
9180
|
+
const noKeptRoom = (call3) => mistake(call3, call3 + " needs a kept room of this game that isn't deleted.", "Give the code of a kept room: its game server calls room.setKept(true).");
|
|
9181
|
+
const keptRoomRestoreOf = (answer, call3) => {
|
|
9182
|
+
if (answer.keptRoomRestore) return answer.keptRoomRestore;
|
|
9183
|
+
if (answer.refusal === "bad_time") throw mistake(call3, call3 + "'s restoreToAt isn't a moment this world can go back to.", "Give a time from " + answer.earliestRestoreToAt + " to now.");
|
|
9184
|
+
if (answer.refusal === "no_kept_room") throw noKeptRoom(call3);
|
|
9185
|
+
if (answer.refusal === "no_kept_room_restore") throw mistake(call3, call3 + " needs a restore of this world from the last 30 days.", "Give an id from server.listKeptRoomRestores.");
|
|
9186
|
+
if (answer.refusal === "limited") throw new ErrorClass("room_call_limit", call3, "A world can go back up to 5 times a minute.", "Wait a minute, then try again.");
|
|
9187
|
+
if (answer.refusal === "no_history") throw new ErrorClass("room_call_unavailable", call3, call3 + " isn't available here: these rooms keep no history.", "On Zaisma, and on the Node runner with --room-state-file, it works.");
|
|
9188
|
+
throw new ErrorClass("room_call_unavailable", call3, "The world didn't answer, so nothing changed.", "Try again in a moment.");
|
|
9189
|
+
};
|
|
9190
|
+
const keptRoomRestoreListOf = (listed, call3) => {
|
|
9191
|
+
if (!listed) throw noKeptRoom(call3);
|
|
9192
|
+
return listed;
|
|
9193
|
+
};
|
|
9134
9194
|
const readRoomMessage = (message2, call3) => {
|
|
9135
9195
|
if (message2 === void 0 || message2 === null) throw mistake(call3, `${call3} needs a message.`, 'Give the message as plain JSON, like { kind: "blood_moon" }.');
|
|
9136
9196
|
const checked = checkRoomData2(message2, limits2.maximumRoomMessageSizeBytes);
|
|
@@ -9155,7 +9215,7 @@ function roomCallChecksParts() {
|
|
|
9155
9215
|
return { toRoomCode, message: readRoomMessage(message2, call3) };
|
|
9156
9216
|
};
|
|
9157
9217
|
const checkSendToEveryRoom = (message2, roomSelection, call3) => ({ message: readRoomMessage(message2, call3), ...checkRoomSelection(roomSelection, call3) });
|
|
9158
|
-
return { checkBroadcast, checkSend, checkBroadcastBytes, checkSendBytes, checkKick, checkReserve, checkMoveTo, checkSetInfo, checkEnd, checkSendToRoom, checkSendToEveryRoom, checkRoomSelection, tidy, tidyRoomInfo: tidyRoomInfo2, checkRoomData: checkRoomData2 };
|
|
9218
|
+
return { checkBroadcast, checkSend, checkBroadcastBytes, checkSendBytes, checkKick, checkReserve, checkMoveTo, checkSetInfo, checkEnd, checkRestoreToAt, checkKeptRoomRestoreId, keptRoomRestoreOf, keptRoomRestoreListOf, checkSendToRoom, checkSendToEveryRoom, checkRoomSelection, tidy, tidyRoomInfo: tidyRoomInfo2, checkRoomData: checkRoomData2 };
|
|
9159
9219
|
}
|
|
9160
9220
|
return { checksFor };
|
|
9161
9221
|
}
|
|
@@ -10712,8 +10772,13 @@ function row(options) {
|
|
|
10712
10772
|
}
|
|
10713
10773
|
var ROW_LAYOUT_SCRIPT = `/* row layout */(function () {
|
|
10714
10774
|
if (!window.zaismaWatch) return;
|
|
10775
|
+
var laidSizes = new WeakMap();
|
|
10776
|
+
function sizeOf(row) { return row.offsetWidth + "x" + row.offsetHeight; }
|
|
10715
10777
|
function lay(row) {
|
|
10716
10778
|
var cells = Array.prototype.slice.call(row.children);
|
|
10779
|
+
// From the same start every time: measured as the last pass left it, a row could wrap on one pass and unwrap on the next, and every
|
|
10780
|
+
// flip resizes what's round it and sets the next one off.
|
|
10781
|
+
row.classList.remove("is-wrapped");
|
|
10717
10782
|
row.classList.add("is-measuring");
|
|
10718
10783
|
var widestPx = 0;
|
|
10719
10784
|
// Measured as it's laid out, not as it's drawn: in a sheet still growing in as it opens, it's drawn smaller than it lays out.
|
|
@@ -10722,8 +10787,6 @@ var ROW_LAYOUT_SCRIPT = `/* row layout */(function () {
|
|
|
10722
10787
|
row.classList.remove("is-measuring");
|
|
10723
10788
|
var equalWidth = widestPx ? Math.ceil(widestPx) + "px" : "";
|
|
10724
10789
|
if (row.style.getPropertyValue("--equal-cell-width") !== equalWidth) row.style.setProperty("--equal-cell-width", equalWidth);
|
|
10725
|
-
var wasWrapped = row.classList.contains("is-wrapped");
|
|
10726
|
-
if (wasWrapped) row.classList.remove("is-wrapped");
|
|
10727
10790
|
var isRtl = getComputedStyle(row).direction === "rtl", previousStart = null, isWrapped = false;
|
|
10728
10791
|
cells.forEach(function (cell) {
|
|
10729
10792
|
var box = cell.getBoundingClientRect();
|
|
@@ -10733,10 +10796,12 @@ var ROW_LAYOUT_SCRIPT = `/* row layout */(function () {
|
|
|
10733
10796
|
previousStart = start;
|
|
10734
10797
|
});
|
|
10735
10798
|
if (isWrapped) row.classList.add("is-wrapped");
|
|
10799
|
+
laidSizes.set(row, sizeOf(row));
|
|
10736
10800
|
}
|
|
10737
10801
|
window.zaismaWatch.each(".layout-row", function (row) {
|
|
10738
10802
|
lay(row);
|
|
10739
|
-
|
|
10803
|
+
// Only for a size this row wasn't laid out at: the height its own wrapping gave it is no reason to lay it out again.
|
|
10804
|
+
window.zaismaWatch.size(row, function () { if (laidSizes.get(row) !== sizeOf(row)) lay(row); });
|
|
10740
10805
|
});
|
|
10741
10806
|
window.zaismaWatch.fontArrived(function () { document.querySelectorAll(".layout-row").forEach(lay); });
|
|
10742
10807
|
// A cell whose only thing is hidden is marked so (holds-only-hidden), for SHOWN to pass it over by its class: a :has() inside
|
|
@@ -11287,7 +11352,7 @@ var MINIFIED_FIRST_PAINT_PIECES = {
|
|
|
11287
11352
|
` },
|
|
11288
11353
|
"materials": { sourceSha256: "7b021c8ffe05618d5ec9f939f82befc8d743ef8fb2af9b9f4742934737bc220b", minifiedText: `(function(){var o=window.zaismaPieces=window.zaismaPieces||{};o.materials||(o.materials=!0,(function(){function n(t){var e=t.scrollHeight<=t.clientHeight+1&&t.scrollWidth<=t.clientWidth+1;if(t.classList.toggle("fits",e),!e){for(var a=t.parentElement&&t.parentElement.closest("[data-glass]"),s=0,i=0,r=t;r&&r!==a;)s+=r.offsetLeft,i+=r.offsetTop,r=r.offsetParent;if(r){var f=t.parentElement.closest(".scrolls:not(.fits)");if(f&&a.contains(f)){["top-left","top-right","bottom-right","bottom-left"].forEach(function(l){t.style.setProperty("--inset-"+l,"9999px")});return}var u=Math.max(0,a.offsetWidth-s-t.offsetWidth),c=Math.max(0,a.offsetHeight-i-t.offsetHeight);t.style.setProperty("--inset-top-left",s+i+"px"),t.style.setProperty("--inset-top-right",u+i+"px"),t.style.setProperty("--inset-bottom-right",u+c+"px"),t.style.setProperty("--inset-bottom-left",s+c+"px")}}}window.zaismaFit=n,window.MutationObserver&&new MutationObserver(function(t){t.forEach(function(e){e.target.open&&e.target.querySelectorAll(".scrolls").forEach(n)})}).observe(document.documentElement,{subtree:!0,attributes:!0,attributeFilter:["open"]}),window.zaismaWait=function(t,e){if(!t)return Promise.resolve(e);clearTimeout(t.zaismaWaitEnding),t.zaismaIsAnswered=!1,t.getAttribute("aria-busy")!=="true"&&(t.zaismaWaitStart=performance.now()),t.setAttribute("aria-busy","true"),window.zaismaWaiting.redraw(t);function a(){t.removeAttribute("aria-busy"),window.zaismaWaiting.redraw(t)}function s(){t.zaismaIsAnswered=!0;var i=window.matchMedia("(prefers-reduced-motion: reduce)").matches?0:parseFloat(getComputedStyle(t).getPropertyValue("--waiting-glint-sweep"))*1e3,r=i-(performance.now()-t.zaismaWaitStart);r>0?t.zaismaWaitEnding=setTimeout(a,r):a()}return Promise.resolve(e).then(function(i){return s(),i},function(i){throw s(),i})},document.addEventListener("click",function(t){var e=t.target.closest&&t.target.closest('[aria-busy="true"]');e&&e!==document.body&&!e.zaismaIsAnswered&&(t.preventDefault(),t.stopImmediatePropagation())},!0),window.zaismaWatch.each(".scrolls",function(t){n(t),window.zaismaWatch.size(t,function(){n(t)}),Array.prototype.forEach.call(t.children,function(e){window.zaismaWatch.size(e,function(){n(t)})})})})())})();
|
|
11289
11354
|
` },
|
|
11290
|
-
"rows": { sourceSha256: "
|
|
11355
|
+
"rows": { sourceSha256: "e6b153ef554abc614f416967aa136860c3c2d73544420577bf0ba1d500f73955", minifiedText: '(function(){var c=window.zaismaPieces=window.zaismaPieces||{};c.rows||(c.rows=!0,(function(){if(!window.zaismaWatch)return;var d=new WeakMap;function r(t){return t.offsetWidth+"x"+t.offsetHeight}function s(t){var i=Array.prototype.slice.call(t.children);t.classList.remove("is-wrapped"),t.classList.add("is-measuring");var e=0,p=t.offsetWidth?t.getBoundingClientRect().width/t.offsetWidth:1;t.classList.contains("widths-equal")&&i.forEach(function(a){a.classList.contains("fills")&&(e=Math.max(e,a.getBoundingClientRect().width/(p||1)))}),t.classList.remove("is-measuring");var u=e?Math.ceil(e)+"px":"";t.style.getPropertyValue("--equal-cell-width")!==u&&t.style.setProperty("--equal-cell-width",u);var v=getComputedStyle(t).direction==="rtl",n=null,h=!1;i.forEach(function(a){var l=a.getBoundingClientRect();if(!(l.width<1)){var m=v?-l.right:l.left;n!==null&&m<=n+.5&&(h=!0),n=m}}),h&&t.classList.add("is-wrapped"),d.set(t,r(t))}window.zaismaWatch.each(".layout-row",function(t){s(t),window.zaismaWatch.size(t,function(){d.get(t)!==r(t)&&s(t)})}),window.zaismaWatch.fontArrived(function(){document.querySelectorAll(".layout-row").forEach(s)});var f=".stack-cell, .row-cell";function o(t){var i=t.children.length===1&&t.firstElementChild.hidden;t.classList.contains("holds-only-hidden")!==i&&t.classList.toggle("holds-only-hidden",i)}window.zaismaWatch.each(f,o),window.zaismaWatch.page(function(t){t.forEach(function(i){var e=i.type==="attributes"?i.target.parentElement:i.target;e&&e.matches&&e.matches(f)&&(i.type!=="attributes"||i.attributeName==="hidden")&&o(e)})})})())})();\n' },
|
|
11291
11356
|
"compacting": { sourceSha256: "daa11debe53fdf5b3fae65ae0e2c125cb285af8aca67d71be8beb2adf118967b", minifiedText: '(function(){var s=window.zaismaPieces=window.zaismaPieces||{};s.compacting||(s.compacting=!0,(function(){var i=24;window.zaismaWatch.each("[data-compacts]",function(t){if(t.hasAttribute("data-stays-compact")){t.classList.add("is-compact");return}var c=t.parentElement&&t.parentElement.querySelector(":scope > [data-scroll-box]"),o=c||window;function n(){return c?c.scrollTop:window.scrollY}function a(){var e=n();e>i?t.classList.add("is-compact"):e<=0&&t.classList.remove("is-compact")}o.addEventListener("scroll",a,{passive:!0}),a()})})())})();\n' },
|
|
11292
11357
|
"header-fit": { sourceSha256: "1e2de0afc18ba7998073c4601a7219f72fbd66f6cd82d0016207f6caefcbe4f0", minifiedText: '(function(){var o=window.zaismaPieces=window.zaismaPieces||{};o["header-fit"]||(o["header-fit"]=!0,(function(){var h=window.matchMedia("(orientation: landscape) and (max-height: 500px) and (max-width: 64em)"),u=4;function d(i,e){i.classList.toggle("has-search-button",e>0),i.classList.toggle("has-tight-tabs",e>1),i.classList.toggle("has-icon-tabs",e>2),i.classList.toggle("has-icon-sign-in",e>3)}function g(i){var e=0;return Array.prototype.forEach.call(i.querySelectorAll(":scope > a, :scope > button"),function(a){e=Math.max(e,a.offsetLeft+a.offsetWidth)}),e+parseFloat(getComputedStyle(i).paddingRight)}function m(i,e){d(i,e);var a=getComputedStyle(i),c=parseFloat(a.paddingLeft)+parseFloat(a.paddingRight);return Array.prototype.forEach.call(i.children,function(t){var s=getComputedStyle(t);if(!(t.classList.contains("edge")||s.display==="none")){var r=t.querySelector(":scope > .switch-well .tab-switch");c+=parseFloat(s.marginLeft)+parseFloat(s.marginRight)+(t.matches(".find")?parseFloat(s.minWidth):Math.max(t.offsetWidth,r?g(r):0))}}),c}function l(i){if(!(!i.clientWidth||i.checkVisibility&&!i.checkVisibility({contentVisibilityAuto:!0}))){if(h.matches&&i.matches("body > .top")){d(i,1);return}for(var e=i.clientWidth,a=i.neededWidths||(i.neededWidths=[]),c=i.querySelector(".find"),t=!!c&&c.contains(document.activeElement),s=i.classList.contains("searching"),r=!1,n=0;n<u;n++){if(a[n]===void 0){if(t)return;r||(r=!0,i.classList.remove("searching"),i.classList.add("is-measuring"),i.style.width="max-content"),a[n]=m(i,n)}if(a[n]<=e)break}r&&(i.style.width="",i.classList.remove("is-measuring"),s&&i.classList.add("searching")),t&&n>0&&!i.classList.contains("typing-search")&&i.classList.add("searching"),d(i,n)}}function f(i){if(i.fitToRoom)return;function e(){i.neededWidths=null,l(i)}i.fitToRoom=function(){l(i)},l(i),window.zaismaWatch.size(i,i.fitToRoom);var a=i.querySelector(".tab-switch");a&&window.zaismaWatch.size(a,e),window.zaismaWatch.fontsIn(e),h.addEventListener("change",e)}window.zaismaWatch.each("header.top",f),window.zaismaWatch.arriving(function(){var i=document.querySelector("body > header.top");i&&i.nextSibling&&f(i)})})())})();\n' },
|
|
11293
11358
|
"tables": { sourceSha256: "daf4d096fdecb25eae4144aaed53b6a2d2be0cbb95bb10fc45050e4f9bcf65d8", minifiedText: '(function(){var s=window.zaismaPieces=window.zaismaPieces||{};s.tables||(s.tables=!0,(function(){function a(e){var t=e.querySelector(":scope > table > thead"),r=e.querySelector(":scope > table > tbody > tr > th, :scope > table > thead > tr > th:first-child");e.style.setProperty("--shown-width",e.clientWidth+"px"),e.style.setProperty("--shown-height",e.clientHeight+"px"),t&&e.style.setProperty("--head-height",t.offsetHeight+"px"),r&&e.style.setProperty("--row-head-width",r.offsetWidth+"px")}var i=typeof ResizeObserver=="function"?new ResizeObserver(function(e){e.forEach(function(t){var r=t.target.closest(".table-scroll");r&&a(r)})}):null;window.zaismaWatch.each(".table-scroll",function(e){if(a(e),i){i.observe(e);var t=e.querySelector(":scope > table");t&&i.observe(t)}})})())})();\n' },
|
|
@@ -11315,7 +11380,7 @@ var MINIFIED_FIRST_PAINT_PIECES = {
|
|
|
11315
11380
|
"account-link": { sourceSha256: "093f439139a670b1c6b9c27152368cc7dcc80314fece10ceff3649debc1a7216", minifiedText: '(function(){var n=window.zaismaPieces=window.zaismaPieces||{};n["account-link"]||(n["account-link"]=!0,(function(){/(^|; )(__Host-)?zaisma_in=1/.test(document.cookie)&&window.zaismaWatch.each("header.top[data-account-from-cookie] .end > a:is(.run-wrap,.cut-btn)",function(t){t.href="/account";var c=t.querySelector(".face > span:not([class])");c&&(c.textContent="Account")})})())})();\n' },
|
|
11316
11381
|
"hidden-amounts": { sourceSha256: "7fd5909834526d3dd7609ea64030fc4aecc874068d1428cac45bd5218372d4ac", minifiedText: '(function(){var n=window.zaismaPieces=window.zaismaPieces||{};n["hidden-amounts"]||(n["hidden-amounts"]=!0,(function(){var o="zaisma.payments_amounts_hidden",a=!1;try{a=localStorage.getItem(o)==="yes"}catch{}var r="#payments .number-amount, [data-amount]",i="[data-amounts-toggle]";function s(t){t.hasAttribute("data-amount")||t.setAttribute("data-amount",t.textContent),t.textContent=a?"\\u2022\\u2022\\u2022":t.getAttribute("data-amount")}function u(t){t.setAttribute("aria-pressed",String(a));var e=t.querySelector("span:not([class])");e&&(e.textContent=a?"Show amounts":"Hide amounts")}function c(){document.querySelectorAll(r).forEach(s),document.querySelectorAll(i).forEach(u)}window.zaismaWatch.each(r,s),window.zaismaWatch.each(i,u),document.addEventListener("click",function(t){var e=t.target.closest&&t.target.closest("[data-amounts-toggle]");if(e){a=!a;try{localStorage.setItem(o,a?"yes":"no")}catch{}c()}})})())})();\n' }
|
|
11317
11382
|
};
|
|
11318
|
-
var MINIFIED_FIRST_PAINT_SCRIPT = { sourceSha256: "8c291d06ac81f476aa96020e83320b089fa717e3ce8845ea34196a993c74885c", minifiedText: `(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.theme||(H.theme=!0,(function(){var m=document.documentElement,o=window.matchMedia("(prefers-color-scheme: dark)"),y=[];function f(){var g=m.getAttribute("data-theme-choice");return g==="light"||g==="dark"?g:"system"}function a(){return f()==="system"?o.matches?"dark":"light":f()}function r(){var g=a();m.getAttribute("data-theme")!==g&&(m.setAttribute("data-theme",g),y.forEach(function(u){u(g)}))}o.addEventListener&&o.addEventListener("change",r),new MutationObserver(r).observe(m,{attributes:!0,attributeFilter:["data-theme-choice"]}),window.zaismaTheme={now:a,choice:f,onChange:function(g){y.push(g)}},r()})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["cutout-side"]||(H["cutout-side"]=!0,(function(){if(!/iPhone/.test(navigator.userAgent))return;var m=document.documentElement;function o(){var y=window.orientation;y===90?m.setAttribute("data-cutout-side","left"):y===-90?m.setAttribute("data-cutout-side","right"):m.removeAttribute("data-cutout-side")}window.addEventListener("orientationchange",o),o()})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["following-files"]||(H["following-files"]=!0,(function(){var m=!1,o=document.readyState!=="loading",y=!1;function f(){if(y||!m||!o)return;y=!0;var g=[],u=null;function h(v){var i=document.createElement("script");return i.src=v.href,i.async=!1,document.body.appendChild(i),i}document.querySelectorAll("link[rel=preload][data-page-script]").forEach(function(v){document.prerendering&&v.hasAttribute("data-when-opened")?g.push(v):u=h(v)}),g.length&&document.addEventListener("prerenderingchange",function(){g.forEach(h)},{once:!0});function s(){window.zaismaWatch&&window.zaismaWatch.settled()}u?(u.addEventListener("load",s),u.addEventListener("error",s)):s()}function a(){m=!0,f()}function r(){var g=Array.prototype.slice.call(document.querySelectorAll("link[rel=preload][data-site-style]"));if(!g.length){a();return}var u=g.length,h=function(){--u===0&&a()};g.forEach(function(s){var v=document.createElement("link");v.rel="stylesheet",v.href=s.href,v.media="print",v.addEventListener("load",function(){function i(){v.media="all",h()}window.zaismaWatch?window.zaismaWatch.afterArrival(i):i()}),v.addEventListener("error",h),s.after(v)}),setTimeout(a,1e4)}o?r():document.addEventListener("readystatechange",function g(){document.readyState!=="loading"&&(document.removeEventListener("readystatechange",g),o=!0,r(),f())})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.watch||(H.watch=!0,(function(){var m=[],o="working",y=[],f=new Map,a=[],r=[],g=null,u=!1,h=!1,s=null;function v(M){M()}function i(M){var A=new Map;M.forEach(function(L){var W=L.batch||v,R=A.get(W);R||(R=new Set,A.set(W,R)),R.add(L.callback)}),A.forEach(function(L,W){W(function(){L.forEach(function(R){R()})})})}function T(M,A,L,W){A.push({callback:L,batch:W}),!(M==="resize"?u:h)&&(M==="resize"?(u=!0,window.addEventListener("resize",function(){i(a.slice())})):(h=!0,window.addEventListener("scroll",function(){i(r.slice())},{passive:!0,capture:!0})))}var C=null;function D(){if(C)return C;var M=["textarea","select","[popover]","dialog",".scrolls","[style*='overflow']"];function A(L){for(var W=0;W<L.length;W++){var R=L[W],ht=R.style;ht&&R.selectorText&&/auto|scroll|var\\(/.test(ht.overflowY+" "+ht.getPropertyValue("overflow"))&&M.push(R.selectorText),R.cssRules&&A(R.cssRules)}}return Array.prototype.forEach.call(document.styleSheets,function(L){try{A(L.cssRules)}catch{}}),C=M,M}function b(M,A){var L;try{L=M.querySelectorAll(A)}catch{try{L=M.querySelectorAll(A.replace(/::[a-z-]+(\\([^)]*\\))?/g,""))}catch{return[]}}return Array.from(L)}function _(M){return M!==document.body&&document.body.contains(M)&&(M.classList.contains("scrolls")&&!M.classList.contains("across")||/^(auto|scroll)$/.test(getComputedStyle(M).overflowY))}window.zaismaWatch={page:function(M){y.push(M)},arriving:function(M){Q.push(M)},afterArrival:function(M){var A=document.getAnimations?document.getAnimations().filter(function(R){return(R.playState==="running"||R.playState==="paused")&&/^(page-arrives|opening-game-settles)$/.test(R.animationName||"")}):[];if(!A.length){M();return}var L=!1;function W(){L||(L=!0,M())}Promise.all(A.map(function(R){return R.finished.catch(function(){})})).then(W),setTimeout(W,1e3)},afterSettling:function(M){window.zaismaWatch.afterArrival(function(){if(o==="settled"){M();return}m.push(M),setTimeout(window.zaismaWatch.settled,1500)})},settled:function(){o==="working"&&(o="painting",requestAnimationFrame(function(){requestAnimationFrame(function(){o="settled",m.splice(0).forEach(function(M){M()})})}))},whenRead:function(M){document.readyState!=="loading"?M():Z.push(M)},fontArrived:function(M){window.zaismaWatch.fontsIn(M),document.fonts&&document.fonts.addEventListener&&document.fonts.addEventListener("loadingdone",function(){M()})},fontsIn:function(M){window.zaismaWatch.whenRead(function(){document.body.offsetHeight,document.fonts&&document.fonts.ready?document.fonts.ready.then(M):M()})},size:function(M,A,L){if(!window.ResizeObserver){T("resize",a,A,L);return}g||(g=new ResizeObserver(function(R){var ht=[];R.forEach(function(Y){(f.get(Y.target)||[]).forEach(function(nt){ht.push(nt)})}),i(ht)}));var W=f.get(M);W||(W=[],f.set(M,W),g.observe(M,{box:"border-box"})),W.push({callback:A,batch:L})},resize:function(M,A){T("resize",a,M,A)},drawAll:function(){var M=a.slice();f.forEach(function(A,L){L.isConnected&&A.forEach(function(W){M.push(W)})}),i(M)},scroll:function(M){T("scroll",r,M)},scrollBoxes:function(){if(s)return s;var M=new Set;D().forEach(function(L){b(document,L).forEach(function(W){_(W)&&M.add(W)})});var A=Array.from(M).sort(function(L,W){return L.compareDocumentPosition(W)&4?-1:1});return document.readyState!=="loading"&&(s=A),A},scrollBoxesIn:function(M){var A=new Set;return D().forEach(function(L){var W=b(M,L);try{M.matches(L)&&W.unshift(M)}catch{}W.forEach(function(R){_(R)&&A.add(R)})}),Array.from(A)},eachArriving:function(M,A){var L=new WeakSet;function W(R){L.has(R)||(L.add(R),A(R))}document.querySelectorAll(M).forEach(W),Q.push(function(R){R.forEach(function(ht){ht.addedNodes.forEach(function(Y){Y.nodeType!==1||!Y.isConnected||(Y.matches(M)&&W(Y),Y.querySelectorAll(M).forEach(W))})})})},each:function(M,A){var L=new WeakSet,W=[];function R(Y){if(!L.has(Y)){if(!V(Y)){W.push(Y);return}L.add(Y),A(Y)}}function ht(){var Y=W;W=[],Y.forEach(R)}document.querySelectorAll(M).forEach(R),W.length&&document.addEventListener("readystatechange",ht),y.push(function(Y){ht(),Y.forEach(function(nt){nt.addedNodes.forEach(function(At){At.nodeType!==1||!At.isConnected||(At.matches(M)&&R(At),At.querySelectorAll(M).forEach(R))})})})}};function p(M){var A=new Map;return M.filter(function(L){if(L.target instanceof SVGElement)return!1;if(L.type!=="attributes")return!0;var W=A.get(L.target);return W||(W={},A.set(L.target,W)),W[L.attributeName]?!1:(W[L.attributeName]=!0,L.oldValue!==L.target.getAttribute(L.attributeName))})}var k=[],Q=[],Z=[],X=/^(IMG|INPUT|IFRAME|CANVAS|VIDEO|AUDIO|SOURCE|BR|HR|LINK|META)$/;function V(M){if(document.readyState!=="loading"||X.test(M.nodeName))return!0;for(var A=M;A&&A!==document.body;A=A.parentNode)if(A.nextSibling)return!0;return!1}function ot(M){return M.type!=="childList"||Array.prototype.every.call(M.addedNodes,function(A){return A.nodeType!==1||V(A)})}function lt(M){var A=k.concat(M);k=[];var L=A.filter(function(W){return ot(W)?!0:(k.push(W),!1)});L.length&&y.slice().forEach(function(W){W(L)})}new MutationObserver(function(M){var A=p(M);A.length&&Q.slice().forEach(function(L){L(A)}),(A.length||k.length)&<(A)}).observe(document.body,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["class","open","hidden"]}),document.readyState==="loading"&&document.addEventListener("readystatechange",function M(){document.readyState!=="loading"&&(document.removeEventListener("readystatechange",M),lt([]),Z.splice(0).forEach(function(A){A()}),window.zaismaWatch.afterArrival(window.zaismaWatch.drawAll))})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["page-switch"]||(H["page-switch"]=!0,(function(){var m="zaisma:opening-game",o=document.documentElement;function y(v){try{var i=new URL(v,location.href),T=i.origin===location.origin&&i.pathname.match(/^\\/g\\/([^/]+)$/);return T?T[1]:null}catch{return null}}document.addEventListener("click",function(v){var i=v.target.closest&&v.target.closest("a[href]"),T=i&&y(i.href);try{sessionStorage.removeItem(m)}catch{}if(!(!T||!i.querySelector(".picture, img")||v.button!==0||v.metaKey||v.ctrlKey||v.shiftKey||v.altKey||i.target&&i.target!=="_self"||T===y(location.href)))try{sessionStorage.setItem(m,JSON.stringify({slug:T,pressed_at_ms:Date.now()}))}catch{}});var f=performance.getEntriesByType&&performance.getEntriesByType("navigation")[0],a=!1;if(!f||f.type==="back_forward"||matchMedia("(prefers-reduced-motion: reduce)").matches)return;try{a=new URL(document.referrer).origin===location.origin}catch{}function r(){var v=null;try{v=JSON.parse(sessionStorage.getItem(m)||"null"),sessionStorage.removeItem(m)}catch{}v&&v.slug===y(location.href)&&Date.now()-v.pressed_at_ms<1e4&&o.classList.add("is-opening-game")}var g=!1,u=!1;function h(){u||!g||document.prerendering||(u=!0,requestAnimationFrame(function(){o.classList.remove("is-page-held"),setTimeout(function(){o.classList.remove("is-page-arriving","is-page-arriving-fresh","is-opening-game")},1500)}))}function s(){g=!0,h()}o.classList.add("is-page-arriving","is-page-held"),(!a||f.type!=="navigate")&&o.classList.add("is-page-arriving-fresh"),document.prerendering?document.addEventListener("prerenderingchange",function(){r(),s()},{once:!0}):r();try{new PerformanceObserver(function(v){v.getEntriesByName("first-contentful-paint").length&&s()}).observe({type:"paint",buffered:!0})}catch{s()}setTimeout(s,1e3)})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["measured-glass"]||(H["measured-glass"]=!0,(function(){if(!window.zaismaWatch)return;function m(a){return a.closest(":has(> .backdrop)")}function o(a){var r=a&&a.querySelector(":scope > .backdrop[data-adapts-glass][data-glass-kind], :scope > .backdrop .backdrop[data-adapts-glass][data-glass-kind]");return r?{isSmoked:r.getAttribute("data-glass-kind")==="smoked",tint:r.getAttribute("data-glass-tint")||""}:null}function y(a,r){a.classList.toggle("smoke",r.isSmoked),r.isSmoked?a.removeAttribute("data-theme-choice"):a.hasAttribute("data-theme-choice")||a.setAttribute("data-theme-choice","light"),r.tint&&a.style.setProperty("--glass-tint",r.tint)}function f(a,r){a.ownThemeChoice===void 0&&(a.ownThemeChoice=a.getAttribute("data-theme-choice")),a.classList.toggle("smoke",r.isSmoked),r.isSmoked?a.removeAttribute("data-theme-choice"):a.setAttribute("data-theme-choice",a.ownThemeChoice||"light")}window.zaismaWatch.eachArriving("[data-adapts-glass][data-glass-kind]",function(a){var r=a.parentElement,g=o(r);r&&g&&f(r,g),document.querySelectorAll("[data-glass]:not([data-cut-line])").forEach(function(u){var h=m(u),s=o(h);s&&y(u,s)})}),window.zaismaWatch.eachArriving("[data-glass]:not([data-cut-line])",function(a){var r=m(a),g=o(r);g&&y(a,g)})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.pictures||(H.pictures=!0,(function(){function m(o,y){if(y){o.classList.add("at-once"),o.classList.add("is-shown");return}o.addEventListener("animationend",function(){o.classList.add("at-once")},{once:!0}),o.classList.contains("backdrop")&&window.zaismaWatch&&window.zaismaWatch.afterSettling?window.zaismaWatch.afterSettling(function(){o.classList.add("is-shown")}):o.classList.add("is-shown")}window.zaismaWatch.each("img.reveals",function(o){var y=!!(window.performance&&performance.getEntriesByType&&performance.getEntriesByType("paint").length);if(o.complete&&o.naturalWidth&&!y){m(o,!0);return}if(o.complete&&o.naturalWidth){(o.decode?o.decode():Promise.resolve()).then(function(){m(o,!1)},function(){m(o,!1)});return}o.addEventListener("load",function(){(o.decode?o.decode():Promise.resolve()).then(function(){m(o,!1)},function(){m(o,!1)})})})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.glass||(H.glass=!0,(function(){var m="http://www.w3.org/2000/svg",o={};function y(e){return e in o||(o[e]=parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--"+e.replace(/-(large|small)$/,"-cut-$1")))||0),o[e]}["pane","header","menu","strip"].forEach(function(e){y(e+"-large"),y(e+"-small")});function f(e,n){var x=(e.getAttribute("data-glass-corners")||n).trim().split(/\\s+/);return x.length===1&&/^[a-z]+$/.test(x[0])&&(x=[x[0]+"-large",x[0]+"-small",x[0]+"-large",x[0]+"-small"]),x.map(function(F){return/^[a-z]+-(large|small)$/.test(F)?y(F):Number(F)||0})}window.zaismaCorners=f;function a(e,n,x,F){var P=F,K=F*.414,B=x.map(function(N){return N>0?N+K:P});return[[P,B[0]],[B[0],P],[e-B[1],P],[e-P,B[1]],[e-P,n-B[2]],[e-B[2],n-P],[B[3],n-P],[P,n-B[3]]]}function r(e){return e.map(function(n){return n[0].toFixed(1)+","+n[1].toFixed(1)}).join(" ")}function g(e){var n=e.parentElement;return e.getAttribute("aria-busy")==="true"||!!e.querySelector(':scope > input[aria-busy="true"]')||!!(n&&n.getAttribute("aria-busy")==="true")||e.hasAttribute("data-waits-here")&&!!e.closest('[aria-busy="true"]')}function u(e){var n=e.querySelector(":scope > .waiting-glint");if(!g(e)){if(n&&!n.classList.contains("is-leaving")){if(window.matchMedia("(prefers-reduced-motion: reduce)").matches){n.remove();return}n.classList.add("is-leaving"),n.addEventListener("animationend",function(F){F.animationName==="waiting-glint-leaves"&&n.classList.contains("is-leaving")&&n.remove()})}return}n&&n.classList.contains("is-leaving")&&n.classList.remove("is-leaving"),n||(n=document.createElement("span"),n.className="waiting-glint",n.setAttribute("aria-hidden","true"),e.insertBefore(n,e.firstChild))}window.zaismaWaiting={redraw:function(e){[e,e.parentElement].concat(Array.prototype.slice.call(e.querySelectorAll("[data-cut-line]"))).forEach(function(n){n&&n.hasAttribute("data-cut-line")&&u(n)})}};var h=[80,100,70,28,12,0,40,62],s={"top-left":80,top:100,"top-right":70,right:28,"bottom-right":12,bottom:0,"bottom-left":40,left:62};function v(e,n,x,F,P){for(;n.length<x.length;){var K=document.createElementNS(m,"polygon");e.appendChild(K),n.push(K)}for(;n.length>x.length;)e.removeChild(n.pop());n.forEach(function(B,N){var it=(N+1)%x.length;B.style.setProperty("--side-light",P[N]+"%"),B.setAttribute("points",r([x[N],x[it],F[it],F[N]]))})}var i=null;function T(e,n){if(i){e();return}i={rects:new Map,sizes:new Map,groups:new Map,scrollers:new Map,isBatch:!!n,isMeasured:!1};try{e()}finally{i=null}}function C(e){T(e,!0)}function D(){i.isMeasured=!0,document.querySelectorAll("[data-cut-line], [data-glass]").forEach(function(e){i.rects.set(e,e.getBoundingClientRect()),i.sizes.set(e,[e.offsetWidth,e.offsetHeight])}),document.querySelectorAll("[data-cut-line]").forEach(function(e){p(j(e)).push(e)}),document.querySelectorAll("body .own-scroll, body .scrolls, body .layout-track").forEach(function(e){i.scrollers.set(e,b(e))})}function b(e){return{scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,clientHeight:e.clientHeight,scrollLeft:e.scrollLeft,scrollWidth:e.scrollWidth,clientWidth:e.clientWidth}}function _(e){var n=i.scrollers.get(e);return n||(n=b(e),i.scrollers.set(e,n)),n}function p(e){var n=i.groups.get(e);return n||(n=[],i.groups.set(e,n)),n}function k(e){i.isBatch&&!i.isMeasured&&D();var n=i.rects.get(e);return n||(n=e.getBoundingClientRect(),i.rects.set(e,n)),n}function Q(e){i.isBatch&&!i.isMeasured&&D();var n=i.sizes.get(e);return n||(n=[e.offsetWidth,e.offsetHeight],i.sizes.set(e,n)),n}function Z(e){if(i.isBatch&&!i.isMeasured&&D(),i.isMeasured)return i.groups.get(e)||[];var n=i.groups.get(e);return n||(n=Array.prototype.filter.call((e||document).querySelectorAll("[data-cut-line]"),function(x){return j(x)===e}),i.groups.set(e,n)),n}var X=new Map,V=!1;function ot(){C(function(){X.forEach(function(e,n){n.isConnected?e():X.delete(n)})})}window.zaismaRedrawEdges=ot;var lt=!!(document.fonts&&document.fonts.addEventListener);lt&&document.fonts.addEventListener("loadingdone",function(){ot(),Ot()});function M(){lt||V||!document.fonts||!document.fonts.ready||document.fonts.status!=="loading"||(V=!0,document.fonts.ready.then(function(){V=!1,ot()}))}var A=-1;window.zaismaWatch.size(document.documentElement,function(){var e=document.documentElement.clientWidth,n=A<0;e!==A&&(A=e,n||(ot(),Ot()))},C);var L=0;function W(e,n){var x=e.querySelector(":scope > .edge"),F="zg"+L++,P=null,K="",B="",N=e.hasAttribute("data-cut-line");x||(x=document.createElementNS(m,"svg"),x.setAttribute("class","edge"),x.setAttribute("aria-hidden","true"),e.appendChild(x));function it(zt,Ct){var t=document.createElementNS(m,zt);for(var c in Ct)t.setAttribute(c,Ct[c]);return x.appendChild(t),t}function mt(){x.innerHTML='<defs><linearGradient id="'+F+'fr" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#7fd8ff" stop-opacity="0.5"/><stop offset="0.5" stop-color="#fff" stop-opacity="0"/><stop offset="1" stop-color="#ffc58a" stop-opacity="0.5"/></linearGradient><linearGradient id="'+F+'in" x1="1" y1="1" x2="0" y2="0"><stop class="gleam" offset="0"/><stop class="gleam" offset="0.4" stop-opacity="0"/><stop class="gleam" offset="0.75" stop-opacity="0"/><stop class="gleam" offset="1" stop-opacity="0.35"/></linearGradient><linearGradient id="'+F+'sp" x1="0" y1="0" x2="1" y2="1"><stop class="spec" offset="0"/><stop class="spec" offset="0.08"/><stop class="spec" offset="0.3" stop-opacity="0"/></linearGradient></defs>',P={dense:it("path",{class:"dense","fill-rule":"evenodd"}),bevel:it("g",{class:"bevel"}),bevelQuads:[],hair:it("polygon",{class:"hair",fill:"none","stroke-width":"1.2"}),rimBand:it("g",{class:"rim-band"}),rimQuads:[],rim:it("polygon",{class:"rim",fill:"none","stroke-width":"1.6"}),spec:it("polygon",{class:"spec-line",fill:"none",stroke:"url(#"+F+"sp)","stroke-width":"1.4"}),fringe:it("polygon",{class:"fringe",fill:"none",stroke:"url(#"+F+"fr)","stroke-width":"0.8"}),inner:it("polygon",{class:"inner",fill:"none",stroke:"url(#"+F+"in)","stroke-width":"1"}),caustics:N?[]:[1,2,3,4].map(function(zt){return{group:it("g",{class:"caustic step-"+zt}),quads:[]}}),facets:[]}}function et(){T(st)}function st(){var zt=Q(e),Ct=zt[0],t=zt[1];if(!(!Ct||!t)){var c=Math.min(Ct,t),d=Number(e.getAttribute("data-glass-band"))||Math.max(2,Math.min(4,c*.04)),w,S;if(P||mt(),N){var ct=O(E(e,Ct,t)),bt=Ct+"x"+t+":"+r(ct);if(bt===K)return;K=bt,e.style.setProperty("--cut-shape",G(ct)),e.style.clipPath=G(ct),w=function(at){return ft(ct,at)},S=ct.map(function(at,Ft){return s[gt(at,ct[(Ft+1)%ct.length])]})}else{var ut=n().map(function(at){return Math.min(at,Math.round(c*.3))}),U=ut.join(",")+":"+d;U!==K&&(K=U,e.style.setProperty("--glass-clip","polygon(0 "+ut[0]+"px, "+ut[0]+"px 0, calc(100% - "+ut[1]+"px) 0, 100% "+ut[1]+"px, 100% calc(100% - "+ut[2]+"px), calc(100% - "+ut[2]+"px) 100%, "+ut[3]+"px 100%, 0 calc(100% - "+ut[3]+"px))"),["top-left","top-right","bottom-right","bottom-left"].forEach(function(at,Ft){e.style.setProperty("--glass-cut-"+at,ut[Ft]+d*Math.SQRT2+"px")}),window.zaismaCast&&e.classList.contains("floating-pane")&&e.matches(":popover-open")&&window.zaismaCast(e));var dt=e.zaismaEdgeShape?e.zaismaEdgeShape(Ct,t,ut):null,Mt=Number(e.getAttribute("data-glass-lean"));!dt&&Mt&&(dt=[[t*Mt,0],[Ct,0],[Ct,t],[0,t]],e.style.setProperty("--glass-clip",G(dt))),dt&&(dt=O(dt));var Et=Ct+"x"+t+":"+d+":"+U+(dt?":"+r(dt):"");if(Et===B)return;B&&Yt(e),B=Et,dt?(w=function(at){return ft(dt,at)},S=dt.map(function(at,Ft){return s[gt(at,dt[(Ft+1)%dt.length])]})):(w=function(at){return a(Ct,t,ut,at)},S=h)}x.removeAttribute("viewBox"),P.dense.setAttribute("d","M"+r(w(0))+"Z M"+r(w(d*1.6))+"Z"),v(P.bevel,P.bevelQuads,w(0),w(d),S),v(P.rimBand,P.rimQuads,w(0),w(1.6),S),P.hair.setAttribute("points",r(w(.6))),P.rim.setAttribute("points",r(w(1.6))),P.spec.setAttribute("points",r(w(1.6))),P.fringe.setAttribute("points",r(w(Math.max(2.4,d-.8)))),P.inner.setAttribute("points",r(w(d)));var Kt=[d,d+2,d+5,d+9,d+14];P.caustics.forEach(function(at,Ft){v(at.group,at.quads,w(Kt[Ft]),w(Kt[Ft+1]),S)});var Ut=w(0),yt=[];for(Ut.forEach(function(at,Ft){var Wt=Ut[(Ft+1)%Ut.length],Xt=gt(at,Wt);Xt.indexOf("-")>0&&Math.hypot(Wt[0]-at[0],Wt[1]-at[1])>.5&&yt.push([at,Wt,Xt])});P.facets.length<yt.length;)P.facets.push(it("line",{}));P.facets.forEach(function(at,Ft){var Wt=yt[Ft];if(at.style.display=Wt?"":"none",!!Wt){var Xt=Wt[2]==="top-left";at.setAttribute("class",Xt?"facet lit":"facet"),at.setAttribute("stroke-width",Xt?"4.5":"3"),at.setAttribute("x1",Wt[0][0]),at.setAttribute("y1",Wt[0][1]),at.setAttribute("x2",Wt[1][0]),at.setAttribute("y2",Wt[1][1])}})}}return et(),e.redrawGlass=function(){et()},window.zaismaWatch.size(e,et,C),N&&(X.set(e,et),M()),et}var R=getComputedStyle(document.documentElement),ht=function(e,n){return parseFloat(R.getPropertyValue(e))||n},Y=ht("--control-slant",10),nt=ht("--gap-control-row",4),At=ht("--gap-control-stack",8),Bt=4,kt=nt-Y-.5,vt=nt-Y+.5,_t=[16,8,16,8],J=2;function q(e){var n=f(e,"header"),x=Q(e),F=Math.min(x[0],x[1]);return n.map(function(P){return Math.min(P,Math.round(F*.3))})}function j(e){var n=e.parentElement&&e.parentElement.closest("[data-glass], [data-cut-line], [data-on-no-pane]");return n&&!n.hasAttribute("data-on-no-pane")?n:null}function St(e,n){var x=k(n),F=e.parentElement&&e.parentElement.closest(".own-scroll, .scrolls"),P=e.parentElement&&e.parentElement.closest(".layout-track");if(P&&P!==n&&n.contains(P)){var K=_(P);K.scrollWidth>K.clientWidth+1&&(x={top:x.top,bottom:x.bottom,left:x.left-K.scrollLeft,right:x.right+K.scrollWidth-K.clientWidth-K.scrollLeft})}if(!F||F===n||!n.contains(F)||e.parentElement&&getComputedStyle(e.parentElement).position==="sticky")return x;var B=_(F);return B.scrollHeight<=B.clientHeight+1?x:{top:x.top-B.scrollTop,bottom:x.bottom+B.scrollHeight-B.clientHeight-B.scrollTop,left:x.left,right:x.right}}function rt(e,n,x,F){if(e===document.fullscreenElement)return[0,0,0,0];var P=j(e);if(!P&&e.hasAttribute("data-cut-square"))return[0,0,0,0];if(!P){var K=Tt(e);return _t.map(function(S,ct){return(ct<2?K.above:K.below)?0:Math.min(S,Math.round(Math.min(n,x)*.25))})}var B=P===document.fullscreenElement?[0,0,0,0]:P.hasAttribute("data-cut-line")||P.cutCorners?P.cutCorners||[0,0,0,0]:q(P),N=k(e.parentElement&&e.parentElement.classList.contains("toggle-btn")?e.parentElement:e),it=St(e,P),mt=F?F.ends:e.getAttribute("data-cut-ends")||"",et=N.top-it.top,st=it.bottom-N.bottom,zt=F?F.stack:e.getAttribute("data-cut-stack");if(zt!=null){var Ct=N.left-it.left;et=/first/.test(zt)?Ct:1e6,st=/last/.test(zt)?Ct:1e6}var t=/start/.test(mt)?(et+st)/2:N.left-it.left,c=/end/.test(mt)?(et+st)/2:it.right-N.right,d=parseFloat(getComputedStyle(P).getPropertyValue("--rail-inset"))||0,w=Math.max(n,x)<3*Math.min(n,x)?Math.min(n,x)*.5:1/0;return[[t,et],[c,et],[c,st],[t,st]].map(function(S,ct){var bt=Math.max(0,S[0])+Math.max(0,S[1]),ut=Math.max(0,(B[ct]||0)-bt+Math.SQRT2*Math.min(bt/2,d));return Math.min(w,ut>0?Math.max(Bt,ut):0)})}function Nt(e,n){var x=n?n.beside:e.getAttribute("data-cut-beside");if(x!==null)return{start:/start/.test(x),end:/end/.test(x)};var F=j(e),P=k(e),K={start:!1,end:!1};return Z(F).forEach(function(B){if(B!==e){var N=k(B);if(!(!N.width||!N.height)&&!(Math.min(P.bottom,N.bottom)-Math.max(P.top,N.top)<Math.min(P.height,N.height)/2)){var it=N.left-P.right,mt=P.left-N.right,et=it>=kt&&it<=vt,st=mt>=kt&&mt<=vt;(et||st)&&!B.contains(e)&&!e.contains(B)&&(et&&(K.end=!0),st&&(K.start=!0))}}}),K}function Tt(e){var n=k(e),x={above:!1,below:!1};return Z(null).forEach(function(F){if(F!==e){var P=k(F);if(!(!P.width||!P.height)&&!(Math.min(n.right,P.right)-Math.max(n.left,P.left)<Math.min(n.width,P.width)/2)){var K=P.top-n.bottom,B=n.top-P.bottom,N=K>=-1&&K<=At+.5,it=B>=-1&&B<=At+.5;(N||it)&&!F.contains(e)&&!e.contains(F)&&(N&&(x.below=!0),it&&(x.above=!0))}}}),x}function l(e,n,x,F,P,K){var B=Math.min(x,e/3),N=F.map(function(d){return Math.min(d,n)});[[0,3],[1,2]].forEach(function(d){var w=N[d[0]]+N[d[1]];w>n&&(N[d[0]]*=n/w,N[d[1]]*=n/w)});var it=function(d,w,S,ct){return d>=J?[w,S]:[ct,ct]},mt=[].concat(P.start?[[B,0],[B,0]]:it(N[0],[0,N[0]],[N[0],0],[0,0]),P.end?[[e,0],[e,0]]:it(N[1],[e-N[1],0],[e,N[1]],[e,0]),P.end?[[e-B,n],[e-B,n]]:it(N[2],[e,n-N[2]],[e-N[2],n],[e,n]),P.start?[[0,n],[0,n]]:it(N[3],[N[3],n],[0,n-N[3]],[0,n]));if(e>=3*n||K){var et=F.map(function(d){return d>n+.5?d:0}),st=function(d){return Math.max(0,Math.min(e,d))};if(!P.end&&et[2]&&F[1]<J){var zt=e+n-et[2];mt.splice(2,4,[st(zt),0],[st(zt),0],[st(zt),0],[st(e-et[2]),n])}if(!P.end&&et[1]&&F[2]<J){var Ct=e-et[1];mt.splice(2,4,[st(Ct),0],[st(Ct+n),n],[st(Ct+n),n],[st(Ct+n),n])}if(!P.start&&et[0]&&F[3]<J){var t=et[0];mt.splice(6,2,[st(t-n),n],[st(t-n),n]),mt.splice(0,2,[st(t-n),n],[st(t),0])}if(!P.start&&et[3]&&F[0]<J){var c=et[3];mt.splice(0,2,[st(c-n),0],[st(c-n),0]),mt.splice(6,2,[st(c),n],[st(c-n),0])}}return mt}function E(e,n,x,F){if(e.hasAttribute("data-cut-diamond"))return e.cutCorners=[n/2,n/2,n/2,n/2],[[n/2,0],[n,x/2],[n/2,x],[0,x/2]];var P=Nt(e,F),K=rt(e,n,x,F);if(e.hasAttribute("data-cut-beside")){var B=j(e),N=B&&B.getAttribute("data-slanted")||"",it=F?F.ends:e.getAttribute("data-cut-ends")||"";/start/.test(it)&&/start/.test(N)&&(P.start=!0),/end/.test(it)&&/end/.test(N)&&(P.end=!0)}var mt=[P.start?0:K[0],P.end?0:K[1],P.end?0:K[2],P.start?0:K[3]].map(function(st){return Math.min(st,x)});if([[0,3],[1,2]].forEach(function(st){var zt=mt[st[0]]+mt[st[1]];zt>x&&(mt[st[0]]*=x/zt,mt[st[1]]*=x/zt)}),e.cutCorners=mt,!F){var et=((P.start?"start ":"")+(P.end?"end":"")).trim();(e.getAttribute("data-slanted")||"")!==et&&(et?e.setAttribute("data-slanted",et):e.removeAttribute("data-slanted"))}return l(n,x,e.hasAttribute("data-cut-beside")&&Number(e.getAttribute("data-cut-line"))||Y,K,P)}function O(e,n){var x=n||.01;return e.filter(function(F,P){var K=e[(P+e.length-1)%e.length];return Math.abs(F[0]-K[0])>x||Math.abs(F[1]-K[1])>x})}function G(e){return"polygon("+e.map(function(n){return n[0].toFixed(2)+"px "+n[1].toFixed(2)+"px"}).join(", ")+")"}function ft(e,n){if(!n)return e;var x=e.length,F=e.map(function(P,K){var B=e[(K+1)%x],N=B[0]-P[0],it=B[1]-P[1],mt=Math.hypot(N,it)||1,et=-it/mt,st=N/mt;return{x:P[0]+et*n,y:P[1]+st*n,dx:N,dy:it,nx:et,ny:st}});return F.map(function(P,K){var B=F[(K+x-1)%x],N=B.dx*P.dy-B.dy*P.dx;if(Math.abs(N)<1e-6)return[P.x,P.y];var it=((P.x-B.x)*P.dy-(P.y-B.y)*P.dx)/N;return[B.x+B.dx*it,B.y+B.dy*it]})}var $=["right","top-right","top","top-left","left","bottom-left","bottom","bottom-right"];function gt(e,n){var x=n[0]-e[0],F=n[1]-e[1],P=Math.atan2(x,F)*180/Math.PI;return $[(Math.round(P/45)%8+8)%8]}function Lt(e){var n=e.querySelector(":scope > .cut-line");n||(n=document.createElementNS(m,"svg"),n.setAttribute("class","cut-line"),n.setAttribute("aria-hidden","true"),e.insertBefore(n,e.firstChild));var x=n.querySelector("polygon")||n.appendChild(document.createElementNS(m,"polygon")),F=[],P="";function K(et){return et.map(function(st){return st[0].toFixed(2)+","+st[1].toFixed(2)}).join(" ")}var B=null;function N(){T(it)}function it(){var et=Q(e),st=et[0],zt=et[1];if(!(!st||!zt)){var Ct=st+"x"+zt;B&&B.sizeKey!==Ct&&(B.sizeKey=Ct,B.toShape=E(e,st,zt),B.fromShape=E(e,st,zt,B.from));var t=B?B.toShape:E(e,st,zt);if(B){var c=Math.min(1,(performance.now()-B.startMs)/B.ms),d=B.ease?B.ease(c):1-Math.pow(1-c,3),ut=B.fromShape;t=t.map(function(yt,at){return[ut[at][0]+(yt[0]-ut[at][0])*d,ut[at][1]+(yt[1]-ut[at][1])*d]}),c>=1?B=null:B.isDriven||requestAnimationFrame(N)}t=O(t);var w=st+"x"+zt+":"+K(t);if(w!==P){P=w,e.style.setProperty("--cut-shape",G(t)),e.hasAttribute("data-cut-sizes")&&["top-left","top-right","bottom-right","bottom-left"].forEach(function(Ut,yt){e.style.setProperty("--cut-size-"+Ut,(e.cutCorners&&e.cutCorners[yt]||0).toFixed(1)+"px")}),n.setAttribute("viewBox","0 0 "+st+" "+zt),n.setAttribute("preserveAspectRatio","none"),B&&(n.classList.add("is-gliding"),clearTimeout(n.glideEnd),n.glideEnd=setTimeout(function(){n.classList.remove("is-gliding")},B.ms+200)),t=O(t,1);var S=ft(t,1);x.setAttribute("points",K(S)),u(e);var ct=Number(e.getAttribute("data-cut-ring"))||0;if(ct){var bt=n.querySelector(".cut-ring");bt||(bt=document.createElementNS(m,"polygon"),bt.setAttribute("class","cut-ring"),n.appendChild(bt)),bt.setAttribute("points",K(ft(t,-ct)))}for(var ut=Number(e.getAttribute("data-cut-inset"))||0,U=ft(t,ut),dt=ft(t,ut+1.5),Mt=F.length;F.length<t.length;){var Et=document.createElementNS(m,"path");n.insertBefore(Et,x),F.push(Et)}for(;F.length>t.length;)n.removeChild(F.pop());var Kt=Mt>0&&Mt!==F.length;F.forEach(function(Ut,yt){var at=(yt+1)%t.length,Ft="cut-band on-"+gt(t[yt],t[at]),Wt=Ut.getAttribute("class");Wt&&Wt!==Ft&&(Kt=!0),Ut.setAttribute("class",Ft),Ut.setAttribute("d","M"+K([U[yt],U[at],dt[at],dt[yt]])+"Z")}),Kt&&!n.classList.contains("is-reshaped")&&(n.classList.add("is-reshaped"),requestAnimationFrame(function(){requestAnimationFrame(function(){n.classList.remove("is-reshaped")})}))}}}N(),e.redrawCut=function(et){if(et&&et.isFrame){N();return}B=et&&et.ms>0&&!window.matchMedia("(prefers-reduced-motion: reduce)").matches?{from:et.from,ms:et.ms,ease:et.ease,isDriven:!!et.isDriven,startMs:performance.now()}:null,N()},window.zaismaWatch.size(e,N,C);var mt=e.parentElement&&e.parentElement.closest("[data-glass], [data-on-no-pane]");mt&&mt.hasAttribute("data-glass")&&window.zaismaWatch.size(mt,N,C),X.set(e,N),M()}var xt=6,Rt=new Map;function Dt(e){return e!=="none"&&(e.match(/rgba?\\([^)]*\\)/g)||[""]).some(function(n){var x=n.match(/[\\d.]+/g);return!x||x.length<4||Number(x[3])>.04})}function z(e,n){if(/^(IMG|VIDEO|CANVAS|IFRAME)$/.test(e.tagName)||n.backgroundImage!=="none"||Dt(n.boxShadow))return!0;var x=n.backgroundColor.match(/[\\d.]+/g);return x&&(x.length<4||Number(x[3])>.04)?!0:["Top","Right","Bottom","Left"].some(function(F){return parseFloat(n["border"+F+"Width"])>0&&!/rgba\\(.*, 0\\)|transparent/.test(n["border"+F+"Color"])})}function I(e){var n=[],x=k(e),F=Math.max.apply(null,q(e))/(1-Math.SQRT2/2);function P(B){return[[B.left-x.left,B.top-x.top],[x.right-B.right,B.top-x.top],[x.right-B.right,x.bottom-B.bottom],[B.left-x.left,x.bottom-B.bottom]].some(function(N){return Math.max(0,N[0])+Math.max(0,N[1])<F})}function K(B){Array.prototype.forEach.call(B.children,function(N){if(!(N instanceof SVGElement||N.matches("[data-glass], [data-cut-line], .edge, .cut-line, dialog"))){var it=N.getBoundingClientRect();if(!(!it.width||!it.height||!P(it))){if(Rt.has(N)){n.push(N);return}var mt=getComputedStyle(N);if(mt.display==="contents"||mt.display==="inline"||mt.position==="fixed")return K(N);mt.clipPath==="none"&&Math.min(it.width,it.height)>=xt&&z(N,mt)?n.push(N):K(N)}}})}return K(e),n}function tt(e){if(Rt.has(e))return;var n=null;function x(){T(F)}function F(){var P=Q(e),K=P[0],B=P[1];if(!(!K||!B||!e.isConnected)){var N=O(l(K,B,0,rt(e,K,B),{start:!1,end:!1},e.hasAttribute("data-cut-bar"))),it=N.length===4&&N.every(function(et){return(et[0]===0||et[0]===K)&&(et[1]===0||et[1]===B)}),mt=it?"":G(N.length?N:[[0,0]]);mt!==n&&(n=mt,mt?(e.style.setProperty("--cut-shape",mt),e.style.clipPath=mt):(e.style.removeProperty("--cut-shape"),e.style.removeProperty("clip-path")))}}Rt.set(e,x),X.set(e,x),window.zaismaWatch.size(e,x,C),x()}var pt="[data-glass]:not([data-cut-line])";function wt(){var e=Vt?Array.prototype.slice.call(document.querySelectorAll(pt)):Array.from(Gt);Vt=!1,Gt.clear(),C(function(){e.forEach(function(n){n.isConnected&&I(n).forEach(tt)})})}window.zaismaSettings={set:function(e,n){var x=n||document.documentElement;x.classList.add("eases-settings"),e.theme!==void 0&&(e.theme==="light"||e.theme==="dark"?x.setAttribute("data-theme-choice",e.theme):x.removeAttribute("data-theme-choice"));var F=e.glass;F&&F.hueColor!==void 0&&(typeof F.hueColor=="string"&&/^#[0-9a-fA-F]{6}$/.test(F.hueColor)?x.style.setProperty("--glass-hue",F.hueColor):x.style.removeProperty("--glass-hue"))},read:function(e){var n=e||document.documentElement,x=n.style.getPropertyValue("--glass-hue").trim();return{theme:n.getAttribute("data-theme-choice")||null,glass:{hueColor:x||null}}}},window.zaismaGlass=W,document.addEventListener("fullscreenchange",function(){var e=window.zaismaWatch;e&&requestAnimationFrame(function(){e.drawAll(),requestAnimationFrame(e.drawAll)})}),window.zaismaCutLine=Lt,window.zaismaInput=(function(){var e=!1;return document.addEventListener("keydown",function(n){/^(Shift|Control|Alt|Meta|AltGraph|CapsLock)$/.test(n.key)||(e=!0)},!0),["pointerdown","mousedown","touchstart"].forEach(function(n){document.addEventListener(n,function(){e=!1},!0)}),{isKeyboard:function(){return e}}})();var Pt=typeof WeakSet=="function"?new WeakSet:{has:function(){return!1},add:function(){}};function qt(e){if(e.querySelectorAll){var n=Array.prototype.slice.call(e.querySelectorAll("[data-glass]")),x=Array.prototype.slice.call(e.querySelectorAll("[data-cut-line]"));e.matches&&e.matches("[data-glass]")&&n.push(e),e.matches&&e.matches("[data-cut-line]")&&x.push(e),x.forEach(function(F){Pt.has(F)||F.hasAttribute("data-glass")||(Pt.add(F),Lt(F))}),n.forEach(function(F){if(!Pt.has(F)){Pt.add(F);var P=W(F,function(){var K=f(F,"pane");if(K.some(function(N){return N>0})||!j(F))return K;var B=Q(F);return F.cutCorners=rt(F,B[0],B[1])});/^[0\\s]+$/.test(F.getAttribute("data-glass-corners")||"")&&(X.set(F,P),M())}})}}C(function(){qt(document)}),window.zaismaWatch.arriving(function(e){C(function(){e.forEach(function(n){n.addedNodes.forEach(qt)})})});var It=0,Gt=new Set,Vt=!1;function Ht(){clearTimeout(It),It=setTimeout(wt,50)}function Ot(e){Array.isArray(e)?e.forEach(function(n){$t(n.target).forEach(function(x){Gt.add(x)})}):Vt=!0,Ht()}function Yt(e){Gt.add(e),Ht()}function $t(e){if(e.nodeType!==1)return[];for(var n=Array.prototype.slice.call(e.querySelectorAll(pt)),x=e.closest(pt);x;)n.push(x),x=x.parentElement&&x.parentElement.closest(pt);return n}Ot(),window.zaismaWatch.page(Ot)})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.materials||(H.materials=!0,(function(){function m(o){var y=o.scrollHeight<=o.clientHeight+1&&o.scrollWidth<=o.clientWidth+1;if(o.classList.toggle("fits",y),!y){for(var f=o.parentElement&&o.parentElement.closest("[data-glass]"),a=0,r=0,g=o;g&&g!==f;)a+=g.offsetLeft,r+=g.offsetTop,g=g.offsetParent;if(g){var u=o.parentElement.closest(".scrolls:not(.fits)");if(u&&f.contains(u)){["top-left","top-right","bottom-right","bottom-left"].forEach(function(v){o.style.setProperty("--inset-"+v,"9999px")});return}var h=Math.max(0,f.offsetWidth-a-o.offsetWidth),s=Math.max(0,f.offsetHeight-r-o.offsetHeight);o.style.setProperty("--inset-top-left",a+r+"px"),o.style.setProperty("--inset-top-right",h+r+"px"),o.style.setProperty("--inset-bottom-right",h+s+"px"),o.style.setProperty("--inset-bottom-left",a+s+"px")}}}window.zaismaFit=m,window.MutationObserver&&new MutationObserver(function(o){o.forEach(function(y){y.target.open&&y.target.querySelectorAll(".scrolls").forEach(m)})}).observe(document.documentElement,{subtree:!0,attributes:!0,attributeFilter:["open"]}),window.zaismaWait=function(o,y){if(!o)return Promise.resolve(y);clearTimeout(o.zaismaWaitEnding),o.zaismaIsAnswered=!1,o.getAttribute("aria-busy")!=="true"&&(o.zaismaWaitStart=performance.now()),o.setAttribute("aria-busy","true"),window.zaismaWaiting.redraw(o);function f(){o.removeAttribute("aria-busy"),window.zaismaWaiting.redraw(o)}function a(){o.zaismaIsAnswered=!0;var r=window.matchMedia("(prefers-reduced-motion: reduce)").matches?0:parseFloat(getComputedStyle(o).getPropertyValue("--waiting-glint-sweep"))*1e3,g=r-(performance.now()-o.zaismaWaitStart);g>0?o.zaismaWaitEnding=setTimeout(f,g):f()}return Promise.resolve(y).then(function(r){return a(),r},function(r){throw a(),r})},document.addEventListener("click",function(o){var y=o.target.closest&&o.target.closest('[aria-busy="true"]');y&&y!==document.body&&!y.zaismaIsAnswered&&(o.preventDefault(),o.stopImmediatePropagation())},!0),window.zaismaWatch.each(".scrolls",function(o){m(o),window.zaismaWatch.size(o,function(){m(o)}),Array.prototype.forEach.call(o.children,function(y){window.zaismaWatch.size(y,function(){m(o)})})})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.rows||(H.rows=!0,(function(){if(!window.zaismaWatch)return;function m(f){var a=Array.prototype.slice.call(f.children);f.classList.add("is-measuring");var r=0,g=f.offsetWidth?f.getBoundingClientRect().width/f.offsetWidth:1;f.classList.contains("widths-equal")&&a.forEach(function(T){T.classList.contains("fills")&&(r=Math.max(r,T.getBoundingClientRect().width/(g||1)))}),f.classList.remove("is-measuring");var u=r?Math.ceil(r)+"px":"";f.style.getPropertyValue("--equal-cell-width")!==u&&f.style.setProperty("--equal-cell-width",u);var h=f.classList.contains("is-wrapped");h&&f.classList.remove("is-wrapped");var s=getComputedStyle(f).direction==="rtl",v=null,i=!1;a.forEach(function(T){var C=T.getBoundingClientRect();if(!(C.width<1)){var D=s?-C.right:C.left;v!==null&&D<=v+.5&&(i=!0),v=D}}),i&&f.classList.add("is-wrapped")}window.zaismaWatch.each(".layout-row",function(f){m(f),window.zaismaWatch.size(f,function(){m(f)})}),window.zaismaWatch.fontArrived(function(){document.querySelectorAll(".layout-row").forEach(m)});var o=".stack-cell, .row-cell";function y(f){var a=f.children.length===1&&f.firstElementChild.hidden;f.classList.contains("holds-only-hidden")!==a&&f.classList.toggle("holds-only-hidden",a)}window.zaismaWatch.each(o,y),window.zaismaWatch.page(function(f){f.forEach(function(a){var r=a.type==="attributes"?a.target.parentElement:a.target;r&&r.matches&&r.matches(o)&&(a.type!=="attributes"||a.attributeName==="hidden")&&y(r)})})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.compacting||(H.compacting=!0,(function(){var m=24;window.zaismaWatch.each("[data-compacts]",function(o){if(o.hasAttribute("data-stays-compact")){o.classList.add("is-compact");return}var y=o.parentElement&&o.parentElement.querySelector(":scope > [data-scroll-box]"),f=y||window;function a(){return y?y.scrollTop:window.scrollY}function r(){var g=a();g>m?o.classList.add("is-compact"):g<=0&&o.classList.remove("is-compact")}f.addEventListener("scroll",r,{passive:!0}),r()})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["header-fit"]||(H["header-fit"]=!0,(function(){var m=window.matchMedia("(orientation: landscape) and (max-height: 500px) and (max-width: 64em)"),o=4;function y(u,h){u.classList.toggle("has-search-button",h>0),u.classList.toggle("has-tight-tabs",h>1),u.classList.toggle("has-icon-tabs",h>2),u.classList.toggle("has-icon-sign-in",h>3)}function f(u){var h=0;return Array.prototype.forEach.call(u.querySelectorAll(":scope > a, :scope > button"),function(s){h=Math.max(h,s.offsetLeft+s.offsetWidth)}),h+parseFloat(getComputedStyle(u).paddingRight)}function a(u,h){y(u,h);var s=getComputedStyle(u),v=parseFloat(s.paddingLeft)+parseFloat(s.paddingRight);return Array.prototype.forEach.call(u.children,function(i){var T=getComputedStyle(i);if(!(i.classList.contains("edge")||T.display==="none")){var C=i.querySelector(":scope > .switch-well .tab-switch");v+=parseFloat(T.marginLeft)+parseFloat(T.marginRight)+(i.matches(".find")?parseFloat(T.minWidth):Math.max(i.offsetWidth,C?f(C):0))}}),v}function r(u){if(!(!u.clientWidth||u.checkVisibility&&!u.checkVisibility({contentVisibilityAuto:!0}))){if(m.matches&&u.matches("body > .top")){y(u,1);return}for(var h=u.clientWidth,s=u.neededWidths||(u.neededWidths=[]),v=u.querySelector(".find"),i=!!v&&v.contains(document.activeElement),T=u.classList.contains("searching"),C=!1,D=0;D<o;D++){if(s[D]===void 0){if(i)return;C||(C=!0,u.classList.remove("searching"),u.classList.add("is-measuring"),u.style.width="max-content"),s[D]=a(u,D)}if(s[D]<=h)break}C&&(u.style.width="",u.classList.remove("is-measuring"),T&&u.classList.add("searching")),i&&D>0&&!u.classList.contains("typing-search")&&u.classList.add("searching"),y(u,D)}}function g(u){if(u.fitToRoom)return;function h(){u.neededWidths=null,r(u)}u.fitToRoom=function(){r(u)},r(u),window.zaismaWatch.size(u,u.fitToRoom);var s=u.querySelector(".tab-switch");s&&window.zaismaWatch.size(s,h),window.zaismaWatch.fontsIn(h),m.addEventListener("change",h)}window.zaismaWatch.each("header.top",g),window.zaismaWatch.arriving(function(){var u=document.querySelector("body > header.top");u&&u.nextSibling&&g(u)})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.tables||(H.tables=!0,(function(){function m(y){var f=y.querySelector(":scope > table > thead"),a=y.querySelector(":scope > table > tbody > tr > th, :scope > table > thead > tr > th:first-child");y.style.setProperty("--shown-width",y.clientWidth+"px"),y.style.setProperty("--shown-height",y.clientHeight+"px"),f&&y.style.setProperty("--head-height",f.offsetHeight+"px"),a&&y.style.setProperty("--row-head-width",a.offsetWidth+"px")}var o=typeof ResizeObserver=="function"?new ResizeObserver(function(y){y.forEach(function(f){var a=f.target.closest(".table-scroll");a&&m(a)})}):null;window.zaismaWatch.each(".table-scroll",function(y){if(m(y),o){o.observe(y);var f=y.querySelector(":scope > table");f&&o.observe(f)}})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.rails||(H.rails=!0,(function(){var m=new Set,o=!1;function y(h){m.add(h),!o&&(o=!0,requestAnimationFrame(function(){o=!1;var s=Array.from(m);m.clear();var v=s.map(function(D){return D.place()});s.forEach(function(D,b){D.putPlace(v[b])});var i=s.filter(function(D,b){return D.isUnplaced(v[b])}),T=i.map(function(D){return D.place()});i.forEach(function(D,b){v[s.indexOf(D)]=T[b],D.putPlace(T[b])});var C=s.map(function(D,b){return D.measure(v[b])});s.forEach(function(D,b){D.put(v[b],C[b])})}))}function f(h,s){for(var v=h.nextElementSibling;v&&v.hasAttribute("data-rail");v=v.nextElementSibling)if(v.getAttribute("data-rail")===s)return!0;return!1}function a(h,s){var v=h.map(function(i){var T=i.tagName==="TEXTAREA"||i.tagName==="SELECT"&&(i.multiple||i.size>1);if(/^(SELECT|INPUT)$/.test(i.tagName)&&!T||f(i,"box")||getComputedStyle(i).scrollbarWidth==="none"&&!i.hasAttribute("data-side-rail")&&!i.classList.contains("own-scroll")||i.classList.contains("rail-thumb"))return null;var C=i.parentElement;return!C||C===document.body?null:{box:i,isControl:T,isParentStatic:getComputedStyle(C).position==="static"}});v.forEach(function(i){i&&(i.isParentStatic&&(i.box.parentElement.style.position="relative"),i.box.insertAdjacentHTML("afterend",'<div class="rail" data-rail="box" aria-hidden="true"><div class="rail-line carving deep" data-cut-line="3" data-cut-sizes><svg class="cut-line" aria-hidden="true"><polygon/></svg><div class="rail-groove"><div class="rail-thumb"></div></div></div></div>'))}),s.querySelectorAll("[data-side-rail]").forEach(function(i){f(i,"side")||i.insertAdjacentHTML("afterend",'<div class="rail sideways" data-rail="side" aria-hidden="true"><div class="rail-line carving deep" data-cut-line="3" data-cut-sizes><svg class="cut-line" aria-hidden="true"><polygon/></svg><div class="rail-groove"><div class="rail-thumb"></div></div></div></div>')})}var r=new WeakSet,g=!1;function u(){document.querySelectorAll("[data-rail]").forEach(function(h){if(r.has(h))return;if(h.getAttribute("data-rail")==="page"&&document.readyState==="loading"){document.documentElement.classList.add("own-scroll"),g||(g=!0,window.zaismaWatch.whenRead(u));return}r.add(h);for(var s=h.getAttribute("data-rail")==="page",v=h.getAttribute("data-rail")==="side",i=s?null:h.previousElementSibling;i&&i.hasAttribute("data-rail");)i=i.previousElementSibling;if(i&&!i.matches("[data-rail-scroller]")&&(i=i.querySelector(":scope > [data-rail-scroller]")||i),!s&&!i)return;var T=h.querySelector(".rail-groove"),C=h.querySelector(".rail-thumb"),D=getComputedStyle(h),b=parseFloat(D.getPropertyValue("--rail-reach"))||16,_=parseFloat(D.getPropertyValue("--rail-width"))||10,p=2*Math.SQRT2,k=s&&window.CSS&&CSS.supports("animation-timeline: scroll()");k&&h.classList.add("follows-scroll"),s?document.documentElement.classList.add("own-scroll"):i.classList.add("own-scroll");var Q=!1,Z=function(){return parseFloat(getComputedStyle(document.documentElement).scrollPaddingTop)||90},X=s?Array.prototype.filter.call(document.querySelectorAll("[data-rail-mark]"),function(z){return!z.closest("[data-rail-marks-own]")}):Array.prototype.filter.call(i.querySelectorAll("[data-rail-mark]"),function(z){var I=z.parentElement.closest("[data-side-rail], [data-rail-marks-own]");return!I||I===i||!i.contains(I)});!s&&X.length&&i.setAttribute("data-rail-marks-own","");var V=null;X.length&&(V=document.createElement("span"),V.className="tag rail-name rail-riding",V.setAttribute("data-cut-line","0"),V.appendChild(document.createElement("span")),h.appendChild(V));function ot(z,I){if(s)return z.getBoundingClientRect().top+window.scrollY-(I===void 0?Z():I);var tt=i.getBoundingClientRect(),pt=z.getBoundingClientRect();return v?pt.left-tt.left+i.scrollLeft:pt.top-tt.top+i.scrollTop}var lt=X.map(function(z){var I=document.createElement("button"),tt=document.createElement("span");I.type="button",I.className="rail-mark",I.tabIndex=-1,tt.className="tag rail-name",tt.setAttribute("data-cut-line","0"),tt.appendChild(document.createElement("span")).textContent=z.getAttribute("data-rail-mark"),I.appendChild(tt),h.appendChild(I),I.addEventListener("click",function(){if(O){O=!1;return}pt()});function pt(){var wt=window.matchMedia("(prefers-reduced-motion: reduce)").matches?"auto":"smooth";s?window.scrollTo({top:ot(z),behavior:wt}):i.scrollTo(v?{left:ot(z),behavior:wt}:{top:ot(z),behavior:wt})}return I.goToPart=pt,{part:z,mark:I,name:tt}});function M(z){lt.forEach(function(I){if(!I.mark.hidden){var tt=parseFloat(I.mark.style[v?"left":"top"])||0,pt=(I.size||0)/2,wt=Math.max(pt,Math.min(z-pt,tt));I.restShift=(wt-tt).toFixed(1)+"px",I.name.style.setProperty("--label-shift",I.restShift)}})}function A(){return s?window.scrollY:v?i.scrollLeft:i.scrollTop}function L(z){s?window.scrollTo(0,z):v?i.scrollLeft=z:i.scrollTop=z}function W(z){return v?z.clientX:z.clientY}var R={track:0,thumb:0,max:1,start:0,startIn:p},ht=h.querySelector(".rail-line");function Y(z){if(s)return p;var I=ht.cutCorners||[0,0,0,0],tt=v?z?I[3]:I[2]:z?I[1]:I[2];return Math.max(0,tt-(4-2*Math.SQRT2)-(v?T.clientHeight:T.clientWidth))}var nt=s?document.querySelector("[data-rail-starts-below]"):null,At=10,Bt={place:function(){var z={whole:s?document.documentElement.scrollHeight:v?i.scrollWidth:i.scrollHeight,view:s?window.innerHeight:v?i.clientWidth:i.clientHeight};if(z.max=z.whole-z.view,nt){var I=nt.getBoundingClientRect();z.top=Math.round((I.height>I.width?0:I.bottom)+At)+"px"}if(!s){var tt=i.closest("[data-glass], .carving"),pt=h.offsetParent;if(tt&&pt){var wt=tt.getBoundingClientRect(),Pt=parseFloat(getComputedStyle(tt).getPropertyValue("--rail-inset"))||0,qt=Math.min(wt.width,wt.height),It=(tt.cutCorners||(window.zaismaCorners?window.zaismaCorners(tt,"pane"):[0,0,0,0])).map(function(d){return Math.min(d,Math.round(qt*.3))}),Gt=Pt*(Math.SQRT2-1),Vt=function(d){return Math.max(Pt,d-_+Gt)};if(v){var Ht=h.getBoundingClientRect(),Ot=Ht.left-(parseFloat(h.style.marginLeft)||0),Yt=Ht.right+(parseFloat(h.style.marginRight)||0),$t=wt.bottom-Ht.bottom<=Pt+2,e=i.querySelector(":scope > table.has-row-heads > tbody > tr > th"),n=e?e.offsetWidth:0,x=i.getBoundingClientRect();z.side=$t?{left:Math.max(0,wt.left+Vt(It[3])-Ot,n?x.left+n+Pt-Ot:0),right:Math.max(0,Yt-(wt.right-Vt(It[2])))}:{left:0,right:0}}else{var F=pt.getBoundingClientRect(),P=i.getBoundingClientRect(),K=tt.offsetWidth?wt.width/tt.offsetWidth:1,B=i.querySelector(":scope > table > thead"),N=Vt(It[1]),it=Vt(It[2]),mt=B?B.offsetHeight:0,et=i.classList.contains("shows-side-rail")&&i.nextElementSibling&&i.nextElementSibling.matches(".rail.sideways")?(_+2*Pt)*K:0,st=P.top+(mt?(mt+Pt)*K:0),zt=P.bottom-et,Ct=Math.max(st,wt.top+N*K),t=Math.min(zt,wt.bottom-it*K),c=Math.min(P.right,wt.right-Pt*K);z.box={top:(Ct-F.top)/K-pt.clientTop,height:Math.max(0,t-Ct)/K,left:(c-F.left)/K-pt.clientLeft-(b+_)/2}}}}return z},putPlace:function(z){z.top&&(h.style.top=z.top),z.side&&(h.style.marginLeft=z.side.left.toFixed(1)+"px",h.style.marginRight=z.side.right.toFixed(1)+"px"),z.box&&(h.style.top=z.box.top.toFixed(1)+"px",h.style.height=z.box.height.toFixed(1)+"px",h.style.left=z.box.left.toFixed(1)+"px"),Q!==z.max>4&&(Q=z.max>4,h.classList.toggle("is-on",Q)),s||i.classList.toggle(v?"shows-side-rail":"shows-rail",Q)},isUnplaced:function(z){return!s&&Q&&!z.box&&!z.side},measure:function(){if(!Q)return null;var z=s&<.length?Z():0;return{track:(v?T.clientWidth:T.clientHeight)-Y(!0)-Y(!1),start:(v?T.offsetLeft+T.parentElement.offsetLeft:T.offsetTop+T.parentElement.offsetTop)+Y(!0),startIn:Y(!0),at:A(),marks:lt.map(function(I){var tt=!!I.part.offsetParent;return tt?{shown:!0,spot:ot(I.part,z),size:v?I.name.offsetWidth:I.name.offsetHeight}:{shown:!1}})}},put:function(z,I){if(I){var tt=I.track,pt=z.max,wt=Math.max(36,Math.round(tt*z.view/z.whole));R={track:tt,thumb:wt,max:pt,start:I.start,startIn:I.startIn},k?C.style.setProperty("--thumb-share",(z.view/z.whole).toFixed(4)):C.style[v?"width":"height"]=wt+"px",_t(I.at),lt.forEach(function(Pt,qt){var It=I.marks[qt];if(Pt.mark.hidden=!It.shown,!!It.shown){var Gt=Math.max(0,Math.min(pt,It.spot));Pt.mark.style[v?"left":"top"]=(I.start+(tt-wt)*Gt/pt+wt/2).toFixed(1)+"px",Pt.size=It.size||(v?Pt.name.offsetWidth:Pt.name.offsetHeight)}}),M(tt)}}},kt=!1;function vt(){if(rt){kt=!0;return}y(Bt)}function _t(z){rt&&xt(),Q&&!k&&(C.style.transform=(v?"translateX(":"translateY(")+(R.startIn+(R.track-R.thumb)*Math.min(1,(z===void 0?A():z)/R.max)).toFixed(1)+"px)")}var J=0,q=!1;function j(){h.classList.contains("awake")||h.classList.add("awake"),clearTimeout(J),J=setTimeout(function(){h.classList.remove("awake")},1100)}(s?window:i).addEventListener("scroll",function(){j(),!q&&(q=!0,requestAnimationFrame(function(){q=!1,_t()}))},{passive:!0}),window.zaismaWatch.resize(vt);var St=s?document.body:Array.prototype.filter.call(i.children,function(z){return!z.matches("svg, .edge, .cut-line, .rail")});s?window.zaismaWatch.size(St,vt):Array.prototype.concat.apply([i],Array.prototype.slice.call(St)).forEach(function(z){window.zaismaWatch.size(z,vt)}),nt&&window.zaismaWatch.size(nt,vt),s||window.zaismaWatch.page(function(z){z.some(function(I){return i.contains(I.target)})&&vt()});var rt=null,Nt=6,Tt=8;function l(z){var I=W(z);if(!rt.isTouch||!s)return I;var tt=I+window.scrollY,pt=I,wt=1/0;return rt.scrolls.forEach(function(Pt){var qt=tt-Pt,It=Math.abs(qt-rt.last);It<wt&&(wt=It,pt=qt)}),pt}function E(z,I){z.preventDefault();var tt=A();if(I){var pt=W(z)-(v?T.getBoundingClientRect().left:T.getBoundingClientRect().top)-R.thumb/2;L(Math.max(0,Math.min(1,pt/(R.track-R.thumb)))*R.max)}rt={y:W(z),last:W(z),from:A(),scrolls:[tt,A()],isMoving:z.pointerType==="mouse",isTouch:z.pointerType!=="mouse"},h.classList.add("dragging"),!s&&getComputedStyle(i).scrollSnapType!=="none"&&i.classList.add("is-dragged");try{h.setPointerCapture(z.pointerId)}catch{}}C.addEventListener("pointerdown",function(z){E(z,!1)});var O=!1,G=null,ft=0;h.addEventListener("pointerdown",function(z){if(!C.contains(z.target)){if(z.target.closest(".rail-mark")){var I=C.getBoundingClientRect();O=W(z)>=(v?I.left:I.top)&&W(z)<=(v?I.right:I.bottom),O&&(G=z.target.closest(".rail-mark"),ft=W(z),E(z,!1));return}E(z,!0)}});function $(z){if(rt){var I=l(z);if(rt.last=I,!rt.isMoving){if(Math.abs(I-rt.y)<Nt)return;rt.isMoving=!0,rt.y=I,rt.from=A()}var tt=Math.max(0,Math.min(R.max,rt.from+(I-rt.y)*R.max/Math.max(1,R.track-R.thumb)));Math.abs(tt-A())<1||(L(tt),rt.scrolls.push(A()),rt.scrolls.length>Tt&&rt.scrolls.shift())}}h.addEventListener("pointermove",$),window.addEventListener("pointermove",function(z){rt&&!h.hasPointerCapture(z.pointerId)&&$(z)}),window.addEventListener("pointerup",function(z){rt&&!h.hasPointerCapture(z.pointerId)&&Dt(z)}),window.addEventListener("pointercancel",function(){rt&>()});function gt(){rt=null,h.classList.remove("dragging"),Lt(),kt&&(kt=!1,vt())}function Lt(){if(!(s||!i.classList.contains("is-dragged"))){var z=i.getBoundingClientRect(),I=getComputedStyle(i),tt=A(),pt=parseFloat(v?I.scrollPaddingLeft:I.scrollPaddingTop)||0,wt=v?z.left+i.clientLeft:z.top+i.clientTop,Pt=Array.prototype.filter.call(i.children,function(Ht){return getComputedStyle(Ht).scrollSnapAlign.indexOf("start")>=0}).map(function(Ht){var Ot=Ht.getBoundingClientRect();return Math.max(0,Math.min(R.max,tt+(v?Ot.left:Ot.top)-wt-pt))});Pt.push(0,R.max);var qt=Pt.length?Pt.reduce(function(Ht,Ot){return Math.abs(Ot-tt)<Math.abs(Ht-tt)?Ot:Ht}):tt,It=function(){rt||i.classList.remove("is-dragged")},Gt=parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--motion-arrive"))*1e3||300;if(Math.abs(qt-tt)<1||matchMedia("(prefers-reduced-motion: reduce)").matches)return L(qt),It();var Vt=performance.now();(function Ht(Ot){if(!rt){var Yt=Math.min(1,(Ot-Vt)/Gt);L(tt+(qt-tt)*(1-Math.pow(1-Yt,3))),Yt<1?requestAnimationFrame(Ht):It()}})(Vt)}}function xt(){if(!(!lt.length||!rt)){var z=R.start+(R.track-R.thumb)*Math.min(1,A()/R.max)+R.thumb/2,I=null,tt=s?{start:0,size:window.innerHeight}:(function(pt){return{start:v?pt.left:pt.top,size:v?pt.width:pt.height}})(i.getBoundingClientRect());lt.forEach(function(pt){if(!pt.mark.hidden){var wt=pt.part.getBoundingClientRect();(!I||(v?wt.left:wt.top)-tt.start<=tt.size/3)&&(I=pt)}}),I&&V.lastChild.textContent!==I.name.textContent&&(V.lastChild.textContent=I.name.textContent),V.style.setProperty("--riding-at",z.toFixed(1)+"px")}}h.addEventListener("pointermove",xt),h.addEventListener("pointerdown",xt);var Rt=18;function Dt(z){var I=!!(rt&&rt.isMoving),tt=G&&Math.abs(W(z)-ft)<4?G:null;if(G=null,gt(),tt){tt.goToPart();return}if(!(!I||z.pointerType==="mouse"||!lt.length)){var pt=R.start+(R.track-R.thumb)*Math.min(1,A()/R.max)+R.thumb/2,wt=null,Pt=Rt;lt.forEach(function(qt){if(!qt.mark.hidden){var It=Math.abs(parseFloat(qt.mark.style[v?"left":"top"])-pt);It<=Pt&&(Pt=It,wt=qt)}}),wt&&wt.mark.click()}}h.addEventListener("pointerup",Dt),h.addEventListener("pointercancel",gt),vt(),j()})}a(window.zaismaWatch.scrollBoxes(),document),u(),window.zaismaWatch.page(function(h){var s=[],v=!1,i=!1;h.forEach(function(T){Array.prototype.forEach.call(T.addedNodes||[],function(C){C.nodeType!==1||!C.isConnected||(C.matches("[data-rail]")&&!r.has(C)&&(i=!0),!C.closest(".rail, svg, .edge, .cut-line")&&(window.zaismaWatch.scrollBoxesIn(C).forEach(function(D){s.indexOf(D)<0&&s.push(D)}),(C.matches("[data-side-rail]")||C.querySelector("[data-side-rail]"))&&(v=!0)))})}),!(!s.length&&!v&&!i)&&(a(s,document),u())})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["scroll-fades"]||(H["scroll-fades"]=!0,(function(){var m=window.matchMedia("(max-width: 760px), (max-height: 500px)"),o=[],y=null;function f(){return m.matches?20:34}window.zaismaScrollFadePx=f;function a(b){var _=b.querySelector(":scope > table > thead");return{scrollTop:b.scrollTop,scrollHeight:b.scrollHeight,clientHeight:b.clientHeight,headPx:_?_.offsetHeight:null}}function r(b,_){var p=_.scrollHeight>_.clientHeight+1,k=_.scrollTop>.5?f():0,Q=_.scrollHeight-_.clientHeight-_.scrollTop>.5?f():0;b.style.setProperty("--fade-top",Math.max(0,k)+"px"),b.style.setProperty("--fade-bottom",Math.max(0,Q)+"px"),_.headPx!==null&&b.style.setProperty("--fade-from",_.headPx+"px"),b.classList.toggle("is-fading",p),b.classList.toggle("is-scrollable",p)}function g(b){var _=b.map(a);b.forEach(function(p,k){r(p,_[k])})}function u(b){y=new Set,b();var _=Array.from(y);y=null,g(_)}function h(b){y?y.add(b):g([b])}function s(b){b.classList.toggle("is-scrollable",b.scrollHeight>b.clientHeight+1)}var v=new WeakSet;function i(b){v.has(b)||(v.add(b),s(b),window.zaismaWatch.size(b.firstElementChild||b,function(){s(b)}),b.addEventListener("input",function(){s(b)}))}function T(){window.zaismaWatch.each("[data-scroll-box]",i),C(window.zaismaWatch.scrollBoxes())}function C(b){var _=b.filter(function(p){return p.classList.contains("scroll-fades")?!1:/^(TEXTAREA|SELECT|INPUT)$/.test(p.tagName)||p.hasAttribute("data-scroll-box")||p.hasAttribute("data-own-fade")?(i(p),!1):!0});o=o.filter(function(p){return p.isConnected}),_.forEach(function(p){p.classList.add("scroll-fades"),o.push(p);var k=!1;p.addEventListener("scroll",function(){k||(k=!0,requestAnimationFrame(function(){k=!1,h(p)}))},{passive:!0}),window.zaismaWatch.size(p,function(){h(p)},u)}),g(_)}T(),window.zaismaWatch.page(function(b){var _=[];b.forEach(function(p){Array.prototype.forEach.call(p.addedNodes||[],function(k){k.nodeType!==1||!k.isConnected||k.closest(".rail, svg, .edge, .cut-line")||window.zaismaWatch.scrollBoxesIn(k).forEach(function(Q){_.indexOf(Q)<0&&_.push(Q)})})}),_.length&&C(_)}),window.zaismaWatch.resize(function(){g(o)});var D=window.matchMedia("(prefers-reduced-motion: reduce)").matches;window.zaismaWatch.each("[data-fades-sideways]",function(b){function _(){return Array.prototype.filter.call(b.querySelectorAll(":scope > *, :scope > * > *"),function(L){return L.classList.contains("folded")||L.hasAttribute("aria-hidden")||L.children.length&&L.parentElement===b&&L.querySelector(":scope > a, :scope > button, :scope > .cover")?!1:L.getBoundingClientRect().width>=1&&!/^(absolute|fixed)$/.test(getComputedStyle(L).position)})}var p=null;function k(){var L=b.getBoundingClientRect(),W=1/0,R=-1/0,ht=b.scrollLeft;_().forEach(function(Y){var nt=Y.getBoundingClientRect();W=Math.min(W,nt.left),R=Math.max(R,nt.right)}),p={start:W===1/0?null:W-L.left+ht,end:R-L.left+ht,width:b.clientWidth,whole:b.scrollWidth}}function Q(){p||k();var L=b.scrollLeft,W=L,R=p.whole-p.width-L;return p.start===null?{before:W,after:R}:{before:Math.max(L-p.start,W),after:Math.max(p.end-L-p.width,R)}}function Z(){var L=Q();return b.classList.toggle("more-left",L.before>2),b.classList.toggle("more-right",L.after>2),L}var X=b.querySelector('[aria-current="page"], [aria-pressed="true"]'),V=!1;function ot(){X&&!V&&b.scrollWidth-b.clientWidth>1&&(V=!0,b.showWhole(X,!1))}function lt(){p=null,ot(),Z()}function M(L){var W=L.getBoundingClientRect(),R=W.left-b.getBoundingClientRect().left+b.scrollLeft;return{start:R,end:R+W.width}}b.showWhole=function(L,W){var R=getComputedStyle(b),ht=b.scrollWidth-b.clientWidth,Y=b.scrollLeft,nt=M(L),At=parseFloat(R.scrollPaddingLeft)||0,Bt=parseFloat(R.getPropertyValue("--fade-sideways-px"))||At;if(!(ht<=1)){var kt=function(q){return q<ht-1?Bt:0},vt=Y;nt.start<Y+(Y>1?At:0)?vt=nt.start-At:nt.end>Y+b.clientWidth-kt(Y)&&(vt=nt.start-At,_().some(function(q){var j=Math.max(0,Math.min(ht,M(q).start-At));return j>Y&&nt.end<=j+b.clientWidth-kt(j)?(vt=j,!0):!1}));var _t=_(),J=L===_t[_t.length-1];if(L===_t[0]?vt=0:J&&(vt=ht),vt=Math.max(0,Math.min(ht,vt)),!(Math.abs(vt-Y)<1)){if(!W||D){b.scrollLeft=vt;return}b.scrollTo({left:vt,behavior:"smooth"}),clearTimeout(b.settleTimer),b.settleTimer=setTimeout(function(){J&&(vt=b.scrollWidth-b.clientWidth),Math.abs(b.scrollLeft-vt)>1&&b.scrollTo({left:vt,behavior:"smooth"})},450)}}},X&&window.zaismaWatch.fontsIn(function(){V&&b.showWhole(X,!1)});var A=!1;b.addEventListener("scroll",function(){A||(A=!0,requestAnimationFrame(function(){A=!1,Z()}))},{passive:!0}),window.zaismaWatch.size(b,lt),b.firstElementChild&&window.zaismaWatch.size(b.firstElementChild,lt),window.zaismaWatch.fontArrived(lt),lt(),requestAnimationFrame(function(){requestAnimationFrame(function(){b.classList.add("fades-ease")})})})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.backdrop||(H.backdrop=!0,(function(){var m=\`float h1(float n){return fract(sin(n*127.1)*43758.5453);}
|
|
11383
|
+
var MINIFIED_FIRST_PAINT_SCRIPT = { sourceSha256: "82810f1cca278b7a06dbd6b534a94b5a631f3928f22be311f9932d278f00646e", minifiedText: `(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.theme||(H.theme=!0,(function(){var m=document.documentElement,o=window.matchMedia("(prefers-color-scheme: dark)"),w=[];function y(){var d=m.getAttribute("data-theme-choice");return d==="light"||d==="dark"?d:"system"}function a(){return y()==="system"?o.matches?"dark":"light":y()}function r(){var d=a();m.getAttribute("data-theme")!==d&&(m.setAttribute("data-theme",d),w.forEach(function(u){u(d)}))}o.addEventListener&&o.addEventListener("change",r),new MutationObserver(r).observe(m,{attributes:!0,attributeFilter:["data-theme-choice"]}),window.zaismaTheme={now:a,choice:y,onChange:function(d){w.push(d)}},r()})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["cutout-side"]||(H["cutout-side"]=!0,(function(){if(!/iPhone/.test(navigator.userAgent))return;var m=document.documentElement;function o(){var w=window.orientation;w===90?m.setAttribute("data-cutout-side","left"):w===-90?m.setAttribute("data-cutout-side","right"):m.removeAttribute("data-cutout-side")}window.addEventListener("orientationchange",o),o()})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["following-files"]||(H["following-files"]=!0,(function(){var m=!1,o=document.readyState!=="loading",w=!1;function y(){if(w||!m||!o)return;w=!0;var d=[],u=null;function h(v){var i=document.createElement("script");return i.src=v.href,i.async=!1,document.body.appendChild(i),i}document.querySelectorAll("link[rel=preload][data-page-script]").forEach(function(v){document.prerendering&&v.hasAttribute("data-when-opened")?d.push(v):u=h(v)}),d.length&&document.addEventListener("prerenderingchange",function(){d.forEach(h)},{once:!0});function s(){window.zaismaWatch&&window.zaismaWatch.settled()}u?(u.addEventListener("load",s),u.addEventListener("error",s)):s()}function a(){m=!0,y()}function r(){var d=Array.prototype.slice.call(document.querySelectorAll("link[rel=preload][data-site-style]"));if(!d.length){a();return}var u=d.length,h=function(){--u===0&&a()};d.forEach(function(s){var v=document.createElement("link");v.rel="stylesheet",v.href=s.href,v.media="print",v.addEventListener("load",function(){function i(){v.media="all",h()}window.zaismaWatch?window.zaismaWatch.afterArrival(i):i()}),v.addEventListener("error",h),s.after(v)}),setTimeout(a,1e4)}o?r():document.addEventListener("readystatechange",function d(){document.readyState!=="loading"&&(document.removeEventListener("readystatechange",d),o=!0,r(),y())})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.watch||(H.watch=!0,(function(){var m=[],o="working",w=[],y=new Map,a=[],r=[],d=null,u=!1,h=!1,s=null;function v(M){M()}function i(M){var A=new Map;M.forEach(function(L){var W=L.batch||v,R=A.get(W);R||(R=new Set,A.set(W,R)),R.add(L.callback)}),A.forEach(function(L,W){W(function(){L.forEach(function(R){R()})})})}function C(M,A,L,W){A.push({callback:L,batch:W}),!(M==="resize"?u:h)&&(M==="resize"?(u=!0,window.addEventListener("resize",function(){i(a.slice())})):(h=!0,window.addEventListener("scroll",function(){i(r.slice())},{passive:!0,capture:!0})))}var T=null;function D(){if(T)return T;var M=["textarea","select","[popover]","dialog",".scrolls","[style*='overflow']"];function A(L){for(var W=0;W<L.length;W++){var R=L[W],ht=R.style;ht&&R.selectorText&&/auto|scroll|var\\(/.test(ht.overflowY+" "+ht.getPropertyValue("overflow"))&&M.push(R.selectorText),R.cssRules&&A(R.cssRules)}}return Array.prototype.forEach.call(document.styleSheets,function(L){try{A(L.cssRules)}catch{}}),T=M,M}function b(M,A){var L;try{L=M.querySelectorAll(A)}catch{try{L=M.querySelectorAll(A.replace(/::[a-z-]+(\\([^)]*\\))?/g,""))}catch{return[]}}return Array.from(L)}function _(M){return M!==document.body&&document.body.contains(M)&&(M.classList.contains("scrolls")&&!M.classList.contains("across")||/^(auto|scroll)$/.test(getComputedStyle(M).overflowY))}window.zaismaWatch={page:function(M){w.push(M)},arriving:function(M){Q.push(M)},afterArrival:function(M){var A=document.getAnimations?document.getAnimations().filter(function(R){return(R.playState==="running"||R.playState==="paused")&&/^(page-arrives|opening-game-settles)$/.test(R.animationName||"")}):[];if(!A.length){M();return}var L=!1;function W(){L||(L=!0,M())}Promise.all(A.map(function(R){return R.finished.catch(function(){})})).then(W),setTimeout(W,1e3)},afterSettling:function(M){window.zaismaWatch.afterArrival(function(){if(o==="settled"){M();return}m.push(M),setTimeout(window.zaismaWatch.settled,1500)})},settled:function(){o==="working"&&(o="painting",requestAnimationFrame(function(){requestAnimationFrame(function(){o="settled",m.splice(0).forEach(function(M){M()})})}))},whenRead:function(M){document.readyState!=="loading"?M():Z.push(M)},fontArrived:function(M){window.zaismaWatch.fontsIn(M),document.fonts&&document.fonts.addEventListener&&document.fonts.addEventListener("loadingdone",function(){M()})},fontsIn:function(M){window.zaismaWatch.whenRead(function(){document.body.offsetHeight,document.fonts&&document.fonts.ready?document.fonts.ready.then(M):M()})},size:function(M,A,L){if(!window.ResizeObserver){C("resize",a,A,L);return}d||(d=new ResizeObserver(function(R){var ht=[];R.forEach(function(Y){(y.get(Y.target)||[]).forEach(function(nt){ht.push(nt)})}),i(ht)}));var W=y.get(M);W||(W=[],y.set(M,W),d.observe(M,{box:"border-box"})),W.push({callback:A,batch:L})},resize:function(M,A){C("resize",a,M,A)},drawAll:function(){var M=a.slice();y.forEach(function(A,L){L.isConnected&&A.forEach(function(W){M.push(W)})}),i(M)},scroll:function(M){C("scroll",r,M)},scrollBoxes:function(){if(s)return s;var M=new Set;D().forEach(function(L){b(document,L).forEach(function(W){_(W)&&M.add(W)})});var A=Array.from(M).sort(function(L,W){return L.compareDocumentPosition(W)&4?-1:1});return document.readyState!=="loading"&&(s=A),A},scrollBoxesIn:function(M){var A=new Set;return D().forEach(function(L){var W=b(M,L);try{M.matches(L)&&W.unshift(M)}catch{}W.forEach(function(R){_(R)&&A.add(R)})}),Array.from(A)},eachArriving:function(M,A){var L=new WeakSet;function W(R){L.has(R)||(L.add(R),A(R))}document.querySelectorAll(M).forEach(W),Q.push(function(R){R.forEach(function(ht){ht.addedNodes.forEach(function(Y){Y.nodeType!==1||!Y.isConnected||(Y.matches(M)&&W(Y),Y.querySelectorAll(M).forEach(W))})})})},each:function(M,A){var L=new WeakSet,W=[];function R(Y){if(!L.has(Y)){if(!V(Y)){W.push(Y);return}L.add(Y),A(Y)}}function ht(){var Y=W;W=[],Y.forEach(R)}document.querySelectorAll(M).forEach(R),W.length&&document.addEventListener("readystatechange",ht),w.push(function(Y){ht(),Y.forEach(function(nt){nt.addedNodes.forEach(function(At){At.nodeType!==1||!At.isConnected||(At.matches(M)&&R(At),At.querySelectorAll(M).forEach(R))})})})}};function g(M){var A=new Map;return M.filter(function(L){if(L.target instanceof SVGElement)return!1;if(L.type!=="attributes")return!0;var W=A.get(L.target);return W||(W={},A.set(L.target,W)),W[L.attributeName]?!1:(W[L.attributeName]=!0,L.oldValue!==L.target.getAttribute(L.attributeName))})}var k=[],Q=[],Z=[],X=/^(IMG|INPUT|IFRAME|CANVAS|VIDEO|AUDIO|SOURCE|BR|HR|LINK|META)$/;function V(M){if(document.readyState!=="loading"||X.test(M.nodeName))return!0;for(var A=M;A&&A!==document.body;A=A.parentNode)if(A.nextSibling)return!0;return!1}function ot(M){return M.type!=="childList"||Array.prototype.every.call(M.addedNodes,function(A){return A.nodeType!==1||V(A)})}function lt(M){var A=k.concat(M);k=[];var L=A.filter(function(W){return ot(W)?!0:(k.push(W),!1)});L.length&&w.slice().forEach(function(W){W(L)})}new MutationObserver(function(M){var A=g(M);A.length&&Q.slice().forEach(function(L){L(A)}),(A.length||k.length)&<(A)}).observe(document.body,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["class","open","hidden"]}),document.readyState==="loading"&&document.addEventListener("readystatechange",function M(){document.readyState!=="loading"&&(document.removeEventListener("readystatechange",M),lt([]),Z.splice(0).forEach(function(A){A()}),window.zaismaWatch.afterArrival(window.zaismaWatch.drawAll))})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["page-switch"]||(H["page-switch"]=!0,(function(){var m="zaisma:opening-game",o=document.documentElement;function w(v){try{var i=new URL(v,location.href),C=i.origin===location.origin&&i.pathname.match(/^\\/g\\/([^/]+)$/);return C?C[1]:null}catch{return null}}document.addEventListener("click",function(v){var i=v.target.closest&&v.target.closest("a[href]"),C=i&&w(i.href);try{sessionStorage.removeItem(m)}catch{}if(!(!C||!i.querySelector(".picture, img")||v.button!==0||v.metaKey||v.ctrlKey||v.shiftKey||v.altKey||i.target&&i.target!=="_self"||C===w(location.href)))try{sessionStorage.setItem(m,JSON.stringify({slug:C,pressed_at_ms:Date.now()}))}catch{}});var y=performance.getEntriesByType&&performance.getEntriesByType("navigation")[0],a=!1;if(!y||y.type==="back_forward"||matchMedia("(prefers-reduced-motion: reduce)").matches)return;try{a=new URL(document.referrer).origin===location.origin}catch{}function r(){var v=null;try{v=JSON.parse(sessionStorage.getItem(m)||"null"),sessionStorage.removeItem(m)}catch{}v&&v.slug===w(location.href)&&Date.now()-v.pressed_at_ms<1e4&&o.classList.add("is-opening-game")}var d=!1,u=!1;function h(){u||!d||document.prerendering||(u=!0,requestAnimationFrame(function(){o.classList.remove("is-page-held"),setTimeout(function(){o.classList.remove("is-page-arriving","is-page-arriving-fresh","is-opening-game")},1500)}))}function s(){d=!0,h()}o.classList.add("is-page-arriving","is-page-held"),(!a||y.type!=="navigate")&&o.classList.add("is-page-arriving-fresh"),document.prerendering?document.addEventListener("prerenderingchange",function(){r(),s()},{once:!0}):r();try{new PerformanceObserver(function(v){v.getEntriesByName("first-contentful-paint").length&&s()}).observe({type:"paint",buffered:!0})}catch{s()}setTimeout(s,1e3)})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["measured-glass"]||(H["measured-glass"]=!0,(function(){if(!window.zaismaWatch)return;function m(a){return a.closest(":has(> .backdrop)")}function o(a){var r=a&&a.querySelector(":scope > .backdrop[data-adapts-glass][data-glass-kind], :scope > .backdrop .backdrop[data-adapts-glass][data-glass-kind]");return r?{isSmoked:r.getAttribute("data-glass-kind")==="smoked",tint:r.getAttribute("data-glass-tint")||""}:null}function w(a,r){a.classList.toggle("smoke",r.isSmoked),r.isSmoked?a.removeAttribute("data-theme-choice"):a.hasAttribute("data-theme-choice")||a.setAttribute("data-theme-choice","light"),r.tint&&a.style.setProperty("--glass-tint",r.tint)}function y(a,r){a.ownThemeChoice===void 0&&(a.ownThemeChoice=a.getAttribute("data-theme-choice")),a.classList.toggle("smoke",r.isSmoked),r.isSmoked?a.removeAttribute("data-theme-choice"):a.setAttribute("data-theme-choice",a.ownThemeChoice||"light")}window.zaismaWatch.eachArriving("[data-adapts-glass][data-glass-kind]",function(a){var r=a.parentElement,d=o(r);r&&d&&y(r,d),document.querySelectorAll("[data-glass]:not([data-cut-line])").forEach(function(u){var h=m(u),s=o(h);s&&w(u,s)})}),window.zaismaWatch.eachArriving("[data-glass]:not([data-cut-line])",function(a){var r=m(a),d=o(r);d&&w(a,d)})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.pictures||(H.pictures=!0,(function(){function m(o,w){if(w){o.classList.add("at-once"),o.classList.add("is-shown");return}o.addEventListener("animationend",function(){o.classList.add("at-once")},{once:!0}),o.classList.contains("backdrop")&&window.zaismaWatch&&window.zaismaWatch.afterSettling?window.zaismaWatch.afterSettling(function(){o.classList.add("is-shown")}):o.classList.add("is-shown")}window.zaismaWatch.each("img.reveals",function(o){var w=!!(window.performance&&performance.getEntriesByType&&performance.getEntriesByType("paint").length);if(o.complete&&o.naturalWidth&&!w){m(o,!0);return}if(o.complete&&o.naturalWidth){(o.decode?o.decode():Promise.resolve()).then(function(){m(o,!1)},function(){m(o,!1)});return}o.addEventListener("load",function(){(o.decode?o.decode():Promise.resolve()).then(function(){m(o,!1)},function(){m(o,!1)})})})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.glass||(H.glass=!0,(function(){var m="http://www.w3.org/2000/svg",o={};function w(e){return e in o||(o[e]=parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--"+e.replace(/-(large|small)$/,"-cut-$1")))||0),o[e]}["pane","header","menu","strip"].forEach(function(e){w(e+"-large"),w(e+"-small")});function y(e,n){var x=(e.getAttribute("data-glass-corners")||n).trim().split(/\\s+/);return x.length===1&&/^[a-z]+$/.test(x[0])&&(x=[x[0]+"-large",x[0]+"-small",x[0]+"-large",x[0]+"-small"]),x.map(function(F){return/^[a-z]+-(large|small)$/.test(F)?w(F):Number(F)||0})}window.zaismaCorners=y;function a(e,n,x,F){var P=F,K=F*.414,B=x.map(function(N){return N>0?N+K:P});return[[P,B[0]],[B[0],P],[e-B[1],P],[e-P,B[1]],[e-P,n-B[2]],[e-B[2],n-P],[B[3],n-P],[P,n-B[3]]]}function r(e){return e.map(function(n){return n[0].toFixed(1)+","+n[1].toFixed(1)}).join(" ")}function d(e){var n=e.parentElement;return e.getAttribute("aria-busy")==="true"||!!e.querySelector(':scope > input[aria-busy="true"]')||!!(n&&n.getAttribute("aria-busy")==="true")||e.hasAttribute("data-waits-here")&&!!e.closest('[aria-busy="true"]')}function u(e){var n=e.querySelector(":scope > .waiting-glint");if(!d(e)){if(n&&!n.classList.contains("is-leaving")){if(window.matchMedia("(prefers-reduced-motion: reduce)").matches){n.remove();return}n.classList.add("is-leaving"),n.addEventListener("animationend",function(F){F.animationName==="waiting-glint-leaves"&&n.classList.contains("is-leaving")&&n.remove()})}return}n&&n.classList.contains("is-leaving")&&n.classList.remove("is-leaving"),n||(n=document.createElement("span"),n.className="waiting-glint",n.setAttribute("aria-hidden","true"),e.insertBefore(n,e.firstChild))}window.zaismaWaiting={redraw:function(e){[e,e.parentElement].concat(Array.prototype.slice.call(e.querySelectorAll("[data-cut-line]"))).forEach(function(n){n&&n.hasAttribute("data-cut-line")&&u(n)})}};var h=[80,100,70,28,12,0,40,62],s={"top-left":80,top:100,"top-right":70,right:28,"bottom-right":12,bottom:0,"bottom-left":40,left:62};function v(e,n,x,F,P){for(;n.length<x.length;){var K=document.createElementNS(m,"polygon");e.appendChild(K),n.push(K)}for(;n.length>x.length;)e.removeChild(n.pop());n.forEach(function(B,N){var it=(N+1)%x.length;B.style.setProperty("--side-light",P[N]+"%"),B.setAttribute("points",r([x[N],x[it],F[it],F[N]]))})}var i=null;function C(e,n){if(i){e();return}i={rects:new Map,sizes:new Map,groups:new Map,scrollers:new Map,isBatch:!!n,isMeasured:!1};try{e()}finally{i=null}}function T(e){C(e,!0)}function D(){i.isMeasured=!0,document.querySelectorAll("[data-cut-line], [data-glass]").forEach(function(e){i.rects.set(e,e.getBoundingClientRect()),i.sizes.set(e,[e.offsetWidth,e.offsetHeight])}),document.querySelectorAll("[data-cut-line]").forEach(function(e){g(j(e)).push(e)}),document.querySelectorAll("body .own-scroll, body .scrolls, body .layout-track").forEach(function(e){i.scrollers.set(e,b(e))})}function b(e){return{scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,clientHeight:e.clientHeight,scrollLeft:e.scrollLeft,scrollWidth:e.scrollWidth,clientWidth:e.clientWidth}}function _(e){var n=i.scrollers.get(e);return n||(n=b(e),i.scrollers.set(e,n)),n}function g(e){var n=i.groups.get(e);return n||(n=[],i.groups.set(e,n)),n}function k(e){i.isBatch&&!i.isMeasured&&D();var n=i.rects.get(e);return n||(n=e.getBoundingClientRect(),i.rects.set(e,n)),n}function Q(e){i.isBatch&&!i.isMeasured&&D();var n=i.sizes.get(e);return n||(n=[e.offsetWidth,e.offsetHeight],i.sizes.set(e,n)),n}function Z(e){if(i.isBatch&&!i.isMeasured&&D(),i.isMeasured)return i.groups.get(e)||[];var n=i.groups.get(e);return n||(n=Array.prototype.filter.call((e||document).querySelectorAll("[data-cut-line]"),function(x){return j(x)===e}),i.groups.set(e,n)),n}var X=new Map,V=!1;function ot(){T(function(){X.forEach(function(e,n){n.isConnected?e():X.delete(n)})})}window.zaismaRedrawEdges=ot;var lt=!!(document.fonts&&document.fonts.addEventListener);lt&&document.fonts.addEventListener("loadingdone",function(){ot(),Ot()});function M(){lt||V||!document.fonts||!document.fonts.ready||document.fonts.status!=="loading"||(V=!0,document.fonts.ready.then(function(){V=!1,ot()}))}var A=-1;window.zaismaWatch.size(document.documentElement,function(){var e=document.documentElement.clientWidth,n=A<0;e!==A&&(A=e,n||(ot(),Ot()))},T);var L=0;function W(e,n){var x=e.querySelector(":scope > .edge"),F="zg"+L++,P=null,K="",B="",N=e.hasAttribute("data-cut-line");x||(x=document.createElementNS(m,"svg"),x.setAttribute("class","edge"),x.setAttribute("aria-hidden","true"),e.appendChild(x));function it(zt,Ct){var t=document.createElementNS(m,zt);for(var c in Ct)t.setAttribute(c,Ct[c]);return x.appendChild(t),t}function mt(){x.innerHTML='<defs><linearGradient id="'+F+'fr" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#7fd8ff" stop-opacity="0.5"/><stop offset="0.5" stop-color="#fff" stop-opacity="0"/><stop offset="1" stop-color="#ffc58a" stop-opacity="0.5"/></linearGradient><linearGradient id="'+F+'in" x1="1" y1="1" x2="0" y2="0"><stop class="gleam" offset="0"/><stop class="gleam" offset="0.4" stop-opacity="0"/><stop class="gleam" offset="0.75" stop-opacity="0"/><stop class="gleam" offset="1" stop-opacity="0.35"/></linearGradient><linearGradient id="'+F+'sp" x1="0" y1="0" x2="1" y2="1"><stop class="spec" offset="0"/><stop class="spec" offset="0.08"/><stop class="spec" offset="0.3" stop-opacity="0"/></linearGradient></defs>',P={dense:it("path",{class:"dense","fill-rule":"evenodd"}),bevel:it("g",{class:"bevel"}),bevelQuads:[],hair:it("polygon",{class:"hair",fill:"none","stroke-width":"1.2"}),rimBand:it("g",{class:"rim-band"}),rimQuads:[],rim:it("polygon",{class:"rim",fill:"none","stroke-width":"1.6"}),spec:it("polygon",{class:"spec-line",fill:"none",stroke:"url(#"+F+"sp)","stroke-width":"1.4"}),fringe:it("polygon",{class:"fringe",fill:"none",stroke:"url(#"+F+"fr)","stroke-width":"0.8"}),inner:it("polygon",{class:"inner",fill:"none",stroke:"url(#"+F+"in)","stroke-width":"1"}),caustics:N?[]:[1,2,3,4].map(function(zt){return{group:it("g",{class:"caustic step-"+zt}),quads:[]}}),facets:[]}}function et(){C(st)}function st(){var zt=Q(e),Ct=zt[0],t=zt[1];if(!(!Ct||!t)){var c=Math.min(Ct,t),f=Number(e.getAttribute("data-glass-band"))||Math.max(2,Math.min(4,c*.04)),p,S;if(P||mt(),N){var ct=O(E(e,Ct,t)),bt=Ct+"x"+t+":"+r(ct);if(bt===K)return;K=bt,e.style.setProperty("--cut-shape",G(ct)),e.style.clipPath=G(ct),p=function(at){return ft(ct,at)},S=ct.map(function(at,Ft){return s[gt(at,ct[(Ft+1)%ct.length])]})}else{var ut=n().map(function(at){return Math.min(at,Math.round(c*.3))}),U=ut.join(",")+":"+f;U!==K&&(K=U,e.style.setProperty("--glass-clip","polygon(0 "+ut[0]+"px, "+ut[0]+"px 0, calc(100% - "+ut[1]+"px) 0, 100% "+ut[1]+"px, 100% calc(100% - "+ut[2]+"px), calc(100% - "+ut[2]+"px) 100%, "+ut[3]+"px 100%, 0 calc(100% - "+ut[3]+"px))"),["top-left","top-right","bottom-right","bottom-left"].forEach(function(at,Ft){e.style.setProperty("--glass-cut-"+at,ut[Ft]+f*Math.SQRT2+"px")}),window.zaismaCast&&e.classList.contains("floating-pane")&&e.matches(":popover-open")&&window.zaismaCast(e));var dt=e.zaismaEdgeShape?e.zaismaEdgeShape(Ct,t,ut):null,Mt=Number(e.getAttribute("data-glass-lean"));!dt&&Mt&&(dt=[[t*Mt,0],[Ct,0],[Ct,t],[0,t]],e.style.setProperty("--glass-clip",G(dt))),dt&&(dt=O(dt));var Et=Ct+"x"+t+":"+f+":"+U+(dt?":"+r(dt):"");if(Et===B)return;B&&Yt(e),B=Et,dt?(p=function(at){return ft(dt,at)},S=dt.map(function(at,Ft){return s[gt(at,dt[(Ft+1)%dt.length])]})):(p=function(at){return a(Ct,t,ut,at)},S=h)}x.removeAttribute("viewBox"),P.dense.setAttribute("d","M"+r(p(0))+"Z M"+r(p(f*1.6))+"Z"),v(P.bevel,P.bevelQuads,p(0),p(f),S),v(P.rimBand,P.rimQuads,p(0),p(1.6),S),P.hair.setAttribute("points",r(p(.6))),P.rim.setAttribute("points",r(p(1.6))),P.spec.setAttribute("points",r(p(1.6))),P.fringe.setAttribute("points",r(p(Math.max(2.4,f-.8)))),P.inner.setAttribute("points",r(p(f)));var Kt=[f,f+2,f+5,f+9,f+14];P.caustics.forEach(function(at,Ft){v(at.group,at.quads,p(Kt[Ft]),p(Kt[Ft+1]),S)});var Ut=p(0),yt=[];for(Ut.forEach(function(at,Ft){var Wt=Ut[(Ft+1)%Ut.length],Xt=gt(at,Wt);Xt.indexOf("-")>0&&Math.hypot(Wt[0]-at[0],Wt[1]-at[1])>.5&&yt.push([at,Wt,Xt])});P.facets.length<yt.length;)P.facets.push(it("line",{}));P.facets.forEach(function(at,Ft){var Wt=yt[Ft];if(at.style.display=Wt?"":"none",!!Wt){var Xt=Wt[2]==="top-left";at.setAttribute("class",Xt?"facet lit":"facet"),at.setAttribute("stroke-width",Xt?"4.5":"3"),at.setAttribute("x1",Wt[0][0]),at.setAttribute("y1",Wt[0][1]),at.setAttribute("x2",Wt[1][0]),at.setAttribute("y2",Wt[1][1])}})}}return et(),e.redrawGlass=function(){et()},window.zaismaWatch.size(e,et,T),N&&(X.set(e,et),M()),et}var R=getComputedStyle(document.documentElement),ht=function(e,n){return parseFloat(R.getPropertyValue(e))||n},Y=ht("--control-slant",10),nt=ht("--gap-control-row",4),At=ht("--gap-control-stack",8),Bt=4,kt=nt-Y-.5,vt=nt-Y+.5,_t=[16,8,16,8],J=2;function q(e){var n=y(e,"header"),x=Q(e),F=Math.min(x[0],x[1]);return n.map(function(P){return Math.min(P,Math.round(F*.3))})}function j(e){var n=e.parentElement&&e.parentElement.closest("[data-glass], [data-cut-line], [data-on-no-pane]");return n&&!n.hasAttribute("data-on-no-pane")?n:null}function St(e,n){var x=k(n),F=e.parentElement&&e.parentElement.closest(".own-scroll, .scrolls"),P=e.parentElement&&e.parentElement.closest(".layout-track");if(P&&P!==n&&n.contains(P)){var K=_(P);K.scrollWidth>K.clientWidth+1&&(x={top:x.top,bottom:x.bottom,left:x.left-K.scrollLeft,right:x.right+K.scrollWidth-K.clientWidth-K.scrollLeft})}if(!F||F===n||!n.contains(F)||e.parentElement&&getComputedStyle(e.parentElement).position==="sticky")return x;var B=_(F);return B.scrollHeight<=B.clientHeight+1?x:{top:x.top-B.scrollTop,bottom:x.bottom+B.scrollHeight-B.clientHeight-B.scrollTop,left:x.left,right:x.right}}function rt(e,n,x,F){if(e===document.fullscreenElement)return[0,0,0,0];var P=j(e);if(!P&&e.hasAttribute("data-cut-square"))return[0,0,0,0];if(!P){var K=Tt(e);return _t.map(function(S,ct){return(ct<2?K.above:K.below)?0:Math.min(S,Math.round(Math.min(n,x)*.25))})}var B=P===document.fullscreenElement?[0,0,0,0]:P.hasAttribute("data-cut-line")||P.cutCorners?P.cutCorners||[0,0,0,0]:q(P),N=k(e.parentElement&&e.parentElement.classList.contains("toggle-btn")?e.parentElement:e),it=St(e,P),mt=F?F.ends:e.getAttribute("data-cut-ends")||"",et=N.top-it.top,st=it.bottom-N.bottom,zt=F?F.stack:e.getAttribute("data-cut-stack");if(zt!=null){var Ct=N.left-it.left;et=/first/.test(zt)?Ct:1e6,st=/last/.test(zt)?Ct:1e6}var t=/start/.test(mt)?(et+st)/2:N.left-it.left,c=/end/.test(mt)?(et+st)/2:it.right-N.right,f=parseFloat(getComputedStyle(P).getPropertyValue("--rail-inset"))||0,p=Math.max(n,x)<3*Math.min(n,x)?Math.min(n,x)*.5:1/0;return[[t,et],[c,et],[c,st],[t,st]].map(function(S,ct){var bt=Math.max(0,S[0])+Math.max(0,S[1]),ut=Math.max(0,(B[ct]||0)-bt+Math.SQRT2*Math.min(bt/2,f));return Math.min(p,ut>0?Math.max(Bt,ut):0)})}function Nt(e,n){var x=n?n.beside:e.getAttribute("data-cut-beside");if(x!==null)return{start:/start/.test(x),end:/end/.test(x)};var F=j(e),P=k(e),K={start:!1,end:!1};return Z(F).forEach(function(B){if(B!==e){var N=k(B);if(!(!N.width||!N.height)&&!(Math.min(P.bottom,N.bottom)-Math.max(P.top,N.top)<Math.min(P.height,N.height)/2)){var it=N.left-P.right,mt=P.left-N.right,et=it>=kt&&it<=vt,st=mt>=kt&&mt<=vt;(et||st)&&!B.contains(e)&&!e.contains(B)&&(et&&(K.end=!0),st&&(K.start=!0))}}}),K}function Tt(e){var n=k(e),x={above:!1,below:!1};return Z(null).forEach(function(F){if(F!==e){var P=k(F);if(!(!P.width||!P.height)&&!(Math.min(n.right,P.right)-Math.max(n.left,P.left)<Math.min(n.width,P.width)/2)){var K=P.top-n.bottom,B=n.top-P.bottom,N=K>=-1&&K<=At+.5,it=B>=-1&&B<=At+.5;(N||it)&&!F.contains(e)&&!e.contains(F)&&(N&&(x.below=!0),it&&(x.above=!0))}}}),x}function l(e,n,x,F,P,K){var B=Math.min(x,e/3),N=F.map(function(f){return Math.min(f,n)});[[0,3],[1,2]].forEach(function(f){var p=N[f[0]]+N[f[1]];p>n&&(N[f[0]]*=n/p,N[f[1]]*=n/p)});var it=function(f,p,S,ct){return f>=J?[p,S]:[ct,ct]},mt=[].concat(P.start?[[B,0],[B,0]]:it(N[0],[0,N[0]],[N[0],0],[0,0]),P.end?[[e,0],[e,0]]:it(N[1],[e-N[1],0],[e,N[1]],[e,0]),P.end?[[e-B,n],[e-B,n]]:it(N[2],[e,n-N[2]],[e-N[2],n],[e,n]),P.start?[[0,n],[0,n]]:it(N[3],[N[3],n],[0,n-N[3]],[0,n]));if(e>=3*n||K){var et=F.map(function(f){return f>n+.5?f:0}),st=function(f){return Math.max(0,Math.min(e,f))};if(!P.end&&et[2]&&F[1]<J){var zt=e+n-et[2];mt.splice(2,4,[st(zt),0],[st(zt),0],[st(zt),0],[st(e-et[2]),n])}if(!P.end&&et[1]&&F[2]<J){var Ct=e-et[1];mt.splice(2,4,[st(Ct),0],[st(Ct+n),n],[st(Ct+n),n],[st(Ct+n),n])}if(!P.start&&et[0]&&F[3]<J){var t=et[0];mt.splice(6,2,[st(t-n),n],[st(t-n),n]),mt.splice(0,2,[st(t-n),n],[st(t),0])}if(!P.start&&et[3]&&F[0]<J){var c=et[3];mt.splice(0,2,[st(c-n),0],[st(c-n),0]),mt.splice(6,2,[st(c),n],[st(c-n),0])}}return mt}function E(e,n,x,F){if(e.hasAttribute("data-cut-diamond"))return e.cutCorners=[n/2,n/2,n/2,n/2],[[n/2,0],[n,x/2],[n/2,x],[0,x/2]];var P=Nt(e,F),K=rt(e,n,x,F);if(e.hasAttribute("data-cut-beside")){var B=j(e),N=B&&B.getAttribute("data-slanted")||"",it=F?F.ends:e.getAttribute("data-cut-ends")||"";/start/.test(it)&&/start/.test(N)&&(P.start=!0),/end/.test(it)&&/end/.test(N)&&(P.end=!0)}var mt=[P.start?0:K[0],P.end?0:K[1],P.end?0:K[2],P.start?0:K[3]].map(function(st){return Math.min(st,x)});if([[0,3],[1,2]].forEach(function(st){var zt=mt[st[0]]+mt[st[1]];zt>x&&(mt[st[0]]*=x/zt,mt[st[1]]*=x/zt)}),e.cutCorners=mt,!F){var et=((P.start?"start ":"")+(P.end?"end":"")).trim();(e.getAttribute("data-slanted")||"")!==et&&(et?e.setAttribute("data-slanted",et):e.removeAttribute("data-slanted"))}return l(n,x,e.hasAttribute("data-cut-beside")&&Number(e.getAttribute("data-cut-line"))||Y,K,P)}function O(e,n){var x=n||.01;return e.filter(function(F,P){var K=e[(P+e.length-1)%e.length];return Math.abs(F[0]-K[0])>x||Math.abs(F[1]-K[1])>x})}function G(e){return"polygon("+e.map(function(n){return n[0].toFixed(2)+"px "+n[1].toFixed(2)+"px"}).join(", ")+")"}function ft(e,n){if(!n)return e;var x=e.length,F=e.map(function(P,K){var B=e[(K+1)%x],N=B[0]-P[0],it=B[1]-P[1],mt=Math.hypot(N,it)||1,et=-it/mt,st=N/mt;return{x:P[0]+et*n,y:P[1]+st*n,dx:N,dy:it,nx:et,ny:st}});return F.map(function(P,K){var B=F[(K+x-1)%x],N=B.dx*P.dy-B.dy*P.dx;if(Math.abs(N)<1e-6)return[P.x,P.y];var it=((P.x-B.x)*P.dy-(P.y-B.y)*P.dx)/N;return[B.x+B.dx*it,B.y+B.dy*it]})}var $=["right","top-right","top","top-left","left","bottom-left","bottom","bottom-right"];function gt(e,n){var x=n[0]-e[0],F=n[1]-e[1],P=Math.atan2(x,F)*180/Math.PI;return $[(Math.round(P/45)%8+8)%8]}function Lt(e){var n=e.querySelector(":scope > .cut-line");n||(n=document.createElementNS(m,"svg"),n.setAttribute("class","cut-line"),n.setAttribute("aria-hidden","true"),e.insertBefore(n,e.firstChild));var x=n.querySelector("polygon")||n.appendChild(document.createElementNS(m,"polygon")),F=[],P="";function K(et){return et.map(function(st){return st[0].toFixed(2)+","+st[1].toFixed(2)}).join(" ")}var B=null;function N(){C(it)}function it(){var et=Q(e),st=et[0],zt=et[1];if(!(!st||!zt)){var Ct=st+"x"+zt;B&&B.sizeKey!==Ct&&(B.sizeKey=Ct,B.toShape=E(e,st,zt),B.fromShape=E(e,st,zt,B.from));var t=B?B.toShape:E(e,st,zt);if(B){var c=Math.min(1,(performance.now()-B.startMs)/B.ms),f=B.ease?B.ease(c):1-Math.pow(1-c,3),ut=B.fromShape;t=t.map(function(yt,at){return[ut[at][0]+(yt[0]-ut[at][0])*f,ut[at][1]+(yt[1]-ut[at][1])*f]}),c>=1?B=null:B.isDriven||requestAnimationFrame(N)}t=O(t);var p=st+"x"+zt+":"+K(t);if(p!==P){P=p,e.style.setProperty("--cut-shape",G(t)),e.hasAttribute("data-cut-sizes")&&["top-left","top-right","bottom-right","bottom-left"].forEach(function(Ut,yt){e.style.setProperty("--cut-size-"+Ut,(e.cutCorners&&e.cutCorners[yt]||0).toFixed(1)+"px")}),n.setAttribute("viewBox","0 0 "+st+" "+zt),n.setAttribute("preserveAspectRatio","none"),B&&(n.classList.add("is-gliding"),clearTimeout(n.glideEnd),n.glideEnd=setTimeout(function(){n.classList.remove("is-gliding")},B.ms+200)),t=O(t,1);var S=ft(t,1);x.setAttribute("points",K(S)),u(e);var ct=Number(e.getAttribute("data-cut-ring"))||0;if(ct){var bt=n.querySelector(".cut-ring");bt||(bt=document.createElementNS(m,"polygon"),bt.setAttribute("class","cut-ring"),n.appendChild(bt)),bt.setAttribute("points",K(ft(t,-ct)))}for(var ut=Number(e.getAttribute("data-cut-inset"))||0,U=ft(t,ut),dt=ft(t,ut+1.5),Mt=F.length;F.length<t.length;){var Et=document.createElementNS(m,"path");n.insertBefore(Et,x),F.push(Et)}for(;F.length>t.length;)n.removeChild(F.pop());var Kt=Mt>0&&Mt!==F.length;F.forEach(function(Ut,yt){var at=(yt+1)%t.length,Ft="cut-band on-"+gt(t[yt],t[at]),Wt=Ut.getAttribute("class");Wt&&Wt!==Ft&&(Kt=!0),Ut.setAttribute("class",Ft),Ut.setAttribute("d","M"+K([U[yt],U[at],dt[at],dt[yt]])+"Z")}),Kt&&!n.classList.contains("is-reshaped")&&(n.classList.add("is-reshaped"),requestAnimationFrame(function(){requestAnimationFrame(function(){n.classList.remove("is-reshaped")})}))}}}N(),e.redrawCut=function(et){if(et&&et.isFrame){N();return}B=et&&et.ms>0&&!window.matchMedia("(prefers-reduced-motion: reduce)").matches?{from:et.from,ms:et.ms,ease:et.ease,isDriven:!!et.isDriven,startMs:performance.now()}:null,N()},window.zaismaWatch.size(e,N,T);var mt=e.parentElement&&e.parentElement.closest("[data-glass], [data-on-no-pane]");mt&&mt.hasAttribute("data-glass")&&window.zaismaWatch.size(mt,N,T),X.set(e,N),M()}var xt=6,Rt=new Map;function Dt(e){return e!=="none"&&(e.match(/rgba?\\([^)]*\\)/g)||[""]).some(function(n){var x=n.match(/[\\d.]+/g);return!x||x.length<4||Number(x[3])>.04})}function z(e,n){if(/^(IMG|VIDEO|CANVAS|IFRAME)$/.test(e.tagName)||n.backgroundImage!=="none"||Dt(n.boxShadow))return!0;var x=n.backgroundColor.match(/[\\d.]+/g);return x&&(x.length<4||Number(x[3])>.04)?!0:["Top","Right","Bottom","Left"].some(function(F){return parseFloat(n["border"+F+"Width"])>0&&!/rgba\\(.*, 0\\)|transparent/.test(n["border"+F+"Color"])})}function I(e){var n=[],x=k(e),F=Math.max.apply(null,q(e))/(1-Math.SQRT2/2);function P(B){return[[B.left-x.left,B.top-x.top],[x.right-B.right,B.top-x.top],[x.right-B.right,x.bottom-B.bottom],[B.left-x.left,x.bottom-B.bottom]].some(function(N){return Math.max(0,N[0])+Math.max(0,N[1])<F})}function K(B){Array.prototype.forEach.call(B.children,function(N){if(!(N instanceof SVGElement||N.matches("[data-glass], [data-cut-line], .edge, .cut-line, dialog"))){var it=N.getBoundingClientRect();if(!(!it.width||!it.height||!P(it))){if(Rt.has(N)){n.push(N);return}var mt=getComputedStyle(N);if(mt.display==="contents"||mt.display==="inline"||mt.position==="fixed")return K(N);mt.clipPath==="none"&&Math.min(it.width,it.height)>=xt&&z(N,mt)?n.push(N):K(N)}}})}return K(e),n}function tt(e){if(Rt.has(e))return;var n=null;function x(){C(F)}function F(){var P=Q(e),K=P[0],B=P[1];if(!(!K||!B||!e.isConnected)){var N=O(l(K,B,0,rt(e,K,B),{start:!1,end:!1},e.hasAttribute("data-cut-bar"))),it=N.length===4&&N.every(function(et){return(et[0]===0||et[0]===K)&&(et[1]===0||et[1]===B)}),mt=it?"":G(N.length?N:[[0,0]]);mt!==n&&(n=mt,mt?(e.style.setProperty("--cut-shape",mt),e.style.clipPath=mt):(e.style.removeProperty("--cut-shape"),e.style.removeProperty("clip-path")))}}Rt.set(e,x),X.set(e,x),window.zaismaWatch.size(e,x,T),x()}var pt="[data-glass]:not([data-cut-line])";function wt(){var e=Vt?Array.prototype.slice.call(document.querySelectorAll(pt)):Array.from(Gt);Vt=!1,Gt.clear(),T(function(){e.forEach(function(n){n.isConnected&&I(n).forEach(tt)})})}window.zaismaSettings={set:function(e,n){var x=n||document.documentElement;x.classList.add("eases-settings"),e.theme!==void 0&&(e.theme==="light"||e.theme==="dark"?x.setAttribute("data-theme-choice",e.theme):x.removeAttribute("data-theme-choice"));var F=e.glass;F&&F.hueColor!==void 0&&(typeof F.hueColor=="string"&&/^#[0-9a-fA-F]{6}$/.test(F.hueColor)?x.style.setProperty("--glass-hue",F.hueColor):x.style.removeProperty("--glass-hue"))},read:function(e){var n=e||document.documentElement,x=n.style.getPropertyValue("--glass-hue").trim();return{theme:n.getAttribute("data-theme-choice")||null,glass:{hueColor:x||null}}}},window.zaismaGlass=W,document.addEventListener("fullscreenchange",function(){var e=window.zaismaWatch;e&&requestAnimationFrame(function(){e.drawAll(),requestAnimationFrame(e.drawAll)})}),window.zaismaCutLine=Lt,window.zaismaInput=(function(){var e=!1;return document.addEventListener("keydown",function(n){/^(Shift|Control|Alt|Meta|AltGraph|CapsLock)$/.test(n.key)||(e=!0)},!0),["pointerdown","mousedown","touchstart"].forEach(function(n){document.addEventListener(n,function(){e=!1},!0)}),{isKeyboard:function(){return e}}})();var Pt=typeof WeakSet=="function"?new WeakSet:{has:function(){return!1},add:function(){}};function qt(e){if(e.querySelectorAll){var n=Array.prototype.slice.call(e.querySelectorAll("[data-glass]")),x=Array.prototype.slice.call(e.querySelectorAll("[data-cut-line]"));e.matches&&e.matches("[data-glass]")&&n.push(e),e.matches&&e.matches("[data-cut-line]")&&x.push(e),x.forEach(function(F){Pt.has(F)||F.hasAttribute("data-glass")||(Pt.add(F),Lt(F))}),n.forEach(function(F){if(!Pt.has(F)){Pt.add(F);var P=W(F,function(){var K=y(F,"pane");if(K.some(function(N){return N>0})||!j(F))return K;var B=Q(F);return F.cutCorners=rt(F,B[0],B[1])});/^[0\\s]+$/.test(F.getAttribute("data-glass-corners")||"")&&(X.set(F,P),M())}})}}T(function(){qt(document)}),window.zaismaWatch.arriving(function(e){T(function(){e.forEach(function(n){n.addedNodes.forEach(qt)})})});var It=0,Gt=new Set,Vt=!1;function Ht(){clearTimeout(It),It=setTimeout(wt,50)}function Ot(e){Array.isArray(e)?e.forEach(function(n){$t(n.target).forEach(function(x){Gt.add(x)})}):Vt=!0,Ht()}function Yt(e){Gt.add(e),Ht()}function $t(e){if(e.nodeType!==1)return[];for(var n=Array.prototype.slice.call(e.querySelectorAll(pt)),x=e.closest(pt);x;)n.push(x),x=x.parentElement&&x.parentElement.closest(pt);return n}Ot(),window.zaismaWatch.page(Ot)})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.materials||(H.materials=!0,(function(){function m(o){var w=o.scrollHeight<=o.clientHeight+1&&o.scrollWidth<=o.clientWidth+1;if(o.classList.toggle("fits",w),!w){for(var y=o.parentElement&&o.parentElement.closest("[data-glass]"),a=0,r=0,d=o;d&&d!==y;)a+=d.offsetLeft,r+=d.offsetTop,d=d.offsetParent;if(d){var u=o.parentElement.closest(".scrolls:not(.fits)");if(u&&y.contains(u)){["top-left","top-right","bottom-right","bottom-left"].forEach(function(v){o.style.setProperty("--inset-"+v,"9999px")});return}var h=Math.max(0,y.offsetWidth-a-o.offsetWidth),s=Math.max(0,y.offsetHeight-r-o.offsetHeight);o.style.setProperty("--inset-top-left",a+r+"px"),o.style.setProperty("--inset-top-right",h+r+"px"),o.style.setProperty("--inset-bottom-right",h+s+"px"),o.style.setProperty("--inset-bottom-left",a+s+"px")}}}window.zaismaFit=m,window.MutationObserver&&new MutationObserver(function(o){o.forEach(function(w){w.target.open&&w.target.querySelectorAll(".scrolls").forEach(m)})}).observe(document.documentElement,{subtree:!0,attributes:!0,attributeFilter:["open"]}),window.zaismaWait=function(o,w){if(!o)return Promise.resolve(w);clearTimeout(o.zaismaWaitEnding),o.zaismaIsAnswered=!1,o.getAttribute("aria-busy")!=="true"&&(o.zaismaWaitStart=performance.now()),o.setAttribute("aria-busy","true"),window.zaismaWaiting.redraw(o);function y(){o.removeAttribute("aria-busy"),window.zaismaWaiting.redraw(o)}function a(){o.zaismaIsAnswered=!0;var r=window.matchMedia("(prefers-reduced-motion: reduce)").matches?0:parseFloat(getComputedStyle(o).getPropertyValue("--waiting-glint-sweep"))*1e3,d=r-(performance.now()-o.zaismaWaitStart);d>0?o.zaismaWaitEnding=setTimeout(y,d):y()}return Promise.resolve(w).then(function(r){return a(),r},function(r){throw a(),r})},document.addEventListener("click",function(o){var w=o.target.closest&&o.target.closest('[aria-busy="true"]');w&&w!==document.body&&!w.zaismaIsAnswered&&(o.preventDefault(),o.stopImmediatePropagation())},!0),window.zaismaWatch.each(".scrolls",function(o){m(o),window.zaismaWatch.size(o,function(){m(o)}),Array.prototype.forEach.call(o.children,function(w){window.zaismaWatch.size(w,function(){m(o)})})})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.rows||(H.rows=!0,(function(){if(!window.zaismaWatch)return;var m=new WeakMap;function o(r){return r.offsetWidth+"x"+r.offsetHeight}function w(r){var d=Array.prototype.slice.call(r.children);r.classList.remove("is-wrapped"),r.classList.add("is-measuring");var u=0,h=r.offsetWidth?r.getBoundingClientRect().width/r.offsetWidth:1;r.classList.contains("widths-equal")&&d.forEach(function(T){T.classList.contains("fills")&&(u=Math.max(u,T.getBoundingClientRect().width/(h||1)))}),r.classList.remove("is-measuring");var s=u?Math.ceil(u)+"px":"";r.style.getPropertyValue("--equal-cell-width")!==s&&r.style.setProperty("--equal-cell-width",s);var v=getComputedStyle(r).direction==="rtl",i=null,C=!1;d.forEach(function(T){var D=T.getBoundingClientRect();if(!(D.width<1)){var b=v?-D.right:D.left;i!==null&&b<=i+.5&&(C=!0),i=b}}),C&&r.classList.add("is-wrapped"),m.set(r,o(r))}window.zaismaWatch.each(".layout-row",function(r){w(r),window.zaismaWatch.size(r,function(){m.get(r)!==o(r)&&w(r)})}),window.zaismaWatch.fontArrived(function(){document.querySelectorAll(".layout-row").forEach(w)});var y=".stack-cell, .row-cell";function a(r){var d=r.children.length===1&&r.firstElementChild.hidden;r.classList.contains("holds-only-hidden")!==d&&r.classList.toggle("holds-only-hidden",d)}window.zaismaWatch.each(y,a),window.zaismaWatch.page(function(r){r.forEach(function(d){var u=d.type==="attributes"?d.target.parentElement:d.target;u&&u.matches&&u.matches(y)&&(d.type!=="attributes"||d.attributeName==="hidden")&&a(u)})})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.compacting||(H.compacting=!0,(function(){var m=24;window.zaismaWatch.each("[data-compacts]",function(o){if(o.hasAttribute("data-stays-compact")){o.classList.add("is-compact");return}var w=o.parentElement&&o.parentElement.querySelector(":scope > [data-scroll-box]"),y=w||window;function a(){return w?w.scrollTop:window.scrollY}function r(){var d=a();d>m?o.classList.add("is-compact"):d<=0&&o.classList.remove("is-compact")}y.addEventListener("scroll",r,{passive:!0}),r()})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["header-fit"]||(H["header-fit"]=!0,(function(){var m=window.matchMedia("(orientation: landscape) and (max-height: 500px) and (max-width: 64em)"),o=4;function w(u,h){u.classList.toggle("has-search-button",h>0),u.classList.toggle("has-tight-tabs",h>1),u.classList.toggle("has-icon-tabs",h>2),u.classList.toggle("has-icon-sign-in",h>3)}function y(u){var h=0;return Array.prototype.forEach.call(u.querySelectorAll(":scope > a, :scope > button"),function(s){h=Math.max(h,s.offsetLeft+s.offsetWidth)}),h+parseFloat(getComputedStyle(u).paddingRight)}function a(u,h){w(u,h);var s=getComputedStyle(u),v=parseFloat(s.paddingLeft)+parseFloat(s.paddingRight);return Array.prototype.forEach.call(u.children,function(i){var C=getComputedStyle(i);if(!(i.classList.contains("edge")||C.display==="none")){var T=i.querySelector(":scope > .switch-well .tab-switch");v+=parseFloat(C.marginLeft)+parseFloat(C.marginRight)+(i.matches(".find")?parseFloat(C.minWidth):Math.max(i.offsetWidth,T?y(T):0))}}),v}function r(u){if(!(!u.clientWidth||u.checkVisibility&&!u.checkVisibility({contentVisibilityAuto:!0}))){if(m.matches&&u.matches("body > .top")){w(u,1);return}for(var h=u.clientWidth,s=u.neededWidths||(u.neededWidths=[]),v=u.querySelector(".find"),i=!!v&&v.contains(document.activeElement),C=u.classList.contains("searching"),T=!1,D=0;D<o;D++){if(s[D]===void 0){if(i)return;T||(T=!0,u.classList.remove("searching"),u.classList.add("is-measuring"),u.style.width="max-content"),s[D]=a(u,D)}if(s[D]<=h)break}T&&(u.style.width="",u.classList.remove("is-measuring"),C&&u.classList.add("searching")),i&&D>0&&!u.classList.contains("typing-search")&&u.classList.add("searching"),w(u,D)}}function d(u){if(u.fitToRoom)return;function h(){u.neededWidths=null,r(u)}u.fitToRoom=function(){r(u)},r(u),window.zaismaWatch.size(u,u.fitToRoom);var s=u.querySelector(".tab-switch");s&&window.zaismaWatch.size(s,h),window.zaismaWatch.fontsIn(h),m.addEventListener("change",h)}window.zaismaWatch.each("header.top",d),window.zaismaWatch.arriving(function(){var u=document.querySelector("body > header.top");u&&u.nextSibling&&d(u)})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.tables||(H.tables=!0,(function(){function m(w){var y=w.querySelector(":scope > table > thead"),a=w.querySelector(":scope > table > tbody > tr > th, :scope > table > thead > tr > th:first-child");w.style.setProperty("--shown-width",w.clientWidth+"px"),w.style.setProperty("--shown-height",w.clientHeight+"px"),y&&w.style.setProperty("--head-height",y.offsetHeight+"px"),a&&w.style.setProperty("--row-head-width",a.offsetWidth+"px")}var o=typeof ResizeObserver=="function"?new ResizeObserver(function(w){w.forEach(function(y){var a=y.target.closest(".table-scroll");a&&m(a)})}):null;window.zaismaWatch.each(".table-scroll",function(w){if(m(w),o){o.observe(w);var y=w.querySelector(":scope > table");y&&o.observe(y)}})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.rails||(H.rails=!0,(function(){var m=new Set,o=!1;function w(h){m.add(h),!o&&(o=!0,requestAnimationFrame(function(){o=!1;var s=Array.from(m);m.clear();var v=s.map(function(D){return D.place()});s.forEach(function(D,b){D.putPlace(v[b])});var i=s.filter(function(D,b){return D.isUnplaced(v[b])}),C=i.map(function(D){return D.place()});i.forEach(function(D,b){v[s.indexOf(D)]=C[b],D.putPlace(C[b])});var T=s.map(function(D,b){return D.measure(v[b])});s.forEach(function(D,b){D.put(v[b],T[b])})}))}function y(h,s){for(var v=h.nextElementSibling;v&&v.hasAttribute("data-rail");v=v.nextElementSibling)if(v.getAttribute("data-rail")===s)return!0;return!1}function a(h,s){var v=h.map(function(i){var C=i.tagName==="TEXTAREA"||i.tagName==="SELECT"&&(i.multiple||i.size>1);if(/^(SELECT|INPUT)$/.test(i.tagName)&&!C||y(i,"box")||getComputedStyle(i).scrollbarWidth==="none"&&!i.hasAttribute("data-side-rail")&&!i.classList.contains("own-scroll")||i.classList.contains("rail-thumb"))return null;var T=i.parentElement;return!T||T===document.body?null:{box:i,isControl:C,isParentStatic:getComputedStyle(T).position==="static"}});v.forEach(function(i){i&&(i.isParentStatic&&(i.box.parentElement.style.position="relative"),i.box.insertAdjacentHTML("afterend",'<div class="rail" data-rail="box" aria-hidden="true"><div class="rail-line carving deep" data-cut-line="3" data-cut-sizes><svg class="cut-line" aria-hidden="true"><polygon/></svg><div class="rail-groove"><div class="rail-thumb"></div></div></div></div>'))}),s.querySelectorAll("[data-side-rail]").forEach(function(i){y(i,"side")||i.insertAdjacentHTML("afterend",'<div class="rail sideways" data-rail="side" aria-hidden="true"><div class="rail-line carving deep" data-cut-line="3" data-cut-sizes><svg class="cut-line" aria-hidden="true"><polygon/></svg><div class="rail-groove"><div class="rail-thumb"></div></div></div></div>')})}var r=new WeakSet,d=!1;function u(){document.querySelectorAll("[data-rail]").forEach(function(h){if(r.has(h))return;if(h.getAttribute("data-rail")==="page"&&document.readyState==="loading"){document.documentElement.classList.add("own-scroll"),d||(d=!0,window.zaismaWatch.whenRead(u));return}r.add(h);for(var s=h.getAttribute("data-rail")==="page",v=h.getAttribute("data-rail")==="side",i=s?null:h.previousElementSibling;i&&i.hasAttribute("data-rail");)i=i.previousElementSibling;if(i&&!i.matches("[data-rail-scroller]")&&(i=i.querySelector(":scope > [data-rail-scroller]")||i),!s&&!i)return;var C=h.querySelector(".rail-groove"),T=h.querySelector(".rail-thumb"),D=getComputedStyle(h),b=parseFloat(D.getPropertyValue("--rail-reach"))||16,_=parseFloat(D.getPropertyValue("--rail-width"))||10,g=2*Math.SQRT2,k=s&&window.CSS&&CSS.supports("animation-timeline: scroll()");k&&h.classList.add("follows-scroll"),s?document.documentElement.classList.add("own-scroll"):i.classList.add("own-scroll");var Q=!1,Z=function(){return parseFloat(getComputedStyle(document.documentElement).scrollPaddingTop)||90},X=s?Array.prototype.filter.call(document.querySelectorAll("[data-rail-mark]"),function(z){return!z.closest("[data-rail-marks-own]")}):Array.prototype.filter.call(i.querySelectorAll("[data-rail-mark]"),function(z){var I=z.parentElement.closest("[data-side-rail], [data-rail-marks-own]");return!I||I===i||!i.contains(I)});!s&&X.length&&i.setAttribute("data-rail-marks-own","");var V=null;X.length&&(V=document.createElement("span"),V.className="tag rail-name rail-riding",V.setAttribute("data-cut-line","0"),V.appendChild(document.createElement("span")),h.appendChild(V));function ot(z,I){if(s)return z.getBoundingClientRect().top+window.scrollY-(I===void 0?Z():I);var tt=i.getBoundingClientRect(),pt=z.getBoundingClientRect();return v?pt.left-tt.left+i.scrollLeft:pt.top-tt.top+i.scrollTop}var lt=X.map(function(z){var I=document.createElement("button"),tt=document.createElement("span");I.type="button",I.className="rail-mark",I.tabIndex=-1,tt.className="tag rail-name",tt.setAttribute("data-cut-line","0"),tt.appendChild(document.createElement("span")).textContent=z.getAttribute("data-rail-mark"),I.appendChild(tt),h.appendChild(I),I.addEventListener("click",function(){if(O){O=!1;return}pt()});function pt(){var wt=window.matchMedia("(prefers-reduced-motion: reduce)").matches?"auto":"smooth";s?window.scrollTo({top:ot(z),behavior:wt}):i.scrollTo(v?{left:ot(z),behavior:wt}:{top:ot(z),behavior:wt})}return I.goToPart=pt,{part:z,mark:I,name:tt}});function M(z){lt.forEach(function(I){if(!I.mark.hidden){var tt=parseFloat(I.mark.style[v?"left":"top"])||0,pt=(I.size||0)/2,wt=Math.max(pt,Math.min(z-pt,tt));I.restShift=(wt-tt).toFixed(1)+"px",I.name.style.setProperty("--label-shift",I.restShift)}})}function A(){return s?window.scrollY:v?i.scrollLeft:i.scrollTop}function L(z){s?window.scrollTo(0,z):v?i.scrollLeft=z:i.scrollTop=z}function W(z){return v?z.clientX:z.clientY}var R={track:0,thumb:0,max:1,start:0,startIn:g},ht=h.querySelector(".rail-line");function Y(z){if(s)return g;var I=ht.cutCorners||[0,0,0,0],tt=v?z?I[3]:I[2]:z?I[1]:I[2];return Math.max(0,tt-(4-2*Math.SQRT2)-(v?C.clientHeight:C.clientWidth))}var nt=s?document.querySelector("[data-rail-starts-below]"):null,At=10,Bt={place:function(){var z={whole:s?document.documentElement.scrollHeight:v?i.scrollWidth:i.scrollHeight,view:s?window.innerHeight:v?i.clientWidth:i.clientHeight};if(z.max=z.whole-z.view,nt){var I=nt.getBoundingClientRect();z.top=Math.round((I.height>I.width?0:I.bottom)+At)+"px"}if(!s){var tt=i.closest("[data-glass], .carving"),pt=h.offsetParent;if(tt&&pt){var wt=tt.getBoundingClientRect(),Pt=parseFloat(getComputedStyle(tt).getPropertyValue("--rail-inset"))||0,qt=Math.min(wt.width,wt.height),It=(tt.cutCorners||(window.zaismaCorners?window.zaismaCorners(tt,"pane"):[0,0,0,0])).map(function(f){return Math.min(f,Math.round(qt*.3))}),Gt=Pt*(Math.SQRT2-1),Vt=function(f){return Math.max(Pt,f-_+Gt)};if(v){var Ht=h.getBoundingClientRect(),Ot=Ht.left-(parseFloat(h.style.marginLeft)||0),Yt=Ht.right+(parseFloat(h.style.marginRight)||0),$t=wt.bottom-Ht.bottom<=Pt+2,e=i.querySelector(":scope > table.has-row-heads > tbody > tr > th"),n=e?e.offsetWidth:0,x=i.getBoundingClientRect();z.side=$t?{left:Math.max(0,wt.left+Vt(It[3])-Ot,n?x.left+n+Pt-Ot:0),right:Math.max(0,Yt-(wt.right-Vt(It[2])))}:{left:0,right:0}}else{var F=pt.getBoundingClientRect(),P=i.getBoundingClientRect(),K=tt.offsetWidth?wt.width/tt.offsetWidth:1,B=i.querySelector(":scope > table > thead"),N=Vt(It[1]),it=Vt(It[2]),mt=B?B.offsetHeight:0,et=i.classList.contains("shows-side-rail")&&i.nextElementSibling&&i.nextElementSibling.matches(".rail.sideways")?(_+2*Pt)*K:0,st=P.top+(mt?(mt+Pt)*K:0),zt=P.bottom-et,Ct=Math.max(st,wt.top+N*K),t=Math.min(zt,wt.bottom-it*K),c=Math.min(P.right,wt.right-Pt*K);z.box={top:(Ct-F.top)/K-pt.clientTop,height:Math.max(0,t-Ct)/K,left:(c-F.left)/K-pt.clientLeft-(b+_)/2}}}}return z},putPlace:function(z){z.top&&(h.style.top=z.top),z.side&&(h.style.marginLeft=z.side.left.toFixed(1)+"px",h.style.marginRight=z.side.right.toFixed(1)+"px"),z.box&&(h.style.top=z.box.top.toFixed(1)+"px",h.style.height=z.box.height.toFixed(1)+"px",h.style.left=z.box.left.toFixed(1)+"px"),Q!==z.max>4&&(Q=z.max>4,h.classList.toggle("is-on",Q)),s||i.classList.toggle(v?"shows-side-rail":"shows-rail",Q)},isUnplaced:function(z){return!s&&Q&&!z.box&&!z.side},measure:function(){if(!Q)return null;var z=s&<.length?Z():0;return{track:(v?C.clientWidth:C.clientHeight)-Y(!0)-Y(!1),start:(v?C.offsetLeft+C.parentElement.offsetLeft:C.offsetTop+C.parentElement.offsetTop)+Y(!0),startIn:Y(!0),at:A(),marks:lt.map(function(I){var tt=!!I.part.offsetParent;return tt?{shown:!0,spot:ot(I.part,z),size:v?I.name.offsetWidth:I.name.offsetHeight}:{shown:!1}})}},put:function(z,I){if(I){var tt=I.track,pt=z.max,wt=Math.max(36,Math.round(tt*z.view/z.whole));R={track:tt,thumb:wt,max:pt,start:I.start,startIn:I.startIn},k?T.style.setProperty("--thumb-share",(z.view/z.whole).toFixed(4)):T.style[v?"width":"height"]=wt+"px",_t(I.at),lt.forEach(function(Pt,qt){var It=I.marks[qt];if(Pt.mark.hidden=!It.shown,!!It.shown){var Gt=Math.max(0,Math.min(pt,It.spot));Pt.mark.style[v?"left":"top"]=(I.start+(tt-wt)*Gt/pt+wt/2).toFixed(1)+"px",Pt.size=It.size||(v?Pt.name.offsetWidth:Pt.name.offsetHeight)}}),M(tt)}}},kt=!1;function vt(){if(rt){kt=!0;return}w(Bt)}function _t(z){rt&&xt(),Q&&!k&&(T.style.transform=(v?"translateX(":"translateY(")+(R.startIn+(R.track-R.thumb)*Math.min(1,(z===void 0?A():z)/R.max)).toFixed(1)+"px)")}var J=0,q=!1;function j(){h.classList.contains("awake")||h.classList.add("awake"),clearTimeout(J),J=setTimeout(function(){h.classList.remove("awake")},1100)}(s?window:i).addEventListener("scroll",function(){j(),!q&&(q=!0,requestAnimationFrame(function(){q=!1,_t()}))},{passive:!0}),window.zaismaWatch.resize(vt);var St=s?document.body:Array.prototype.filter.call(i.children,function(z){return!z.matches("svg, .edge, .cut-line, .rail")});s?window.zaismaWatch.size(St,vt):Array.prototype.concat.apply([i],Array.prototype.slice.call(St)).forEach(function(z){window.zaismaWatch.size(z,vt)}),nt&&window.zaismaWatch.size(nt,vt),s||window.zaismaWatch.page(function(z){z.some(function(I){return i.contains(I.target)})&&vt()});var rt=null,Nt=6,Tt=8;function l(z){var I=W(z);if(!rt.isTouch||!s)return I;var tt=I+window.scrollY,pt=I,wt=1/0;return rt.scrolls.forEach(function(Pt){var qt=tt-Pt,It=Math.abs(qt-rt.last);It<wt&&(wt=It,pt=qt)}),pt}function E(z,I){z.preventDefault();var tt=A();if(I){var pt=W(z)-(v?C.getBoundingClientRect().left:C.getBoundingClientRect().top)-R.thumb/2;L(Math.max(0,Math.min(1,pt/(R.track-R.thumb)))*R.max)}rt={y:W(z),last:W(z),from:A(),scrolls:[tt,A()],isMoving:z.pointerType==="mouse",isTouch:z.pointerType!=="mouse"},h.classList.add("dragging"),!s&&getComputedStyle(i).scrollSnapType!=="none"&&i.classList.add("is-dragged");try{h.setPointerCapture(z.pointerId)}catch{}}T.addEventListener("pointerdown",function(z){E(z,!1)});var O=!1,G=null,ft=0;h.addEventListener("pointerdown",function(z){if(!T.contains(z.target)){if(z.target.closest(".rail-mark")){var I=T.getBoundingClientRect();O=W(z)>=(v?I.left:I.top)&&W(z)<=(v?I.right:I.bottom),O&&(G=z.target.closest(".rail-mark"),ft=W(z),E(z,!1));return}E(z,!0)}});function $(z){if(rt){var I=l(z);if(rt.last=I,!rt.isMoving){if(Math.abs(I-rt.y)<Nt)return;rt.isMoving=!0,rt.y=I,rt.from=A()}var tt=Math.max(0,Math.min(R.max,rt.from+(I-rt.y)*R.max/Math.max(1,R.track-R.thumb)));Math.abs(tt-A())<1||(L(tt),rt.scrolls.push(A()),rt.scrolls.length>Tt&&rt.scrolls.shift())}}h.addEventListener("pointermove",$),window.addEventListener("pointermove",function(z){rt&&!h.hasPointerCapture(z.pointerId)&&$(z)}),window.addEventListener("pointerup",function(z){rt&&!h.hasPointerCapture(z.pointerId)&&Dt(z)}),window.addEventListener("pointercancel",function(){rt&>()});function gt(){rt=null,h.classList.remove("dragging"),Lt(),kt&&(kt=!1,vt())}function Lt(){if(!(s||!i.classList.contains("is-dragged"))){var z=i.getBoundingClientRect(),I=getComputedStyle(i),tt=A(),pt=parseFloat(v?I.scrollPaddingLeft:I.scrollPaddingTop)||0,wt=v?z.left+i.clientLeft:z.top+i.clientTop,Pt=Array.prototype.filter.call(i.children,function(Ht){return getComputedStyle(Ht).scrollSnapAlign.indexOf("start")>=0}).map(function(Ht){var Ot=Ht.getBoundingClientRect();return Math.max(0,Math.min(R.max,tt+(v?Ot.left:Ot.top)-wt-pt))});Pt.push(0,R.max);var qt=Pt.length?Pt.reduce(function(Ht,Ot){return Math.abs(Ot-tt)<Math.abs(Ht-tt)?Ot:Ht}):tt,It=function(){rt||i.classList.remove("is-dragged")},Gt=parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--motion-arrive"))*1e3||300;if(Math.abs(qt-tt)<1||matchMedia("(prefers-reduced-motion: reduce)").matches)return L(qt),It();var Vt=performance.now();(function Ht(Ot){if(!rt){var Yt=Math.min(1,(Ot-Vt)/Gt);L(tt+(qt-tt)*(1-Math.pow(1-Yt,3))),Yt<1?requestAnimationFrame(Ht):It()}})(Vt)}}function xt(){if(!(!lt.length||!rt)){var z=R.start+(R.track-R.thumb)*Math.min(1,A()/R.max)+R.thumb/2,I=null,tt=s?{start:0,size:window.innerHeight}:(function(pt){return{start:v?pt.left:pt.top,size:v?pt.width:pt.height}})(i.getBoundingClientRect());lt.forEach(function(pt){if(!pt.mark.hidden){var wt=pt.part.getBoundingClientRect();(!I||(v?wt.left:wt.top)-tt.start<=tt.size/3)&&(I=pt)}}),I&&V.lastChild.textContent!==I.name.textContent&&(V.lastChild.textContent=I.name.textContent),V.style.setProperty("--riding-at",z.toFixed(1)+"px")}}h.addEventListener("pointermove",xt),h.addEventListener("pointerdown",xt);var Rt=18;function Dt(z){var I=!!(rt&&rt.isMoving),tt=G&&Math.abs(W(z)-ft)<4?G:null;if(G=null,gt(),tt){tt.goToPart();return}if(!(!I||z.pointerType==="mouse"||!lt.length)){var pt=R.start+(R.track-R.thumb)*Math.min(1,A()/R.max)+R.thumb/2,wt=null,Pt=Rt;lt.forEach(function(qt){if(!qt.mark.hidden){var It=Math.abs(parseFloat(qt.mark.style[v?"left":"top"])-pt);It<=Pt&&(Pt=It,wt=qt)}}),wt&&wt.mark.click()}}h.addEventListener("pointerup",Dt),h.addEventListener("pointercancel",gt),vt(),j()})}a(window.zaismaWatch.scrollBoxes(),document),u(),window.zaismaWatch.page(function(h){var s=[],v=!1,i=!1;h.forEach(function(C){Array.prototype.forEach.call(C.addedNodes||[],function(T){T.nodeType!==1||!T.isConnected||(T.matches("[data-rail]")&&!r.has(T)&&(i=!0),!T.closest(".rail, svg, .edge, .cut-line")&&(window.zaismaWatch.scrollBoxesIn(T).forEach(function(D){s.indexOf(D)<0&&s.push(D)}),(T.matches("[data-side-rail]")||T.querySelector("[data-side-rail]"))&&(v=!0)))})}),!(!s.length&&!v&&!i)&&(a(s,document),u())})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["scroll-fades"]||(H["scroll-fades"]=!0,(function(){var m=window.matchMedia("(max-width: 760px), (max-height: 500px)"),o=[],w=null;function y(){return m.matches?20:34}window.zaismaScrollFadePx=y;function a(b){var _=b.querySelector(":scope > table > thead");return{scrollTop:b.scrollTop,scrollHeight:b.scrollHeight,clientHeight:b.clientHeight,headPx:_?_.offsetHeight:null}}function r(b,_){var g=_.scrollHeight>_.clientHeight+1,k=_.scrollTop>.5?y():0,Q=_.scrollHeight-_.clientHeight-_.scrollTop>.5?y():0;b.style.setProperty("--fade-top",Math.max(0,k)+"px"),b.style.setProperty("--fade-bottom",Math.max(0,Q)+"px"),_.headPx!==null&&b.style.setProperty("--fade-from",_.headPx+"px"),b.classList.toggle("is-fading",g),b.classList.toggle("is-scrollable",g)}function d(b){var _=b.map(a);b.forEach(function(g,k){r(g,_[k])})}function u(b){w=new Set,b();var _=Array.from(w);w=null,d(_)}function h(b){w?w.add(b):d([b])}function s(b){b.classList.toggle("is-scrollable",b.scrollHeight>b.clientHeight+1)}var v=new WeakSet;function i(b){v.has(b)||(v.add(b),s(b),window.zaismaWatch.size(b.firstElementChild||b,function(){s(b)}),b.addEventListener("input",function(){s(b)}))}function C(){window.zaismaWatch.each("[data-scroll-box]",i),T(window.zaismaWatch.scrollBoxes())}function T(b){var _=b.filter(function(g){return g.classList.contains("scroll-fades")?!1:/^(TEXTAREA|SELECT|INPUT)$/.test(g.tagName)||g.hasAttribute("data-scroll-box")||g.hasAttribute("data-own-fade")?(i(g),!1):!0});o=o.filter(function(g){return g.isConnected}),_.forEach(function(g){g.classList.add("scroll-fades"),o.push(g);var k=!1;g.addEventListener("scroll",function(){k||(k=!0,requestAnimationFrame(function(){k=!1,h(g)}))},{passive:!0}),window.zaismaWatch.size(g,function(){h(g)},u)}),d(_)}C(),window.zaismaWatch.page(function(b){var _=[];b.forEach(function(g){Array.prototype.forEach.call(g.addedNodes||[],function(k){k.nodeType!==1||!k.isConnected||k.closest(".rail, svg, .edge, .cut-line")||window.zaismaWatch.scrollBoxesIn(k).forEach(function(Q){_.indexOf(Q)<0&&_.push(Q)})})}),_.length&&T(_)}),window.zaismaWatch.resize(function(){d(o)});var D=window.matchMedia("(prefers-reduced-motion: reduce)").matches;window.zaismaWatch.each("[data-fades-sideways]",function(b){function _(){return Array.prototype.filter.call(b.querySelectorAll(":scope > *, :scope > * > *"),function(L){return L.classList.contains("folded")||L.hasAttribute("aria-hidden")||L.children.length&&L.parentElement===b&&L.querySelector(":scope > a, :scope > button, :scope > .cover")?!1:L.getBoundingClientRect().width>=1&&!/^(absolute|fixed)$/.test(getComputedStyle(L).position)})}var g=null;function k(){var L=b.getBoundingClientRect(),W=1/0,R=-1/0,ht=b.scrollLeft;_().forEach(function(Y){var nt=Y.getBoundingClientRect();W=Math.min(W,nt.left),R=Math.max(R,nt.right)}),g={start:W===1/0?null:W-L.left+ht,end:R-L.left+ht,width:b.clientWidth,whole:b.scrollWidth}}function Q(){g||k();var L=b.scrollLeft,W=L,R=g.whole-g.width-L;return g.start===null?{before:W,after:R}:{before:Math.max(L-g.start,W),after:Math.max(g.end-L-g.width,R)}}function Z(){var L=Q();return b.classList.toggle("more-left",L.before>2),b.classList.toggle("more-right",L.after>2),L}var X=b.querySelector('[aria-current="page"], [aria-pressed="true"]'),V=!1;function ot(){X&&!V&&b.scrollWidth-b.clientWidth>1&&(V=!0,b.showWhole(X,!1))}function lt(){g=null,ot(),Z()}function M(L){var W=L.getBoundingClientRect(),R=W.left-b.getBoundingClientRect().left+b.scrollLeft;return{start:R,end:R+W.width}}b.showWhole=function(L,W){var R=getComputedStyle(b),ht=b.scrollWidth-b.clientWidth,Y=b.scrollLeft,nt=M(L),At=parseFloat(R.scrollPaddingLeft)||0,Bt=parseFloat(R.getPropertyValue("--fade-sideways-px"))||At;if(!(ht<=1)){var kt=function(q){return q<ht-1?Bt:0},vt=Y;nt.start<Y+(Y>1?At:0)?vt=nt.start-At:nt.end>Y+b.clientWidth-kt(Y)&&(vt=nt.start-At,_().some(function(q){var j=Math.max(0,Math.min(ht,M(q).start-At));return j>Y&&nt.end<=j+b.clientWidth-kt(j)?(vt=j,!0):!1}));var _t=_(),J=L===_t[_t.length-1];if(L===_t[0]?vt=0:J&&(vt=ht),vt=Math.max(0,Math.min(ht,vt)),!(Math.abs(vt-Y)<1)){if(!W||D){b.scrollLeft=vt;return}b.scrollTo({left:vt,behavior:"smooth"}),clearTimeout(b.settleTimer),b.settleTimer=setTimeout(function(){J&&(vt=b.scrollWidth-b.clientWidth),Math.abs(b.scrollLeft-vt)>1&&b.scrollTo({left:vt,behavior:"smooth"})},450)}}},X&&window.zaismaWatch.fontsIn(function(){V&&b.showWhole(X,!1)});var A=!1;b.addEventListener("scroll",function(){A||(A=!0,requestAnimationFrame(function(){A=!1,Z()}))},{passive:!0}),window.zaismaWatch.size(b,lt),b.firstElementChild&&window.zaismaWatch.size(b.firstElementChild,lt),window.zaismaWatch.fontArrived(lt),lt(),requestAnimationFrame(function(){requestAnimationFrame(function(){b.classList.add("fades-ease")})})})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.backdrop||(H.backdrop=!0,(function(){var m=\`float h1(float n){return fract(sin(n*127.1)*43758.5453);}
|
|
11319
11384
|
float h2(vec2 p){return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453);}
|
|
11320
11385
|
vec2 h22(vec2 p){p=vec2(dot(p,vec2(127.1,311.7)),dot(p,vec2(269.5,183.3)));return fract(sin(p)*43758.5453);}
|
|
11321
11386
|
float noise(vec2 p){vec2 i=floor(p),f=fract(p);vec2 u=f*f*(3.0 - 2.0*f);
|
|
@@ -11329,7 +11394,7 @@ float motes(vec2 p,float size,float chance,float seed){
|
|
|
11329
11394
|
}
|
|
11330
11395
|
\`,o=\`uniform vec2 zaismaViewOffset;
|
|
11331
11396
|
out vec4 zaismaFragColor;
|
|
11332
|
-
void main() { vec4 color = vec4(0.0); mainImage(color, gl_FragCoord.xy + zaismaViewOffset); zaismaFragColor = vec4(color.rgb, 1.0); }\`,
|
|
11397
|
+
void main() { vec4 color = vec4(0.0); mainImage(color, gl_FragCoord.xy + zaismaViewOffset); zaismaFragColor = vec4(color.rgb, 1.0); }\`,w="/js/zaisma-shader.5b6fb021ee0c65b5.js",y="zaisma-shader-parts",a=null,r=!1;try{var d=JSON.parse(localStorage.getItem(y));d&&d.path===w&&(a=d.parts)}catch{}function u(){if(!(a||r)){r=!0;var t=document.createElement("script");t.src=w,document.head.appendChild(t)}}window.zaismaShaderPartsArrived=function(t){a=t;try{localStorage.setItem(y,JSON.stringify({path:w,parts:t}))}catch{}ot()};var h=\`#version 300 es
|
|
11333
11398
|
precision highp float;
|
|
11334
11399
|
precision highp int;
|
|
11335
11400
|
precision highp sampler2D;
|
|
@@ -11369,14 +11434,14 @@ void main() {
|
|
|
11369
11434
|
vec3 low = min(min(min(north, south), min(east, west)), color), high = max(max(max(north, south), max(east, west)), color);
|
|
11370
11435
|
vec3 weight = -sqrt(clamp(min(low, 2.0 - high) / max(high, vec3(0.0001)), 0.0, 1.0)) / 7.0;
|
|
11371
11436
|
zaismaFragColor = vec4(clamp((color + (north + south + east + west) * weight) / (1.0 + 4.0 * weight), 0.0, 1.0), 1.0);
|
|
11372
|
-
}\`,i=.7,
|
|
11437
|
+
}\`,i=.7,C=1.4,T=6e4,D=33,b=67,_=window.matchMedia("(prefers-reduced-motion: reduce)"),g=[],k=0,Q=!1,Z=!1,X=!0,V=!1;function ot(){Q||(Q=!0,Z=!0,requestAnimationFrame(K))}function lt(t){var c=t.trim().replace("#","");c.length===3&&(c=c.split("").map(function(p){return p+p}).join(""));var f=parseInt(c,16)||0;return[(f>>16&255)/255,(f>>8&255)/255,(f&255)/255]}function M(t){var c=getComputedStyle(t);return{base:lt(c.getPropertyValue("--backdrop-base")),a:lt(c.getPropertyValue("--backdrop-a")),b:lt(c.getPropertyValue("--backdrop-b")),c:lt(c.getPropertyValue("--backdrop-c")),isDark:/dark/.test(c.colorScheme||"")}}var A=!0,L=!0,W=[];function R(){L=!0,ot()}function ht(t){return t.closest(":has(> .backdrop)")}function Y(){A=!1,L=!0,W=Array.prototype.filter.call(document.querySelectorAll("[data-glass]:not([data-cut-line])"),function(t){t.glassHost=ht(t),t.glassHost&&t.glassHost.shownGlass&&_t(t,t.glassHost.shownGlass);var c=getComputedStyle(t);return c.visibility!=="hidden"&&c.display!=="none"&&Number(c.opacity)>.05})}function nt(t){var c=function(f){return f/=255,f<=.03928?f/12.92:Math.pow((f+.055)/1.055,2.4)};return .2126*c(t[0])+.7152*c(t[1])+.0722*c(t[2])}function At(t,c){var f=nt(t),p=nt(c);return(Math.max(f,p)+.05)/(Math.min(f,p)+.05)}function Bt(t,c,f){return[t[0]+(c[0]-t[0])*f,t[1]+(c[1]-t[1])*f,t[2]+(c[2]-t[2])*f]}function kt(t,c){for(var f=c.slice().sort(function(U,dt){return nt(U)-nt(dt)}),p=t.isSmoked?f[Math.floor(f.length*.75)]:f[Math.floor(f.length*.25)],S=.3;S<=.95;S+=.02){var ct=Bt(p,t.base,S),bt=t.isSmoked?[247,249,252]:[20,23,28],ut=t.isSmoked?Bt(ct,bt,.7):[89,96,106];if(At(ct,ut)>=4.5&&At(ct,bt)>=6)return S}return .95}function vt(t){var c=t.reduce(function(U,dt){return[U[0]+dt[0],U[1]+dt[1],U[2]+dt[2]]},[0,0,0]),f=c.map(function(U){return U/t.length}),p={isSmoked:!1,base:Bt([255,255,255],f,.1)},S={isSmoked:!0,base:Bt([12,15,20],f,.3)},ct=kt(p,t),bt=kt(S,t),ut=ct<=bt?p:S;return{isSmoked:ut.isSmoked,tint:"rgba("+ut.base.map(Math.round).join(", ")+", "+Math.min(ct,bt).toFixed(2)+")"}}function _t(t,c){t.glassPick!==c&&(t.glassPick=c,t.classList.toggle("smoke",c.isSmoked),c.isSmoked?t.removeAttribute("data-theme-choice"):t.setAttribute("data-theme-choice","light"),t.style.setProperty("--glass-tint",c.tint))}function J(t,c){c.length&&q(t,vt(c))}function q(t,c){var f=t.canvas.parentElement;f&&(f.shownGlass=c,A=!0,f.ownThemeChoice===void 0&&(f.ownThemeChoice=f.getAttribute("data-theme-choice")),f.classList.toggle("smoke",c.isSmoked),c.isSmoked?f.removeAttribute("data-theme-choice"):f.setAttribute("data-theme-choice",f.ownThemeChoice||"light"),f.querySelectorAll("[data-glass]:not([data-cut-line])").forEach(function(p){ht(p)===f&&_t(p,f.shownGlass)}))}function j(t){for(var c=[],f=4*Math.max(1,Math.floor(t.length/4/2400)),p=0;p<t.length;p+=f)c.push([t[p],t[p+1],t[p+2]]);return c}function St(t,c,f,p){var S=new Uint8Array(f*p*4);t.readPixels(0,0,f,p,t.RGBA,t.UNSIGNED_BYTE,S),J(c,j(S))}function rt(t){var c=t.still;if(!(!c||!c.naturalWidth)){var f=document.createElement("canvas"),p=Math.min(1,160/Math.max(c.naturalWidth,c.naturalHeight));f.width=Math.max(2,Math.round(c.naturalWidth*p)),f.height=Math.max(2,Math.round(c.naturalHeight*p));var S=f.getContext("2d",{willReadFrequently:!0});S.drawImage(c,0,0,f.width,f.height),t.isGlassAdapted=!0;try{J(t,j(S.getImageData(0,0,f.width,f.height).data))}catch{}}}function Nt(t){var c=t.canvas.contentWindow;if(c)try{c.postMessage({panes:[],isIdle:Tt},new URL(t.canvas.src).origin)}catch{}}var Tt=!1,l=0;function E(){Tt=!0,O()}function O(){g.forEach(function(t){t.kind==="frame"&&Nt(t)})}var G=null,ft=!1;function $(){if(G)return G.isLost?null:G;if(ft)return null;var t=document.createElement("canvas");t.width=2,t.height=2;var c=t.getContext("webgl2",{antialias:!1,depth:!1,stencil:!1,alpha:!1,powerPreference:"low-power"});if(!c)return ft=!0,null;G={board:t,gl:c,programs:{},isLost:!1,parallel:c.getExtension("KHR_parallel_shader_compile")};function f(){c.bindVertexArray(c.createVertexArray()),c.bindBuffer(c.ARRAY_BUFFER,c.createBuffer()),c.bufferData(c.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),c.STATIC_DRAW),c.enableVertexAttribArray(0),c.vertexAttribPointer(0,2,c.FLOAT,!1,0,0),G.vertex=c.createShader(c.VERTEX_SHADER),c.shaderSource(G.vertex,s),c.compileShader(G.vertex),G.upscale={status:"compiling",names:["zaismaDrawn","zaismaDrawnSize","zaismaCanvasSize"]},gt(G.upscale,v),G.drawn={texture:c.createTexture(),framebuffer:c.createFramebuffer(),widthPx:0,heightPx:0}}return f(),t.addEventListener("webglcontextlost",function(p){p.preventDefault(),G.isLost=!0}),t.addEventListener("webglcontextrestored",function(){G.programs={},G.zaisma=null,g.forEach(function(p){p.parts=null}),G.isLost=!1,f(),g.forEach(function(p){p.isDrawn=!1}),ot()}),G}function gt(t,c){var f=G.gl,p=f.createShader(f.FRAGMENT_SHADER),S=f.createProgram();f.shaderSource(p,c),f.compileShader(p),f.attachShader(S,G.vertex),f.attachShader(S,p),f.bindAttribLocation(S,0,"corner"),f.linkProgram(S),t.pending={program:S,fragment:p}}function Lt(t){if(t.status!=="compiling")return t.status==="ready";var c=G.gl,f=t.pending;return G.parallel&&!V&&!c.getProgramParameter(f.program,G.parallel.COMPLETION_STATUS_KHR)?!1:(c.getProgramParameter(f.program,c.LINK_STATUS)?(t.program=f.program,t.status="ready",t.at={},t.names.forEach(function(p){t.at[p]=c.getUniformLocation(f.program,p)})):(console.warn("Backdrop shader:",c.getShaderInfoLog(f.fragment)||c.getProgramInfoLog(f.program)),c.deleteProgram(f.program),t.status="failed"),c.deleteShader(f.fragment),t.status!=="compiling"&&(t.pending=null),t.status==="ready")}function xt(t,c){if(t.programs[c])return t.programs[c];var f={status:"compiling",names:["iResolution","iTime","iDark","zaismaViewOffset"]};return gt(f,h+\`uniform float iDark;
|
|
11373
11438
|
\`+m+c+\`
|
|
11374
|
-
\`+o),t.programs[c]=
|
|
11375
|
-
\`+m,
|
|
11376
|
-
\`+a.shapes+a.live,
|
|
11439
|
+
\`+o),t.programs[c]=f,f}var Rt=["iResolution","iTime","iDark","zaismaViewOffset"];function Dt(t){if(t.zaisma)return t.zaisma;var c=h+\`uniform float iDark;
|
|
11440
|
+
\`+m,f=c+\`#define RIDGE_OCTAVES 6
|
|
11441
|
+
\`+a.shapes+a.live,p={status:"compiling",names:Rt.concat(["zaismaSoftA","zaismaSoftB","zaismaSoftC","zaismaStrip","zaismaShadeA","zaismaShadeB","zaismaUv"])};gt(p,c+\`#define RIDGE_OCTAVES 4
|
|
11377
11442
|
\`+a.shapes+a.stored+a.draw+\`
|
|
11378
|
-
\`+o);function S(ct){var bt={status:"compiling",names:Rt};return gt(bt,
|
|
11379
|
-
\`+a.shapes+a.live+a.draw),d}function bt(ut,U,dt){if(!ct())return u(),!1;var Mt=$();if(Mt&&c&&!dt.isOnePass){var Et=Dt(Mt),Kt=[Et.sharp,Et.soft,Et.strip,Et.shade].map(Lt).every(Boolean);if([Et.sharp,Et.soft,Et.strip,Et.shade].some(function(ae){return ae.status==="failed"}))dt.isOnePass=!0;else if(!Kt)return!1}var Ut=Mt&&(c&&!dt.isOnePass?Dt(Mt).sharp:xt(Mt,d));if(!Ut||!Lt(Ut)||!Lt(Mt.upscale))return Ut&&(Ut.status==="failed"||Mt.upscale.status==="failed")&&(dt.isLost=!0),!1;if(S=S||t.getContext("2d",{alpha:!1}),!S)return!1;var yt=Mt.gl,at=Mt.board,Ft=t.width,Wt=t.height,Xt=dt.drawnWidth,Qt=dt.drawnHeight,jt=Ut.at;(at.width<Ft||at.height<Wt)&&(at.width=Math.max(at.width,Ft),at.height=Math.max(at.height,Wt));var Zt=c&&!dt.isOnePass,Jt=Zt?null:pt(Mt,Xt,Qt);Zt||(yt.bindFramebuffer(yt.FRAMEBUFFER,Jt.framebuffer),yt.useProgram(Ut.program),yt.viewport(0,0,Xt,Qt));var ne=t.classList.contains("is-framed"),ee=ne?1.8:1,re=Xt*ee,ie=Qt*ee;Zt?tt(Mt,dt,t,Ft,Wt,ut,U.darkShare,ee):(yt.uniform3f(jt.iResolution,re,ie,1),yt.uniform1f(jt.iTime,ut),yt.uniform1f(jt.iDark,U.darkShare),yt.uniform2f(jt.zaismaViewOffset,(re-Xt)/2,(ie-Qt)/2));var se=t.hasAttribute("data-adapts-glass")&&!dt.isGlassAdapted&&W.some(function(ae){return ae.glassHost===t.parentElement});if(yt.drawArrays(yt.TRIANGLES,0,3),!Zt){var te=Mt.upscale;yt.bindFramebuffer(yt.FRAMEBUFFER,null),yt.useProgram(te.program),yt.viewport(0,0,Ft,Wt),yt.activeTexture(yt.TEXTURE0),yt.bindTexture(yt.TEXTURE_2D,Jt.texture),yt.uniform1i(te.at.zaismaDrawn,0),yt.uniform2f(te.at.zaismaDrawnSize,Xt,Qt),yt.uniform2f(te.at.zaismaCanvasSize,Ft,Wt),yt.drawArrays(yt.TRIANGLES,0,3)}return se&&(dt.isGlassAdapted=!0,St(yt,dt,Ft,Wt)),S.drawImage(at,0,at.height-Wt,Ft,Wt,0,0,Ft,Wt),t.classList.contains("is-drawn")||t.classList.add("is-drawn"),!0}return bt.prepare=function(){if(!ct()){u();return}var ut=$();ut&&xt(ut,d)},bt}var Pt=500;function qt(t,c,d){return t.map(function(w,S){return w+(c[S]-w)*d})}function It(t,c){var d=_.matches||!t.from?1:Math.min(1,(c-t.fadeStartMs)/Pt);if(d>=1)return t.from=null,Object.assign({},t.target,{darkShare:t.target.isDark?1:0});var w=d*d*(3-2*d),S=t.from,ct=t.target;return{base:qt(S.base,ct.base,w),a:qt(S.a,ct.a,w),b:qt(S.b,ct.b,w),c:qt(S.c,ct.c,w),isDark:w<.5?S.isDark:ct.isDark,darkShare:(S.darkShare!==void 0?S.darkShare:S.isDark?1:0)+((ct.isDark?1:0)-(S.darkShare!==void 0?S.darkShare:S.isDark?1:0))*w}}var Gt=1e3,Vt="zaisma:backdrop-lag-s",Ht=performance.now(),Ot=1,Yt=performance.now(),$t=!1,e=Date.now()/1e3;try{e-=Number(sessionStorage.getItem(Vt))||0}catch{}function n(t){var c=Math.max(0,t-Yt);Yt=t,Ot=t-Ht>C?Math.max(0,Ot-c/Gt):Math.min(1,Ot+c/Gt),e+=Ot*c/1e3,$t=Ot===0}function x(){Ht=performance.now(),clearTimeout(l),l=setTimeout(E,C),Tt&&(Tt=!1,O()),$t&&($t=!1,Yt=Ht,p.forEach(function(t){t.isDrawn=!1}),ot())}["pointerdown","pointermove","keydown","wheel","touchstart","scroll"].forEach(function(t){window.addEventListener(t,x,{passive:!0,capture:!0})}),l=setTimeout(E,C),window.addEventListener("pagehide",function(){try{sessionStorage.setItem(Vt,String(Date.now()/1e3-e))}catch{}});function F(t,c){if(!t.isOuter){var d=_.matches?20:e%3600;t.colors=It(t,c);var w=!0;if(t.drawShader){if(w=t.drawShader(d,t.colors,t),t.isLost){t.canvas.classList.remove("is-drawn");return}}else t.canvas.dispatchEvent(new CustomEvent("backdrop-frame",{detail:{timeS:d,colors:t.colors,widthPx:t.canvas.width,heightPx:t.canvas.height}}));t.isDrawn=w&&!t.from}}function P(t){return t.isOuter||!t.isInView||t.isLost||t.canvas.hasAttribute("data-backdrop-paused")?!1:!((t.isHeld||_.matches||$t)&&t.isDrawn)}function K(t){if(Q=!1,!document.hidden){var c=Tt?b:D;if(t-k<c&&!L){Q=!0,requestAnimationFrame(K);return}var d=Z?D:t-k;k=t,Z=!1,V=X,X=!1,n(t),A&&Y();var w=L;L=!1,p.forEach(function(S){if(!(!S.isInView||S.canvas.hasAttribute("data-backdrop-paused"))){if(S.isOuter){S.kind==="frame"&&!S.isTold&&(S.isTold=!0,Nt(S)),S.canvas.hasAttribute("data-adapts-glass")&&!S.isGlassAdapted&&rt(S);return}S.drawShader&&w&&(S.isDrawn=!1),!((S.isHeld||_.matches||$t)&&S.isDrawn)&&(S.drawShader&&d<1e3&&(S.slowS=d>c*1.5?S.slowS+d/1e3:Math.max(0,S.slowS-d/2e3),S.slowS>1.5&&(S.slowS=0,S.softShare>.6?S.softShare*=.75:S.scale>.26?(S.scale*=.75,S.size()):S.isHeld=!0)),F(S,t))}}),V=!1,(L||A||p.some(P))&&(Q=!0,requestAnimationFrame(K))}}function B(){var t=performance.now();A=!0,p.forEach(function(c){var d=M(c.canvas);JSON.stringify(d)!==JSON.stringify(c.target)&&(c.from=c.colors,c.target=d,c.fadeStartMs=t,c.isDrawn=!1,c.isGlassAdapted=!1,c.isInView&&F(c,t))}),ot()}function N(){var t="";p.forEach(function(c){var d=c.isOuter&&c.canvas.getAttribute("data-backdrop-color");d&&/^#[0-9a-fA-F]{6}$/.test(d)&&(t=d)}),t?document.documentElement.style.setProperty("--backdrop-edge",t):document.documentElement.style.removeProperty("--backdrop-edge")}function it(t,c){var d={canvas:t,kind:c,isOuter:!0,isInView:!0,isTold:!1,isGlassAdapted:!1,target:M(t),from:null};t.backdropLayer=d,p.push(d),c==="frame"&&(d.onMessage=function(S){S.source===t.contentWindow&&S.data&&S.data.zaismaBackground&&(d.isTold=!1,R())},window.addEventListener("message",d.onMessage));function w(){var S=t.getAttribute("data-glass-kind");if(t.hasAttribute("data-adapts-glass")&&S){d.isGlassAdapted=!0,q(d,{isSmoked:S==="smoked",tint:t.getAttribute("data-glass-tint")||""});return}var ct=t.getAttribute("data-backdrop-still")||(c==="picture"?t.currentSrc||t.src:"");if(!(!t.hasAttribute("data-adapts-glass")||!ct)){var bt=new Image;bt.onload=function(){t.getAttribute("data-backdrop-still")!==ct&&c!=="picture"||(d.still=bt,d.isGlassAdapted=!1,R())},bt.src=ct}}w(),new MutationObserver(w).observe(t,{attributes:!0,attributeFilter:["data-backdrop-still","src","data-glass-kind"]}),window.IntersectionObserver&&new IntersectionObserver(function(S){d.isInView=S[S.length-1].isIntersecting,d.isInView&&R()}).observe(t),R(),N()}function mt(t){if(!t.backdropLayer&&!(t.hasAttribute("data-backdrop-stand-in")&&!t.hasAttribute("data-backdrop-shader"))){var c=t.getAttribute("data-backdrop");if(c==="frame"||c==="picture")return it(t,c);var d=t.getAttribute("data-backdrop")==="scene",w=window.matchMedia("(max-width: 760px)").matches,S=Math.min(window.devicePixelRatio||1,d?2:1.5),ct=t.classList.contains("is-framed"),bt=!d&&!t.getAttribute("data-backdrop-shader"),ut=zt&&zt.has(t)?zt.get(t):et(t),U={canvas:t,isInView:ut,isDrawn:!1,isHeld:!1,slowS:0,target:M(t),from:null,softShare:1,scale:d||ct?S:bt?Math.min(window.devicePixelRatio||1,2):(w?.4:.55)*S};if(!(!d&&(U.drawShader=wt(t),!U.drawShader))){if(t.backdropLayer=U,U.size=function(){var Mt=Math.max(2,Math.round(t.clientWidth*U.scale)),Et=Math.max(2,Math.round(t.clientHeight*U.scale));bt&&!U.isOnePass?(U.drawnWidth=Mt,U.drawnHeight=Et):d||(U.drawnWidth=Math.max(2,Math.round(t.clientWidth*U.scale*i)),U.drawnHeight=Math.max(2,Math.round(t.clientHeight*U.scale*i)),Mt=Math.round(U.drawnWidth*T),Et=Math.round(U.drawnHeight*T)),!(Mt===t.width&&Et===t.height)&&(t.width=Mt,t.height=Et,U.isDrawn=!1,t.backdropLayer&&!X&&U.isInView&&F(U,performance.now()))},U.size(),window.zaismaWatch.size(t,U.size),window.IntersectionObserver&&new IntersectionObserver(function(Mt){U.isInView=Mt[Mt.length-1].isIntersecting,U.onView&&U.onView(),U.isInView&&ot()}).observe(t),U.drawShader&&!ut&&window.IntersectionObserver){var dt=new IntersectionObserver(function(Mt){Mt[Mt.length-1].isIntersecting&&(dt.disconnect(),U.drawShader.prepare())},{rootMargin:"100% 0px"});dt.observe(t)}else U.drawShader&&U.drawShader.prepare();new MutationObserver(ot).observe(t,{attributes:!0,attributeFilter:["data-backdrop-paused"]}),p.push(U),!X&&U.isInView&&F(U,performance.now()),ot()}}}function et(t){var c=t.getBoundingClientRect();return c.bottom>0&&c.right>0&&c.top<window.innerHeight&&c.left<window.innerWidth}var st=document.querySelectorAll("canvas[data-backdrop], iframe[data-backdrop='frame'], img[data-backdrop='picture']"),zt=new Map;st.forEach(function(t){t.tagName==="CANVAS"&&zt.set(t,et(t))}),st.forEach(mt),zt.clear(),window.zaismaWatch.each("canvas[data-backdrop], iframe[data-backdrop='frame'], img[data-backdrop='picture']",mt),window.zaismaBackdrop={add:function(t){A=!0,mt(t),ot()},remove:function(t){var c=t.backdropLayer;c&&(p=p.filter(function(d){return d!==c}),c.onMessage&&window.removeEventListener("message",c.onMessage),t.backdropLayer=null,R(),N())},forgetGlass:function(){document.querySelectorAll(":has(> .backdrop)").forEach(function(t){t.shownGlass=null}),document.querySelectorAll("[data-glass]").forEach(function(t){t.glassPick=null,t.classList.remove("smoke"),t.removeAttribute("data-theme-choice"),t.style.removeProperty("--glass-tint")})}},window.zaismaWatch.resize(R);function Ct(t){return t.nodeType===1&&(t.hasAttribute("data-glass")||!!t.querySelector("[data-glass]"))}window.zaismaWatch.page(function(t){A||(A=t.some(function(c){return c.type==="attributes"?c.target.hasAttribute("data-glass"):Array.prototype.some.call(c.addedNodes,Ct)||Array.prototype.some.call(c.removedNodes,Ct)}),A&&ot())}),document.addEventListener("toggle",function(){A=!0,ot()},!0),document.addEventListener("visibilitychange",function(){document.hidden||ot()}),new MutationObserver(B).observe(document.documentElement,{subtree:!0,attributes:!0,attributeFilter:["data-theme-choice"]}),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",B),_.addEventListener("change",B)})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["shown-once-drawn"]||(H["shown-once-drawn"]=!0,(function(){var m="iframe[data-shows-once-drawn]";function o(y){window.zaismaWatch.afterSettling(function(){y.classList.add("is-shown")})}window.addEventListener("message",function(y){!y.data||!y.data.zaismaBackground||document.querySelectorAll(m).forEach(function(f){y.source===f.contentWindow&&(f.hasSaid=!0,o(f))})}),window.zaismaWatch.eachArriving(m,function(y){y.addEventListener("load",function(){setTimeout(function(){y.hasSaid||o(y)},4e3)})})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.switches||(H.switches=!0,(function(){window.zaismaWatch.each(".tab-switch",function(m){var o=m.querySelector(".switch-slab"),y=m.querySelectorAll(":scope > a, :scope > button:not(.switch-folder)"),f=function(){return m.classList.contains("vertical")};function a(){return m.querySelector('[aria-current="page"], [aria-pressed="true"]')}var r=parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--gap-control-row"))||4;function g(l){return Math.max(0,((Number(l.getAttribute("data-cut-line"))||0)-r)/2)}var u=window.matchMedia("(prefers-reduced-motion: reduce)").matches;function h(l){var E=window.devicePixelRatio||1;return Math.round(l*E)/E}function s(l,E,O,G){return function(ft){for(var $=ft,gt=0;gt<8;gt++){var Lt=3*(1-$)*(1-$)*$*l+3*(1-$)*$*$*O+$*$*$-ft,xt=3*(1-$)*(1-$)*l+6*(1-$)*$*(O-l)+3*$*$*(1-O);if(Math.abs(xt)<1e-6)break;$=Math.min(1,Math.max(0,$-Lt/xt))}return 3*(1-$)*(1-$)*$*E+3*(1-$)*$*$*G+$*$*$}}var v=s(.4,0,.2,1);function i(l,E){l.slideAt=E;var O=Math.round(E.size)+"px";f()?(l.style.width=E.width?Math.round(E.width)+"px":"",l.style.height=O,l.style.transform="translate("+(E.across||0)+"px, "+E.pos+"px)"):(l.style.height="",l.style.width=O,l.style.transform="translateX("+E.pos+"px)")}function T(l,E,O){var G=l===o?k:null,ft=G?G.ease:v,$=l.slideAt||E,gt=G?null:performance.now(),Lt=(l.slideId||0)+1;l.slideId=Lt,l.slideTarget=E,(function xt(){if(l.slideId===Lt){var Rt=gt===null?0:Math.min(1,(performance.now()-gt)/O),Dt=ft(Rt);if(E=l.slideTarget,G&&G.isOn&&window.scrollTo(window.scrollX,G.fromY+(G.toY-G.fromY)*Dt),l.redrawCut&&l.redrawCut({isFrame:!0}),i(l,{pos:Rt<1?$.pos+(E.pos-$.pos)*Dt:E.pos,size:E.size,across:E.across===void 0?void 0:Rt<1?($.across||0)+(E.across-($.across||0))*Dt:E.across,width:E.width}),Rt<1){requestAnimationFrame(function(){gt===null&&(gt=performance.now()),xt()});return}l.slideTarget=null,l.redrawCut&&l.redrawCut(),G&&G.isOn&&G.land()}})()}function C(l,E,O,G){var ft=g(l),$=O?0:ft,gt=G?0:ft,Lt=m.closest("[data-cut-line]"),xt=Lt&&Lt.getAttribute("data-slanted")||"";if(!l.classList.contains("focus-ring")&&(O&&/start/.test(xt)||G&&/end/.test(xt))){var Rt=E.offsetTop,Dt=m.offsetHeight,z=parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--control-slant"))||10,I=Math.min(Number(l.getAttribute("data-cut-line"))||0,(E.offsetWidth+$+gt)/3),tt=z/2-I/2+Rt*Math.sqrt(1+z/Dt*(z/Dt))-Rt;O&&/start/.test(xt)&&($=-tt),G&&/end/.test(xt)&&(gt=-tt)}return{start:$,end:gt}}function D(){var l=m.closest("[data-cut-line]"),E=l&&l.getAttribute("data-slanted")||"",O=Array.prototype.filter.call(y,function(G){return!G.classList.contains("folded")&&!G.hidden});O.forEach(function(G,ft){if(f()){G.style.removeProperty("--tab-shift");return}var $=ft===0,gt=ft===O.length-1,Lt=C(o,G,$,gt),xt=Math.min(Number(o.getAttribute("data-cut-line"))||0,(G.offsetWidth+Lt.start+Lt.end)/3),Rt=(!$||/start/.test(E)?1:0)-(!gt||/end/.test(E)?1:0);G.style.setProperty("--tab-shift",Math.round(((Lt.end-Lt.start)/2+Rt*xt/4)*10)/10+"px")})}function b(l,E,O){var G=!O&&l.slideTarget&&l.pickedTab===E;if(l.pickedTab=E,!E){l.style.width="0px";return}var ft={beside:l.getAttribute("data-cut-beside"),ends:l.getAttribute("data-cut-ends")||"",stack:l.getAttribute("data-cut-stack")},$=Array.prototype.filter.call(m.querySelectorAll(":scope > a, :scope > button"),function(Yt){return!Yt.classList.contains("folded")&&!Yt.hidden}),gt=E===$[0],Lt=E===$[$.length-1];if(f()){var xt={pos:E.offsetTop,size:E.offsetHeight},Rt=O&&!u?p(l):0,Dt=getComputedStyle(m).display==="grid";if(Dt&&(xt.across=E.offsetLeft,xt.width=E.offsetWidth),l.classList.contains("focus-ring")){var z=gt?0:E.offsetTop,I=Lt?m.getBoundingClientRect().height:E.offsetTop+E.offsetHeight,tt=Math.round(I-z);xt={pos:Lt?I-tt:z,size:tt,across:xt.across,width:xt.width}}l.setAttribute("data-cut-beside",""),l.setAttribute("data-cut-stack",((gt?"first ":"")+(Lt?"last":"")).trim()),_(l,xt,Rt,ft.stack!==null?ft:null,G);return}var pt=C(l,E,gt,Lt),wt=pt.start,Pt=pt.end,qt={pos:h(E.offsetLeft-wt),size:E.offsetWidth+wt+Pt},It=O&&!u?p(l):0;if(l.classList.contains("focus-ring")){var Gt=gt?0:E.offsetLeft-wt,Vt=Lt?m.getBoundingClientRect().width:E.offsetLeft+E.offsetWidth+Pt,Ht=Math.round(Vt-Gt);qt={pos:Lt?Vt-Ht:Gt,size:Ht}}l.setAttribute("data-cut-beside",((gt?"":"start ")+(Lt?"":"end")).trim());var Ot=((gt?"start ":"")+(Lt?"end":"")).trim();Ot?l.setAttribute("data-cut-ends",Ot):l.removeAttribute("data-cut-ends"),_(l,qt,It,ft.beside!==null?ft:null,G)}function _(l,E,O,G,ft){if(ft){l.slideTarget=E;return}if(O&&l.redrawCut){var $=l.slideAt;i(l,E),l.redrawCut(G?{from:G,ms:O,ease:l===o&&k?k.ease:v,isDriven:!0}:void 0),$&&i(l,$),T(l,E,O);return}l.slideId=(l.slideId||0)+1,l.slideTarget=null,i(l,E),l.redrawCut&&l.redrawCut()}function p(l){return l===o&&k?k.ms:parseFloat(getComputedStyle(l).getPropertyValue("--slide-ms"))||550}var k=null;function Q(l,E,O){k&&k.stop();var G=document.documentElement,ft=window.scrollY,$=parseFloat(getComputedStyle(G).scrollPaddingTop)||0,gt=Math.max(0,Math.min(G.scrollHeight-window.innerHeight,ft+E.getBoundingClientRect().top-$)),Lt=Math.abs(gt-ft)/window.innerHeight,xt=k={isOn:!0,fromY:ft,toY:gt,ms:Math.min(800,400+130*Math.max(0,Lt-1)),ease:function(I){return I*I*I*(I*(6*I-15)+10)}},Rt=["wheel","touchstart","pointerdown","keydown"];function Dt(I){xt.isOn=!1,Rt.forEach(function(tt){window.removeEventListener(tt,z)}),k===xt&&(k=null),requestAnimationFrame(function(){requestAnimationFrame(function(){k||G.removeAttribute("data-page-gliding"),dispatchEvent(new CustomEvent("zaisma:page-glide-end",{detail:{hash:O,hasLanded:I}}))})})}function z(){Dt(!1)}xt.stop=function(){xt.isOn&&(xt.isOn=!1,Rt.forEach(function(I){window.removeEventListener(I,z)}))},xt.land=function(){location.hash=O,Dt(!0)},G.setAttribute("data-page-gliding",""),Rt.forEach(function(I){window.addEventListener(I,z,{passive:!0})}),m.pickTab(l)}var Z=!1;function X(){var l=m.querySelector(":scope > .is-focused"),E=m.querySelector(".focus-ring");l&&E&&(b(E,l),m.classList.add("is-focus-shown"))}function V(){if(!(Z||!m.getClientRects().length)){D();var l=a(),E=m.querySelector(":scope > :focus-visible"),O=m.querySelector(".focus-ring");o.style.transition="none",b(o,l),O&&E&&b(O,E),X(),o.offsetWidth,o.style.transition="",m.classList.add("is-ready")}}var ot=m.closest("body > .top")&&window.matchMedia("(orientation: landscape) and (max-height: 500px) and (max-width: 64em)");function lt(){var l=ot.matches,E=m.closest(".switch-well"),O=m.parentElement;m.classList.toggle("vertical",l),E&&(E.classList.toggle("vertical",l),E.classList.toggle("is-full",!l),E.setAttribute("data-edge-light",l?"left":"bottom")),O&&O.classList.toggle("across",!l)}ot&&(lt(),ot.addEventListener("change",function(){lt(),V()})),V();function M(l){var E=a(),O=m.parentElement;if(O){if(f()){var G=O.scrollHeight-O.clientHeight;if(!E||G<=1||!E.getClientRects().length)return;var ft=window.zaismaScrollFadePx?window.zaismaScrollFadePx():34,$=O.getBoundingClientRect(),gt=E.getBoundingClientRect(),Lt=O.scrollTop,xt=gt.top-$.top+Lt,Rt=gt.bottom-$.top+Lt,Dt=Lt;xt-ft<Lt?Dt=xt-ft:Rt+ft>Lt+O.clientHeight&&(Dt=Rt+ft-O.clientHeight),O.scrollTo({top:Math.max(0,Math.min(G,Dt)),behavior:l?"smooth":"auto"});return}m.classList.remove("is-past-room"),!(O.scrollWidth<=O.clientWidth+1)&&(m.classList.add("is-past-room"),E&&O.scrollTo({left:E.offsetLeft+E.offsetWidth/2-O.clientWidth/2,behavior:l?"smooth":"auto"}))}}M(!1);var A=window.navigation&&navigation.activation&&navigation.activation.from;if(A&&A.url&&o.animate&&!f()&&!window.matchMedia("(prefers-reduced-motion: reduce)").matches){var L=new URL(A.url),W=L.pathname,R=W===location.pathname&&L.search===location.search,ht=Array.prototype.filter.call(y,function(l){return l.href&&new URL(l.href).pathname===W}),Y=ht.find(function(l){return new URL(l.href).search===L.search})||(ht.length===1?ht[0]:void 0),nt=a();if(Y&&nt&&Y!==nt&&!R){var At=function(){var l=f()?"translateY("+Y.offsetTop+"px)":"translateX("+Y.offsetLeft+"px) scaleX("+(Y.offsetWidth/Math.max(1,nt.offsetWidth)).toFixed(4)+")",E=f()?"translateY("+nt.offsetTop+"px)":"translateX("+nt.offsetLeft+"px) scaleX(1)";return o.animate([{transform:l,transformOrigin:"0 0"},{transform:E,transformOrigin:"0 0"}],{duration:p(o),easing:"cubic-bezier(.3, 1.2, .4, 1)"})};o.style.transition="none",b(o,Y),o.offsetWidth,o.style.transition="",Z=!0;var Bt=function(){requestAnimationFrame(function(){Z=!1,V(),Z=!0;var l=function(){Z=!1,V()};At().finished.then(l,l)})};window.zaismaWatch.fontsIn(Bt)}}window.zaismaWatch.fontsIn(V),window.zaismaWatch.size(m,V),window.zaismaWatch.size(m,function(){f()||M(!1)}),m.parentElement&&(window.zaismaWatch.size(m.parentElement,V),window.zaismaWatch.size(m.parentElement,function(){M(!1)})),Array.prototype.forEach.call(m.querySelectorAll(":scope > .foldable"),function(l){window.zaismaWatch.size(l,V)}),m.pickTab=function(l){l.tagName==="BUTTON"?y.forEach(function(O){O.setAttribute("aria-pressed",String(O===l))}):y.forEach(function(O){O===l?O.setAttribute("aria-current","page"):O.removeAttribute("aria-current")}),o.pickedTab!==l&&b(o,l,!0);var E=m.closest("[data-fades-sideways]");E&&E.showWhole&&!f()?E.showWhole(l,!0):M(!0),J()};function kt(l){return l.disabled||l.getAttribute("aria-disabled")==="true"}y.forEach(function(l){l.addEventListener("click",function(E){if(!kt(l)){if(l.href&&l.getAttribute("aria-current")==="page"&&E.button===0&&!E.metaKey&&!E.ctrlKey&&!E.shiftKey&&!E.altKey){E.preventDefault();return}if(l.href&&!E.defaultPrevented){var O=new URL(l.href,location.href),G=E.button===0&&!E.metaKey&&!E.ctrlKey&&!E.shiftKey&&!E.altKey&&(!l.target||l.target==="_self");if(O.pathname!==location.pathname||O.search!==location.search){if(!f()||u||!G)return;E.preventDefault(),St=St||a(),m.pickTab(l),j(),clearTimeout(rt),document.dispatchEvent(new Event("zaisma-leaving-page")),rt=setTimeout(function(){location.assign(l.href)},p(o));return}var ft=f()&&!u&&G&&O.hash&&document.getElementById(decodeURIComponent(O.hash.slice(1)));if(ft&&ft.getClientRects().length){E.preventDefault(),Q(l,ft,O.hash);return}}m.pickTab(l)}})});var vt=Array.prototype.slice.call(m.querySelectorAll(":scope > .switch-folder"));function _t(l){for(var E=[],O=l.nextElementSibling;O&&O.classList.contains("is-in-folder");O=O.nextElementSibling)E.push(O);return E}function J(){var l=a();vt.forEach(function(E){var O=_t(E).indexOf(l)>=0;E.classList.toggle("is-held",O),O?E.removeAttribute("data-lights"):E.setAttribute("data-lights",""),O&&E.getAttribute("aria-expanded")!=="true"&&q(E,!0)})}function q(l,E){l.setAttribute("aria-expanded",String(E)),_t(l).forEach(function(O){Nt(O,E)})}vt.forEach(function(l){l.addEventListener("click",function(){if(!l.classList.contains("is-held")){var E=l.getAttribute("aria-expanded")!=="true";q(l,E),E&&j(l)}})});function j(l){vt.forEach(function(E){E!==l&&!E.classList.contains("is-held")&&E.getAttribute("aria-expanded")==="true"&&q(E,!1)})}J();var St=null,rt=null;window.addEventListener("pageshow",function(l){!l.persisted||!St||(clearTimeout(rt),m.pickTab(St),j(),St=null)});function Nt(l,E){var O=l.hidden?0:l.offsetHeight;l.getAnimations().forEach(function($){$.cancel()}),l.hidden=!1;var G=l.offsetHeight;if(u||!l.animate){l.hidden=!E;return}l.classList.add("is-folding");var ft=l.animate([{height:O+"px",minHeight:"0px",opacity:G?O/G:0},{height:(E?G:0)+"px",minHeight:"0px",opacity:E?1:0}],{duration:240,easing:"cubic-bezier(.2,.8,.2,1)"});ft.onfinish=function(){l.classList.remove("is-folding"),l.hidden=!E},ft.oncancel=function(){l.classList.remove("is-folding")}}var Tt=m.querySelector(".focus-ring");m.addEventListener("focusin",function(l){var E=l.target;!Tt||E.parentElement!==m||!E.matches(":focus-visible")||(b(Tt,E),m.classList.add("is-focus-shown"))}),m.addEventListener("focusout",function(){m.classList.remove("is-focus-shown")})})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["guild-seal"]||(H["guild-seal"]=!0,(function(){!window.IntersectionObserver||matchMedia("(prefers-reduced-motion: reduce)").matches||window.zaismaWatch.each("video.guild-seal-video",function(m){var o=!1;m.addEventListener("ended",function(){m.src=m.getAttribute("data-resting"),m.loop=!0,m.play().catch(function(){})}),new IntersectionObserver(function(y){y[y.length-1].isIntersecting?(o||(o=!0,m.src=m.getAttribute("data-forging")),m.play().catch(function(){})):m.pause()}).observe(m)})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.sidebar||(H.sidebar=!0,(function(){function m(s){return getComputedStyle(s).getPropertyValue("--sidebar-is-sheet").trim()==="1"}var o=function(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches};function y(s){return"zaisma-sidebar:"+s.getAttribute("data-sidebar-remember")}function f(s){return document.querySelectorAll('[data-sidebar-button][aria-controls="'+s.id+'"], [data-sidebar-button][aria-controls="'+s.id+'-sheet"]')}function a(s){var v=s.closest(".sidebar-layout"),i=document.getElementById(s.id+"-sheet");f(s).forEach(function(T){T.setAttribute("aria-controls",m(s)?s.id+"-sheet":s.id),T.setAttribute("aria-expanded",String(m(s)?!!(i&&i.open):!!(v&&!v.classList.contains("is-collapsed"))))})}function r(s,v){v.classList.remove("is-folding"),s.classList.remove("is-leaving"),["--sidebar-left","--sidebar-top","--sidebar-width","--sidebar-height"].forEach(function(i){s.style.removeProperty(i)})}function g(s,v,i){var T=s.closest(".sidebar-layout");if(T){if(i)try{localStorage.setItem(y(s),v?"hidden":"shown")}catch{}cancelAnimationFrame(s.foldFrame),clearTimeout(s.foldTimer),clearTimeout(s.slideTimer),r(s,T);var C=T.querySelector(".sidebar-main"),D=i&&!o()&&C,b=D?C.getBoundingClientRect():null,_=D&&v?s.getBoundingClientRect():null;if(_&&(s.style.setProperty("--sidebar-left",_.left+"px"),s.style.setProperty("--sidebar-top",_.top+"px"),s.style.setProperty("--sidebar-width",_.width+"px"),s.style.setProperty("--sidebar-height",_.height+"px"),T.classList.add("is-folding")),T.classList.toggle("is-collapsed",v),a(s),_&&(s.foldFrame=requestAnimationFrame(function(){s.classList.add("is-leaving")}),s.foldTimer=setTimeout(function(){r(s,T)},350)),!!D){var p=b.left-C.getBoundingClientRect().left;Math.abs(p)<1||(C.style.transition="none",C.style.transform="translateX("+p+"px)",C.offsetWidth,C.style.transition="transform 0.45s cubic-bezier(.2,.8,.2,1)",C.style.transform="",s.slideTimer=setTimeout(function(){C.style.removeProperty("transition"),C.style.removeProperty("transform")},500))}}}window.zaismaWatch.each("nav.sidebar[data-sidebar-remember]",function(s){try{var v=localStorage.getItem(y(s));(v==="shown"||v==="hidden")&&g(s,v==="hidden",!1)}catch{}window.zaismaWatch.whenRead(function(){u(s)}),a(s)});function u(s){var v=document.getElementById(s.id+"-sheet");v&&(v.addEventListener("close",function(){a(s);var i=f(s)[0];i&&(!document.activeElement||document.activeElement===document.body||v.contains(document.activeElement))&&i.focus({preventScroll:!0})}),v.addEventListener("click",function(i){i.target.closest&&i.target.closest("a[href]")&&v.close()})),a(s)}document.addEventListener("click",function(s){var v=s.target.closest&&s.target.closest("[data-sidebar-button]");if(v){var i=v.getAttribute("aria-controls").replace(/-sheet$/,""),T=document.getElementById(i),C=document.getElementById(i+"-sheet");if(T){if(m(T)){C&&!C.open&&(C.showModal(),a(T));return}g(T,!T.closest(".sidebar-layout").classList.contains("is-collapsed"),!0)}}});var h=!1;window.addEventListener("resize",function(){h||(h=!0,requestAnimationFrame(function(){h=!1,document.querySelectorAll("nav.sidebar[data-sidebar-remember]").forEach(function(s){var v=document.getElementById(s.id+"-sheet");!m(s)&&v&&v.open&&v.close(),a(s)})}))})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["started-low"]||(H["started-low"]=!0,(function(){function m(o){var y=o.querySelector(".run-wrap"),f=o.querySelector(":scope > .pane-in > .layout-stack")||o.querySelector(":scope > .pane-in"),a=y&&f&&Array.prototype.find.call(f.children,function(g){return g.contains(y)});if(a){var r=parseFloat(getComputedStyle(o).marginTop)||0;o.style.setProperty("--started-low-used",Math.round(a.getBoundingClientRect().bottom+window.scrollY-r)+"px")}}window.zaismaWatch.each(".glass-pane.is-started-low",function(o){m(o),window.zaismaWatch.size(o,function(){m(o)})})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.placing||(H.placing=!0,(function(){window.zaismaIsOnPage=function(a,r){var g=function(u){for(var h=u;h&&h!==document.documentElement;h=h.parentElement){var s=getComputedStyle(h).position;if(s==="fixed"||s==="sticky")return!0}return!1};return!g(a)&&!(r.parentElement&&g(r.parentElement))},window.zaismaPageRoom=function(a){var r={left:0,top:0,right:document.documentElement.clientWidth,bottom:window.innerHeight};return document.querySelectorAll("header, nav.sidebar").forEach(function(g){if(!(a&&g.contains(a))){var u=getComputedStyle(g).position,h=g.getBoundingClientRect();u!=="fixed"&&u!=="sticky"||h.width<1||h.height<1||h.bottom<=0||h.top>=r.bottom||u==="fixed"&&g.offsetParent||(h.width>=r.right/2?r.top=Math.max(r.top,h.bottom):(h.left+h.right)/2<r.right/2?r.left=Math.max(r.left,h.right):r.right=Math.min(r.right,h.left))}}),r},window.zaismaPlace=function(a,r,g){var u=g.roomRect||{left:0,top:0,right:document.documentElement.clientWidth,bottom:window.innerHeight},h=g.gapPx,s=g.edgePx,v=(a.left+a.right)/2>(u.left+u.right)/2,i=Math.max(u.left+s,Math.min(v?a.right-r.width:a.left,u.right-s-r.width)),T=u.bottom-s-a.bottom-h,C=a.top-h-s-u.top,D=r.height<=T,b=r.height<=C,_=(a.top+a.bottom)/2>(u.top+u.bottom)/2,p=!g.isAlwaysBelow&&(D&&b?_:!D&&C>T),k=p?a.top-h-r.height:a.bottom+h;return{leftPx:i,topPx:Math.max(u.top+s,Math.min(k,u.bottom-s-r.height)),isAtEnd:v,isAbove:p}};var m=64;window.zaismaCast=function(a){var r=a.floatCast;if(r||(r=a.floatCast=document.createElement("div"),r.className="floating-cast",r.setAttribute("aria-hidden","true"),r.appendChild(document.createElement("div")).appendChild(document.createElement("span")),(a.parentElement||document.body).appendChild(r)),["smoke","is-above","placed-over","opens-at-once"].forEach(function(p){r.classList.toggle(p,a.classList.contains(p))}),!a.isConnected||!a.matches(":popover-open")){r.hidden=!0;return}var g=a.getBoundingClientRect(),u=new DOMMatrix(getComputedStyle(a).transform==="none"?void 0:getComputedStyle(a).transform),h={width:a.offsetWidth,height:a.offsetHeight};h.left=g.left+g.width/2-h.width/2-u.e,h.top=g.top+g.height/2-h.height/2-u.f;var s=a.classList.contains("is-on-page"),v=getComputedStyle(a),i=v.getPropertyValue("--glass-clip").trim()||v.clipPath,T=/^polygon\\((.*)\\)$/.exec(i),C="calc(100% + "+m+"px)",D=-m+"px";if(!T){r.hidden=!0,a.castTries=(a.castTries||0)+1,a.castTries<60&&requestAnimationFrame(function(){window.zaismaCast(a)});return}a.castTries=0;var b=T?T[1].replace(/^(nonzero|evenodd),\\s*/,""):"0px 0px, 100% 0px, 100% 100%, 0px 100%";r.firstChild.firstChild.style.clipPath=T?i:"",r.style.clipPath="polygon(evenodd, "+D+" "+D+", "+C+" "+D+", "+C+" "+C+", "+D+" "+C+", "+D+" "+D+", "+b+", "+b.split(",")[0]+", "+D+" "+D+")",r.hidden&&r.classList.contains("is-arriving")&&requestAnimationFrame(function(){r.offsetWidth,r.classList.remove("is-arriving")}),r.hidden=!1,r.classList.toggle("is-on-page",s);var _=a.getAttribute("data-theme-choice");_?r.setAttribute("data-theme-choice",_):r.removeAttribute("data-theme-choice"),r.style.left=h.left+(s?window.scrollX:0)+"px",r.style.top=h.top+(s?window.scrollY:0)+"px",r.style.width=h.width+"px",r.style.height=h.height+"px"},["toggle","transitionend"].forEach(function(a){document.addEventListener(a,function(r){r.target.classList&&r.target.classList.contains("floating-pane")&&!r.target.classList.contains("in-place")&&window.zaismaCast(r.target)},!0)});var o=6,y=8,f=4;window.zaismaFloat=function(a,r){var g=a.classList.contains("in-place"),u=a.classList.contains("placed-over"),h=null;function s(){return typeof r.anchor=="function"?r.anchor():r.anchor}g||(document.querySelectorAll("body > .floating-pane, dialog > .floating-pane").forEach(function(p){p.floatingHome&&!p.floatingHome.isConnected&&(p.floatCast&&p.floatCast.remove(),p.remove())}),a.floatingHome=r.home||s(),a.floatingHome&&a.floatingHome.closest(".smoke")&&a.classList.add("smoke"),(s()&&s().closest("dialog")||document.body).appendChild(a));function v(){return g||a.matches(":popover-open")}function i(){var p=s(),k=a.offsetParent;if(!(!p||!k)){var Q=r.anchorRect?r.anchorRect(p):p.getBoundingClientRect(),Z=k.getBoundingClientRect(),X=window.zaismaPlace(Q,{width:a.offsetWidth,height:a.offsetHeight},{roomRect:{left:Z.left,top:Z.top,right:Z.right,bottom:Z.bottom},gapPx:r.gapPx||o,edgePx:r.edgePx||y,isAlwaysBelow:!0});a.style.left=Math.round(X.leftPx-Z.left-k.clientLeft)+"px",a.style.top=Math.round(X.topPx-Z.top-k.clientTop)+"px",a.classList.toggle("from-start",!X.isAtEnd),r.onPlaced&&r.onPlaced()}}g&&!u&&!r.isAnchorWidth&&(a.classList.add("is-hanging"),i(),window.zaismaWatch.resize(i),window.zaismaWatch.fontsIn(i));function T(){var p=s();if(!(g||!a.matches(":popover-open")||!p)){var k=r.anchorRect?r.anchorRect(p):p.getBoundingClientRect(),Q=document.documentElement.clientWidth,Z=window.innerHeight,X=window.zaismaPageRoom(p),V=k.bottom<0||k.top>Z,ot=V?k.top+k.height/2-Z/2+X.top:X.top,lt=V?ot+X.bottom-X.top:X.bottom,M=window.zaismaIsOnPage(p,a);if(!p.isConnected||!M&&(k.bottom<0||k.top>Z||k.right<0||k.left>Q)){_(!1);return}r.isAnchorWidth&&(a.style.width=k.width+"px",a.scrollWidth>a.clientWidth&&(a.style.width=a.scrollWidth+"px"));var A=r.gapPx||o,L=r.edgePx||y,W,R;if(a.style.setProperty("--floating-room",Math.max(0,lt-ot-2*L)+"px"),u)R=k.top+k.height/2-r.lineOf(),W=k.left;else{var ht=function(){return window.zaismaPlace(k,{width:a.offsetWidth,height:a.offsetHeight},{roomRect:{left:X.left,top:ot,right:X.right,bottom:lt},gapPx:A,edgePx:L,isAlwaysBelow:typeof r.isAlwaysBelow=="function"?r.isAlwaysBelow(p):r.isAlwaysBelow})},Y=ht();if(a.querySelector(".scrolls")){var nt=Math.max(0,Y.isAbove?k.top-ot-A-L:lt-k.bottom-A-L);a.style.setProperty("--floating-room",nt+"px");var At=r.scrollBox&&r.scrollBox(),Bt=At?At.scrollHeight-At.clientHeight:0;Bt>0&&Bt<12&&a.style.setProperty("--floating-room",Math.ceil(nt+Bt)+"px"),Y=ht()}R=Y.topPx,W=Y.leftPx,a.classList.toggle("is-above",Y.isAbove),a.classList.toggle("from-start",!Y.isAtEnd)}var kt=a.offsetWidth,vt=a.offsetHeight;R=Math.max(ot+L,Math.min(lt-vt-L,R)),W=Math.max(X.left+L,Math.min(X.right-kt-L,W)),a.classList.toggle("is-on-page",M),a.style.top=Math.round(R+(M?window.scrollY:0))+"px",a.style.left=Math.round(W+(M?window.scrollX:0))+"px",window.zaismaFit&&a.querySelectorAll(".scrolls").forEach(window.zaismaFit),r.onPlaced&&r.onPlaced(),window.zaismaCast(a)}}function C(){if(!g){if(!a.matches(":popover-open")){var p=r.home||s()||document.body,k=p.closest("[data-theme-choice]");k&&k!==document.documentElement?a.setAttribute("data-theme-choice",k.getAttribute("data-theme-choice")):a.removeAttribute("data-theme-choice"),a.classList.toggle("smoke",!!p.closest(".smoke")),a.style.setProperty("--glass-hue",getComputedStyle(p).getPropertyValue("--glass-hue")),D&&(window.zaismaCast(a),clearTimeout(a.leaveTimer),[a,a.floatCast].forEach(function(Z){Z.classList.remove("is-leaving"),Z.classList.add("is-arriving")})),a.showPopover(),D&&(function Z(X,V){requestAnimationFrame(function(ot){var lt=getComputedStyle(a).getPropertyValue("--glass-clip").trim()&&V&&ot-V<25;if(!lt&&X<30)return Z(X+1,ot);a.classList.remove("is-arriving")})})(0,0)}var Q=s();h=Q?Q.getBoundingClientRect():null,r.onShown&&r.onShown(),T(),r.onToggle&&r.onToggle(!0)}}var D=!(window.CSS&&CSS.supports("overlay","auto"))&&!matchMedia("(prefers-reduced-motion: reduce)").matches,b=(parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--motion-float"))||.12)*1e3;function _(p){if(!(g||!a.matches(":popover-open")||a.classList.contains("is-leaving"))){D?(a.classList.add("is-leaving"),a.floatCast&&a.floatCast.classList.add("is-leaving"),a.leaveTimer=setTimeout(function(){a.classList.remove("is-leaving"),a.hidePopover(),window.zaismaCast(a),a.floatCast.classList.remove("is-leaving")},b)):(a.hidePopover(),window.zaismaCast(a)),r.onToggle&&r.onToggle(!1);var k=r.focusOnClose||s();p&&k&&k.focus()}}return g||(document.addEventListener("pointerdown",function(p){var k=s();a.matches(":popover-open")&&!a.contains(p.target)&&!(k&&k.contains(p.target))&&!(r.isInside&&r.isInside(p.target))&&_(!1)}),a.addEventListener("keydown",function(p){p.key==="Escape"&&a.matches(":popover-open")&&(p.preventDefault(),_(!0))}),window.zaismaWatch.resize(T),document.addEventListener("scroll",function(p){var k=s();if(!(!a.matches(":popover-open")||!h||!k||p.target.nodeType===1&&a.contains(p.target))){var Q=k.getBoundingClientRect();(Math.abs(Q.top-h.top)>f||Math.abs(Q.left-h.left)>f)&&_(!1)}},{capture:!0,passive:!0}),window.zaismaWatch.scroll(T),window.zaismaWatch.fontsIn(T)),a.floating={open:C,close:_,isOpen:v,place:T}}})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.wheels||(H.wheels=!0,(function(){var m=window.matchMedia("(prefers-reduced-motion: reduce)").matches,o=36,y=864e5,f=3e5,a=["January","February","March","April","May","June","July","August","September","October","November","December"],r=window.matchMedia("(pointer: coarse)").matches?"Swipe each wheel to pick.":"Scroll or type to pick each one.";function g(i){return String(i).padStart(2,"0")}function u(i){return new Date(i.getFullYear(),i.getMonth(),i.getDate())}function h(i,T){for(var C=new Date().getFullYear(),D=[],b=C;b>C-100;b--)D.push(String(b));function _(Z,X){return Z?new Date(X||2e3,Z,0).getDate():31}var p={month:0,day:0,year:0},k=/^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(T.value);k&&(p.month=Number(k[2]),p.day=Number(k[3]),p.year=Math.max(0,D.indexOf(k[1])+1));function Q(){return!!(p.month&&p.day&&p.year)}return{parts:["month","day","year"],at:p,hasBlank:!0,rows:function(Z){if(Z==="month")return["Month"].concat(a);if(Z==="year")return["Year"].concat(D);for(var X=["Day"],V=1;V<=_(p.month,p.year?Number(D[p.year-1]):0);V++)X.push(String(V));return X},set:function(Z,X){return p[Z]=X,Z==="day"?[]:["day"]},isComplete:Q,typed:function(Z,X,V){if(Z!=="year"||!/^\\d{2}$/.test(X))return-1;for(var ot=1;ot<V.length;ot++)if(V[ot].slice(2)===X)return ot;return-1},firstPart:function(){return Q()||!p.month?"month":p.day?"year":"day"},words:function(){if(!Q())return{shown:null,read:r,sent:""};var Z=a[p.month-1],X=D[p.year-1];return{shown:Z.slice(0,3)+" "+p.day+", "+X,read:Z+" "+p.day+", "+X,sent:X+"-"+g(p.month)+"-"+g(p.day)}}}}function s(i,T,C){for(var D=[],b=[],_=["AM","PM"],p=1;p<=12;p++)D.push(String(p));for(var k=0;k<60;k+=5)b.push(g(k));var Q=i.hasAttribute("data-minimum-at")?new Date(i.getAttribute("data-minimum-at")):new Date;isNaN(Q)&&(Q=new Date),Q=new Date(Math.ceil(Q.getTime()/f)*f);for(var Z=u(Q),X=[],V=0;V<366;V++)X.push(new Date(Z.getFullYear(),Z.getMonth(),Z.getDate()+V));var ot=u(new Date).getTime(),lt=new Date().getFullYear(),M=new Intl.DateTimeFormat("en-US",{weekday:"short",month:"short",day:"numeric"}),A=new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",year:"numeric"});function L(J){var q=Math.round((J.getTime()-ot)/y);return q===0?"Today":q===1?"Tomorrow":(J.getFullYear()===lt?M:A).format(J)}var W=X.map(L);function R(J,q){try{var j=new Intl.DateTimeFormat("en-US",{timeZoneName:q}).formatToParts(J).find(function(St){return St.type==="timeZoneName"});return j?j.value:""}catch{return""}}function ht(J){var q=-J.getTimezoneOffset(),j=q<0?"-":"+",St=Math.abs(q);return J.getFullYear()+"-"+g(J.getMonth()+1)+"-"+g(J.getDate())+"T"+g(J.getHours())+":"+g(J.getMinutes())+j+g(Math.floor(St/60))+":"+g(St%60)}var Y={day:0,hour:0,minute:0,half:0},nt=!1;function At(J){var q=X[J.day];return new Date(q.getFullYear(),q.getMonth(),q.getDate(),(J.hour+1)%12+J.half*12,J.minute*5)}function Bt(J){var q=Math.max(0,Math.min(X.length-1,Math.round((u(J).getTime()-Z.getTime())/y)));return{day:q,hour:(J.getHours()%12||12)-1,minute:Math.floor(J.getMinutes()/5),half:J.getHours()<12?0:1}}function kt(J){Object.keys(J).forEach(function(q){Y[q]=J[q]})}var vt=T.value?new Date(T.value):null,_t=vt&&!isNaN(vt)&&C.classList.contains("is-marked")?vt:null;return vt&&!isNaN(vt)&&(kt(Bt(vt<Q?Q:vt)),nt=!0),{parts:["day","hour","minute","half"],at:Y,hasBlank:!1,rows:function(J){return J==="day"?W:J==="hour"?D:J==="minute"?b:_},set:function(J,q){return Y[J]=q,nt=!0,_t=null,At(Y)<Q?(kt(Bt(Q)),"all"):[]},isComplete:function(){return nt},opening:function(){if(nt)return!1;var J=new Date;return J.setMinutes(60,0,0),kt(Bt(J<Q?Q:J)),nt=!0,!0},firstPart:function(){return"day"},words:function(){var J=_t||At(Y);if(!nt)return{shown:null,read:"",sent:""};var q=J.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit"}),j=u(J),St=Math.round((j.getTime()-ot)/y),rt=St===0?"Today":St===1?"Tomorrow":j.toLocaleDateString("en-US",j.getFullYear()===lt?{month:"short",day:"numeric"}:{month:"short",day:"numeric",year:"numeric"}),Nt=R(J,"short"),Tt=R(J,"long");return{shown:rt+", "+q+(Nt?" "+Nt:""),read:J.toLocaleDateString("en-US",{weekday:"long",month:"long",day:"numeric",year:"numeric"})+" at "+q+(Tt?", "+Tt:""),sent:ht(J)}}}}function v(i){var T=[],C={},D={};return Array.prototype.forEach.call(i.querySelectorAll(".wheel[data-part]"),function(b){var _=b.getAttribute("data-part");T.push(_);try{C[_]=JSON.parse(b.getAttribute("data-rows"))||[]}catch{C[_]=[]}D[_]=Math.max(0,Number(b.getAttribute("data-picked"))||0)}),{parts:T,at:D,hasBlank:!1,rows:function(b){return C[b].map(function(_){return _[0]})},set:function(b,_){return D[b]=_,[]},isComplete:function(){return!0},firstPart:function(){return T[0]},words:function(){var b=T.map(function(p){return(C[p][D[p]]||[""])[0]}).join(" "),_={};return T.forEach(function(p){_[p]=(C[p][D[p]]||["",""])[1]}),{shown:b,read:b,sent:_}}}}window.zaismaWatch.each("[data-wheels]",function(i){var T=i.getAttribute("data-wheels"),C=i.id,D=i.querySelector(".wheel-button"),b=i.querySelector(".wheel-pick"),_=i.querySelector(".wheel-value"),p=b.classList.contains("in-place"),k=i.querySelector(".field-error"),Q=i.querySelector(".field-hint"),Z=i.querySelector(".wheel-read"),X=i.querySelector('input[type="hidden"]:not([data-part])'),V=T==="birthday"?h(i,X):T==="date-time"?s(i,X,D):v(i),ot=_.textContent,lt={};V.parts.forEach(function(q){lt[q]={el:i.querySelector('.wheel[data-part="'+q+'"]'),count:0}});var M=b.querySelector(".wheels"),A=window.zaismaFloat(b,{anchor:D,home:i,lineOf:function(){return M.parentElement.offsetTop+M.offsetTop+M.offsetHeight/2},onToggle:function(q){D.setAttribute("aria-expanded",String(q))}});function L(){return A.isOpen()}function W(q){var j=lt[q],St=V.at[q];Array.prototype.forEach.call(j.el.children,function(rt,Nt){rt.setAttribute("aria-selected",String(Nt===St))}),j.el.setAttribute("aria-activedescendant",C+"-"+q+"-"+St)}function R(q){var j=lt[q],St=V.rows(q),rt=document.createDocumentFragment();j.count=St.length,j.el.textContent="",St.forEach(function(Nt,Tt){var l=document.createElement("div");l.className="flush-row compact quiet",l.setAttribute("role","option"),l.id=C+"-"+q+"-"+Tt,l.textContent=Nt,l.setAttribute("data-label",Nt),V.hasBlank&&Tt===0&&l.classList.add("blank"),rt.appendChild(l)}),j.el.appendChild(rt),j.isWired||(j.isWired=!0,j.el.addEventListener("click",function(Nt){var Tt=Nt.target.closest('[role="option"]');Tt&&Tt.parentElement===j.el&&nt(q,Array.prototype.indexOf.call(j.el.children,Tt),!0)})),V.at[q]>j.count-1&&(V.at[q]=j.count-1),W(q)}function ht(q){var j=lt[q].el.firstElementChild;return j&&j.offsetHeight||o}function Y(q){V.parts.forEach(function(j){lt[j].el.scrollTo({top:V.at[j]*ht(j),behavior:q&&!m?"smooth":"auto"})})}function nt(q,j,St){j=Math.max(0,Math.min(lt[q].count-1,j)),lt[q].el.scrollTo({top:j*ht(q),behavior:St&&!m?"smooth":"auto"}),Bt(q,j)}var At=V.isComplete();function Bt(q,j){if(!(V.at[q]===j&&At)){var St=V.set(q,j);At=!0,D.classList.contains("is-marked")&&V.isComplete()&&(D.classList.remove("is-marked"),k.hidden=!0,Q&&(Q.hidden=!1)),St==="all"?(V.parts.forEach(W),Y(!0)):(W(q),St.forEach(function(rt){R(rt),lt[rt].el.scrollTop=V.at[rt]*ht(rt)})),kt()}}function kt(){var q=V.words();Z.textContent=q.read,_.textContent=q.shown===null?ot:q.shown,D.classList.toggle("set",q.shown!==null),X&&(X.value=typeof q.sent=="string"?q.sent:""),typeof q.sent=="object"&&Object.keys(q.sent).forEach(function(j){var St=i.querySelector('input[type="hidden"][data-part="'+j+'"]');St&&(St.value=q.sent[j])})}V.parts.forEach(function(q){var j=lt[q],St=null,rt="",Nt=0;R(q),j.el.addEventListener("scroll",function(){clearTimeout(St),St=setTimeout(function(){L()&&Bt(q,Math.round(j.el.scrollTop/ht(q)))},110)},{passive:!0}),j.el.addEventListener("keydown",function(Tt){var l=V.at[q],E=Tt.key,O={ArrowDown:1,ArrowUp:-1,PageDown:5,PageUp:-5}[E];if(O){nt(q,l+O,!0),Tt.preventDefault();return}if(E==="Home"){nt(q,V.hasBlank?1:0,!0),Tt.preventDefault();return}if(E==="End"){nt(q,j.count-1,!0),Tt.preventDefault();return}if(E==="Enter"&&V.isComplete()){_t(!0),Tt.preventDefault();return}if(!(E.length!==1||Tt.metaKey||Tt.ctrlKey)){var G=Date.now();rt=G-Nt>900?E.toLowerCase():rt+E.toLowerCase(),Nt=G;for(var ft=V.rows(q),$=-1,gt=V.hasBlank?1:0;gt<ft.length&&$<0;gt++)ft[gt].toLowerCase().indexOf(rt)===0&&($=gt);$<0&&V.typed&&($=V.typed(q,rt,ft)),$>=0&&(nt(q,$,!0),Tt.preventDefault())}})});function vt(q){V.opening&&V.opening()&&(At=!0,V.parts.forEach(W),kt()),A.open(),Y(!1),!q&<[V.firstPart()].el.focus({preventScroll:!0})}function _t(q){A.close(q)}D.addEventListener("click",function(){L()?_t(!1):vt()}),p&&(V.opening&&!V.isComplete()?vt(!0):requestAnimationFrame(function(){Y(!1)})),kt();var J=i.closest("form");J&&i.hasAttribute("data-required")&&J.addEventListener("submit",function(q){V.isComplete()||(q.preventDefault(),D.classList.add("is-marked"),k.hidden=!1,Q&&(Q.hidden=!0),vt())})})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.charts||(H.charts=!0,(function(){window.zaismaWatch.each("[data-chart-scroll]",function(f){f.scrollLeft=f.scrollWidth});function m(f,a,r){a.forEach(function(v,i){v.classList.toggle("is-focused",i===r)});var g=f.querySelector("[data-chart-scroll]"),u=a[r];if(!(!g||!u)){var h=g.getBoundingClientRect(),s=u.getBoundingClientRect();s.left<h.left?g.scrollLeft-=h.left-s.left:s.right>h.right&&(g.scrollLeft+=s.right-h.right),f.matches(":focus-visible")&&requestAnimationFrame(function(){y(f,u)})}}function o(f){return Array.prototype.slice.call(f.querySelectorAll(".chart-hit"))}function y(f,a){var r=f.querySelector(":scope > .chart-tip");if(r){if(f.classList.toggle("shows-tip",!!a),!a){r.classList.remove("is-shown");return}r.querySelector("b").textContent=a.getAttribute("data-tip-amount"),r.querySelector("span").textContent=a.getAttribute("data-tip-label");var g=f.getBoundingClientRect(),u=a.getBoundingClientRect(),h=getComputedStyle(a),s=!!a.closest(".is-bars");r.style.setProperty("--tip-left",u.left-g.left+u.width*parseFloat(h.getPropertyValue("--point-left"))/100+"px"),r.style.setProperty("--tip-top",u.top-g.top+u.height*parseFloat(h.getPropertyValue("--point-top"))/100+"px"),r.classList.toggle("is-end",a.classList.contains("is-end")),r.classList.toggle("is-middle",s&&!a.classList.contains("is-end")&&!a.classList.contains("is-start")),r.classList.toggle("is-high",a.classList.contains("is-high")),r.classList.add("is-shown")}}document.addEventListener("pointerover",function(f){var a=f.target instanceof Element?f.target.closest(".chart-hit"):null;a&&y(a.closest(".chart"),a)}),document.addEventListener("pointerout",function(f){var a=f.target instanceof Element?f.target.closest(".chart-hit"):null;if(a&&!(f.relatedTarget instanceof Element&&f.relatedTarget.closest(".chart-hit"))){var r=a.closest(".chart"),g=r.querySelector(".chart-hit.is-pointed")||(r.matches(":focus-visible")?r.querySelector(".chart-hit.is-focused"):null);y(r,g)}}),document.querySelectorAll("[data-chart-scroll]").forEach(function(f){f.addEventListener("scroll",function(){var a=f.closest(".chart");y(a,a.querySelector(".chart-hit.is-pointed"))},{passive:!0})}),document.addEventListener("focusout",function(f){var a=f.target instanceof Element&&f.target.matches("[data-chart-points]")?f.target:null;a&&y(a,a.querySelector(".chart-hit.is-pointed"))}),document.querySelectorAll(".chart-hit.is-pointed").forEach(function(f){y(f.closest(".chart"),f)}),document.addEventListener("focusin",function(f){var a=f.target instanceof Element&&f.target.matches("[data-chart-points]")?f.target:null;if(a){var r=o(a);r.length&&!a.querySelector(".chart-hit.is-focused")&&m(a,r,r.length-1)}}),document.addEventListener("keydown",function(f){var a=f.target instanceof Element&&f.target.matches("[data-chart-points]")?f.target:null;if(a){var r=o(a),g=r.indexOf(a.querySelector(".chart-hit.is-focused")),u=g;if(f.key==="ArrowRight"||f.key==="ArrowUp")u=Math.min(r.length-1,g+1);else if(f.key==="ArrowLeft"||f.key==="ArrowDown")u=Math.max(0,g-1);else if(f.key==="Home")u=0;else if(f.key==="End")u=r.length-1;else return;f.preventDefault(),m(a,r,u)}})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["long-fields"]||(H["long-fields"]=!0,(function(){var m=12;function o(y){var f=getComputedStyle(y),a=parseFloat(f.lineHeight)||24,r=parseFloat(f.paddingTop)+parseFloat(f.paddingBottom);y.style.height="auto",y.classList.remove("is-scrolling");var g=a*(Number(y.getAttribute("rows"))||2)+r,u=a*m+r;y.classList.toggle("is-scrolling",y.scrollHeight>u+1),y.style.height=Math.max(g,Math.min(y.scrollHeight,u))+"px";var h=Number(y.getAttribute("maxlength")),s=document.getElementById(y.id+"-count");!h||!s||(s.hidden=y.value.length<h*.8,s.textContent=y.value.length.toLocaleString("en-US")+" of "+h.toLocaleString("en-US"))}window.zaismaWatch.each("textarea[data-long-field]",o),window.zaismaWatch.whenRead(function(){document.querySelectorAll("textarea[data-long-field]").forEach(o)}),document.addEventListener("input",function(y){y.target.matches&&y.target.matches("textarea[data-long-field]")&&o(y.target)}),window.zaismaWatch.fontsIn(function(){document.querySelectorAll("textarea[data-long-field]").forEach(o)})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.sliders||(H.sliders=!0,(function(){function m(o){var y=o.closest(".slider"),f=Number(o.min),a=Number(o.max),r=y.querySelector("output"),g=r.getAttribute("data-unit");y.style.setProperty("--fill",((Number(o.value)-f)/Math.max(1e-9,a-f)).toFixed(4));var u=y.querySelector(".slider-slab");u&&u.redrawCut&&u.redrawCut(),r.textContent=Number(o.value).toLocaleString("en-US")+(g==="%"?"%":" "+g)}document.addEventListener("input",function(o){o.target.matches&&o.target.matches("input[data-slider]")&&m(o.target)}),window.addEventListener("pageshow",function(){document.querySelectorAll("input[data-slider]").forEach(m)})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["color-fields"]||(H["color-fields"]=!0,(function(){function m(g){return"#"+g.map(function(u){return u.toString(16).padStart(2,"0")}).join("").toUpperCase()}function o(g,u,h){function s(v){var i=(v+g/60)%6;return Math.round((h-h*u*Math.max(0,Math.min(i,4-i,1)))*255)}return[s(5),s(3),s(1)]}function y(g){var u=parseInt(g.slice(1),16),h=(u>>16)/255,s=(u>>8&255)/255,v=(u&255)/255,i=Math.max(h,s,v),T=i-Math.min(h,s,v),C=0;return T&&(C=i===h?(s-v)/T%6:i===s?(v-h)/T+2:(h-s)/T+4,C*=60,C<0&&(C+=360)),[C,i?T/i:0,i]}function f(g){var u=String(g||"").replace(/[^0-9a-f]/gi,"");return u.length===3&&(u=u.replace(/./g,"$&$&")),u.length===6?"#"+u.toUpperCase():null}function a(g){var u=/^\\s*(#[0-9a-f]{6})\\s*$/i.exec(g||"");return u?u[1].toUpperCase():null}var r=10;window.zaismaWatch.each("[data-color-field]",function(g){var u=g.querySelector(".color-button"),h=g.querySelector(".color-pick"),s=g.querySelector(".color-square"),v=g.querySelector(".color-knob"),i=g.querySelector(".color-side .cut-field input"),T=g.querySelector(".color-side .slider-input"),C=g.querySelector(':scope > input[type="hidden"]'),D=u.querySelector(".color-value"),b=u.querySelector(".color-chip"),_=g.querySelector(".color-none button"),p=y(a(C.value)||g.getAttribute("data-color-hex")),k=!!_&&!a(C.value),Q=!1,Z=window.zaismaFloat(h,{anchor:u,home:g,isAnchorWidth:h.classList.contains("in-place"),onToggle:function(A){u.setAttribute("aria-expanded",String(A)),A&&X()}});function X(A){var L=m(o(p[0],p[1],p[2])),W=k?"var(--clear-swatch)":L;[g,h].forEach(function(At){At.style.setProperty("--color-picked",W),At.style.setProperty("--color-full",m(o(p[0],p[1],1))),At.style.setProperty("--color-brightness",String(p[2]))});var R=s.clientWidth-2*r,ht=s.clientHeight-2*r,Y=lt(r+p[0]/360*R,r+(1-p[1])*ht);v.style.left=Y[0]+"px",v.style.top=Y[1]+"px",s.setAttribute("aria-valuetext",L),b.style.setProperty("--swatch",W),D.textContent=k?"None":L,C.value=k?"":L,A||(i.value=L);var nt=Math.round(p[2]*100);Number(T.value)!==nt&&(T.value=String(nt),Q=!0,T.dispatchEvent(new Event("input",{bubbles:!0})),Q=!1)}function V(){g.dispatchEvent(new CustomEvent("zaisma:color",{bubbles:!0,detail:{colorValue:C.value}}))}function ot(A){return Math.max(0,Math.min(1,A))}function lt(A,L){var W=s.cutCorners||[0,0,0,0],R=(v.firstElementChild.cutCorners||[5])[0],ht=[s.clientWidth,s.clientHeight];return[[1,1],[-1,1],[-1,-1],[1,-1]].forEach(function(Y,nt){var At=Y[0]>0?A-r:ht[0]-A-r,Bt=Y[1]>0?L-r:ht[1]-L-r,kt=W[nt]-R-(At+Bt);W[nt]>R&&kt>0&&(A+=Y[0]*kt/2,L+=Y[1]*kt/2)}),[A,L]}function M(A){var L=s.getBoundingClientRect();p[0]=ot((A.clientX-L.left-r)/(L.width-2*r))*359.99,p[1]=1-ot((A.clientY-L.top-r)/(L.height-2*r)),k=!1,X(),V()}s.addEventListener("pointerdown",function(A){s.setPointerCapture(A.pointerId),s.classList.add("is-held"),M(A),s.focus({preventScroll:!0}),A.preventDefault()}),s.addEventListener("pointermove",function(A){s.hasPointerCapture(A.pointerId)&&M(A)}),s.addEventListener("pointerup",function(){s.classList.remove("is-held")}),s.addEventListener("pointercancel",function(){s.classList.remove("is-held")}),s.addEventListener("keydown",function(A){var L=A.shiftKey?30:5,W=A.shiftKey?.2:.05;if(A.key==="ArrowLeft")p[0]=Math.max(0,p[0]-L);else if(A.key==="ArrowRight")p[0]=Math.min(359.99,p[0]+L);else if(A.key==="ArrowUp")p[1]=Math.min(1,p[1]+W);else if(A.key==="ArrowDown")p[1]=Math.max(0,p[1]-W);else return;A.preventDefault(),k=!1,X(),V()}),T.addEventListener("input",function(){Q||(p[2]=Number(T.value)/100,k=!1,X(),V())}),i.addEventListener("input",function(){var A=f(i.value);A&&(p=y(A),k=!1,X(!0),V())}),i.addEventListener("blur",function(){X()}),_&&_.addEventListener("click",function(){k=!0,X(),V()}),u.addEventListener("click",function(){Z.isOpen()?Z.close(!1):Z.open()}),h.classList.contains("in-place")&&Z.open(),X()})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["world-pane"]||(H["world-pane"]=!0,(function(){var m=0;function o(y){var f=document.querySelector("[data-world-pane]"),a=document.querySelector(".world-stage");if(!(!f||!a||a.classList.contains("is-framed")||window.innerWidth===m&&!y)){if(m=window.innerWidth,window.innerWidth>760||window.matchMedia("(orientation: landscape) and (max-height: 500px) and (max-width: 64em)").matches){f.style.marginTop="";return}var r=Array.prototype.find.call(f.querySelectorAll("h1, h2"),function(s){return s.getClientRects().length>0}),g=f.parentElement.querySelector("header.top");f.style.marginTop="0px";var u=(r?r.getBoundingClientRect().bottom:f.getBoundingClientRect().top+120)-f.getBoundingClientRect().top+24,h=g?g.offsetTop+g.offsetHeight+12:12;f.style.marginTop=Math.round(Math.max(h,window.innerHeight-u))+"px"}}window.zaismaPlaceWorldPane=o,window.zaismaWatch.each("[data-world-pane]",function(y){o(!0),window.zaismaWatch.size(y,function(){o(!0)})}),window.zaismaWatch.whenRead(function(){o(!0)}),window.addEventListener("resize",function(){o()}),window.zaismaWatch.fontsIn(function(){o(!0)})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["account-link"]||(H["account-link"]=!0,(function(){/(^|; )(__Host-)?zaisma_in=1/.test(document.cookie)&&window.zaismaWatch.each("header.top[data-account-from-cookie] .end > a:is(.run-wrap,.cut-btn)",function(m){m.href="/account";var o=m.querySelector(".face > span:not([class])");o&&(o.textContent="Account")})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["hidden-amounts"]||(H["hidden-amounts"]=!0,(function(){var m="zaisma.payments_amounts_hidden",o=!1;try{o=localStorage.getItem(m)==="yes"}catch{}var y="#payments .number-amount, [data-amount]",f="[data-amounts-toggle]";function a(u){u.hasAttribute("data-amount")||u.setAttribute("data-amount",u.textContent),u.textContent=o?"\\u2022\\u2022\\u2022":u.getAttribute("data-amount")}function r(u){u.setAttribute("aria-pressed",String(o));var h=u.querySelector("span:not([class])");h&&(h.textContent=o?"Show amounts":"Hide amounts")}function g(){document.querySelectorAll(y).forEach(a),document.querySelectorAll(f).forEach(r)}window.zaismaWatch.each(y,a),window.zaismaWatch.each(f,r),document.addEventListener("click",function(u){var h=u.target.closest&&u.target.closest("[data-amounts-toggle]");if(h){o=!o;try{localStorage.setItem(m,o?"yes":"no")}catch{}g()}})})())})();
|
|
11443
|
+
\`+o);function S(ct){var bt={status:"compiling",names:Rt};return gt(bt,f+ct),bt}return t.zaisma={sharp:p,soft:S(a.soft),strip:S(a.strip),shade:S(a.shade)},t.zaisma}function z(t,c,f){for(var p={framebuffer:t.createFramebuffer(),textures:[],widthPx:0,heightPx:0},S=0;S<c;S++)p.textures.push(t.createTexture());return p.size=function(ct,bt){p.widthPx===ct&&p.heightPx===bt||(p.widthPx=ct,p.heightPx=bt,t.bindFramebuffer(t.FRAMEBUFFER,p.framebuffer),p.textures.forEach(function(ut,U){t.bindTexture(t.TEXTURE_2D,ut),t.texImage2D(t.TEXTURE_2D,0,t.RGBA8,ct,bt,0,t.RGBA,t.UNSIGNED_BYTE,null),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,f?t.LINEAR:t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,f?t.LINEAR:t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0+U,t.TEXTURE_2D,ut,0)}),t.drawBuffers(p.textures.map(function(ut,U){return t.COLOR_ATTACHMENT0+U})))},p}function I(t,c,f,p,S,ct,bt,ut,U){t.bindFramebuffer(t.FRAMEBUFFER,f.framebuffer),t.useProgram(c.program),t.viewport(0,0,p,S);var dt=p*ct,Mt=dt/bt;t.uniform3f(c.at.iResolution,dt,Mt,1),t.uniform1f(c.at.iTime,ut),t.uniform1f(c.at.iDark,U),t.uniform2f(c.at.zaismaViewOffset,(dt-p)/2,(Mt-S)/2),t.drawArrays(t.TRIANGLES,0,3)}function tt(t,c,f,p,S,ct,bt,ut){var U=t.gl,dt=Dt(t),Mt=dt.sharp,Et=c.parts,Kt=p/S;Et||(Et=c.parts={strip:z(U,1,!1),shade:z(U,2,!0),soft:z(U,3,!0),storedWidth:0,storedHeight:0}),(Et.storedWidth!==p||Et.storedHeight!==S)&&(Et.storedWidth=p,Et.storedHeight=S,Et.strip.size(p,7),Et.shade.size(Math.max(2,p>>1),Math.max(2,S>>1)),U.bindFramebuffer(U.FRAMEBUFFER,Et.strip.framebuffer),U.useProgram(dt.strip.program),U.viewport(0,0,p,7),U.uniform3f(dt.strip.at.iResolution,p*ut,S*ut,1),U.uniform1f(dt.strip.at.iTime,0),U.uniform1f(dt.strip.at.iDark,0),U.uniform2f(dt.strip.at.zaismaViewOffset,(p*ut-p)/2,0),U.drawArrays(U.TRIANGLES,0,3),I(U,dt.shade,Et.shade,Et.shade.widthPx,Et.shade.heightPx,ut,Kt,0,0));var Ut=Math.max(160,Math.round(Math.min(540,Math.max(300,S*.34))*c.softShare)),yt=Math.max(2,Math.round(Ut*Kt));Et.soft.size(yt,Ut),I(U,dt.soft,Et.soft,yt,Ut,ut,Kt,ct,bt),U.bindFramebuffer(U.FRAMEBUFFER,null),U.useProgram(Mt.program),U.viewport(0,0,p,S);var at=Mt.at,Ft=[["zaismaSoftA",Et.soft.textures[0]],["zaismaSoftB",Et.soft.textures[1]],["zaismaSoftC",Et.soft.textures[2]],["zaismaStrip",Et.strip.textures[0]],["zaismaShadeA",Et.shade.textures[0]],["zaismaShadeB",Et.shade.textures[1]]];Ft.forEach(function(Zt,Jt){U.activeTexture(U.TEXTURE0+Jt),U.bindTexture(U.TEXTURE_2D,Zt[1]),U.uniform1i(at[Zt[0]],Jt)}),U.activeTexture(U.TEXTURE0);var Wt=p*ut,Xt=S*ut,Qt=(Wt-p)/2,jt=(Xt-S)/2;return U.uniform3f(at.iResolution,Wt,Xt,1),U.uniform1f(at.iTime,ct),U.uniform1f(at.iDark,bt),U.uniform2f(at.zaismaViewOffset,Qt,jt),U.uniform4f(at.zaismaUv,1/p,1/S,-Qt/p,-jt/S),at}function pt(t,c,f){var p=t.gl,S=t.drawn;return(S.widthPx<c||S.heightPx<f)&&(S.widthPx=Math.max(S.widthPx,c),S.heightPx=Math.max(S.heightPx,f),p.bindTexture(p.TEXTURE_2D,S.texture),p.texImage2D(p.TEXTURE_2D,0,p.RGBA8,S.widthPx,S.heightPx,0,p.RGBA,p.UNSIGNED_BYTE,null),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MIN_FILTER,p.LINEAR),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_MAG_FILTER,p.LINEAR),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_WRAP_S,p.CLAMP_TO_EDGE),p.texParameteri(p.TEXTURE_2D,p.TEXTURE_WRAP_T,p.CLAMP_TO_EDGE),p.bindFramebuffer(p.FRAMEBUFFER,S.framebuffer),p.framebufferTexture2D(p.FRAMEBUFFER,p.COLOR_ATTACHMENT0,p.TEXTURE_2D,S.texture,0)),S}function wt(t){var c=!t.getAttribute("data-backdrop-shader"),f=t.getAttribute("data-backdrop-shader"),p=$(),S=null;if(!p)return null;function ct(){return c&&!f&&a&&(f=\`#define RIDGE_OCTAVES 4
|
|
11444
|
+
\`+a.shapes+a.live+a.draw),f}function bt(ut,U,dt){if(!ct())return u(),!1;var Mt=$();if(Mt&&c&&!dt.isOnePass){var Et=Dt(Mt),Kt=[Et.sharp,Et.soft,Et.strip,Et.shade].map(Lt).every(Boolean);if([Et.sharp,Et.soft,Et.strip,Et.shade].some(function(ae){return ae.status==="failed"}))dt.isOnePass=!0;else if(!Kt)return!1}var Ut=Mt&&(c&&!dt.isOnePass?Dt(Mt).sharp:xt(Mt,f));if(!Ut||!Lt(Ut)||!Lt(Mt.upscale))return Ut&&(Ut.status==="failed"||Mt.upscale.status==="failed")&&(dt.isLost=!0),!1;if(S=S||t.getContext("2d",{alpha:!1}),!S)return!1;var yt=Mt.gl,at=Mt.board,Ft=t.width,Wt=t.height,Xt=dt.drawnWidth,Qt=dt.drawnHeight,jt=Ut.at;(at.width<Ft||at.height<Wt)&&(at.width=Math.max(at.width,Ft),at.height=Math.max(at.height,Wt));var Zt=c&&!dt.isOnePass,Jt=Zt?null:pt(Mt,Xt,Qt);Zt||(yt.bindFramebuffer(yt.FRAMEBUFFER,Jt.framebuffer),yt.useProgram(Ut.program),yt.viewport(0,0,Xt,Qt));var ne=t.classList.contains("is-framed"),ee=ne?1.8:1,re=Xt*ee,ie=Qt*ee;Zt?tt(Mt,dt,t,Ft,Wt,ut,U.darkShare,ee):(yt.uniform3f(jt.iResolution,re,ie,1),yt.uniform1f(jt.iTime,ut),yt.uniform1f(jt.iDark,U.darkShare),yt.uniform2f(jt.zaismaViewOffset,(re-Xt)/2,(ie-Qt)/2));var se=t.hasAttribute("data-adapts-glass")&&!dt.isGlassAdapted&&W.some(function(ae){return ae.glassHost===t.parentElement});if(yt.drawArrays(yt.TRIANGLES,0,3),!Zt){var te=Mt.upscale;yt.bindFramebuffer(yt.FRAMEBUFFER,null),yt.useProgram(te.program),yt.viewport(0,0,Ft,Wt),yt.activeTexture(yt.TEXTURE0),yt.bindTexture(yt.TEXTURE_2D,Jt.texture),yt.uniform1i(te.at.zaismaDrawn,0),yt.uniform2f(te.at.zaismaDrawnSize,Xt,Qt),yt.uniform2f(te.at.zaismaCanvasSize,Ft,Wt),yt.drawArrays(yt.TRIANGLES,0,3)}return se&&(dt.isGlassAdapted=!0,St(yt,dt,Ft,Wt)),S.drawImage(at,0,at.height-Wt,Ft,Wt,0,0,Ft,Wt),t.classList.contains("is-drawn")||t.classList.add("is-drawn"),!0}return bt.prepare=function(){if(!ct()){u();return}var ut=$();ut&&xt(ut,f)},bt}var Pt=500;function qt(t,c,f){return t.map(function(p,S){return p+(c[S]-p)*f})}function It(t,c){var f=_.matches||!t.from?1:Math.min(1,(c-t.fadeStartMs)/Pt);if(f>=1)return t.from=null,Object.assign({},t.target,{darkShare:t.target.isDark?1:0});var p=f*f*(3-2*f),S=t.from,ct=t.target;return{base:qt(S.base,ct.base,p),a:qt(S.a,ct.a,p),b:qt(S.b,ct.b,p),c:qt(S.c,ct.c,p),isDark:p<.5?S.isDark:ct.isDark,darkShare:(S.darkShare!==void 0?S.darkShare:S.isDark?1:0)+((ct.isDark?1:0)-(S.darkShare!==void 0?S.darkShare:S.isDark?1:0))*p}}var Gt=1e3,Vt="zaisma:backdrop-lag-s",Ht=performance.now(),Ot=1,Yt=performance.now(),$t=!1,e=Date.now()/1e3;try{e-=Number(sessionStorage.getItem(Vt))||0}catch{}function n(t){var c=Math.max(0,t-Yt);Yt=t,Ot=t-Ht>T?Math.max(0,Ot-c/Gt):Math.min(1,Ot+c/Gt),e+=Ot*c/1e3,$t=Ot===0}function x(){Ht=performance.now(),clearTimeout(l),l=setTimeout(E,T),Tt&&(Tt=!1,O()),$t&&($t=!1,Yt=Ht,g.forEach(function(t){t.isDrawn=!1}),ot())}["pointerdown","pointermove","keydown","wheel","touchstart","scroll"].forEach(function(t){window.addEventListener(t,x,{passive:!0,capture:!0})}),l=setTimeout(E,T),window.addEventListener("pagehide",function(){try{sessionStorage.setItem(Vt,String(Date.now()/1e3-e))}catch{}});function F(t,c){if(!t.isOuter){var f=_.matches?20:e%3600;t.colors=It(t,c);var p=!0;if(t.drawShader){if(p=t.drawShader(f,t.colors,t),t.isLost){t.canvas.classList.remove("is-drawn");return}}else t.canvas.dispatchEvent(new CustomEvent("backdrop-frame",{detail:{timeS:f,colors:t.colors,widthPx:t.canvas.width,heightPx:t.canvas.height}}));t.isDrawn=p&&!t.from}}function P(t){return t.isOuter||!t.isInView||t.isLost||t.canvas.hasAttribute("data-backdrop-paused")?!1:!((t.isHeld||_.matches||$t)&&t.isDrawn)}function K(t){if(Q=!1,!document.hidden){var c=Tt?b:D;if(t-k<c&&!L){Q=!0,requestAnimationFrame(K);return}var f=Z?D:t-k;k=t,Z=!1,V=X,X=!1,n(t),A&&Y();var p=L;L=!1,g.forEach(function(S){if(!(!S.isInView||S.canvas.hasAttribute("data-backdrop-paused"))){if(S.isOuter){S.kind==="frame"&&!S.isTold&&(S.isTold=!0,Nt(S)),S.canvas.hasAttribute("data-adapts-glass")&&!S.isGlassAdapted&&rt(S);return}S.drawShader&&p&&(S.isDrawn=!1),!((S.isHeld||_.matches||$t)&&S.isDrawn)&&(S.drawShader&&f<1e3&&(S.slowS=f>c*1.5?S.slowS+f/1e3:Math.max(0,S.slowS-f/2e3),S.slowS>1.5&&(S.slowS=0,S.softShare>.6?S.softShare*=.75:S.scale>.26?(S.scale*=.75,S.size()):S.isHeld=!0)),F(S,t))}}),V=!1,(L||A||g.some(P))&&(Q=!0,requestAnimationFrame(K))}}function B(){var t=performance.now();A=!0,g.forEach(function(c){var f=M(c.canvas);JSON.stringify(f)!==JSON.stringify(c.target)&&(c.from=c.colors,c.target=f,c.fadeStartMs=t,c.isDrawn=!1,c.isGlassAdapted=!1,c.isInView&&F(c,t))}),ot()}function N(){var t="";g.forEach(function(c){var f=c.isOuter&&c.canvas.getAttribute("data-backdrop-color");f&&/^#[0-9a-fA-F]{6}$/.test(f)&&(t=f)}),t?document.documentElement.style.setProperty("--backdrop-edge",t):document.documentElement.style.removeProperty("--backdrop-edge")}function it(t,c){var f={canvas:t,kind:c,isOuter:!0,isInView:!0,isTold:!1,isGlassAdapted:!1,target:M(t),from:null};t.backdropLayer=f,g.push(f),c==="frame"&&(f.onMessage=function(S){S.source===t.contentWindow&&S.data&&S.data.zaismaBackground&&(f.isTold=!1,R())},window.addEventListener("message",f.onMessage));function p(){var S=t.getAttribute("data-glass-kind");if(t.hasAttribute("data-adapts-glass")&&S){f.isGlassAdapted=!0,q(f,{isSmoked:S==="smoked",tint:t.getAttribute("data-glass-tint")||""});return}var ct=t.getAttribute("data-backdrop-still")||(c==="picture"?t.currentSrc||t.src:"");if(!(!t.hasAttribute("data-adapts-glass")||!ct)){var bt=new Image;bt.onload=function(){t.getAttribute("data-backdrop-still")!==ct&&c!=="picture"||(f.still=bt,f.isGlassAdapted=!1,R())},bt.src=ct}}p(),new MutationObserver(p).observe(t,{attributes:!0,attributeFilter:["data-backdrop-still","src","data-glass-kind"]}),window.IntersectionObserver&&new IntersectionObserver(function(S){f.isInView=S[S.length-1].isIntersecting,f.isInView&&R()}).observe(t),R(),N()}function mt(t){if(!t.backdropLayer&&!(t.hasAttribute("data-backdrop-stand-in")&&!t.hasAttribute("data-backdrop-shader"))){var c=t.getAttribute("data-backdrop");if(c==="frame"||c==="picture")return it(t,c);var f=t.getAttribute("data-backdrop")==="scene",p=window.matchMedia("(max-width: 760px)").matches,S=Math.min(window.devicePixelRatio||1,f?2:1.5),ct=t.classList.contains("is-framed"),bt=!f&&!t.getAttribute("data-backdrop-shader"),ut=zt&&zt.has(t)?zt.get(t):et(t),U={canvas:t,isInView:ut,isDrawn:!1,isHeld:!1,slowS:0,target:M(t),from:null,softShare:1,scale:f||ct?S:bt?Math.min(window.devicePixelRatio||1,2):(p?.4:.55)*S};if(!(!f&&(U.drawShader=wt(t),!U.drawShader))){if(t.backdropLayer=U,U.size=function(){var Mt=Math.max(2,Math.round(t.clientWidth*U.scale)),Et=Math.max(2,Math.round(t.clientHeight*U.scale));bt&&!U.isOnePass?(U.drawnWidth=Mt,U.drawnHeight=Et):f||(U.drawnWidth=Math.max(2,Math.round(t.clientWidth*U.scale*i)),U.drawnHeight=Math.max(2,Math.round(t.clientHeight*U.scale*i)),Mt=Math.round(U.drawnWidth*C),Et=Math.round(U.drawnHeight*C)),!(Mt===t.width&&Et===t.height)&&(t.width=Mt,t.height=Et,U.isDrawn=!1,t.backdropLayer&&!X&&U.isInView&&F(U,performance.now()))},U.size(),window.zaismaWatch.size(t,U.size),window.IntersectionObserver&&new IntersectionObserver(function(Mt){U.isInView=Mt[Mt.length-1].isIntersecting,U.onView&&U.onView(),U.isInView&&ot()}).observe(t),U.drawShader&&!ut&&window.IntersectionObserver){var dt=new IntersectionObserver(function(Mt){Mt[Mt.length-1].isIntersecting&&(dt.disconnect(),U.drawShader.prepare())},{rootMargin:"100% 0px"});dt.observe(t)}else U.drawShader&&U.drawShader.prepare();new MutationObserver(ot).observe(t,{attributes:!0,attributeFilter:["data-backdrop-paused"]}),g.push(U),!X&&U.isInView&&F(U,performance.now()),ot()}}}function et(t){var c=t.getBoundingClientRect();return c.bottom>0&&c.right>0&&c.top<window.innerHeight&&c.left<window.innerWidth}var st=document.querySelectorAll("canvas[data-backdrop], iframe[data-backdrop='frame'], img[data-backdrop='picture']"),zt=new Map;st.forEach(function(t){t.tagName==="CANVAS"&&zt.set(t,et(t))}),st.forEach(mt),zt.clear(),window.zaismaWatch.each("canvas[data-backdrop], iframe[data-backdrop='frame'], img[data-backdrop='picture']",mt),window.zaismaBackdrop={add:function(t){A=!0,mt(t),ot()},remove:function(t){var c=t.backdropLayer;c&&(g=g.filter(function(f){return f!==c}),c.onMessage&&window.removeEventListener("message",c.onMessage),t.backdropLayer=null,R(),N())},forgetGlass:function(){document.querySelectorAll(":has(> .backdrop)").forEach(function(t){t.shownGlass=null}),document.querySelectorAll("[data-glass]").forEach(function(t){t.glassPick=null,t.classList.remove("smoke"),t.removeAttribute("data-theme-choice"),t.style.removeProperty("--glass-tint")})}},window.zaismaWatch.resize(R);function Ct(t){return t.nodeType===1&&(t.hasAttribute("data-glass")||!!t.querySelector("[data-glass]"))}window.zaismaWatch.page(function(t){A||(A=t.some(function(c){return c.type==="attributes"?c.target.hasAttribute("data-glass"):Array.prototype.some.call(c.addedNodes,Ct)||Array.prototype.some.call(c.removedNodes,Ct)}),A&&ot())}),document.addEventListener("toggle",function(){A=!0,ot()},!0),document.addEventListener("visibilitychange",function(){document.hidden||ot()}),new MutationObserver(B).observe(document.documentElement,{subtree:!0,attributes:!0,attributeFilter:["data-theme-choice"]}),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",B),_.addEventListener("change",B)})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["shown-once-drawn"]||(H["shown-once-drawn"]=!0,(function(){var m="iframe[data-shows-once-drawn]";function o(w){window.zaismaWatch.afterSettling(function(){w.classList.add("is-shown")})}window.addEventListener("message",function(w){!w.data||!w.data.zaismaBackground||document.querySelectorAll(m).forEach(function(y){w.source===y.contentWindow&&(y.hasSaid=!0,o(y))})}),window.zaismaWatch.eachArriving(m,function(w){w.addEventListener("load",function(){setTimeout(function(){w.hasSaid||o(w)},4e3)})})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.switches||(H.switches=!0,(function(){window.zaismaWatch.each(".tab-switch",function(m){var o=m.querySelector(".switch-slab"),w=m.querySelectorAll(":scope > a, :scope > button:not(.switch-folder)"),y=function(){return m.classList.contains("vertical")};function a(){return m.querySelector('[aria-current="page"], [aria-pressed="true"]')}var r=parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--gap-control-row"))||4;function d(l){return Math.max(0,((Number(l.getAttribute("data-cut-line"))||0)-r)/2)}var u=window.matchMedia("(prefers-reduced-motion: reduce)").matches;function h(l){var E=window.devicePixelRatio||1;return Math.round(l*E)/E}function s(l,E,O,G){return function(ft){for(var $=ft,gt=0;gt<8;gt++){var Lt=3*(1-$)*(1-$)*$*l+3*(1-$)*$*$*O+$*$*$-ft,xt=3*(1-$)*(1-$)*l+6*(1-$)*$*(O-l)+3*$*$*(1-O);if(Math.abs(xt)<1e-6)break;$=Math.min(1,Math.max(0,$-Lt/xt))}return 3*(1-$)*(1-$)*$*E+3*(1-$)*$*$*G+$*$*$}}var v=s(.4,0,.2,1);function i(l,E){l.slideAt=E;var O=Math.round(E.size)+"px";y()?(l.style.width=E.width?Math.round(E.width)+"px":"",l.style.height=O,l.style.transform="translate("+(E.across||0)+"px, "+E.pos+"px)"):(l.style.height="",l.style.width=O,l.style.transform="translateX("+E.pos+"px)")}function C(l,E,O){var G=l===o?k:null,ft=G?G.ease:v,$=l.slideAt||E,gt=G?null:performance.now(),Lt=(l.slideId||0)+1;l.slideId=Lt,l.slideTarget=E,(function xt(){if(l.slideId===Lt){var Rt=gt===null?0:Math.min(1,(performance.now()-gt)/O),Dt=ft(Rt);if(E=l.slideTarget,G&&G.isOn&&window.scrollTo(window.scrollX,G.fromY+(G.toY-G.fromY)*Dt),l.redrawCut&&l.redrawCut({isFrame:!0}),i(l,{pos:Rt<1?$.pos+(E.pos-$.pos)*Dt:E.pos,size:E.size,across:E.across===void 0?void 0:Rt<1?($.across||0)+(E.across-($.across||0))*Dt:E.across,width:E.width}),Rt<1){requestAnimationFrame(function(){gt===null&&(gt=performance.now()),xt()});return}l.slideTarget=null,l.redrawCut&&l.redrawCut(),G&&G.isOn&&G.land()}})()}function T(l,E,O,G){var ft=d(l),$=O?0:ft,gt=G?0:ft,Lt=m.closest("[data-cut-line]"),xt=Lt&&Lt.getAttribute("data-slanted")||"";if(!l.classList.contains("focus-ring")&&(O&&/start/.test(xt)||G&&/end/.test(xt))){var Rt=E.offsetTop,Dt=m.offsetHeight,z=parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--control-slant"))||10,I=Math.min(Number(l.getAttribute("data-cut-line"))||0,(E.offsetWidth+$+gt)/3),tt=z/2-I/2+Rt*Math.sqrt(1+z/Dt*(z/Dt))-Rt;O&&/start/.test(xt)&&($=-tt),G&&/end/.test(xt)&&(gt=-tt)}return{start:$,end:gt}}function D(){var l=m.closest("[data-cut-line]"),E=l&&l.getAttribute("data-slanted")||"",O=Array.prototype.filter.call(w,function(G){return!G.classList.contains("folded")&&!G.hidden});O.forEach(function(G,ft){if(y()){G.style.removeProperty("--tab-shift");return}var $=ft===0,gt=ft===O.length-1,Lt=T(o,G,$,gt),xt=Math.min(Number(o.getAttribute("data-cut-line"))||0,(G.offsetWidth+Lt.start+Lt.end)/3),Rt=(!$||/start/.test(E)?1:0)-(!gt||/end/.test(E)?1:0);G.style.setProperty("--tab-shift",Math.round(((Lt.end-Lt.start)/2+Rt*xt/4)*10)/10+"px")})}function b(l,E,O){var G=!O&&l.slideTarget&&l.pickedTab===E;if(l.pickedTab=E,!E){l.style.width="0px";return}var ft={beside:l.getAttribute("data-cut-beside"),ends:l.getAttribute("data-cut-ends")||"",stack:l.getAttribute("data-cut-stack")},$=Array.prototype.filter.call(m.querySelectorAll(":scope > a, :scope > button"),function(Yt){return!Yt.classList.contains("folded")&&!Yt.hidden}),gt=E===$[0],Lt=E===$[$.length-1];if(y()){var xt={pos:E.offsetTop,size:E.offsetHeight},Rt=O&&!u?g(l):0,Dt=getComputedStyle(m).display==="grid";if(Dt&&(xt.across=E.offsetLeft,xt.width=E.offsetWidth),l.classList.contains("focus-ring")){var z=gt?0:E.offsetTop,I=Lt?m.getBoundingClientRect().height:E.offsetTop+E.offsetHeight,tt=Math.round(I-z);xt={pos:Lt?I-tt:z,size:tt,across:xt.across,width:xt.width}}l.setAttribute("data-cut-beside",""),l.setAttribute("data-cut-stack",((gt?"first ":"")+(Lt?"last":"")).trim()),_(l,xt,Rt,ft.stack!==null?ft:null,G);return}var pt=T(l,E,gt,Lt),wt=pt.start,Pt=pt.end,qt={pos:h(E.offsetLeft-wt),size:E.offsetWidth+wt+Pt},It=O&&!u?g(l):0;if(l.classList.contains("focus-ring")){var Gt=gt?0:E.offsetLeft-wt,Vt=Lt?m.getBoundingClientRect().width:E.offsetLeft+E.offsetWidth+Pt,Ht=Math.round(Vt-Gt);qt={pos:Lt?Vt-Ht:Gt,size:Ht}}l.setAttribute("data-cut-beside",((gt?"":"start ")+(Lt?"":"end")).trim());var Ot=((gt?"start ":"")+(Lt?"end":"")).trim();Ot?l.setAttribute("data-cut-ends",Ot):l.removeAttribute("data-cut-ends"),_(l,qt,It,ft.beside!==null?ft:null,G)}function _(l,E,O,G,ft){if(ft){l.slideTarget=E;return}if(O&&l.redrawCut){var $=l.slideAt;i(l,E),l.redrawCut(G?{from:G,ms:O,ease:l===o&&k?k.ease:v,isDriven:!0}:void 0),$&&i(l,$),C(l,E,O);return}l.slideId=(l.slideId||0)+1,l.slideTarget=null,i(l,E),l.redrawCut&&l.redrawCut()}function g(l){return l===o&&k?k.ms:parseFloat(getComputedStyle(l).getPropertyValue("--slide-ms"))||550}var k=null;function Q(l,E,O){k&&k.stop();var G=document.documentElement,ft=window.scrollY,$=parseFloat(getComputedStyle(G).scrollPaddingTop)||0,gt=Math.max(0,Math.min(G.scrollHeight-window.innerHeight,ft+E.getBoundingClientRect().top-$)),Lt=Math.abs(gt-ft)/window.innerHeight,xt=k={isOn:!0,fromY:ft,toY:gt,ms:Math.min(800,400+130*Math.max(0,Lt-1)),ease:function(I){return I*I*I*(I*(6*I-15)+10)}},Rt=["wheel","touchstart","pointerdown","keydown"];function Dt(I){xt.isOn=!1,Rt.forEach(function(tt){window.removeEventListener(tt,z)}),k===xt&&(k=null),requestAnimationFrame(function(){requestAnimationFrame(function(){k||G.removeAttribute("data-page-gliding"),dispatchEvent(new CustomEvent("zaisma:page-glide-end",{detail:{hash:O,hasLanded:I}}))})})}function z(){Dt(!1)}xt.stop=function(){xt.isOn&&(xt.isOn=!1,Rt.forEach(function(I){window.removeEventListener(I,z)}))},xt.land=function(){location.hash=O,Dt(!0)},G.setAttribute("data-page-gliding",""),Rt.forEach(function(I){window.addEventListener(I,z,{passive:!0})}),m.pickTab(l)}var Z=!1;function X(){var l=m.querySelector(":scope > .is-focused"),E=m.querySelector(".focus-ring");l&&E&&(b(E,l),m.classList.add("is-focus-shown"))}function V(){if(!(Z||!m.getClientRects().length)){D();var l=a(),E=m.querySelector(":scope > :focus-visible"),O=m.querySelector(".focus-ring");o.style.transition="none",b(o,l),O&&E&&b(O,E),X(),o.offsetWidth,o.style.transition="",m.classList.add("is-ready")}}var ot=m.closest("body > .top")&&window.matchMedia("(orientation: landscape) and (max-height: 500px) and (max-width: 64em)");function lt(){var l=ot.matches,E=m.closest(".switch-well"),O=m.parentElement;m.classList.toggle("vertical",l),E&&(E.classList.toggle("vertical",l),E.classList.toggle("is-full",!l),E.setAttribute("data-edge-light",l?"left":"bottom")),O&&O.classList.toggle("across",!l)}ot&&(lt(),ot.addEventListener("change",function(){lt(),V()})),V();function M(l){var E=a(),O=m.parentElement;if(O){if(y()){var G=O.scrollHeight-O.clientHeight;if(!E||G<=1||!E.getClientRects().length)return;var ft=window.zaismaScrollFadePx?window.zaismaScrollFadePx():34,$=O.getBoundingClientRect(),gt=E.getBoundingClientRect(),Lt=O.scrollTop,xt=gt.top-$.top+Lt,Rt=gt.bottom-$.top+Lt,Dt=Lt;xt-ft<Lt?Dt=xt-ft:Rt+ft>Lt+O.clientHeight&&(Dt=Rt+ft-O.clientHeight),O.scrollTo({top:Math.max(0,Math.min(G,Dt)),behavior:l?"smooth":"auto"});return}m.classList.remove("is-past-room"),!(O.scrollWidth<=O.clientWidth+1)&&(m.classList.add("is-past-room"),E&&O.scrollTo({left:E.offsetLeft+E.offsetWidth/2-O.clientWidth/2,behavior:l?"smooth":"auto"}))}}M(!1);var A=window.navigation&&navigation.activation&&navigation.activation.from;if(A&&A.url&&o.animate&&!y()&&!window.matchMedia("(prefers-reduced-motion: reduce)").matches){var L=new URL(A.url),W=L.pathname,R=W===location.pathname&&L.search===location.search,ht=Array.prototype.filter.call(w,function(l){return l.href&&new URL(l.href).pathname===W}),Y=ht.find(function(l){return new URL(l.href).search===L.search})||(ht.length===1?ht[0]:void 0),nt=a();if(Y&&nt&&Y!==nt&&!R){var At=function(){var l=y()?"translateY("+Y.offsetTop+"px)":"translateX("+Y.offsetLeft+"px) scaleX("+(Y.offsetWidth/Math.max(1,nt.offsetWidth)).toFixed(4)+")",E=y()?"translateY("+nt.offsetTop+"px)":"translateX("+nt.offsetLeft+"px) scaleX(1)";return o.animate([{transform:l,transformOrigin:"0 0"},{transform:E,transformOrigin:"0 0"}],{duration:g(o),easing:"cubic-bezier(.3, 1.2, .4, 1)"})};o.style.transition="none",b(o,Y),o.offsetWidth,o.style.transition="",Z=!0;var Bt=function(){requestAnimationFrame(function(){Z=!1,V(),Z=!0;var l=function(){Z=!1,V()};At().finished.then(l,l)})};window.zaismaWatch.fontsIn(Bt)}}window.zaismaWatch.fontsIn(V),window.zaismaWatch.size(m,V),window.zaismaWatch.size(m,function(){y()||M(!1)}),m.parentElement&&(window.zaismaWatch.size(m.parentElement,V),window.zaismaWatch.size(m.parentElement,function(){M(!1)})),Array.prototype.forEach.call(m.querySelectorAll(":scope > .foldable"),function(l){window.zaismaWatch.size(l,V)}),m.pickTab=function(l){l.tagName==="BUTTON"?w.forEach(function(O){O.setAttribute("aria-pressed",String(O===l))}):w.forEach(function(O){O===l?O.setAttribute("aria-current","page"):O.removeAttribute("aria-current")}),o.pickedTab!==l&&b(o,l,!0);var E=m.closest("[data-fades-sideways]");E&&E.showWhole&&!y()?E.showWhole(l,!0):M(!0),J()};function kt(l){return l.disabled||l.getAttribute("aria-disabled")==="true"}w.forEach(function(l){l.addEventListener("click",function(E){if(!kt(l)){if(l.href&&l.getAttribute("aria-current")==="page"&&E.button===0&&!E.metaKey&&!E.ctrlKey&&!E.shiftKey&&!E.altKey){E.preventDefault();return}if(l.href&&!E.defaultPrevented){var O=new URL(l.href,location.href),G=E.button===0&&!E.metaKey&&!E.ctrlKey&&!E.shiftKey&&!E.altKey&&(!l.target||l.target==="_self");if(O.pathname!==location.pathname||O.search!==location.search){if(!y()||u||!G)return;E.preventDefault(),St=St||a(),m.pickTab(l),j(),clearTimeout(rt),document.dispatchEvent(new Event("zaisma-leaving-page")),rt=setTimeout(function(){location.assign(l.href)},g(o));return}var ft=y()&&!u&&G&&O.hash&&document.getElementById(decodeURIComponent(O.hash.slice(1)));if(ft&&ft.getClientRects().length){E.preventDefault(),Q(l,ft,O.hash);return}}m.pickTab(l)}})});var vt=Array.prototype.slice.call(m.querySelectorAll(":scope > .switch-folder"));function _t(l){for(var E=[],O=l.nextElementSibling;O&&O.classList.contains("is-in-folder");O=O.nextElementSibling)E.push(O);return E}function J(){var l=a();vt.forEach(function(E){var O=_t(E).indexOf(l)>=0;E.classList.toggle("is-held",O),O?E.removeAttribute("data-lights"):E.setAttribute("data-lights",""),O&&E.getAttribute("aria-expanded")!=="true"&&q(E,!0)})}function q(l,E){l.setAttribute("aria-expanded",String(E)),_t(l).forEach(function(O){Nt(O,E)})}vt.forEach(function(l){l.addEventListener("click",function(){if(!l.classList.contains("is-held")){var E=l.getAttribute("aria-expanded")!=="true";q(l,E),E&&j(l)}})});function j(l){vt.forEach(function(E){E!==l&&!E.classList.contains("is-held")&&E.getAttribute("aria-expanded")==="true"&&q(E,!1)})}J();var St=null,rt=null;window.addEventListener("pageshow",function(l){!l.persisted||!St||(clearTimeout(rt),m.pickTab(St),j(),St=null)});function Nt(l,E){var O=l.hidden?0:l.offsetHeight;l.getAnimations().forEach(function($){$.cancel()}),l.hidden=!1;var G=l.offsetHeight;if(u||!l.animate){l.hidden=!E;return}l.classList.add("is-folding");var ft=l.animate([{height:O+"px",minHeight:"0px",opacity:G?O/G:0},{height:(E?G:0)+"px",minHeight:"0px",opacity:E?1:0}],{duration:240,easing:"cubic-bezier(.2,.8,.2,1)"});ft.onfinish=function(){l.classList.remove("is-folding"),l.hidden=!E},ft.oncancel=function(){l.classList.remove("is-folding")}}var Tt=m.querySelector(".focus-ring");m.addEventListener("focusin",function(l){var E=l.target;!Tt||E.parentElement!==m||!E.matches(":focus-visible")||(b(Tt,E),m.classList.add("is-focus-shown"))}),m.addEventListener("focusout",function(){m.classList.remove("is-focus-shown")})})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["guild-seal"]||(H["guild-seal"]=!0,(function(){!window.IntersectionObserver||matchMedia("(prefers-reduced-motion: reduce)").matches||window.zaismaWatch.each("video.guild-seal-video",function(m){var o=!1;m.addEventListener("ended",function(){m.src=m.getAttribute("data-resting"),m.loop=!0,m.play().catch(function(){})}),new IntersectionObserver(function(w){w[w.length-1].isIntersecting?(o||(o=!0,m.src=m.getAttribute("data-forging")),m.play().catch(function(){})):m.pause()}).observe(m)})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.sidebar||(H.sidebar=!0,(function(){function m(s){return getComputedStyle(s).getPropertyValue("--sidebar-is-sheet").trim()==="1"}var o=function(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches};function w(s){return"zaisma-sidebar:"+s.getAttribute("data-sidebar-remember")}function y(s){return document.querySelectorAll('[data-sidebar-button][aria-controls="'+s.id+'"], [data-sidebar-button][aria-controls="'+s.id+'-sheet"]')}function a(s){var v=s.closest(".sidebar-layout"),i=document.getElementById(s.id+"-sheet");y(s).forEach(function(C){C.setAttribute("aria-controls",m(s)?s.id+"-sheet":s.id),C.setAttribute("aria-expanded",String(m(s)?!!(i&&i.open):!!(v&&!v.classList.contains("is-collapsed"))))})}function r(s,v){v.classList.remove("is-folding"),s.classList.remove("is-leaving"),["--sidebar-left","--sidebar-top","--sidebar-width","--sidebar-height"].forEach(function(i){s.style.removeProperty(i)})}function d(s,v,i){var C=s.closest(".sidebar-layout");if(C){if(i)try{localStorage.setItem(w(s),v?"hidden":"shown")}catch{}cancelAnimationFrame(s.foldFrame),clearTimeout(s.foldTimer),clearTimeout(s.slideTimer),r(s,C);var T=C.querySelector(".sidebar-main"),D=i&&!o()&&T,b=D?T.getBoundingClientRect():null,_=D&&v?s.getBoundingClientRect():null;if(_&&(s.style.setProperty("--sidebar-left",_.left+"px"),s.style.setProperty("--sidebar-top",_.top+"px"),s.style.setProperty("--sidebar-width",_.width+"px"),s.style.setProperty("--sidebar-height",_.height+"px"),C.classList.add("is-folding")),C.classList.toggle("is-collapsed",v),a(s),_&&(s.foldFrame=requestAnimationFrame(function(){s.classList.add("is-leaving")}),s.foldTimer=setTimeout(function(){r(s,C)},350)),!!D){var g=b.left-T.getBoundingClientRect().left;Math.abs(g)<1||(T.style.transition="none",T.style.transform="translateX("+g+"px)",T.offsetWidth,T.style.transition="transform 0.45s cubic-bezier(.2,.8,.2,1)",T.style.transform="",s.slideTimer=setTimeout(function(){T.style.removeProperty("transition"),T.style.removeProperty("transform")},500))}}}window.zaismaWatch.each("nav.sidebar[data-sidebar-remember]",function(s){try{var v=localStorage.getItem(w(s));(v==="shown"||v==="hidden")&&d(s,v==="hidden",!1)}catch{}window.zaismaWatch.whenRead(function(){u(s)}),a(s)});function u(s){var v=document.getElementById(s.id+"-sheet");v&&(v.addEventListener("close",function(){a(s);var i=y(s)[0];i&&(!document.activeElement||document.activeElement===document.body||v.contains(document.activeElement))&&i.focus({preventScroll:!0})}),v.addEventListener("click",function(i){i.target.closest&&i.target.closest("a[href]")&&v.close()})),a(s)}document.addEventListener("click",function(s){var v=s.target.closest&&s.target.closest("[data-sidebar-button]");if(v){var i=v.getAttribute("aria-controls").replace(/-sheet$/,""),C=document.getElementById(i),T=document.getElementById(i+"-sheet");if(C){if(m(C)){T&&!T.open&&(T.showModal(),a(C));return}d(C,!C.closest(".sidebar-layout").classList.contains("is-collapsed"),!0)}}});var h=!1;window.addEventListener("resize",function(){h||(h=!0,requestAnimationFrame(function(){h=!1,document.querySelectorAll("nav.sidebar[data-sidebar-remember]").forEach(function(s){var v=document.getElementById(s.id+"-sheet");!m(s)&&v&&v.open&&v.close(),a(s)})}))})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["started-low"]||(H["started-low"]=!0,(function(){function m(o){var w=o.querySelector(".run-wrap"),y=o.querySelector(":scope > .pane-in > .layout-stack")||o.querySelector(":scope > .pane-in"),a=w&&y&&Array.prototype.find.call(y.children,function(d){return d.contains(w)});if(a){var r=parseFloat(getComputedStyle(o).marginTop)||0;o.style.setProperty("--started-low-used",Math.round(a.getBoundingClientRect().bottom+window.scrollY-r)+"px")}}window.zaismaWatch.each(".glass-pane.is-started-low",function(o){m(o),window.zaismaWatch.size(o,function(){m(o)})})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.placing||(H.placing=!0,(function(){window.zaismaIsOnPage=function(a,r){var d=function(u){for(var h=u;h&&h!==document.documentElement;h=h.parentElement){var s=getComputedStyle(h).position;if(s==="fixed"||s==="sticky")return!0}return!1};return!d(a)&&!(r.parentElement&&d(r.parentElement))},window.zaismaPageRoom=function(a){var r={left:0,top:0,right:document.documentElement.clientWidth,bottom:window.innerHeight};return document.querySelectorAll("header, nav.sidebar").forEach(function(d){if(!(a&&d.contains(a))){var u=getComputedStyle(d).position,h=d.getBoundingClientRect();u!=="fixed"&&u!=="sticky"||h.width<1||h.height<1||h.bottom<=0||h.top>=r.bottom||u==="fixed"&&d.offsetParent||(h.width>=r.right/2?r.top=Math.max(r.top,h.bottom):(h.left+h.right)/2<r.right/2?r.left=Math.max(r.left,h.right):r.right=Math.min(r.right,h.left))}}),r},window.zaismaPlace=function(a,r,d){var u=d.roomRect||{left:0,top:0,right:document.documentElement.clientWidth,bottom:window.innerHeight},h=d.gapPx,s=d.edgePx,v=(a.left+a.right)/2>(u.left+u.right)/2,i=Math.max(u.left+s,Math.min(v?a.right-r.width:a.left,u.right-s-r.width)),C=u.bottom-s-a.bottom-h,T=a.top-h-s-u.top,D=r.height<=C,b=r.height<=T,_=(a.top+a.bottom)/2>(u.top+u.bottom)/2,g=!d.isAlwaysBelow&&(D&&b?_:!D&&T>C),k=g?a.top-h-r.height:a.bottom+h;return{leftPx:i,topPx:Math.max(u.top+s,Math.min(k,u.bottom-s-r.height)),isAtEnd:v,isAbove:g}};var m=64;window.zaismaCast=function(a){var r=a.floatCast;if(r||(r=a.floatCast=document.createElement("div"),r.className="floating-cast",r.setAttribute("aria-hidden","true"),r.appendChild(document.createElement("div")).appendChild(document.createElement("span")),(a.parentElement||document.body).appendChild(r)),["smoke","is-above","placed-over","opens-at-once"].forEach(function(g){r.classList.toggle(g,a.classList.contains(g))}),!a.isConnected||!a.matches(":popover-open")){r.hidden=!0;return}var d=a.getBoundingClientRect(),u=new DOMMatrix(getComputedStyle(a).transform==="none"?void 0:getComputedStyle(a).transform),h={width:a.offsetWidth,height:a.offsetHeight};h.left=d.left+d.width/2-h.width/2-u.e,h.top=d.top+d.height/2-h.height/2-u.f;var s=a.classList.contains("is-on-page"),v=getComputedStyle(a),i=v.getPropertyValue("--glass-clip").trim()||v.clipPath,C=/^polygon\\((.*)\\)$/.exec(i),T="calc(100% + "+m+"px)",D=-m+"px";if(!C){r.hidden=!0,a.castTries=(a.castTries||0)+1,a.castTries<60&&requestAnimationFrame(function(){window.zaismaCast(a)});return}a.castTries=0;var b=C?C[1].replace(/^(nonzero|evenodd),\\s*/,""):"0px 0px, 100% 0px, 100% 100%, 0px 100%";r.firstChild.firstChild.style.clipPath=C?i:"",r.style.clipPath="polygon(evenodd, "+D+" "+D+", "+T+" "+D+", "+T+" "+T+", "+D+" "+T+", "+D+" "+D+", "+b+", "+b.split(",")[0]+", "+D+" "+D+")",r.hidden&&r.classList.contains("is-arriving")&&requestAnimationFrame(function(){r.offsetWidth,r.classList.remove("is-arriving")}),r.hidden=!1,r.classList.toggle("is-on-page",s);var _=a.getAttribute("data-theme-choice");_?r.setAttribute("data-theme-choice",_):r.removeAttribute("data-theme-choice"),r.style.left=h.left+(s?window.scrollX:0)+"px",r.style.top=h.top+(s?window.scrollY:0)+"px",r.style.width=h.width+"px",r.style.height=h.height+"px"},["toggle","transitionend"].forEach(function(a){document.addEventListener(a,function(r){r.target.classList&&r.target.classList.contains("floating-pane")&&!r.target.classList.contains("in-place")&&window.zaismaCast(r.target)},!0)});var o=6,w=8,y=4;window.zaismaFloat=function(a,r){var d=a.classList.contains("in-place"),u=a.classList.contains("placed-over"),h=null;function s(){return typeof r.anchor=="function"?r.anchor():r.anchor}d||(document.querySelectorAll("body > .floating-pane, dialog > .floating-pane").forEach(function(g){g.floatingHome&&!g.floatingHome.isConnected&&(g.floatCast&&g.floatCast.remove(),g.remove())}),a.floatingHome=r.home||s(),a.floatingHome&&a.floatingHome.closest(".smoke")&&a.classList.add("smoke"),(s()&&s().closest("dialog")||document.body).appendChild(a));function v(){return d||a.matches(":popover-open")}function i(){var g=s(),k=a.offsetParent;if(!(!g||!k)){var Q=r.anchorRect?r.anchorRect(g):g.getBoundingClientRect(),Z=k.getBoundingClientRect(),X=window.zaismaPlace(Q,{width:a.offsetWidth,height:a.offsetHeight},{roomRect:{left:Z.left,top:Z.top,right:Z.right,bottom:Z.bottom},gapPx:r.gapPx||o,edgePx:r.edgePx||w,isAlwaysBelow:!0});a.style.left=Math.round(X.leftPx-Z.left-k.clientLeft)+"px",a.style.top=Math.round(X.topPx-Z.top-k.clientTop)+"px",a.classList.toggle("from-start",!X.isAtEnd),r.onPlaced&&r.onPlaced()}}d&&!u&&!r.isAnchorWidth&&(a.classList.add("is-hanging"),i(),window.zaismaWatch.resize(i),window.zaismaWatch.fontsIn(i));function C(){var g=s();if(!(d||!a.matches(":popover-open")||!g)){var k=r.anchorRect?r.anchorRect(g):g.getBoundingClientRect(),Q=document.documentElement.clientWidth,Z=window.innerHeight,X=window.zaismaPageRoom(g),V=k.bottom<0||k.top>Z,ot=V?k.top+k.height/2-Z/2+X.top:X.top,lt=V?ot+X.bottom-X.top:X.bottom,M=window.zaismaIsOnPage(g,a);if(!g.isConnected||!M&&(k.bottom<0||k.top>Z||k.right<0||k.left>Q)){_(!1);return}r.isAnchorWidth&&(a.style.width=k.width+"px",a.scrollWidth>a.clientWidth&&(a.style.width=a.scrollWidth+"px"));var A=r.gapPx||o,L=r.edgePx||w,W,R;if(a.style.setProperty("--floating-room",Math.max(0,lt-ot-2*L)+"px"),u)R=k.top+k.height/2-r.lineOf(),W=k.left;else{var ht=function(){return window.zaismaPlace(k,{width:a.offsetWidth,height:a.offsetHeight},{roomRect:{left:X.left,top:ot,right:X.right,bottom:lt},gapPx:A,edgePx:L,isAlwaysBelow:typeof r.isAlwaysBelow=="function"?r.isAlwaysBelow(g):r.isAlwaysBelow})},Y=ht();if(a.querySelector(".scrolls")){var nt=Math.max(0,Y.isAbove?k.top-ot-A-L:lt-k.bottom-A-L);a.style.setProperty("--floating-room",nt+"px");var At=r.scrollBox&&r.scrollBox(),Bt=At?At.scrollHeight-At.clientHeight:0;Bt>0&&Bt<12&&a.style.setProperty("--floating-room",Math.ceil(nt+Bt)+"px"),Y=ht()}R=Y.topPx,W=Y.leftPx,a.classList.toggle("is-above",Y.isAbove),a.classList.toggle("from-start",!Y.isAtEnd)}var kt=a.offsetWidth,vt=a.offsetHeight;R=Math.max(ot+L,Math.min(lt-vt-L,R)),W=Math.max(X.left+L,Math.min(X.right-kt-L,W)),a.classList.toggle("is-on-page",M),a.style.top=Math.round(R+(M?window.scrollY:0))+"px",a.style.left=Math.round(W+(M?window.scrollX:0))+"px",window.zaismaFit&&a.querySelectorAll(".scrolls").forEach(window.zaismaFit),r.onPlaced&&r.onPlaced(),window.zaismaCast(a)}}function T(){if(!d){if(!a.matches(":popover-open")){var g=r.home||s()||document.body,k=g.closest("[data-theme-choice]");k&&k!==document.documentElement?a.setAttribute("data-theme-choice",k.getAttribute("data-theme-choice")):a.removeAttribute("data-theme-choice"),a.classList.toggle("smoke",!!g.closest(".smoke")),a.style.setProperty("--glass-hue",getComputedStyle(g).getPropertyValue("--glass-hue")),D&&(window.zaismaCast(a),clearTimeout(a.leaveTimer),[a,a.floatCast].forEach(function(Z){Z.classList.remove("is-leaving"),Z.classList.add("is-arriving")})),a.showPopover(),D&&(function Z(X,V){requestAnimationFrame(function(ot){var lt=getComputedStyle(a).getPropertyValue("--glass-clip").trim()&&V&&ot-V<25;if(!lt&&X<30)return Z(X+1,ot);a.classList.remove("is-arriving")})})(0,0)}var Q=s();h=Q?Q.getBoundingClientRect():null,r.onShown&&r.onShown(),C(),r.onToggle&&r.onToggle(!0)}}var D=!(window.CSS&&CSS.supports("overlay","auto"))&&!matchMedia("(prefers-reduced-motion: reduce)").matches,b=(parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--motion-float"))||.12)*1e3;function _(g){if(!(d||!a.matches(":popover-open")||a.classList.contains("is-leaving"))){D?(a.classList.add("is-leaving"),a.floatCast&&a.floatCast.classList.add("is-leaving"),a.leaveTimer=setTimeout(function(){a.classList.remove("is-leaving"),a.hidePopover(),window.zaismaCast(a),a.floatCast.classList.remove("is-leaving")},b)):(a.hidePopover(),window.zaismaCast(a)),r.onToggle&&r.onToggle(!1);var k=r.focusOnClose||s();g&&k&&k.focus()}}return d||(document.addEventListener("pointerdown",function(g){var k=s();a.matches(":popover-open")&&!a.contains(g.target)&&!(k&&k.contains(g.target))&&!(r.isInside&&r.isInside(g.target))&&_(!1)}),a.addEventListener("keydown",function(g){g.key==="Escape"&&a.matches(":popover-open")&&(g.preventDefault(),_(!0))}),window.zaismaWatch.resize(C),document.addEventListener("scroll",function(g){var k=s();if(!(!a.matches(":popover-open")||!h||!k||g.target.nodeType===1&&a.contains(g.target))){var Q=k.getBoundingClientRect();(Math.abs(Q.top-h.top)>y||Math.abs(Q.left-h.left)>y)&&_(!1)}},{capture:!0,passive:!0}),window.zaismaWatch.scroll(C),window.zaismaWatch.fontsIn(C)),a.floating={open:T,close:_,isOpen:v,place:C}}})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.wheels||(H.wheels=!0,(function(){var m=window.matchMedia("(prefers-reduced-motion: reduce)").matches,o=36,w=864e5,y=3e5,a=["January","February","March","April","May","June","July","August","September","October","November","December"],r=window.matchMedia("(pointer: coarse)").matches?"Swipe each wheel to pick.":"Scroll or type to pick each one.";function d(i){return String(i).padStart(2,"0")}function u(i){return new Date(i.getFullYear(),i.getMonth(),i.getDate())}function h(i,C){for(var T=new Date().getFullYear(),D=[],b=T;b>T-100;b--)D.push(String(b));function _(Z,X){return Z?new Date(X||2e3,Z,0).getDate():31}var g={month:0,day:0,year:0},k=/^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(C.value);k&&(g.month=Number(k[2]),g.day=Number(k[3]),g.year=Math.max(0,D.indexOf(k[1])+1));function Q(){return!!(g.month&&g.day&&g.year)}return{parts:["month","day","year"],at:g,hasBlank:!0,rows:function(Z){if(Z==="month")return["Month"].concat(a);if(Z==="year")return["Year"].concat(D);for(var X=["Day"],V=1;V<=_(g.month,g.year?Number(D[g.year-1]):0);V++)X.push(String(V));return X},set:function(Z,X){return g[Z]=X,Z==="day"?[]:["day"]},isComplete:Q,typed:function(Z,X,V){if(Z!=="year"||!/^\\d{2}$/.test(X))return-1;for(var ot=1;ot<V.length;ot++)if(V[ot].slice(2)===X)return ot;return-1},firstPart:function(){return Q()||!g.month?"month":g.day?"year":"day"},words:function(){if(!Q())return{shown:null,read:r,sent:""};var Z=a[g.month-1],X=D[g.year-1];return{shown:Z.slice(0,3)+" "+g.day+", "+X,read:Z+" "+g.day+", "+X,sent:X+"-"+d(g.month)+"-"+d(g.day)}}}}function s(i,C,T){for(var D=[],b=[],_=["AM","PM"],g=1;g<=12;g++)D.push(String(g));for(var k=0;k<60;k+=5)b.push(d(k));var Q=i.hasAttribute("data-minimum-at")?new Date(i.getAttribute("data-minimum-at")):new Date;isNaN(Q)&&(Q=new Date),Q=new Date(Math.ceil(Q.getTime()/y)*y);for(var Z=u(Q),X=[],V=0;V<366;V++)X.push(new Date(Z.getFullYear(),Z.getMonth(),Z.getDate()+V));var ot=u(new Date).getTime(),lt=new Date().getFullYear(),M=new Intl.DateTimeFormat("en-US",{weekday:"short",month:"short",day:"numeric"}),A=new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",year:"numeric"});function L(J){var q=Math.round((J.getTime()-ot)/w);return q===0?"Today":q===1?"Tomorrow":(J.getFullYear()===lt?M:A).format(J)}var W=X.map(L);function R(J,q){try{var j=new Intl.DateTimeFormat("en-US",{timeZoneName:q}).formatToParts(J).find(function(St){return St.type==="timeZoneName"});return j?j.value:""}catch{return""}}function ht(J){var q=-J.getTimezoneOffset(),j=q<0?"-":"+",St=Math.abs(q);return J.getFullYear()+"-"+d(J.getMonth()+1)+"-"+d(J.getDate())+"T"+d(J.getHours())+":"+d(J.getMinutes())+j+d(Math.floor(St/60))+":"+d(St%60)}var Y={day:0,hour:0,minute:0,half:0},nt=!1;function At(J){var q=X[J.day];return new Date(q.getFullYear(),q.getMonth(),q.getDate(),(J.hour+1)%12+J.half*12,J.minute*5)}function Bt(J){var q=Math.max(0,Math.min(X.length-1,Math.round((u(J).getTime()-Z.getTime())/w)));return{day:q,hour:(J.getHours()%12||12)-1,minute:Math.floor(J.getMinutes()/5),half:J.getHours()<12?0:1}}function kt(J){Object.keys(J).forEach(function(q){Y[q]=J[q]})}var vt=C.value?new Date(C.value):null,_t=vt&&!isNaN(vt)&&T.classList.contains("is-marked")?vt:null;return vt&&!isNaN(vt)&&(kt(Bt(vt<Q?Q:vt)),nt=!0),{parts:["day","hour","minute","half"],at:Y,hasBlank:!1,rows:function(J){return J==="day"?W:J==="hour"?D:J==="minute"?b:_},set:function(J,q){return Y[J]=q,nt=!0,_t=null,At(Y)<Q?(kt(Bt(Q)),"all"):[]},isComplete:function(){return nt},opening:function(){if(nt)return!1;var J=new Date;return J.setMinutes(60,0,0),kt(Bt(J<Q?Q:J)),nt=!0,!0},firstPart:function(){return"day"},words:function(){var J=_t||At(Y);if(!nt)return{shown:null,read:"",sent:""};var q=J.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit"}),j=u(J),St=Math.round((j.getTime()-ot)/w),rt=St===0?"Today":St===1?"Tomorrow":j.toLocaleDateString("en-US",j.getFullYear()===lt?{month:"short",day:"numeric"}:{month:"short",day:"numeric",year:"numeric"}),Nt=R(J,"short"),Tt=R(J,"long");return{shown:rt+", "+q+(Nt?" "+Nt:""),read:J.toLocaleDateString("en-US",{weekday:"long",month:"long",day:"numeric",year:"numeric"})+" at "+q+(Tt?", "+Tt:""),sent:ht(J)}}}}function v(i){var C=[],T={},D={};return Array.prototype.forEach.call(i.querySelectorAll(".wheel[data-part]"),function(b){var _=b.getAttribute("data-part");C.push(_);try{T[_]=JSON.parse(b.getAttribute("data-rows"))||[]}catch{T[_]=[]}D[_]=Math.max(0,Number(b.getAttribute("data-picked"))||0)}),{parts:C,at:D,hasBlank:!1,rows:function(b){return T[b].map(function(_){return _[0]})},set:function(b,_){return D[b]=_,[]},isComplete:function(){return!0},firstPart:function(){return C[0]},words:function(){var b=C.map(function(g){return(T[g][D[g]]||[""])[0]}).join(" "),_={};return C.forEach(function(g){_[g]=(T[g][D[g]]||["",""])[1]}),{shown:b,read:b,sent:_}}}}window.zaismaWatch.each("[data-wheels]",function(i){var C=i.getAttribute("data-wheels"),T=i.id,D=i.querySelector(".wheel-button"),b=i.querySelector(".wheel-pick"),_=i.querySelector(".wheel-value"),g=b.classList.contains("in-place"),k=i.querySelector(".field-error"),Q=i.querySelector(".field-hint"),Z=i.querySelector(".wheel-read"),X=i.querySelector('input[type="hidden"]:not([data-part])'),V=C==="birthday"?h(i,X):C==="date-time"?s(i,X,D):v(i),ot=_.textContent,lt={};V.parts.forEach(function(q){lt[q]={el:i.querySelector('.wheel[data-part="'+q+'"]'),count:0}});var M=b.querySelector(".wheels"),A=window.zaismaFloat(b,{anchor:D,home:i,lineOf:function(){return M.parentElement.offsetTop+M.offsetTop+M.offsetHeight/2},onToggle:function(q){D.setAttribute("aria-expanded",String(q))}});function L(){return A.isOpen()}function W(q){var j=lt[q],St=V.at[q];Array.prototype.forEach.call(j.el.children,function(rt,Nt){rt.setAttribute("aria-selected",String(Nt===St))}),j.el.setAttribute("aria-activedescendant",T+"-"+q+"-"+St)}function R(q){var j=lt[q],St=V.rows(q),rt=document.createDocumentFragment();j.count=St.length,j.el.textContent="",St.forEach(function(Nt,Tt){var l=document.createElement("div");l.className="flush-row compact quiet",l.setAttribute("role","option"),l.id=T+"-"+q+"-"+Tt,l.textContent=Nt,l.setAttribute("data-label",Nt),V.hasBlank&&Tt===0&&l.classList.add("blank"),rt.appendChild(l)}),j.el.appendChild(rt),j.isWired||(j.isWired=!0,j.el.addEventListener("click",function(Nt){var Tt=Nt.target.closest('[role="option"]');Tt&&Tt.parentElement===j.el&&nt(q,Array.prototype.indexOf.call(j.el.children,Tt),!0)})),V.at[q]>j.count-1&&(V.at[q]=j.count-1),W(q)}function ht(q){var j=lt[q].el.firstElementChild;return j&&j.offsetHeight||o}function Y(q){V.parts.forEach(function(j){lt[j].el.scrollTo({top:V.at[j]*ht(j),behavior:q&&!m?"smooth":"auto"})})}function nt(q,j,St){j=Math.max(0,Math.min(lt[q].count-1,j)),lt[q].el.scrollTo({top:j*ht(q),behavior:St&&!m?"smooth":"auto"}),Bt(q,j)}var At=V.isComplete();function Bt(q,j){if(!(V.at[q]===j&&At)){var St=V.set(q,j);At=!0,D.classList.contains("is-marked")&&V.isComplete()&&(D.classList.remove("is-marked"),k.hidden=!0,Q&&(Q.hidden=!1)),St==="all"?(V.parts.forEach(W),Y(!0)):(W(q),St.forEach(function(rt){R(rt),lt[rt].el.scrollTop=V.at[rt]*ht(rt)})),kt()}}function kt(){var q=V.words();Z.textContent=q.read,_.textContent=q.shown===null?ot:q.shown,D.classList.toggle("set",q.shown!==null),X&&(X.value=typeof q.sent=="string"?q.sent:""),typeof q.sent=="object"&&Object.keys(q.sent).forEach(function(j){var St=i.querySelector('input[type="hidden"][data-part="'+j+'"]');St&&(St.value=q.sent[j])})}V.parts.forEach(function(q){var j=lt[q],St=null,rt="",Nt=0;R(q),j.el.addEventListener("scroll",function(){clearTimeout(St),St=setTimeout(function(){L()&&Bt(q,Math.round(j.el.scrollTop/ht(q)))},110)},{passive:!0}),j.el.addEventListener("keydown",function(Tt){var l=V.at[q],E=Tt.key,O={ArrowDown:1,ArrowUp:-1,PageDown:5,PageUp:-5}[E];if(O){nt(q,l+O,!0),Tt.preventDefault();return}if(E==="Home"){nt(q,V.hasBlank?1:0,!0),Tt.preventDefault();return}if(E==="End"){nt(q,j.count-1,!0),Tt.preventDefault();return}if(E==="Enter"&&V.isComplete()){_t(!0),Tt.preventDefault();return}if(!(E.length!==1||Tt.metaKey||Tt.ctrlKey)){var G=Date.now();rt=G-Nt>900?E.toLowerCase():rt+E.toLowerCase(),Nt=G;for(var ft=V.rows(q),$=-1,gt=V.hasBlank?1:0;gt<ft.length&&$<0;gt++)ft[gt].toLowerCase().indexOf(rt)===0&&($=gt);$<0&&V.typed&&($=V.typed(q,rt,ft)),$>=0&&(nt(q,$,!0),Tt.preventDefault())}})});function vt(q){V.opening&&V.opening()&&(At=!0,V.parts.forEach(W),kt()),A.open(),Y(!1),!q&<[V.firstPart()].el.focus({preventScroll:!0})}function _t(q){A.close(q)}D.addEventListener("click",function(){L()?_t(!1):vt()}),g&&(V.opening&&!V.isComplete()?vt(!0):requestAnimationFrame(function(){Y(!1)})),kt();var J=i.closest("form");J&&i.hasAttribute("data-required")&&J.addEventListener("submit",function(q){V.isComplete()||(q.preventDefault(),D.classList.add("is-marked"),k.hidden=!1,Q&&(Q.hidden=!0),vt())})})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.charts||(H.charts=!0,(function(){window.zaismaWatch.each("[data-chart-scroll]",function(y){y.scrollLeft=y.scrollWidth});function m(y,a,r){a.forEach(function(v,i){v.classList.toggle("is-focused",i===r)});var d=y.querySelector("[data-chart-scroll]"),u=a[r];if(!(!d||!u)){var h=d.getBoundingClientRect(),s=u.getBoundingClientRect();s.left<h.left?d.scrollLeft-=h.left-s.left:s.right>h.right&&(d.scrollLeft+=s.right-h.right),y.matches(":focus-visible")&&requestAnimationFrame(function(){w(y,u)})}}function o(y){return Array.prototype.slice.call(y.querySelectorAll(".chart-hit"))}function w(y,a){var r=y.querySelector(":scope > .chart-tip");if(r){if(y.classList.toggle("shows-tip",!!a),!a){r.classList.remove("is-shown");return}r.querySelector("b").textContent=a.getAttribute("data-tip-amount"),r.querySelector("span").textContent=a.getAttribute("data-tip-label");var d=y.getBoundingClientRect(),u=a.getBoundingClientRect(),h=getComputedStyle(a),s=!!a.closest(".is-bars");r.style.setProperty("--tip-left",u.left-d.left+u.width*parseFloat(h.getPropertyValue("--point-left"))/100+"px"),r.style.setProperty("--tip-top",u.top-d.top+u.height*parseFloat(h.getPropertyValue("--point-top"))/100+"px"),r.classList.toggle("is-end",a.classList.contains("is-end")),r.classList.toggle("is-middle",s&&!a.classList.contains("is-end")&&!a.classList.contains("is-start")),r.classList.toggle("is-high",a.classList.contains("is-high")),r.classList.add("is-shown")}}document.addEventListener("pointerover",function(y){var a=y.target instanceof Element?y.target.closest(".chart-hit"):null;a&&w(a.closest(".chart"),a)}),document.addEventListener("pointerout",function(y){var a=y.target instanceof Element?y.target.closest(".chart-hit"):null;if(a&&!(y.relatedTarget instanceof Element&&y.relatedTarget.closest(".chart-hit"))){var r=a.closest(".chart"),d=r.querySelector(".chart-hit.is-pointed")||(r.matches(":focus-visible")?r.querySelector(".chart-hit.is-focused"):null);w(r,d)}}),document.querySelectorAll("[data-chart-scroll]").forEach(function(y){y.addEventListener("scroll",function(){var a=y.closest(".chart");w(a,a.querySelector(".chart-hit.is-pointed"))},{passive:!0})}),document.addEventListener("focusout",function(y){var a=y.target instanceof Element&&y.target.matches("[data-chart-points]")?y.target:null;a&&w(a,a.querySelector(".chart-hit.is-pointed"))}),document.querySelectorAll(".chart-hit.is-pointed").forEach(function(y){w(y.closest(".chart"),y)}),document.addEventListener("focusin",function(y){var a=y.target instanceof Element&&y.target.matches("[data-chart-points]")?y.target:null;if(a){var r=o(a);r.length&&!a.querySelector(".chart-hit.is-focused")&&m(a,r,r.length-1)}}),document.addEventListener("keydown",function(y){var a=y.target instanceof Element&&y.target.matches("[data-chart-points]")?y.target:null;if(a){var r=o(a),d=r.indexOf(a.querySelector(".chart-hit.is-focused")),u=d;if(y.key==="ArrowRight"||y.key==="ArrowUp")u=Math.min(r.length-1,d+1);else if(y.key==="ArrowLeft"||y.key==="ArrowDown")u=Math.max(0,d-1);else if(y.key==="Home")u=0;else if(y.key==="End")u=r.length-1;else return;y.preventDefault(),m(a,r,u)}})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["long-fields"]||(H["long-fields"]=!0,(function(){var m=12;function o(w){var y=getComputedStyle(w),a=parseFloat(y.lineHeight)||24,r=parseFloat(y.paddingTop)+parseFloat(y.paddingBottom);w.style.height="auto",w.classList.remove("is-scrolling");var d=a*(Number(w.getAttribute("rows"))||2)+r,u=a*m+r;w.classList.toggle("is-scrolling",w.scrollHeight>u+1),w.style.height=Math.max(d,Math.min(w.scrollHeight,u))+"px";var h=Number(w.getAttribute("maxlength")),s=document.getElementById(w.id+"-count");!h||!s||(s.hidden=w.value.length<h*.8,s.textContent=w.value.length.toLocaleString("en-US")+" of "+h.toLocaleString("en-US"))}window.zaismaWatch.each("textarea[data-long-field]",o),window.zaismaWatch.whenRead(function(){document.querySelectorAll("textarea[data-long-field]").forEach(o)}),document.addEventListener("input",function(w){w.target.matches&&w.target.matches("textarea[data-long-field]")&&o(w.target)}),window.zaismaWatch.fontsIn(function(){document.querySelectorAll("textarea[data-long-field]").forEach(o)})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H.sliders||(H.sliders=!0,(function(){function m(o){var w=o.closest(".slider"),y=Number(o.min),a=Number(o.max),r=w.querySelector("output"),d=r.getAttribute("data-unit");w.style.setProperty("--fill",((Number(o.value)-y)/Math.max(1e-9,a-y)).toFixed(4));var u=w.querySelector(".slider-slab");u&&u.redrawCut&&u.redrawCut(),r.textContent=Number(o.value).toLocaleString("en-US")+(d==="%"?"%":" "+d)}document.addEventListener("input",function(o){o.target.matches&&o.target.matches("input[data-slider]")&&m(o.target)}),window.addEventListener("pageshow",function(){document.querySelectorAll("input[data-slider]").forEach(m)})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["color-fields"]||(H["color-fields"]=!0,(function(){function m(d){return"#"+d.map(function(u){return u.toString(16).padStart(2,"0")}).join("").toUpperCase()}function o(d,u,h){function s(v){var i=(v+d/60)%6;return Math.round((h-h*u*Math.max(0,Math.min(i,4-i,1)))*255)}return[s(5),s(3),s(1)]}function w(d){var u=parseInt(d.slice(1),16),h=(u>>16)/255,s=(u>>8&255)/255,v=(u&255)/255,i=Math.max(h,s,v),C=i-Math.min(h,s,v),T=0;return C&&(T=i===h?(s-v)/C%6:i===s?(v-h)/C+2:(h-s)/C+4,T*=60,T<0&&(T+=360)),[T,i?C/i:0,i]}function y(d){var u=String(d||"").replace(/[^0-9a-f]/gi,"");return u.length===3&&(u=u.replace(/./g,"$&$&")),u.length===6?"#"+u.toUpperCase():null}function a(d){var u=/^\\s*(#[0-9a-f]{6})\\s*$/i.exec(d||"");return u?u[1].toUpperCase():null}var r=10;window.zaismaWatch.each("[data-color-field]",function(d){var u=d.querySelector(".color-button"),h=d.querySelector(".color-pick"),s=d.querySelector(".color-square"),v=d.querySelector(".color-knob"),i=d.querySelector(".color-side .cut-field input"),C=d.querySelector(".color-side .slider-input"),T=d.querySelector(':scope > input[type="hidden"]'),D=u.querySelector(".color-value"),b=u.querySelector(".color-chip"),_=d.querySelector(".color-none button"),g=w(a(T.value)||d.getAttribute("data-color-hex")),k=!!_&&!a(T.value),Q=!1,Z=window.zaismaFloat(h,{anchor:u,home:d,isAnchorWidth:h.classList.contains("in-place"),onToggle:function(A){u.setAttribute("aria-expanded",String(A)),A&&X()}});function X(A){var L=m(o(g[0],g[1],g[2])),W=k?"var(--clear-swatch)":L;[d,h].forEach(function(At){At.style.setProperty("--color-picked",W),At.style.setProperty("--color-full",m(o(g[0],g[1],1))),At.style.setProperty("--color-brightness",String(g[2]))});var R=s.clientWidth-2*r,ht=s.clientHeight-2*r,Y=lt(r+g[0]/360*R,r+(1-g[1])*ht);v.style.left=Y[0]+"px",v.style.top=Y[1]+"px",s.setAttribute("aria-valuetext",L),b.style.setProperty("--swatch",W),D.textContent=k?"None":L,T.value=k?"":L,A||(i.value=L);var nt=Math.round(g[2]*100);Number(C.value)!==nt&&(C.value=String(nt),Q=!0,C.dispatchEvent(new Event("input",{bubbles:!0})),Q=!1)}function V(){d.dispatchEvent(new CustomEvent("zaisma:color",{bubbles:!0,detail:{colorValue:T.value}}))}function ot(A){return Math.max(0,Math.min(1,A))}function lt(A,L){var W=s.cutCorners||[0,0,0,0],R=(v.firstElementChild.cutCorners||[5])[0],ht=[s.clientWidth,s.clientHeight];return[[1,1],[-1,1],[-1,-1],[1,-1]].forEach(function(Y,nt){var At=Y[0]>0?A-r:ht[0]-A-r,Bt=Y[1]>0?L-r:ht[1]-L-r,kt=W[nt]-R-(At+Bt);W[nt]>R&&kt>0&&(A+=Y[0]*kt/2,L+=Y[1]*kt/2)}),[A,L]}function M(A){var L=s.getBoundingClientRect();g[0]=ot((A.clientX-L.left-r)/(L.width-2*r))*359.99,g[1]=1-ot((A.clientY-L.top-r)/(L.height-2*r)),k=!1,X(),V()}s.addEventListener("pointerdown",function(A){s.setPointerCapture(A.pointerId),s.classList.add("is-held"),M(A),s.focus({preventScroll:!0}),A.preventDefault()}),s.addEventListener("pointermove",function(A){s.hasPointerCapture(A.pointerId)&&M(A)}),s.addEventListener("pointerup",function(){s.classList.remove("is-held")}),s.addEventListener("pointercancel",function(){s.classList.remove("is-held")}),s.addEventListener("keydown",function(A){var L=A.shiftKey?30:5,W=A.shiftKey?.2:.05;if(A.key==="ArrowLeft")g[0]=Math.max(0,g[0]-L);else if(A.key==="ArrowRight")g[0]=Math.min(359.99,g[0]+L);else if(A.key==="ArrowUp")g[1]=Math.min(1,g[1]+W);else if(A.key==="ArrowDown")g[1]=Math.max(0,g[1]-W);else return;A.preventDefault(),k=!1,X(),V()}),C.addEventListener("input",function(){Q||(g[2]=Number(C.value)/100,k=!1,X(),V())}),i.addEventListener("input",function(){var A=y(i.value);A&&(g=w(A),k=!1,X(!0),V())}),i.addEventListener("blur",function(){X()}),_&&_.addEventListener("click",function(){k=!0,X(),V()}),u.addEventListener("click",function(){Z.isOpen()?Z.close(!1):Z.open()}),h.classList.contains("in-place")&&Z.open(),X()})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["world-pane"]||(H["world-pane"]=!0,(function(){var m=0;function o(w){var y=document.querySelector("[data-world-pane]"),a=document.querySelector(".world-stage");if(!(!y||!a||a.classList.contains("is-framed")||window.innerWidth===m&&!w)){if(m=window.innerWidth,window.innerWidth>760||window.matchMedia("(orientation: landscape) and (max-height: 500px) and (max-width: 64em)").matches){y.style.marginTop="";return}var r=Array.prototype.find.call(y.querySelectorAll("h1, h2"),function(s){return s.getClientRects().length>0}),d=y.parentElement.querySelector("header.top");y.style.marginTop="0px";var u=(r?r.getBoundingClientRect().bottom:y.getBoundingClientRect().top+120)-y.getBoundingClientRect().top+24,h=d?d.offsetTop+d.offsetHeight+12:12;y.style.marginTop=Math.round(Math.max(h,window.innerHeight-u))+"px"}}window.zaismaPlaceWorldPane=o,window.zaismaWatch.each("[data-world-pane]",function(w){o(!0),window.zaismaWatch.size(w,function(){o(!0)})}),window.zaismaWatch.whenRead(function(){o(!0)}),window.addEventListener("resize",function(){o()}),window.zaismaWatch.fontsIn(function(){o(!0)})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["account-link"]||(H["account-link"]=!0,(function(){/(^|; )(__Host-)?zaisma_in=1/.test(document.cookie)&&window.zaismaWatch.each("header.top[data-account-from-cookie] .end > a:is(.run-wrap,.cut-btn)",function(m){m.href="/account";var o=m.querySelector(".face > span:not([class])");o&&(o.textContent="Account")})})())})(),(function(){var H=window.zaismaPieces=window.zaismaPieces||{};H["hidden-amounts"]||(H["hidden-amounts"]=!0,(function(){var m="zaisma.payments_amounts_hidden",o=!1;try{o=localStorage.getItem(m)==="yes"}catch{}var w="#payments .number-amount, [data-amount]",y="[data-amounts-toggle]";function a(u){u.hasAttribute("data-amount")||u.setAttribute("data-amount",u.textContent),u.textContent=o?"\\u2022\\u2022\\u2022":u.getAttribute("data-amount")}function r(u){u.setAttribute("aria-pressed",String(o));var h=u.querySelector("span:not([class])");h&&(h.textContent=o?"Show amounts":"Hide amounts")}function d(){document.querySelectorAll(w).forEach(a),document.querySelectorAll(y).forEach(r)}window.zaismaWatch.each(w,a),window.zaismaWatch.each(y,r),document.addEventListener("click",function(u){var h=u.target.closest&&u.target.closest("[data-amounts-toggle]");if(h){o=!o;try{localStorage.setItem(m,o?"yes":"no")}catch{}d()}})})())})();
|
|
11380
11445
|
` };
|
|
11381
11446
|
var MINIFIED_LOOK_SCRIPT = { sourceSha256: "a243cbb3740f22f37ac82b2e1bdcc3f25e59ff1536f9cc6ddf550e5dd63ac5c4", minifiedText: `(function(){var C=window.zaismaPieces=window.zaismaPieces||{};C["measured-glass"]||(C["measured-glass"]=!0,(function(){if(!window.zaismaWatch)return;function s(t){return t.closest(":has(> .backdrop)")}function m(t){var i=t&&t.querySelector(":scope > .backdrop[data-adapts-glass][data-glass-kind], :scope > .backdrop .backdrop[data-adapts-glass][data-glass-kind]");return i?{isSmoked:i.getAttribute("data-glass-kind")==="smoked",tint:i.getAttribute("data-glass-tint")||""}:null}function w(t,i){t.classList.toggle("smoke",i.isSmoked),i.isSmoked?t.removeAttribute("data-theme-choice"):t.hasAttribute("data-theme-choice")||t.setAttribute("data-theme-choice","light"),i.tint&&t.style.setProperty("--glass-tint",i.tint)}function d(t,i){t.ownThemeChoice===void 0&&(t.ownThemeChoice=t.getAttribute("data-theme-choice")),t.classList.toggle("smoke",i.isSmoked),i.isSmoked?t.removeAttribute("data-theme-choice"):t.setAttribute("data-theme-choice",t.ownThemeChoice||"light")}window.zaismaWatch.eachArriving("[data-adapts-glass][data-glass-kind]",function(t){var i=t.parentElement,c=m(i);i&&c&&d(i,c),document.querySelectorAll("[data-glass]:not([data-cut-line])").forEach(function(a){var p=s(a),o=m(p);o&&w(a,o)})}),window.zaismaWatch.eachArriving("[data-glass]:not([data-cut-line])",function(t){var i=s(t),c=m(i);c&&w(t,c)})})())})(),(function(){var C=window.zaismaPieces=window.zaismaPieces||{};C["header-fit"]||(C["header-fit"]=!0,(function(){var s=window.matchMedia("(orientation: landscape) and (max-height: 500px) and (max-width: 64em)"),m=4;function w(a,p){a.classList.toggle("has-search-button",p>0),a.classList.toggle("has-tight-tabs",p>1),a.classList.toggle("has-icon-tabs",p>2),a.classList.toggle("has-icon-sign-in",p>3)}function d(a){var p=0;return Array.prototype.forEach.call(a.querySelectorAll(":scope > a, :scope > button"),function(o){p=Math.max(p,o.offsetLeft+o.offsetWidth)}),p+parseFloat(getComputedStyle(a).paddingRight)}function t(a,p){w(a,p);var o=getComputedStyle(a),A=parseFloat(o.paddingLeft)+parseFloat(o.paddingRight);return Array.prototype.forEach.call(a.children,function(v){var P=getComputedStyle(v);if(!(v.classList.contains("edge")||P.display==="none")){var k=v.querySelector(":scope > .switch-well .tab-switch");A+=parseFloat(P.marginLeft)+parseFloat(P.marginRight)+(v.matches(".find")?parseFloat(P.minWidth):Math.max(v.offsetWidth,k?d(k):0))}}),A}function i(a){if(!(!a.clientWidth||a.checkVisibility&&!a.checkVisibility({contentVisibilityAuto:!0}))){if(s.matches&&a.matches("body > .top")){w(a,1);return}for(var p=a.clientWidth,o=a.neededWidths||(a.neededWidths=[]),A=a.querySelector(".find"),v=!!A&&A.contains(document.activeElement),P=a.classList.contains("searching"),k=!1,x=0;x<m;x++){if(o[x]===void 0){if(v)return;k||(k=!0,a.classList.remove("searching"),a.classList.add("is-measuring"),a.style.width="max-content"),o[x]=t(a,x)}if(o[x]<=p)break}k&&(a.style.width="",a.classList.remove("is-measuring"),P&&a.classList.add("searching")),v&&x>0&&!a.classList.contains("typing-search")&&a.classList.add("searching"),w(a,x)}}function c(a){if(a.fitToRoom)return;function p(){a.neededWidths=null,i(a)}a.fitToRoom=function(){i(a)},i(a),window.zaismaWatch.size(a,a.fitToRoom);var o=a.querySelector(".tab-switch");o&&window.zaismaWatch.size(o,p),window.zaismaWatch.fontsIn(p),s.addEventListener("change",p)}window.zaismaWatch.each("header.top",c),window.zaismaWatch.arriving(function(){var a=document.querySelector("body > header.top");a&&a.nextSibling&&c(a)})})())})(),(function(){var C=window.zaismaPieces=window.zaismaPieces||{};C.tables||(C.tables=!0,(function(){function s(w){var d=w.querySelector(":scope > table > thead"),t=w.querySelector(":scope > table > tbody > tr > th, :scope > table > thead > tr > th:first-child");w.style.setProperty("--shown-width",w.clientWidth+"px"),w.style.setProperty("--shown-height",w.clientHeight+"px"),d&&w.style.setProperty("--head-height",d.offsetHeight+"px"),t&&w.style.setProperty("--row-head-width",t.offsetWidth+"px")}var m=typeof ResizeObserver=="function"?new ResizeObserver(function(w){w.forEach(function(d){var t=d.target.closest(".table-scroll");t&&s(t)})}):null;window.zaismaWatch.each(".table-scroll",function(w){if(s(w),m){m.observe(w);var d=w.querySelector(":scope > table");d&&m.observe(d)}})})())})(),(function(){var C=window.zaismaPieces=window.zaismaPieces||{};C.backdrop||(C.backdrop=!0,(function(){var s=\`float h1(float n){return fract(sin(n*127.1)*43758.5453);}
|
|
11382
11447
|
float h2(vec2 p){return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453);}
|
|
@@ -23312,7 +23377,7 @@ var HEADER_SCRIPT = pageScript(
|
|
|
23312
23377
|
`
|
|
23313
23378
|
);
|
|
23314
23379
|
var FOOTER_LINKS = [["For game developers", "/dashboard"], ["Forum", "/forum"], ["Source code", "https://github.com/zaisma/zaisma"]];
|
|
23315
|
-
var FOOTER_RULES_LINKS = [["Content rules", "/legal/content-rules"], ["Terms", "/legal/terms"], ["Privacy", "/legal/privacy"], ["Security", "/legal/security"], ["DMCA", "/legal/dmca"], ["Defamation", "/legal/defamation"]];
|
|
23380
|
+
var FOOTER_RULES_LINKS = [["Content rules", "/legal/content-rules"], ["Terms", "/legal/terms"], ["Privacy", "/legal/privacy"], ["Security", "/legal/security"], ["DMCA", "/legal/dmca"], ["Defamation", "/legal/defamation"], ["Trademark", "/legal/trademark"]];
|
|
23316
23381
|
function footer() {
|
|
23317
23382
|
return html`<footer class="foot glass glass-bar" data-glass data-glass-corners="header">${EDGE}<div class="foot-in words-margin round">
|
|
23318
23383
|
${logo("mark")}
|
|
@@ -27313,6 +27378,49 @@ var CHECKED_PAGE_LIST = [
|
|
|
27313
27378
|
];
|
|
27314
27379
|
var CHECKED_PAGES = CHECKED_PAGE_LIST;
|
|
27315
27380
|
|
|
27381
|
+
// ../../apps/site/src/steel-pages.ts
|
|
27382
|
+
var STEEL_PAGE_LIST = [
|
|
27383
|
+
{ name: "A message, in the old look", path: "/no-such-page" },
|
|
27384
|
+
{ name: "Check your email, in the old look", path: "/account", account: "Moss_Runner" },
|
|
27385
|
+
{ name: "Your account", path: "/account", account: "Moss_Runner" },
|
|
27386
|
+
{ name: "A player's profile", path: "/@Moss_Runner" },
|
|
27387
|
+
{ name: "Report a player", path: "/@Moss_Runner/report", account: "Preview_Studio" },
|
|
27388
|
+
{ name: "Friends", path: "/friends", account: "Preview_Studio" },
|
|
27389
|
+
{ name: "A friend invite", path: "/friends/add/no-such-invite" },
|
|
27390
|
+
{ name: "Your games", path: "/dashboard", account: "Preview_Studio" },
|
|
27391
|
+
{ name: "Your games, banned", path: "/dashboard", account: "Banned_Dev" },
|
|
27392
|
+
{ name: "A game not found", path: "/dashboard/no-such-game", account: "Preview_Studio" },
|
|
27393
|
+
{ name: "A game's overview", path: "/dashboard/tiny-farm", account: "Preview_Studio" },
|
|
27394
|
+
{ name: "A game's versions", path: "/dashboard/tiny-farm/versions", account: "Preview_Studio" },
|
|
27395
|
+
{ name: "A game's details", path: "/dashboard/tiny-farm/details", account: "Preview_Studio" },
|
|
27396
|
+
{ name: "A game's players", path: "/dashboard/tiny-farm/players", account: "Preview_Studio" },
|
|
27397
|
+
{ name: "A game's database", path: "/dashboard/tiny-farm/database", account: "Preview_Studio" },
|
|
27398
|
+
{ name: "Cover guide", path: "/developers/covers" },
|
|
27399
|
+
{ name: "DMCA notices", path: "/legal/dmca" },
|
|
27400
|
+
{ name: "Defamation notices", path: "/legal/defamation" },
|
|
27401
|
+
{ name: "Trademark notices", path: "/legal/trademark" },
|
|
27402
|
+
{ name: "Forum", path: "/forum" },
|
|
27403
|
+
{ name: "A forum topic", path: "/forum" },
|
|
27404
|
+
{ name: "Forum, not found", path: "/forum/topic_nosuchtopic" },
|
|
27405
|
+
{ name: "Forum, not a link", path: "/forum/out?to=nope" },
|
|
27406
|
+
{ name: "Forum, leaving Zaisma", path: "/forum/out?to=https://example.test/" },
|
|
27407
|
+
{ name: "Forum, report a post", path: "/forum" },
|
|
27408
|
+
{ name: "Forum, new topic", path: "/forum/new", account: "Preview_Studio" },
|
|
27409
|
+
{ name: "Forum, message Zaisma", path: "/forum/messages/new", account: "Preview_Studio" },
|
|
27410
|
+
{ name: "Admin", path: "/admin" },
|
|
27411
|
+
{ name: "Admin, a game", path: "/admin/games/game_previewsharddash001" },
|
|
27412
|
+
{ name: "Admin, audit log", path: "/admin/audit" },
|
|
27413
|
+
{ name: "Admin, profiles", path: "/admin/profiles" },
|
|
27414
|
+
{ name: "Admin, chat reviews", path: "/admin/chat-reviews" },
|
|
27415
|
+
{ name: "Admin, publishing", path: "/admin/publishing" },
|
|
27416
|
+
{ name: "Admin, reports", path: "/admin/reports" },
|
|
27417
|
+
{ name: "Admin, precedents", path: "/admin/precedents" },
|
|
27418
|
+
{ name: "Admin, review precedents", path: "/admin/review-precedents" },
|
|
27419
|
+
{ name: "Admin, feedback", path: "/admin/feedback" },
|
|
27420
|
+
{ name: "Admin, a feedback note", path: "/admin/feedback" }
|
|
27421
|
+
];
|
|
27422
|
+
var STEEL_PAGES = STEEL_PAGE_LIST;
|
|
27423
|
+
|
|
27316
27424
|
// ../../apps/site/src/auth.ts
|
|
27317
27425
|
function authConfigured(env2) {
|
|
27318
27426
|
return Boolean(env2.SUPABASE_URL && env2.SUPABASE_SECRET_KEY);
|
|
@@ -27339,7 +27447,7 @@ async function authUserEmail(env2, userId) {
|
|
|
27339
27447
|
var SPEED_REPORT_PATH = "/api/speed-reports";
|
|
27340
27448
|
var FIRST_PAINT_DELAY_LIMIT_MS = 12e4;
|
|
27341
27449
|
var OTHER_PAGE_NAME = "other";
|
|
27342
|
-
var PAGE_NAMES = /* @__PURE__ */ new Set([...CHECKED_PAGES.map((page2) => page2.name), OTHER_PAGE_NAME]);
|
|
27450
|
+
var PAGE_NAMES = /* @__PURE__ */ new Set([...CHECKED_PAGES.map((page2) => page2.name), ...STEEL_PAGES.map((page2) => page2.name), OTHER_PAGE_NAME]);
|
|
27343
27451
|
var SPEED_SCRIPT = pageScript("speed-reports", `(function () {
|
|
27344
27452
|
if (!window.PerformanceObserver || !navigator.sendBeacon) return;
|
|
27345
27453
|
var paintMs = null, isSent = false;
|
|
@@ -27778,7 +27886,8 @@ const download=a=>{forget();busy(a);const from=Date.now(),i=setInterval(()=>{if(
|
|
|
27778
27886
|
addEventListener("submit",e=>{if(!e.defaultPrevented&&e.target.method!=="dialog")busy(e.submitter||e.target.querySelector("button[type=submit],button:not([type])"))});
|
|
27779
27887
|
addEventListener("click",e=>{const a=e.target.closest&&e.target.closest("a.btn,a.metal");if(!a||e.defaultPrevented||e.button||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||a.target==="_blank")return;const u=new URL(a.href,location.href);if(u.origin!==location.origin||(u.pathname===location.pathname&&u.search===location.search))return;if(a.hasAttribute("data-download"))download(a);else busy(a)});
|
|
27780
27888
|
addEventListener("pageshow",e=>{if(e.persisted)document.querySelectorAll("[aria-busy=true]").forEach(idle)})})();`;
|
|
27781
|
-
var
|
|
27889
|
+
var FILE_SIZE_SCRIPT = `addEventListener("change",e=>{const i=e.target;if(!i.matches||!i.matches("input[type=file][data-maximum-size-bytes]"))return;const most=+i.dataset.maximumSizeBytes,isTooBig=[...i.files].some(f=>f.size>most);i.setCustomValidity(isTooBig?"That file is over "+Math.round(most/1048576)+" MB. Save it smaller and choose it again.":"");if(isTooBig)i.reportValidity()});`;
|
|
27890
|
+
var SITE_SCRIPT = pageScript("site", METAL_SCRIPT + BUSY_SCRIPT2 + PREPARE_SCRIPT + FILE_SIZE_SCRIPT);
|
|
27782
27891
|
var CHECK_ORIGIN = "https://challenges.cloudflare.com";
|
|
27783
27892
|
var isLocalSite = (env2) => env2.SITE_ORIGIN.startsWith("http://localhost") || /^https:\/\/[^/]+\.ts\.net:\d+$/.test(env2.SITE_ORIGIN);
|
|
27784
27893
|
var STRIPE_SCRIPT_ORIGIN = "https://js.stripe.com";
|
|
@@ -27844,7 +27953,7 @@ function rootStyle(options) {
|
|
|
27844
27953
|
return parts2.length ? html` style="${parts2.join("; ")}"` : raw("");
|
|
27845
27954
|
}
|
|
27846
27955
|
function layout(env2, options) {
|
|
27847
|
-
const isRebuilt = options.
|
|
27956
|
+
const isRebuilt = options.pageShape !== void 0;
|
|
27848
27957
|
const sheet3 = isRebuilt && !hasSteel(options.body.html) && !hasSteel(options.stage?.html ?? "") ? SITE_STYLE : STEEL_SITE_STYLE;
|
|
27849
27958
|
const colorTheme = options.viewer?.account?.color_theme ?? "system";
|
|
27850
27959
|
const themeColors = options.stageColor && /^#[0-9a-fA-F]{6}$/.test(options.stageColor) ? html`<meta name="theme-color" content="${options.stageColor}">` : colorTheme === "system" ? html`<meta name="theme-color" content="#E7E4DF" media="(prefers-color-scheme: light)">
|
|
@@ -27864,7 +27973,7 @@ ${env2.SUPABASE_URL && !options.isAdmin ? scriptTags(SITE_SCRIPT, PRESENCE_SCRIP
|
|
|
27864
27973
|
${options.isFillingScreen ? html`<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">
|
|
27865
27974
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">` : html`<meta name="viewport" content="width=device-width,initial-scale=1">`}
|
|
27866
27975
|
<title>${options.title}</title>
|
|
27867
|
-
${
|
|
27976
|
+
${checkedPageTag(options.checkedPage)}
|
|
27868
27977
|
<link rel="icon" href="/favicon.ico" sizes="32x32">
|
|
27869
27978
|
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
|
|
27870
27979
|
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
|
|
@@ -29462,7 +29571,7 @@ var GAME = object({
|
|
|
29462
29571
|
own_server_urls: list(text2(), "The game's own servers players' browsers connect to, like wss://play.example.com, named in the game's menu; [] for none."),
|
|
29463
29572
|
links: list(LINK, "Its registered links, which the game opens with Zaisma.links.open; [] for none."),
|
|
29464
29573
|
details_waiting_for_review: nullable(object({ title: nullable(text2()), description: nullable(text2()) }, "A new title or description waiting for the listing check (about a minute) or a person before players see it.")),
|
|
29465
|
-
title_listing_reason: nullable(reviewReason2("Why the title keeps the game off Zaisma's lists (a
|
|
29574
|
+
title_listing_reason: nullable(reviewReason2("Why the title keeps the game off Zaisma's lists (a tag, or a list of what the game is) or held it (a fake reward); null when nothing does. The game still plays by its link.")),
|
|
29466
29575
|
glass_tint_color: nullable(describe({ type: "string", pattern: "^#[0-9a-f]{6}$" }, "The color Zaisma tints its glass with over the game's background, like #6b3fa0; Zaisma still decides how thick the glass is. null: no tint.")),
|
|
29467
29576
|
monthly_budget_cents: nullable(countOf("What the game may draw from your credit each month past its free hosting, in cents (5000 is $50); null: no paid hosting, so it pauses at its free allowance.")),
|
|
29468
29577
|
purchase_label: PURCHASE_LABEL,
|
|
@@ -29621,7 +29730,7 @@ var IMAGE = object({
|
|
|
29621
29730
|
}),
|
|
29622
29731
|
review_status: choice({ pending: "only you see it until the listing check (about a minute) or a person approves it", approved: "shown to players", rejected: "not shown" }),
|
|
29623
29732
|
review_reason: nullable(reviewReason2("Why it wasn't approved; null otherwise.")),
|
|
29624
|
-
listing_reason: nullable(reviewReason2("Why this cover keeps the game off Zaisma's lists, though it shows on the game page (text, an overlay, a
|
|
29733
|
+
listing_reason: nullable(reviewReason2("Why this cover keeps the game off Zaisma's lists, though it shows on the game page (text, an overlay, a subject not in the game), or held the game (a fake reward); null when nothing does.")),
|
|
29625
29734
|
width_px: countOf(),
|
|
29626
29735
|
height_px: countOf(),
|
|
29627
29736
|
size_bytes: countOf(),
|
|
@@ -30418,6 +30527,19 @@ var KEPT_ROOMS = object({
|
|
|
30418
30527
|
),
|
|
30419
30528
|
kept_rooms_size_bytes: countOf("The saved worlds of all the kept rooms not waiting to be erased, together."),
|
|
30420
30529
|
waiting_kept_rooms_size_bytes: countOf("The saved worlds waiting to be erased, together: on the game's hosting meter, but outside its storage and its limit."),
|
|
30530
|
+
deleted_kept_rooms: list(
|
|
30531
|
+
object({
|
|
30532
|
+
room_code: text2("The world's code."),
|
|
30533
|
+
name: nullable(text2("The room's name, as its game server set it.")),
|
|
30534
|
+
saved_size_bytes: countOf("How much it took when it was erased."),
|
|
30535
|
+
deleted_at: isoTime("When it was deleted."),
|
|
30536
|
+
bring_back_ends_at: isoTime("Until when bring_back_kept_room can bring it back from its last copy."),
|
|
30537
|
+
bring_back_started_at: nullable(isoTime("When it started coming back; null if it hasn't.")),
|
|
30538
|
+
bring_back_failed_at: nullable(isoTime("When coming back failed, so ask again; null if it hasn't."))
|
|
30539
|
+
}),
|
|
30540
|
+
"Worlds erased after they were deleted, newest first, up to 200, which their last copy can still bring back. A game server's own room.end is final, and isn't here."
|
|
30541
|
+
),
|
|
30542
|
+
deleted_kept_room_count: countOf("How many of those there are in all."),
|
|
30421
30543
|
storage_size_bytes: countOf("The game's storage: its database and its kept rooms."),
|
|
30422
30544
|
maximum_storage_size_bytes: countOf("The most a game can keep: 10 GB. At it the database can't grow and no more rooms can be kept, though kept rooms keep saving. Below it, storage counts on the game's hosting meter.")
|
|
30423
30545
|
});
|
|
@@ -30427,11 +30549,57 @@ var KEPT_ROOM_DELETED = object({
|
|
|
30427
30549
|
next_steps: NEXT
|
|
30428
30550
|
});
|
|
30429
30551
|
var KEPT_ROOM_BROUGHT_BACK = object({
|
|
30430
|
-
is_brought_back: yes("
|
|
30552
|
+
is_brought_back: yes("true: the world is as it was, with the same code, and players can join it again. false while it comes back from its last copy (is_bringing_back)."),
|
|
30553
|
+
is_bringing_back: yes("true: an erased world is coming back from its last copy, which takes a minute or more; list_kept_rooms has it when it's back."),
|
|
30554
|
+
copy_saved_at: nullable(isoTime("When the copy it's coming back from was made: anything played after that is lost. Null for a world that was still waiting, which lost nothing.")),
|
|
30555
|
+
next_steps: NEXT
|
|
30556
|
+
});
|
|
30557
|
+
var KEPT_ROOM_RESTORE = object({
|
|
30558
|
+
id: idOf("kept_room_restore"),
|
|
30559
|
+
room_code: text2("The world's code."),
|
|
30560
|
+
restore_to_at: isoTime("The moment the world went back to; for an undo, just before the restore it undid."),
|
|
30561
|
+
restored_at: isoTime("When it went back."),
|
|
30562
|
+
undoes_kept_room_restore_id: nullable(idOf("kept_room_restore", "The restore this one undid; null for a restore to a time.")),
|
|
30563
|
+
kept_room_restore_batch_id: nullable(idOf("kept_room_restore_batch", "The restore of every world it was part of; null for one world alone.")),
|
|
30564
|
+
undo_expires_at: isoTime("Until when undo_kept_room_restore can undo it.")
|
|
30565
|
+
});
|
|
30566
|
+
var LIVE_VERSION_PUBLISHED_SINCE = nullable(
|
|
30567
|
+
object({
|
|
30568
|
+
version_id: idOf("version"),
|
|
30569
|
+
published_at: isoTime("When the live version went live: after the moment gone back to."),
|
|
30570
|
+
message: text2("Why this matters: if this version did the damage, it can do it again.")
|
|
30571
|
+
})
|
|
30572
|
+
);
|
|
30573
|
+
var KEPT_ROOM_RESTORED = object({
|
|
30574
|
+
kept_room_restore: KEPT_ROOM_RESTORE,
|
|
30575
|
+
live_version_published_since: LIVE_VERSION_PUBLISHED_SINCE,
|
|
30576
|
+
next_steps: NEXT
|
|
30577
|
+
});
|
|
30578
|
+
var KEPT_ROOM_RESTORES = object({
|
|
30579
|
+
earliest_restore_to_at: isoTime("The earliest moment this world can go back to: when it was kept, or 30 days ago."),
|
|
30580
|
+
restores: list(KEPT_ROOM_RESTORE, "Its restores that can still be undone, newest first, up to 50.")
|
|
30581
|
+
});
|
|
30582
|
+
var KEPT_ROOM_RESTORE_BATCH = object({
|
|
30583
|
+
id: idOf("kept_room_restore_batch"),
|
|
30584
|
+
restore_to_at: isoTime("The moment every world goes back to; for an undo, just before the batch it undid."),
|
|
30585
|
+
started_at: isoTime("When it started."),
|
|
30586
|
+
finished_at: nullable(isoTime("When the last world finished; null while it's running.")),
|
|
30587
|
+
undoes_kept_room_restore_batch_id: nullable(idOf("kept_room_restore_batch", "The batch this one undid; null for a batch to a time.")),
|
|
30588
|
+
undo_expires_at: isoTime("Until when undo_every_kept_room_restore can undo it."),
|
|
30589
|
+
kept_room_count: countOf("The worlds it covers."),
|
|
30590
|
+
restored_room_count: countOf("Worlds that went back so far."),
|
|
30591
|
+
skipped_room_count: countOf("Worlds left as they are: waiting to be erased, or kept after the moment, so they have nothing to go back to. Counted when it finishes."),
|
|
30592
|
+
failed_room_count: countOf("Worlds that didn't answer, left as they were: restore_kept_room each one."),
|
|
30593
|
+
failed_room_codes: list(text2("A world that didn't answer."), "The first 100 of them.")
|
|
30594
|
+
});
|
|
30595
|
+
var KEPT_ROOM_RESTORE_BATCH_STARTED = object({
|
|
30596
|
+
kept_room_restore_batch: KEPT_ROOM_RESTORE_BATCH,
|
|
30597
|
+
live_version_published_since: LIVE_VERSION_PUBLISHED_SINCE,
|
|
30431
30598
|
next_steps: NEXT
|
|
30432
30599
|
});
|
|
30600
|
+
var KEPT_ROOM_RESTORE_BATCH_READ = object({ kept_room_restore_batch: KEPT_ROOM_RESTORE_BATCH });
|
|
30433
30601
|
var KEPT_ROOM_ERASED = object({
|
|
30434
|
-
is_erased: yes("Always true: the world is gone for good."),
|
|
30602
|
+
is_erased: yes("Always true: the world is gone from Zaisma's rooms. Its last copy can bring it back for about 28 days after it was deleted, and then it's gone for good."),
|
|
30435
30603
|
next_steps: NEXT
|
|
30436
30604
|
});
|
|
30437
30605
|
var ROOM_LABELS = describe(list(object({ label_name: text2("The label's name, as the game server set it, like Map."), label_value: text2("Its text, like Docks.") })), 'Up to 4 labels, like [{"label_name": "Map", "label_value": "Docks"}].');
|
|
@@ -50555,6 +50723,7 @@ ${ALLOWED_CONTENT.map((words3) => ` - ${words3}`).join("\n")}
|
|
|
50555
50723
|
- gore of any kind in a game for 16 or 18 and up, and cartoon, pixel or stylized blood in any game
|
|
50556
50724
|
- a game using someone else's characters, art, music or code: only the owner's notice takes it down (the DMCA page)
|
|
50557
50725
|
- a game that says a real person committed a crime, true or not: only that person's notice hides it (the defamation page)
|
|
50726
|
+
- a game using someone else's name, logo or brand: only the owner's notice takes it down (the trademark page)
|
|
50558
50727
|
- "pass_to_developer": only for a report about a player (below).
|
|
50559
50728
|
- "person": everything else.
|
|
50560
50729
|
|
|
@@ -50830,10 +50999,6 @@ var PICTURE_FIELDS = {
|
|
|
50830
50999
|
type: "string",
|
|
50831
51000
|
description: `Any picture: words or images promising the player something of real value or another platform's currency: Robux, V-Bucks, gift cards, cash, a free phone. Quote the words exactly, or name the image. The game's own coins, gems or points, shown as gameplay, are not a reward promise. "" when there's none.`
|
|
50832
51001
|
},
|
|
50833
|
-
famous_name: {
|
|
50834
|
-
type: "string",
|
|
50835
|
-
description: `Covers and backgrounds ("" for screenshots): a famous character, logo or name from a film, show, game, brand or sports club that a typical teenager would name at a glance, like Mario, Naruto, Goku, Lightning McQueen, the Batmobile, Pikachu, a football club's crest, the Roblox logo or Robux. Name it. Generic blocky, pixel or cartoon figures, and lookalikes nobody would name for sure, are not famous: when unsure, "". "" when there's none.`
|
|
50836
|
-
},
|
|
50837
51002
|
main_subject: {
|
|
50838
51003
|
type: "string",
|
|
50839
51004
|
description: `Covers only ("" for screenshots): the character, creature or vehicle the picture is built around, in a few words; "" when it's built around scenery, a crowd or the title alone.`
|
|
@@ -50848,7 +51013,7 @@ var PICTURE_FIELDS = {
|
|
|
50848
51013
|
},
|
|
50849
51014
|
background_text: {
|
|
50850
51015
|
type: "string",
|
|
50851
|
-
description: `Backgrounds only ("" for covers and screenshots): every word, number, symbol or logo written on the picture, the game's own name and logo included, quoted exactly or named, separated by " / ". Overlays go in overlay
|
|
51016
|
+
description: `Backgrounds only ("" for covers and screenshots): every word, number, symbol or logo written on the picture, the game's own name and logo included, quoted exactly or named, separated by " / ". Overlays go in overlay. Words that are part of the scene (a sign on a building, a neon shop sign, writing on a shirt) don't count. "" when there's none.`
|
|
50852
51017
|
},
|
|
50853
51018
|
has_safety_concern: {
|
|
50854
51019
|
type: "boolean",
|
|
@@ -50858,7 +51023,7 @@ var PICTURE_FIELDS = {
|
|
|
50858
51023
|
var SCHEMA2 = {
|
|
50859
51024
|
type: "object",
|
|
50860
51025
|
additionalProperties: false,
|
|
50861
|
-
required: ["pictures", "title_fake_reward", "
|
|
51026
|
+
required: ["pictures", "title_fake_reward", "title_tag", "title_search_words", "description_fake_reward", "has_words_safety_concern"],
|
|
50862
51027
|
properties: {
|
|
50863
51028
|
pictures: {
|
|
50864
51029
|
type: "array",
|
|
@@ -50866,10 +51031,6 @@ var SCHEMA2 = {
|
|
|
50866
51031
|
items: { type: "object", additionalProperties: false, required: Object.keys(PICTURE_FIELDS), properties: PICTURE_FIELDS }
|
|
50867
51032
|
},
|
|
50868
51033
|
title_fake_reward: { type: "string", description: `Words in the title promising something of real value or another platform's currency (Free Robux, V-Bucks), quoted; "" when none or when the title isn't judged.` },
|
|
50869
|
-
title_famous_name: {
|
|
50870
|
-
type: "string",
|
|
50871
|
-
description: `A famous film, show, game, brand, club or character's name in the title that a typical teenager would recognize at a glance (Minecraft, Naruto, Fortnite, Blox Fruits, Natural Disaster Survival, Saiyan), quoted. Common words aren't names (Ninja, Obby, Rush, Simulator, Tycoon). "" when none or when the title isn't judged.`
|
|
50872
|
-
},
|
|
50873
51034
|
title_tag: {
|
|
50874
51035
|
type: "string",
|
|
50875
51036
|
description: `A tag in the title instead of the game's name: a bracketed tag ([UPDATE], (NEW), [EVENT]), any emoji, or the words NEW, UPDATE or FREE used as a tag rather than as part of the name. Quote it. "Free Fall", "+1 Speed Run" and "Wrangler 2x" are names, not tags. "" when none or when the title isn't judged.`
|
|
@@ -51187,6 +51348,40 @@ function debugContextOf(stored) {
|
|
|
51187
51348
|
return Object.fromEntries(DEBUG_CONTEXT_KEYS.map((key) => [key, typeof parsed[key] === "string" ? parsed[key] : null]));
|
|
51188
51349
|
}
|
|
51189
51350
|
|
|
51351
|
+
// ../../apps/site/src/backup-storage.ts
|
|
51352
|
+
var BACKUP_STORAGE_LIMITS = {
|
|
51353
|
+
/** The most one request carries, held in memory to hash it; an object past it goes as a multipart upload. */
|
|
51354
|
+
partSizeBytes: 32 * 1024 * 1024,
|
|
51355
|
+
/** Tries per request when Backblaze answers 5xx or 429, or the connection breaks. */
|
|
51356
|
+
requestTryCount: 3
|
|
51357
|
+
};
|
|
51358
|
+
|
|
51359
|
+
// ../../apps/site/src/backups.ts
|
|
51360
|
+
var BACKUP_LIMITS = {
|
|
51361
|
+
/** Every live object is copied again this often, under the bucket's 28-day lock with four nights to spare. */
|
|
51362
|
+
refreshIntervalDays: 24,
|
|
51363
|
+
/** A version this old means the lifecycle rule isn't deleting: the privacy page promises 30 days. */
|
|
51364
|
+
keptVersionMaximumAgeDays: 31,
|
|
51365
|
+
/** Copies made at once within a part. */
|
|
51366
|
+
copyConcurrency: 6,
|
|
51367
|
+
/** A part stops once it has copied this much and queues the rest, to stay well inside a queue run's CPU time. */
|
|
51368
|
+
partCopySizeBytes: 1024 * 1024 * 1024,
|
|
51369
|
+
/** Objects listed per page of a bucket. */
|
|
51370
|
+
listedObjectCount: 1e3,
|
|
51371
|
+
/** Games looked at per part for their databases, and kept rooms per part. */
|
|
51372
|
+
pageGameCount: 500,
|
|
51373
|
+
pageKeptRoomCount: 200,
|
|
51374
|
+
/** What changed this long before the last good night began is copied again, for writes in flight as it listed. */
|
|
51375
|
+
changeMarginMs: 60 * 60 * 1e3,
|
|
51376
|
+
/** Tries per part before the night is marked failed. */
|
|
51377
|
+
partTryCount: 3,
|
|
51378
|
+
/** Keys that failed on earlier nights tried again per night, oldest first. */
|
|
51379
|
+
pageFailedKeyCount: 100,
|
|
51380
|
+
/** Failed keys a night's alert names; the rest are counted. */
|
|
51381
|
+
toldFailedKeyCount: 10
|
|
51382
|
+
};
|
|
51383
|
+
var DAY_MS9 = 24 * 60 * 60 * 1e3;
|
|
51384
|
+
|
|
51190
51385
|
// ../../apps/site/src/stripe-account-api.ts
|
|
51191
51386
|
var CONNECT_STATE_DURATION_MS = 10 * 6e4;
|
|
51192
51387
|
|
|
@@ -51455,6 +51650,12 @@ var API_ROUTES = [
|
|
|
51455
51650
|
call({ method: "DELETE", path: "/games/:slug/kept-rooms/:room_code", answers: fromTool("delete_kept_room"), reaches: "game", access: needs("game_access", "write"), pathParts: { slug: "game", room_code: "in_game" } }),
|
|
51456
51651
|
call({ method: "POST", path: "/games/:slug/kept-rooms/:room_code/bring-back", answers: fromTool("bring_back_kept_room"), reaches: "game", access: needs("game_access", "write"), pathParts: { slug: "game", room_code: "in_game" } }),
|
|
51457
51652
|
call({ method: "POST", path: "/games/:slug/kept-rooms/:room_code/erase-now", answers: fromTool("erase_kept_room_now"), reaches: "game", access: needs("game_access", "write"), pathParts: { slug: "game", room_code: "in_game" } }),
|
|
51653
|
+
call({ method: "GET", path: "/games/:slug/kept-rooms/:room_code/restores", answers: fromTool("list_kept_room_restores"), reaches: "game", access: needs("game_access", "read"), pathParts: { slug: "game", room_code: "in_game" } }),
|
|
51654
|
+
call({ method: "POST", path: "/games/:slug/kept-rooms/:room_code/restores", answers: fromTool("restore_kept_room"), reaches: "game", access: needs("game_access", "write"), pathParts: { slug: "game", room_code: "in_game" }, body: { inputs: plainInputs("restore_to_at") } }),
|
|
51655
|
+
call({ method: "POST", path: "/games/:slug/kept-rooms/:room_code/restores/:kept_room_restore_id/undo", answers: fromTool("undo_kept_room_restore"), reaches: "game", access: needs("game_access", "write"), pathParts: { slug: "game", room_code: "in_game", kept_room_restore_id: "in_game" } }),
|
|
51656
|
+
call({ method: "POST", path: "/games/:slug/kept-room-restores", answers: fromTool("restore_every_kept_room"), reaches: "game", access: needs("game_access", "write"), pathParts: atGame, body: { inputs: plainInputs("restore_to_at") } }),
|
|
51657
|
+
call({ method: "GET", path: "/games/:slug/kept-room-restores/:kept_room_restore_batch_id", answers: fromTool("get_kept_room_restore_batch"), reaches: "game", access: needs("game_access", "read"), pathParts: { slug: "game", kept_room_restore_batch_id: "in_game" } }),
|
|
51658
|
+
call({ method: "POST", path: "/games/:slug/kept-room-restores/:kept_room_restore_batch_id/undo", answers: fromTool("undo_every_kept_room_restore"), reaches: "game", access: needs("game_access", "write"), pathParts: { slug: "game", kept_room_restore_batch_id: "in_game" } }),
|
|
51458
51659
|
call({ method: "GET", path: "/games/:slug/rooms", answers: fromTool("list_rooms"), reaches: "game", access: needs("game_access", "read"), pathParts: atGame, query: plainInputs("labels", "cursor") }),
|
|
51459
51660
|
call({ method: "GET", path: "/games/:slug/rooms/:room_code", answers: fromTool("get_room"), reaches: "game", access: needs("game_access", "read"), pathParts: { slug: "game", room_code: "in_game" } }),
|
|
51460
51661
|
call({ method: "POST", path: "/games/:slug/rooms/:room_code/messages", answers: fromTool("send_room_message"), reaches: "game", access: needs("game_access", "write"), pathParts: { slug: "game", room_code: "in_game" }, body: { inputs: plainInputs("message") } }),
|
|
@@ -51541,7 +51742,6 @@ var API_ROUTES = [
|
|
|
51541
51742
|
call({ method: "POST", path: "/webhooks/:webhook_id/test", answers: fromTool("test_webhook"), reaches: "webhook", access: needs("webhook_access", "write"), pathParts: { webhook_id: "webhook" } }),
|
|
51542
51743
|
call({ method: "GET", path: "/webhooks/:webhook_id/deliveries", answers: fromTool("list_webhook_deliveries"), reaches: "webhook", access: needs("webhook_access", "read"), pathParts: { webhook_id: "webhook" }, query: plainInputs("cursor") })
|
|
51543
51744
|
];
|
|
51544
|
-
var MAXIMUM_RAW_BODY_SIZE_BYTES = 110 * 1024 * 1024;
|
|
51545
51745
|
var TOOL_ANSWER_SCHEMAS = /* @__PURE__ */ new Map();
|
|
51546
51746
|
var routePatterns = new Map(
|
|
51547
51747
|
API_ROUTES.map((apiRoute) => [apiRoute, new RegExp(`^${apiRoute.path.replace(/:([a-z0-9_]+)/g, (_, name) => `(?<${name}>${name === "sha256" ? "[0-9a-f]{64}" : "[^/]+"})`)}$`)])
|
|
@@ -51769,7 +51969,7 @@ async function tellWebhooks(env2, kind, gameId, parts2, waitUntil) {
|
|
|
51769
51969
|
console.error("Couldn't tell webhooks", kind, gameId, error);
|
|
51770
51970
|
}
|
|
51771
51971
|
}
|
|
51772
|
-
var
|
|
51972
|
+
var DAY_MS10 = 24 * 3600 * 1e3;
|
|
51773
51973
|
async function sendAll(env2, webhooks, deliveries) {
|
|
51774
51974
|
const sendToGameServer = gameServerSender(env2);
|
|
51775
51975
|
const tries = await Promise.allSettled(deliveries.map((delivery, i) => attemptDelivery(env2.DB, env2, webhooks[i], delivery, { sendToGameServer })));
|
|
@@ -51831,7 +52031,7 @@ function reportStep(game, options) {
|
|
|
51831
52031
|
{
|
|
51832
52032
|
kind: "words",
|
|
51833
52033
|
id: "report-notices",
|
|
51834
|
-
markup: html`<p>Someone copied your work? ${textLink("Send a copyright notice", "/legal/dmca", { isNewTab: true })}<br>A game falsely says you committed a crime? ${textLink("Send a defamation notice", "/legal/defamation", { isNewTab: true })}</p>`
|
|
52034
|
+
markup: html`<p>Someone copied your work? ${textLink("Send a copyright notice", "/legal/dmca", { isNewTab: true })}<br>A game falsely says you committed a crime? ${textLink("Send a defamation notice", "/legal/defamation", { isNewTab: true })}<br>A game uses your trademark? ${textLink("Send a trademark notice", "/legal/trademark", { isNewTab: true })}</p>`
|
|
51835
52035
|
}
|
|
51836
52036
|
]
|
|
51837
52037
|
});
|
|
@@ -56281,7 +56481,7 @@ A publish is a quiet patch: its notes show in the game page's Updates tab and no
|
|
|
56281
56481
|
{
|
|
56282
56482
|
name: "add_image",
|
|
56283
56483
|
title: "Add a cover, screenshot, background or shader texture",
|
|
56284
|
-
description: "Add a cover (landscape, 16:9 shows best), a square cover (optional, shown on phones instead, where a landscape one is small; as wide as tall, at least 512 px) or a screenshot (up to 8), or a share picture (optional: what shared game and room links show instead of the cover in chats, social sites and search; landscape, 1200 by 630 shows best), or a background picture: the game's world behind Zaisma's glass on the home and the game page, with no title, logo or words on it (those go on the cover). A background (kind background) is landscape, 1.3 to 2.4 times as wide as tall, at least 1600 px wide, like 2560 by 1440, with room for the glass on the left; a phone background (kind phone_background) is portrait, 1.6 to 2.4 times as tall as wide, at least 1600 px tall, with room for the glass on the bottom half. Once one passes, set_background shows it. A new cover, share picture or background replaces the old one of its kind once approved, and a background showing on a screen is replaced there too. Players see the cover alone as the game's card, with no title drawn over or under it, so covers should carry the game's name or logo; screenshots are just the game. PNG, JPEG or WebP, up to 5 MB, at least 320 px a side. An AI check approves images in about a minute (get_game shows the result). A shader texture (kind shader_texture) is a picture a background shader reads through a channel (add_shader): noise, a painted sky, a lookup table; up to 8 MB and 4096 px a side, any size below that, up to 16 a game; image matching approves it at once, and what the shader draws with it is checked in the shader's frames. Zaisma's lists only show games whose covers keep five lines: no text but the game's name, a subtitle and the studio's logo; nothing laid over the picture (buttons, menus, shop panels, badges, stickers, arrows); no fake rewards like free Robux (that holds the game);
|
|
56484
|
+
description: "Add a cover (landscape, 16:9 shows best), a square cover (optional, shown on phones instead, where a landscape one is small; as wide as tall, at least 512 px) or a screenshot (up to 8), or a share picture (optional: what shared game and room links show instead of the cover in chats, social sites and search; landscape, 1200 by 630 shows best), or a background picture: the game's world behind Zaisma's glass on the home and the game page, with no title, logo or words on it (those go on the cover). A background (kind background) is landscape, 1.3 to 2.4 times as wide as tall, at least 1600 px wide, like 2560 by 1440, with room for the glass on the left; a phone background (kind phone_background) is portrait, 1.6 to 2.4 times as tall as wide, at least 1600 px tall, with room for the glass on the bottom half. Once one passes, set_background shows it. A new cover, share picture or background replaces the old one of its kind once approved, and a background showing on a screen is replaced there too. Players see the cover alone as the game's card, with no title drawn over or under it, so covers should carry the game's name or logo; screenshots are just the game. PNG, JPEG or WebP, up to 5 MB, at least 320 px a side. An AI check approves images in about a minute (get_game shows the result). A shader texture (kind shader_texture) is a picture a background shader reads through a channel (add_shader): noise, a painted sky, a lookup table; up to 8 MB and 4096 px a side, any size below that, up to 16 a game; image matching approves it at once, and what the shader draws with it is checked in the shader's frames. Zaisma's lists only show games whose covers keep five lines: no text but the game's name, a subtitle and the studio's logo; nothing laid over the picture (buttons, menus, shop panels, badges, stickers, arrows); no fake rewards like free Robux (that holds the game); and the cover's main subject appears in a screenshot. Screenshots are real captures: the game's own interface is fine, but nothing added afterwards (captions, arrows, stickers). Style is free, but the best covers show one subject from the game, the name big enough to read on a phone, in the game's own art and colors on a simple background: zaisma.com/developers/covers has examples. No lifelike gore on covers, share pictures or screenshots, whatever the game's age setting: signed-out visitors see every listed game's cover.",
|
|
56285
56485
|
inputSchema: object2({ slug, kind: { enum: ["cover", "square", "screenshot", "share", "background", "phone_background", "shader_texture"] }, image_base64: { type: "string", description: "The PNG, JPEG or WebP file, base64-encoded (a data: URL prefix is fine)" } }, ["slug", "kind", "image_base64"]),
|
|
56286
56486
|
outputSchema: object({ image: IMAGE, review_message: text2(), next_steps: NEXT }),
|
|
56287
56487
|
annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: false },
|
|
@@ -57386,7 +57586,7 @@ Not: { "amount_minor_units": 0 } (leave it out to refund everything)`,
|
|
|
57386
57586
|
{
|
|
57387
57587
|
name: "list_kept_rooms",
|
|
57388
57588
|
title: "List a game's kept rooms",
|
|
57389
|
-
description: "A game's kept rooms: rooms its game server kept with room.setKept(true), like a survival world or a persistent server, which sleep with their world saved when everyone leaves and wake when someone joins. Each with its code, name, saved size and when it was last saved and played, most recently played first; and the game's storage, its database and kept rooms together, against the 10 GB a game can keep (`maximum_storage_size_bytes`); below that, storage counts on the game's hosting meter (get_stats, hosting_use_this_month). Listed kept rooms show on the game page's Rooms tab even with nobody in them.",
|
|
57589
|
+
description: "deleted_kept_rooms says which erased worlds their last copy can still bring back. A game's kept rooms: rooms its game server kept with room.setKept(true), like a survival world or a persistent server, which sleep with their world saved when everyone leaves and wake when someone joins. Each with its code, name, saved size and when it was last saved and played, most recently played first; and the game's storage, its database and kept rooms together, against the 10 GB a game can keep (`maximum_storage_size_bytes`); below that, storage counts on the game's hosting meter (get_stats, hosting_use_this_month). Listed kept rooms show on the game page's Rooms tab even with nobody in them.",
|
|
57390
57590
|
inputSchema: object2({ slug }, ["slug"]),
|
|
57391
57591
|
outputSchema: KEPT_ROOMS,
|
|
57392
57592
|
annotations: read,
|
|
@@ -57407,7 +57607,7 @@ Not: { "amount_minor_units": 0 } (leave it out to refund everything)`,
|
|
|
57407
57607
|
{
|
|
57408
57608
|
name: "bring_back_kept_room",
|
|
57409
57609
|
title: "Bring a deleted kept room back",
|
|
57410
|
-
description: "Brings back a kept room's world deleted or ended through the API,
|
|
57610
|
+
description: "Brings back a kept room's world deleted or ended through the API, with the same code. Until its erases_at it's as it was. After that it comes back from its last copy, for about 28 days after it was deleted (list_kept_rooms' deleted_kept_rooms), as of copy_saved_at, so up to a day can be lost; that takes a minute or more, and is_bringing_back says it's on its way. A world that isn't deleted answers kept_room_not_waiting; one mid-erase answers kept_room_erasing, so try again in a minute. A deleted world can't come back to a game Zaisma took down (game_removed), past 10 GB (game_storage_full) or under a code in use (room_code_in_use).",
|
|
57411
57611
|
inputSchema: {
|
|
57412
57612
|
...object2({ slug, room_code: { type: "string", pattern: "^[23456789ABCDEFGHJKLMNPQRSTUVWXYZ]{6}$", description: "A waiting kept room's code from list_kept_rooms, like K7Q2MX." } }, ["slug", "room_code"]),
|
|
57413
57613
|
examples: [{ slug: "frostbound", room_code: "K7Q2MX" }]
|
|
@@ -57416,10 +57616,72 @@ Not: { "amount_minor_units": 0 } (leave it out to refund everything)`,
|
|
|
57416
57616
|
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
|
|
57417
57617
|
run: (toolArguments, call3) => call3("POST", `/games/${pathPart(toolArguments.slug)}/kept-rooms/${pathPart(toolArguments.room_code)}/bring-back`)
|
|
57418
57618
|
},
|
|
57619
|
+
{
|
|
57620
|
+
name: "restore_kept_room",
|
|
57621
|
+
title: "Restore a kept room's world to a time",
|
|
57622
|
+
description: `Puts one kept room's world back as it was at any minute in the last 30 days: the undo for a griefed world or a bad update. Players in it drop for a second or two and reconnect; its game server's onRestored hears what happened, and the game tells them its own way, with no message from Zaisma. Everything played since is gone until you undo it with undo_kept_room_restore, which works for 30 days. It never changes what players own through Zaisma, never undoes a takedown, and the game server hears who was erased since. get_history shows when things happened. For every world at once, use restore_every_kept_room. Free, like restore_database, which is a separate call.
|
|
57623
|
+
Not: { "restore_to_at": "2026-10-18 14:05" } (an ISO time with Z or an offset, like "2026-10-18T14:05:00Z")`,
|
|
57624
|
+
inputSchema: {
|
|
57625
|
+
...object2({ slug, room_code: { type: "string", pattern: "^[23456789ABCDEFGHJKLMNPQRSTUVWXYZ]{6}$", description: "A kept room's code from list_kept_rooms, like K7Q2MX." }, restore_to_at: { type: "string", format: "date-time", description: "The moment to go back to: an ISO time with Z or an offset, in the last 30 days" } }, ["slug", "room_code", "restore_to_at"]),
|
|
57626
|
+
examples: [{ slug: "frostbound", room_code: "K7Q2MX", restore_to_at: "2026-10-18T14:04:00Z" }]
|
|
57627
|
+
},
|
|
57628
|
+
outputSchema: KEPT_ROOM_RESTORED,
|
|
57629
|
+
annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false },
|
|
57630
|
+
run: (toolArguments, call3) => call3("POST", `/games/${pathPart(toolArguments.slug)}/kept-rooms/${pathPart(toolArguments.room_code)}/restores`, pick(toolArguments, ["restore_to_at"]))
|
|
57631
|
+
},
|
|
57632
|
+
{
|
|
57633
|
+
name: "undo_kept_room_restore",
|
|
57634
|
+
title: "Undo a kept room's restore",
|
|
57635
|
+
description: "Undoes a restore_kept_room: the world goes back to just before that restore, and what was played after it is gone (this is a restore too, so it can be undone the same way). Within 30 days of the restore; list_kept_room_restores lists them.",
|
|
57636
|
+
inputSchema: object2({ slug, room_code: { type: "string", pattern: "^[23456789ABCDEFGHJKLMNPQRSTUVWXYZ]{6}$", description: "A kept room's code from list_kept_rooms, like K7Q2MX." }, kept_room_restore_id: idInput("kept_room_restore", "The restore to undo, from list_kept_room_restores or restore_kept_room's answer.") }, ["slug", "room_code", "kept_room_restore_id"]),
|
|
57637
|
+
outputSchema: KEPT_ROOM_RESTORED,
|
|
57638
|
+
annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false },
|
|
57639
|
+
run: (toolArguments, call3) => call3("POST", `/games/${pathPart(toolArguments.slug)}/kept-rooms/${pathPart(toolArguments.room_code)}/restores/${pathPart(toolArguments.kept_room_restore_id)}/undo`)
|
|
57640
|
+
},
|
|
57641
|
+
{
|
|
57642
|
+
name: "list_kept_room_restores",
|
|
57643
|
+
title: "How far back a kept room can go",
|
|
57644
|
+
description: "One kept room's earliest moment it can go back to (any minute from then to now), and its restores that can still be undone, newest first.",
|
|
57645
|
+
inputSchema: object2({ slug, room_code: { type: "string", pattern: "^[23456789ABCDEFGHJKLMNPQRSTUVWXYZ]{6}$", description: "A kept room's code from list_kept_rooms, like K7Q2MX." } }, ["slug", "room_code"]),
|
|
57646
|
+
outputSchema: KEPT_ROOM_RESTORES,
|
|
57647
|
+
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
57648
|
+
run: (toolArguments, call3) => call3("GET", `/games/${pathPart(toolArguments.slug)}/kept-rooms/${pathPart(toolArguments.room_code)}/restores`)
|
|
57649
|
+
},
|
|
57650
|
+
{
|
|
57651
|
+
name: "restore_every_kept_room",
|
|
57652
|
+
title: "Restore every kept room's world to a time",
|
|
57653
|
+
description: `Puts every kept room of a game back as it was at one minute in the last 30 days: the undo for a bad update. It answers at once and runs a few hundred worlds a minute: get_kept_room_restore_batch says how it's going. Worlds waiting to be erased and worlds kept after that moment stay as they are. Worlds, database and version are separate calls on purpose: next_steps names restore_database with the same time and publish_version when the live version went live after that moment, since it could do the damage again. Ask the developer first.
|
|
57654
|
+
Not: { "restore_to_at": "1 hour ago" } (work out the ISO time)`,
|
|
57655
|
+
inputSchema: {
|
|
57656
|
+
...object2({ slug, restore_to_at: { type: "string", format: "date-time", description: "The moment to go back to: an ISO time with Z or an offset, in the last 30 days" } }, ["slug", "restore_to_at"]),
|
|
57657
|
+
examples: [{ slug: "frostbound", restore_to_at: "2026-10-18T14:04:00Z" }]
|
|
57658
|
+
},
|
|
57659
|
+
outputSchema: KEPT_ROOM_RESTORE_BATCH_STARTED,
|
|
57660
|
+
annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false },
|
|
57661
|
+
run: (toolArguments, call3) => call3("POST", `/games/${pathPart(toolArguments.slug)}/kept-room-restores`, pick(toolArguments, ["restore_to_at"]))
|
|
57662
|
+
},
|
|
57663
|
+
{
|
|
57664
|
+
name: "get_kept_room_restore_batch",
|
|
57665
|
+
title: "How a restore of every kept room went",
|
|
57666
|
+
description: "A restore_every_kept_room's progress: how many worlds went back, were left as they are or failed, and which failed (restore_kept_room each of those).",
|
|
57667
|
+
inputSchema: object2({ slug, kept_room_restore_batch_id: idInput("kept_room_restore_batch", "The batch, from restore_every_kept_room's answer.") }, ["slug", "kept_room_restore_batch_id"]),
|
|
57668
|
+
outputSchema: KEPT_ROOM_RESTORE_BATCH_READ,
|
|
57669
|
+
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
57670
|
+
run: (toolArguments, call3) => call3("GET", `/games/${pathPart(toolArguments.slug)}/kept-room-restores/${pathPart(toolArguments.kept_room_restore_batch_id)}`)
|
|
57671
|
+
},
|
|
57672
|
+
{
|
|
57673
|
+
name: "undo_every_kept_room_restore",
|
|
57674
|
+
title: "Undo a restore of every kept room",
|
|
57675
|
+
description: "Undoes a restore_every_kept_room: each world it restored goes back to just before that, for 30 days after it. It answers at once, like the restore did.",
|
|
57676
|
+
inputSchema: object2({ slug, kept_room_restore_batch_id: idInput("kept_room_restore_batch", "The batch to undo, from restore_every_kept_room's answer.") }, ["slug", "kept_room_restore_batch_id"]),
|
|
57677
|
+
outputSchema: KEPT_ROOM_RESTORE_BATCH_STARTED,
|
|
57678
|
+
annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false },
|
|
57679
|
+
run: (toolArguments, call3) => call3("POST", `/games/${pathPart(toolArguments.slug)}/kept-room-restores/${pathPart(toolArguments.kept_room_restore_batch_id)}/undo`)
|
|
57680
|
+
},
|
|
57419
57681
|
{
|
|
57420
57682
|
name: "erase_kept_room_now",
|
|
57421
57683
|
title: "Erase a deleted kept room at once",
|
|
57422
|
-
description: "Erases a waiting kept room's world without waiting for its erases_at, so what it stores leaves the hosting meter and its code is free. It always answers confirmation_needed first: give the developer confirm_url, where they approve with a passkey tap or decline, and check the answer with get_game_deletion_request.
|
|
57684
|
+
description: "Erases a waiting kept room's world without waiting for its erases_at, so what it stores leaves the hosting meter and its code is free. It always answers confirmation_needed first: give the developer confirm_url, where they approve with a passkey tap or decline, and check the answer with get_game_deletion_request. Its last copy can still bring it back with bring_back_kept_room for about 28 days after it was deleted, and nothing does after that.",
|
|
57423
57685
|
inputSchema: {
|
|
57424
57686
|
...object2({ slug, room_code: { type: "string", pattern: "^[23456789ABCDEFGHJKLMNPQRSTUVWXYZ]{6}$", description: "A waiting kept room's code from list_kept_rooms, like K7Q2MX." } }, ["slug", "room_code"]),
|
|
57425
57687
|
examples: [{ slug: "frostbound", room_code: "K7Q2MX" }]
|
|
@@ -57930,7 +58192,7 @@ async function precedentAction(env2, path, form, actor) {
|
|
|
57930
58192
|
var redirect = () => new Response(null, { status: 303, headers: { Location: "/admin/precedents" } });
|
|
57931
58193
|
|
|
57932
58194
|
// ../../apps/site/src/admin-mcp.ts
|
|
57933
|
-
var
|
|
58195
|
+
var DAY_MS11 = 864e5;
|
|
57934
58196
|
var read2 = { readOnlyHint: true, openWorldHint: false };
|
|
57935
58197
|
var change = { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false };
|
|
57936
58198
|
var object3 = (properties, required = []) => ({ type: "object", properties, required, additionalProperties: false });
|
|
@@ -58153,7 +58415,7 @@ var ADMIN_TOOLS = [
|
|
|
58153
58415
|
run: async (_, { env: env2 }) => {
|
|
58154
58416
|
const { results } = await env2.DB.prepare(
|
|
58155
58417
|
`${QUEUE_SELECT} WHERE reports.report_status != 'open' AND reports.closed_at_ms = reports.triaged_at_ms AND reports.closed_at_ms > ? AND reports.severity_index > 0 ORDER BY reports.closed_at_ms DESC LIMIT 100`
|
|
58156
|
-
).bind(Date.now() - 7 *
|
|
58418
|
+
).bind(Date.now() - 7 * DAY_MS11).all();
|
|
58157
58419
|
return {
|
|
58158
58420
|
period_duration_days: 7,
|
|
58159
58421
|
reports: results.map((report) => {
|
|
@@ -58306,7 +58568,7 @@ Not: { "decision": "stop_social", "why": "\u2026" } (say which of the four with
|
|
|
58306
58568
|
throw new ApiError("missing_field", {
|
|
58307
58569
|
message: "A takedown needs the content rule it broke.",
|
|
58308
58570
|
field: "content_rule",
|
|
58309
|
-
fix: `Give content_rule, one of: ${Object.keys(CONTENT_RULES).join(", ")}. A copyright or
|
|
58571
|
+
fix: `Give content_rule, one of: ${Object.keys(CONTENT_RULES).join(", ")}. A copyright, defamation or trademark notice holds the game with decide_notice instead.`
|
|
58310
58572
|
});
|
|
58311
58573
|
}
|
|
58312
58574
|
const precedent = toolArguments.precedent;
|
|
@@ -58654,8 +58916,8 @@ Not: { "merge_into_topic_id": "topic_\u2026", "known_issue": { \u2026 } } (merge
|
|
|
58654
58916
|
{
|
|
58655
58917
|
name: "decide_notice",
|
|
58656
58918
|
reaches: "any_game",
|
|
58657
|
-
title: "Act on a copyright or
|
|
58658
|
-
description: `A copyright (DMCA) or
|
|
58919
|
+
title: "Act on a copyright, defamation or trademark notice",
|
|
58920
|
+
description: `A copyright (DMCA), defamation or trademark notice that reached dmca@ or safety@zaisma.com: hold hides the game from players without judging the notice, and the developer reads why (what the notice names) with how to fix it; show_again puts a held game back. Show it again once the live version no longer has what the notice names (publishing one emails the admin), or 10 working days after a counter-notice reached the sender, unless they say they've gone to court. The same as the Notice form on zaisma.com/admin/games/<id>. Ask the admin first.
|
|
58659
58921
|
Not: { "decision": "hold", "why": "\u2026" } (a hold needs notice_kind too)
|
|
58660
58922
|
Not: { "decision": "show_again", "notice_kind": "copyright", "why": "\u2026" } (show_again takes no notice_kind)`,
|
|
58661
58923
|
inputSchema: {
|
|
@@ -58663,7 +58925,7 @@ Not: { "decision": "show_again", "notice_kind": "copyright", "why": "\u2026" } (
|
|
|
58663
58925
|
{
|
|
58664
58926
|
slug: { type: "string", maxLength: 60, description: "The game's link name, as in zaisma.com/g/<slug>, from the link the notice gives." },
|
|
58665
58927
|
decision: { enum: ["hold", "show_again"], description: "hold: hide the game on the notice; show_again: put a held game back." },
|
|
58666
|
-
notice_kind: { enum: NOTICE_KINDS, description: "For hold (needed): copyright for a DMCA notice, defamation for a private person saying the game falsely accuses them of a crime." },
|
|
58928
|
+
notice_kind: { enum: NOTICE_KINDS, description: "For hold (needed): copyright for a DMCA notice, defamation for a private person saying the game falsely accuses them of a crime, trademark for the owner of a registered trademark." },
|
|
58667
58929
|
why: { type: "string", minLength: 1, maxLength: 500, description: "For hold, what the notice names (the words or scene), written for the developer, who reads it. For show_again, why, for the audit log." }
|
|
58668
58930
|
},
|
|
58669
58931
|
["slug", "decision", "why"]
|
|
@@ -58915,7 +59177,7 @@ Not: { "username": "@sam", "ban_scope": "whole_account" } (why is needed: the de
|
|
|
58915
59177
|
annotations: read2,
|
|
58916
59178
|
run: async (_, { env: env2 }) => {
|
|
58917
59179
|
const nowMs = Date.now();
|
|
58918
|
-
const played = await env2.DB.prepare("SELECT COALESCE(SUM(room_play_duration_sec), 0) AS total_sec, COALESCE(SUM(rented_network_room_play_duration_sec), 0) AS rented_sec FROM room_usage WHERE date >= ?").bind(new Date(nowMs - 30 *
|
|
59180
|
+
const played = await env2.DB.prepare("SELECT COALESCE(SUM(room_play_duration_sec), 0) AS total_sec, COALESCE(SUM(rented_network_room_play_duration_sec), 0) AS rented_sec FROM room_usage WHERE date >= ?").bind(new Date(nowMs - 30 * DAY_MS11).toISOString().slice(0, 10)).first();
|
|
58919
59181
|
const stopped = await env2.DB.prepare("SELECT COUNT(*) AS stopped_game_count FROM game_hosting_months WHERE month_start_date = ? AND rented_share_stopped_at_ms IS NOT NULL").bind(monthStartDateOf(nowMs)).first();
|
|
58920
59182
|
const totalSec = played?.total_sec ?? 0;
|
|
58921
59183
|
const rentedSec = played?.rented_sec ?? 0;
|
|
@@ -59130,8 +59392,8 @@ function toldDeveloper(stored) {
|
|
|
59130
59392
|
const reason = readReviewReason(stored);
|
|
59131
59393
|
return reason ? html`<p class="muted">The developer reads: <code>${reason.code}</code>${reason.content_rule ? html` · rule <code>${reason.content_rule}</code>` : ""} · “${reason.message}”</p>` : "";
|
|
59132
59394
|
}
|
|
59133
|
-
function page(env2, title, body) {
|
|
59134
|
-
return layout(env2, { title: `${title} \xB7 Zaisma admin`, body, isAdmin: true });
|
|
59395
|
+
function page(env2, checkedPage, title, body) {
|
|
59396
|
+
return layout(env2, { title: `${title} \xB7 Zaisma admin`, body, checkedPage, isAdmin: true });
|
|
59135
59397
|
}
|
|
59136
59398
|
function redirect2(to) {
|
|
59137
59399
|
return new Response(null, { status: 303, headers: { Location: to } });
|
|
@@ -59301,7 +59563,7 @@ async function adminForm(env2, path, form, actor) {
|
|
|
59301
59563
|
const noticeKind = form.get("notice_kind");
|
|
59302
59564
|
if (!isNoticeKind(noticeKind) || !reason) return gameDetail(env2, game.id, "Pick the kind of notice and say what it names. The developer reads it, and it goes in the audit log too.");
|
|
59303
59565
|
if (game.review_status === "removed") return gameDetail(env2, game.id, "The game is already taken down. Restore it first if the notice should hold it instead.");
|
|
59304
|
-
const noticeReason = decidedReason(NOTICE_CODES[noticeKind].code, null, `A ${noticeKind === "copyright" ? "copyright (DMCA)" :
|
|
59566
|
+
const noticeReason = decidedReason(NOTICE_CODES[noticeKind].code, null, `A ${noticeKind === "copyright" ? "copyright (DMCA)" : noticeKind} notice names this: ${reason}`);
|
|
59305
59567
|
await setReviewStatus(env2.DB, game.id, "held", noticeReason);
|
|
59306
59568
|
await recordRestoreEvent(env2, { event_kind: "game_held", at_ms: Date.now(), game_id: game.id, review_reason: noticeReason });
|
|
59307
59569
|
await audit(env2.DB, game.id, "notice-held", reason, actor, noticeReason);
|
|
@@ -59454,6 +59716,7 @@ async function gameDetail(env2, id, error = "") {
|
|
|
59454
59716
|
}
|
|
59455
59717
|
return page(
|
|
59456
59718
|
env2,
|
|
59719
|
+
"Admin, a game",
|
|
59457
59720
|
game.title,
|
|
59458
59721
|
html`<h1>${game.title} ${pill(game.review_status)}</h1>
|
|
59459
59722
|
<p class="lead">${game.description}</p>
|