@abtnode/blocklet-services 1.16.6-beta-56be9f01 → 1.16.6-beta-e2082fec

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.
Files changed (34) hide show
  1. package/api/libs/connect/session.js +31 -14
  2. package/api/libs/jwt.js +3 -8
  3. package/api/routes/oauth.js +52 -18
  4. package/api/services/auth/connect/invite.js +2 -1
  5. package/api/services/auth/connect/receive-transfer-app-owner.js +2 -1
  6. package/api/services/auth/connect/setup.js +2 -1
  7. package/api/services/auth/index.js +2 -1
  8. package/api/services/auth/session.js +2 -1
  9. package/api/util/attach-shared-utils.js +1 -1
  10. package/build/asset-manifest.json +29 -29
  11. package/build/index.html +1 -1
  12. package/build/static/css/{293.ea9ee64d.chunk.css → 933.be984e1d.chunk.css} +1 -1
  13. package/build/static/js/{21.e7883f61.chunk.js → 21.4b495d85.chunk.js} +3 -3
  14. package/build/static/js/343.3bc8fb37.chunk.js +2 -0
  15. package/build/static/js/{437.d815f0c0.chunk.js → 437.075e8453.chunk.js} +2 -2
  16. package/build/static/js/{460.9225f4c4.chunk.js → 460.4763afe0.chunk.js} +2 -2
  17. package/build/static/js/{547.614f46b8.chunk.js → 547.03d5d719.chunk.js} +2 -2
  18. package/build/static/js/{573.2992dbf5.chunk.js → 573.b071429e.chunk.js} +2 -2
  19. package/build/static/js/{682.c64ae291.chunk.js → 682.a8bf723a.chunk.js} +2 -2
  20. package/build/static/js/{711.6c22b7c7.chunk.js → 711.56427a24.chunk.js} +2 -2
  21. package/build/static/js/716.0d2a2d32.chunk.js +2 -0
  22. package/build/static/js/{737.73437907.chunk.js → 737.15a41e1c.chunk.js} +2 -2
  23. package/build/static/js/868.ac8df3a0.chunk.js +2 -0
  24. package/build/static/js/933.5a8322ac.chunk.js +3 -0
  25. package/build/static/js/main.ea4f5b3d.js +3 -0
  26. package/build/static/js/{main.68e1dab9.js.LICENSE.txt → main.ea4f5b3d.js.LICENSE.txt} +1 -1
  27. package/package.json +34 -34
  28. package/build/static/js/293.636e2bb7.chunk.js +0 -3
  29. package/build/static/js/343.1aba65c1.chunk.js +0 -2
  30. package/build/static/js/716.bcea7c98.chunk.js +0 -2
  31. package/build/static/js/868.9c03fa86.chunk.js +0 -2
  32. package/build/static/js/main.68e1dab9.js +0 -3
  33. /package/build/static/js/{21.e7883f61.chunk.js.LICENSE.txt → 21.4b495d85.chunk.js.LICENSE.txt} +0 -0
  34. /package/build/static/js/{293.636e2bb7.chunk.js.LICENSE.txt → 933.5a8322ac.chunk.js.LICENSE.txt} +0 -0
@@ -204,7 +204,14 @@ module.exports = {
204
204
  action,
205
205
  }) => {
206
206
  const blocklet = await request.getBlocklet();
207
- const { wallet, name, passportColor, did: teamDid, wallet: blockletWallet } = await request.getBlockletInfo();
207
+ const {
208
+ wallet,
209
+ secret,
210
+ name,
211
+ passportColor,
212
+ did: teamDid,
213
+ wallet: blockletWallet,
214
+ } = await request.getBlockletInfo();
208
215
 
209
216
  // Check user approved
210
217
  const user = await node.getUser({
@@ -341,7 +348,7 @@ module.exports = {
341
348
  await node.createAuditLog(
342
349
  {
343
350
  action,
344
- args: { teamDid, userDid: realDid, passport: passportForLog },
351
+ args: { teamDid, userDid: realDid, passport: passportForLog, provider: 'wallet' },
345
352
  context: formatContext(Object.assign(request, { user: doc })),
346
353
  result: doc,
347
354
  },
@@ -385,7 +392,7 @@ module.exports = {
385
392
  }
386
393
 
387
394
  // Generate new session token that client can save to localStorage
388
- const sessionToken = await createSessionToken(realDid, { passport, role });
395
+ const sessionToken = await createSessionToken(realDid, { secret, passport, role });
389
396
  logger.info(`${action}.success`, { userDid: realDid, role });
390
397
 
391
398
  if (
@@ -561,7 +568,7 @@ module.exports = {
561
568
  componentId,
562
569
  }) => {
563
570
  const blocklet = await request.getBlocklet();
564
- const { name, did: teamDid, wallet: blockletWallet } = await request.getBlockletInfo();
571
+ const { name, did: teamDid, wallet: blockletWallet, secret } = await request.getBlockletInfo();
565
572
 
566
573
  // Validate user
567
574
  const user = await node.getUser({
@@ -631,7 +638,7 @@ module.exports = {
631
638
  await node.createAuditLog(
632
639
  {
633
640
  action: 'switchPassport',
634
- args: { teamDid, userDid, passport: passportForLog },
641
+ args: { teamDid, userDid, passport: passportForLog, provider: 'wallet' },
635
642
  context: formatContext(Object.assign(request, { user })),
636
643
  result: {},
637
644
  },
@@ -639,7 +646,7 @@ module.exports = {
639
646
  );
640
647
 
641
648
  // Generate new session token that client can save to localStorage
642
- const sessionToken = await createSessionToken(userDid, { passport, role });
649
+ const sessionToken = await createSessionToken(userDid, { secret, passport, role });
643
650
  return sessionToken;
644
651
  },
645
652
  },
@@ -783,6 +790,14 @@ module.exports = {
783
790
  });
784
791
  const currentTime = new Date().toISOString();
785
792
 
793
+ const connectedAccount = {
794
+ provider: 'wallet',
795
+ did: userDid,
796
+ pk: userPk,
797
+ lastLoginAt: currentTime,
798
+ firstLoginAt: currentTime,
799
+ };
800
+
786
801
  await node.updateUser({
787
802
  teamDid,
788
803
  user: mergeUserData(
@@ -796,13 +811,7 @@ module.exports = {
796
811
  {
797
812
  locale,
798
813
  lastLoginIp: get(request, 'headers[x-real-ip]') || '',
799
- connectedAccount: {
800
- provider: 'wallet',
801
- did: userDid,
802
- pk: userPk,
803
- lastLoginAt: currentTime,
804
- firstLoginAt: currentTime,
805
- },
814
+ connectedAccount,
806
815
  }
807
816
  ),
808
817
  });
@@ -836,7 +845,15 @@ module.exports = {
836
845
  const oauthAccount = connectedAccounts.find((item) => item.provider === sourceProvider);
837
846
  const userWallet = fromAppDid(oauthAccount.id, blockletWallet.secretKey, types.RoleType.ROLE_ACCOUNT);
838
847
  await migrateAccount({ wallet: userWallet, blocklet, user: bindUser });
839
- // logger.info('bindWallet.success', { userDid, role: passport.role });
848
+ await node.createAuditLog(
849
+ {
850
+ action: 'connectAccount',
851
+ args: { teamDid, connectedAccount, provider: 'wallet', userDid: oauthUser.did },
852
+ context: formatContext(Object.assign(request, { user: oauthUser })),
853
+ result: bindUser,
854
+ },
855
+ node
856
+ );
840
857
 
841
858
  return {
842
859
  nextWorkflowData: {
package/api/libs/jwt.js CHANGED
@@ -14,14 +14,9 @@ const getUser = async (node, teamDid, userDid) => {
14
14
 
15
15
  // eslint-disable-next-line no-unused-vars
16
16
  const initJwt = (node, options) => {
17
- const secret = options.sessionSecret;
18
- const ttl = options.sessionTtl || '1d';
17
+ const ttl = options.sessionTtl || '7d';
19
18
 
20
- if (!secret) {
21
- throw new Error('Auth service require a non-empty session secret to start');
22
- }
23
-
24
- const createSessionToken = async (did, { role, passport }) =>
19
+ const createSessionToken = async (did, { role, secret, passport }) =>
25
20
  createAuthToken({
26
21
  did,
27
22
  passport,
@@ -30,7 +25,7 @@ const initJwt = (node, options) => {
30
25
  expiresIn: ttl,
31
26
  });
32
27
 
33
- const verifySessionToken = (token, teamDid) =>
28
+ const verifySessionToken = (token, secret, teamDid) =>
34
29
  // eslint-disable-next-line implicit-arrow-linebreak
35
30
  new Promise((resolve, reject) => {
36
31
  jwt.verify(token, secret, async (err, decoded) => {
@@ -13,6 +13,7 @@ const uniqBy = require('lodash/uniqBy');
13
13
  const sortBy = require('lodash/sortBy');
14
14
  const joinUrl = require('url-join');
15
15
  const { getWalletDid } = require('@blocklet/meta/lib/did-utils');
16
+ const formatContext = require('@abtnode/util/lib/format-context');
16
17
 
17
18
  const { AuthenticationClient } = require('../libs/auth/adapters/auth0');
18
19
  const { getAvatarByEmail, transferPassport } = require('../libs/auth/utils');
@@ -64,7 +65,7 @@ async function login(req, node, options) {
64
65
  }
65
66
  const authClient = getAuthClient(blocklet, provider);
66
67
 
67
- const { did: teamDid, wallet: blockletWallet } = await req.getBlockletInfo();
68
+ const { did: teamDid, wallet: blockletWallet, secret } = await req.getBlockletInfo();
68
69
  const config = await req.getServiceConfig(NODE_SERVICES.AUTH, { componentId });
69
70
  const nodeInfo = await req.getNodeInfo();
70
71
  const { dataDir } = await getApplicationInfo({ node, nodeInfo, teamDid });
@@ -86,15 +87,18 @@ async function login(req, node, options) {
86
87
  blockletSk: blockletWallet.secretKey,
87
88
  },
88
89
  });
90
+ let doc;
91
+ let passportForLog;
89
92
  // 当前账户已存在,更新账户信息
90
93
  if (currentUser) {
91
94
  const allPassports = currentUser.passports || [];
92
95
  const validPassports = allPassports.filter((item) => item.status === PASSPORT_STATUS.VALID);
93
96
  const lastUsedPassport = last(sortBy(validPassports, 'lastLoginAt'));
97
+ passportForLog = lastUsedPassport;
94
98
  if (lastUsedPassport) {
95
99
  passport = pick(lastUsedPassport, ['id', 'name', 'role']);
96
100
  }
97
- await node.loginUser({
101
+ doc = await node.loginUser({
98
102
  teamDid,
99
103
  user: {
100
104
  did: currentUser.did,
@@ -116,7 +120,8 @@ async function login(req, node, options) {
116
120
  if (invitedUserOnly) {
117
121
  throw new Error(t('needInviteToLogin', locale));
118
122
  }
119
- await node.loginUser({
123
+ passportForLog = { name: 'Guest', role: 'guest' };
124
+ doc = await node.loginUser({
120
125
  teamDid,
121
126
  user: {
122
127
  connectedAccount: {
@@ -137,9 +142,20 @@ async function login(req, node, options) {
137
142
  await declareAccount({ wallet: userWallet, moniker: oauthInfo.nickname, blocklet });
138
143
  }
139
144
 
145
+ await node.createAuditLog(
146
+ {
147
+ action: 'login',
148
+ args: { teamDid, userDid: currentUser.did || userDid, passport: passportForLog, provider },
149
+ context: formatContext(Object.assign(req, { user: doc })),
150
+ result: doc,
151
+ },
152
+ node
153
+ );
154
+
140
155
  const { createSessionToken } = initJwt(node, options);
141
156
 
142
157
  const sessionToken = await createSessionToken(currentUser.did, {
158
+ secret,
143
159
  passport,
144
160
  role: passport.role,
145
161
  });
@@ -151,7 +167,7 @@ async function invite(req, node, options) {
151
167
  const blocklet = await req.getBlocklet();
152
168
  const authClient = getAuthClient(blocklet, provider);
153
169
 
154
- const { did: teamDid, wallet: blockletWallet } = await req.getBlockletInfo();
170
+ const { did: teamDid, wallet: blockletWallet, secret } = await req.getBlockletInfo();
155
171
  const nodeInfo = await req.getNodeInfo();
156
172
  const oauthInfo = await authClient.getProfile(token);
157
173
  const userWallet = fromAppDid(oauthInfo.sub, blockletWallet.secretKey, types.RoleType.ROLE_ACCOUNT);
@@ -250,7 +266,7 @@ async function invite(req, node, options) {
250
266
 
251
267
  const { createSessionToken } = initJwt(node, options);
252
268
 
253
- const sessionToken = await createSessionToken(userDid, { passport, role });
269
+ const sessionToken = await createSessionToken(userDid, { secret, passport, role });
254
270
  return sessionToken;
255
271
  }
256
272
 
@@ -302,6 +318,15 @@ async function bind(req, node, options) {
302
318
 
303
319
  const currentTime = new Date().toISOString();
304
320
 
321
+ const connectedAccount = {
322
+ provider,
323
+ id: userInfo.sub,
324
+ did: userWallet.address,
325
+ pk: userWallet.publicKey,
326
+ firstLoginAt: currentTime,
327
+ lastLoginAt: currentTime,
328
+ };
329
+
305
330
  await node.updateUser({
306
331
  teamDid,
307
332
  user: {
@@ -315,19 +340,13 @@ async function bind(req, node, options) {
315
340
  },
316
341
  {
317
342
  locale,
318
- connectedAccount: {
319
- provider,
320
- id: userInfo.sub,
321
- did: userWallet.address,
322
- pk: userWallet.publicKey,
323
- firstLoginAt: currentTime,
324
- lastLoginAt: currentTime,
325
- },
343
+ connectedAccount,
326
344
  }
327
345
  ),
328
346
  },
329
347
  });
330
348
  if (oauthUser) {
349
+ // NOTICE: 这种情况已经不存在了,目前只有当 oauthUser 不存在时,才能进行 connect 操作(将来可能放开这个限制) 2023-05-03
331
350
  // 将 oauth 绑定的 did 记录在 oauth 用户的表中
332
351
  await node.updateUser({
333
352
  teamDid,
@@ -349,6 +368,15 @@ async function bind(req, node, options) {
349
368
  }
350
369
  const nodeInfo = await req.getNodeInfo();
351
370
  await transferPassport(oauthUser, bindUser, { req, node, teamDid, nodeInfo });
371
+ await node.createAuditLog(
372
+ {
373
+ action: 'connectAccount',
374
+ args: { teamDid, connectedAccount, provider, userDid: bindUser.did },
375
+ context: formatContext(Object.assign(req, { user: bindUser })),
376
+ result: bindUser,
377
+ },
378
+ node
379
+ );
352
380
  }
353
381
 
354
382
  module.exports = {
@@ -401,21 +429,28 @@ module.exports = {
401
429
 
402
430
  server.post(`${prefix}/bind`, async (req, res) => {
403
431
  await bind(req, node, options);
404
- // TODO: @zhanghan 需要增加 auditLog
405
432
  res.status(200).send('');
406
433
  });
407
434
 
408
435
  server.post(`${prefix}/switch`, async (req, res) => {
409
436
  const userDid = req.user.did;
410
437
  const { passportId } = req.body;
411
- const { did: teamDid } = await req.getBlockletInfo();
438
+ const { did: teamDid, secret } = await req.getBlockletInfo();
412
439
  // NOTICE: 这里获取的 did 是当前登录用户的永久 did,无需查询 connectedAccount
413
440
  const user = await node.getUser({ teamDid, user: { did: userDid } });
414
441
  const { passports = [] } = user || {};
415
442
  const passport = passports.find((item) => item.id === passportId);
443
+ await node.createAuditLog(
444
+ {
445
+ action: 'switchPassport',
446
+ args: { teamDid, userDid, passport, provider: user?.extraConfigs?.sourceProvider },
447
+ context: formatContext(Object.assign(req, { user })),
448
+ result: user,
449
+ },
450
+ node
451
+ );
416
452
  const { createSessionToken } = initJwt(node, options);
417
- const sessionToken = await createSessionToken(userDid, { passport, role: passport.role });
418
- // TODO: @zhanghan 需要增加 auditLog
453
+ const sessionToken = await createSessionToken(userDid, { secret, passport, role: passport.role });
419
454
  res.status(200).send(sessionToken);
420
455
  });
421
456
 
@@ -432,7 +467,6 @@ module.exports = {
432
467
  };
433
468
  try {
434
469
  const result = await actionMap[action](req, node, options);
435
- // TODO: @zhanghan 需要增加 auditLog
436
470
  res.send(result);
437
471
  } catch (err) {
438
472
  res.status(400).send(err.message);
@@ -53,6 +53,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
53
53
  onAuth: async ({ claims, userDid, userPk, updateSession, extraParams, req, baseUrl }) => {
54
54
  const { locale, inviteId } = extraParams;
55
55
  const nodeInfo = await req.getNodeInfo();
56
+ const { secret } = await req.getBlockletInfo();
56
57
  const teamDid = req.headers['x-blocklet-did'];
57
58
  const statusEndpointBaseUrl = joinUrl(baseUrl, WELLKNOWN_SERVICE_PATH_PREFIX);
58
59
  const endpoint = baseUrl;
@@ -72,7 +73,7 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
72
73
  });
73
74
 
74
75
  // Generate new session token that client can save to localStorage
75
- const sessionToken = await createSessionToken(userDid, { passport, role });
76
+ const sessionToken = await createSessionToken(userDid, { secret, passport, role });
76
77
  await updateSession({ sessionToken }, true);
77
78
  await updateSession({ passportId: response.data.id });
78
79
  logger.info('invite.success', { userDid });
@@ -202,6 +202,7 @@ module.exports = function createRoutes(node, _, createSessionToken) {
202
202
  wallet: issuerWallet,
203
203
  passportColor,
204
204
  dataDir,
205
+ secret,
205
206
  } = await getApplicationInfo({ node, teamDid: appPid });
206
207
 
207
208
  const statusEndpointBaseUrl = baseUrl;
@@ -367,7 +368,7 @@ module.exports = function createRoutes(node, _, createSessionToken) {
367
368
  logger.info('transfer ownership success', { userDid });
368
369
 
369
370
  // Generate new session token that client can save to localStorage
370
- const sessionToken = await createSessionToken(userDid, { passport: vc, role });
371
+ const sessionToken = await createSessionToken(userDid, { secret, passport: vc, role });
371
372
  await updateSession({ sessionToken }, true);
372
373
  await updateSession({ passportId: vc?.id });
373
374
  logger.info('invite.success', { userDid });
@@ -48,6 +48,7 @@ module.exports = function createRoutes(node, _authenticator, createSessionToken)
48
48
  const blocklet = await req.getBlocklet();
49
49
  const teamDid = blocklet.meta.did;
50
50
  const user = await checkOwner({ node, userDid, blocklet });
51
+ const { secret } = await req.getBlockletInfo();
51
52
 
52
53
  // ensure owner proof form previous workflow
53
54
  if (!proof || !proof.claim || !proof.pk) {
@@ -109,7 +110,7 @@ module.exports = function createRoutes(node, _authenticator, createSessionToken)
109
110
  }
110
111
 
111
112
  // Generate new session token that client can save to localStorage
112
- const sessionToken = await createSessionToken(userDid, { role: 'owner' });
113
+ const sessionToken = await createSessionToken(userDid, { secret, role: 'owner' });
113
114
  await updateSession({ sessionToken }, true);
114
115
  logger.info('setup.connect.success', { userDid });
115
116
  } catch (err) {
@@ -69,7 +69,8 @@ const init = ({ node, options }) => {
69
69
  try {
70
70
  if (token) {
71
71
  const teamDid = req.getBlockletDid();
72
- const result = await verifySessionToken(token, teamDid);
72
+ const { secret } = await req.getBlockletInfo();
73
+ const result = await verifySessionToken(token, secret, teamDid);
73
74
  if (result && result.avatar && result.avatar.startsWith(USER_AVATAR_URL_PREFIX)) {
74
75
  result.avatar = `${WELLKNOWN_SERVICE_PATH_PREFIX}${USER_AVATAR_PATH_PREFIX}/${
75
76
  result.avatar.split('/').slice(-1)[0]
@@ -27,9 +27,10 @@ module.exports = {
27
27
  let nextToken = '';
28
28
  if (req.query[encKey]) {
29
29
  try {
30
+ const { secret } = await req.getBlockletInfo();
30
31
  const encryptionKey = decodeEncryptionKey(req.query[encKey]);
31
32
  nextToken = JSON.stringify(
32
- await createSessionToken(user.did, { passport: user.passport, role: user.role })
33
+ await createSessionToken(user.did, { secret, passport: user.passport, role: user.role })
33
34
  );
34
35
  nextToken = Buffer.from(SealedBox.seal(Buffer.from(nextToken), encryptionKey)).toString('base64');
35
36
  } catch {
@@ -88,7 +88,7 @@ module.exports = ({ node, req, options }) => {
88
88
  const did = req.getBlockletDid();
89
89
  const context = req.getServiceContext();
90
90
 
91
- return cache.getBlocklet({ did, context, node, force: useCache });
91
+ return cache.getBlocklet({ did, context, node, force: !useCache });
92
92
  };
93
93
 
94
94
  req.getNodeInfo = () => cache.getNodeInfo({ node });
@@ -1,29 +1,29 @@
1
1
  {
2
2
  "files": {
3
3
  "main.css": "/.blocklet/proxy/blocklet-service/static/css/main.632501d5.css",
4
- "main.js": "/.blocklet/proxy/blocklet-service/static/js/main.68e1dab9.js",
5
- "static/js/716.bcea7c98.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/716.bcea7c98.chunk.js",
4
+ "main.js": "/.blocklet/proxy/blocklet-service/static/js/main.ea4f5b3d.js",
5
+ "static/js/716.0d2a2d32.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/716.0d2a2d32.chunk.js",
6
6
  "static/js/359.c47779c2.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/359.c47779c2.chunk.js",
7
7
  "static/js/255.279b1bca.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/255.279b1bca.chunk.js",
8
8
  "static/js/371.f67a06b4.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/371.f67a06b4.chunk.js",
9
- "static/js/737.73437907.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/737.73437907.chunk.js",
10
- "static/js/460.9225f4c4.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/460.9225f4c4.chunk.js",
11
- "static/js/868.9c03fa86.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/868.9c03fa86.chunk.js",
12
- "static/js/547.614f46b8.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/547.614f46b8.chunk.js",
13
- "static/js/343.1aba65c1.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/343.1aba65c1.chunk.js",
14
- "static/js/682.c64ae291.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/682.c64ae291.chunk.js",
15
- "static/js/711.6c22b7c7.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/711.6c22b7c7.chunk.js",
16
- "static/js/437.d815f0c0.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/437.d815f0c0.chunk.js",
9
+ "static/js/737.15a41e1c.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/737.15a41e1c.chunk.js",
10
+ "static/js/460.4763afe0.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/460.4763afe0.chunk.js",
11
+ "static/js/868.ac8df3a0.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/868.ac8df3a0.chunk.js",
12
+ "static/js/547.03d5d719.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/547.03d5d719.chunk.js",
13
+ "static/js/343.3bc8fb37.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/343.3bc8fb37.chunk.js",
14
+ "static/js/682.a8bf723a.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/682.a8bf723a.chunk.js",
15
+ "static/js/711.56427a24.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/711.56427a24.chunk.js",
16
+ "static/js/437.075e8453.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/437.075e8453.chunk.js",
17
17
  "static/js/690.afb99ee7.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/690.afb99ee7.chunk.js",
18
18
  "static/js/576.d7d4814e.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/576.d7d4814e.chunk.js",
19
19
  "static/js/42.c390a3f4.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/42.c390a3f4.chunk.js",
20
- "static/js/21.e7883f61.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/21.e7883f61.chunk.js",
20
+ "static/js/21.4b495d85.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/21.4b495d85.chunk.js",
21
21
  "static/js/162.f681dc46.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/162.f681dc46.chunk.js",
22
22
  "static/js/610.40349d57.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/610.40349d57.chunk.js",
23
- "static/css/293.ea9ee64d.chunk.css": "/.blocklet/proxy/blocklet-service/static/css/293.ea9ee64d.chunk.css",
24
- "static/js/293.636e2bb7.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/293.636e2bb7.chunk.js",
23
+ "static/css/933.be984e1d.chunk.css": "/.blocklet/proxy/blocklet-service/static/css/933.be984e1d.chunk.css",
24
+ "static/js/933.5a8322ac.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/933.5a8322ac.chunk.js",
25
25
  "static/js/199.3d76c24b.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/199.3d76c24b.chunk.js",
26
- "static/js/573.2992dbf5.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/573.2992dbf5.chunk.js",
26
+ "static/js/573.b071429e.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/573.b071429e.chunk.js",
27
27
  "static/media/ubuntu-mono-all-400-normal.woff": "/.blocklet/proxy/blocklet-service/static/media/ubuntu-mono-all-400-normal.c879328bc62e9c68268f.woff",
28
28
  "static/media/lato-all-400-normal.woff": "/.blocklet/proxy/blocklet-service/static/media/lato-all-400-normal.3dc1eff492ab1f598560.woff",
29
29
  "static/media/iconify.cjs": "/.blocklet/proxy/blocklet-service/static/media/iconify.26e4076719101e021ba0.cjs",
@@ -46,32 +46,32 @@
46
46
  "router-template-styles/styles.css": "/.blocklet/proxy/blocklet-service/router-template-styles/styles.css",
47
47
  "index.html": "/.blocklet/proxy/blocklet-service/index.html",
48
48
  "main.632501d5.css.map": "/.blocklet/proxy/blocklet-service/static/css/main.632501d5.css.map",
49
- "main.68e1dab9.js.map": "/.blocklet/proxy/blocklet-service/static/js/main.68e1dab9.js.map",
50
- "716.bcea7c98.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/716.bcea7c98.chunk.js.map",
49
+ "main.ea4f5b3d.js.map": "/.blocklet/proxy/blocklet-service/static/js/main.ea4f5b3d.js.map",
50
+ "716.0d2a2d32.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/716.0d2a2d32.chunk.js.map",
51
51
  "359.c47779c2.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/359.c47779c2.chunk.js.map",
52
52
  "255.279b1bca.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/255.279b1bca.chunk.js.map",
53
53
  "371.f67a06b4.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/371.f67a06b4.chunk.js.map",
54
- "737.73437907.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/737.73437907.chunk.js.map",
55
- "460.9225f4c4.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/460.9225f4c4.chunk.js.map",
56
- "868.9c03fa86.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/868.9c03fa86.chunk.js.map",
57
- "547.614f46b8.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/547.614f46b8.chunk.js.map",
58
- "343.1aba65c1.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/343.1aba65c1.chunk.js.map",
59
- "682.c64ae291.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/682.c64ae291.chunk.js.map",
60
- "711.6c22b7c7.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/711.6c22b7c7.chunk.js.map",
61
- "437.d815f0c0.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/437.d815f0c0.chunk.js.map",
54
+ "737.15a41e1c.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/737.15a41e1c.chunk.js.map",
55
+ "460.4763afe0.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/460.4763afe0.chunk.js.map",
56
+ "868.ac8df3a0.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/868.ac8df3a0.chunk.js.map",
57
+ "547.03d5d719.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/547.03d5d719.chunk.js.map",
58
+ "343.3bc8fb37.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/343.3bc8fb37.chunk.js.map",
59
+ "682.a8bf723a.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/682.a8bf723a.chunk.js.map",
60
+ "711.56427a24.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/711.56427a24.chunk.js.map",
61
+ "437.075e8453.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/437.075e8453.chunk.js.map",
62
62
  "690.afb99ee7.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/690.afb99ee7.chunk.js.map",
63
63
  "576.d7d4814e.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/576.d7d4814e.chunk.js.map",
64
64
  "42.c390a3f4.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/42.c390a3f4.chunk.js.map",
65
- "21.e7883f61.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/21.e7883f61.chunk.js.map",
65
+ "21.4b495d85.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/21.4b495d85.chunk.js.map",
66
66
  "162.f681dc46.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/162.f681dc46.chunk.js.map",
67
67
  "610.40349d57.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/610.40349d57.chunk.js.map",
68
- "293.ea9ee64d.chunk.css.map": "/.blocklet/proxy/blocklet-service/static/css/293.ea9ee64d.chunk.css.map",
69
- "293.636e2bb7.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/293.636e2bb7.chunk.js.map",
68
+ "933.be984e1d.chunk.css.map": "/.blocklet/proxy/blocklet-service/static/css/933.be984e1d.chunk.css.map",
69
+ "933.5a8322ac.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/933.5a8322ac.chunk.js.map",
70
70
  "199.3d76c24b.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/199.3d76c24b.chunk.js.map",
71
- "573.2992dbf5.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/573.2992dbf5.chunk.js.map"
71
+ "573.b071429e.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/573.b071429e.chunk.js.map"
72
72
  },
73
73
  "entrypoints": [
74
74
  "static/css/main.632501d5.css",
75
- "static/js/main.68e1dab9.js"
75
+ "static/js/main.ea4f5b3d.js"
76
76
  ]
77
77
  }
package/build/index.html CHANGED
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"/><meta name="theme-color" content="#000000"/><title>Blocklet Service</title><script src=".well-known/service/api/env"></script><script src="/__blocklet__.js"></script><script defer="defer" src="/.blocklet/proxy/blocklet-service/static/js/main.68e1dab9.js"></script><link href="/.blocklet/proxy/blocklet-service/static/css/main.632501d5.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"/><meta name="theme-color" content="#000000"/><title>Blocklet Service</title><script src=".well-known/service/api/env"></script><script src="/__blocklet__.js"></script><script defer="defer" src="/.blocklet/proxy/blocklet-service/static/js/main.ea4f5b3d.js"></script><link href="/.blocklet/proxy/blocklet-service/static/css/main.632501d5.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
@@ -1,4 +1,4 @@
1
1
  .xterm{font-feature-settings:"liga" 0;position:relative;-moz-user-select:none;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{height:0;left:-9999em;opacity:0;overflow:hidden;position:absolute;resize:none;top:0;white-space:nowrap;width:0;z-index:-5}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;bottom:0;cursor:default;left:0;overflow-y:scroll;position:absolute;right:0;top:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{left:0;position:absolute;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;left:-9999em;line-height:normal;position:absolute;top:0;visibility:hidden}.xterm{cursor:text}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility,.xterm .xterm-message{bottom:0;color:transparent;left:0;position:absolute;right:0;top:0;z-index:10}.xterm .live-region{height:1px;left:-9999px;overflow:hidden;position:absolute;width:1px}.xterm-dim{opacity:.5}.xterm-underline{text-decoration:underline}@media (prefers-color-scheme:dark){.wmde-markdown,.wmde-markdown-var{--color-prettylights-syntax-comment:#8b949e;--color-prettylights-syntax-constant:#79c0ff;--color-prettylights-syntax-entity:#d2a8ff;--color-prettylights-syntax-storage-modifier-import:#c9d1d9;--color-prettylights-syntax-entity-tag:#7ee787;--color-prettylights-syntax-keyword:#ff7b72;--color-prettylights-syntax-string:#a5d6ff;--color-prettylights-syntax-variable:#ffa657;--color-prettylights-syntax-brackethighlighter-unmatched:#f85149;--color-prettylights-syntax-invalid-illegal-text:#f0f6fc;--color-prettylights-syntax-invalid-illegal-bg:#8e1519;--color-prettylights-syntax-carriage-return-text:#f0f6fc;--color-prettylights-syntax-carriage-return-bg:#b62324;--color-prettylights-syntax-string-regexp:#7ee787;--color-prettylights-syntax-markup-list:#f2cc60;--color-prettylights-syntax-markup-heading:#1f6feb;--color-prettylights-syntax-markup-italic:#c9d1d9;--color-prettylights-syntax-markup-bold:#c9d1d9;--color-prettylights-syntax-markup-deleted-text:#ffdcd7;--color-prettylights-syntax-markup-deleted-bg:#67060c;--color-prettylights-syntax-markup-inserted-text:#aff5b4;--color-prettylights-syntax-markup-inserted-bg:#033a16;--color-prettylights-syntax-markup-changed-text:#ffdfb6;--color-prettylights-syntax-markup-changed-bg:#5a1e02;--color-prettylights-syntax-markup-ignored-text:#c9d1d9;--color-prettylights-syntax-markup-ignored-bg:#1158c7;--color-prettylights-syntax-meta-diff-range:#d2a8ff;--color-prettylights-syntax-brackethighlighter-angle:#8b949e;--color-prettylights-syntax-sublimelinter-gutter-mark:#484f58;--color-prettylights-syntax-constant-other-reference-link:#a5d6ff;--color-fg-default:#c9d1d9;--color-fg-muted:#8b949e;--color-fg-subtle:#484f58;--color-canvas-default:#0d1117;--color-canvas-subtle:#161b22;--color-border-default:#30363d;--color-border-muted:#21262d;--color-neutral-muted:hsla(215,8%,47%,.4);--color-accent-fg:#58a6ff;--color-accent-emphasis:#1f6feb;--color-attention-subtle:rgba(187,128,9,.15);--color-danger-fg:#f85149;color-scheme:dark}}@media (prefers-color-scheme:light){.wmde-markdown,.wmde-markdown-var{--color-prettylights-syntax-comment:#6e7781;--color-prettylights-syntax-constant:#0550ae;--color-prettylights-syntax-entity:#8250df;--color-prettylights-syntax-storage-modifier-import:#24292f;--color-prettylights-syntax-entity-tag:#116329;--color-prettylights-syntax-keyword:#cf222e;--color-prettylights-syntax-string:#0a3069;--color-prettylights-syntax-variable:#953800;--color-prettylights-syntax-brackethighlighter-unmatched:#82071e;--color-prettylights-syntax-invalid-illegal-text:#f6f8fa;--color-prettylights-syntax-invalid-illegal-bg:#82071e;--color-prettylights-syntax-carriage-return-text:#f6f8fa;--color-prettylights-syntax-carriage-return-bg:#cf222e;--color-prettylights-syntax-string-regexp:#116329;--color-prettylights-syntax-markup-list:#3b2300;--color-prettylights-syntax-markup-heading:#0550ae;--color-prettylights-syntax-markup-italic:#24292f;--color-prettylights-syntax-markup-bold:#24292f;--color-prettylights-syntax-markup-deleted-text:#82071e;--color-prettylights-syntax-markup-deleted-bg:#ffebe9;--color-prettylights-syntax-markup-inserted-text:#116329;--color-prettylights-syntax-markup-inserted-bg:#dafbe1;--color-prettylights-syntax-markup-changed-text:#953800;--color-prettylights-syntax-markup-changed-bg:#ffd8b5;--color-prettylights-syntax-markup-ignored-text:#eaeef2;--color-prettylights-syntax-markup-ignored-bg:#0550ae;--color-prettylights-syntax-meta-diff-range:#8250df;--color-prettylights-syntax-brackethighlighter-angle:#57606a;--color-prettylights-syntax-sublimelinter-gutter-mark:#8c959f;--color-prettylights-syntax-constant-other-reference-link:#0a3069;--color-fg-default:#24292f;--color-fg-muted:#57606a;--color-fg-subtle:#6e7781;--color-canvas-default:#fff;--color-canvas-subtle:#f6f8fa;--color-border-default:#d0d7de;--color-border-muted:#d8dee4;--color-neutral-muted:rgba(175,184,193,.2);--color-accent-fg:#0969da;--color-accent-emphasis:#0969da;--color-attention-subtle:#fff8c5;--color-danger-fg:#cf222e;color-scheme:light}}[data-color-mode*=dark] .wmde-markdown,[data-color-mode*=dark] .wmde-markdown-var,body[data-color-mode*=dark]{--color-prettylights-syntax-comment:#8b949e;--color-prettylights-syntax-constant:#79c0ff;--color-prettylights-syntax-entity:#d2a8ff;--color-prettylights-syntax-storage-modifier-import:#c9d1d9;--color-prettylights-syntax-entity-tag:#7ee787;--color-prettylights-syntax-keyword:#ff7b72;--color-prettylights-syntax-string:#a5d6ff;--color-prettylights-syntax-variable:#ffa657;--color-prettylights-syntax-brackethighlighter-unmatched:#f85149;--color-prettylights-syntax-invalid-illegal-text:#f0f6fc;--color-prettylights-syntax-invalid-illegal-bg:#8e1519;--color-prettylights-syntax-carriage-return-text:#f0f6fc;--color-prettylights-syntax-carriage-return-bg:#b62324;--color-prettylights-syntax-string-regexp:#7ee787;--color-prettylights-syntax-markup-list:#f2cc60;--color-prettylights-syntax-markup-heading:#1f6feb;--color-prettylights-syntax-markup-italic:#c9d1d9;--color-prettylights-syntax-markup-bold:#c9d1d9;--color-prettylights-syntax-markup-deleted-text:#ffdcd7;--color-prettylights-syntax-markup-deleted-bg:#67060c;--color-prettylights-syntax-markup-inserted-text:#aff5b4;--color-prettylights-syntax-markup-inserted-bg:#033a16;--color-prettylights-syntax-markup-changed-text:#ffdfb6;--color-prettylights-syntax-markup-changed-bg:#5a1e02;--color-prettylights-syntax-markup-ignored-text:#c9d1d9;--color-prettylights-syntax-markup-ignored-bg:#1158c7;--color-prettylights-syntax-meta-diff-range:#d2a8ff;--color-prettylights-syntax-brackethighlighter-angle:#8b949e;--color-prettylights-syntax-sublimelinter-gutter-mark:#484f58;--color-prettylights-syntax-constant-other-reference-link:#a5d6ff;--color-fg-default:#c9d1d9;--color-fg-muted:#8b949e;--color-fg-subtle:#484f58;--color-canvas-default:#0d1117;--color-canvas-subtle:#161b22;--color-border-default:#30363d;--color-border-muted:#21262d;--color-neutral-muted:hsla(215,8%,47%,.4);--color-accent-fg:#58a6ff;--color-accent-emphasis:#1f6feb;--color-attention-subtle:rgba(187,128,9,.15);--color-danger-fg:#f85149;color-scheme:dark}[data-color-mode*=light] .wmde-markdown,[data-color-mode*=light] .wmde-markdown-var,body[data-color-mode*=light]{--color-prettylights-syntax-comment:#6e7781;--color-prettylights-syntax-constant:#0550ae;--color-prettylights-syntax-entity:#8250df;--color-prettylights-syntax-storage-modifier-import:#24292f;--color-prettylights-syntax-entity-tag:#116329;--color-prettylights-syntax-keyword:#cf222e;--color-prettylights-syntax-string:#0a3069;--color-prettylights-syntax-variable:#953800;--color-prettylights-syntax-brackethighlighter-unmatched:#82071e;--color-prettylights-syntax-invalid-illegal-text:#f6f8fa;--color-prettylights-syntax-invalid-illegal-bg:#82071e;--color-prettylights-syntax-carriage-return-text:#f6f8fa;--color-prettylights-syntax-carriage-return-bg:#cf222e;--color-prettylights-syntax-string-regexp:#116329;--color-prettylights-syntax-markup-list:#3b2300;--color-prettylights-syntax-markup-heading:#0550ae;--color-prettylights-syntax-markup-italic:#24292f;--color-prettylights-syntax-markup-bold:#24292f;--color-prettylights-syntax-markup-deleted-text:#82071e;--color-prettylights-syntax-markup-deleted-bg:#ffebe9;--color-prettylights-syntax-markup-inserted-text:#116329;--color-prettylights-syntax-markup-inserted-bg:#dafbe1;--color-prettylights-syntax-markup-changed-text:#953800;--color-prettylights-syntax-markup-changed-bg:#ffd8b5;--color-prettylights-syntax-markup-ignored-text:#eaeef2;--color-prettylights-syntax-markup-ignored-bg:#0550ae;--color-prettylights-syntax-meta-diff-range:#8250df;--color-prettylights-syntax-brackethighlighter-angle:#57606a;--color-prettylights-syntax-sublimelinter-gutter-mark:#8c959f;--color-prettylights-syntax-constant-other-reference-link:#0a3069;--color-fg-default:#24292f;--color-fg-muted:#57606a;--color-fg-subtle:#6e7781;--color-canvas-default:#fff;--color-canvas-subtle:#f6f8fa;--color-border-default:#d0d7de;--color-border-muted:#d8dee4;--color-neutral-muted:rgba(175,184,193,.2);--color-accent-fg:#0969da;--color-accent-emphasis:#0969da;--color-attention-subtle:#fff8c5;--color-danger-fg:#cf222e;color-scheme:light}.wmde-markdown{-webkit-text-size-adjust:100%;word-wrap:break-word;background-color:var(--color-canvas-default);color:var(--color-fg-default);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;font-size:16px;line-height:1.5}.wmde-markdown details,.wmde-markdown figcaption,.wmde-markdown figure{display:block}.wmde-markdown summary{display:list-item}.wmde-markdown [hidden]{display:none!important}.wmde-markdown a{background-color:transparent;color:var(--color-accent-fg);text-decoration:none}.wmde-markdown a:active,.wmde-markdown a:hover{outline-width:0}.wmde-markdown abbr[title]{border-bottom:none;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.wmde-markdown b,.wmde-markdown strong{font-weight:600}.wmde-markdown dfn{font-style:italic}.wmde-markdown h1{border-bottom:1px solid var(--color-border-muted);font-size:2em;font-weight:600;margin:.67em 0;padding-bottom:.3em}.wmde-markdown mark{background-color:var(--color-attention-subtle);color:var(--color-text-primary)}.wmde-markdown small{font-size:90%}.wmde-markdown sub,.wmde-markdown sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.wmde-markdown sub{bottom:-.25em}.wmde-markdown sup{top:-.5em}.wmde-markdown img{background-color:var(--color-canvas-default);border-style:none;box-sizing:content-box;max-width:100%}.wmde-markdown code,.wmde-markdown kbd,.wmde-markdown pre,.wmde-markdown samp{font-family:monospace,monospace;font-size:1em}.wmde-markdown figure{margin:1em 40px}.wmde-markdown hr{background:transparent;background-color:var(--color-border-default);border:0;box-sizing:content-box;height:.25em;margin:24px 0;overflow:hidden;padding:0}.wmde-markdown input{font:inherit;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible}.wmde-markdown [type=button],.wmde-markdown [type=reset],.wmde-markdown [type=submit]{-webkit-appearance:button}.wmde-markdown [type=button]::-moz-focus-inner,.wmde-markdown [type=reset]::-moz-focus-inner,.wmde-markdown [type=submit]::-moz-focus-inner{border-style:none;padding:0}.wmde-markdown [type=button]:-moz-focusring,.wmde-markdown [type=reset]:-moz-focusring,.wmde-markdown [type=submit]:-moz-focusring{outline:1px dotted ButtonText}.wmde-markdown [type=checkbox],.wmde-markdown [type=radio]{box-sizing:border-box;padding:0}.wmde-markdown [type=number]::-webkit-inner-spin-button,.wmde-markdown [type=number]::-webkit-outer-spin-button{height:auto}.wmde-markdown [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.wmde-markdown [type=search]::-webkit-search-cancel-button,.wmde-markdown [type=search]::-webkit-search-decoration{-webkit-appearance:none}.wmde-markdown ::-webkit-input-placeholder{color:inherit;opacity:.54}.wmde-markdown ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.wmde-markdown a:hover{text-decoration:underline}.wmde-markdown hr:after,.wmde-markdown hr:before{content:"";display:table}.wmde-markdown hr:after{clear:both}.wmde-markdown table{border-collapse:collapse;border-spacing:0;display:block;max-width:100%;overflow:auto;width:-webkit-max-content;width:max-content}.wmde-markdown td,.wmde-markdown th{padding:0}.wmde-markdown details summary{cursor:pointer}.wmde-markdown details:not([open])>:not(summary){display:none!important}.wmde-markdown kbd{background-color:var(--color-canvas-subtle);border-bottom-color:var(--color-neutral-muted);border:1px solid var(--color-neutral-muted);border-radius:6px;box-shadow:inset 0 -1px 0 var(--color-neutral-muted);color:var(--color-fg-default);display:inline-block;font:11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;line-height:10px;padding:3px 5px;vertical-align:middle}.wmde-markdown h1,.wmde-markdown h2,.wmde-markdown h3,.wmde-markdown h4,.wmde-markdown h5,.wmde-markdown h6{font-weight:600;line-height:1.25;margin-bottom:16px;margin-top:24px}.wmde-markdown h2{border-bottom:1px solid var(--color-border-muted);font-size:1.5em;font-weight:600;padding-bottom:.3em}.wmde-markdown h3{font-size:1.25em;font-weight:600}.wmde-markdown h4{font-size:1em;font-weight:600}.wmde-markdown h5{font-size:.875em;font-weight:600}.wmde-markdown h6{color:var(--color-fg-muted);font-size:.85em;font-weight:600}.wmde-markdown p{margin-bottom:10px;margin-top:0}.wmde-markdown blockquote{border-left:.25em solid var(--color-border-default);color:var(--color-fg-muted);margin:0;padding:0 1em}.wmde-markdown ol,.wmde-markdown ul{margin-bottom:0;margin-top:0;padding-left:2em}.wmde-markdown ol ol,.wmde-markdown ul ol{list-style-type:lower-roman}.wmde-markdown ol ol ol,.wmde-markdown ol ul ol,.wmde-markdown ul ol ol,.wmde-markdown ul ul ol{list-style-type:lower-alpha}.wmde-markdown dd{margin-left:0}.wmde-markdown code,.wmde-markdown pre,.wmde-markdown tt{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:12px}.wmde-markdown pre{word-wrap:normal;margin-bottom:0;margin-top:0}.wmde-markdown .octicon{fill:currentColor;display:inline-block;overflow:visible!important;vertical-align:text-bottom}.wmde-markdown ::-webkit-input-placeholder{color:var(--color-fg-subtle);opacity:1}.wmde-markdown ::placeholder{color:var(--color-fg-subtle);opacity:1}.wmde-markdown input::-webkit-inner-spin-button,.wmde-markdown input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}.wmde-markdown [data-catalyst]{display:block}.wmde-markdown:after,.wmde-markdown:before{content:"";display:table}.wmde-markdown:after{clear:both}.wmde-markdown>:first-child{margin-top:0!important}.wmde-markdown>:last-child{margin-bottom:0!important}.wmde-markdown a:not([href]){color:inherit;text-decoration:none}.wmde-markdown .absent{color:var(--color-danger-fg)}.wmde-markdown a.anchor{float:left;line-height:1;margin-left:-20px;padding-right:4px}.wmde-markdown .anchor:focus{outline:none}.wmde-markdown blockquote,.wmde-markdown details,.wmde-markdown dl,.wmde-markdown ol,.wmde-markdown p,.wmde-markdown pre,.wmde-markdown table,.wmde-markdown ul{margin-bottom:16px;margin-top:0}.wmde-markdown blockquote>:first-child{margin-top:0}.wmde-markdown blockquote>:last-child{margin-bottom:0}.wmde-markdown sup>a:before{content:"["}.wmde-markdown sup>a:after{content:"]"}.wmde-markdown h1 .octicon-link,.wmde-markdown h2 .octicon-link,.wmde-markdown h3 .octicon-link,.wmde-markdown h4 .octicon-link,.wmde-markdown h5 .octicon-link,.wmde-markdown h6 .octicon-link{color:var(--color-fg-default);vertical-align:middle;visibility:hidden}.wmde-markdown h1:hover .anchor,.wmde-markdown h2:hover .anchor,.wmde-markdown h3:hover .anchor,.wmde-markdown h4:hover .anchor,.wmde-markdown h5:hover .anchor,.wmde-markdown h6:hover .anchor{text-decoration:none}.wmde-markdown h1:hover .anchor .octicon-link,.wmde-markdown h2:hover .anchor .octicon-link,.wmde-markdown h3:hover .anchor .octicon-link,.wmde-markdown h4:hover .anchor .octicon-link,.wmde-markdown h5:hover .anchor .octicon-link,.wmde-markdown h6:hover .anchor .octicon-link{visibility:visible}.wmde-markdown h1 code,.wmde-markdown h1 tt,.wmde-markdown h2 code,.wmde-markdown h2 tt,.wmde-markdown h3 code,.wmde-markdown h3 tt,.wmde-markdown h4 code,.wmde-markdown h4 tt,.wmde-markdown h5 code,.wmde-markdown h5 tt,.wmde-markdown h6 code,.wmde-markdown h6 tt{font-size:inherit;padding:0 .2em}.wmde-markdown ol.no-list,.wmde-markdown ul.no-list{list-style-type:none;padding:0}.wmde-markdown ol[type="1"]{list-style-type:decimal}.wmde-markdown ol[type=a]{list-style-type:lower-alpha}.wmde-markdown ol[type=i]{list-style-type:lower-roman}.wmde-markdown div>ol:not([type]){list-style-type:decimal}.wmde-markdown ol ol,.wmde-markdown ol ul,.wmde-markdown ul ol,.wmde-markdown ul ul{margin-bottom:0;margin-top:0}.wmde-markdown li>p{margin-top:16px}.wmde-markdown li+li{margin-top:.25em}.wmde-markdown dl{padding:0}.wmde-markdown dl dt{font-size:1em;font-style:italic;font-weight:600;margin-top:16px;padding:0}.wmde-markdown dl dd{margin-bottom:16px;padding:0 16px}.wmde-markdown table th{font-weight:600}.wmde-markdown table td,.wmde-markdown table th{border:1px solid var(--color-border-default);padding:6px 13px}.wmde-markdown table tr{background-color:var(--color-canvas-default);border-top:1px solid var(--color-border-muted)}.wmde-markdown table tr:nth-child(2n){background-color:var(--color-canvas-subtle)}.wmde-markdown table img{background-color:transparent}.wmde-markdown img[align=right]{padding-left:20px}.wmde-markdown img[align=left]{padding-right:20px}.wmde-markdown .emoji{background-color:transparent;max-width:none;vertical-align:text-top}.wmde-markdown span.frame{display:block;overflow:hidden}.wmde-markdown span.frame>span{border:1px solid var(--color-border-default);display:block;float:left;margin:13px 0 0;overflow:hidden;padding:7px;width:auto}.wmde-markdown span.frame span img{display:block;float:left}.wmde-markdown span.frame span span{clear:both;color:var(--color-fg-default);display:block;padding:5px 0 0}.wmde-markdown span.align-center{clear:both;display:block;overflow:hidden}.wmde-markdown span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.wmde-markdown span.align-center span img{margin:0 auto;text-align:center}.wmde-markdown span.align-right{clear:both;display:block;overflow:hidden}.wmde-markdown span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.wmde-markdown span.align-right span img{margin:0;text-align:right}.wmde-markdown span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.wmde-markdown span.float-left span{margin:13px 0 0}.wmde-markdown span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.wmde-markdown span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.wmde-markdown code,.wmde-markdown tt{background-color:var(--color-neutral-muted);border-radius:6px;font-size:85%;margin:0;padding:.2em .4em}.wmde-markdown code br,.wmde-markdown tt br{display:none}.wmde-markdown del code{text-decoration:inherit}.wmde-markdown pre code{font-size:100%}.wmde-markdown pre>code{background:transparent;border:0;margin:0;padding:0;white-space:pre;word-break:normal}.wmde-markdown pre{background-color:var(--color-canvas-subtle);border-radius:6px;font-size:85%;line-height:1.45}.wmde-markdown pre code,.wmde-markdown pre tt{word-wrap:normal;background-color:transparent;border:0;display:inline;line-height:inherit;margin:0;max-width:auto;overflow:visible;padding:0}.wmde-markdown pre>code{display:block;overflow:auto;padding:16px}.wmde-markdown .csv-data td,.wmde-markdown .csv-data th{font-size:12px;line-height:1;overflow:hidden;padding:5px;text-align:left;white-space:nowrap}.wmde-markdown .csv-data .blob-num{background:var(--color-canvas-default);border:0;padding:10px 8px 9px;text-align:right}.wmde-markdown .csv-data tr{border-top:0}.wmde-markdown .csv-data th{background:var(--color-canvas-subtle);border-top:0;font-weight:600}.wmde-markdown .footnotes{border-top:1px solid var(--color-border-default);color:var(--color-fg-muted);font-size:12px}.wmde-markdown .footnotes ol{padding-left:16px}.wmde-markdown .footnotes li{position:relative}.wmde-markdown .footnotes li:target:before{border:2px solid var(--color-accent-emphasis);border-radius:6px;bottom:-8px;content:"";left:-24px;pointer-events:none;position:absolute;right:-8px;top:-8px}.wmde-markdown .footnotes li:target{color:var(--color-fg-default)}.wmde-markdown .footnotes .data-footnote-backref g-emoji{font-family:monospace}.wmde-markdown .task-list-item{list-style-type:none}.wmde-markdown .task-list-item label{font-weight:400}.wmde-markdown .task-list-item.enabled label{cursor:pointer}.wmde-markdown .task-list-item+.wmde-markdown .task-list-item{margin-top:3px}.wmde-markdown .task-list-item .handle{display:none}.wmde-markdown .task-list-item-checkbox,.wmde-markdown input[type=checkbox]{margin:0 .2em .25em -1.6em;vertical-align:middle}.wmde-markdown .contains-task-list:dir(rtl) .task-list-item-checkbox,.wmde-markdown .contains-task-list:dir(rtl) input[type=checkbox]{margin:0 -1.6em .25em .2em}.wmde-markdown ::-webkit-calendar-picker-indicator{-webkit-filter:invert(50%);filter:invert(50%)}.wmde-markdown pre[class*=language-]{position:relative}.wmde-markdown pre .copied{background:var(--color-border-default);border-radius:5px;color:var(--color-fg-defaul);cursor:pointer;display:flex;font-size:12px;padding:6px;position:absolute;right:6px;top:6px;transition:all .3s;visibility:hidden}.wmde-markdown pre .copied .octicon-copy{display:block}.wmde-markdown pre .copied .octicon-check{display:none}.wmde-markdown pre:hover .copied{visibility:visible}.wmde-markdown pre:hover .copied:hover{background:var(--color-prettylights-syntax-entity-tag);color:var(--color-canvas-default)}.wmde-markdown pre .copied.active,.wmde-markdown pre:hover .copied:active{background:#2e9b33;color:var(--color-canvas-default)}.wmde-markdown pre .active .octicon-copy{display:none}.wmde-markdown pre .active .octicon-check{display:block}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:var(--color-prettylights-syntax-comment)}.token.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.selector,.token.symbol,.token.tag{color:var(--color-prettylights-syntax-entity-tag)}.token.maybe-class-name{color:var(--color-prettylights-syntax-variable)}.token.attr-name,.token.boolean,.token.builtin,.token.char,.token.number,.token.operator,.token.property-access,.token.selector .token.class,.token.string{color:var(--color-prettylights-syntax-constant)}.token.deleted{color:var(--color-prettylights-syntax-markup-deleted-text)}.code-line .token.deleted{background-color:var(--color-prettylights-syntax-markup-deleted-bg)}.token.inserted{color:var(--color-prettylights-syntax-markup-inserted-text)}.code-line .token.inserted{background-color:var(--color-prettylights-syntax-markup-inserted-bg)}.token.variable{color:var(--color-prettylights-syntax-constant)}.language-css .token.string,.style .token.string,.token.atrule,.token.attr-value,.token.class-name,.token.color,.token.entity,.token.function,.token.url{color:var(--color-prettylights-syntax-string)}.token.important,.token.keyword,.token.regex,.token.rule{color:var(--color-prettylights-syntax-keyword)}.token.coord{color:var(--color-prettylights-syntax-meta-diff-range)}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}
2
2
 
3
3
  /*! @algolia/autocomplete-theme-classic 1.9.2 | MIT License | © Algolia, Inc. and contributors | https://github.com/algolia/autocomplete */:root{--aa-search-input-height:44px;--aa-input-icon-size:20px;--aa-base-unit:16;--aa-spacing-factor:1;--aa-spacing:calc(var(--aa-base-unit)*var(--aa-spacing-factor)*1px);--aa-spacing-half:calc(var(--aa-spacing)/2);--aa-panel-max-height:650px;--aa-base-z-index:9999;--aa-font-size:calc(var(--aa-base-unit)*1px);--aa-font-family:inherit;--aa-font-weight-medium:500;--aa-font-weight-semibold:600;--aa-font-weight-bold:700;--aa-icon-size:20px;--aa-icon-stroke-width:1.6;--aa-icon-color-rgb:119,119,163;--aa-icon-color-alpha:1;--aa-action-icon-size:20px;--aa-text-color-rgb:38,38,39;--aa-text-color-alpha:1;--aa-primary-color-rgb:62,52,211;--aa-primary-color-alpha:0.2;--aa-muted-color-rgb:128,126,163;--aa-muted-color-alpha:0.6;--aa-panel-border-color-rgb:128,126,163;--aa-panel-border-color-alpha:0.3;--aa-input-border-color-rgb:128,126,163;--aa-input-border-color-alpha:0.8;--aa-background-color-rgb:255,255,255;--aa-background-color-alpha:1;--aa-input-background-color-rgb:255,255,255;--aa-input-background-color-alpha:1;--aa-selected-color-rgb:179,173,214;--aa-selected-color-alpha:0.205;--aa-description-highlight-background-color-rgb:245,223,77;--aa-description-highlight-background-color-alpha:0.5;--aa-detached-media-query:(max-width:680px);--aa-detached-modal-media-query:(min-width:680px);--aa-detached-modal-max-width:680px;--aa-detached-modal-max-height:500px;--aa-overlay-color-rgb:115,114,129;--aa-overlay-color-alpha:0.4;--aa-panel-shadow:0 0 0 1px rgba(35,38,59,.1),0 6px 16px -4px rgba(35,38,59,.15);--aa-scrollbar-width:13px;--aa-scrollbar-track-background-color-rgb:234,234,234;--aa-scrollbar-track-background-color-alpha:1;--aa-scrollbar-thumb-background-color-rgb:var(--aa-background-color-rgb);--aa-scrollbar-thumb-background-color-alpha:1}@media (hover:none) and (pointer:coarse){:root{--aa-spacing-factor:1.2;--aa-action-icon-size:22px}}body.dark,body[data-theme=dark]{--aa-text-color-rgb:183,192,199;--aa-primary-color-rgb:146,138,255;--aa-muted-color-rgb:146,138,255;--aa-input-background-color-rgb:0,3,9;--aa-background-color-rgb:21,24,42;--aa-selected-color-rgb:146,138,255;--aa-selected-color-alpha:0.25;--aa-description-highlight-background-color-rgb:0 255 255;--aa-description-highlight-background-color-alpha:0.25;--aa-icon-color-rgb:119,119,163;--aa-panel-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--aa-scrollbar-track-background-color-rgb:44,46,64;--aa-scrollbar-thumb-background-color-rgb:var(--aa-background-color-rgb)}.aa-Autocomplete *,.aa-DetachedFormContainer *,.aa-Panel *{box-sizing:border-box}.aa-Autocomplete,.aa-DetachedFormContainer,.aa-Panel{color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-family:inherit;font-family:var(--aa-font-family);font-size:16px;font-size:var(--aa-font-size);font-weight:400;line-height:1em;margin:0;padding:0;text-align:left}.aa-Form{align-items:center;background-color:#fff;background-color:rgba(var(--aa-input-background-color-rgb),var(--aa-input-background-color-alpha));border:1px solid rgba(128,126,163,.8);border:1px solid rgba(var(--aa-input-border-color-rgb),var(--aa-input-border-color-alpha));border-radius:3px;display:flex;line-height:1em;margin:0;position:relative;width:100%}.aa-Form:focus-within{border-color:#3e34d3;border-color:rgba(var(--aa-primary-color-rgb),1);box-shadow:0 0 0 2px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);box-shadow:rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 2px,inset rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 2px;outline:medium none currentColor}.aa-InputWrapperPrefix{align-items:center;display:flex;flex-shrink:0;height:44px;height:var(--aa-search-input-height);order:1}.aa-Label,.aa-LoadingIndicator{cursor:auto;flex-shrink:0;height:100%;padding:0;text-align:left}.aa-Label svg,.aa-LoadingIndicator svg{stroke-width:1.6;stroke-width:var(--aa-icon-stroke-width);color:#3e34d3;color:rgba(var(--aa-primary-color-rgb),1);height:auto;max-height:20px;max-height:var(--aa-input-icon-size);width:20px;width:var(--aa-input-icon-size)}.aa-LoadingIndicator,.aa-SubmitButton{height:100%;padding-left:11px;padding-left:calc(var(--aa-spacing)*.75 - 1px);padding-right:8px;padding-right:var(--aa-spacing-half);width:47px;width:calc(var(--aa-spacing)*1.75 + var(--aa-icon-size) - 1px)}@media (hover:none) and (pointer:coarse){.aa-LoadingIndicator,.aa-SubmitButton{padding-left:3px;padding-left:calc(var(--aa-spacing-half)/2 - 1px);width:39px;width:calc(var(--aa-icon-size) + var(--aa-spacing)*1.25 - 1px)}}.aa-SubmitButton{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;margin:0}.aa-LoadingIndicator{align-items:center;display:flex;justify-content:center}.aa-LoadingIndicator[hidden]{display:none}.aa-InputWrapper{order:3;position:relative;width:100%}.aa-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font:inherit;height:44px;height:var(--aa-search-input-height);padding:0;width:100%}.aa-Input::-moz-placeholder{color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));opacity:1}.aa-Input::placeholder{color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));opacity:1}.aa-Input:focus{border-color:none;box-shadow:none;outline:none}.aa-Input::-webkit-search-cancel-button,.aa-Input::-webkit-search-decoration,.aa-Input::-webkit-search-results-button,.aa-Input::-webkit-search-results-decoration{-webkit-appearance:none;appearance:none}.aa-InputWrapperSuffix{align-items:center;display:flex;height:44px;height:var(--aa-search-input-height);order:4}.aa-ClearButton{align-items:center;background:none;border:0;color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));cursor:pointer;display:flex;height:100%;margin:0;padding:0 12.83333px;padding:0 calc(var(--aa-spacing)*.83333 - .5px)}@media (hover:none) and (pointer:coarse){.aa-ClearButton{padding:0 10.16667px;padding:0 calc(var(--aa-spacing)*.66667 - .5px)}}.aa-ClearButton:focus,.aa-ClearButton:hover{color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha))}.aa-ClearButton[hidden]{display:none}.aa-ClearButton svg{stroke-width:1.6;stroke-width:var(--aa-icon-stroke-width);width:20px;width:var(--aa-icon-size)}.aa-Panel{background-color:#fff;background-color:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));border-radius:4px;border-radius:calc(var(--aa-spacing)/4);box-shadow:0 0 0 1px rgba(35,38,59,.1),0 6px 16px -4px rgba(35,38,59,.15);box-shadow:var(--aa-panel-shadow);margin:8px 0 0;overflow:hidden;position:absolute;transition:opacity .2s ease-in,filter .2s ease-in}@media screen and (prefers-reduced-motion){.aa-Panel{transition:none}}.aa-Panel button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;margin:0;padding:0}.aa-PanelLayout{height:100%;margin:0;max-height:650px;max-height:var(--aa-panel-max-height);overflow-y:auto;padding:0;position:relative;text-align:left}.aa-PanelLayoutColumns--twoGolden{display:grid;grid-template-columns:39.2% auto;overflow:hidden;padding:0}.aa-PanelLayoutColumns--two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));overflow:hidden;padding:0}.aa-PanelLayoutColumns--three{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));overflow:hidden;padding:0}.aa-Panel--stalled .aa-Source{filter:grayscale(1);opacity:.8}.aa-Panel--scrollable{margin:0;max-height:650px;max-height:var(--aa-panel-max-height);overflow-x:hidden;overflow-y:auto;padding:8px;padding:var(--aa-spacing-half);scrollbar-color:#fff #eaeaea;scrollbar-color:rgba(var(--aa-scrollbar-thumb-background-color-rgb),var(--aa-scrollbar-thumb-background-color-alpha)) rgba(var(--aa-scrollbar-track-background-color-rgb),var(--aa-scrollbar-track-background-color-alpha));scrollbar-width:thin}.aa-Panel--scrollable::-webkit-scrollbar{width:13px;width:var(--aa-scrollbar-width)}.aa-Panel--scrollable::-webkit-scrollbar-track{background-color:#eaeaea;background-color:rgba(var(--aa-scrollbar-track-background-color-rgb),var(--aa-scrollbar-track-background-color-alpha))}.aa-Panel--scrollable::-webkit-scrollbar-thumb{background-color:#fff;background-color:rgba(var(--aa-scrollbar-thumb-background-color-rgb),var(--aa-scrollbar-thumb-background-color-alpha));border-color:#eaeaea;border-color:rgba(var(--aa-scrollbar-track-background-color-rgb),var(--aa-scrollbar-track-background-color-alpha));border-radius:9999px;border-style:solid;border-width:3px 2px 3px 3px}.aa-Source{margin:0;padding:0;position:relative;width:100%}.aa-Source:empty{display:none}.aa-SourceNoResults{font-size:1em;margin:0;padding:16px;padding:var(--aa-spacing)}.aa-List{list-style:none;margin:0}.aa-List,.aa-SourceHeader{padding:0;position:relative}.aa-SourceHeader{margin:8px .5em 8px 0;margin:var(--aa-spacing-half) .5em var(--aa-spacing-half) 0}.aa-SourceHeader:empty{display:none}.aa-SourceHeaderTitle{background:#fff;background:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));color:#3e34d3;color:rgba(var(--aa-primary-color-rgb),1);display:inline-block;font-size:.8em;font-weight:600;font-weight:var(--aa-font-weight-semibold);margin:0;padding:0 8px 0 0;padding:0 var(--aa-spacing-half) 0 0;position:relative;z-index:9999;z-index:var(--aa-base-z-index)}.aa-SourceHeaderLine{border-bottom:1px solid #3e34d3;border-bottom:1px solid rgba(var(--aa-primary-color-rgb),1);display:block;height:2px;left:0;margin:0;opacity:.3;padding:0;position:absolute;right:0;top:8px;top:var(--aa-spacing-half);z-index:9998;z-index:calc(var(--aa-base-z-index) - 1)}.aa-SourceFooterSeeAll{background:linear-gradient(180deg,#fff,rgba(128,126,163,.14));background:linear-gradient(180deg,rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha)),rgba(128,126,163,.14));border:1px solid rgba(128,126,163,.6);border:1px solid rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));border-radius:5px;box-shadow:inset 0 0 2px #fff,0 2px 2px -1px rgba(76,69,88,.15);color:inherit;font-size:.95em;font-weight:500;font-weight:var(--aa-font-weight-medium);padding:.475em 1em .6em;-webkit-text-decoration:none;text-decoration:none}.aa-SourceFooterSeeAll:focus,.aa-SourceFooterSeeAll:hover{border:1px solid #3e34d3;border:1px solid rgba(var(--aa-primary-color-rgb),1);color:#3e34d3;color:rgba(var(--aa-primary-color-rgb),1)}.aa-Item{align-items:center;border-radius:3px;cursor:pointer;display:grid;min-height:40px;min-height:calc(var(--aa-spacing)*2.5);padding:4px;padding:calc(var(--aa-spacing-half)/2)}.aa-Item[aria-selected=true]{background-color:rgba(179,173,214,.205);background-color:rgba(var(--aa-selected-color-rgb),var(--aa-selected-color-alpha))}.aa-Item[aria-selected=true] .aa-ActiveOnly,.aa-Item[aria-selected=true] .aa-ItemActionButton{visibility:visible}.aa-ItemIcon{stroke-width:1.6;stroke-width:var(--aa-icon-stroke-width);align-items:center;background:#fff;background:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));border-radius:3px;box-shadow:inset 0 0 0 1px rgba(128,126,163,.3);box-shadow:inset 0 0 0 1px rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha));color:#7777a3;color:rgba(var(--aa-icon-color-rgb),var(--aa-icon-color-alpha));display:flex;flex-shrink:0;font-size:.7em;height:28px;height:calc(var(--aa-icon-size) + var(--aa-spacing-half));justify-content:center;overflow:hidden;text-align:center;width:28px;width:calc(var(--aa-icon-size) + var(--aa-spacing-half))}.aa-ItemIcon img{height:auto;max-height:20px;max-height:calc(var(--aa-icon-size) + var(--aa-spacing-half) - 8px);max-width:20px;max-width:calc(var(--aa-icon-size) + var(--aa-spacing-half) - 8px);width:auto}.aa-ItemIcon svg{height:20px;height:var(--aa-icon-size);width:20px;width:var(--aa-icon-size)}.aa-ItemIcon--alignTop{align-self:flex-start}.aa-ItemIcon--noBorder{background:none;box-shadow:none}.aa-ItemIcon--picture{height:96px;width:96px}.aa-ItemIcon--picture img{max-height:100%;max-width:100%;padding:8px;padding:var(--aa-spacing-half)}.aa-ItemContent{grid-gap:8px;grid-gap:var(--aa-spacing-half);align-items:center;cursor:pointer;display:grid;gap:8px;gap:var(--aa-spacing-half);grid-auto-flow:column;line-height:1.25em;overflow:hidden}.aa-ItemContent:empty{display:none}.aa-ItemContent mark{background:none;color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-style:normal;font-weight:700;font-weight:var(--aa-font-weight-bold)}.aa-ItemContent--dual{display:flex;flex-direction:column;justify-content:space-between;text-align:left}.aa-ItemContent--dual .aa-ItemContentSubtitle,.aa-ItemContent--dual .aa-ItemContentTitle{display:block}.aa-ItemContent--indented{padding-left:36px;padding-left:calc(var(--aa-icon-size) + var(--aa-spacing))}.aa-ItemContentBody{grid-gap:4px;grid-gap:calc(var(--aa-spacing-half)/2);display:grid;gap:4px;gap:calc(var(--aa-spacing-half)/2)}.aa-ItemContentTitle{display:inline-block;margin:0 .5em 0 0;max-width:100%;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.aa-ItemContentSubtitle{font-size:.92em}.aa-ItemContentSubtitleIcon:before{border-color:rgba(128,126,163,.64);border-color:rgba(var(--aa-muted-color-rgb),.64);border-style:solid;content:"";display:inline-block;left:1px;position:relative;top:-3px}.aa-ItemContentSubtitle--inline .aa-ItemContentSubtitleIcon:before{border-width:0 0 1.5px;margin-left:8px;margin-left:var(--aa-spacing-half);margin-right:4px;margin-right:calc(var(--aa-spacing-half)/2);width:10px;width:calc(var(--aa-spacing-half) + 2px)}.aa-ItemContentSubtitle--standalone{grid-gap:8px;grid-gap:var(--aa-spacing-half);align-items:center;color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));display:grid;gap:8px;gap:var(--aa-spacing-half);grid-auto-flow:column;justify-content:start}.aa-ItemContentSubtitle--standalone .aa-ItemContentSubtitleIcon:before{border-radius:0 0 0 3px;border-width:0 0 1.5px 1.5px;height:8px;height:var(--aa-spacing-half);width:8px;width:var(--aa-spacing-half)}.aa-ItemContentSubtitleCategory{color:#807ea3;color:rgba(var(--aa-muted-color-rgb),1);font-weight:500}.aa-ItemContentDescription{color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-size:.85em;max-width:100%;overflow-x:hidden;text-overflow:ellipsis}.aa-ItemContentDescription:empty{display:none}.aa-ItemContentDescription mark{background:rgba(245,223,77,.5);background:rgba(var(--aa-description-highlight-background-color-rgb),var(--aa-description-highlight-background-color-alpha));color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-style:normal;font-weight:500;font-weight:var(--aa-font-weight-medium)}.aa-ItemContentDash{color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));display:none;opacity:.4}.aa-ItemContentTag{background-color:rgba(62,52,211,.2);background-color:rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha));border-radius:3px;margin:0 .4em 0 0;padding:.08em .3em}.aa-ItemLink,.aa-ItemWrapper{grid-gap:4px;grid-gap:calc(var(--aa-spacing-half)/2);align-items:center;color:inherit;display:grid;gap:4px;gap:calc(var(--aa-spacing-half)/2);grid-auto-flow:column;justify-content:space-between;width:100%}.aa-ItemLink{color:inherit;-webkit-text-decoration:none;text-decoration:none}.aa-ItemActions{display:grid;grid-auto-flow:column;height:100%;justify-self:end;margin:0 -5.33333px;margin:0 calc(var(--aa-spacing)/-3);padding:0 2px 0 0}.aa-ItemActionButton{align-items:center;background:none;border:0;color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));cursor:pointer;display:flex;flex-shrink:0;padding:0}.aa-ItemActionButton:focus svg,.aa-ItemActionButton:hover svg{color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha))}@media (hover:none) and (pointer:coarse){.aa-ItemActionButton:focus svg,.aa-ItemActionButton:hover svg{color:inherit}}.aa-ItemActionButton svg{stroke-width:1.6;stroke-width:var(--aa-icon-stroke-width);color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));margin:5.33333px;margin:calc(var(--aa-spacing)/3);width:20px;width:var(--aa-action-icon-size)}.aa-ActiveOnly{visibility:hidden}.aa-PanelHeader{align-items:center;background:#3e34d3;background:rgba(var(--aa-primary-color-rgb),1);color:#fff;display:grid;height:var(--aa-modal-header-height);margin:0;padding:8px 16px;padding:var(--aa-spacing-half) var(--aa-spacing);position:relative}.aa-PanelHeader:after{background-image:linear-gradient(#fff,hsla(0,0%,100%,0));background-image:linear-gradient(rgba(var(--aa-background-color-rgb),1),rgba(var(--aa-background-color-rgb),0));bottom:-8px;bottom:calc(var(--aa-spacing-half)*-1);content:"";height:8px;height:var(--aa-spacing-half);left:0;pointer-events:none;position:absolute;right:0}.aa-PanelFooter,.aa-PanelHeader:after{z-index:9999;z-index:var(--aa-base-z-index)}.aa-PanelFooter{background-color:#fff;background-color:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));box-shadow:inset 0 1px 0 rgba(128,126,163,.3);box-shadow:inset 0 1px 0 rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha));display:flex;justify-content:space-between;margin:0;padding:16px;padding:var(--aa-spacing);position:relative}.aa-PanelFooter:after{background-image:linear-gradient(hsla(0,0%,100%,0),rgba(128,126,163,.6));background-image:linear-gradient(rgba(var(--aa-background-color-rgb),0),rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha)));content:"";height:16px;height:var(--aa-spacing);left:0;opacity:.12;pointer-events:none;position:absolute;right:0;top:-16px;top:calc(var(--aa-spacing)*-1);z-index:9998;z-index:calc(var(--aa-base-z-index) - 1)}.aa-DetachedContainer{background:#fff;background:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));bottom:0;box-shadow:0 0 0 1px rgba(35,38,59,.1),0 6px 16px -4px rgba(35,38,59,.15);box-shadow:var(--aa-panel-shadow);display:flex;flex-direction:column;left:0;margin:0;overflow:hidden;padding:0;position:fixed;right:0;top:0;z-index:9999;z-index:var(--aa-base-z-index)}.aa-DetachedContainer:after{height:32px}.aa-DetachedContainer .aa-SourceHeader{margin:8px 0 8px 2px;margin:var(--aa-spacing-half) 0 var(--aa-spacing-half) 2px}.aa-DetachedContainer .aa-Panel{background-color:#fff;background-color:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));border-radius:0;box-shadow:none;flex-grow:1;margin:0;padding:0;position:relative}.aa-DetachedContainer .aa-PanelLayout{bottom:0;box-shadow:none;left:0;margin:0;max-height:none;overflow-y:auto;position:absolute;right:0;top:0;width:100%}.aa-DetachedFormContainer{border-bottom:1px solid rgba(128,126,163,.3);border-bottom:1px solid rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha));display:flex;flex-direction:row;justify-content:space-between;margin:0;padding:8px;padding:var(--aa-spacing-half)}.aa-DetachedCancelButton{background:none;border:0;border-radius:3px;color:inherit;color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));cursor:pointer;font:inherit;margin:0 0 0 8px;margin:0 0 0 var(--aa-spacing-half);padding:0 8px;padding:0 var(--aa-spacing-half)}.aa-DetachedCancelButton:focus,.aa-DetachedCancelButton:hover{box-shadow:inset 0 0 0 1px rgba(128,126,163,.3);box-shadow:inset 0 0 0 1px rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha))}.aa-DetachedContainer--modal{border-radius:6px;bottom:inherit;height:auto;margin:0 auto;max-width:680px;max-width:var(--aa-detached-modal-max-width);position:absolute;top:3%}.aa-DetachedContainer--modal .aa-PanelLayout{max-height:500px;max-height:var(--aa-detached-modal-max-height);padding-bottom:8px;padding-bottom:var(--aa-spacing-half);position:static}.aa-DetachedSearchButton{align-items:center;background-color:#fff;background-color:rgba(var(--aa-input-background-color-rgb),var(--aa-input-background-color-alpha));border:1px solid rgba(128,126,163,.8);border:1px solid rgba(var(--aa-input-border-color-rgb),var(--aa-input-border-color-alpha));border-radius:3px;color:rgba(128,126,163,.6);color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));cursor:pointer;display:flex;font:inherit;font-family:inherit;font-family:var(--aa-font-family);font-size:16px;font-size:var(--aa-font-size);height:44px;height:var(--aa-search-input-height);margin:0;padding:0 5.5px;padding:0 calc(var(--aa-search-input-height)/8);position:relative;text-align:left;width:100%}.aa-DetachedSearchButton:focus{border-color:#3e34d3;border-color:rgba(var(--aa-primary-color-rgb),1);box-shadow:0 0 0 3px rgba(62,52,211,.2),inset 0 0 0 2px rgba(62,52,211,.2);box-shadow:rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 3px,inset rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 2px;outline:medium none currentColor}.aa-DetachedSearchButtonIcon{align-items:center;color:#3e34d3;color:rgba(var(--aa-primary-color-rgb),1);cursor:auto;display:flex;flex-shrink:0;height:100%;justify-content:center;width:36px;width:calc(var(--aa-icon-size) + var(--aa-spacing))}.aa-DetachedSearchButtonQuery{color:#262627;color:rgba(var(--aa-text-color-rgb),1);line-height:1.25em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.aa-DetachedSearchButtonPlaceholder[hidden]{display:none}.aa-Detached{height:100vh;overflow:hidden}.aa-DetachedOverlay{background-color:hsla(244,6%,48%,.4);background-color:rgba(var(--aa-overlay-color-rgb),var(--aa-overlay-color-alpha));height:100vh;left:0;margin:0;padding:0;position:fixed;right:0;top:0;z-index:9998;z-index:calc(var(--aa-base-z-index) - 1)}.aa-GradientBottom,.aa-GradientTop{height:8px;height:var(--aa-spacing-half);left:0;pointer-events:none;position:absolute;right:0;z-index:9999;z-index:var(--aa-base-z-index)}.aa-GradientTop{background-image:linear-gradient(#fff,hsla(0,0%,100%,0));background-image:linear-gradient(rgba(var(--aa-background-color-rgb),1),rgba(var(--aa-background-color-rgb),0));top:0}.aa-GradientBottom{background-image:linear-gradient(hsla(0,0%,100%,0),#fff);background-image:linear-gradient(rgba(var(--aa-background-color-rgb),0),rgba(var(--aa-background-color-rgb),1));border-bottom-left-radius:4px;border-bottom-left-radius:calc(var(--aa-spacing)/4);border-bottom-right-radius:4px;border-bottom-right-radius:calc(var(--aa-spacing)/4);bottom:0}@media (hover:none) and (pointer:coarse){.aa-DesktopOnly{display:none}}@media (hover:hover){.aa-TouchOnly{display:none}}
4
- /*# sourceMappingURL=293.ea9ee64d.chunk.css.map*/
4
+ /*# sourceMappingURL=933.be984e1d.chunk.css.map*/