pierre-review 0.1.55 → 0.1.56

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.
@@ -2,7 +2,8 @@ import { config } from '../../config.js';
2
2
  import { accountToLocalUser } from '../../auth/account.js';
3
3
  import { accountIdOf } from '../plugins/auth.js';
4
4
  import { getProCapabilities } from '../../pro/contract.js';
5
- import { countNewMyTurnFeedItems, dismissMyTurn, getCompletedDismissals, getFeedLastSeenAt, getMyTurn, markFeedSeen, undismissMyTurn, } from '../../db/queries.js';
5
+ import { getFyiProvider } from '../../feed/fyi-provider.js';
6
+ import { dismissMyTurn, getCompletedDismissals, getFeedLastSeenAt, getMyTurn, markFeedSeen, undismissMyTurn, } from '../../db/queries.js';
6
7
  const dismissSchema = {
7
8
  body: {
8
9
  type: 'object',
@@ -24,11 +25,11 @@ export async function meRoutes(app) {
24
25
  const myTurn = await getMyTurn(accountId);
25
26
  // Feed "seen" marker + how many FYI items are new since. Only counted once a
26
27
  // baseline exists (feedLastSeenAt set by the first feed view) so a fresh account
27
- // never sees a scary first-load number.
28
+ // never sees a scary first-load number. FYI is a Pro capability — the count comes
29
+ // from the plugin's enricher (0 on the free tier, where there's no provider).
28
30
  const feedLastSeen = await getFeedLastSeenAt(accountId);
29
- const newFeedItems = feedLastSeen
30
- ? await countNewMyTurnFeedItems(accountId, feedLastSeen)
31
- : 0;
31
+ const fyi = getFyiProvider();
32
+ const newFeedItems = feedLastSeen && fyi ? await fyi.countNewSince(accountId, feedLastSeen) : 0;
32
33
  return {
33
34
  user,
34
35
  counts: {
@@ -14,6 +14,7 @@ const REASON_PRIORITY = [
14
14
  ];
15
15
  import { db, schema, isPg } from './client.js';
16
16
  import { runTransaction } from './client.js';
17
+ import { getFyiProvider } from '../feed/fyi-provider.js';
17
18
  import { config } from '../config.js';
18
19
  import { getProCapabilities } from '../pro/contract.js';
19
20
  import { createHash } from 'node:crypto';
@@ -1361,87 +1362,6 @@ async function getCommitThreadItems(accountId, opts) {
1361
1362
  }
1362
1363
  return out;
1363
1364
  }
1364
- async function getParticipatingPrIds(accountId, localUserId, prIds) {
1365
- const authored = new Set();
1366
- const requested = new Set();
1367
- const reviewed = new Set();
1368
- const commented = new Set();
1369
- const merged = new Set();
1370
- const all = new Set();
1371
- const empty = { all, authored, requested, reviewed, commented, merged };
1372
- if (localUserId == null || prIds.length === 0)
1373
- return empty;
1374
- for (const row of await db
1375
- .select({ id: pullRequests.id })
1376
- .from(pullRequests)
1377
- .where(and(eq(pullRequests.accountId, accountId), eq(pullRequests.authorId, localUserId), inArray(pullRequests.id, prIds)))
1378
- .execute()) {
1379
- authored.add(row.id);
1380
- all.add(row.id);
1381
- }
1382
- // PRs the viewer merged (even if they never reviewed) count as participation too — a
1383
- // merge is a strong "I own the outcome of this" signal, so later activity is FYI.
1384
- for (const row of await db
1385
- .select({ id: pullRequests.id })
1386
- .from(pullRequests)
1387
- .where(and(eq(pullRequests.accountId, accountId), eq(pullRequests.mergedById, localUserId), inArray(pullRequests.id, prIds)))
1388
- .execute()) {
1389
- merged.add(row.id);
1390
- all.add(row.id);
1391
- }
1392
- for (const row of await db
1393
- .select({ prId: reviewRequests.prId })
1394
- .from(reviewRequests)
1395
- .where(and(eq(reviewRequests.userId, localUserId), inArray(reviewRequests.prId, prIds)))
1396
- .execute()) {
1397
- requested.add(row.prId);
1398
- all.add(row.prId);
1399
- }
1400
- for (const row of await db
1401
- .select({ prId: reviews.prId })
1402
- .from(reviews)
1403
- .where(and(eq(reviews.authorId, localUserId), inArray(reviews.prId, prIds)))
1404
- .execute()) {
1405
- reviewed.add(row.prId);
1406
- all.add(row.prId);
1407
- }
1408
- for (const row of await db
1409
- .select({ prId: prComments.prId })
1410
- .from(prComments)
1411
- .where(and(eq(prComments.authorId, localUserId), inArray(prComments.prId, prIds)))
1412
- .execute()) {
1413
- commented.add(row.prId);
1414
- all.add(row.prId);
1415
- }
1416
- for (const row of await db
1417
- .select({ prId: reviewComments.prId })
1418
- .from(reviewComments)
1419
- .where(and(eq(reviewComments.authorId, localUserId), inArray(reviewComments.prId, prIds)))
1420
- .execute()) {
1421
- commented.add(row.prId);
1422
- all.add(row.prId);
1423
- }
1424
- return { all, authored, requested, reviewed, commented, merged };
1425
- }
1426
- // Map a viewer's participation in a PR to the ordered reason pills for its FYI card.
1427
- // Most-relevant first; the UI shows the primary. Empty when the viewer doesn't
1428
- // participate (non-my-turn row).
1429
- function myTurnReasonsFor(participation, prId) {
1430
- if (prId == null)
1431
- return [];
1432
- const reasons = [];
1433
- if (participation.requested.has(prId))
1434
- reasons.push('requested');
1435
- if (participation.authored.has(prId))
1436
- reasons.push('authored');
1437
- if (participation.merged.has(prId))
1438
- reasons.push('merged');
1439
- if (participation.reviewed.has(prId))
1440
- reasons.push('reviewed');
1441
- if (participation.commented.has(prId))
1442
- reasons.push('commented');
1443
- return reasons;
1444
- }
1445
1365
  // Claude Review runs surfaced in the consolidated feed as their own item kind. One item
1446
1366
  // per PR = that PR's most-recent SUCCEEDED run finished within the feed window, repo-scoped.
1447
1367
  // Gated on the feature flag (force-off in cloud) so no items appear where Claude Review
@@ -1541,35 +1461,6 @@ export async function markFeedSeen(accountId) {
1541
1461
  .execute();
1542
1462
  return now;
1543
1463
  }
1544
- // How many FYI (My-Turn) feed items are NEW since `since` — i.e. activity events (all
1545
- // feed types except plain commit pushes) that occurred after `since`, on a PR the viewer
1546
- // PARTICIPATES in, by someone other than the viewer. Mirrors the feed's `isMyTurn` rule
1547
- // (getConsolidatedFeed) as a bounded count for the Welcome-back banner; scoped to the
1548
- // account and cheap because `since` is normally recent (few rows). Returns 0 when there's
1549
- // no viewer identity or no baseline.
1550
- export async function countNewMyTurnFeedItems(accountId, since) {
1551
- const localUserId = await getAccountUserId(accountId);
1552
- if (localUserId == null)
1553
- return 0;
1554
- const rows = await db
1555
- .select({ prId: events.prId, actorId: events.actorId })
1556
- .from(events)
1557
- .where(and(eq(events.accountId, accountId), gt(events.occurredAt, since), ne(events.type, 'commit_pushed')))
1558
- .execute();
1559
- const prIds = [
1560
- ...new Set(rows.map((r) => r.prId).filter((x) => x != null)),
1561
- ];
1562
- if (prIds.length === 0)
1563
- return 0;
1564
- const participation = await getParticipatingPrIds(accountId, localUserId, prIds);
1565
- let n = 0;
1566
- for (const r of rows) {
1567
- if (r.prId != null && r.actorId !== localUserId && participation.all.has(r.prId)) {
1568
- n++;
1569
- }
1570
- }
1571
- return n;
1572
- }
1573
1464
  // ---- Team review-intelligence "Insights" (Pro; teamInsights) ----
1574
1465
  const INSIGHT_STALLED_REVIEW_HOURS = 24;
1575
1466
  const INSIGHT_UNTOUCHED_THREAD_HOURS = 24; // "> 1 day"
@@ -1639,10 +1530,13 @@ export async function getTeamMetrics(accountId, repoIds, nowMs) {
1639
1530
  const ciMergedPrev = { succ: 0, total: 0 };
1640
1531
  const failingAges = [];
1641
1532
  let ciFailingNow = 0;
1533
+ let openPrsNow = 0;
1642
1534
  for (const p of prs) {
1643
1535
  const openedMs = p.openedAt.getTime();
1644
1536
  if (openedMs >= windowStartMs)
1645
1537
  openedSeries[bi(openedMs)] += 1;
1538
+ if (p.state === 'open' && !p.isDraft)
1539
+ openPrsNow += 1;
1646
1540
  if (p.firstReviewAt != null) {
1647
1541
  const ttfr = (p.firstReviewAt.getTime() - openedMs) / 3_600_000;
1648
1542
  if (ttfr >= 0) {
@@ -1746,6 +1640,7 @@ export async function getTeamMetrics(accountId, repoIds, nowMs) {
1746
1640
  return {
1747
1641
  sprintDays: 14,
1748
1642
  weekBuckets,
1643
+ openPrs: openPrsNow,
1749
1644
  merges: { value: mergesCur, previous: mergesPrev },
1750
1645
  leadTimeHours: { value: medianOf(leadCur), previous: medianOf(leadPrev) },
1751
1646
  timeToFirstReviewHours: { value: medianOf(ttfrCur), previous: medianOf(ttfrPrev) },
@@ -1760,7 +1655,12 @@ export async function getTeamMetrics(accountId, repoIds, nowMs) {
1760
1655
  ciFailureReasons,
1761
1656
  };
1762
1657
  }
1763
- const METRIC_DETAIL_CAP = 100; // per-list cap for the drill-down
1658
+ // Per-list safety cap for the drill-down. Deliberately GENEROUS: the lists are already
1659
+ // bounded (the 2-week sprint window for merges / review-latency / recovery; the open-PR
1660
+ // backlog for lead-time / red-now), so 500 shows every entry for any realistic sprint —
1661
+ // it's a guard against a pathological payload, not a display limit (a low cap like 100
1662
+ // looked like a rounded "real" count in the tab badges).
1663
+ const METRIC_DETAIL_CAP = 500;
1764
1664
  // The per-metric PR lists behind the 6 flow-metric tiles (the drill-down). A heavier,
1765
1665
  // on-demand read than getTeamMetrics — loaded only when a tile is clicked — over the
1766
1666
  // WATCHED repos + the current sprint. Returns the PRs behind each tile with the
@@ -1772,6 +1672,7 @@ export async function getTeamMetricsDetail(accountId) {
1772
1672
  const sprint = { from: sprintFrom.toISOString(), to: new Date(now).toISOString() };
1773
1673
  const empty = {
1774
1674
  sprint,
1675
+ openPrs: [],
1775
1676
  merges: [],
1776
1677
  leadTime: [],
1777
1678
  reviewLatency: [],
@@ -1884,6 +1785,15 @@ export async function getTeamMetricsDetail(accountId) {
1884
1785
  const mergedInSprint = prs.filter((p) => p.state === 'merged' && p.mergedAt != null && p.mergedAt.getTime() >= sprintFromMs);
1885
1786
  const openNonDraft = prs.filter((p) => p.state === 'open' && !p.isDraft);
1886
1787
  const isRed = (ci) => ci === 'failure' || ci === 'error';
1788
+ // (0) OPEN PRS — every currently-open, non-draft PR, longest-open first. The metric-
1789
+ // specific figure is the open age (open→now), shown in the same "lead time"-style column.
1790
+ const openPrs = openNonDraft
1791
+ .map((p) => ({
1792
+ ...base(p),
1793
+ leadTimeHours: (now - p.openedAt.getTime()) / 3_600_000,
1794
+ }))
1795
+ .sort((a, b) => (b.leadTimeHours ?? 0) - (a.leadTimeHours ?? 0))
1796
+ .slice(0, METRIC_DETAIL_CAP);
1887
1797
  // (1) MERGES — merged in the sprint, newest first (client groups per repo).
1888
1798
  const merges = mergedInSprint
1889
1799
  .slice()
@@ -1978,6 +1888,7 @@ export async function getTeamMetricsDetail(accountId) {
1978
1888
  : [];
1979
1889
  return {
1980
1890
  sprint,
1891
+ openPrs,
1981
1892
  merges,
1982
1893
  leadTime,
1983
1894
  reviewLatency,
@@ -2120,6 +2031,7 @@ export async function getTeamInsights(accountId) {
2120
2031
  changedFiles: p.changedFiles,
2121
2032
  additions: p.additions,
2122
2033
  deletions: p.deletions,
2034
+ openedAt: p.openedAt.toISOString(),
2123
2035
  ageHours,
2124
2036
  requestedReviewerIds: reviewers,
2125
2037
  });
@@ -2136,6 +2048,7 @@ export async function getTeamInsights(accountId) {
2136
2048
  prTitle: pullRequests.title,
2137
2049
  repoId: pullRequests.repoId,
2138
2050
  authorId: pullRequests.authorId,
2051
+ openedAt: pullRequests.openedAt,
2139
2052
  ciStatus: pullRequests.ciStatus,
2140
2053
  changedFiles: pullRequests.changedFiles,
2141
2054
  additions: pullRequests.additions,
@@ -2167,6 +2080,7 @@ export async function getTeamInsights(accountId) {
2167
2080
  changedFiles: t.changedFiles,
2168
2081
  additions: t.additions,
2169
2082
  deletions: t.deletions,
2083
+ openedAt: t.openedAt.toISOString(),
2170
2084
  threadId: t.threadId,
2171
2085
  path: t.path,
2172
2086
  ageHours,
@@ -2303,6 +2217,7 @@ export async function getTeamInsights(accountId) {
2303
2217
  changedFiles: p.changedFiles,
2304
2218
  additions: p.additions,
2305
2219
  deletions: p.deletions,
2220
+ openedAt: p.openedAt.toISOString(),
2306
2221
  topPaths: paths.slice(0, 5),
2307
2222
  suggestedReviewers: suggested,
2308
2223
  });
@@ -2322,36 +2237,19 @@ export async function getConsolidatedFeed(accountId, opts = {}) {
2322
2237
  : new Set();
2323
2238
  const notBot = (id) => !excludeBots || id == null || !botIds.has(id);
2324
2239
  const feedSince = new Date(Date.now() - 14 * 24 * 60 * 60 * 1000);
2325
- const [feed, commitItems, claudeItems, localUserId] = await Promise.all([
2240
+ const [feed, commitItems, claudeItems] = await Promise.all([
2326
2241
  getFeed(accountId, { daysBefore: 14, repoIds, userIds }),
2327
2242
  // Commit-push activity that ADDRESSED a review thread (the only commit rows we surface
2328
2243
  // — plain pushes are noise). Each carries the affected threads inline.
2329
2244
  getCommitThreadItems(accountId, { repoIds, userIds, botIds, since: feedSince }),
2330
2245
  // Claude Review runs surfaced as their own feed item kind (local-only; empty in cloud).
2331
2246
  getClaudeReviewFeedItems(accountId, repoIds, feedSince),
2332
- getAccountUserId(accountId),
2333
2247
  ]);
2334
- // Participation ("is this PR mine?") drives the isMyTurn flag: which of the PRs the feed
2335
- // references does the viewer participate in a direct linkage to their account based on
2336
- // past activity. Resolved once for every PR on the (uncapped) stream.
2337
- const candidatePrIds = new Set();
2338
- for (const f of feed.events)
2339
- if (f.prId != null)
2340
- candidatePrIds.add(f.prId);
2341
- for (const it of commitItems)
2342
- if (it.prId != null)
2343
- candidatePrIds.add(it.prId);
2344
- const participation = await getParticipatingPrIds(accountId, localUserId, [...candidatePrIds]);
2345
- // An event is "my turn" when it's on a PR I participate in AND the actor isn't me (my own
2346
- // actions don't need my attention). The reason tag colours the badge.
2347
- const isMine = (prId, actorId) => localUserId != null && prId != null && actorId !== localUserId && participation.all.has(prId);
2348
- const myTurnReason = (prId) => prId == null
2349
- ? null
2350
- : participation.requested.has(prId)
2351
- ? 'awaiting_your_review'
2352
- : participation.authored.has(prId)
2353
- ? 'your_pr_new_comments'
2354
- : null;
2248
+ // The FYI / "My Turn" participation flag (isMyTurn / myTurnReasons / reasonTag) is a PAID
2249
+ // capability computed by the @pierre/pro plugin's registered enricher (see fyi-provider.ts).
2250
+ // Core builds every item as a PLAIN row (isMyTurn:false); the enricher, if present, flags
2251
+ // them below BEFORE the cap, so uncapped My-Turn rows survive. Without the plugin the feed
2252
+ // stays a plain chronological stream.
2355
2253
  const usersById = new Map();
2356
2254
  for (const u of feed.users)
2357
2255
  usersById.set(u.id, u);
@@ -2363,18 +2261,17 @@ export async function getConsolidatedFeed(accountId, opts = {}) {
2363
2261
  byId.set(it.id, it);
2364
2262
  items.push(it);
2365
2263
  };
2366
- // Activity events → one row each, flagged isMyTurn by participation. There is no longer a
2367
- // synthesized "My Turn" layer (nor its dedup) the flag on the real event carries it,
2368
- // so every underlying event is exactly one row.
2264
+ // Activity events → one row each, as PLAIN rows (isMyTurn:false). The Pro enricher flags
2265
+ // participation below; without it every row stays plain. Exactly one row per underlying
2266
+ // event (no synthesized "My Turn" layer / dedup).
2369
2267
  for (const f of feed.events) {
2370
2268
  // excludeBots: drop bot-authored activity (getFeed doesn't filter bots).
2371
2269
  if (!notBot(f.actorId))
2372
2270
  continue;
2373
- const mine = isMine(f.prId, f.actorId);
2374
2271
  push({
2375
2272
  id: `feed:${f.id}`,
2376
- isMyTurn: mine,
2377
- myTurnReasons: mine ? myTurnReasonsFor(participation, f.prId) : [],
2273
+ isMyTurn: false,
2274
+ myTurnReasons: [],
2378
2275
  kind: f.type,
2379
2276
  occurredAt: f.occurredAt,
2380
2277
  repoId: f.repoId,
@@ -2390,7 +2287,7 @@ export async function getConsolidatedFeed(accountId, opts = {}) {
2390
2287
  commentId: f.type === 'pr_comment' ? f.refId : null,
2391
2288
  path: null,
2392
2289
  line: null,
2393
- reasonTag: mine ? myTurnReason(f.prId) : null,
2290
+ reasonTag: null,
2394
2291
  reviewState: f.reviewState,
2395
2292
  githubUrl: f.prNumber != null ? `https://github.com/${f.repoFullName}/pull/${f.prNumber}` : null,
2396
2293
  mergedById: null,
@@ -2405,19 +2302,17 @@ export async function getConsolidatedFeed(accountId, opts = {}) {
2405
2302
  });
2406
2303
  }
2407
2304
  // Commit-push items (already repo/member/bot-scoped + thread-enriched in the SQL helper).
2408
- // Flag them the same way, then append.
2409
- for (const it of commitItems) {
2410
- it.isMyTurn = isMine(it.prId, it.actorId);
2411
- if (it.isMyTurn) {
2412
- it.reasonTag = myTurnReason(it.prId);
2413
- it.myTurnReasons = myTurnReasonsFor(participation, it.prId);
2414
- }
2305
+ // Pushed as plain rows; the Pro enricher flags participation below.
2306
+ for (const it of commitItems)
2415
2307
  push(it);
2416
- }
2417
2308
  // Claude Review items — a distinct kind (never bot/member-scoped). Kept out of the FYI
2418
2309
  // flow but always retained (see the caps below) so the "Claude Reviews" pill finds them.
2419
2310
  for (const it of claudeItems)
2420
2311
  push(it);
2312
+ // FYI / "My Turn" enrichment (Pro): flag each item `isMyTurn` by the viewer's participation
2313
+ // in its PR. Runs BEFORE the cap so uncapped My-Turn rows survive. No-op (feed stays plain)
2314
+ // when the plugin isn't loaded — the free tier.
2315
+ await getFyiProvider()?.enrich(accountId, items);
2421
2316
  // Pure chronological — newest first. Keep every My Turn item AND every Claude-review item
2422
2317
  // (both are always relevant); cap the plain activity rows so a busy multi-repo account
2423
2318
  // doesn't render thousands of them.
@@ -0,0 +1,10 @@
1
+ // Process-local singleton, registered once at boot inside the plugin's register(). Inert in
2
+ // OSS (no plugin → never registered → the feed stays plain and the banner count stays 0).
3
+ let provider = null;
4
+ export function registerFyiProvider(p) {
5
+ provider = p;
6
+ }
7
+ export function getFyiProvider() {
8
+ return provider;
9
+ }
10
+ //# sourceMappingURL=fyi-provider.js.map
package/dist/pro/bind.js CHANGED
@@ -7,6 +7,7 @@ import { db, schema, runTransaction, isPg } from '../db/client.js';
7
7
  import * as hostQueries from '../db/queries.js';
8
8
  import { recordAiUsage, getAiUsageSummary } from '../db/usage.js';
9
9
  import { reviewEvents, registerLearningsProvider } from '../review/events.js';
10
+ import { registerFyiProvider } from '../feed/fyi-provider.js';
10
11
  import { cheapComplete } from '../review/llm.js';
11
12
  import { detectClaudeAuth } from '../review/auth.js';
12
13
  import { hasUserAnthropicKey, setUserAnthropicKey, } from '../review/local-settings.js';
@@ -43,7 +44,7 @@ export async function bindProPlugin(app) {
43
44
  if (!mod)
44
45
  return;
45
46
  const plugin = (mod.default ?? mod);
46
- if (plugin?.apiVersion !== 7 || typeof plugin.register !== 'function') {
47
+ if (plugin?.apiVersion !== 8 || typeof plugin.register !== 'function') {
47
48
  app.log.warn({ apiVersion: plugin?.apiVersion }, 'pro contract mismatch — skipped');
48
49
  return;
49
50
  }
@@ -86,6 +87,7 @@ export async function bindProPlugin(app) {
86
87
  recordAiUsage: (row) => recordAiUsage(row),
87
88
  reviewEvents,
88
89
  registerLearningsProvider,
90
+ registerFyiProvider,
89
91
  // AI Fix infra (per-account, cloud-ready). The host owns the security-sensitive
90
92
  // clone/agent/push machinery; the plugin only drives it with prompts/model.
91
93
  github: {
@@ -8,6 +8,7 @@ const EMPTY = {
8
8
  aiFix: false,
9
9
  teamInsights: false,
10
10
  claudeReview: false,
11
+ feedMyTurn: false,
11
12
  };
12
13
  let active = EMPTY;
13
14
  export function setProCapabilities(c) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pierre-review",
3
- "version": "0.1.55",
3
+ "version": "0.1.56",
4
4
  "description": "Dashboard for tracking your team's GitHub PR activity across repos — local (SQLite + gh) or self-hosted multi-tenant cloud (Postgres + GitHub App).",
5
5
  "type": "module",
6
6
  "author": "Alex Wakeman",
@@ -0,0 +1,10 @@
1
+ .vis-time-axis{position:relative;overflow:hidden}.vis-time-axis.vis-foreground{top:0;left:0;width:100%}.vis-time-axis.vis-background{position:absolute;top:0;left:0;width:100%;height:100%}.vis-time-axis .vis-text{position:absolute;color:#4d4d4d;padding:3px;overflow:hidden;box-sizing:border-box;white-space:nowrap}.vis-time-axis .vis-text.vis-measure{position:absolute;padding-left:0;padding-right:0;margin-left:0;margin-right:0;visibility:hidden}.vis-time-axis .vis-grid.vis-vertical{position:absolute;border-left:1px solid}.vis-time-axis .vis-grid.vis-vertical-rtl{position:absolute;border-right:1px solid}.vis-time-axis .vis-grid.vis-minor{border-color:#e5e5e5}.vis-time-axis .vis-grid.vis-major{border-color:#bfbfbf}.vis .overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-active{box-shadow:0 0 10px #86d5f8}.vis-custom-time{background-color:#6e94ff;width:2px;cursor:move;z-index:1}.vis-custom-time>.vis-custom-time-marker{background-color:inherit;color:#fff;font-size:12px;white-space:nowrap;padding:3px 5px;top:0;cursor:initial;z-index:inherit}.vis-current-time{background-color:#ff7f6e;width:2px;z-index:1;pointer-events:none}.vis-rolling-mode-btn{height:40px;width:40px;position:absolute;top:7px;right:20px;border-radius:50%;font-size:28px;cursor:pointer;opacity:.8;color:#fff;font-weight:700;text-align:center;background:#3876c2}.vis-rolling-mode-btn:before{content:"⛶"}.vis-rolling-mode-btn:hover{opacity:1}.vis-panel{position:absolute;padding:0;margin:0;box-sizing:border-box}.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right,.vis-panel.vis-top,.vis-panel.vis-bottom{border:1px #bfbfbf}.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right{border-top-style:solid;border-bottom-style:solid;overflow:hidden}.vis-left.vis-panel.vis-vertical-scroll,.vis-right.vis-panel.vis-vertical-scroll{height:100%;overflow-x:hidden;overflow-y:scroll}.vis-left.vis-panel.vis-vertical-scroll{direction:rtl}.vis-left.vis-panel.vis-vertical-scroll .vis-content,.vis-right.vis-panel.vis-vertical-scroll{direction:ltr}.vis-right.vis-panel.vis-vertical-scroll .vis-content{direction:rtl}.vis-panel.vis-center,.vis-panel.vis-top,.vis-panel.vis-bottom{border-left-style:solid;border-right-style:solid}.vis-background{overflow:hidden}.vis-panel>.vis-content{position:relative}.vis-panel .vis-shadow{position:absolute;width:100%;height:1px;box-shadow:0 0 10px #000c}.vis-panel .vis-shadow.vis-top{top:-1px;left:0}.vis-panel .vis-shadow.vis-bottom{bottom:-1px;left:0}.vis-graph-group0{fill:#4f81bd;fill-opacity:0;stroke-width:2px;stroke:#4f81bd}.vis-graph-group1{fill:#f79646;fill-opacity:0;stroke-width:2px;stroke:#f79646}.vis-graph-group2{fill:#8c51cf;fill-opacity:0;stroke-width:2px;stroke:#8c51cf}.vis-graph-group3{fill:#75c841;fill-opacity:0;stroke-width:2px;stroke:#75c841}.vis-graph-group4{fill:#ff0100;fill-opacity:0;stroke-width:2px;stroke:#ff0100}.vis-graph-group5{fill:#37d8e6;fill-opacity:0;stroke-width:2px;stroke:#37d8e6}.vis-graph-group6{fill:#042662;fill-opacity:0;stroke-width:2px;stroke:#042662}.vis-graph-group7{fill:#00ff26;fill-opacity:0;stroke-width:2px;stroke:#00ff26}.vis-graph-group8{fill:#f0f;fill-opacity:0;stroke-width:2px;stroke:#f0f}.vis-graph-group9{fill:#8f3938;fill-opacity:0;stroke-width:2px;stroke:#8f3938}.vis-timeline .vis-fill{fill-opacity:.1;stroke:none}.vis-timeline .vis-bar{fill-opacity:.5;stroke-width:1px}.vis-timeline .vis-point{stroke-width:2px;fill-opacity:1}.vis-timeline .vis-legend-background{stroke-width:1px;fill-opacity:.9;fill:#fff;stroke:#c2c2c2}.vis-timeline .vis-outline{stroke-width:1px;fill-opacity:1;fill:#fff;stroke:#e5e5e5}.vis-timeline .vis-icon-fill{fill-opacity:.3;stroke:none}.vis-timeline{position:relative;border:1px solid #bfbfbf;overflow:hidden;padding:0;margin:0;box-sizing:border-box}.vis-loading-screen{width:100%;height:100%;position:absolute;top:0;left:0}.vis [class*=span]{min-height:0;width:auto}.vis-item{position:absolute;color:#1a1a1a;border-color:#97b0f8;border-width:1px;background-color:#d5ddf6;display:inline-block;z-index:1}.vis-item.vis-selected{border-color:#ffc200;background-color:#fff785;z-index:2}.vis-editable.vis-selected{cursor:move}.vis-item.vis-point.vis-selected{background-color:#fff785}.vis-item.vis-box{text-align:center;border-style:solid;border-radius:2px}.vis-item.vis-point{background:none}.vis-item.vis-dot{position:absolute;padding:0;border-width:4px;border-style:solid;border-radius:4px}.vis-item.vis-range{border-style:solid;border-radius:2px;box-sizing:border-box}.vis-item.vis-background{border:none;background-color:#d5ddf666;box-sizing:border-box;padding:0;margin:0}.vis-item .vis-item-overflow{position:relative;width:100%;height:100%;padding:0;margin:0;overflow:hidden}.vis-item-visible-frame{white-space:nowrap}.vis-item.vis-range .vis-item-content{position:relative;display:inline-block}.vis-item.vis-background .vis-item-content{position:absolute;display:inline-block}.vis-item.vis-line{padding:0;position:absolute;width:0;border-left-width:1px;border-left-style:solid}.vis-item .vis-item-content{white-space:nowrap;box-sizing:border-box;padding:5px}.vis-item .vis-onUpdateTime-tooltip{position:absolute;background:#4f81bd;color:#fff;width:200px;text-align:center;white-space:nowrap;padding:5px;border-radius:1px;transition:.4s;-o-transition:.4s;-moz-transition:.4s;-webkit-transition:.4s}.vis-item .vis-delete,.vis-item .vis-delete-rtl{position:absolute;top:0;width:24px;height:24px;box-sizing:border-box;padding:0 5px;cursor:pointer;transition:background .2s linear}.vis-item .vis-delete{right:-24px}.vis-item .vis-delete-rtl{left:-24px}.vis-item .vis-delete:after,.vis-item .vis-delete-rtl:after{content:"×";color:red;font-family:arial,sans-serif;font-size:22px;font-weight:700;transition:color .2s linear}.vis-item .vis-delete:hover,.vis-item .vis-delete-rtl:hover{background:red}.vis-item .vis-delete:hover:after,.vis-item .vis-delete-rtl:hover:after{color:#fff}.vis-item .vis-drag-center{position:absolute;width:100%;height:100%;top:0;left:0;cursor:move}.vis-item.vis-range .vis-drag-left{position:absolute;width:24px;max-width:20%;min-width:2px;height:100%;top:0;left:-4px;cursor:w-resize}.vis-item.vis-range .vis-drag-right{position:absolute;width:24px;max-width:20%;min-width:2px;height:100%;top:0;right:-4px;cursor:e-resize}.vis-range.vis-item.vis-readonly .vis-drag-left,.vis-range.vis-item.vis-readonly .vis-drag-right{cursor:auto}.vis-item.vis-cluster{vertical-align:center;text-align:center;border-style:solid;border-radius:2px}.vis-item.vis-cluster-line{padding:0;position:absolute;width:0;border-left-width:1px;border-left-style:solid}.vis-item.vis-cluster-dot{position:absolute;padding:0;border-width:4px;border-style:solid;border-radius:4px}div.vis-tooltip{position:absolute;visibility:hidden;padding:5px;white-space:nowrap;font-family:verdana;font-size:14px;color:#000;background-color:#f5f4ed;border-radius:3px;border:1px solid #808074;box-shadow:3px 3px 10px #0003;pointer-events:none;z-index:5}.vis-itemset{position:relative;padding:0;margin:0;box-sizing:border-box}.vis-itemset .vis-background,.vis-itemset .vis-foreground{position:absolute;width:100%;height:100%;overflow:visible}.vis-axis{position:absolute;width:100%;height:0;left:0;z-index:1}.vis-foreground .vis-group{position:relative;box-sizing:border-box;border-bottom:1px solid #bfbfbf}.vis-foreground .vis-group:last-child{border-bottom:none}.vis-nesting-group{cursor:pointer}.vis-label.vis-nested-group.vis-group-level-unknown-but-gte1{background:#f5f5f5}.vis-label.vis-nested-group.vis-group-level-0{background-color:#fff}.vis-ltr .vis-label.vis-nested-group.vis-group-level-0 .vis-inner{padding-left:0}.vis-rtl .vis-label.vis-nested-group.vis-group-level-0 .vis-inner{padding-right:0}.vis-label.vis-nested-group.vis-group-level-1{background-color:#0000000d}.vis-ltr .vis-label.vis-nested-group.vis-group-level-1 .vis-inner{padding-left:15px}.vis-rtl .vis-label.vis-nested-group.vis-group-level-1 .vis-inner{padding-right:15px}.vis-label.vis-nested-group.vis-group-level-2{background-color:#0000001a}.vis-ltr .vis-label.vis-nested-group.vis-group-level-2 .vis-inner{padding-left:30px}.vis-rtl .vis-label.vis-nested-group.vis-group-level-2 .vis-inner{padding-right:30px}.vis-label.vis-nested-group.vis-group-level-3{background-color:#00000026}.vis-ltr .vis-label.vis-nested-group.vis-group-level-3 .vis-inner{padding-left:45px}.vis-rtl .vis-label.vis-nested-group.vis-group-level-3 .vis-inner{padding-right:45px}.vis-label.vis-nested-group.vis-group-level-4{background-color:#0003}.vis-ltr .vis-label.vis-nested-group.vis-group-level-4 .vis-inner{padding-left:60px}.vis-rtl .vis-label.vis-nested-group.vis-group-level-4 .vis-inner{padding-right:60px}.vis-label.vis-nested-group.vis-group-level-5{background-color:#00000040}.vis-ltr .vis-label.vis-nested-group.vis-group-level-5 .vis-inner{padding-left:75px}.vis-rtl .vis-label.vis-nested-group.vis-group-level-5 .vis-inner{padding-right:75px}.vis-label.vis-nested-group.vis-group-level-6{background-color:#0000004d}.vis-ltr .vis-label.vis-nested-group.vis-group-level-6 .vis-inner{padding-left:90px}.vis-rtl .vis-label.vis-nested-group.vis-group-level-6 .vis-inner{padding-right:90px}.vis-label.vis-nested-group.vis-group-level-7{background-color:#00000059}.vis-ltr .vis-label.vis-nested-group.vis-group-level-7 .vis-inner{padding-left:105px}.vis-rtl .vis-label.vis-nested-group.vis-group-level-7 .vis-inner{padding-right:105px}.vis-label.vis-nested-group.vis-group-level-8{background-color:#0006}.vis-ltr .vis-label.vis-nested-group.vis-group-level-8 .vis-inner{padding-left:120px}.vis-rtl .vis-label.vis-nested-group.vis-group-level-8 .vis-inner{padding-right:120px}.vis-label.vis-nested-group.vis-group-level-9{background-color:#00000073}.vis-ltr .vis-label.vis-nested-group.vis-group-level-9 .vis-inner{padding-left:135px}.vis-rtl .vis-label.vis-nested-group.vis-group-level-9 .vis-inner{padding-right:135px}.vis-label.vis-nested-group{background-color:#00000080}.vis-ltr .vis-label.vis-nested-group .vis-inner{padding-left:150px}.vis-rtl .vis-label.vis-nested-group .vis-inner{padding-right:150px}.vis-group-level-unknown-but-gte1{border:1px solid red}.vis-label.vis-nesting-group:before{display:inline-block;width:15px}.vis-label.vis-nesting-group.expanded:before{content:"▼"}.vis-label.vis-nesting-group.collapsed:before{content:"▶"}.vis-rtl .vis-label.vis-nesting-group.collapsed:before{content:"◀"}.vis-ltr .vis-label:not(.vis-nesting-group):not(.vis-group-level-0){padding-left:15px}.vis-rtl .vis-label:not(.vis-nesting-group):not(.vis-group-level-0){padding-right:15px}.vis-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-labelset{position:relative;overflow:hidden;box-sizing:border-box}.vis-labelset .vis-label{position:relative;left:0;top:0;width:100%;color:#4d4d4d;box-sizing:border-box;border-bottom:1px solid #bfbfbf}.vis-labelset .vis-label.draggable{cursor:pointer}.vis-group-is-dragging{background:#0000001a}.vis-labelset .vis-label:last-child{border-bottom:none}.vis-labelset .vis-label .vis-inner{display:inline-block;padding:5px}.vis-labelset .vis-label .vis-inner.vis-hidden{padding:0}div.vis-configuration{position:relative;display:block;float:left;font-size:12px}div.vis-configuration-wrapper{display:block;width:700px}div.vis-configuration-wrapper:after{clear:both;content:"";display:block}div.vis-configuration.vis-config-option-container{display:block;width:495px;background-color:#fff;border:2px solid #f7f8fa;border-radius:4px;margin-top:20px;left:10px;padding-left:5px}div.vis-configuration.vis-config-button{display:block;width:495px;height:25px;vertical-align:middle;line-height:25px;background-color:#f7f8fa;border:2px solid #ceced0;border-radius:4px;margin-top:20px;left:10px;padding-left:5px;cursor:pointer;margin-bottom:30px}div.vis-configuration.vis-config-button.hover{background-color:#4588e6;border:2px solid #214373;color:#fff}div.vis-configuration.vis-config-item{display:block;float:left;width:495px;height:25px;vertical-align:middle;line-height:25px}div.vis-configuration.vis-config-item.vis-config-s2{left:10px;background-color:#f7f8fa;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s3{left:20px;background-color:#e4e9f0;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s4{left:30px;background-color:#cfd8e6;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-header{font-size:18px;font-weight:700}div.vis-configuration.vis-config-label{width:120px;height:25px;line-height:25px}div.vis-configuration.vis-config-label.vis-config-s3{width:110px}div.vis-configuration.vis-config-label.vis-config-s4{width:100px}div.vis-configuration.vis-config-colorBlock{top:1px;width:30px;height:19px;border:1px solid #444444;border-radius:2px;padding:0;margin:0;cursor:pointer}input.vis-configuration.vis-config-checkbox{left:-5px}input.vis-configuration.vis-config-rangeinput{position:relative;top:-5px;width:60px;padding:1px;margin:0;pointer-events:none}input.vis-configuration.vis-config-range{-webkit-appearance:none;border:0px solid white;background-color:#0000;width:300px;height:20px}input.vis-configuration.vis-config-range::-webkit-slider-runnable-track{width:300px;height:5px;background:#dedede;background:linear-gradient(to bottom,#dedede,#c8c8c8 99%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#dedede",endColorstr="#c8c8c8",GradientType=0);border:1px solid #999999;box-shadow:#aaa 0 0 3px;border-radius:3px}input.vis-configuration.vis-config-range::-webkit-slider-thumb{-webkit-appearance:none;border:1px solid #14334b;height:17px;width:17px;border-radius:50%;background:#3876c2;background:linear-gradient(to bottom,#3876c2,#385380);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#3876c2",endColorstr="#385380",GradientType=0);box-shadow:#111927 0 0 1px;margin-top:-7px}input.vis-configuration.vis-config-range:focus{outline:none}input.vis-configuration.vis-config-range:focus::-webkit-slider-runnable-track{background:#9d9d9d;background:linear-gradient(to bottom,#9d9d9d,#c8c8c8 99%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#9d9d9d",endColorstr="#c8c8c8",GradientType=0)}input.vis-configuration.vis-config-range::-moz-range-track{width:300px;height:10px;background:#dedede;background:linear-gradient(to bottom,#dedede,#c8c8c8 99%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#dedede",endColorstr="#c8c8c8",GradientType=0);border:1px solid #999999;box-shadow:#aaa 0 0 3px;border-radius:3px}input.vis-configuration.vis-config-range::-moz-range-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:-moz-focusring{outline:1px solid white;outline-offset:-1px}input.vis-configuration.vis-config-range::-ms-track{width:300px;height:5px;background:transparent;border-color:transparent;border-width:6px 0;color:transparent}input.vis-configuration.vis-config-range::-ms-fill-lower{background:#777;border-radius:10px}input.vis-configuration.vis-config-range::-ms-fill-upper{background:#ddd;border-radius:10px}input.vis-configuration.vis-config-range::-ms-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:focus::-ms-fill-lower{background:#888}input.vis-configuration.vis-config-range:focus::-ms-fill-upper{background:#ccc}.vis-configuration-popup{position:absolute;background:#394c59d9;border:2px solid #f2faff;line-height:30px;height:30px;width:150px;text-align:center;color:#fff;font-size:14px;border-radius:4px;transition:opacity .3s ease-in-out}.vis-configuration-popup:after,.vis-configuration-popup:before{left:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.vis-configuration-popup:after{border-color:#88b7d500;border-left-color:#394c59d9;border-width:8px;margin-top:-8px}.vis-configuration-popup:before{border-color:#c2e1f500;border-left-color:#f2faff;border-width:12px;margin-top:-12px}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-horizontal{position:absolute;width:100%;height:0;border-bottom:1px solid}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-minor{border-color:#e5e5e5}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-major{border-color:#bfbfbf}.vis-data-axis .vis-y-axis.vis-major{width:100%;position:absolute;color:#4d4d4d;white-space:nowrap}.vis-data-axis .vis-y-axis.vis-major.vis-measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-minor{position:absolute;width:100%;color:#bebebe;white-space:nowrap}.vis-data-axis .vis-y-axis.vis-minor.vis-measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-title{position:absolute;color:#4d4d4d;white-space:nowrap;bottom:20px;text-align:center}.vis-data-axis .vis-y-axis.vis-title.vis-measure{padding:0;margin:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-title.vis-left{bottom:0;transform-origin:left bottom;transform:rotate(-90deg)}.vis-data-axis .vis-y-axis.vis-title.vis-right{bottom:0;transform-origin:right bottom;transform:rotate(90deg)}.vis-legend{background-color:#f7fcffa6;padding:5px;border:1px solid #b3b3b3;box-shadow:2px 2px 10px #9a9a9a8c}.vis-legend-text{white-space:nowrap;display:inline-block}pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
2
+ Theme: GitHub Dark
3
+ Description: Dark theme as seen on github.com
4
+ Author: github.com
5
+ Maintainer: @Hirse
6
+ Updated: 2021-05-15
7
+
8
+ Outdated base version: https://github.com/primer/github-syntax-dark
9
+ Current colors taken from GitHub's CSS
10
+ */.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#79c0ff}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-comment,.hljs-code,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.\!container{width:100%!important}.container{width:100%}@media(min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media(min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media(min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media(min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media(min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.bottom-0{bottom:0}.bottom-4{bottom:1rem}.left-0{left:0}.right-0{right:0}.right-1\.5{right:.375rem}.right-2{right:.5rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-full{top:100%}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.z-\[60\]{z-index:60}.-m-1{margin:-.25rem}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.ml-1{margin-left:.25rem}.ml-auto{margin-left:auto}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-7{margin-top:1.75rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.\!hidden{display:none!important}.hidden{display:none}.h-0{height:0px}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-20{height:5rem}.h-24{height:6rem}.h-3{height:.75rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-8{height:2rem}.h-\[120px\]{height:120px}.h-\[132px\]{height:132px}.h-full{height:100%}.max-h-32{max-height:8rem}.max-h-40{max-height:10rem}.max-h-56{max-height:14rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-72{max-height:18rem}.max-h-80{max-height:20rem}.max-h-96{max-height:24rem}.max-h-\[40rem\]{max-height:40rem}.max-h-\[80vh\]{max-height:80vh}.max-h-\[88vh\]{max-height:88vh}.min-h-0{min-height:0px}.min-h-\[42px\]{min-height:42px}.min-h-screen{min-height:100vh}.w-1\.5{width:.375rem}.w-1\/3{width:33.333333%}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-2\/3{width:66.666667%}.w-28{width:7rem}.w-3{width:.75rem}.w-4{width:1rem}.w-44{width:11rem}.w-5{width:1.25rem}.w-52{width:13rem}.w-56{width:14rem}.w-60{width:15rem}.w-64{width:16rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-96{width:24rem}.w-\[26rem\]{width:26rem}.w-\[28rem\]{width:28rem}.w-\[34rem\]{width:34rem}.w-\[60rem\]{width:60rem}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-\[720px\]{min-width:720px}.min-w-\[820px\]{min-width:820px}.max-w-6xl{max-width:72rem}.max-w-\[10rem\]{max-width:10rem}.max-w-\[12rem\]{max-width:12rem}.max-w-\[14rem\]{max-width:14rem}.max-w-\[7rem\]{max-width:7rem}.max-w-\[90vw\]{max-width:90vw}.max-w-\[92vw\]{max-width:92vw}.max-w-\[96vw\]{max-width:96vw}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-sm{max-width:24rem}.flex-1{flex:1 1 0%}.flex-none{flex:none}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-full{--tw-translate-y: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-0\.5{row-gap:.125rem}.gap-y-1{row-gap:.25rem}.gap-y-2{row-gap:.5rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(243 244 246 / var(--tw-divide-opacity, 1))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(229 231 235 / var(--tw-divide-opacity, 1))}.divide-violet-100>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(237 233 254 / var(--tw-divide-opacity, 1))}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[1px\]{border-radius:1px}.rounded-\[2px\]{border-radius:2px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0px}.border-b-2{border-bottom-width:2px}.border-l-2{border-left-width:2px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-amber-300{--tw-border-opacity: 1;border-color:rgb(252 211 77 / var(--tw-border-opacity, 1))}.border-amber-400{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.border-amber-500\/40{border-color:#f59e0b66}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-blue-400{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-gray-100{--tw-border-opacity: 1;border-color:rgb(243 244 246 / var(--tw-border-opacity, 1))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-gray-400{--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity, 1))}.border-gray-800{--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-green-300{--tw-border-opacity: 1;border-color:rgb(134 239 172 / var(--tw-border-opacity, 1))}.border-green-500{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.border-green-500\/40{border-color:#22c55e66}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.border-red-500{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.border-sky-300{--tw-border-opacity: 1;border-color:rgb(125 211 252 / var(--tw-border-opacity, 1))}.border-sky-400{--tw-border-opacity: 1;border-color:rgb(56 189 248 / var(--tw-border-opacity, 1))}.border-sky-500{--tw-border-opacity: 1;border-color:rgb(14 165 233 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-violet-200{--tw-border-opacity: 1;border-color:rgb(221 214 254 / var(--tw-border-opacity, 1))}.border-violet-200\/60{border-color:#ddd6fe99}.border-violet-300{--tw-border-opacity: 1;border-color:rgb(196 181 253 / var(--tw-border-opacity, 1))}.border-violet-400{--tw-border-opacity: 1;border-color:rgb(167 139 250 / var(--tw-border-opacity, 1))}.border-yellow-300{--tw-border-opacity: 1;border-color:rgb(253 224 71 / var(--tw-border-opacity, 1))}.border-yellow-400{--tw-border-opacity: 1;border-color:rgb(250 204 21 / var(--tw-border-opacity, 1))}.border-l-amber-400{--tw-border-opacity: 1;border-left-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.border-l-red-400{--tw-border-opacity: 1;border-left-color:rgb(248 113 113 / var(--tw-border-opacity, 1))}.border-l-sky-400{--tw-border-opacity: 1;border-left-color:rgb(56 189 248 / var(--tw-border-opacity, 1))}.border-t-blue-500{--tw-border-opacity: 1;border-top-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-t-transparent{border-top-color:transparent}.bg-\[\#8957e5\]\/15{background-color:#8957e526}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-400\/5{background-color:#fbbf240d}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-50\/60{background-color:#fffbeb99}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/15{background-color:#f59e0b26}.bg-black\/50{background-color:#00000080}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-50\/50{background-color:#eff6ff80}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-500\/10{background-color:#3b82f61a}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-300{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-50\/50{background-color:#f9fafb80}.bg-gray-500\/10{background-color:#6b72801a}.bg-gray-500\/15{background-color:#6b728026}.bg-gray-500\/20{background-color:#6b728033}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-gray-900\/40{background-color:#11182766}.bg-gray-950{--tw-bg-opacity: 1;background-color:rgb(3 7 18 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-500\/10{background-color:#22c55e1a}.bg-green-500\/15{background-color:#22c55e26}.bg-orange-500\/10{background-color:#f973161a}.bg-orange-500\/15{background-color:#f9731626}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/10{background-color:#ef44441a}.bg-red-500\/15{background-color:#ef444426}.bg-sky-100{--tw-bg-opacity: 1;background-color:rgb(224 242 254 / var(--tw-bg-opacity, 1))}.bg-sky-50{--tw-bg-opacity: 1;background-color:rgb(240 249 255 / var(--tw-bg-opacity, 1))}.bg-sky-500{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.bg-sky-500\/15{background-color:#0ea5e926}.bg-sky-500\/20{background-color:#0ea5e933}.bg-sky-500\/5{background-color:#0ea5e90d}.bg-transparent{background-color:transparent}.bg-violet-100{--tw-bg-opacity: 1;background-color:rgb(237 233 254 / var(--tw-bg-opacity, 1))}.bg-violet-200\/60{background-color:#ddd6fe99}.bg-violet-50{--tw-bg-opacity: 1;background-color:rgb(245 243 255 / var(--tw-bg-opacity, 1))}.bg-violet-50\/30{background-color:#f5f3ff4d}.bg-violet-50\/40{background-color:#f5f3ff66}.bg-violet-50\/50{background-color:#f5f3ff80}.bg-violet-50\/60{background-color:#f5f3ff99}.bg-violet-500{--tw-bg-opacity: 1;background-color:rgb(139 92 246 / var(--tw-bg-opacity, 1))}.bg-violet-500\/10{background-color:#8b5cf61a}.bg-violet-500\/15{background-color:#8b5cf626}.bg-violet-500\/5{background-color:#8b5cf60d}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/60{background-color:#fff9}.bg-white\/95{background-color:#fffffff2}.bg-yellow-400\/20{background-color:#facc1533}.bg-yellow-50{--tw-bg-opacity: 1;background-color:rgb(254 252 232 / var(--tw-bg-opacity, 1))}.bg-yellow-50\/40{background-color:#fefce866}.bg-yellow-500\/10{background-color:#eab3081a}.fill-gray-400{fill:#9ca3af}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-0\.5{padding-bottom:.125rem}.pb-1{padding-bottom:.25rem}.pb-1\.5{padding-bottom:.375rem}.pb-3{padding-bottom:.75rem}.pb-6{padding-bottom:1.5rem}.pl-0\.5{padding-left:.125rem}.pl-2{padding-left:.5rem}.pl-2\.5{padding-left:.625rem}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-2\.5{padding-right:.625rem}.pr-28{padding-right:7rem}.pr-3{padding-right:.75rem}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-\[1\.45\]{line-height:1.45}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-wide{letter-spacing:.025em}.text-\[\#8957e5\]{--tw-text-opacity: 1;color:rgb(137 87 229 / var(--tw-text-opacity, 1))}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-600\/90{color:#d97706e6}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-700\/80{color:#b45309cc}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-400\/10{color:#9ca3af1a}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-green-300{--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-700\/70{color:#15803db3}.text-green-700\/80{color:#15803dcc}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-orange-500{--tw-text-opacity: 1;color:rgb(249 115 22 / var(--tw-text-opacity, 1))}.text-orange-600{--tw-text-opacity: 1;color:rgb(234 88 12 / var(--tw-text-opacity, 1))}.text-orange-700{--tw-text-opacity: 1;color:rgb(194 65 12 / var(--tw-text-opacity, 1))}.text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-sky-400\/80{color:#38bdf8cc}.text-sky-500{--tw-text-opacity: 1;color:rgb(14 165 233 / var(--tw-text-opacity, 1))}.text-sky-600{--tw-text-opacity: 1;color:rgb(2 132 199 / var(--tw-text-opacity, 1))}.text-sky-700{--tw-text-opacity: 1;color:rgb(3 105 161 / var(--tw-text-opacity, 1))}.text-violet-500{--tw-text-opacity: 1;color:rgb(139 92 246 / var(--tw-text-opacity, 1))}.text-violet-500\/70{color:#8b5cf6b3}.text-violet-600{--tw-text-opacity: 1;color:rgb(124 58 237 / var(--tw-text-opacity, 1))}.text-violet-700{--tw-text-opacity: 1;color:rgb(109 40 217 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-700{--tw-text-opacity: 1;color:rgb(161 98 7 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-45{opacity:.45}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-amber-400\/70{--tw-ring-color: rgb(251 191 36 / .7)}.ring-blue-500{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.ring-sky-400\/60{--tw-ring-color: rgb(56 189 248 / .6)}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[grid-template-rows\]{transition-property:grid-template-rows;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-500{transition-duration:.5s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}:root{color-scheme:light dark}html,body,#root{height:100%;margin:0}body{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}body:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(3 7 18 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}body{font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.brand-title{font-family:Great Vibes,ui-serif,cursive;font-weight:400;font-size:1.75rem;line-height:1;letter-spacing:.3px;transform:translateY(5px);cursor:default;-webkit-user-select:none;-moz-user-select:none;user-select:none}.focus-indicator{display:inline-flex;align-items:center;gap:7px;padding:2px 10px;border-radius:9999px;letter-spacing:.5px;text-transform:uppercase;color:#0284c7;background:#38bdf81f;border:1px solid rgba(56,189,248,.4);white-space:nowrap;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;font:inherit;font-size:11px;font-weight:600;transition:box-shadow .15s ease}.focus-indicator:hover{box-shadow:0 0 0 3px #38bdf899}.dark .focus-indicator{color:#7dd3fc}.focus-indicator-dot{width:7px;height:7px;border-radius:9999px;background:#38bdf8}.focus-indicator-close{display:inline-flex;align-items:center;justify-content:center;margin-left:1px;margin-right:-4px;width:16px;height:16px;border-radius:9999px;font-size:10px;line-height:1;color:inherit;opacity:0;transition:background .15s ease,opacity .15s ease}.focus-indicator:hover .focus-indicator-close{opacity:.95;background:#38bdf840;animation:focus-close-wobble 1s ease-out}@keyframes focus-close-wobble{0%{transform:rotate(0)}12%{transform:rotate(-14deg)}28%{transform:rotate(11deg)}44%{transform:rotate(-8deg)}60%{transform:rotate(5deg)}76%{transform:rotate(-2deg)}to{transform:rotate(0)}}@media(prefers-reduced-motion:reduce){.focus-indicator:hover .focus-indicator-close{animation:none}}.filters-disabled{opacity:.45;pointer-events:none}.md-body{font-size:13px;line-height:1.5;word-break:break-word}.md-body>*:first-child{margin-top:0}.md-body>*:last-child{margin-bottom:0}.md-body p{margin:.5em 0}.md-body h1,.md-body h2,.md-body h3{font-weight:600;margin:.6em 0 .3em}.md-body ul,.md-body ol{margin:.5em 0;padding-left:1.4em}.md-body ul{list-style:disc}.md-body ol{list-style:decimal}.md-body li{margin:.15em 0}.md-body a{color:#3b82f6;text-decoration:underline}.md-body code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;background:#7f7f7f2e;padding:.1em .3em;border-radius:4px}.md-body pre{margin:.5em 0;padding:.7em;border-radius:6px;overflow-x:auto;background:#0d1117}.md-body pre code{background:transparent;padding:0}.md-body blockquote{border-left:3px solid rgba(127,127,127,.4);padding-left:.8em;margin:.5em 0;color:#9ca3af}.md-body table{border-collapse:collapse;margin:.5em 0}.md-body th,.md-body td{border:1px solid rgba(127,127,127,.3);padding:.3em .6em}.md-body img{max-width:100%;display:inline-block;vertical-align:middle;max-height:24rem;width:auto;height:auto}.pr-summary-collapsed .pr-summary-tall-img{display:none}.md-body input[type=checkbox]{margin-right:.4em}.dark .vis-timeline{border-color:#1f2937}.dark .vis-panel .vis-content,.dark .vis-panel .vis-background,.dark .vis-labelset .vis-label,.dark .vis-foreground .vis-group{border-color:#1f2937;color:#e5e7eb}.dark .vis-time-axis .vis-text{color:#9ca3af}.dark .vis-time-axis .vis-grid.vis-minor{border-color:#1f2937}.dark .vis-time-axis .vis-grid.vis-major{border-color:#374151}.dark .vis-labelset .vis-label{color:#d1d5db}.dark .vis-current-time{background-color:#ef4444}.vis-labelset .vis-label.vis-nested-group{padding-left:.625rem;font-size:11px;opacity:.85}.vis-labelset .vis-label.tl-user-row .vis-inner{width:100%;max-width:264px}.tl-user{display:flex;align-items:flex-start;gap:5px;min-width:0;width:100%}.tl-user-main{display:flex;flex-direction:column;min-width:0;flex:1 1 auto;gap:1px}.tl-user-name-line{display:flex;align-items:center;gap:5px;min-width:0}.tl-collapse-caret{flex:none;display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-right:-1px;padding:0;border:0;border-radius:3px;background:transparent;color:#9ca3af;font-size:13px;line-height:1;cursor:pointer}.tl-collapse-caret:hover{background:#7878782e;color:#374151}.dark .tl-collapse-caret:hover{color:#e5e7eb}.tl-focus-active .tl-collapse-caret{display:none}.tl-stats-toggle{flex:none;display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;padding:0;border:0;border-radius:3px;background:transparent;color:#9ca3af;line-height:1;cursor:pointer}.tl-stats-toggle:hover{background:#7878782e;color:#374151}.dark .tl-stats-toggle:hover{color:#e5e7eb}.tl-user-avatar{flex:none;width:18px;height:18px;border-radius:9999px;-o-object-fit:cover;object-fit:cover;background:#e5e7eb}.dark .tl-user-avatar{background:#374151}.tl-user-avatar-fallback{display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;color:#6b7280}.tl-user-name{font-size:12.5px;font-weight:600;flex:0 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tl-user-name-link{color:inherit;text-decoration:none;cursor:pointer}.tl-user-name-link:hover{text-decoration:underline}.tl-merger{flex:none;display:inline-flex;align-items:center}.tl-modal-header{display:flex;align-items:center;gap:6px;padding:4px 8px;cursor:move;-webkit-user-select:none;-moz-user-select:none;user-select:none;touch-action:none;border-bottom:1px solid #e5e7eb;background:#f9fafb;border-top-left-radius:.5rem;border-top-right-radius:.5rem}.dark .tl-modal-header{border-color:#374151;background:#11182799}.tl-modal-header:active{cursor:grabbing}.tl-grip{flex:none;color:#9ca3af}.tl-modal-title{font-size:11px;color:#9ca3af;margin-right:auto}.tl-modal-close{flex:none;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:4px;font-size:12px;line-height:1;color:#9ca3af;cursor:pointer}.tl-modal-close:hover{background:#94a3b833;color:#374151}.dark .tl-modal-close:hover{color:#e5e7eb}.vis-labelset .vis-label.tl-user-row,.vis-foreground .vis-group.tl-user-row{transition:max-height .22s ease,opacity .22s ease}@media(prefers-reduced-motion:reduce){.vis-labelset .vis-label.tl-user-row,.vis-foreground .vis-group.tl-user-row{transition:none}}.tl-repo-tint-0{--tl-tint: 59 130 246}.tl-repo-tint-1{--tl-tint: 139 92 246}.tl-repo-watch{display:inline-flex;align-items:center;margin-left:5px;color:#0ea5e9;vertical-align:middle}.vis-labelset .vis-label.tl-user-row[class*=tl-repo-tint-],.vis-foreground .vis-group.tl-user-row[class*=tl-repo-tint-],.vis-labelset .vis-label.tl-repo-header[class*=tl-repo-tint-],.vis-foreground .vis-group.tl-repo-header[class*=tl-repo-tint-]{background-color:rgb(var(--tl-tint) / .1)}.dark .vis-labelset .vis-label.tl-user-row[class*=tl-repo-tint-],.dark .vis-foreground .vis-group.tl-user-row[class*=tl-repo-tint-],.dark .vis-labelset .vis-label.tl-repo-header[class*=tl-repo-tint-],.dark .vis-foreground .vis-group.tl-repo-header[class*=tl-repo-tint-]{background-color:rgb(var(--tl-tint) / .13)}.tl-repo-sticky{position:absolute;z-index:15;pointer-events:none;box-sizing:border-box;padding:3px 10px;font-size:12px;font-weight:600;line-height:1.3;color:#111827;background-color:#fff;border-bottom:1px solid #e5e7eb;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dark .tl-repo-sticky{color:#f3f4f6;background-color:#030712;border-bottom-color:#1f2937}.tl-repo-sticky[class*=tl-repo-tint-]{background-image:linear-gradient(rgb(var(--tl-tint) / .1),rgb(var(--tl-tint) / .1))}.dark .tl-repo-sticky[class*=tl-repo-tint-]{background-image:linear-gradient(rgb(var(--tl-tint) / .13),rgb(var(--tl-tint) / .13))}.vis-labelset .vis-label.tl-user-row:nth-child(2n),.vis-foreground .vis-group.tl-user-row:nth-child(2n){background-image:linear-gradient(#0f172a0d,#0f172a0d)}.dark .vis-labelset .vis-label.tl-user-row:nth-child(2n),.dark .vis-foreground .vis-group.tl-user-row:nth-child(2n){background-image:linear-gradient(#ffffff0d,#ffffff0d)}.vis-labelset .vis-label.tl-user-row,.vis-foreground .vis-group.tl-user-row{box-shadow:inset 0 -2px #0f172a33}.dark .vis-labelset .vis-label.tl-user-row,.dark .vis-foreground .vis-group.tl-user-row{box-shadow:inset 0 -2px #ffffff29}.vis-item.vis-range.pr-bar{border-radius:6px;border-width:1px;color:#fff;font-size:11px;cursor:pointer;z-index:2;min-width:4px}.vis-item.pr-emph{font-size:11px}.vis-item.pr-muted{opacity:.85}.vis-item.pr-muted .pr-title{max-width:16ch}.pr-ci{display:inline-block;width:7px;height:7px;border-radius:50%}.pr-ci-lead{flex-shrink:0;box-shadow:0 0 0 1px #ffffff8c}.vis-item.pr-bar.pr-open{background-color:#1d4ed8;border-color:#3b82f6}.vis-item.pr-bar.pr-merged{background-color:#15803d;border-color:#22c55e}.vis-item.pr-bar.pr-closed{background-color:#4b5563;border-color:#9ca3af}.vis-item.pr-bar.pr-stalled{background-color:#c2410c;border-color:#f97316}.vis-item.pr-bar.pr-changes-requested{border-color:#ef4444;border-width:2px}.vis-item.pr-bar.pr-approved{border-color:#22c55e;border-width:2px}.vis-item.pr-bar.pr-commented{border-color:#9ca3af;border-width:2px}.vis-item.pr-draft{background-image:repeating-linear-gradient(45deg,rgba(255,255,255,.12),rgba(255,255,255,.12) 4px,transparent 4px,transparent 8px)}.vis-item.vis-selected.pr-bar{overflow:visible;z-index:5;box-shadow:0 0 0 3px #38bdf8e6}.vis-item.pr-bar.pr-focus-hidden{display:none}.vis-item.pr-bar.pr-cross-linked,.vis-item.ev-cross-linked .ev-marker-inner,.vis-item.ev-cross-linked .ev-cluster-inner{box-shadow:0 0 0 3px #38bdf8e6}.vis-item.pr-bar.pr-cross-linked{overflow:visible;z-index:5}.vis-item.ev-cross-linked .ev-marker-inner,.vis-item.ev-cross-linked .ev-cluster-inner{position:relative;z-index:5}.vis-item.ev-cross-linked .ev-marker-inner{border-radius:9999px}.vis-item.ev-exit-glow .ev-marker-inner,.vis-item.ev-exit-glow .ev-cluster-inner{position:relative;z-index:5;box-shadow:0 0 0 3px #38bdf8e6}.vis-item.ev-exit-glow .ev-marker-inner{border-radius:9999px}.vis-item.ev-selected:not(.ev-cross-linked) .ev-marker-inner,.vis-item.ev-selected:not(.ev-cross-linked) .ev-cluster-inner{position:relative;z-index:5;box-shadow:0 0 0 3px #38bdf8e6}.vis-item.ev-selected:not(.ev-cross-linked) .ev-marker-inner{border-radius:9999px}.pr-bar-inner{display:flex;align-items:center;gap:4px;padding:0 2px}.pr-num{font-weight:700;opacity:.85}.pr-avatar{border-radius:9999px;flex-shrink:0;vertical-align:middle}.pr-author{font-size:10px;opacity:.8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:12ch}.vis-item.pr-muted .pr-author{max-width:9ch}.pr-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:22ch}.pr-draft-tag{font-size:9px;text-transform:uppercase;background:#00000040;border-radius:3px;padding:0 3px}div.vis-tooltip{white-space:normal;max-width:22rem;padding:7px 9px;font-family:inherit;font-size:11px;line-height:1.35;color:#e5e7eb;background-color:#111827;border:1px solid #374151;border-radius:7px;box-shadow:0 6px 20px #00000059}.pr-tt-title{font-weight:600;font-size:12px;color:#f9fafb}.pr-tt-meta{margin-top:1px;font-size:10px;color:#9ca3af}.pr-tt-section{margin-top:5px;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:#9ca3af}.pr-tt-row{display:flex;align-items:center;gap:6px;margin-top:3px}.pr-tt-dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex-shrink:0}.pr-tt-warn{color:#fdba74}.pr-tt-warn-icon{font-weight:700}.pr-tt-quiet{color:#cbd5e1}.vis-item.ev-marker,.vis-item.ev-cluster{background:transparent;border:none;box-shadow:none;pointer-events:none}.vis-item.ev-marker .vis-dot,.vis-item.ev-cluster .vis-dot{display:none}.vis-item.ev-marker .vis-item-content,.vis-item.ev-cluster .vis-item-content{transform:translate(-50%);padding:0}.ev-marker-inner{display:flex;align-items:center;justify-content:center;cursor:pointer;position:relative;pointer-events:auto}.ev-marker-inner svg{display:block}.ev-cluster-inner{display:flex;align-items:center;justify-content:center;gap:2px;min-width:18px;height:16px;padding:0 4px;border-radius:9px;background:#475569;color:#fff;font-size:10px;font-weight:700;line-height:1;cursor:pointer;border:1px solid rgba(255,255,255,.25);position:relative;pointer-events:auto}.vis-item.ev-cluster.vis-selected,.vis-item.ev-marker.vis-selected{background:transparent;box-shadow:none}.vis-item.vis-background.cross-sep{border-top:1px solid rgba(99,102,241,.38);background:#6366f10f;pointer-events:none}.dark .vis-item.vis-background.cross-sep{border-top-color:#818cf86b;background:#818cf817}.vis-item.ev-own .ev-marker-inner:after,.vis-item.ev-own .ev-cluster-inner:after{content:"";position:absolute;bottom:100%;left:50%;width:0;height:14px;border-left:1.5px solid rgba(203,213,225,.85);transform:translate(-50%);pointer-events:none}.vis-item.ev-own .ev-marker-inner.ev-round:after{bottom:calc(100% - 3px);height:17px}.tl-cross-connectors{position:absolute;pointer-events:none;overflow:hidden;z-index:5}.tl-cross-connectors path{stroke:#cbd5e1d9;stroke-width:1.5;fill:none}.dark .tl-cross-connectors path{stroke:#94a3b8b3}.vis-item.ev-cross .ev-marker-inner{border-radius:9999px;background:#6366f11a}.vis-item.ev-cross:not(.ev-selected):not(.ev-cross-linked):not(.ev-exit-glow) .ev-marker-inner{box-shadow:inset 0 0 0 1px #6366f16b}.vis-item.ev-cross:not(.ev-selected):not(.ev-cross-linked):not(.ev-exit-glow) .ev-cluster-inner{box-shadow:0 0 0 2px #6366f140}.dark .vis-item.ev-cross .ev-marker-inner{background:#818cf829}.dark .vis-item.ev-cross:not(.ev-selected):not(.ev-cross-linked):not(.ev-exit-glow) .ev-marker-inner{box-shadow:inset 0 0 0 1px #818cf885}.dark .vis-item.ev-cross:not(.ev-selected):not(.ev-cross-linked):not(.ev-exit-glow) .ev-cluster-inner{box-shadow:0 0 0 2px #818cf852}.vis-item.vis-point .vis-dot{border-width:5px}.ev-pr_opened .vis-dot{border-color:#3b82f6}.ev-pr_merged .vis-dot{border-color:#8957e5}.ev-pr_closed .vis-dot{border-color:#9ca3af}.ev-review_submitted .vis-dot{border-color:#22c55e}.ev-review_comment .vis-dot{border-color:#f59e0b}.ev-pr_comment .vis-dot{border-color:#a78bfa}.ev-commit_pushed .vis-dot{border-color:#6b7280;border-width:4px}.ev-diamond .vis-dot{border-radius:0;transform:rotate(45deg)}.ev-square .vis-dot{border-radius:2px}.comment-new{border-left:3px solid #38bdf8;margin-left:-2px;border-radius:1px;background:#38bdf80d}@keyframes activity-flash{0%{background:#38bdf847}to{background:#38bdf800}}.activity-flash{animation:activity-flash 1.8s ease-out forwards}@keyframes digest-fade-in{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:none}}.digest-fade-in{animation:digest-fade-in .35s ease-out}@media(prefers-reduced-motion:reduce){.digest-fade-in{animation:none}}.digest-skeleton-line{position:relative;overflow:hidden;border-radius:4px;background:#8b5cf60f}.digest-skeleton-line:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-100%);background:linear-gradient(90deg,#a78bfa00,#a78bfa29,#a78bfa00);animation:digest-shimmer 2.4s ease-in-out infinite}@keyframes digest-shimmer{to{transform:translate(100%)}}@media(prefers-reduced-motion:reduce){.digest-skeleton-line:after{animation:none}}.my-turn-ring{box-shadow:0 0 0 3px #3b82f6e6}.vis-item.pr-myturn{overflow:visible;box-shadow:0 0 0 3px #3b82f6e6}.first\:border-0:first-child{border-width:0px}.first\:pt-0:first-child{padding-top:0}.last\:mb-0:last-child{margin-bottom:0}.last\:pb-0:last-child{padding-bottom:0}.hover\:border-blue-500:hover{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.hover\:border-gray-300:hover{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.hover\:border-gray-400:hover{--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity, 1))}.hover\:border-red-400:hover{--tw-border-opacity: 1;border-color:rgb(248 113 113 / var(--tw-border-opacity, 1))}.hover\:border-sky-300:hover{--tw-border-opacity: 1;border-color:rgb(125 211 252 / var(--tw-border-opacity, 1))}.hover\:border-sky-400:hover{--tw-border-opacity: 1;border-color:rgb(56 189 248 / var(--tw-border-opacity, 1))}.hover\:border-violet-400:hover{--tw-border-opacity: 1;border-color:rgb(167 139 250 / var(--tw-border-opacity, 1))}.hover\:bg-amber-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-100\/60:hover{background-color:#fef3c799}.hover\:bg-blue-400:hover{--tw-bg-opacity: 1;background-color:rgb(96 165 250 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-50:hover{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-500\/20:hover{background-color:#3b82f633}.hover\:bg-blue-600:hover{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-200\/60:hover{background-color:#e5e7eb99}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-50\/70:hover{background-color:#f9fafbb3}.hover\:bg-green-50:hover{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.hover\:bg-red-50:hover{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.hover\:bg-sky-100:hover{--tw-bg-opacity: 1;background-color:rgb(224 242 254 / var(--tw-bg-opacity, 1))}.hover\:bg-sky-50:hover{--tw-bg-opacity: 1;background-color:rgb(240 249 255 / var(--tw-bg-opacity, 1))}.hover\:bg-sky-500\/25:hover{background-color:#0ea5e940}.hover\:bg-violet-100:hover{--tw-bg-opacity: 1;background-color:rgb(237 233 254 / var(--tw-bg-opacity, 1))}.hover\:bg-violet-50:hover{--tw-bg-opacity: 1;background-color:rgb(245 243 255 / var(--tw-bg-opacity, 1))}.hover\:bg-violet-500\/5:hover{background-color:#8b5cf60d}.hover\:text-amber-700:hover{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.hover\:text-blue-500:hover{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.hover\:text-blue-600:hover{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.hover\:text-gray-600:hover{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.hover\:text-gray-800:hover{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.hover\:text-sky-600:hover{--tw-text-opacity: 1;color:rgb(2 132 199 / var(--tw-text-opacity, 1))}.hover\:text-violet-700:hover{--tw-text-opacity: 1;color:rgb(109 40 217 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-sky-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(56 189 248 / var(--tw-ring-opacity, 1))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus\:ring-offset-gray-950:focus{--tw-ring-offset-color: #030712}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-sky-400:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(56 189 248 / var(--tw-ring-opacity, 1))}.disabled\:cursor-default:disabled{cursor:default}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:hover\:text-gray-400:hover:disabled{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.group\/th:hover .group-hover\/th\:text-sky-600{--tw-text-opacity: 1;color:rgb(2 132 199 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:opacity-100{opacity:1}@media(prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}.dark\:divide-gray-800:is(.dark *)>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(31 41 55 / var(--tw-divide-opacity, 1))}.dark\:divide-gray-800\/60:is(.dark *)>:not([hidden])~:not([hidden]){border-color:#1f293799}.dark\:divide-gray-800\/70:is(.dark *)>:not([hidden])~:not([hidden]){border-color:#1f2937b3}.dark\:divide-violet-900\/40:is(.dark *)>:not([hidden])~:not([hidden]){border-color:#4c1d9566}.dark\:border-amber-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(217 119 6 / var(--tw-border-opacity, 1))}.dark\:border-amber-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(180 83 9 / var(--tw-border-opacity, 1))}.dark\:border-amber-700\/60:is(.dark *){border-color:#b4530999}.dark\:border-amber-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(146 64 14 / var(--tw-border-opacity, 1))}.dark\:border-amber-800\/60:is(.dark *){border-color:#92400e99}.dark\:border-amber-900\/50:is(.dark *){border-color:#78350f80}.dark\:border-blue-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}.dark\:border-blue-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(30 64 175 / var(--tw-border-opacity, 1))}.dark\:border-blue-900\/50:is(.dark *){border-color:#1e3a8a80}.dark\:border-gray-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.dark\:border-gray-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:border-gray-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.dark\:border-gray-800\/60:is(.dark *){border-color:#1f293799}.dark\:border-green-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(22 163 74 / var(--tw-border-opacity, 1))}.dark\:border-green-700\/50:is(.dark *){border-color:#15803d80}.dark\:border-green-700\/60:is(.dark *){border-color:#15803d99}.dark\:border-green-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(22 101 52 / var(--tw-border-opacity, 1))}.dark\:border-red-700\/60:is(.dark *){border-color:#b91c1c99}.dark\:border-red-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.dark\:border-red-900:is(.dark *){--tw-border-opacity: 1;border-color:rgb(127 29 29 / var(--tw-border-opacity, 1))}.dark\:border-sky-500:is(.dark *){--tw-border-opacity: 1;border-color:rgb(14 165 233 / var(--tw-border-opacity, 1))}.dark\:border-sky-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(3 105 161 / var(--tw-border-opacity, 1))}.dark\:border-violet-500:is(.dark *){--tw-border-opacity: 1;border-color:rgb(139 92 246 / var(--tw-border-opacity, 1))}.dark\:border-violet-500\/40:is(.dark *){border-color:#8b5cf666}.dark\:border-violet-500\/60:is(.dark *){border-color:#8b5cf699}.dark\:border-violet-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(124 58 237 / var(--tw-border-opacity, 1))}.dark\:border-violet-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(109 40 217 / var(--tw-border-opacity, 1))}.dark\:border-violet-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(91 33 182 / var(--tw-border-opacity, 1))}.dark\:border-violet-900\/40:is(.dark *){border-color:#4c1d9566}.dark\:border-violet-900\/50:is(.dark *){border-color:#4c1d9580}.dark\:border-violet-900\/60:is(.dark *){border-color:#4c1d9599}.dark\:border-yellow-500\/50:is(.dark *){border-color:#eab30880}.dark\:border-yellow-500\/60:is(.dark *){border-color:#eab30899}.dark\:border-yellow-600\/50:is(.dark *){border-color:#ca8a0480}.dark\:border-l-amber-500:is(.dark *){--tw-border-opacity: 1;border-left-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.dark\:border-l-red-500:is(.dark *){--tw-border-opacity: 1;border-left-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.dark\:border-l-sky-500:is(.dark *){--tw-border-opacity: 1;border-left-color:rgb(14 165 233 / var(--tw-border-opacity, 1))}.dark\:border-t-blue-400:is(.dark *){--tw-border-opacity: 1;border-top-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.dark\:border-t-transparent:is(.dark *){border-top-color:transparent}.dark\:bg-amber-900\/20:is(.dark *){background-color:#78350f33}.dark\:bg-amber-950\/20:is(.dark *){background-color:#451a0333}.dark\:bg-amber-950\/30:is(.dark *){background-color:#451a034d}.dark\:bg-amber-950\/40:is(.dark *){background-color:#451a0366}.dark\:bg-blue-900\/10:is(.dark *){background-color:#1e3a8a1a}.dark\:bg-blue-900\/20:is(.dark *){background-color:#1e3a8a33}.dark\:bg-blue-950\/30:is(.dark *){background-color:#1725544d}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-800\/50:is(.dark *){background-color:#1f293780}.dark\:bg-gray-800\/60:is(.dark *){background-color:#1f293799}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900\/20:is(.dark *){background-color:#11182733}.dark\:bg-gray-900\/40:is(.dark *){background-color:#11182766}.dark\:bg-gray-900\/50:is(.dark *){background-color:#11182780}.dark\:bg-gray-900\/60:is(.dark *){background-color:#11182799}.dark\:bg-gray-900\/95:is(.dark *){background-color:#111827f2}.dark\:bg-gray-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(3 7 18 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900\/20:is(.dark *){background-color:#14532d33}.dark\:bg-green-950\/30:is(.dark *){background-color:#052e164d}.dark\:bg-green-950\/40:is(.dark *){background-color:#052e1666}.dark\:bg-red-900\/20:is(.dark *){background-color:#7f1d1d33}.dark\:bg-red-950\/30:is(.dark *){background-color:#450a0a4d}.dark\:bg-red-950\/40:is(.dark *){background-color:#450a0a66}.dark\:bg-sky-900\/50:is(.dark *){background-color:#0c4a6e80}.dark\:bg-sky-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(8 47 73 / var(--tw-bg-opacity, 1))}.dark\:bg-sky-950\/30:is(.dark *){background-color:#082f494d}.dark\:bg-sky-950\/40:is(.dark *){background-color:#082f4966}.dark\:bg-violet-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(167 139 250 / var(--tw-bg-opacity, 1))}.dark\:bg-violet-900\/40:is(.dark *){background-color:#4c1d9566}.dark\:bg-violet-950\/10:is(.dark *){background-color:#2e10651a}.dark\:bg-violet-950\/20:is(.dark *){background-color:#2e106533}.dark\:bg-violet-950\/30:is(.dark *){background-color:#2e10654d}.dark\:bg-violet-950\/40:is(.dark *){background-color:#2e106566}.dark\:bg-yellow-950\/15:is(.dark *){background-color:#42200626}.dark\:bg-yellow-950\/30:is(.dark *){background-color:#4220064d}.dark\:text-amber-200:is(.dark *){--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.dark\:text-amber-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-amber-300\/80:is(.dark *){color:#fcd34dcc}.dark\:text-amber-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.dark\:text-amber-400\/90:is(.dark *){color:#fbbf24e6}.dark\:text-blue-300:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-gray-100:is(.dark *){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:text-gray-300\/10:is(.dark *){color:#d1d5db1a}.dark\:text-gray-400:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:text-gray-600:is(.dark *){--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.dark\:text-gray-700:is(.dark *){--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.dark\:text-gray-800:is(.dark *){--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.dark\:text-green-300:is(.dark *){--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-green-400\/70:is(.dark *){color:#4ade80b3}.dark\:text-green-400\/80:is(.dark *){color:#4ade80cc}.dark\:text-green-500:is(.dark *){--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.dark\:text-orange-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.dark\:text-red-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-sky-300:is(.dark *){--tw-text-opacity: 1;color:rgb(125 211 252 / var(--tw-text-opacity, 1))}.dark\:text-sky-400:is(.dark *){--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.dark\:text-violet-300:is(.dark *){--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.dark\:text-violet-400:is(.dark *){--tw-text-opacity: 1;color:rgb(167 139 250 / var(--tw-text-opacity, 1))}.dark\:text-yellow-300:is(.dark *){--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity, 1))}.dark\:text-yellow-500:is(.dark *){--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.dark\:hover\:border-gray-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity, 1))}.dark\:hover\:border-gray-600:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.dark\:hover\:border-sky-700:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(3 105 161 / var(--tw-border-opacity, 1))}.dark\:hover\:border-violet-600:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(124 58 237 / var(--tw-border-opacity, 1))}.dark\:hover\:bg-amber-900\/40:hover:is(.dark *){background-color:#78350f66}.dark\:hover\:bg-blue-500:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-blue-900\/30:hover:is(.dark *){background-color:#1e3a8a4d}.dark\:hover\:bg-gray-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-700\/60:hover:is(.dark *){background-color:#37415199}.dark\:hover\:bg-gray-800:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-800\/40:hover:is(.dark *){background-color:#1f293766}.dark\:hover\:bg-gray-800\/50:hover:is(.dark *){background-color:#1f293780}.dark\:hover\:bg-gray-800\/60:hover:is(.dark *){background-color:#1f293799}.dark\:hover\:bg-gray-900:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-900\/40:hover:is(.dark *){background-color:#11182766}.dark\:hover\:bg-gray-900\/60:hover:is(.dark *){background-color:#11182799}.dark\:hover\:bg-green-900\/30:hover:is(.dark *){background-color:#14532d4d}.dark\:hover\:bg-red-950:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(69 10 10 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-sky-900\/30:hover:is(.dark *){background-color:#0c4a6e4d}.dark\:hover\:bg-sky-900\/40:hover:is(.dark *){background-color:#0c4a6e66}.dark\:hover\:bg-violet-900\/20:hover:is(.dark *){background-color:#4c1d9533}.dark\:hover\:bg-violet-900\/30:hover:is(.dark *){background-color:#4c1d954d}.dark\:hover\:text-amber-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-100:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:hover\:text-violet-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(221 214 254 / var(--tw-text-opacity, 1))}@media(min-width:640px){.sm\:inline{display:inline}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(min-width:768px){.md\:flex{display:flex}.md\:min-h-0{min-height:0px}.md\:w-72{width:18rem}.md\:w-full{width:100%}.md\:flex-1{flex:1 1 0%}.md\:shrink-0{flex-shrink:0}.md\:flex-row{flex-direction:row}.md\:flex-col{flex-direction:column}.md\:overflow-y-auto{overflow-y:auto}.md\:overflow-x-visible{overflow-x:visible}.md\:border-b-0{border-bottom-width:0px}.md\:border-r{border-right-width:1px}}@media(min-width:1024px){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}}