diff --git a/.woodpecker/docker.yaml b/.woodpecker/docker.yaml index 1bcf1d2ed..bdfec6a61 100644 --- a/.woodpecker/docker.yaml +++ b/.woodpecker/docker.yaml @@ -31,7 +31,7 @@ variables: <<: *docker_variables build_args: - ELIXIR_IMG=docker.io/arm32v7/elixir - - ELIXIR_TAG=1.17.3-otp-26-alpine + - ELIXIR_TAG=1.17.3-otp-27-alpine - ALPINE_IMG=docker.io/arm32v7/alpine - ALPINE_VER=3.20 extra_opts: --custom-platform=linux/arm/v7 diff --git a/.woodpecker/lint.yaml b/.woodpecker/lint.yaml index 8a5718c5d..1ed040440 100644 --- a/.woodpecker/lint.yaml +++ b/.woodpecker/lint.yaml @@ -18,7 +18,7 @@ variables: steps: mix-format: image: &elixir-image - docker.io/elixir:1.15-alpine + docker.io/elixir:1.17-otp-27-alpine entrypoint: *script_file_entrypoint failure: ignore commands: diff --git a/.woodpecker/unit-testing-elixir-1.15.yaml b/.woodpecker/unit-testing-elixir-1.17.yaml similarity index 95% rename from .woodpecker/unit-testing-elixir-1.15.yaml rename to .woodpecker/unit-testing-elixir-1.17.yaml index 13eb40244..020bacb8c 100644 --- a/.woodpecker/unit-testing-elixir-1.15.yaml +++ b/.woodpecker/unit-testing-elixir-1.17.yaml @@ -19,8 +19,8 @@ variables: - 'printf "%s" "$CI_SCRIPT" | base64 -d > /tmp/ci-script.sh && /bin/sh -xe /tmp/ci-script.sh' steps: - unit-testing-elixir-1.15: - image: elixir:1.15-alpine + unit-testing-elixir-1.17: + image: elixir:1.17-otp-27-alpine entrypoint: *script_file_entrypoint environment: MIX_ENV: test diff --git a/CHANGELOG.md b/CHANGELOG.md index f03be3f29..2f799a0ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,115 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## 2.11.0 + +### Security + +- Update Bandit to address HTTP request handling vulnerabilities. +- Update bandit to version 1.12.4 to fix a DoS vulnerability +- Update bandit to version 1.12.5 to fix an HTTP/2 DoS vulnerability +- Update bandit to version 1.13.1 resolving a stuck process and unvalidated HTTP/1 headers vulnerabilities +- Updated CAStore to version 1.0.22 with updated Mozilla certificate bundle after eMudhra Intermediate CA Compromise +- Update certifi to version 2.18.0, which removes the distrusted emSign roots +- Update plug_crypto to version 2.2.1, so a malformed shout socket token no longer writes the secret key base to the error log +- Update Cowboy to address multipart header parsing denial-of-service vulnerabilities. +- Update cowboy to version 2.19.0 which fixes a memory exhaustion DoS +- Update Cowlib to address HTTP parsing resource exhaustion and injection vulnerabilities. +- Update cowlib to version 2.20.0 which fixes HTTP splitting and header smuggling/injection vulnerabilities +- Update gun to version 2.7.0 and cowlib to version 2.21.0 resolving a header smuggling vulnerability +- Update Decimal and compatible dependencies to address a rounding vulnerability. +- Update Decimal to version 3.2.0 resolving an unbounded allocation vulnerability +- Replace retired Earmark rendering with the maintained EarmarkParser and an attribute-escaping renderer. +- Update gun to version 2.6.0 which fixes an HTTP request/response smuggling vulnerability +- Update Hackney and its HTTPoison integration to address SSRF, timeout, and injection vulnerabilities. +- Hackney, Finch, Mua and the Swoosh HTTP mail adapters now trust only the CAStore certificate bundle, which rejects the compromised eMudhra intermediate CAs +- Ensure Host header is present and matches instance URI +- Update mint to version 1.10.0 which fixes multiple DoS vulnerabilities +- Update mint to version 1.11.0 resolving multiple vulnerabilities +- Update Phoenix LiveView to version 1.2.9 to fix an open redirect vulnerability +- Update Phoenix to version 1.8.11 resolving a process-exhaustion DoS vulnerability +- Update Phoenix to address long-poll NDJSON request denial-of-service vulnerabilities. +- Update Plug to address multipart header parsing denial-of-service vulnerabilities. +- Update Plug.Cowboy to address HTTP/2 scheme atom exhaustion denial-of-service vulnerabilities. +- Update Postgrex to address notification channel-name SQL injection vulnerabilities. +- Update postgrex to version 0.22.4 to fix an SQL injection vulnerability +- Remove unused QUIC lockfile entry with vulnerable TLS verification behavior. +- Update swoosh to version 1.28.0 which fixes a url injection vulnerability for the Microsoft Graph adapter +- Scrubbers: remove links and images whose scheme is hidden with tabs, newlines or leading control characters (for example javascript:), which browsers still run as javascript:. Custom scrubbers should use Pleroma.HTML.URIAttributes.allow_tag_with_uri_attributes instead of the FastSanitize macro + +### Changed + +- Update bundled Pleroma-FE to 2.11.4 +- Allow disabling Chats feature +- Pleroma now requires Elixir 1.17 or newer and Erlang/OTP 27 or newer +- Update Debian and Ubuntu installation requirements and OTP dependencies +- Update Jason to support Decimal 3 dependency resolution. +- Changed how Logger is configured due to changes in Elixir and added deprecation warnings for the old configuration format +- Update majic to 1.2.0. +- Avoid a duplicate user query during OAuth authentication. +- Use the Hex package for oban_plugins_lazarus. +- Docs OpenBSD: Increased recommended `datasize` from 1536M to 4096M to avoid Pleroma crashes +- OpenRC: Automatically run migrations before starting pleroma +- Optimize orphaned OAuth apps cleanup by deleting records in batches instead of one by one. +- Switch patched Phoenix 1.7.14 back to upstream with Phoenix 1.8.0+ +- Add optional migrations for rollback from Rebased +- Use upstream Hex releases for the `remote_ip` dependency and expose client IP ranges for remote IP resolution. +- Improve user search / autocompletion ordering. +- Gun is now the default HTTP client instead of Hackney + +### Added + +- Allow creating accounts without a password in the AdminAPI +- Implemented ConfigDB configuration blacklist and accompanying Mix task +- Accept more real-world ActivityPub object shapes collected by fedidev.fun +- Add Mastodon-compatible grouped notifications API endpoints under `/api/v2/notifications` for newly-created notifications +- Docs: Added documentation for installing newer version of Elixir/Erlang than what distro ships +- Allow attaching emojis to user lists +- Implement basics of Mastodon admin API +- Add backend support for Misskey Markdown (MFM) posts +- Add mix_audit for dependency vulnerability checks. +- Oban: Enabled the Reindexer plugin to reduce oban_jobs index DB bloat +- Add ParadeDB (pg_search) as an optional external search backend, indexing status content, content warnings, and attachment descriptions. +- Add support for Mastodon-compatible webhooks + +### Fixed + +- Fixed `/api/v1/pleroma/accounts/:id/favourites` ordering and pagination to use the favourite date. +- Reject unsupported or ambiguous inbox signatures instead of queueing a doomed failed-signature retry, allowing clients to fall back to legacy HTTP Signatures. +- Switch native captcha to the published pleroma_captcha Hex package. +- Updated the captcha package to fix compilation failure on BSD-based systems +- Dockerfile: update base images to fix problems with SSL handshakes +- Docs: Fixed OTP install links in documentation, broke up wall of install commands into smaller chunks, fixed sudo commands execution +- Fix notification and timeline queries for users with domain blocks choosing a plan that scans every active user per row; the followed-accounts exception is now an `ARRAY(SELECT ...)` InitPlan that the planner costs once. +- Fixed Elixir 1.19 warnings +- Support fetching featured collection items from the first collection page +- Fix preferred frontend not working due to InstanceStatic plug prematurely returning HTTP 404 +- Fixed Gun HTTP/1 concurrency, forwarding and authenticated proxy handling, tunnel requests, and streamed connection cleanup. Updated Gun and Cowlib for HTTP client security fixes. +- Stop leaking a Hackney connection process, and the response bytes it read, for every unpooled request that ends without a reusable socket +- Fix hashtag timeline query for additional tag handling +- Fix compatibility with timestamped HTTP Signatures used by GoToSocial +- Handle reports with just actor ap id as the object +- Fix Swoosh HTTP mail adapters failing with `cacerts: :undefined` on OTP 26+ +- Echo Mastodon-style `Sec-WebSocket-Protocol` tokens in streaming WebSocket handshakes. +- Enforce the max_body HTTP option again, which Hackney 4 silently stopped honouring because it always returns a fully read body +- Abort incomplete media proxy responses instead of caching partial bodies. +- Updated Pleroma-FE build URL after Forgejo migration +- Fix votersCount inflation when same voter picks multiple options +- Status: Fill all MastoAPI required values in preview cards +- Avoid creating atoms from serialized PublisherWorker parameters. +- Reject incoming reports when both the reporter and reported account are remote +- Fixed account status and media views exposing activities restricted from unauthenticated users. +- Stop leaking a Hackney connection process for every media proxy response that was streamed to the end +- Fix RSS feeds to be W3C compliant and render better in RSS readers +- Keep followed users visible in streams when their domain is blocked. +- Fix intermittent failure to compile syslog package +- Fix inconsistent User cache keys and invalidate numeric ID aliases. +- Include arm32v7 in multi-arch Docker images +- RichMedia: Fix backfill causing old posts to show up on timelines by disabling it in MastoAPI StatusView +- Fix Admin-FE installation by downloading builds from the package registry instead of GitLab job artifacts. +- Hackney: use HTTP/1.1 only, so closing one media proxy response no longer breaks other downloads from the same host +- Hackney: use the configured proxy when its host is an IP address; Hackney 4 ignored such proxies and connected directly + ## 2.10.2 ### Security diff --git a/Dockerfile b/Dockerfile index 87c698f93..4018d9bc9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # https://hub.docker.com/r/hexpm/elixir/tags ARG ELIXIR_IMG=hexpm/elixir ARG ELIXIR_VER=1.17.3 -ARG ERLANG_VER=27.3.4.14 +ARG ERLANG_VER=27.3.4.17 ARG ALPINE_VER=3.23.5 ARG ELIXIR_TAG=${ELIXIR_VER}-erlang-${ERLANG_VER}-alpine-${ALPINE_VER} ARG ALPINE_IMG=alpine diff --git a/changelog.d/account-favourites-order.fix b/changelog.d/account-favourites-order.fix deleted file mode 100644 index 94e27e499..000000000 --- a/changelog.d/account-favourites-order.fix +++ /dev/null @@ -1 +0,0 @@ -Fixed `/api/v1/pleroma/accounts/:id/favourites` ordering and pagination to use the favourite date. diff --git a/changelog.d/activitypub-bot-rfc9421-fallback.fix b/changelog.d/activitypub-bot-rfc9421-fallback.fix deleted file mode 100644 index a04940bfe..000000000 --- a/changelog.d/activitypub-bot-rfc9421-fallback.fix +++ /dev/null @@ -1 +0,0 @@ -Reject unsupported or ambiguous inbox signatures instead of queueing a doomed failed-signature retry, allowing clients to fall back to legacy HTTP Signatures. diff --git a/changelog.d/admin-api-passwordless-accounts.add b/changelog.d/admin-api-passwordless-accounts.add deleted file mode 100644 index f5ea2626f..000000000 --- a/changelog.d/admin-api-passwordless-accounts.add +++ /dev/null @@ -1 +0,0 @@ -Allow creating accounts without a password in the AdminAPI diff --git a/changelog.d/captcha-package.fix b/changelog.d/captcha-package.fix deleted file mode 100644 index 98c2f6525..000000000 --- a/changelog.d/captcha-package.fix +++ /dev/null @@ -1 +0,0 @@ -Switch native captcha to the published pleroma_captcha Hex package. diff --git a/changelog.d/captcha-ver-bump.fix b/changelog.d/captcha-ver-bump.fix deleted file mode 100644 index 8e5ea0e9c..000000000 --- a/changelog.d/captcha-ver-bump.fix +++ /dev/null @@ -1 +0,0 @@ -Updated the captcha package to fix compilation failure on BSD-based systems diff --git a/changelog.d/context-cleanup.skip b/changelog.d/context-cleanup.skip deleted file mode 100644 index ae609602d..000000000 --- a/changelog.d/context-cleanup.skip +++ /dev/null @@ -1 +0,0 @@ -litepub-0.1.jsonld cleanup diff --git a/changelog.d/disabling-chats.change b/changelog.d/disabling-chats.change deleted file mode 100644 index 579679a03..000000000 --- a/changelog.d/disabling-chats.change +++ /dev/null @@ -1 +0,0 @@ -Allow disabling Chats feature diff --git a/changelog.d/docker-baseimage-ssl.fix b/changelog.d/docker-baseimage-ssl.fix deleted file mode 100644 index 441423f49..000000000 --- a/changelog.d/docker-baseimage-ssl.fix +++ /dev/null @@ -1 +0,0 @@ -Dockerfile: update base images to fix problems with SSL handshakes \ No newline at end of file diff --git a/changelog.d/docker-e2e-image.skip b/changelog.d/docker-e2e-image.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/changelog.d/docs-otp-install-links.fix b/changelog.d/docs-otp-install-links.fix deleted file mode 100644 index 28d504bc0..000000000 --- a/changelog.d/docs-otp-install-links.fix +++ /dev/null @@ -1 +0,0 @@ -Docs: Fixed OTP install links in documentation, broke up wall of install commands into smaller chunks, fixed sudo commands execution diff --git a/changelog.d/domain-block-subplan-cost.fix b/changelog.d/domain-block-subplan-cost.fix deleted file mode 100644 index 7ae866ad1..000000000 --- a/changelog.d/domain-block-subplan-cost.fix +++ /dev/null @@ -1 +0,0 @@ -Fix notification and timeline queries for users with domain blocks choosing a plan that scans every active user per row; the followed-accounts exception is now an `ARRAY(SELECT ...)` InitPlan that the planner costs once. diff --git a/changelog.d/elixir-1-19.add b/changelog.d/elixir-1-19.add deleted file mode 100644 index b010b2dfa..000000000 --- a/changelog.d/elixir-1-19.add +++ /dev/null @@ -1 +0,0 @@ -Implemented ConfigDB configuration blacklist and accompanying Mix task diff --git a/changelog.d/elixir-1-19.fix b/changelog.d/elixir-1-19.fix deleted file mode 100644 index 53079b0f7..000000000 --- a/changelog.d/elixir-1-19.fix +++ /dev/null @@ -1 +0,0 @@ -Fixed Elixir 1.19 warnings diff --git a/changelog.d/featured-collection-page.fix b/changelog.d/featured-collection-page.fix deleted file mode 100644 index b611a4137..000000000 --- a/changelog.d/featured-collection-page.fix +++ /dev/null @@ -1 +0,0 @@ -Support fetching featured collection items from the first collection page diff --git a/changelog.d/fedidev-federation-compat.add b/changelog.d/fedidev-federation-compat.add deleted file mode 100644 index bb29925f9..000000000 --- a/changelog.d/fedidev-federation-compat.add +++ /dev/null @@ -1 +0,0 @@ -Accept more real-world ActivityPub object shapes collected by fedidev.fun diff --git a/changelog.d/fix-preferred-frontend.fix b/changelog.d/fix-preferred-frontend.fix deleted file mode 100644 index 07bf4d0c6..000000000 --- a/changelog.d/fix-preferred-frontend.fix +++ /dev/null @@ -1 +0,0 @@ -Fix preferred frontend not working due to InstanceStatic plug prematurely returning HTTP 404 diff --git a/changelog.d/fixup-new-elixir-erlang-docs.skip b/changelog.d/fixup-new-elixir-erlang-docs.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/changelog.d/grouped-notifications-api.add b/changelog.d/grouped-notifications-api.add deleted file mode 100644 index 8c2cc5397..000000000 --- a/changelog.d/grouped-notifications-api.add +++ /dev/null @@ -1 +0,0 @@ -Add Mastodon-compatible grouped notifications API endpoints under `/api/v2/notifications` for newly-created notifications diff --git a/changelog.d/grouped-notifs-embed.skip b/changelog.d/grouped-notifs-embed.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/changelog.d/grouped_notifications_flag.skip b/changelog.d/grouped_notifications_flag.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/changelog.d/gun-pool-rework.fix b/changelog.d/gun-pool-rework.fix deleted file mode 100644 index d555b5bce..000000000 --- a/changelog.d/gun-pool-rework.fix +++ /dev/null @@ -1 +0,0 @@ -Fixed Gun HTTP/1 concurrency, forwarding and authenticated proxy handling, tunnel requests, and streamed connection cleanup. Updated Gun and Cowlib for HTTP client security fixes. diff --git a/changelog.d/hashtag-timeline.fix b/changelog.d/hashtag-timeline.fix deleted file mode 100644 index c5814d9c9..000000000 --- a/changelog.d/hashtag-timeline.fix +++ /dev/null @@ -1 +0,0 @@ -Fix hashtag timeline query for additional tag handling diff --git a/changelog.d/host-header-verification.security b/changelog.d/host-header-verification.security deleted file mode 100644 index 11a0784b2..000000000 --- a/changelog.d/host-header-verification.security +++ /dev/null @@ -1 +0,0 @@ -Ensure Host header is present and matches instance URI diff --git a/changelog.d/http-signatures-0.1.3.fix b/changelog.d/http-signatures-0.1.3.fix deleted file mode 100644 index 3be1b9e9f..000000000 --- a/changelog.d/http-signatures-0.1.3.fix +++ /dev/null @@ -1 +0,0 @@ -Fix compatibility with timestamped HTTP Signatures used by GoToSocial diff --git a/changelog.d/iceshrimpnet-reports-fix.fix b/changelog.d/iceshrimpnet-reports-fix.fix deleted file mode 100644 index 7487ae47e..000000000 --- a/changelog.d/iceshrimpnet-reports-fix.fix +++ /dev/null @@ -1 +0,0 @@ -Handle reports with just actor ap id as the object diff --git a/changelog.d/idempotency-plug-func-typo.skip b/changelog.d/idempotency-plug-func-typo.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/changelog.d/improve-doc-debian-13.change b/changelog.d/improve-doc-debian-13.change deleted file mode 100644 index 0fd7c6e45..000000000 --- a/changelog.d/improve-doc-debian-13.change +++ /dev/null @@ -1 +0,0 @@ -Update Debian and Ubuntu installation requirements and OTP dependencies diff --git a/changelog.d/installing_newer_elixir_erlang.add b/changelog.d/installing_newer_elixir_erlang.add deleted file mode 100644 index e49aaeb21..000000000 --- a/changelog.d/installing_newer_elixir_erlang.add +++ /dev/null @@ -1 +0,0 @@ -Docs: Added documentation for installing newer version of Elixir/Erlang than what distro ships diff --git a/changelog.d/list-emoji.add b/changelog.d/list-emoji.add deleted file mode 100644 index dce4874d3..000000000 --- a/changelog.d/list-emoji.add +++ /dev/null @@ -1 +0,0 @@ -Allow attaching emojis to user lists diff --git a/changelog.d/logger-backends.change b/changelog.d/logger-backends.change deleted file mode 100644 index 5f044c2c7..000000000 --- a/changelog.d/logger-backends.change +++ /dev/null @@ -1 +0,0 @@ -Changed how Logger is configured due to changes in Elixir and added deprecation warnings for the old configuration format diff --git a/changelog.d/majic-1.2.0.change b/changelog.d/majic-1.2.0.change deleted file mode 100644 index bc8d5eb3c..000000000 --- a/changelog.d/majic-1.2.0.change +++ /dev/null @@ -1 +0,0 @@ -Update majic to 1.2.0. diff --git a/changelog.d/mastodon-admin.add b/changelog.d/mastodon-admin.add deleted file mode 100644 index 64f2ca987..000000000 --- a/changelog.d/mastodon-admin.add +++ /dev/null @@ -1 +0,0 @@ -Implement basics of Mastodon admin API \ No newline at end of file diff --git a/changelog.d/mastodon-websocket-protocol.fix b/changelog.d/mastodon-websocket-protocol.fix deleted file mode 100644 index 66dab16ed..000000000 --- a/changelog.d/mastodon-websocket-protocol.fix +++ /dev/null @@ -1 +0,0 @@ -Echo Mastodon-style `Sec-WebSocket-Protocol` tokens in streaming WebSocket handshakes. diff --git a/changelog.d/media-proxy-truncated-stream.fix b/changelog.d/media-proxy-truncated-stream.fix deleted file mode 100644 index 12413e53e..000000000 --- a/changelog.d/media-proxy-truncated-stream.fix +++ /dev/null @@ -1 +0,0 @@ -Abort incomplete media proxy responses instead of caching partial bodies. diff --git a/changelog.d/mfm-backend.add b/changelog.d/mfm-backend.add deleted file mode 100644 index f815c6828..000000000 --- a/changelog.d/mfm-backend.add +++ /dev/null @@ -1 +0,0 @@ -Add backend support for Misskey Markdown (MFM) posts diff --git a/changelog.d/mfm-extend.skip b/changelog.d/mfm-extend.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/changelog.d/oauth-user-preload.change b/changelog.d/oauth-user-preload.change deleted file mode 100644 index 43f5ea06b..000000000 --- a/changelog.d/oauth-user-preload.change +++ /dev/null @@ -1 +0,0 @@ -Avoid a duplicate user query during OAuth authentication. diff --git a/changelog.d/oban-plugins-lazarus-hex.change b/changelog.d/oban-plugins-lazarus-hex.change deleted file mode 100644 index 9259df0f5..000000000 --- a/changelog.d/oban-plugins-lazarus-hex.change +++ /dev/null @@ -1 +0,0 @@ -Use the Hex package for oban_plugins_lazarus. diff --git a/changelog.d/oban-reindexer.add b/changelog.d/oban-reindexer.add deleted file mode 100644 index 5b56d9482..000000000 --- a/changelog.d/oban-reindexer.add +++ /dev/null @@ -1 +0,0 @@ -Oban: Enabled the Reindexer plugin to reduce oban_jobs index DB bloat diff --git a/changelog.d/openbsd-datasize-bump.change b/changelog.d/openbsd-datasize-bump.change deleted file mode 100644 index 9085cc43a..000000000 --- a/changelog.d/openbsd-datasize-bump.change +++ /dev/null @@ -1 +0,0 @@ -Docs OpenBSD: Increased recommended `datasize` from 1536M to 4096M to avoid Pleroma crashes diff --git a/changelog.d/opt-init.d-migrations.change b/changelog.d/opt-init.d-migrations.change deleted file mode 100644 index c53f2baa0..000000000 --- a/changelog.d/opt-init.d-migrations.change +++ /dev/null @@ -1 +0,0 @@ -- OpenRC: Automatically run migrations before starting pleroma diff --git a/changelog.d/optimize-orphaned-apps-cleanup.change b/changelog.d/optimize-orphaned-apps-cleanup.change deleted file mode 100644 index 3f037f125..000000000 --- a/changelog.d/optimize-orphaned-apps-cleanup.change +++ /dev/null @@ -1 +0,0 @@ -- Optimize orphaned OAuth apps cleanup by deleting records in batches instead of one by one. diff --git a/changelog.d/paradedb-search.add b/changelog.d/paradedb-search.add deleted file mode 100644 index f72ebca14..000000000 --- a/changelog.d/paradedb-search.add +++ /dev/null @@ -1 +0,0 @@ -Add ParadeDB (pg_search) as an optional external search backend, indexing status content, content warnings, and attachment descriptions. diff --git a/changelog.d/phoenix-sec-websocket-headers.change b/changelog.d/phoenix-sec-websocket-headers.change deleted file mode 100644 index b3cb4ad3f..000000000 --- a/changelog.d/phoenix-sec-websocket-headers.change +++ /dev/null @@ -1 +0,0 @@ -Switch patched Phoenix 1.7.14 back to upstream with Phoenix 1.8.0+ diff --git a/changelog.d/pleroma-fe-link.fix b/changelog.d/pleroma-fe-link.fix deleted file mode 100644 index de93f86dd..000000000 --- a/changelog.d/pleroma-fe-link.fix +++ /dev/null @@ -1 +0,0 @@ -Updated Pleroma-FE build URL after Forgejo migration diff --git a/changelog.d/poll-voters-count-inflation.fix b/changelog.d/poll-voters-count-inflation.fix deleted file mode 100644 index 7eae41f13..000000000 --- a/changelog.d/poll-voters-count-inflation.fix +++ /dev/null @@ -1 +0,0 @@ -Fix votersCount inflation when same voter picks multiple options diff --git a/changelog.d/previewcard-void-fill.fix b/changelog.d/previewcard-void-fill.fix deleted file mode 100644 index 04e571347..000000000 --- a/changelog.d/previewcard-void-fill.fix +++ /dev/null @@ -1 +0,0 @@ -Status: Fill all MastoAPI required values in preview cards diff --git a/changelog.d/publisher-worker-atoms.fix b/changelog.d/publisher-worker-atoms.fix deleted file mode 100644 index 2df6608ba..000000000 --- a/changelog.d/publisher-worker-atoms.fix +++ /dev/null @@ -1 +0,0 @@ -Avoid creating atoms from serialized PublisherWorker parameters. diff --git a/changelog.d/rebased-migration.change b/changelog.d/rebased-migration.change deleted file mode 100644 index 53ae0951a..000000000 --- a/changelog.d/rebased-migration.change +++ /dev/null @@ -1 +0,0 @@ -Add optional migrations for rollback from Rebased diff --git a/changelog.d/reject-third-party-reports.fix b/changelog.d/reject-third-party-reports.fix deleted file mode 100644 index 7d4e87b94..000000000 --- a/changelog.d/reject-third-party-reports.fix +++ /dev/null @@ -1 +0,0 @@ -Reject incoming reports when both the reporter and reported account are remote diff --git a/changelog.d/docker-arm32v7-pr-forbid-build.skip b/changelog.d/release-2.11.0.skip similarity index 100% rename from changelog.d/docker-arm32v7-pr-forbid-build.skip rename to changelog.d/release-2.11.0.skip diff --git a/changelog.d/remote-ip-hex.change b/changelog.d/remote-ip-hex.change deleted file mode 100644 index 44f6bc1bf..000000000 --- a/changelog.d/remote-ip-hex.change +++ /dev/null @@ -1 +0,0 @@ -Use upstream Hex releases for the `remote_ip` dependency and expose client IP ranges for remote IP resolution. diff --git a/changelog.d/restrict-unauthenticated-account-statuses.fix b/changelog.d/restrict-unauthenticated-account-statuses.fix deleted file mode 100644 index a6ae013fd..000000000 --- a/changelog.d/restrict-unauthenticated-account-statuses.fix +++ /dev/null @@ -1 +0,0 @@ -Fixed account status and media views exposing activities restricted from unauthenticated users. diff --git a/changelog.d/rss.fix b/changelog.d/rss.fix deleted file mode 100644 index a3455698a..000000000 --- a/changelog.d/rss.fix +++ /dev/null @@ -1 +0,0 @@ -Fix RSS feeds to be W3C compliant and render better in RSS readers diff --git a/changelog.d/stream-domain-block-following.fix b/changelog.d/stream-domain-block-following.fix deleted file mode 100644 index 84890c680..000000000 --- a/changelog.d/stream-domain-block-following.fix +++ /dev/null @@ -1 +0,0 @@ -Keep followed users visible in streams when their domain is blocked. diff --git a/changelog.d/syslog-fix-otp.skip b/changelog.d/syslog-fix-otp.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/changelog.d/syslog-pc.fix b/changelog.d/syslog-pc.fix deleted file mode 100644 index 3f08cec47..000000000 --- a/changelog.d/syslog-pc.fix +++ /dev/null @@ -1 +0,0 @@ -Fix intermittent failure to compile syslog package diff --git a/changelog.d/typo.skip b/changelog.d/typo.skip deleted file mode 100644 index d249c9bd4..000000000 --- a/changelog.d/typo.skip +++ /dev/null @@ -1 +0,0 @@ -Fix typo in spec diff --git a/changelog.d/unit-testing-build-vix.skip b/changelog.d/unit-testing-build-vix.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/changelog.d/user-cache-keys.fix b/changelog.d/user-cache-keys.fix deleted file mode 100644 index 4af21dd1f..000000000 --- a/changelog.d/user-cache-keys.fix +++ /dev/null @@ -1 +0,0 @@ -Fix inconsistent User cache keys and invalidate numeric ID aliases. diff --git a/changelog.d/user-search-sorting.change b/changelog.d/user-search-sorting.change deleted file mode 100644 index def27e955..000000000 --- a/changelog.d/user-search-sorting.change +++ /dev/null @@ -1 +0,0 @@ -Improve user search / autocompletion ordering. diff --git a/changelog.d/webhooks.add b/changelog.d/webhooks.add deleted file mode 100644 index 323428f9f..000000000 --- a/changelog.d/webhooks.add +++ /dev/null @@ -1 +0,0 @@ -Add support for Mastodon-compatible webhooks \ No newline at end of file diff --git a/changelog.d/weblate-ci.skip b/changelog.d/weblate-ci.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/changelog.d/woodpecker-armv7-fixups.fix b/changelog.d/woodpecker-armv7-fixups.fix deleted file mode 100644 index 7bbe7ab3e..000000000 --- a/changelog.d/woodpecker-armv7-fixups.fix +++ /dev/null @@ -1 +0,0 @@ -Include arm32v7 in multi-arch Docker images diff --git a/changelog.d/woodpecker-ci-docs.skip b/changelog.d/woodpecker-ci-docs.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/changelog.d/woodpecker-trigger-params.skip b/changelog.d/woodpecker-trigger-params.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/changelog.d/wpc-tagger-mirror.skip b/changelog.d/wpc-tagger-mirror.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/changelog.d/wss-necroposts.fix b/changelog.d/wss-necroposts.fix deleted file mode 100644 index 743f9087c..000000000 --- a/changelog.d/wss-necroposts.fix +++ /dev/null @@ -1 +0,0 @@ -RichMedia: Fix backfill causing old posts to show up on timelines by disabling it in MastoAPI StatusView diff --git a/config/config.exs b/config/config.exs index e2c110689..1b8baed1f 100644 --- a/config/config.exs +++ b/config/config.exs @@ -161,7 +161,11 @@ config :mime, :types, %{ "image/apng" => ["apng"] } -config :tesla, adapter: Tesla.Adapter.Hackney +config :tesla, adapter: Tesla.Adapter.Gun + +# Hackney 4 shares one HTTP/2 connection per host, and closing one response +# (as the media proxy does) stops it for every other stream on it. +config :hackney, default_protocols: [:http1] # Configures http settings, upstream proxy etc. config :pleroma, :http, @@ -802,7 +806,7 @@ config :pleroma, :frontends, "name" => "admin-fe", "git" => "https://git.pleroma.social/pleroma/admin-fe", "build_url" => - "https://git.pleroma.social/pleroma/admin-fe/-/jobs/artifacts/${ref}/download?job=build", + "https://git.pleroma.social/api/packages/pleroma/generic/admin-fe-builds/${ref}/latest.zip", "ref" => "develop" }, "soapbox" => %{ diff --git a/docs/administration/CLI_tasks/frontend.md b/docs/administration/CLI_tasks/frontend.md index 4e9d9eecb..404d016ed 100644 --- a/docs/administration/CLI_tasks/frontend.md +++ b/docs/administration/CLI_tasks/frontend.md @@ -76,6 +76,22 @@ The resulting frontend will always be installed into a folder of this template: Careful: This folder will be completely replaced on installation. +## Installing Admin-FE + +=== "OTP" + + ```sh + ./bin/pleroma_ctl frontend install admin-fe --ref stable + ``` + +=== "From Source" + + ```sh + mix pleroma.frontend install admin-fe --ref stable + ``` + +Builds come from the package registry: `https://git.pleroma.social/api/packages/pleroma/generic/admin-fe-builds/${ref}/latest.zip`. `stable` and `develop` are published; `stable` is the better choice for production. A release tag works as `--ref` once a build for it is published. + ## Example installation for an unknown frontend The installation process is the same, but you will have to give all the needed options on the command line. For example: diff --git a/docs/administration/frontends-management.md b/docs/administration/frontends-management.md index f982c4bca..9a3bec37d 100644 --- a/docs/administration/frontends-management.md +++ b/docs/administration/frontends-management.md @@ -56,7 +56,7 @@ Due to aforementioned bug, preferred way of installing frontends in AdminFE is b ![screenshot of admin-fe with instructions on how to install a frontend](../assets/way_to_install_frontends.png) and filling in the fields. Unfortunately AdminFE does not provide the raw data necessary for you to fill those fields, so your best bet is to see what backend returns in browser's devtools or refer to the [source code](https://git.pleroma.social/pleroma/pleroma/-/blob/develop/config/config.exs?ref_type=heads#L742-791). For the most part, only **Name**, **Ref** (i.e. version) and **Build URL** fields are required, although some frontends might also require **Build Directory** to work. -For pleroma-fe you can use either `master` or `develop` refs, or potentially any ref in GitLab that has artifacts for `build` job, but that's outside scope of this document. +Pleroma-FE and Admin-FE builds come from the package registry, not from GitLab job artifacts. For Admin-FE, set **Name** to `admin-fe`, **Ref** to `stable` (or `develop`) and **Build URL** to `https://git.pleroma.social/api/packages/pleroma/generic/admin-fe-builds/${ref}/latest.zip`. Only refs with a published build can be installed: `stable`, `develop`, and release tags once they are published. ### Selecting default frontend diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index 0275d2be0..0460caf26 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -541,6 +541,15 @@ Available caches: ## HTTP client +Pleroma uses [Gun](https://github.com/ninenines/gun) for outgoing HTTP requests. To use Hackney instead: + +```elixir +config :tesla, adapter: Tesla.Adapter.Hackney +``` + +!!! note + With Hackney, size limits for fetched responses (for example for link previews) are checked only after Hackney has read the whole response. They limit what Pleroma keeps, not how much it downloads or holds in memory. Gun stops reading at the limit. + ### :http * `proxy_url`: an upstream proxy to fetch posts and/or media with, (default: `nil`) @@ -550,6 +559,8 @@ Available caches: ### :hackney_pools +*For `hackney` adapter* + Advanced. Tweaks Hackney (http client) connections pools. There's three pools used: diff --git a/docs/installation/debian_based_jp.md b/docs/installation/debian_based_jp.md index 5b261296d..c853840c2 100644 --- a/docs/installation/debian_based_jp.md +++ b/docs/installation/debian_based_jp.md @@ -14,7 +14,7 @@ Note: This article is potentially outdated because at this time we may not have - PostgreSQL 11.0以上 (Ubuntu16.04では9.5しか提供されていないので,[](https://www.postgresql.org/download/linux/ubuntu/)こちらから新しいバージョンを入手してください) - `postgresql-contrib` 11.0以上 (同上) -- Elixir 1.15 以上 ([Debianのリポジトリからインストールしないこと!!! ここからインストールすること!](https://elixir-lang.org/install.html#unix-and-unix-like)。または [asdf](https://github.com/asdf-vm/asdf) をpleromaユーザーでインストールしてください) +- Elixir 1.17 以上 (Erlang/OTP 27 以上) ([Debianのリポジトリからインストールしないこと!!! ここからインストールすること!](https://elixir-lang.org/install.html#unix-and-unix-like)。または [asdf](https://github.com/asdf-vm/asdf) をpleromaユーザーでインストールしてください) - `erlang-dev` - `erlang-nox` - `git` diff --git a/docs/installation/erlang_elixir_requirements.include b/docs/installation/erlang_elixir_requirements.include index aa336dfe9..395d0f9de 100644 --- a/docs/installation/erlang_elixir_requirements.include +++ b/docs/installation/erlang_elixir_requirements.include @@ -1,2 +1,2 @@ -* Elixir >=1.15.0, <1.20 -* Erlang OTP >=24.0.0 (supported: <29) +* Elixir >=1.17.0, <1.20 +* Erlang OTP >=27.0.0 (supported: <29) diff --git a/docs/installation/migrating_from_rebased.md b/docs/installation/migrating_from_rebased.md index ce7f43b0d..254f2884a 100644 --- a/docs/installation/migrating_from_rebased.md +++ b/docs/installation/migrating_from_rebased.md @@ -46,7 +46,7 @@ present, `uploads`, and `instance`. Diff and restore any other non-stock configuration files, preserve their ownership, and review them before starting Pleroma. -Pleroma requires Elixir 1.15 or newer. Install supported Erlang and Elixir +Pleroma requires Elixir 1.17 or newer and Erlang/OTP 27 or newer. Install supported Erlang and Elixir versions as described in the installation guide for your distribution before running any Mix command. Do not reuse Rebased's `.tool-versions`. If you keep using [`asdf`](https://asdf-vm.com/), select supported versions in the diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 353e91f72..adc054f3b 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -66,6 +66,7 @@ defmodule Pleroma.Application do if match?({Tesla.Adapter.Finch, _}, adapter) do Logger.info("Starting Finch") + use_castore_for_otp_cacerts() Finch.start_link(name: MyFinch) end @@ -304,6 +305,15 @@ defmodule Pleroma.Application do end end + # Mint trusts the OTP CA store, which comes from the OS. Make it the CAStore + # bundle that the other adapters trust. OTP 24 has no such store and Mint + # uses CAStore there anyway. + defp use_castore_for_otp_cacerts do + if Code.ensure_loaded?(:public_key) and function_exported?(:public_key, :cacerts_load, 1) do + :ok = :public_key.cacerts_load(CAStore.file_path()) + end + end + defp http_children_hackney do pools = [:federation, :media] diff --git a/lib/pleroma/emails/mailer.ex b/lib/pleroma/emails/mailer.ex index 2a80f8547..e6abf4456 100644 --- a/lib/pleroma/emails/mailer.ex +++ b/lib/pleroma/emails/mailer.ex @@ -36,10 +36,11 @@ defmodule Pleroma.Emails.Mailer do def deliver(email, config \\ []) def deliver(email, config) do - # temporary hackney fix until hackney max_connections bug is fixed - # https://git.pleroma.social/pleroma/pleroma/-/issues/2101 + # Swoosh HTTP adapters use Hackney, which otherwise trusts its certifi bundle email = - Swoosh.Email.put_private(email, :hackney_options, ssl_options: [versions: [:"tlsv1.2"]]) + Swoosh.Email.put_private(email, :hackney_options, + ssl_options: Pleroma.HTTP.TLS.ssl_options() + ) case enabled?() do true -> Swoosh.Mailer.deliver(email, parse_config(config)) @@ -67,6 +68,21 @@ defmodule Pleroma.Emails.Mailer do end defp parse_config(config) do - Swoosh.Mailer.parse_config(@otp_app, __MODULE__, @mailer_config, config) + @otp_app + |> Swoosh.Mailer.parse_config(__MODULE__, @mailer_config, config) + |> put_mua_cacertfile() + end + + @doc false + # Mua otherwise trusts the OS CA store. Keep a CA that the admin set. + def put_mua_cacertfile(config) do + ssl = Keyword.get(config, :ssl, []) + + if config[:adapter] == Swoosh.Adapters.Mua and + not Keyword.has_key?(ssl, :cacertfile) and not Keyword.has_key?(ssl, :cacerts) do + Keyword.put(config, :ssl, [{:cacertfile, CAStore.file_path()} | ssl]) + else + config + end end end diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index 4bf2f6b95..59df4d20a 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -3,12 +3,15 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Formatter do + require Logger + alias Pleroma.HTML alias Pleroma.User @safe_mention_regex ~r/^(\s*(?(@.+?\s+){1,})+)(?.*)/s @link_regex ~r"((?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~%:/?#[\]@!\$&'\(\)\*\+,;=.]+)|[0-9a-z+\-\.]+:[0-9a-z$-_.+!*'(),]+"ui @markdown_characters_regex ~r/(`|\*|_|{|}|[|]|\(|\)|#|\+|-|\.|!)/ + @markdown_void_elements ~w[area base br col command embed hr img input keygen link meta param source track wbr] defp linkify_opts do Pleroma.Config.get(Pleroma.Formatter) ++ @@ -124,14 +127,157 @@ defmodule Pleroma.Formatter do end def markdown_to_html(text) do - Earmark.as_html!(text, %Earmark.Options{compact_output: true, smartypants: false}) + markdown_to_html(text, %{}) end def markdown_to_html(text, opts) do - Earmark.as_html!( - text, - %Earmark.Options{compact_output: true, smartypants: false} |> Map.merge(opts) - ) + breaks = Map.get(opts, :breaks, false) + + {_status, ast, _messages} = EarmarkParser.as_ast(text, breaks: breaks, gfm: true) + + ast + |> maybe_strip_email_autolinks(text, Map.get(opts, :strip_email_autolinks, false)) + |> render_markdown_nodes(false) + |> IO.iodata_to_binary() + rescue + exception -> + Logger.warning("Markdown rendering failed in #{inspect(exception.__struct__)}") + markdown_fallback(text, Map.get(opts, :breaks, false)) + end + + defp markdown_fallback(text, breaks) do + text = text |> escape_html() |> IO.iodata_to_binary() |> maybe_render_markdown_breaks(breaks) + "

" <> text <> "

" + end + + defp maybe_render_markdown_breaks(text, true), do: String.replace(text, ~r/\r?\n/, "
") + defp maybe_render_markdown_breaks(text, false), do: text + + defp maybe_strip_email_autolinks(ast, _text, false), do: ast + + defp maybe_strip_email_autolinks(ast, text, true) do + emails = + ~r/<([^ >]+@[^ >]+)>/ + |> Regex.scan(text, capture: :all_but_first) + |> Enum.map(fn [email] -> String.replace_prefix(email, "mailto:", "") end) + |> MapSet.new() + + strip_email_autolinks(ast, emails) + end + + defp strip_email_autolinks(nodes, emails) when is_list(nodes) do + Enum.map(nodes, &strip_email_autolinks(&1, emails)) + end + + defp strip_email_autolinks({"a", attrs, [email], _meta} = node, emails) + when is_binary(email) do + if List.keyfind(attrs, "href", 0) == {"href", "mailto:" <> email} and + MapSet.member?(emails, email) do + email + else + node + end + end + + defp strip_email_autolinks({tag, attrs, children, meta}, emails) do + {tag, attrs, strip_email_autolinks(children, emails), meta} + end + + defp strip_email_autolinks(text, _emails) when is_binary(text), do: text + + defp render_markdown_nodes(nodes, verbatim) when is_list(nodes) do + Enum.map(nodes, &render_markdown_node(&1, verbatim)) + end + + defp render_markdown_node(text, true) when is_binary(text), + do: strip_dangerous_markdown_html(text) + + defp render_markdown_node(text, false) when is_binary(text) do + text + |> strip_dangerous_markdown_html() + |> escape_markdown_html() + end + + defp render_markdown_node({:comment, _attrs, _children, _meta}, _verbatim), do: [] + + defp render_markdown_node({tag, attrs, children, meta}, verbatim) do + normalized_tag = String.downcase(tag) + + if normalized_tag in ["script", "style"] do + [] + else + render_markdown_element(tag, normalized_tag, attrs, children, meta, verbatim) + end + end + + defp render_markdown_element("code", _normalized_tag, attrs, children, _meta, _verbatim) do + ["", render_markdown_code(children), ""] + end + + defp render_markdown_element(tag, "hr", attrs, _children, _meta, _verbatim) do + attrs = Enum.reject(attrs, &match?({"class", class} when class in ~w[thin medium thick], &1)) + ["<", tag, render_markdown_attrs(attrs), "/>"] + end + + defp render_markdown_element(tag, normalized_tag, attrs, _children, _meta, _verbatim) + when normalized_tag in @markdown_void_elements do + ["<", tag, render_markdown_attrs(attrs), ">"] + end + + defp render_markdown_element(tag, _normalized_tag, attrs, children, meta, verbatim) do + children_verbatim = verbatim or Map.get(meta, :verbatim, false) + + [ + "<", + tag, + render_markdown_attrs(attrs), + ">", + render_markdown_nodes(children, children_verbatim), + "" + ] + end + + defp render_markdown_attrs(attrs) do + Enum.map(attrs, fn {name, value} -> + value = value |> to_string() |> HtmlEntities.decode() |> sanitize_markdown_url(name) + [" ", to_string(name), "=\"", escape_html(value), "\""] + end) + end + + defp render_markdown_code(children) do + Enum.map(children, &escape_html/1) + end + + defp sanitize_markdown_url(value, name) do + if String.downcase(to_string(name)) in ["href", "src"] do + # Percent-encode instead of cutting, so the URL stays complete but can + # never close the attribute or open a tag. + String.replace(value, ~r/["<>]/, fn + "\"" -> "%22" + "<" -> "%3C" + ">" -> "%3E" + end) + else + value + end + end + + defp strip_dangerous_markdown_html(text) do + text + |> String.replace(~r/<(script|style)\b[^>]*>.*?<\/\1>/is, "") + |> String.replace(~r/<(script|style)\b[^>]*>.*\z/is, "") + |> String.replace(~r/<\/(script|style)\s*>/i, "") + end + + defp escape_markdown_html(text) do + text |> HtmlEntities.decode() |> escape_html() + end + + defp escape_html(text) do + {:safe, escaped} = Phoenix.HTML.html_escape(text) + escaped end def html_escape({text, mentions, hashtags}, type) do diff --git a/lib/pleroma/html/uri_attributes.ex b/lib/pleroma/html/uri_attributes.ex new file mode 100644 index 000000000..491f43e3d --- /dev/null +++ b/lib/pleroma/html/uri_attributes.ex @@ -0,0 +1,40 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.HTML.URIAttributes do + @moduledoc """ + URI attribute rules for the scrubbers. + + Works like `FastSanitize.Sanitizer.Meta.allow_tag_with_uri_attributes/3`, but + checks the scheme the way a browser reads the URL. Browsers remove tabs and + newlines anywhere and control characters and spaces at the start, so + `java\\tscript:` is a `javascript:` link to them, while `URI.parse/1` finds no + scheme and FastSanitize lets it through. + """ + + defmacro allow_tag_with_uri_attributes(tag, attrs, valid_schemes) do + for attr <- attrs do + quote do + def scrub_attribute(unquote(tag), {unquote(attr), "&" <> _}), do: nil + + def scrub_attribute(unquote(tag), {unquote(attr), uri} = attribute) do + if Pleroma.HTML.URIAttributes.valid_scheme?(uri, unquote(valid_schemes)), + do: attribute + end + end + end + end + + @spec valid_scheme?(String.t(), [String.t()]) :: boolean() + def valid_scheme?(uri, valid_schemes) do + scheme = + uri + |> String.replace(~r/[\t\n\r]/, "") + |> String.replace(~r/\A[\x00-\x20]+/, "") + |> URI.parse() + |> Map.get(:scheme) + + is_nil(scheme) or scheme in valid_schemes + end +end diff --git a/lib/pleroma/http.ex b/lib/pleroma/http.ex index bdeb2171e..c230cea46 100644 --- a/lib/pleroma/http.ex +++ b/lib/pleroma/http.ex @@ -130,5 +130,9 @@ defmodule Pleroma.HTTP do end defp default_middleware, - do: [Tesla.Middleware.FollowRedirects, Pleroma.Tesla.Middleware.EncodeUrl] + do: [ + Tesla.Middleware.FollowRedirects, + Pleroma.Tesla.Middleware.EncodeUrl, + Pleroma.Tesla.Middleware.MaxBody + ] end diff --git a/lib/pleroma/http/adapter_helper.ex b/lib/pleroma/http/adapter_helper.ex index 32c1080f7..4f0e23f20 100644 --- a/lib/pleroma/http/adapter_helper.ex +++ b/lib/pleroma/http/adapter_helper.ex @@ -46,6 +46,24 @@ defmodule Pleroma.HTTP.AdapterHelper do |> adapter_helper().options(uri) end + @doc """ + The configured Tesla adapter with TLS options, for clients that do not go + through `Pleroma.HTTP`. + """ + @spec tesla_adapter() :: module() | {module(), keyword()} + def tesla_adapter do + case adapter() do + Tesla.Adapter.Hackney -> + {Tesla.Adapter.Hackney, Pleroma.HTTP.TLS.put_hackney_ssl_options([])} + + Tesla.Adapter.Gun -> + {Tesla.Adapter.Gun, certificates_verification: true} + + adapter -> + adapter + end + end + defp adapter, do: Application.get_env(:tesla, :adapter) defp adapter_helper do diff --git a/lib/pleroma/http/adapter_helper/gun.ex b/lib/pleroma/http/adapter_helper/gun.ex index 9ac87adb5..11efaca88 100644 --- a/lib/pleroma/http/adapter_helper/gun.ex +++ b/lib/pleroma/http/adapter_helper/gun.ex @@ -28,6 +28,7 @@ defmodule Pleroma.HTTP.AdapterHelper.Gun do @defaults |> Keyword.merge(config_opts) + |> ssl_options_to_tls_opts() |> add_scheme_opts(uri) |> AdapterHelper.maybe_add_proxy(proxy) |> Keyword.merge(incoming_opts) @@ -35,6 +36,15 @@ defmodule Pleroma.HTTP.AdapterHelper.Gun do |> maybe_stream() end + # [:http, :adapter, :ssl_options] is Hackney's name for the TLS options, + # and AdminFE sets it. Keep those settings when Gun is the adapter. + defp ssl_options_to_tls_opts(opts) do + case Keyword.pop(opts, :ssl_options) do + {nil, opts} -> opts + {ssl_options, opts} -> Keyword.put_new(opts, :tls_opts, ssl_options) + end + end + defp add_scheme_opts(opts, %{scheme: "http"}), do: opts defp add_scheme_opts(opts, %{scheme: "https"}) do diff --git a/lib/pleroma/http/adapter_helper/hackney.ex b/lib/pleroma/http/adapter_helper/hackney.ex index 2b1502001..b9e1d020f 100644 --- a/lib/pleroma/http/adapter_helper/hackney.ex +++ b/lib/pleroma/http/adapter_helper/hackney.ex @@ -28,6 +28,25 @@ defmodule Pleroma.HTTP.AdapterHelper.Hackney do |> add_scheme_opts(uri) |> maybe_add_with_body() |> Pleroma.HTTP.AdapterHelper.maybe_add_proxy(proxy) + |> Keyword.put(:follow_redirect, false) + |> Keyword.put(:force_redirect, false) + |> normalize_proxy() + |> Pleroma.HTTP.TLS.put_hackney_ssl_options() + end + + # Hackney 4 ignores a proxy whose host is an IP tuple and connects directly. + # ConfigDB turns a numeric proxy host into such a tuple. + defp normalize_proxy(opts) do + case Keyword.fetch(opts, :proxy) do + {:ok, {type, host, port}} when is_tuple(host) -> + Keyword.put(opts, :proxy, {type, :inet.ntoa(host), port}) + + {:ok, {host, port}} when is_tuple(host) -> + Keyword.put(opts, :proxy, {:inet.ntoa(host), port}) + + _ -> + opts + end end defp add_scheme_opts(opts, _), do: opts diff --git a/lib/pleroma/http/tls.ex b/lib/pleroma/http/tls.ex new file mode 100644 index 000000000..bb90f8e4e --- /dev/null +++ b/lib/pleroma/http/tls.ex @@ -0,0 +1,49 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.HTTP.TLS do + @moduledoc """ + TLS client options that trust the CAStore bundle. + + Hackney otherwise trusts its own certifi bundle. Hackney 1 drops all of its + default TLS options, including certificate checks, as soon as any + `ssl_options` are given. Hackney 4 merges them, so `partial_chain` must be + set too: Hackney's own one trusts any certificate in the peer chain that is + in certifi. + """ + + @spec ssl_options(keyword()) :: keyword() + def ssl_options(overrides \\ []) do + defaults = [ + verify: :verify_peer, + cacertfile: CAStore.file_path(), + depth: 20, + customize_hostname_check: [match_fun: :public_key.pkix_verify_hostname_match_fun(:https)], + partial_chain: &__MODULE__.reject_partial_chain/1 + ] + + # Hackney drops cacerts when cacertfile is set too. + defaults = + if Keyword.has_key?(overrides, :cacerts), + do: Keyword.delete(defaults, :cacertfile), + else: defaults + + Keyword.merge(defaults, overrides) + end + + @doc false + def reject_partial_chain(_certs), do: :unknown_ca + + @spec put_hackney_ssl_options(keyword()) :: keyword() + def put_hackney_ssl_options(opts) do + # Hackney 4 ignores the top-level insecure option and falls back to certifi. + if opts[:insecure] do + Keyword.put(opts, :ssl_options, verify: :verify_none) + else + opts + |> Keyword.put(:ssl_options, ssl_options(Keyword.get(opts, :ssl_options, []))) + |> Keyword.put(:proxy_ssl_options, ssl_options(Keyword.get(opts, :proxy_ssl_options, []))) + end + end +end diff --git a/lib/pleroma/reverse_proxy.ex b/lib/pleroma/reverse_proxy.ex index ee20303a3..77ab95964 100644 --- a/lib/pleroma/reverse_proxy.ex +++ b/lib/pleroma/reverse_proxy.ex @@ -112,7 +112,13 @@ defmodule Pleroma.ReverseProxy do def call(_conn, _url, _opts \\ []) def call(conn = %{method: method}, url, opts) when method in @methods do - client_opts = Keyword.merge(@default_options, Keyword.get(opts, :http, [])) + client_opts = + @default_options + |> Keyword.merge(Keyword.get(opts, :http, [])) + |> Keyword.put_new( + :recv_timeout, + receive_timeout(opts) + ) req_headers = build_req_headers(conn.req_headers, opts) @@ -506,7 +512,16 @@ defmodule Pleroma.ReverseProxy do end end - defp check_read_duration(_, _), do: {:ok, :no_duration_limit, :no_duration_limit} + defp check_read_duration(_, _), do: {:ok, :no_duration_limit} + + defp receive_timeout(opts) do + case Keyword.get(opts, :max_read_duration, @max_read_duration) do + timeout when is_integer(timeout) and timeout > 0 -> timeout + _ -> :infinity + end + end + + defp increase_read_duration(:no_duration_limit), do: {:ok, :no_duration_limit} defp increase_read_duration({previous_duration, started}) when is_integer(previous_duration) and is_integer(started) do diff --git a/lib/pleroma/reverse_proxy/client/hackney.ex b/lib/pleroma/reverse_proxy/client/hackney.ex index 4c81a6225..b4d2b5e01 100644 --- a/lib/pleroma/reverse_proxy/client/hackney.ex +++ b/lib/pleroma/reverse_proxy/client/hackney.ex @@ -28,17 +28,18 @@ defmodule Pleroma.ReverseProxy.Client.Hackney do @impl true def request(method, url, headers, body, opts \\ []) do opts = - Keyword.put_new(opts, :path_encode_fun, fn path -> - path - end) + opts + |> Keyword.put_new(:path_encode_fun, fn path -> path end) + |> Pleroma.HTTP.TLS.put_hackney_ssl_options() if opts[:follow_redirect] != false do {_state, req_opts} = Access.get_and_update(opts, :follow_redirect, fn a -> {a, false} end) env = %{method: method, headers: headers, body: body, req_opts: req_opts} - res = :hackney.request(method, url, headers, body, req_opts) + res = do_request(method, url, headers, body, req_opts) case res do - {:ok, code, resp_headers, _client} when code in @redirect_statuses -> + {:ok, code, resp_headers, client} when code in @redirect_statuses -> + close(client) redirect(url, resp_headers, env, @redirect_limit) {:ok, code, resp_headers} when code in @redirect_statuses -> @@ -48,11 +49,34 @@ defmodule Pleroma.ReverseProxy.Client.Hackney do res end else - :hackney.request(method, url, headers, body, opts) + do_request(method, url, headers, body, opts) end end @impl true + def stream_body(%{released: true}), do: :done + + def stream_body(%{ref: ref, recv_timeout: recv_timeout} = client) do + _ = :hackney.stream_next(ref) + + case receive_response(ref, recv_timeout) do + {:ok, data} when is_binary(data) -> + {:ok, data, client} + + # Reaching the end of the body does not free the connection: Hackney parks + # a finished conn instead of stopping it, and an unpooled one has neither + # an idle timeout nor a live owner monitor to reap it, so it would sit + # there forever pinning every binary it read. Release it here, mirroring + # what the gun client does, so callers only close what they abandon. + {:ok, :done} -> + close(client) + :done + + {:error, error} -> + {:error, error} + end + end + def stream_body(ref) do case :hackney.stream_body(ref) do :done -> :done @@ -62,8 +86,98 @@ defmodule Pleroma.ReverseProxy.Client.Hackney do end @impl true + def close(%{released: true}), do: :ok + + def close(%{ref: ref}), do: :hackney.close(ref) + def close(ref), do: :hackney.close(ref) + defp do_request(method, url, headers, body, opts) do + recv_timeout = Keyword.get(opts, :recv_timeout, :infinity) + + req_opts = + opts + |> Keyword.put(:async, :once) + |> Keyword.put(:stream_to, self()) + + with {:ok, ref} <- :hackney.request(method, url, headers, body, req_opts) do + result = + with {:ok, {:status, code, _reason}} <- receive_response(ref, recv_timeout), + {:ok, {:headers, resp_headers}} <- receive_response(ref, recv_timeout) do + {:ok, code, resp_headers, build_client(ref, recv_timeout, method, code, opts)} + end + + case result do + {:ok, _, _, _} = response -> + response + + error -> + close(ref) + flush_responses(ref) + error + end + end + end + + # A response that cannot carry a body (204, 304, or a reply to HEAD) is + # complete as soon as the headers are parsed. Hackney queues `done` for us and, + # if the connection is pooled, checks it straight back in, so the ref stops + # being ours at that point: pulling the stream or stopping the connection + # afterwards would disturb whichever request checks it out next. Mark it so + # `stream_body/1` and `close/1` leave it alone. + # + # This relies on hackney never running its own redirect handling for us -- + # `request/5` forces `follow_redirect: false` -- otherwise a redirect status + # would be checked back in too and would need the same treatment. + defp build_client(ref, recv_timeout, method, code, opts) do + client = %{ref: ref, recv_timeout: recv_timeout} + + if released?(method, code) and pooled?(opts) do + flush_responses(ref) + Map.put(client, :released, true) + else + client + end + end + + defp released?(method, _code) when method in [:head, :HEAD, "head", "HEAD"], do: true + defp released?(_method, code) when code in [204, 304], do: true + defp released?(_method, _code), do: false + + # Mirrors hackney's own pooling decision: :hackney.use_pool/1, plus the fact + # that a proxy tunnel always bypasses the pool. An unpooled connection is never + # checked in, and parks in `connected` with no idle timeout, so it leaks + # forever unless we stop it ourselves. + defp pooled?(opts) do + no_proxy?(Keyword.get(opts, :proxy)) and use_pool?(Keyword.get(opts, :pool)) + end + + # Hackney reads `false` as "no proxy", same as an absent option. + defp no_proxy?(nil), do: true + defp no_proxy?(false), do: true + defp no_proxy?(_proxy), do: false + + defp use_pool?(false), do: false + defp use_pool?(nil), do: Application.get_env(:hackney, :use_default_pool, true) + defp use_pool?(_pool_name), do: true + + defp receive_response(ref, recv_timeout) do + receive do + {:hackney_response, ^ref, {:error, error}} -> {:error, error} + {:hackney_response, ^ref, response} -> {:ok, response} + after + recv_timeout -> {:error, :timeout} + end + end + + defp flush_responses(ref) do + receive do + {:hackney_response, ^ref, _response} -> flush_responses(ref) + after + 0 -> :ok + end + end + defp redirect(url, resp_headers, env, limit) when limit == 0 do new_url = absolute_redirect_url(url, resp_headers) @@ -71,17 +185,18 @@ defmodule Pleroma.ReverseProxy.Client.Hackney do "#{__MODULE__}: Handling redirect #{url} -> #{new_url}; redirect limit was reached - returning response after final redirect" ) - :hackney.request(env.method, new_url, env.headers, env.body, env.req_opts) + do_request(env.method, new_url, env.headers, env.body, env.req_opts) end defp redirect(url, resp_headers, env, limit) do new_url = absolute_redirect_url(url, resp_headers) Logger.debug("#{__MODULE__}: handling redirect #{url} -> #{new_url}; limit = #{limit}") - res = :hackney.request(env.method, new_url, env.headers, env.body, env.req_opts) + res = do_request(env.method, new_url, env.headers, env.body, env.req_opts) case res do - {:ok, code, new_resp_headers, _client} when code in @redirect_statuses -> + {:ok, code, new_resp_headers, client} when code in @redirect_statuses -> + close(client) redirect(new_url, new_resp_headers, env, limit - 1) {:ok, code, new_resp_headers} when code in @redirect_statuses -> diff --git a/lib/pleroma/search/qdrant_search.ex b/lib/pleroma/search/qdrant_search.ex index 4d57cfa88..a8c5a3eb9 100644 --- a/lib/pleroma/search/qdrant_search.ex +++ b/lib/pleroma/search/qdrant_search.ex @@ -160,7 +160,7 @@ defmodule Pleroma.Search.QdrantSearch.OpenAIClient do end defp client do - Tesla.client(middleware()) + Tesla.client(middleware(), Pleroma.HTTP.AdapterHelper.tesla_adapter()) end defp middleware do @@ -191,7 +191,7 @@ defmodule Pleroma.Search.QdrantSearch.QdrantClient do end defp client do - Tesla.client(middleware()) + Tesla.client(middleware(), Pleroma.HTTP.AdapterHelper.tesla_adapter()) end defp middleware do diff --git a/lib/pleroma/tesla/middleware/max_body.ex b/lib/pleroma/tesla/middleware/max_body.ex new file mode 100644 index 000000000..7e74f0b56 --- /dev/null +++ b/lib/pleroma/tesla/middleware/max_body.ex @@ -0,0 +1,72 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Tesla.Middleware.MaxBody do + @moduledoc """ + Enforces the `:max_body` adapter option for every adapter. + + `Pleroma.HTTP.Adapter.Gun` applies the limit as it accumulates a `:plain` + body, so an oversized response is abandoned mid-transfer. Hackney cannot: + since 4.0 it ignores `with_body` and always hands back a fully read binary + (`hackney:request/5`), so `Tesla.Adapter.Hackney` never takes the branch that + would honour `:max_body`. Without this middleware the option is silently + unenforced there. + + The check therefore bounds what callers are handed, and refuses up front when + `content-length` already announces too much. It cannot bound peak memory on + the hackney path, because the adapter has read the body before any middleware + runs. + + Streaming bodies are left alone: neither adapter limits those, and the caller + that owns the stream is the one that has to drain and release it. + """ + + @behaviour Tesla.Middleware + + @impl Tesla.Middleware + def call(%Tesla.Env{opts: opts} = env, next, _opts) do + case opts[:adapter][:max_body] do + limit when is_integer(limit) and limit >= 0 -> run(env, next, limit) + _ -> Tesla.run(env, next) + end + end + + defp run(env, next, limit) do + with {:ok, env} <- Tesla.run(env, next), + :ok <- check(env, limit) do + {:ok, env} + end + end + + defp check(%Tesla.Env{body: body} = env, limit) when is_binary(body) do + with :ok <- check_content_length(env, limit) do + check_body(body, limit) + end + end + + # body_as: :chunks and response: :stream hand back a client the caller drains + # itself, applying its own limit (Pleroma.Web.RichMedia.Helpers). There is + # nothing to measure, and failing on the header alone would strand the pool + # lease that only the caller holds a handle to. + defp check(_env, _limit), do: :ok + + # A bodyless response may still announce the entity's size. + defp check_content_length(%Tesla.Env{method: :head}, _limit), do: :ok + + defp check_content_length(%Tesla.Env{status: status}, _limit) when status in [204, 304], + do: :ok + + defp check_content_length(env, limit) do + with value when is_binary(value) <- Tesla.get_header(env, "content-length"), + {length, ""} <- Integer.parse(value) do + if length > limit, do: {:error, :body_too_large}, else: :ok + else + _ -> :ok + end + end + + defp check_body(body, limit) do + if byte_size(body) > limit, do: {:error, :body_too_large}, else: :ok + end +end diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index 26034d685..255803c14 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -324,7 +324,7 @@ defmodule Pleroma.Web.CommonAPI.Utils do def format_input(text, "text/x.misskeymarkdown", options) do text - |> Formatter.markdown_to_html(%{breaks: true}) + |> Formatter.markdown_to_html(%{breaks: true, strip_email_autolinks: true}) |> safe_mfm_to_html() |> Formatter.linkify(options) |> Formatter.html_escape("text/x.misskeymarkdown") diff --git a/mix.exs b/mix.exs index 3598a4f53..d6c2be21f 100644 --- a/mix.exs +++ b/mix.exs @@ -4,8 +4,8 @@ defmodule Pleroma.Mixfile do def project do [ app: :pleroma, - version: version("2.10.2"), - elixir: "~> 1.15", + version: version("2.11.0"), + elixir: "~> 1.17", elixirc_paths: elixirc_paths(Mix.env()), compilers: Mix.compilers(), elixirc_options: [warnings_as_errors: warnings_as_errors(), prune_code_paths: false], @@ -130,13 +130,13 @@ defmodule Pleroma.Mixfile do # Type `mix help deps` for examples and options. defp deps do [ - {:phoenix, "~> 1.8.0"}, + {:phoenix, "~> 1.8"}, {:phoenix_ecto, "~> 4.6"}, {:ecto_sql, "~> 3.13"}, {:ecto_enum, "~> 1.4"}, - {:postgrex, ">= 0.21.1"}, + {:postgrex, "~> 0.22"}, {:phoenix_html, "~> 3.3"}, - {:phoenix_live_view, "~> 1.1.19"}, + {:phoenix_live_view, "~> 1.2"}, {:phoenix_live_dashboard, "~> 0.8.7"}, {:telemetry_metrics, "~> 0.6"}, {:telemetry_poller, "~> 1.3"}, @@ -152,22 +152,24 @@ defmodule Pleroma.Mixfile do {:html_entities, "~> 0.5", override: true}, {:calendar, "~> 1.0"}, {:cachex, "~> 3.6"}, - {:tesla, "~> 1.15"}, + {:tesla, "~> 1.20.0"}, {:castore, "~> 1.0"}, - {:cowlib, "~> 2.17.1"}, - {:gun, "~> 2.4.1"}, + {:cowlib, "~> 2.20"}, + {:gun, "~> 2.6"}, {:finch, "~> 0.20"}, {:jason, "~> 1.4"}, {:mogrify, "~> 0.9.3", override: true}, {:ex_aws, "~> 2.1.9"}, {:ex_aws_s3, "~> 2.5"}, {:sweet_xml, "~> 0.7.5"}, - {:earmark, "1.4.46"}, + {:earmark_parser, "~> 1.4.46"}, {:bbcode_pleroma, "~> 0.2.0"}, + {:nimble_parsec, "~> 1.4", override: true}, {:pleroma_mfm_parser, "~> 0.2.1"}, {:cors_plug, "~> 2.0"}, {:web_push_encryption, "~> 0.3.1"}, - {:swoosh, "~> 1.16.12"}, + {:httpoison, "~> 3.0", override: true}, + {:swoosh, "~> 1.28"}, {:phoenix_swoosh, "~> 1.2"}, {:gen_smtp, "~> 0.15"}, {:mua, "~> 0.2.4"}, @@ -207,7 +209,7 @@ defmodule Pleroma.Mixfile do {:elixir_make, "~> 0.7.8", override: true}, {:blurhash, "~> 0.1.0", hex: :rinpatch_blurhash}, {:exile, "~> 0.10.0"}, - {:bandit, "~> 1.10"}, + {:bandit, "~> 1.12"}, {:websock_adapter, "~> 0.5.8"}, {:oban_live_dashboard, "~> 0.1.1"}, {:multipart, "~> 0.4.0", optional: true}, @@ -219,9 +221,12 @@ defmodule Pleroma.Mixfile do {:ex_doc, "~> 0.38", only: :dev, runtime: false}, {:ex_machina, "~> 2.8", only: :test}, {:credo, "~> 1.7", only: [:dev, :test], runtime: false}, + {:mix_audit, "~> 2.1", only: [:dev, :test], runtime: false}, {:mock, "~> 0.3.9", only: :test}, {:covertool, "~> 2.0", only: :test}, - {:hackney, "~> 1.20.1", override: true}, + {:hackney, "~> 4.7.3", override: true}, + # Hackney 4.7.3 pins certifi ~> 2.17.0; 2.18.0 drops the distrusted emSign roots. + {:certifi, "~> 2.18.0", override: true}, {:mox, "~> 1.2", only: :test}, {:websockex, "~> 0.4.3", only: :test}, {:benchee, "~> 1.4", only: :benchmark}, diff --git a/mix.lock b/mix.lock index 369365cdc..2f2cce9e2 100644 --- a/mix.lock +++ b/mix.lock @@ -1,7 +1,7 @@ %{ "accept": {:hex, :accept, "0.3.5", "b33b127abca7cc948bbe6caa4c263369abf1347cfa9d8e699c6d214660f10cd1", [:rebar3], [], "hexpm", "11b18c220bcc2eab63b5470c038ef10eb6783bcb1fcdb11aa4137defa5ac1bb8"}, "argon2_elixir": {:hex, :argon2_elixir, "4.1.3", "4f28318286f89453364d7fbb53e03d4563fd7ed2438a60237eba5e426e97785f", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "7c295b8d8e0eaf6f43641698f962526cdf87c6feb7d14bd21e599271b510608c"}, - "bandit": {:hex, :bandit, "1.10.4", "02b9734c67c5916a008e7eb7e2ba68aaea6f8177094a5f8d95f1fb99069aac17", [:mix], [{:hpax, "~> 1.0", [hex: :hpax, repo: "hexpm", optional: false]}, {:plug, "~> 1.18", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:thousand_island, "~> 1.0", [hex: :thousand_island, repo: "hexpm", optional: false]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "a5faf501042ac1f31d736d9d4a813b3db4ef812e634583b6a457b0928798a51d"}, + "bandit": {:hex, :bandit, "1.13.1", "1ce25a7beb750ed3fa2e905962f1f9a679cb585f1da0ae45637d06e385ce2eae", [:mix], [{:hpax, "~> 1.1", [hex: :hpax, repo: "hexpm", optional: false]}, {:plug, "~> 1.18", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:thousand_island, "~> 1.6", [hex: :thousand_island, repo: "hexpm", optional: false]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "39028f0b5a21404661410a6c19275060a9822c9dcca70b7c3e4e4fa50b11da58"}, "base62": {:hex, :base62, "1.2.2", "85c6627eb609317b70f555294045895ffaaeb1758666ab9ef9ca38865b11e629", [:mix], [{:custom_base, "~> 0.2.1", [hex: :custom_base, repo: "hexpm", optional: false]}], "hexpm", "d41336bda8eaa5be197f1e4592400513ee60518e5b9f4dcf38f4b4dae6f377bb"}, "bbcode_pleroma": {:hex, :bbcode_pleroma, "0.2.0", "d36f5bca6e2f62261c45be30fa9b92725c0655ad45c99025cb1c3e28e25803ef", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "19851074419a5fedb4ef49e1f01b30df504bb5dbb6d6adfc135238063bebd1c3"}, "bcrypt_elixir": {:hex, :bcrypt_elixir, "2.3.1", "5114d780459a04f2b4aeef52307de23de961b69e13a5cd98a911e39fda13f420", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "42182d5f46764def15bf9af83739e3bf4ad22661b1c34fc3e88558efced07279"}, @@ -11,32 +11,31 @@ "cachex": {:hex, :cachex, "3.6.0", "14a1bfbeee060dd9bec25a5b6f4e4691e3670ebda28c8ba2884b12fe30b36bf8", [:mix], [{:eternal, "~> 1.2", [hex: :eternal, repo: "hexpm", optional: false]}, {:jumper, "~> 1.0", [hex: :jumper, repo: "hexpm", optional: false]}, {:sleeplocks, "~> 1.1", [hex: :sleeplocks, repo: "hexpm", optional: false]}, {:unsafe, "~> 1.0", [hex: :unsafe, repo: "hexpm", optional: false]}], "hexpm", "ebf24e373883bc8e0c8d894a63bbe102ae13d918f790121f5cfe6e485cc8e2e2"}, "calendar": {:hex, :calendar, "1.0.0", "f52073a708528482ec33d0a171954ca610fe2bd28f1e871f247dc7f1565fa807", [:mix], [{:tzdata, "~> 0.1.201603 or ~> 0.5.20 or ~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "990e9581920c82912a5ee50e62ff5ef96da6b15949a2ee4734f935fdef0f0a6f"}, "captcha": {:hex, :pleroma_captcha, "1.0.4", "6e28ef98660981daeb4aee5043551d921b0094ec5bdeb4daf2f01858e14e9d2d", [:make, :mix], [], "hexpm", "aee86d4da3522ef39ba814e6954c4ebe692e72664efcb8fa5819b1335999b577"}, - "castore": {:hex, :castore, "1.0.15", "8aa930c890fe18b6fe0a0cff27b27d0d4d231867897bd23ea772dee561f032a3", [:mix], [], "hexpm", "96ce4c69d7d5d7a0761420ef743e2f4096253931a3ba69e5ff8ef1844fe446d3"}, + "castore": {:hex, :castore, "1.0.22", "a01978e6a5d42fa3a34143630588f92036e7d90e2309ecdd466722d1279a2213", [:mix], [], "hexpm", "c2a4d42723b4affbc1c3e15d8f6df3f7d8f1f627c84de643383634cce58493d5"}, "cc_precompiler": {:hex, :cc_precompiler, "0.1.11", "8c844d0b9fb98a3edea067f94f616b3f6b29b959b6b3bf25fee94ffe34364768", [:mix], [{:elixir_make, "~> 0.7", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "3427232caf0835f94680e5bcf082408a70b48ad68a5f5c0b02a3bea9f3a075b9"}, - "certifi": {:hex, :certifi, "2.12.0", "2d1cca2ec95f59643862af91f001478c9863c2ac9cb6e2f89780bfd8de987329", [:rebar3], [], "hexpm", "ee68d85df22e554040cdb4be100f33873ac6051387baf6a8f6ce82272340ff1c"}, + "certifi": {:hex, :certifi, "2.18.0", "bd5f34eb8fe7c3eee3c705c1f9472174e8d4c353fc9c09a4cb937b891e80e329", [:rebar3], [], "hexpm", "a8b61115e393a2298b20451a36beffdabe08e61bc16cc1926d7991f6721103bf"}, "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"}, "comeonin": {:hex, :comeonin, "5.5.1", "5113e5f3800799787de08a6e0db307133850e635d34e9fab23c70b6501669510", [:mix], [], "hexpm", "65aac8f19938145377cee73973f192c5645873dcf550a8a6b18187d17c13ccdb"}, "concurrent_limiter": {:hex, :concurrent_limiter, "0.1.1", "43ae1dc23edda1ab03dd66febc739c4ff710d047bb4d735754909f9a474ae01c", [:mix], [{:telemetry, "~> 0.3", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "53968ff238c0fbb4d7ed76ddb1af0be6f3b2f77909f6796e249e737c505a16eb"}, "connection": {:hex, :connection, "1.1.0", "ff2a49c4b75b6fb3e674bfc5536451607270aac754ffd1bdfe175abe4a6d7a68", [:mix], [], "hexpm", "722c1eb0a418fbe91ba7bd59a47e28008a189d47e37e0e7bb85585a016b2869c"}, "cors_plug": {:hex, :cors_plug, "2.0.3", "316f806d10316e6d10f09473f19052d20ba0a0ce2a1d910ddf57d663dac402ae", [:mix], [{:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "ee4ae1418e6ce117fc42c2ba3e6cbdca4e95ecd2fe59a05ec6884ca16d469aea"}, "covertool": {:hex, :covertool, "2.0.7", "398be995c4cf1a2861174389b3577ca97beee43b60c8f1afcf510f1b07d32408", [:rebar3], [], "hexpm", "46158ed6e1a0df7c0a912e314c7b8e053bd74daa5fc6b790614922a155b5720c"}, - "cowboy": {:hex, :cowboy, "2.13.0", "09d770dd5f6a22cc60c071f432cd7cb87776164527f205c5a6b0f24ff6b38990", [:make, :rebar3], [{:cowlib, ">= 2.14.0 and < 3.0.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, ">= 1.8.0 and < 3.0.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "e724d3a70995025d654c1992c7b11dbfea95205c047d86ff9bf1cda92ddc5614"}, + "cowboy": {:hex, :cowboy, "2.19.0", "78b9d92d25a23e56d7341040b67946c04067cd77de966e2372865f673a8e6f59", [:make, :rebar3], [{:cowlib, ">= 2.20.0 and < 3.0.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, ">= 1.8.0 and < 3.0.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "986dae81f99fcb78ef2d8efc21d738cee189410840eeaf32eca84ada81dcf6d4"}, "cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"}, - "cowlib": {:hex, :cowlib, "2.17.1", "3e6053016d1ab245730f0af688755476dcedb1c25ed8fb5751f59a2bfdc0c9af", [:make, :rebar3], [], "hexpm", "ff08bd17e6dd931445b18af77315b9b5fe052407110964ad2588c686b57b5e3f"}, + "cowlib": {:hex, :cowlib, "2.21.0", "3ea757c79784bdbdebac7857ce3adf2290af6b8680d4248c75e40ced2e98c89e", [:make, :rebar3], [], "hexpm", "0960248773762a5319b3c17285028bc76f54f58ef0f9451367401bdf67b46274"}, "credo": {:hex, :credo, "1.7.12", "9e3c20463de4b5f3f23721527fcaf16722ec815e70ff6c60b86412c695d426c1", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "8493d45c656c5427d9c729235b99d498bd133421f3e0a683e5c1b561471291e5"}, "crontab": {:hex, :crontab, "1.1.8", "2ce0e74777dfcadb28a1debbea707e58b879e6aa0ffbf9c9bb540887bce43617", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm"}, "custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"}, - "db_connection": {:hex, :db_connection, "2.8.0", "64fd82cfa6d8e25ec6660cea73e92a4cbc6a18b31343910427b702838c4b33b2", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "008399dae5eee1bf5caa6e86d204dcb44242c82b1ed5e22c881f2c34da201b15"}, - "decimal": {:hex, :decimal, "2.3.0", "3ad6255aa77b4a3c4f818171b12d237500e63525c2fd056699967a3e7ea20f62", [:mix], [], "hexpm", "a4d66355cb29cb47c3cf30e71329e58361cfcb37c34235ef3bf1d7bf3773aeac"}, + "db_connection": {:hex, :db_connection, "2.10.1", "d5465f6bcc125c1b8981c1dbf23c193ca16f446ec0b25832dc174f74f18be510", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "18ed94c6e627b4bf452dbd4df61b69a35a1e768525140bc1917b7a685026a6a3"}, + "decimal": {:hex, :decimal, "3.2.0", "f1235f05d841a211fda78a08fdb9777f2ff51a71f18455233fae186ff76187c6", [:mix], [], "hexpm", "190bca80580ce61aa69bb0eacadd7677710205c770225c2c2c07e32a5c31b234"}, "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"}, "dialyxir": {:hex, :dialyxir, "1.4.6", "7cca478334bf8307e968664343cbdb432ee95b4b68a9cba95bdabb0ad5bdfd9a", [:mix], [{:erlex, ">= 0.2.7", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "8cf5615c5cd4c2da6c501faae642839c8405b49f8aa057ad4ae401cb808ef64d"}, - "earmark": {:hex, :earmark, "1.4.46", "8c7287bd3137e99d26ae4643e5b7ef2129a260e3dcf41f251750cb4563c8fb81", [:mix], [], "hexpm", "798d86db3d79964e759ddc0c077d5eb254968ed426399fbf5a62de2b5ff8910a"}, - "earmark_parser": {:hex, :earmark_parser, "1.4.44", "f20830dd6b5c77afe2b063777ddbbff09f9759396500cdbe7523efd58d7a339c", [:mix], [], "hexpm", "4778ac752b4701a5599215f7030989c989ffdc4f6df457c5f36938cc2d2a2750"}, + "earmark_parser": {:hex, :earmark_parser, "1.4.46", "67607a0532e810c6f630a515c548d0b24949643f168cc556303bee4cf96105c7", [:mix], [], "hexpm", "9c44636e8a1c68c62f526b2dcd85d941dbbcee7ab82cf64ba06ce28bef8e89f5"}, "eblurhash": {:git, "https://github.com/zotonic/eblurhash.git", "bc37ceb426ef021ee9927fb249bb93f7059194ab", [ref: "bc37ceb426ef021ee9927fb249bb93f7059194ab"]}, - "ecto": {:hex, :ecto, "3.13.2", "7d0c0863f3fc8d71d17fc3ad3b9424beae13f02712ad84191a826c7169484f01", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "669d9291370513ff56e7b7e7081b7af3283d02e046cf3d403053c557894a0b3e"}, + "ecto": {:hex, :ecto, "3.14.0", "2fa64521eebfcb2670d907a86e4ad947290e9933706bb315e6fb5c21b172cb26", [:mix], [{:decimal, "~> 3.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "130d69ffb4285f9ce4792b65dfbb994fd13ea4cbc3cbea2524b199aa3de84af3"}, "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, "ecto_psql_extras": {:hex, :ecto_psql_extras, "0.8.8", "aa02529c97f69aed5722899f5dc6360128735a92dd169f23c5d50b1f7fdede08", [:mix], [{:ecto_sql, "~> 3.7", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, "> 0.16.0", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1 or ~> 4.0", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "04c63d92b141723ad6fed2e60a4b461ca00b3594d16df47bbc48f1f4534f2c49"}, - "ecto_sql": {:hex, :ecto_sql, "3.13.2", "a07d2461d84107b3d037097c822ffdd36ed69d1cf7c0f70e12a3d1decf04e2e1", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.13.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.7", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.19 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "539274ab0ecf1a0078a6a72ef3465629e4d6018a3028095dc90f60a19c371717"}, + "ecto_sql": {:hex, :ecto_sql, "3.14.0", "06446ab8410d2f85bfbb80857ee224ab3b693700cbb38f6535d507449a627b2e", [:mix], [{:db_connection, "~> 2.9", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 3.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:ecto, "~> 3.14.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.8", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.19 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f4d8d36faf294c9417b5a37ec7ac8217ee2abdef5fcf197ba690f361548d3949"}, "eimp": {:hex, :eimp, "1.0.14", "fc297f0c7e2700457a95a60c7010a5f1dcb768a083b6d53f49cd94ab95a28f22", [:rebar3], [{:p1_utils, "1.0.18", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "501133f3112079b92d9e22da8b88bf4f0e13d4d67ae9c15c42c30bd25ceb83b6"}, "elixir_make": {:hex, :elixir_make, "0.7.8", "505026f266552ee5aabca0b9f9c229cbb496c689537c9f922f3eb5431157efc7", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:certifi, "~> 2.0", [hex: :certifi, repo: "hexpm", optional: true]}], "hexpm", "7a71945b913d37ea89b06966e1342c85cfe549b15e6d6d081e8081c493062c07"}, "erlex": {:hex, :erlex, "0.2.7", "810e8725f96ab74d17aac676e748627a07bc87eb950d2b83acd29dc047a30595", [:mix], [], "hexpm", "3ed95f79d1a844c3f6bf0cea61e0d5612a42ce56da9c03f01df538685365efb0"}, @@ -53,20 +52,21 @@ "fast_html": {:hex, :fast_html, "2.5.0", "23578c1c1fa03db6a3786d78218b2d944df34b0fc3729e72de912f390913c80f", [:make, :mix], [{:elixir_make, "~> 0.4", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 1.1", [hex: :nimble_pool, repo: "hexpm", optional: false]}], "hexpm", "69eb46ed98a5d9cca1ccd4a5ac94ce5dd626fc29513fbaa0a16cd8b2da67ae3e"}, "fast_sanitize": {:hex, :fast_sanitize, "0.2.3", "67b93dfb34e302bef49fec3aaab74951e0f0602fd9fa99085987af05bd91c7a5", [:mix], [{:fast_html, "~> 2.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "e8ad286d10d0386e15d67d0ee125245ebcfbc7d7290b08712ba9013c8c5e56e2"}, "file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"}, - "finch": {:hex, :finch, "0.20.0", "5330aefb6b010f424dcbbc4615d914e9e3deae40095e73ab0c1bb0968933cadf", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.6.2 or ~> 1.7", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 1.1", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "2658131a74d051aabfcba936093c903b8e89da9a1b63e430bee62045fa9b2ee2"}, + "finch": {:hex, :finch, "0.23.0", "e3f9287ac25a8832f848b144c2b57346aac65b205e2e0629a52adfe6507fd837", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.8", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 1.1", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "80e58d3f936f57e3fdf404f83a3642897ae6d9fb642934e46da4d8fe761b99d5"}, "flake_id": {:hex, :flake_id, "0.1.0", "7716b086d2e405d09b647121a166498a0d93d1a623bead243e1f74216079ccb3", [:mix], [{:base62, "~> 1.2", [hex: :base62, repo: "hexpm", optional: false]}, {:ecto, ">= 2.0.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "31fc8090fde1acd267c07c36ea7365b8604055f897d3a53dd967658c691bd827"}, "floki": {:hex, :floki, "0.38.0", "62b642386fa3f2f90713f6e231da0fa3256e41ef1089f83b6ceac7a3fd3abf33", [:mix], [], "hexpm", "a5943ee91e93fb2d635b612caf5508e36d37548e84928463ef9dd986f0d1abd9"}, "gen_smtp": {:hex, :gen_smtp, "0.15.0", "9f51960c17769b26833b50df0b96123605a8024738b62db747fece14eb2fbfcc", [:rebar3], [], "hexpm", "29bd14a88030980849c7ed2447b8db6d6c9278a28b11a44cafe41b791205440f"}, "gettext": {:hex, :gettext, "0.24.0", "6f4d90ac5f3111673cbefc4ebee96fe5f37a114861ab8c7b7d5b30a1108ce6d8", [:mix], [{:expo, "~> 0.5.1", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "bdf75cdfcbe9e4622dd18e034b227d77dd17f0f133853a1c73b97b3d6c770e8b"}, - "gun": {:hex, :gun, "2.4.1", "c3a8bff8e155e1fc8e499216599bb7effbd27bc1985662a8b25016090dc18428", [:make, :rebar3], [{:cowlib, ">= 2.15.0 and < 3.0.0", [hex: :cowlib, repo: "hexpm", optional: false]}], "hexpm", "1450575b4d393aa0811322727b90ad1dd94b5c10026f54a1641785bcbd250384"}, - "hackney": {:hex, :hackney, "1.20.1", "8d97aec62ddddd757d128bfd1df6c5861093419f8f7a4223823537bad5d064e2", [:rebar3], [{:certifi, "~> 2.12.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~> 6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~> 1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~> 1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.4.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~> 1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "fe9094e5f1a2a2c0a7d10918fee36bfec0ec2a979994cff8cfe8058cd9af38e3"}, - "hpax": {:hex, :hpax, "1.0.3", "ed67ef51ad4df91e75cc6a1494f851850c0bd98ebc0be6e81b026e765ee535aa", [:mix], [], "hexpm", "8eab6e1cfa8d5918c2ce4ba43588e894af35dbd8e91e6e55c817bca5847df34a"}, + "gun": {:hex, :gun, "2.7.0", "8dfc20ff1b70f3c78f07122f7d82ac6950c40d33a8a9b35da0134f49fb35b334", [:make, :rebar3], [{:cowlib, ">= 2.21.0 and < 3.0.0", [hex: :cowlib, repo: "hexpm", optional: false]}], "hexpm", "2a90d073069e72654b6c9a91fae365b746ff5ce385a4a5bbf71ef53a8bf95d82"}, + "h2": {:hex, :h2, "0.11.0", "b8c9f7c86f400582c5cbed59f79c0efd6cf49ad6478c210bede91d2d15019b14", [:rebar3], [], "hexpm", "c61f24361d0dc76375eaf35c2bf0e01235d81b7685538df571db036467fac358"}, + "hackney": {:hex, :hackney, "4.7.3", "42feec1a4986000411cb5d389bbc9fb61d9dff84c5eef42b11fc40ea327e6f9a", [:rebar3], [{:certifi, "~> 2.17.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:h2, "~> 0.11.0", [hex: :h2, repo: "hexpm", optional: false]}, {:idna, "~> 7.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:mimerl, "~> 1.5", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.4.2", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~> 1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:webtransport, "~> 0.4.4", [hex: :webtransport, repo: "hexpm", optional: false]}], "hexpm", "3f460e01d5a1abba39c32d06e9a733bb76e35d1ab87a83868b6bb29d646fe25f"}, + "hpax": {:hex, :hpax, "1.1.0", "782931867cc23217c68fb5f68fe1a11f5e7544c7fda82c8a7019a5df5a4a1cdf", [:mix], [], "hexpm", "0b8d0f05832f55571d65ac720f79bf8994138ffbb133209dc4685eae0ad456a8"}, "html_entities": {:hex, :html_entities, "0.5.2", "9e47e70598da7de2a9ff6af8758399251db6dbb7eebe2b013f2bbd2515895c3c", [:mix], [], "hexpm", "c53ba390403485615623b9531e97696f076ed415e8d8058b1dbaa28181f4fdcc"}, "http_signatures": {:hex, :http_signatures, "0.1.3", "19f26aee35b4684e37efdce3ac4638605e6e41a04368186bd39d2b6138a60ea9", [:mix], [{:plug, "~> 1.18", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "20313a65516db88006f85b090f6f76cc5b04e9609b45943657e6781eb91174f4"}, - "httpoison": {:hex, :httpoison, "1.8.2", "9eb9c63ae289296a544842ef816a85d881d4a31f518a0fec089aaa744beae290", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "2bb350d26972e30c96e2ca74a1aaf8293d61d0742ff17f01e0279fef11599921"}, - "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"}, + "httpoison": {:hex, :httpoison, "3.0.0", "8566a933bb9175236d1ec335978445b67cd1f5b5d3ead6ca4b80be469d41f5d9", [:mix], [{:hackney, "~> 4.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "9130197b7658901c493d6fcfb842fb9676300fa8a6c8ed058c8889cf1a77f3c2"}, + "idna": {:hex, :idna, "7.1.0", "1067a13043538129602d2f2ce6899d8713125c7d19734aa557ce2e3ea55bd4f1", [:rebar3], [], "hexpm", "6ae959a025bf36df61a8cab8508d9654891b5426a84c44d82deaffd6ddf8c71f"}, "inet_cidr": {:hex, :inet_cidr, "1.0.9", "e0ef72a2942529da78c8e4147d53f2ef5f6f5293335c3637b0fdf83c012cc816", [:mix], [], "hexpm", "172da15ff7cf635b1feaf14f5818be28c811b37cc5fb7c5f7c01058c1c1066cc"}, - "jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"}, + "jason": {:hex, :jason, "1.4.5", "2e3a008590b0b8d7388c20293e9dcc9cf3e5d642fd2a114e4cbbb52e595d940a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "b0c823996102bcd0239b3c2444eb00409b72f6a140c1950bc8b457d836b30684"}, "joken": {:hex, :joken, "2.6.2", "5daaf82259ca603af4f0b065475099ada1b2b849ff140ccd37f4b6828ca6892a", [:mix], [{:jose, "~> 1.11.10", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "5134b5b0a6e37494e46dbf9e4dad53808e5e787904b7c73972651b51cce3d72b"}, "jose": {:hex, :jose, "1.11.10", "a903f5227417bd2a08c8a00a0cbcc458118be84480955e8d251297a425723f83", [:mix, :rebar3], [], "hexpm", "0d6cd36ff8ba174db29148fc112b5842186b68a90ce9fc2b3ec3afe76593e614"}, "jumper": {:hex, :jumper, "1.0.2", "68cdcd84472a00ac596b4e6459a41b3062d4427cbd4f1e8c8793c5b54f1406a7", [:mix], [], "hexpm", "9b7782409021e01ab3c08270e26f36eb62976a38c1aa64b2eaf6348422f165e1"}, @@ -81,7 +81,8 @@ "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, "mime": {:hex, :mime, "1.6.0", "dabde576a497cef4bbdd60aceee8160e02a6c89250d6c0b29e56c0dfb00db3d2", [:mix], [], "hexpm", "31a1a8613f8321143dde1dafc36006a17d28d02bdfecb9e95a880fa7aabd19a7"}, "mimerl": {:hex, :mimerl, "1.5.0", "f35aca6f23242339b3666e0ac0702379e362b469d0aea167f6cc713547e777ed", [:rebar3], [], "hexpm", "db648ce065bae14ea84ca8b5dd123f42f49417cef693541110bf6f9e9be9ecc4"}, - "mint": {:hex, :mint, "1.7.1", "113fdb2b2f3b59e47c7955971854641c61f378549d73e829e1768de90fc1abf1", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1 or ~> 0.2.0 or ~> 1.0", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "fceba0a4d0f24301ddee3024ae116df1c3f4bb7a563a731f45fdfeb9d39a231b"}, + "mint": {:hex, :mint, "1.11.0", "a713551624815c0435237b93d90ea8b9b14254690c66f732d0ef8930f76ff1d9", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 1.1", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "c6279ba2d6aa3a383a1d4cfbe7b59f42e6efd400f58d8e2acfeac48a438693ab"}, + "mix_audit": {:hex, :mix_audit, "2.1.5", "c0f77cee6b4ef9d97e37772359a187a166c7a1e0e08b50edf5bf6959dfe5a016", [:make, :mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:yaml_elixir, "~> 2.11", [hex: :yaml_elixir, repo: "hexpm", optional: false]}], "hexpm", "87f9298e21da32f697af535475860dc1d3617a010e0b418d2ec6142bc8b42d69"}, "mochiweb": {:hex, :mochiweb, "2.18.0", "eb55f1db3e6e960fac4e6db4e2db9ec3602cc9f30b86cd1481d56545c3145d2e", [:rebar3], [], "hexpm"}, "mock": {:hex, :mock, "0.3.9", "10e44ad1f5962480c5c9b9fa779c6c63de9bd31997c8e04a853ec990a9d841af", [:mix], [{:meck, "~> 0.9.2", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "9e1b244c4ca2551bb17bb8415eed89e40ee1308e0fbaed0a4fdfe3ec8a4adbd3"}, "mogrify": {:hex, :mogrify, "0.9.3", "238c782f00271dace01369ad35ae2e9dd020feee3443b9299ea5ea6bed559841", [:mix], [], "hexpm", "0189b1e1de27455f2b9ae8cf88239cefd23d38de9276eb5add7159aea51731e6"}, @@ -89,8 +90,8 @@ "mua": {:hex, :mua, "0.2.4", "a9172ab0a1ac8732cf2699d739ceac3febcb9b4ffc540260ad2e32c0b6632af9", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm", "e7e4dacd5ad65f13e3542772e74a159c00bd2d5579e729e9bb72d2c73a266fb7"}, "multipart": {:hex, :multipart, "0.4.0", "634880a2148d4555d050963373d0e3bbb44a55b2badd87fa8623166172e9cda0", [:mix], [{:mime, "~> 1.2 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}], "hexpm", "3c5604bc2fb17b3137e5d2abdf5dacc2647e60c5cc6634b102cf1aef75a06f0a"}, "nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"}, - "nimble_ownership": {:hex, :nimble_ownership, "1.0.1", "f69fae0cdd451b1614364013544e66e4f5d25f36a2056a9698b793305c5aa3a6", [:mix], [], "hexpm", "3825e461025464f519f3f3e4a1f9b68c47dc151369611629ad08b636b73bb22d"}, - "nimble_parsec": {:hex, :nimble_parsec, "0.6.0", "32111b3bf39137144abd7ba1cce0914533b2d16ef35e8abc5ec8be6122944263", [:mix], [], "hexpm", "27eac315a94909d4dc68bc07a4a83e06c8379237c5ea528a9acff4ca1c873c52"}, + "nimble_ownership": {:hex, :nimble_ownership, "1.0.2", "fa8a6f2d8c592ad4d79b2ca617473c6aefd5869abfa02563a77682038bf916cf", [:mix], [], "hexpm", "098af64e1f6f8609c6672127cfe9e9590a5d3fcdd82bc17a377b8692fd81a879"}, + "nimble_parsec": {:hex, :nimble_parsec, "1.4.2", "8efba0122db06df95bfaa78f791344a89352ba04baedd3849593bfce4d0dc1c6", [:mix], [], "hexpm", "4b21398942dda052b403bbe1da991ccd03a053668d147d53fb8c4e0efe09c973"}, "nimble_pool": {:hex, :nimble_pool, "1.1.0", "bf9c29fbdcba3564a8b800d1eeb5a3c58f36e1e11d7b7fb2e084a643f645f06b", [:mix], [], "hexpm", "af2e4e6b34197db81f7aad230c1118eac993acc0dae6bc83bac0126d4ae0813a"}, "nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]}, "oban": {:hex, :oban, "2.19.4", "045adb10db1161dceb75c254782f97cdc6596e7044af456a59decb6d06da73c1", [:mix], [{:ecto_sql, "~> 3.10", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:ecto_sqlite3, "~> 0.9", [hex: :ecto_sqlite3, repo: "hexpm", optional: true]}, {:igniter, "~> 0.5", [hex: :igniter, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:myxql, "~> 0.7", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "5fcc6219e6464525b808d97add17896e724131f498444a292071bf8991c99f97"}, @@ -99,27 +100,27 @@ "oban_plugins_lazarus": {:hex, :oban_plugins_lazarus, "0.1.1", "a5141d569e5b9f3bec8f4a958231d2c538af097d3c1ad06274f096fc06956821", [:mix], [{:oban, "< 3.0.0", [hex: :oban, repo: "hexpm", optional: false]}], "hexpm", "7e9c51bc44d33f71c0a52cf0cd5c8d4c70380ede065c1042013f5123f2fc9729"}, "oban_web": {:hex, :oban_web, "2.11.6", "53933cb4253c4d9f1098ee311c06f07935259f0e564dcf2d66bae4cc98e317fe", [:mix], [{:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}, {:oban, "~> 2.19", [hex: :oban, repo: "hexpm", optional: false]}, {:oban_met, "~> 1.0", [hex: :oban_met, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.7", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}], "hexpm", "576d94b705688c313694c2c114ca21aa0f8f2ad1b9ca45c052c5ba316d3e8d10"}, "octo_fetch": {:hex, :octo_fetch, "0.4.0", "074b5ecbc08be10b05b27e9db08bc20a3060142769436242702931c418695b19", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~> 1.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "cf8be6f40cd519d7000bb4e84adcf661c32e59369ca2827c4e20042eda7a7fc6"}, - "open_api_spex": {:hex, :open_api_spex, "3.22.0", "fbf90dc82681dc042a4ee79853c8e989efbba73d9e87439085daf849bbf8bc20", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.0 or ~> 4.0 or ~> 5.0 or ~> 6.0", [hex: :poison, repo: "hexpm", optional: true]}, {:ymlr, "~> 2.0 or ~> 3.0 or ~> 4.0 or ~> 5.0", [hex: :ymlr, repo: "hexpm", optional: true]}], "hexpm", "dd751ddbdd709bb4a5313e9a24530da6e66594773c7242a0c2592cbd9f589063"}, - "parse_trans": {:hex, :parse_trans, "3.4.1", "6e6aa8167cb44cc8f39441d05193be6e6f4e7c2946cb2759f015f8c56b76e5ff", [:rebar3], [], "hexpm", "620a406ce75dada827b82e453c19cf06776be266f5a67cff34e1ef2cbb60e49a"}, + "open_api_spex": {:hex, :open_api_spex, "3.22.3", "0e383bf23cc3a060bffaebbcd09fc06bfc908d948c00e518aed36bbf8a2fe473", [:mix], [{:decimal, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :decimal, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.0 or ~> 4.0 or ~> 5.0 or ~> 6.0", [hex: :poison, repo: "hexpm", optional: true]}, {:ymlr, "~> 2.0 or ~> 3.0 or ~> 4.0 or ~> 5.0", [hex: :ymlr, repo: "hexpm", optional: true]}], "hexpm", "5f74f1878fdc38f8e961b0b943ac7af88dcf3a82a0c0ef6680ddfd3d161aecbd"}, + "parse_trans": {:hex, :parse_trans, "3.4.2", "c352ddc1a0d5e54f9b1654d45f9c432eef76f9cea371c55ddff769ef688fdb74", [:rebar3], [], "hexpm", "4c25347de3b7c35732d32e69ab43d1ceee0beae3f3b3ade1b59cbd3dd224d9ca"}, "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "1.2.1", "9cbe354b58121075bd20eb83076900a3832324b7dd171a6895fab57b6bb2752c", [:mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}], "hexpm", "d3b40a4a4630f0b442f19eca891fcfeeee4c40871936fed2f68e1c4faa30481f"}, - "phoenix": {:hex, :phoenix, "1.8.3", "49ac5e485083cb1495a905e47eb554277bdd9c65ccb4fc5100306b350151aa95", [:mix], [{:bandit, "~> 1.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "36169f95cc2e155b78be93d9590acc3f462f1e5438db06e6248613f27c80caec"}, + "phoenix": {:hex, :phoenix, "1.8.11", "9bb8f0c4e9f0b9eaf7f34cf8cb0bd25bd8599763a5587d64918a9ebb04027823", [:mix], [{:bandit, "~> 1.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 2.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "44f028f4129e5a29487e868f84903373e3d032da151ad0c789c3849f464e7351"}, "phoenix_ecto": {:hex, :phoenix_ecto, "4.6.5", "c4ef322acd15a574a8b1a08eff0ee0a85e73096b53ce1403b6563709f15e1cea", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "26ec3208eef407f31b748cadd044045c6fd485fbff168e35963d2f9dfff28d4b"}, "phoenix_html": {:hex, :phoenix_html, "3.3.4", "42a09fc443bbc1da37e372a5c8e6755d046f22b9b11343bf885067357da21cb3", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "0249d3abec3714aff3415e7ee3d9786cb325be3151e6c4b3021502c585bf53fb"}, "phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.7", "405880012cb4b706f26dd1c6349125bfc903fb9e44d1ea668adaf4e04d4884b7", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:ecto_sqlite3_extras, "~> 1.1.7 or ~> 1.2.0", [hex: :ecto_sqlite3_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.19 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "3a8625cab39ec261d48a13b7468dc619c0ede099601b084e343968309bd4d7d7"}, "phoenix_live_reload": {:hex, :phoenix_live_reload, "1.3.3", "3a53772a6118d5679bf50fc1670505a290e32a1d195df9e069d8c53ab040c054", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "766796676e5f558dbae5d1bdb066849673e956005e3730dfd5affd7a6da4abac"}, - "phoenix_live_view": {:hex, :phoenix_live_view, "1.1.19", "c95e9acbc374fb796ee3e24bfecc8213123c74d9f9e45667ca40bb0a4d242953", [:mix], [{:igniter, ">= 0.6.16 and < 1.0.0-0", [hex: :igniter, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:lazy_html, "~> 0.1.0", [hex: :lazy_html, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0 or ~> 1.8.0-rc", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d5ad357d6b21562a5b431f0ad09dfe76db9ce5648c6949f1aac334c8c4455d32"}, - "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"}, + "phoenix_live_view": {:hex, :phoenix_live_view, "1.2.9", "d35ddac2fab4480e6bdbf712ff104fd9e969a2bbe81b578ee80f066b371f56db", [:mix], [{:igniter, ">= 0.6.16 and < 1.0.0-0", [hex: :igniter, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:lazy_html, "~> 0.1.0", [hex: :lazy_html, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0 or ~> 1.8.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "2f9528c3d7046edabbb30a91710ca33988f8d8bc20a964a1fc48b32134572afa"}, + "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.2.0", "ff3a5616e1bed6804de7773b92cbccfc0b0f473faf1f63d7daf1206c7aeaaa6f", [:mix], [], "hexpm", "adc313a5bf7136039f63cfd9668fde73bba0765e0614cba80c06ac9460ff3e96"}, "phoenix_swoosh": {:hex, :phoenix_swoosh, "1.2.1", "b74ccaa8046fbc388a62134360ee7d9742d5a8ae74063f34eb050279de7a99e1", [:mix], [{:finch, "~> 0.8", [hex: :finch, repo: "hexpm", optional: true]}, {:hackney, "~> 1.10", [hex: :hackney, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_view, "~> 1.0 or ~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:swoosh, "~> 1.5", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "4000eeba3f9d7d1a6bf56d2bd56733d5cadf41a7f0d8ffe5bb67e7d667e204a2"}, "phoenix_template": {:hex, :phoenix_template, "1.0.4", "e2092c132f3b5e5b2d49c96695342eb36d0ed514c5b252a77048d5969330d639", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "2c0c81f0e5c6753faf5cca2f229c9709919aba34fab866d3bc05060c9c444206"}, "phoenix_view": {:hex, :phoenix_view, "2.0.4", "b45c9d9cf15b3a1af5fb555c674b525391b6a1fe975f040fb4d913397b31abf4", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}], "hexpm", "4e992022ce14f31fe57335db27a28154afcc94e9983266835bb3040243eb620b"}, "pleroma_mfm_parser": {:hex, :pleroma_mfm_parser, "0.2.1", "87a40fec4e2e035447df34e1c98e1b816b6a448d49baea73eb2273531ac5ce66", [:mix], [], "hexpm", "ec4845461da95d63ab3d592086d65114c45057a1f2d48d768f3def45b0d7696f"}, - "plug": {:hex, :plug, "1.19.1", "09bac17ae7a001a68ae393658aa23c7e38782be5c5c00c80be82901262c394c0", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "560a0017a8f6d5d30146916862aaf9300b7280063651dd7e532b8be168511e62"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.7.4", "729c752d17cf364e2b8da5bdb34fb5804f56251e88bb602aff48ae0bd8673d11", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "9b85632bd7012615bae0a5d70084deb1b25d2bcbb32cab82d1e9a1e023168aa3"}, - "plug_crypto": {:hex, :plug_crypto, "2.1.1", "19bda8184399cb24afa10be734f84a16ea0a2bc65054e23a62bb10f06bc89491", [:mix], [], "hexpm", "6470bce6ffe41c8bd497612ffde1a7e4af67f36a15eea5f921af71cf3e11247c"}, + "plug": {:hex, :plug, "1.20.3", "56c480c633ec2ce10140e236e15233bf576e1d323887d7c96711bd02ab5160db", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "be266aee1b8536ef6409d58cf39a3121319f0ec47cfa1b24024485aa0e76ad76"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.9.0", "87e21e0d9054ced99c36d128f49e3ea2cd8b745fffb97de50bff99706087af4f", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.18", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "2002bafba4f3a45b55a58e68d70211b153a7ed18d37edb1ceb6e96e7a92c422e"}, + "plug_crypto": {:hex, :plug_crypto, "2.2.1", "bd1d0358a2e2f5ffb818217e64c394f9d24ed191d862b7fa1bcce264ace2b8ea", [:mix], [], "hexpm", "4417ccbd8f85e627321cd07d2ab9c4b621f1fd883b9905af241f9b4b780b94b6"}, "plug_static_index_html": {:hex, :plug_static_index_html, "1.0.0", "840123d4d3975585133485ea86af73cb2600afd7f2a976f9f5fd8b3808e636a0", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "79fd4fcf34d110605c26560cbae8f23c603ec4158c08298bd4360fdea90bb5cf"}, "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm", "fec8660eb7733ee4117b85f55799fd3833eb769a6df71ccf8903e8dc5447cfce"}, "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"}, - "postgrex": {:hex, :postgrex, "0.21.1", "2c5cc830ec11e7a0067dd4d623c049b3ef807e9507a424985b8dcf921224cd88", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "27d8d21c103c3cc68851b533ff99eef353e6a0ff98dc444ea751de43eb48bdac"}, + "postgrex": {:hex, :postgrex, "0.22.4", "d271f595dfd25230b6398354e19d17bb5e2d20130fd2d9bdca7e15f125d43552", [:mix], [{:db_connection, "~> 2.9", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0 or ~> 3.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "4aae45a2d60e35b04eea2602440be152fae332901f1fc7a60fc7cb7f0f9a9c5a"}, "pot": {:hex, :pot, "1.0.2", "13abb849139fdc04ab8154986abbcb63bdee5de6ed2ba7e1713527e33df923dd", [:rebar3], [], "hexpm", "78fe127f5a4f5f919d6ea5a2a671827bd53eb9d37e5b4128c0ad3df99856c2e0"}, "prom_ex": {:hex, :prom_ex, "1.9.0", "63e6dda6c05cdeec1f26c48443dcc38ffd2118b3665ae8d2bd0e5b79f2aea03e", [:mix], [{:absinthe, ">= 1.6.0", [hex: :absinthe, repo: "hexpm", optional: true]}, {:broadway, ">= 1.0.2", [hex: :broadway, repo: "hexpm", optional: true]}, {:ecto, ">= 3.5.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:finch, "~> 0.15", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}, {:oban, ">= 2.4.0", [hex: :oban, repo: "hexpm", optional: true]}, {:octo_fetch, "~> 0.3", [hex: :octo_fetch, repo: "hexpm", optional: false]}, {:phoenix, ">= 1.5.0", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_live_view, ">= 0.14.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:plug, ">= 1.12.1", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, "~> 2.5", [hex: :plug_cowboy, repo: "hexpm", optional: false]}, {:telemetry, ">= 1.0.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}, {:telemetry_metrics_prometheus_core, "~> 1.0", [hex: :telemetry_metrics_prometheus_core, repo: "hexpm", optional: false]}, {:telemetry_poller, "~> 1.0", [hex: :telemetry_poller, repo: "hexpm", optional: false]}], "hexpm", "01f3d4f69ec93068219e686cc65e58a29c42bea5429a8ff4e2121f19db178ee6"}, "prometheus": {:hex, :prometheus, "4.10.0", "792adbf0130ff61b5fa8826f013772af24b6e57b984445c8d602c8a0355704a1", [:mix, :rebar3], [{:quantile_estimator, "~> 0.2.1", [hex: :quantile_estimator, repo: "hexpm", optional: false]}], "hexpm", "2a99bb6dce85e238c7236fde6b0064f9834dc420ddbd962aac4ea2a3c3d59384"}, @@ -129,26 +130,24 @@ "prometheus_phx": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/prometheus-phx.git", "9cd8f248c9381ffedc799905050abce194a97514", [branch: "no-logging"]}, "prometheus_plugs": {:hex, :prometheus_plugs, "1.1.5", "25933d48f8af3a5941dd7b621c889749894d8a1082a6ff7c67cc99dec26377c5", [:mix], [{:accept, "~> 0.1", [hex: :accept, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}, {:prometheus_process_collector, "~> 1.1", [hex: :prometheus_process_collector, repo: "hexpm", optional: true]}], "hexpm", "0273a6483ccb936d79ca19b0ab629aef0dba958697c94782bb728b920dfc6a79"}, "quantile_estimator": {:hex, :quantile_estimator, "0.2.1", "ef50a361f11b5f26b5f16d0696e46a9e4661756492c981f7b2229ef42ff1cd15", [:rebar3], [], "hexpm", "282a8a323ca2a845c9e6f787d166348f776c1d4a41ede63046d72d422e3da946"}, - "quic": {:hex, :quic, "0.10.2", "4b390507a85f65ce47808f3df1a864e0baf9adb7a1b4ea9f4dcd66fe9d0cb166", [:rebar3], [], "hexpm", "7c196a66973c877a59768a5687f0a0610ff11817254d0a4e45cc4e3a16b1d00b"}, - "ranch": {:hex, :ranch, "2.2.0", "25528f82bc8d7c6152c57666ca99ec716510fe0925cb188172f41ce93117b1b0", [:make, :rebar3], [], "hexpm", "fa0b99a1780c80218a4197a59ea8d3bdae32fbff7e88527d7d8a4787eff4f8e7"}, + "quic": {:hex, :quic, "1.8.0", "7b074fc6f8a13b4a81e4e11254bf061db61c5c07b4366d568a79a38c5e8bb5f3", [:rebar3], [], "hexpm", "6b1f8f08a45412ac503bc6771efb8edc696bb14079bc48d2ca960b92933da8a4"}, + "ranch": {:hex, :ranch, "2.2.1", "fc2bb0e800efbeab8ff82eb325450b9c08653b14c3f69e8b09bbea304973105d", [:make, :rebar3], [], "hexpm", "55f05cce20ec2da1d90de5d5981afb93dbfc01325fc7e933189aa5c62f037c24"}, "recon": {:hex, :recon, "2.5.6", "9052588e83bfedfd9b72e1034532aee2a5369d9d9343b61aeb7fbce761010741", [:mix, :rebar3], [], "hexpm", "96c6799792d735cc0f0fd0f86267e9d351e63339cbe03df9d162010cefc26bb0"}, "remote_ip": {:hex, :remote_ip, "1.2.0", "fb078e12a44414f4cef5a75963c33008fe169b806572ccd17257c208a7bc760f", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "2ff91de19c48149ce19ed230a81d377186e4412552a597d6a5137373e5877cb7"}, - "rustler": {:hex, :rustler, "0.30.0", "cefc49922132b072853fa9b0ca4dc2ffcb452f68fb73b779042b02d545e097fb", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:toml, "~> 0.6", [hex: :toml, repo: "hexpm", optional: false]}], "hexpm", "9ef1abb6a7dda35c47cfc649e6a5a61663af6cf842a55814a554a84607dee389"}, "sleeplocks": {:hex, :sleeplocks, "1.1.3", "96a86460cc33b435c7310dbd27ec82ca2c1f24ae38e34f8edde97f756503441a", [:rebar3], [], "hexpm", "d3b3958552e6eb16f463921e70ae7c767519ef8f5be46d7696cc1ed649421321"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"}, "statistex": {:hex, :statistex, "1.1.0", "7fec1eb2f580a0d2c1a05ed27396a084ab064a40cfc84246dbfb0c72a5c761e5", [:mix], [], "hexpm", "f5950ea26ad43246ba2cce54324ac394a4e7408fdcf98b8e230f503a0cba9cf5"}, "sweet_xml": {:hex, :sweet_xml, "0.7.5", "803a563113981aaac202a1dbd39771562d0ad31004ddbfc9b5090bdcd5605277", [:mix], [], "hexpm", "193b28a9b12891cae351d81a0cead165ffe67df1b73fe5866d10629f4faefb12"}, - "swoosh": {:hex, :swoosh, "1.16.12", "cbb24ad512f2f7f24c7a469661c188a00a8c2cd64e0ab54acd1520f132092dfd", [:mix], [{:bandit, ">= 1.0.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mua, "~> 0.2.3", [hex: :mua, repo: "hexpm", optional: true]}, {:multipart, "~> 0.4", [hex: :multipart, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:req, "~> 0.5 or ~> 1.0", [hex: :req, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "0e262df1ae510d59eeaaa3db42189a2aa1b3746f73771eb2616fc3f7ee63cc20"}, + "swoosh": {:hex, :swoosh, "1.28.0", "30d9f3519a150128e90d97f9878a8a5cd8325ed03d618d1c626201496fc20baf", [:mix], [{:bandit, ">= 1.0.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, ">= 1.9.0 and < 5.0.0", [hex: :hackney, repo: "hexpm", optional: true]}, {:idna, ">= 6.0.0 and < 8.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mua, "~> 0.2.3", [hex: :mua, repo: "hexpm", optional: true]}, {:multipart, "~> 0.4", [hex: :multipart, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:req, "~> 0.5.10 or ~> 0.6 or ~> 1.0", [hex: :req, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "bb5c0b7c988beb53786254a61580597fe1017a652039061ee2b4c28b5097b10e"}, "syslog": {:git, "https://github.com/Vagabond/erlang-syslog", "614a1fde7a8654bee2815b599bbdaae1bb0323b5", [ref: "614a1fde7a8654bee2815b599bbdaae1bb0323b5"]}, "table_rex": {:hex, :table_rex, "4.1.0", "fbaa8b1ce154c9772012bf445bfb86b587430fb96f3b12022d3f35ee4a68c918", [:mix], [], "hexpm", "95932701df195d43bc2d1c6531178fc8338aa8f38c80f098504d529c43bc2601"}, "telemetry": {:hex, :telemetry, "1.0.0", "0f453a102cdf13d506b7c0ab158324c337c41f1cc7548f0bc0e130bbf0ae9452", [:rebar3], [], "hexpm", "73bc09fa59b4a0284efb4624335583c528e07ec9ae76aca96ea0673850aec57a"}, "telemetry_metrics": {:hex, :telemetry_metrics, "0.6.2", "2caabe9344ec17eafe5403304771c3539f3b6e2f7fb6a6f602558c825d0d0bfb", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9b43db0dc33863930b9ef9d27137e78974756f5f198cae18409970ed6fa5b561"}, "telemetry_metrics_prometheus_core": {:hex, :telemetry_metrics_prometheus_core, "1.2.1", "c9755987d7b959b557084e6990990cb96a50d6482c683fb9622a63837f3cd3d8", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "5e2c599da4983c4f88a33e9571f1458bf98b0cf6ba930f1dc3a6e8cf45d5afb6"}, "telemetry_poller": {:hex, :telemetry_poller, "1.3.0", "d5c46420126b5ac2d72bc6580fb4f537d35e851cc0f8dbd571acf6d6e10f5ec7", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "51f18bed7128544a50f75897db9974436ea9bfba560420b646af27a9a9b35211"}, - "tesla": {:hex, :tesla, "1.15.3", "3a2b5c37f09629b8dcf5d028fbafc9143c0099753559d7fe567eaabfbd9b8663", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:finch, "~> 0.13", [hex: :finch, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:gun, ">= 1.0.0", [hex: :gun, repo: "hexpm", optional: true]}, {:hackney, "~> 1.21", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "4.4.2", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: true]}, {:mox, "~> 1.0", [hex: :mox, repo: "hexpm", optional: true]}, {:msgpax, "~> 2.3", [hex: :msgpax, repo: "hexpm", optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "98bb3d4558abc67b92fb7be4cd31bb57ca8d80792de26870d362974b58caeda7"}, - "thousand_island": {:hex, :thousand_island, "1.4.3", "2158209580f633be38d43ec4e3ce0a01079592b9657afff9080d5d8ca149a3af", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "6e4ce09b0fd761a58594d02814d40f77daff460c48a7354a15ab353bb998ea0b"}, + "tesla": {:hex, :tesla, "1.20.0", "922b504e186da2ee82990d44e7422435f41b67403908a00340c3a0b23a17aa90", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:finch, "~> 0.13", [hex: :finch, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:gun, ">= 1.0.0", [hex: :gun, repo: "hexpm", optional: true]}, {:hackney, "~> 1.21 or >= 4.0.2 and < 5.0.0-0", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "4.4.2", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: true]}, {:mox, "~> 1.0", [hex: :mox, repo: "hexpm", optional: true]}, {:msgpax, "~> 2.3", [hex: :msgpax, repo: "hexpm", optional: true]}, {:opentelemetry_semantic_conventions, "~> 1.27", [hex: :opentelemetry_semantic_conventions, repo: "hexpm", optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "3ecb41cb458772332752c3acdfe983e23abb991f5a43cfd69a64e9ea3f4b0061"}, + "thousand_island": {:hex, :thousand_island, "1.6.0", "d6ad7c2220c96a270cc8ca1586ec4d8bde648a4a3a53f003ce093f41beec0288", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "4d4720470f091fc21a1311777c2ac66916c43621bffc068590c9f9bb3cd057a3"}, "timex": {:hex, :timex, "3.7.7", "3ed093cae596a410759104d878ad7b38e78b7c2151c6190340835515d4a46b8a", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "0ec4b09f25fe311321f9fc04144a7e3affe48eb29481d7a5583849b6c4dfa0a7"}, - "toml": {:hex, :toml, "0.7.0", "fbcd773caa937d0c7a02c301a1feea25612720ac3fa1ccb8bfd9d30d822911de", [:mix], [], "hexpm", "0690246a2478c1defd100b0c9b89b4ea280a22be9a7b313a8a058a2408a2fa70"}, "trailing_format_plug": {:hex, :trailing_format_plug, "0.0.7", "64b877f912cf7273bed03379936df39894149e35137ac9509117e59866e10e45", [:mix], [{:plug, "> 0.12.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "bd4fde4c15f3e993a999e019d64347489b91b7a9096af68b2bdadd192afa693f"}, "tzdata": {:hex, :tzdata, "1.0.5", "69f1ee029a49afa04ad77801febaf69385f3d3e3d1e4b56b9469025677b89a28", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "55519aa2a99e5d2095c1e61cc74c9be69688f8ab75c27da724eb8279ff402a5a"}, "ueberauth": {:hex, :ueberauth, "0.10.8", "ba78fbcbb27d811a6cd06ad851793aaf7d27c3b30c9e95349c2c362b344cd8f0", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "f2d3172e52821375bccb8460e5fa5cb91cfd60b19b636b6e57e9759b6f8c10c1"}, @@ -157,6 +156,9 @@ "vix": {:hex, :vix, "0.36.0", "3132dc065beda06dab1895a53d8c852d8e6a5bbca375c609435e968b1290e113", [:make, :mix], [{:cc_precompiler, "~> 0.1.4 or ~> 0.2", [hex: :cc_precompiler, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.7.3 or ~> 0.8", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:kino, "~> 0.7", [hex: :kino, repo: "hexpm", optional: true]}], "hexpm", "92f912b4e90c453f92942742105bcdb367ad53406759da251bd2e587e33f4134"}, "web_push_encryption": {:hex, :web_push_encryption, "0.3.1", "76d0e7375142dfee67391e7690e89f92578889cbcf2879377900b5620ee4708d", [:mix], [{:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jose, "~> 1.11.1", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "4f82b2e57622fb9337559058e8797cb0df7e7c9790793bdc4e40bc895f70e2a2"}, "websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"}, - "websock_adapter": {:hex, :websock_adapter, "0.5.8", "3b97dc94e407e2d1fc666b2fb9acf6be81a1798a2602294aac000260a7c4a47d", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "315b9a1865552212b5f35140ad194e67ce31af45bcee443d4ecb96b5fd3f3782"}, + "websock_adapter": {:hex, :websock_adapter, "0.5.9", "43dc3ba6d89ef5dec5b1d0a39698436a1e856d000d84bf31a3149862b01a287f", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "5534d5c9adad3c18a0f58a9371220d75a803bf0b9a3d87e6fe072faaeed76a08"}, "websockex": {:hex, :websockex, "0.4.3", "92b7905769c79c6480c02daacaca2ddd49de936d912976a4d3c923723b647bf0", [:mix], [], "hexpm", "95f2e7072b85a3a4cc385602d42115b73ce0b74a9121d0d6dbbf557645ac53e4"}, + "webtransport": {:hex, :webtransport, "0.4.4", "714180b340fbd30a7d666f3f593a612186ff1ba444566b3e8c9ce37fb2950638", [:rebar3], [{:h2, "~> 0.11.0", [hex: :h2, repo: "hexpm", optional: false]}, {:quic, "~> 1.8.0", [hex: :quic, repo: "hexpm", optional: false]}], "hexpm", "80a6641e0f6628938ceee4c9d7a4f6d48a6089890da1ae3288ca8dab13a6005e"}, + "yamerl": {:hex, :yamerl, "0.10.0", "4ff81fee2f1f6a46f1700c0d880b24d193ddb74bd14ef42cb0bcf46e81ef2f8e", [:rebar3], [], "hexpm", "346adb2963f1051dc837a2364e4acf6eb7d80097c0f53cbdc3046ec8ec4b4e6e"}, + "yaml_elixir": {:hex, :yaml_elixir, "2.12.2", "9dd1330fb4cd9a36a7b0f502e5b12486eff632792ee4a5f0eba52a4d4ec32c9c", [:mix], [{:yamerl, "~> 0.10", [hex: :yamerl, repo: "hexpm", optional: false]}], "hexpm", "e7c1b10122f973e6558462d51c39026ba0e14afbc6745318e990ea82cfe9e159"}, } diff --git a/priv/scrubbers/default.ex b/priv/scrubbers/default.ex index 8e2d16650..b294ce4ee 100644 --- a/priv/scrubbers/default.ex +++ b/priv/scrubbers/default.ex @@ -6,6 +6,7 @@ defmodule Pleroma.HTML.Scrubber.Default do @doc "The default HTML scrubbing policy: no " require FastSanitize.Sanitizer.Meta + require Pleroma.HTML.URIAttributes alias FastSanitize.Sanitizer.Meta # credo:disable-for-previous-line @@ -15,7 +16,11 @@ defmodule Pleroma.HTML.Scrubber.Default do Meta.strip_comments() - Meta.allow_tag_with_uri_attributes(:a, ["href", "data-user", "data-tag"], @valid_schemes) + Pleroma.HTML.URIAttributes.allow_tag_with_uri_attributes( + :a, + ["href", "data-user", "data-tag"], + @valid_schemes + ) Meta.allow_tag_with_this_attribute_values(:a, "class", [ "hashtag", @@ -145,7 +150,7 @@ defmodule Pleroma.HTML.Scrubber.Default do Meta.allow_tag_with_this_attribute_values(:img, "class", ["emoji"]) # restrict img tags to http/https only, because of MediaProxy. - Meta.allow_tag_with_uri_attributes(:img, ["src"], ["http", "https"]) + Pleroma.HTML.URIAttributes.allow_tag_with_uri_attributes(:img, ["src"], ["http", "https"]) Meta.allow_tag_with_these_attributes(:img, [ "width", diff --git a/priv/scrubbers/links_only.ex b/priv/scrubbers/links_only.ex index 7f434fb25..42050d05a 100644 --- a/priv/scrubbers/links_only.ex +++ b/priv/scrubbers/links_only.ex @@ -10,12 +10,13 @@ defmodule Pleroma.HTML.Scrubber.LinksOnly do @valid_schemes Pleroma.Config.get([:uri_schemes, :valid_schemes], []) require FastSanitize.Sanitizer.Meta + require Pleroma.HTML.URIAttributes alias FastSanitize.Sanitizer.Meta Meta.strip_comments() # links - Meta.allow_tag_with_uri_attributes(:a, ["href"], @valid_schemes) + Pleroma.HTML.URIAttributes.allow_tag_with_uri_attributes(:a, ["href"], @valid_schemes) Meta.allow_tag_with_this_attribute_values(:a, "rel", [ "tag", diff --git a/priv/scrubbers/twitter_text.ex b/priv/scrubbers/twitter_text.ex index 4df840735..266411e72 100644 --- a/priv/scrubbers/twitter_text.ex +++ b/priv/scrubbers/twitter_text.ex @@ -11,12 +11,17 @@ defmodule Pleroma.HTML.Scrubber.TwitterText do @valid_schemes Pleroma.Config.get([:uri_schemes, :valid_schemes], []) require FastSanitize.Sanitizer.Meta + require Pleroma.HTML.URIAttributes alias FastSanitize.Sanitizer.Meta Meta.strip_comments() # links - Meta.allow_tag_with_uri_attributes(:a, ["href", "data-user", "data-tag"], @valid_schemes) + Pleroma.HTML.URIAttributes.allow_tag_with_uri_attributes( + :a, + ["href", "data-user", "data-tag"], + @valid_schemes + ) Meta.allow_tag_with_this_attribute_values(:a, "class", [ "hashtag", @@ -49,7 +54,7 @@ defmodule Pleroma.HTML.Scrubber.TwitterText do Meta.allow_tag_with_this_attribute_values(:img, "class", ["emoji"]) # restrict img tags to http/https only, because of MediaProxy. - Meta.allow_tag_with_uri_attributes(:img, ["src"], ["http", "https"]) + Pleroma.HTML.URIAttributes.allow_tag_with_uri_attributes(:img, ["src"], ["http", "https"]) Meta.allow_tag_with_these_attributes(:img, [ "width", diff --git a/priv/static/index.html b/priv/static/index.html index 4365aa736..ef3b0afa7 100644 --- a/priv/static/index.html +++ b/priv/static/index.html @@ -11,10 +11,45 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/priv/static/static/css/about.BPcl3NxB.css b/priv/static/static/css/about.BPcl3NxB.css new file mode 100644 index 000000000..98cee111a --- /dev/null +++ b/priv/static/static/css/about.BPcl3NxB.css @@ -0,0 +1 @@ +.mrf-section{margin:1em}.mrf-section table{text-align:left;width:100%;padding-bottom:1.1em;padding-left:.5em}.mrf-section table th,.mrf-section table td{vertical-align:text-top;width:11em;max-width:25em;overflow:hidden}.mrf-section table th+th,.mrf-section table td+td{width:auto}.staff-group{padding:1em}.staff-group .basic-user-card{padding-left:0}.About dl{padding-left:1em} diff --git a/priv/static/static/css/account_actions.DjGDDSEq.css b/priv/static/static/css/account_actions.DjGDDSEq.css new file mode 100644 index 000000000..a673bc6b5 --- /dev/null +++ b/priv/static/static/css/account_actions.DjGDDSEq.css @@ -0,0 +1 @@ +.AccountActions .ellipsis-button{text-align:center;width:2.5em;margin:-.5em 0;padding:.5em 0} diff --git a/priv/static/static/css/announcements_page.DvITSMCQ.css b/priv/static/static/css/announcements_page.DvITSMCQ.css new file mode 100644 index 000000000..03b9e050a --- /dev/null +++ b/priv/static/static/css/announcements_page.DvITSMCQ.css @@ -0,0 +1 @@ +.announcement-editor{flex-direction:column;align-items:stretch;display:flex}.announcement-editor .announcement-metadata{margin-top:.5em}.announcement-editor .post-textarea{resize:vertical;box-sizing:content-box;height:10em;overflow:visible}.announcement{border-bottom:1px solid var(--border);padding:var(--status-margin);border-radius:0}.announcement .heading,.announcement .body{margin-bottom:var(--status-margin)}.announcement .footer,.announcement .footer .times{flex-direction:column;display:flex}.announcement .footer .actions{-webkit-box-pack:space-evenly;flex-direction:row;justify-content:space-evenly;display:flex}.announcement .footer .actions .btn{flex:1;max-width:10em;margin:1em}.announcements-page .post-form{padding:var(--status-margin)}.announcements-page .post-form .heading,.announcements-page .post-form .body{margin-bottom:var(--status-margin)}.announcements-page .post-form .post-button{min-width:10em} diff --git a/priv/static/static/css/attributes_helper.DsgIU8rn.css b/priv/static/static/css/attributes_helper.DsgIU8rn.css new file mode 100644 index 000000000..a9bbf0cde --- /dev/null +++ b/priv/static/static/css/attributes_helper.DsgIU8rn.css @@ -0,0 +1 @@ +.input.emoji-input{flex-direction:column;padding:0;display:flex;position:relative}.input.emoji-input .emoji-picker-icon{cursor:pointer;height:100%;padding:0 .2em;font-size:1.3em;line-height:1.2em;position:absolute;bottom:0;right:0}.input.emoji-input .emoji-picker-icon:hover i{color:var(--text)}.input.emoji-input.-textarea .emoji-picker-icon{height:auto;padding:.2em}.input.emoji-input .emoji-picker-panel{z-index:20;margin-top:.2em;position:absolute}.input.emoji-input .emoji-picker-panel.hide{display:none}.input.emoji-input input,.input.emoji-input textarea{color:inherit;box-shadow:none;border:none;outline:none;flex:1 0 auto;background:0 0!important}.input.emoji-input.-with-picker textarea,.input.emoji-input.-with-picker input{padding-right:2.4em}.input.emoji-input .hidden-overlay{opacity:0;pointer-events:none;color:red;position:absolute;inset:0;overflow:hidden}.input.emoji-input .hidden-overlay .caret{border:1px solid red;width:0;margin-right:calc(-1ch - 1px)}.autocomplete-panel{position:absolute}.autocomplete-item.menu-item{padding-top:0;padding-bottom:0;display:flex}.autocomplete-item.menu-item .image{width:calc(var(--__line-height) + var(--__vertical-gap) * 2);height:calc(var(--__line-height) + var(--__vertical-gap) * 2);line-height:var(--__line-height);text-align:center;margin-right:var(--__horizontal-gap)}.autocomplete-item.menu-item .image img{width:calc(var(--__line-height) + var(--__vertical-gap) * 2);height:calc(var(--__line-height) + var(--__vertical-gap) * 2);object-fit:contain}.autocomplete-item.menu-item .image span{font-size:var(--__line-height);line-height:var(--__line-height)}.autocomplete-item.menu-item .label{flex-direction:column;justify-content:center;margin:0 .1em 0 .2em;display:flex}.autocomplete-item.menu-item .label .displayText{line-height:1.5}.autocomplete-item.menu-item .label .detailText{font-size:.6em;line-height:.6em} diff --git a/priv/static/static/css/basic_user_card.CXE-NVII.css b/priv/static/static/css/basic_user_card.CXE-NVII.css new file mode 100644 index 000000000..4a67ae8f5 --- /dev/null +++ b/priv/static/static/css/basic_user_card.CXE-NVII.css @@ -0,0 +1 @@ +.basic-user-card{--emoji-size:1em;flex:10em;min-width:1em;margin:0;line-height:1.25;display:flex}.basic-user-card-collapsed-content{text-align:left;flex:1;min-width:0;margin-left:.7em}.basic-user-card-user-name img{object-fit:contain;vertical-align:middle;width:16px;height:16px}.basic-user-card-user-name-value,.basic-user-card-screen-name{white-space:nowrap;text-overflow:ellipsis;max-width:100%;display:inline;overflow:hidden}.basic-user-card-expanded-content{flex:1;min-width:0;margin-left:.7em} diff --git a/priv/static/static/css/bookmark_folder_edit.BYhGGKc2.css b/priv/static/static/css/bookmark_folder_edit.BYhGGKc2.css new file mode 100644 index 000000000..2848c2697 --- /dev/null +++ b/priv/static/static/css/bookmark_folder_edit.BYhGGKc2.css @@ -0,0 +1 @@ +.BookmarkFolderEdit{--panel-body-padding:.5em;flex-direction:column;display:flex;overflow:hidden}.BookmarkFolderEdit .folder-edit-heading{grid-template-columns:auto minmax(50%,1fr)}.BookmarkFolderEdit .panel-body{gap:.5em;display:flex}.BookmarkFolderEdit .emoji-picker-panel{z-index:20;margin-top:2px;position:absolute}.BookmarkFolderEdit .emoji-picker-panel.hide{display:none}.BookmarkFolderEdit .input-emoji{width:2.5em;height:2.5em;padding:0}.BookmarkFolderEdit .input-emoji .iconEmoji{text-align:center;object-fit:contain;vertical-align:middle;width:2.5em;height:2.5em;display:inline-block}.BookmarkFolderEdit .input-emoji .iconEmoji>span{font-size:1.5rem;line-height:2.5rem}.BookmarkFolderEdit .input-emoji img.iconEmoji{box-sizing:border-box;padding:.25em}.BookmarkFolderEdit .input-wrap{flex-direction:column;gap:.5em;display:flex}.BookmarkFolderEdit .go-back-button{text-align:center;height:100%;width:var(--__panel-heading-height-inner);align-self:start;line-height:1}.BookmarkFolderEdit .btn{margin:0 .5em}.BookmarkFolderEdit .panel-footer{grid-template-columns:minmax(10%,1fr)}.BookmarkFolderEdit .panel-footer .footer-button{min-width:9em} diff --git a/priv/static/static/css/bookmark_folders.CitandGk.css b/priv/static/static/css/bookmark_folders.CitandGk.css new file mode 100644 index 000000000..dfd559b1c --- /dev/null +++ b/priv/static/static/css/bookmark_folders.CitandGk.css @@ -0,0 +1 @@ +.Bookmark-folders .new-folder-button{padding:0 .5em} diff --git a/priv/static/static/css/chat.6N-tF5xA.css b/priv/static/static/css/chat.6N-tF5xA.css new file mode 100644 index 000000000..44a8e4aa2 --- /dev/null +++ b/priv/static/static/css/chat.6N-tF5xA.css @@ -0,0 +1 @@ +.chat-message-wrapper.hovered-message-chain .animated.Avatar canvas{display:none}.chat-message-wrapper.hovered-message-chain .animated.Avatar img{visibility:visible}.chat-message-wrapper .chat-message-menu{opacity:0;transition:opacity .1s;position:absolute;top:-.8em}.chat-message-wrapper .chat-message-menu button{padding-top:.2em;padding-bottom:.2em}.chat-message-wrapper .menu-icon{cursor:pointer}.chat-message-wrapper .popover{width:12em}.chat-message-wrapper .chat-message{padding-bottom:.5em;display:flex}.chat-message-wrapper .chat-message .status-body:hover{--_still-image-img-visibility:visible;--_still-image-canvas-visibility:hidden;--_still-image-label-visibility:hidden}.chat-message-wrapper .avatar-wrapper{width:32px;margin-right:.72em}.chat-message-wrapper .link-preview,.chat-message-wrapper .attachments{margin-bottom:1em}.chat-message-wrapper .status{background-color:var(--background);color:var(--text);border-radius:var(--roundness);border:1px solid var(--border);padding:.75em;display:flex}.chat-message-wrapper .created-at{float:right;opacity:.8;margin:-1em 0 -.5em;font-size:.8em;font-style:italic;position:relative}.chat-message-wrapper .without-attachment .message-content .RichContent:after{content:" ";margin-right:5.4em;display:inline-block}.chat-message-wrapper .pending .status-content.media-body,.chat-message-wrapper .pending .created-at{color:var(--faint)}.chat-message-wrapper .error .status-content.media-body,.chat-message-wrapper .error .created-at{color:var(--badgeNotification)}.chat-message-wrapper .chat-message-inner{flex-direction:column;align-items:flex-start;width:100%;min-width:10em;max-width:80%;display:flex}.chat-message-wrapper .outgoing{flex-flow:wrap;place-content:end flex-end;display:flex}.chat-message-wrapper .outgoing .chat-message-inner{align-items:flex-end}.chat-message-wrapper .outgoing .chat-message-menu{right:.4rem}.chat-message-wrapper .incoming .chat-message-menu{left:.4rem}.chat-message-wrapper .chat-message-inner.with-media,.chat-message-wrapper .chat-message-inner.with-media .status{width:100%}.chat-message-wrapper .visible{opacity:1}.chat-message-date-separator{text-align:center;-webkit-user-select:none;user-select:none;color:var(--textFaint);margin:1.4em 0;font-size:.9em}.chat-view{height:100%;display:flex}.chat-view .chat-view-inner{width:100%;height:auto;display:flex;overflow:visible}.chat-view .chat-view-body{box-sizing:border-box;width:100%;min-height:calc(100vh - var(--navbar-height));border-radius:var(--roundness);border-bottom-right-radius:0;border-bottom-left-radius:0;flex-direction:column;margin:0;display:flex;overflow:visible}.chat-view .chat-view-body:after{border-radius:0}.chat-view .message-list{flex-direction:column;justify-content:end;height:100%;padding:0 .8em;display:flex}.chat-view .footer{z-index:1;position:sticky;bottom:0}.chat-view .chat-view-heading{grid-template-columns:auto minmax(50%,1fr)}.chat-view .go-back-button{text-align:center;height:100%;width:var(--__panel-heading-height-inner);align-self:start;line-height:1}.chat-view .jump-to-bottom-button{z-index:10;transition:all .35s;opacity:0;visibility:hidden;cursor:pointer;border-radius:100%;justify-content:center;align-items:center;width:2.5em;height:2.5em;transition-timing-function:cubic-bezier(0,1,.5,1);display:flex;position:absolute;top:-3.2em;right:1.3em;box-shadow:0 1px 1px #0000004d,0 2px 4px #0000004d}.chat-view .jump-to-bottom-button.visible{opacity:1;visibility:visible}.chat-view .jump-to-bottom-button .unread-message-count{border-radius:50px;margin-top:-1rem;padding:.1em;font-size:.8em;position:absolute;left:50%}.chat-view .jump-to-bottom-button .chat-loading-error{align-items:flex-end;width:100%;height:100%;display:flex}.chat-view .jump-to-bottom-button .chat-loading-error .error{width:100%} diff --git a/priv/static/static/css/chat_list.WHtUK6wd.css b/priv/static/static/css/chat_list.WHtUK6wd.css new file mode 100644 index 000000000..f36d2bbbe --- /dev/null +++ b/priv/static/static/css/chat_list.WHtUK6wd.css @@ -0,0 +1 @@ +.chat-list-item{box-sizing:border-box;cursor:pointer;flex-direction:row;width:100%;display:flex;overflow:hidden}.chat-list-item :focus{outline:none}.chat-list-item .chat-list-item-left{margin-right:1em}.chat-list-item .chat-list-item-center{box-sizing:border-box;width:100%;overflow:hidden}.chat-list-item .heading{justify-content:space-between;width:100%;line-height:1em;display:flex}.chat-list-item .heading-right{white-space:nowrap}.chat-list-item .name-and-account-name{text-overflow:ellipsis;white-space:nowrap;line-height:var(--post-line-height);flex-shrink:1;overflow:hidden}.chat-list-item .chat-preview{white-space:nowrap;text-overflow:ellipsis;color:var(--textFaint);width:100%;margin:.35em 0;display:flex;overflow:hidden}.chat-list-item a{color:var(--linkFaint);pointer-events:none;text-decoration:none}.chat-list-item:hover .animated.avatar canvas{display:none}.chat-list-item:hover .animated.avatar img{visibility:visible}.chat-list-item .chat-preview-body{--emoji-size:1.4em;padding-right:1em}.chat-list-item .time-wrapper{line-height:var(--post-line-height)}.chat-new .input-wrap{margin:.7em .5em;display:flex}.chat-new .input-wrap input{width:100%}.chat-new .search-icon{margin-right:.3em}.chat-new .member-list{padding-bottom:.7rem}.chat-new .go-back-button{text-align:center;height:100%;width:var(--__panel-heading-height-inner);align-self:start;line-height:1}.chat-list{min-height:25em;margin-bottom:0}.empty-chat-list-alert{color:var(--textFaint);justify-content:center;padding:3em;font-size:1.2em;display:flex} diff --git a/priv/static/static/css/chat_title.B1JBlEsZ.css b/priv/static/static/css/chat_title.B1JBlEsZ.css new file mode 100644 index 000000000..2c9a8ef85 --- /dev/null +++ b/priv/static/static/css/chat_title.B1JBlEsZ.css @@ -0,0 +1 @@ +.chat-title{text-overflow:ellipsis;white-space:nowrap;--emoji-size:1em;display:flex;overflow:hidden}.chat-title .username{text-overflow:ellipsis;white-space:nowrap;max-width:100%;display:inline;overflow:hidden}.chat-title .avatar-container{align-self:center;line-height:1}.chat-title .titlebar-avatar{border-radius:var(--roundness);width:1.5em;height:1.5em;margin-right:.5em}.chat-title .titlebar-avatar.animated:before{display:none} diff --git a/priv/static/static/css/checkbox.DY0WQ--N.css b/priv/static/static/css/checkbox.DY0WQ--N.css new file mode 100644 index 000000000..4b56cf537 --- /dev/null +++ b/priv/static/static/css/checkbox.DY0WQ--N.css @@ -0,0 +1 @@ +.checkbox{align-items:baseline;gap:0 .5em;min-height:1.2em;display:inline-flex;position:relative}.checkbox-indicator,.checkbox .label{align-self:center}.checkbox>.checkbox-indicator{line-height:inherit;width:1.2em;height:1.2em;box-shadow:none;--_shadow:var(--shadow);margin:0;padding:0;display:inline-block;position:relative}.checkbox-indicator:before{content:"✓";border-radius:var(--roundness);width:1.1em;height:1.1em;box-shadow:var(--_shadow);background-color:var(--background);vertical-align:top;text-align:center;color:#0000;box-sizing:border-box;font-size:1.1em;line-height:1.1em;transition:color .2s;display:block;position:absolute;inset:0;overflow:hidden}.checkbox.-radio .checkbox-indicator,.checkbox.-radio .checkbox-indicator:before{border-radius:9999px}.checkbox.-radio .checkbox-indicator:before{content:"•"}.checkbox .disabled .checkbox-indicator:before{background-color:#0000}.checkbox input[type=checkbox]:checked+.checkbox-indicator:before{color:var(--text)}.checkbox input[type=checkbox]:indeterminate+.checkbox-indicator:before{content:"–";color:var(--text)}.checkbox.indeterminate-fix input[type=checkbox]+.checkbox-indicator:before{content:"–"} diff --git a/priv/static/static/css/confirm_modal.CxXYsWAn.css b/priv/static/static/css/confirm_modal.CxXYsWAn.css new file mode 100644 index 000000000..73c55d9e4 --- /dev/null +++ b/priv/static/static/css/confirm_modal.CxXYsWAn.css @@ -0,0 +1 @@ +.confirm-modal .confirm-icon{margin-top:.5rem;margin-bottom:.5rem;margin-left:.75rem}.confirm-modal .content{text-align:left;justify-content:center;align-items:center;line-height:1.5;display:flex}.confirm-modal .content p{margin-top:.75em;margin-bottom:.75em}.confirm-modal .content p:first-child{margin-top:0}.confirm-modal .content p:last-child{margin-bottom:0}.confirm-modal .below:not(:empty){margin-top:1em}.confirm-modal .text{max-width:50ch;margin-left:.5em;margin-right:3.5em} diff --git a/priv/static/static/css/dialog_modal.DC5hTqSH.css b/priv/static/static/css/dialog_modal.DC5hTqSH.css new file mode 100644 index 000000000..a6d901cec --- /dev/null +++ b/priv/static/static/css/dialog_modal.DC5hTqSH.css @@ -0,0 +1 @@ +.dark-overlay:before{content:" ";cursor:default;z-index:2000;background:#1b1f2380;display:block;position:fixed;inset:0}.dialog-container{justify-content:center;place-items:center;display:grid;position:fixed;inset:0;overflow:auto}.dialog-modal.panel{z-index:2001;cursor:default;max-width:90vw;display:block}.dialog-modal.panel .dialog-modal-heading .title{text-align:center}.dialog-modal.panel .dialog-modal-content{white-space:normal;text-align:center;margin:0;padding:1rem}.dialog-modal.panel .dialog-modal-footer{border-top:1px solid var(--border);grid-gap:.5em;grid-template-columns:-webkit-min-content;grid-template-columns:min-content;grid-auto-columns:-webkit-min-content;grid-auto-columns:min-content;grid-auto-flow:column dense;justify-content:end;height:auto;margin:0;padding:.5em;display:grid}.dialog-modal.panel .dialog-modal-footer button{white-space:nowrap;width:auto;padding-left:2em;padding-right:2em}#modal.-mobile .dialog-container{-webkit-box-pack:stretch;justify-content:stretch;place-items:end stretch}#modal.-mobile .dialog-container.-center-mobile{align-items:center}#modal.-mobile .dialog-modal.panel{min-width:100vw}#modal.-mobile .dialog-modal-footer{flex-direction:column;grid-template-columns:1fr;grid-auto-rows:auto;grid-auto-flow:dense;justify-content:flex-end}#modal.-mobile .dialog-modal-footer button{grid-column:1;height:3em} diff --git a/priv/static/static/css/drafts.CvPb_YQj.css b/priv/static/static/css/drafts.CvPb_YQj.css new file mode 100644 index 000000000..2cf81a7bf --- /dev/null +++ b/priv/static/static/css/drafts.CvPb_YQj.css @@ -0,0 +1 @@ +.Draft{position:relative}.Draft .status-content{margin:.5em 0;padding:.5em}.Draft .status-preview{grid-gap:.5em;grid-template-columns:1fr;grid-auto-columns:10em;grid-auto-flow:column;align-items:start;max-width:100%;display:grid}.Draft .status-preview p{white-space:normal;overflow-x:hidden}.Draft .status-preview .poll-indicator-container{border-radius:var(--roundness);align-self:start;place-items:center;height:0;padding-bottom:62.5%;display:grid;position:relative}.Draft .status-preview .poll-indicator{box-sizing:border-box;border:1px solid var(--border);place-items:center;width:100%;height:100%;display:grid;position:absolute;inset:0}.Draft .actions{-webkit-box-pack:space-evenly;flex-direction:row;justify-content:space-evenly;display:flex}.Draft .actions .btn{flex:1;margin-left:1em;margin-right:1em}.Drafts .draft{width:100%;margin:1em 0}.Drafts .remove-all{justify-content:center;margin:1em;display:flex}.Drafts .empty-drafs-list-alert{color:var(--textFaint);justify-content:center;padding:3em;font-size:1.2em;display:flex} diff --git a/priv/static/static/css/edit_status_modal.egG_jIir.css b/priv/static/static/css/edit_status_modal.egG_jIir.css new file mode 100644 index 000000000..f9c1acb35 --- /dev/null +++ b/priv/static/static/css/edit_status_modal.egG_jIir.css @@ -0,0 +1 @@ +.modal-view.edit-form-modal-view{align-items:flex-start}.edit-form-modal-panel{flex-shrink:0;width:100%;max-width:700px;margin-top:25%;margin-bottom:2em}@media (orientation:landscape){.edit-form-modal-panel{margin-top:8%}}.edit-form-modal-panel .form-bottom-left{max-width:6.5em}.edit-form-modal-panel .form-bottom-left .emoji-icon{-webkit-box-pack:right;justify-content:right} diff --git a/priv/static/static/css/emoji_picker.CJFAWWOw.css b/priv/static/static/css/emoji_picker.CJFAWWOw.css new file mode 100644 index 000000000..bed01090c --- /dev/null +++ b/priv/static/static/css/emoji_picker.CJFAWWOw.css @@ -0,0 +1 @@ +.emoji-picker{--__emoji-picker-header:2.2em;flex-direction:column;width:25em;max-width:calc(100vw - 20px);display:flex}.emoji-picker-header-image{width:var(--__emoji-picker-header);max-width:var(--__emoji-picker-header);height:var(--__emoji-picker-header);max-height:var(--__emoji-picker-header);justify-content:center;align-items:center;display:inline-flex}.emoji-picker-header-image .still-image{width:var(--__emoji-picker-header);max-width:var(--__emoji-picker-header);height:var(--__emoji-picker-header);max-height:var(--__emoji-picker-header);object-fit:contain;--_still_image-label-scale:.5}.emoji-picker .keep-open,.emoji-picker .too-many-emoji,.emoji-picker .hide-custom-emoji{padding:.5em;line-height:normal}.emoji-picker .hide-custom-emoji{padding-top:0}.emoji-picker .too-many-emoji{flex-direction:column;display:flex}.emoji-picker .keep-open-label{padding:0 .5em;display:flex}.emoji-picker .heading{flex-direction:column;padding:.7em .5em 0;display:flex}.emoji-picker .content{flex-direction:column;flex:auto;min-height:0;display:flex}.emoji-picker .emoji-tabs{flex-flow:row;flex-grow:1;display:flex;overflow:auto hidden}.emoji-picker .additional-tabs{border-left:1px solid;border-left-color:var(--border);flex:none;padding-left:.5em;display:flex}.emoji-picker .additional-tabs,.emoji-picker .emoji-tabs{scrollbar-width:thin;flex-basis:auto;align-content:center;display:flex}.emoji-picker .additional-tabs-item,.emoji-picker .emoji-tabs-item{cursor:pointer;width:var(--__emoji-picker-header);max-width:var(--__emoji-picker-header);height:var(--__emoji-picker-header);max-height:var(--__emoji-picker-header);align-items:center;padding:0 .5em;display:flex}.emoji-picker .additional-tabs-item .svg-inline--fa,.emoji-picker .emoji-tabs-item .svg-inline--fa{font-size:1.85em}.emoji-picker .additional-tabs-item.disabled,.emoji-picker .emoji-tabs-item.disabled{opacity:.5;pointer-events:none}.emoji-picker .additional-tabs-item.toggled,.emoji-picker .emoji-tabs-item.toggled{border-bottom:.2em solid}.emoji-picker .sticker-picker{flex:auto}.emoji-picker .stickers-content,.emoji-picker .emoji-content{flex-direction:column;flex:auto;min-height:0;display:flex}.emoji-picker .stickers-content.hidden,.emoji-picker .emoji-content.hidden{opacity:0;pointer-events:none;position:absolute}.emoji-picker .emoji-search{flex:none;padding-bottom:.5em}.emoji-picker .emoji-search input{width:100%}.emoji-picker .emoji-groups{scrollbar-gutter:stable both-edges;-webkit-user-select:none;user-select:none;-webkit-mask:-webkit-linear-gradient(#fff 0,#0000 100%) bottom no-repeat,-webkit-linear-gradient(0deg,#fff 0,#0000 100%) top no-repeat,-webkit-linear-gradient(#fff,#fff);-webkit-mask:linear-gradient(0deg,#fff 0,#0000 100%) bottom no-repeat,linear-gradient(#fff 0,#0000 100%) top no-repeat,linear-gradient(#fff,#fff);mask:linear-gradient(0deg,#fff 0,#0000 100%) bottom no-repeat,linear-gradient(#fff 0,#0000 100%) top no-repeat,linear-gradient(#fff,#fff);-webkit-mask-composite:xor;height:100%;min-height:200px;-webkit-mask-size:100% 20px,100% 20px,auto;mask-size:100% 20px,100% 20px,auto;mask-composite:xor;-webkit-mask-composite:xor;flex:1px;transition:-webkit-mask-size .15s,mask-size .15s;position:relative;overflow:auto;-webkit-mask-composite:xor;mask-composite:exclude}.emoji-picker .emoji-groups.scrolled-top{-webkit-mask-size:100% 20px,100% 0,auto;mask-size:100% 20px,100% 0,auto}.emoji-picker .emoji-groups.scrolled-bottom{-webkit-mask-size:100% 0,100% 20px,auto;mask-size:100% 0,100% 20px,auto}.emoji-picker .emoji-item{width:var(--emoji-size);height:var(--emoji-size);box-sizing:border-box;line-height:var(--emoji-size);cursor:pointer;justify-content:center;align-items:center;margin:.2em;display:flex}.emoji-picker .emoji-item .emoji-picker-emoji.-custom{object-fit:contain;width:var(--emoji-size);max-width:var(--emoji-size);height:var(--emoji-size);max-height:var(--emoji-size);--_still_image-label-scale:.5}.emoji-picker .emoji-item .emoji-picker-emoji.-unicode{font-size:calc(var(--emoji-size) * .8);overflow:hidden}.emoji-picker .emoji-group{grid-template-columns:repeat(var(--__amount), 1fr);grid-template-rows:repeat(1,auto);justify-content:center;place-items:center;display:grid}.emoji-picker .emoji-group.first-row{grid-template-rows:repeat(2,auto)}.emoji-picker .emoji-group.first-row .emoji-item{grid-row:2}.emoji-picker .emoji-group-title{grid-column:span var(--__amount);width:100%;margin:0;padding-left:.3em;font-size:.85em}.emoji-picker .emoji-group-title.disabled{display:none} diff --git a/priv/static/static/css/error_modal.D1oWQ5nz.css b/priv/static/static/css/error_modal.D1oWQ5nz.css new file mode 100644 index 000000000..71a8cd43d --- /dev/null +++ b/priv/static/static/css/error_modal.D1oWQ5nz.css @@ -0,0 +1 @@ +.error-modal .error-icon{margin-top:.5rem;margin-bottom:.5rem;margin-left:.75rem}.error-modal .content{text-align:left;justify-content:center;align-items:center;line-height:1.5;display:flex}.error-modal .content p{margin-top:.75em;margin-bottom:.75em}.error-modal .content p:first-child{margin-top:0}.error-modal .content p:last-child{margin-bottom:0}.error-modal .stack{margin:0;overflow-x:auto}.error-modal .below:not(:empty){margin-top:1em}.error-modal .text{max-width:50ch;margin-left:.5em;margin-right:3.5em} diff --git a/priv/static/static/css/flash.BYNCHsIH.css b/priv/static/static/css/flash.BYNCHsIH.css new file mode 100644 index 000000000..ea125f91b --- /dev/null +++ b/priv/static/static/css/flash.BYNCHsIH.css @@ -0,0 +1 @@ +.Flash{width:100%;height:100%;display:inline-block;position:relative}.Flash .player{width:100%;height:100%}.Flash .placeholder{background:var(--bg);width:100%;height:100%;color:var(--link);justify-content:center;align-items:center;display:flex}.Flash .hider{top:0}.Flash .label{text-align:center;white-space:normal;flex:1 1 0;line-height:1.2}.Flash .hidden{visibility:hidden;display:none} diff --git a/priv/static/static/css/folder_card.CTk_063i.css b/priv/static/static/css/folder_card.CTk_063i.css new file mode 100644 index 000000000..36438d475 --- /dev/null +++ b/priv/static/static/css/folder_card.CTk_063i.css @@ -0,0 +1 @@ +.FolderCard{align-items:center;display:flex}.FolderCard .folder-name{flex-grow:1;align-items:center;display:flex}.FolderCard .folder-name .icon,.FolderCard .folder-name .iconLetter,.FolderCard .folder-name .iconEmoji{width:2.5rem;height:2.5rem;margin-right:.5rem;display:inline-block}.FolderCard .folder-name .icon,.FolderCard .folder-name .iconLetter{text-align:center;font-size:1.5rem;line-height:2.5rem}.FolderCard .folder-name .iconEmoji{text-align:center;object-fit:contain;vertical-align:middle}.FolderCard .folder-name .iconEmoji>span{font-size:1.5rem;line-height:2.5rem}.FolderCard .folder-name img.iconEmoji{box-sizing:border-box;padding:.25em} diff --git a/priv/static/static/css/follow_card.jWN765qC.css b/priv/static/static/css/follow_card.jWN765qC.css new file mode 100644 index 000000000..a07f86dd2 --- /dev/null +++ b/priv/static/static/css/follow_card.jWN765qC.css @@ -0,0 +1 @@ +.follow-card-content-container{flex-flow:wrap;flex-shrink:0;justify-content:space-between;line-height:1.5em;display:flex}.follow-card-button{margin-top:.5em;margin-left:1em;padding:0 1.5em}.follow-card-follow-button{width:10em;margin-top:.5em;margin-left:auto} diff --git a/priv/static/static/css/follow_requests.5W1jgYR0.css b/priv/static/static/css/follow_requests.5W1jgYR0.css new file mode 100644 index 000000000..f6c20e035 --- /dev/null +++ b/priv/static/static/css/follow_requests.5W1jgYR0.css @@ -0,0 +1 @@ +.follow-request-card-content-container{flex-flow:wrap;display:flex}.follow-request-card-content-container button{flex:1;min-width:8em;max-width:12em;margin-top:.5em;margin-right:.5em}.follow-request-card-content-container button:last-child{margin-right:0} diff --git a/priv/static/static/css/image_cropper.iV4LurEO.css b/priv/static/static/css/image_cropper.iV4LurEO.css new file mode 100644 index 000000000..a46d7b8de --- /dev/null +++ b/priv/static/static/css/image_cropper.iV4LurEO.css @@ -0,0 +1 @@ +.image-cropper{flex-direction:column;display:flex}.image-cropper-canvas,.image-cropper .image{height:100%}.image-cropper .image-cropper-img-input{display:none}.image-cropper-buttons-wrapper{grid-gap:.5em;grid-template-columns:1fr 1fr 1fr;display:grid}.image-cropper-buttons-wrapper button{margin-top:1em} diff --git a/priv/static/static/css/interface_language_switcher.DYf3Vv_u.css b/priv/static/static/css/interface_language_switcher.DYf3Vv_u.css new file mode 100644 index 000000000..cb92cd530 --- /dev/null +++ b/priv/static/static/css/interface_language_switcher.DYf3Vv_u.css @@ -0,0 +1 @@ +.interface-language-switcher .setting-list .setting-item{grid-template-columns:subgrid;display:grid}.interface-language-switcher .add-button{text-align:center;padding-bottom:1em;display:block}.interface-language-switcher .add-button .default-button{width:auto;display:block}.-mobile .interface-language-switcher li.setting-item{border-bottom:none;flex-direction:column;align-items:stretch;gap:.5em;display:flex}.-mobile .interface-language-switcher .add-button{border-bottom:1px solid var(--border)} diff --git a/priv/static/static/css/list.Cau2FUIa.css b/priv/static/static/css/list.Cau2FUIa.css new file mode 100644 index 000000000..9ffd28aa3 --- /dev/null +++ b/priv/static/static/css/list.Cau2FUIa.css @@ -0,0 +1 @@ +.List{--__line-height:1.5em;--__horizontal-gap:.75em;--__vertical-gap:.5em;flex-direction:column;display:flex}.List .list{flex:1}.List .list-item{align-items:center;display:flex}.List .list-item[aria-expanded=true]{border-bottom-width:1px}.List .list-item:first-child{border-top-right-radius:var(--roundness);border-top-left-radius:var(--roundness);border-top-width:0}.List .list-item:last-child{border-bottom-right-radius:var(--roundness);border-bottom-left-radius:var(--roundness);border-bottom-width:0}.List .list-item:not(:last-child){border-bottom:1px dotted var(--border)}.List .list-item:empty{border:none}.List .header{padding:var(--__vertical-gap) var(--__horizontal-gap);border-bottom:1px solid;border-bottom-color:var(--border);align-items:center;display:flex}.List .header .actions{flex:1}.List .footer{text-align:center;padding:.9em}.List .footer a{cursor:pointer}.List .checkbox-wrapper{padding-right:var(--__horizontal-gap);flex:none}.List.-scrollable{flex-direction:column;display:flex;overflow-y:hidden}.List.-scrollable .list{flex:auto;overflow-y:auto} diff --git a/priv/static/static/css/lists.R2bOz6oY.css b/priv/static/static/css/lists.R2bOz6oY.css new file mode 100644 index 000000000..565382562 --- /dev/null +++ b/priv/static/static/css/lists.R2bOz6oY.css @@ -0,0 +1 @@ +.Lists .new-list-button{padding:0 .5em} diff --git a/priv/static/static/css/lists_edit.D3Eu2cDo.css b/priv/static/static/css/lists_edit.D3Eu2cDo.css new file mode 100644 index 000000000..81dfa85a7 --- /dev/null +++ b/priv/static/static/css/lists_edit.D3Eu2cDo.css @@ -0,0 +1 @@ +.ListsUserSearch .input-wrap{margin:.7em .5em;display:flex}.ListsUserSearch .input-wrap input{width:100%}.ListsUserSearch .search-icon{margin-right:.3em}.ListEdit{--panel-body-padding:.5em;height:calc(100vh - var(--navbar-height));flex-direction:column;display:flex;overflow:hidden}.ListEdit .list-edit-heading{grid-template-columns:auto minmax(50%,1fr)}.ListEdit .panel-body{flex-direction:column;flex:1;display:flex;overflow:hidden}.ListEdit .list-member-management{flex:1 0 auto}.ListEdit .search-icon{margin-right:.3em}.ListEdit .users-list{padding-bottom:.7rem;overflow-y:auto}.ListEdit .search-list,.ListEdit .members-list{flex-direction:column;min-height:0;overflow:hidden}.ListEdit .go-back-button{text-align:center;height:100%;width:var(--__panel-heading-height-inner);align-self:start;line-height:1}.ListEdit .btn{margin:0 .5em}.ListEdit .panel-footer{grid-template-columns:minmax(10%,1fr)}.ListEdit .panel-footer .footer-button{min-width:9em} diff --git a/priv/static/static/css/main.0Iw0byjp.css b/priv/static/static/css/main.0Iw0byjp.css new file mode 100644 index 000000000..7e479480f --- /dev/null +++ b/priv/static/static/css/main.0Iw0byjp.css @@ -0,0 +1 @@ +.vue-recycle-scroller{position:relative}.vue-recycle-scroller.direction-vertical:not(.page-mode){overflow-y:auto}.vue-recycle-scroller.direction-horizontal:not(.page-mode){overflow-x:auto}.vue-recycle-scroller.direction-horizontal{display:flex}.vue-recycle-scroller__slot{-webkit-box-flex:1;-ms-flex:auto 0 0px;flex:none}.vue-recycle-scroller__item-wrapper{box-sizing:border-box;flex:1;position:relative;overflow:hidden}.vue-recycle-scroller.ready .vue-recycle-scroller__item-view{will-change:transform;position:absolute;top:0;left:0}.vue-recycle-scroller.direction-vertical .vue-recycle-scroller__item-wrapper{width:100%}.vue-recycle-scroller.direction-horizontal .vue-recycle-scroller__item-wrapper{height:100%}.vue-recycle-scroller.ready.direction-vertical .vue-recycle-scroller__item-view{width:100%}.vue-recycle-scroller.ready.direction-horizontal .vue-recycle-scroller__item-view{height:100%}.resize-observer[data-v-b329ee4c]{z-index:-1;pointer-events:none;opacity:0;background-color:#0000;border:none;width:100%;height:100%;display:block;position:absolute;top:0;left:0;overflow:hidden}.resize-observer[data-v-b329ee4c] object{pointer-events:none;z-index:-1;width:100%;height:100%;display:block;position:absolute;top:0;left:0;overflow:hidden}.HashtagLink{white-space:normal;color:var(--link);display:inline-block;position:relative}.user-popover{margin:0}.user-popover .user-info{width:100%;margin:1.2em}.user-popover .user-identity{min-width:min(30em,98vw)}.user-popover .user-card-inner{display:flex}.user-popover.popover{overflow:hidden}.MentionLink{white-space:normal;word-break:normal;display:inline;position:relative}.MentionLink .new,.MentionLink .original{display:inline}.MentionLink .mention-avatar{border-radius:var(--roundness);vertical-align:middle;-webkit-user-select:none;user-select:none;width:1.5em;height:1.5em;margin-right:.2em}.MentionLink .full{pointer-events:none;opacity:0;white-space:nowrap;z-index:1;-webkit-user-select:all;user-select:all;height:100%;margin-top:.25em;padding:.5em;transition:opacity .2s;display:inline-block;position:absolute;top:100%;left:0}.MentionLink .short.-with-tooltip,.MentionLink .you{-webkit-user-select:none;user-select:none}.MentionLink .short,.MentionLink .full{white-space:nowrap}.MentionLink .shortName{white-space:normal}.MentionLink .new.-you .shortName{font-weight:600}.MentionLink .new.-has-selection{--color:var(--selectionText);--link:var(--selectionText);background-color:var(--selectionBackground)}.MentionLink .new .at{color:var(--link);opacity:.8;vertical-align:-25%;margin:0;padding:0 .1em;line-height:1;display:inline-block}.MentionLink .new.-striped .shortName{background-image:-webkit-repeating-linear-gradient(315deg, var(--____highlight-tintColor), var(--____highlight-tintColor) 5px, var(--____highlight-tintColor2) 5px, var(--____highlight-tintColor2) 10px);background-image:repeating-linear-gradient(135deg, var(--____highlight-tintColor), var(--____highlight-tintColor) 5px, var(--____highlight-tintColor2) 5px, var(--____highlight-tintColor2) 10px)}.MentionLink .new.-solid .shortName{background-image:-webkit-linear-gradient(var(--____highlight-tintColor2), var(--____highlight-tintColor2));background-image:linear-gradient(var(--____highlight-tintColor2), var(--____highlight-tintColor2))}.MentionLink .new.-side .shortName{box-shadow:0 -5px 3px -4px inset var(--____highlight-solidColor)}.MentionLink .serverName.-faded{color:var(--linkFaint)}.mention-link-popover{max-width:70ch;max-height:20rem;overflow:hidden}.MentionsLine{overflow-wrap:break-word;text-wrap:pretty}.MentionsLine .mention-link:not(:first-child):before{content:" "}.MentionsLine .showMoreLess{white-space:normal;color:var(--link);margin-left:.5em}.still-image{align-items:center;line-height:0;display:inline-flex;position:relative;overflow:hidden}.still-image canvas{object-fit:contain;width:100%;height:100%;visibility:var(--_still-image-canvas-visibility,visible);position:absolute;inset:0}.still-image img{object-fit:contain;width:100%;height:100%}.still-image.animated:before{zoom:var(--_still_image-label-scale,1);content:"gif";color:#fff;border-radius:var(--roundness);z-index:2;visibility:var(--_still-image-label-visibility,visible);background:#7f7f7f80;padding:2px 4px;font-size:.7em;line-height:1;display:block;position:absolute;top:.5em;left:.5em}.still-image.animated:hover canvas{display:none}.still-image.animated:hover:before{visibility:var(--_still-image-label-visibility,hidden)}.still-image.animated img{visibility:var(--_still-image-img-visibility,hidden)}.still-image.animated:hover img{visibility:visible}.emoji-popover{text-align:center;margin:0 .5em .5em}.emoji-popover .emoji{width:calc(var(--emoji-size) * 3);height:calc(var(--emoji-size) * 3)}.emoji-popover .emoji-popover-centered{justify-content:center;align-items:center;display:flex}.emoji-popover .emoji-popover-button{width:100%;margin-top:.5em}.emoji-popover .Select{width:100%}.RichContent{font-family:var(--font)}.RichContent.-faint{color:var(--text);--text:var(--textFaint)!important;--link:var(--linkFaint)!important;--funtextGreentext:var(--funtextGreentextFaint)!important;--funtextCyantext:var(--funtextCyantextFaint)!important}.RichContent.-faint a{color:var(--linkFaint)}.RichContent blockquote{border-left:.2em solid var(--textFaint);margin:.2em 0 .2em .2em;padding-left:1em;font-style:italic}.RichContent pre{overflow:auto}.RichContent code,.RichContent samp,.RichContent kbd,.RichContent var,.RichContent pre{font-family:var(--monoFont)}.RichContent p{margin:0 0 1em}.RichContent p:last-child{margin:0}.RichContent h1{margin:1.4em 0;font-size:1.1em;line-height:1.2em}.RichContent h2{margin:1em 0;font-size:1.1em}.RichContent h3{margin:1.2em 0;font-size:1em}.RichContent h4{margin:1.1em 0}.RichContent .img{display:inline-block}.RichContent .img button{display:inline-flex}.RichContent .emoji{width:var(--emoji-size,32px);height:var(--emoji-size,32px);display:inline-block}.RichContent.-allow-non-square-emoji .emoji{width:auto;max-width:calc(var(--emoji-size,32px) * 3);min-width:var(--emoji-size,32px)}.RichContent .img,.RichContent video{vertical-align:middle;object-fit:contain;max-width:100%;max-height:400px}.RichContent .greentext{color:var(--funtextGreentext)}.RichContent .cyantext{color:var(--funtextCyantext)}.RichContent .mfm{display:inline-block}.RichContent .mfm.-scale{font-size:calc(var(--emoji-size) / 2)}.RichContent .mfm:not(.-scale){--emoji-size:2em}.RichContent .mfm.-pause{animation-play-state:paused}.RichContent .mfm[data-mfm-operator=x2]{font-size:300%}.RichContent .mfm[data-mfm-operator=x3]{font-size:400%}.RichContent .mfm[data-mfm-operator=x4]{font-size:600%}.RichContent .mfm[data-mfm-operator=sparkle]{position:relative}.RichContent .mfm[data-mfm-operator=sparkle]:before,.RichContent .mfm[data-mfm-operator=sparkle]:after{content:"✨";opacity:.4;z-index:-1;animation-name:cheap-sparkle;animation-duration:1s;animation-timing-function:ease-in-out;animation-iteration-count:infinite;position:absolute}.RichContent .mfm[data-mfm-operator=sparkle]:before{animation-direction:alternate;left:0}.RichContent .mfm[data-mfm-operator=sparkle]:after{animation-direction:alternate-reverse;right:0}.RichContent .mfm .emoji{max-width:unset!important}.RichContent:hover .mfm{animation-play-state:running}a .RichContent{color:var(--link)!important}@keyframes mfm-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes mfm-spinX{0%{transform:perspective(8em)rotateX(0)}to{transform:perspective(8em)rotateX(360deg)}}@keyframes mfm-spinY{0%{transform:perspective(8em)rotateY(0)}to{transform:perspective(8em)rotateY(360deg)}}@keyframes mfm-jump{0%{transform:translateY(0)}25%{transform:translateY(-1em)}50%{transform:translateY(0)}75%{transform:translateY(-.5em)}to{transform:translateY(0)}}@keyframes mfm-bounce{0%{transform:translateY(0)scale(1)}25%{transform:translateY(-16px)scale(1)}50%{transform:translateY(0)scale(1)}75%{transform:translateY(0)scale(1.5,.75)}to{transform:translateY(0)scale(1)}}@keyframes mfm-twitch{0%{transform:translate(7px,-2px)}5%{transform:translate(-3px,1px)}10%{transform:translate(-7px,-1px)}15%{transform:translateY(-1px)}20%{transform:translate(-8px,6px)}25%{transform:translate(-4px,-3px)}30%{transform:translate(-4px,-6px)}35%{transform:translate(-8px,-8px)}40%{transform:translate(4px,6px)}45%{transform:translate(-3px,1px)}50%{transform:translate(2px,-10px)}55%{transform:translate(-7px)}60%{transform:translate(-2px,4px)}65%{transform:translate(3px,-8px)}70%{transform:translate(6px,7px)}75%{transform:translate(-7px,-2px)}80%{transform:translate(-7px,-8px)}85%{transform:translate(9px,3px)}90%{transform:translate(-3px,-2px)}95%{transform:translate(-10px,2px)}to{transform:translate(-2px,-6px)}}@keyframes mfm-shake{0%{transform:translate(-3px,-1px)rotate(-8deg)}5%{transform:translateY(-1px)rotate(-10deg)}10%{transform:translate(1px,-3px)rotate(0)}15%{transform:translate(1px,1px)rotate(11deg)}20%{transform:translate(-2px,1px)rotate(1deg)}25%{transform:translate(-1px,-2px)rotate(-2deg)}30%{transform:translate(-1px,2px)rotate(-3deg)}35%{transform:translate(2px,1px)rotate(6deg)}40%{transform:translate(-2px,-3px)rotate(-9deg)}45%{transform:translateY(-1px)rotate(-12deg)}50%{transform:translate(1px,2px)rotate(10deg)}55%{transform:translateY(-3px)rotate(8deg)}60%{transform:translate(1px,-1px)rotate(8deg)}65%{transform:translateY(-1px)rotate(-7deg)}70%{transform:translate(-1px,-3px)rotate(6deg)}75%{transform:translateY(-2px)rotate(4deg)}80%{transform:translate(-2px,-1px)rotate(3deg)}85%{transform:translate(1px,-3px)rotate(-10deg)}90%{transform:translate(1px)rotate(3deg)}95%{transform:translate(-2px)rotate(-3deg)}to{transform:translate(2px,1px)rotate(2deg)}}@keyframes mfm-rubberBand{0%{transform:scale(1)}30%{transform:scale(1.25,.75)}40%{transform:scale(.75,1.25)}50%{transform:scale(1.15,.85)}65%{transform:scale(.95,1.05)}75%{transform:scale(1.05,.95)}to{transform:scale(1)}}@keyframes mfm-rainbow{0%{filter:hue-rotate()contrast(150%)saturate(150%)}to{filter:hue-rotate(360deg)contrast(150%)saturate(150%)}}@keyframes cheap-sparkle{0%{filter:hue-rotate()contrast(150%)saturate(150%);transform:translateY(-.5em)}to{filter:hue-rotate(360deg)contrast(150%)saturate(150%);transform:translateY(.5em)}}.avatars{flex-wrap:wrap;height:24px;margin:0;padding:0;display:flex}.avatars .avatars-item{margin:0 0 5px 5px}.avatars .avatars-item:first-child{padding-left:5px}.avatars .avatars-item .avatar-small{border-radius:var(--roundness);width:24px;height:24px}.user-list-popover{--emoji-size:calc(var(--emojiSize,32px) / 2);padding:.5em}.user-list-popover .user-list-row{color:var(--text);flex-direction:row;padding:.25em;display:flex}.user-list-popover .user-list-row .user-list-names{flex-direction:column;min-width:5em;margin-left:.5em;display:flex}.user-list-popover .user-list-row .user-list-screen-name{font-size:.65em}.EmojiReactions{--emoji-size:calc(var(--emojiSize,1.25em) * var(--emojiReactionsScale,1));flex-wrap:wrap;margin-top:.25em;display:flex}.EmojiReactions .emoji-reaction-container{align-items:stretch;margin-top:.5em;margin-right:.5em;display:flex}.EmojiReactions .emoji-reaction-container .emoji-reaction-popover{padding:0}.EmojiReactions .emoji-reaction-container .emoji-reaction-popover .emoji-reaction-count-button{box-sizing:border-box;border-top-left-radius:0;border-bottom-left-radius:0;justify-content:center;align-items:center;min-width:2em;height:100%;margin:0;display:inline-flex}.EmojiReactions .emoji-reaction{box-sizing:border-box;border-top-right-radius:0;border-bottom-right-radius:0;justify-content:center;align-items:center;margin:0;padding-left:.5em;display:flex}.EmojiReactions .emoji-reaction .reaction-emoji{width:var(--emoji-size);height:var(--emoji-size);line-height:var(--emoji-size);justify-content:center;align-items:center;margin-right:.25em;display:flex}.EmojiReactions .emoji-reaction .reaction-emoji.-wide{width:auto;min-width:var(--emoji-size);max-width:calc(var(--emoji-size) * 3)}.EmojiReactions .emoji-reaction .reaction-emoji{--_still_image-label-scale:.3}.EmojiReactions .emoji-reaction .reaction-emoji-content{max-width:100%;max-height:100%;width:var(--emoji-size);height:var(--emoji-size);line-height:inherit;font-size:calc(var(--emoji-size) * .8);margin:0;overflow:hidden}.EmojiReactions .emoji-reaction .reaction-emoji-content.-wide{width:auto;min-width:var(--emoji-size);max-width:calc(var(--emoji-size) * 3)}.EmojiReactions .emoji-reaction .reaction-emoji-content img{object-fit:contain}.EmojiReactions .emoji-reaction:focus{outline:none}.EmojiReactions .emoji-reaction .svg-inline--fa{color:var(--text)}.EmojiReactions .emoji-reaction.-picked-reaction .svg-inline--fa{color:var(--accent)}.EmojiReactions .emoji-reaction .focus-marker{visibility:hidden}.EmojiReactions .emoji-reaction .active-marker{visibility:visible}.EmojiReactions .emoji-reaction:focus:not(:focus-visible,:hover) .focus-marker{visibility:hidden}.EmojiReactions .emoji-reaction:focus:not(:focus-visible,:hover) .active-marker{visibility:visible}.EmojiReactions .emoji-reaction:hover .svg-inline--fa,.EmojiReactions .emoji-reaction:focus .svg-inline--fa{color:var(--accent)}.EmojiReactions .emoji-reaction:hover .focus-marker,.EmojiReactions .emoji-reaction:focus .focus-marker{visibility:visible}.EmojiReactions .emoji-reaction:hover .active-marker,.EmojiReactions .emoji-reaction:focus .active-marker{visibility:hidden}.EmojiReactions .emoji-reaction:focus-visible .svg-inline--fa{color:var(--accent)}.EmojiReactions .emoji-reaction:focus-visible .focus-marker{visibility:visible}.EmojiReactions .emoji-reaction:focus-visible .active-marker{visibility:hidden}.EmojiReactions .emoji-reaction-expand{justify-content:center;align-items:center;margin-top:.5em;margin-right:.5em;padding:0 .5em;display:flex}.EmojiReactions .emoji-reaction-expand:hover{text-decoration:underline}.Attachment{border-radius:var(--roundness);border-style:solid;border-width:1px;border-color:var(--border);flex-direction:column;align-self:flex-start;height:100%;line-height:0;display:inline-flex;position:relative}.Attachment .attachment-wrapper{flex:auto;height:100%;position:relative;overflow:hidden}.Attachment .description-container{z-index:1;flex:0 1 0;padding-top:.5em;display:flex}.Attachment .description-container p{text-align:center;white-space:nowrap;text-overflow:ellipsis;flex:1;margin:0;padding:.5em;line-height:1.5;overflow:hidden}.Attachment .description-container.-static{background:var(--popover);box-shadow:var(--popupShadow);padding-top:0;position:absolute;bottom:0;left:0;right:0}.Attachment .description-field{flex:1;min-width:0}.Attachment .placeholder-container,.Attachment .image-container,.Attachment .audio-container,.Attachment .video-container,.Attachment .flash-container,.Attachment .oembed-container{justify-content:center;width:100%;height:100%;display:flex}.Attachment .image-container .image{width:100%;height:100%}.Attachment .flash-container .flash,.Attachment .flash-container video,.Attachment .video-container .flash,.Attachment .video-container video{object-fit:contain;align-self:center;width:100%;height:100%}.Attachment .video-container{color:inherit;background:0 0;border:none;outline:none}.Attachment .audio-container{align-items:flex-end;display:flex}.Attachment .audio-container audio{width:100%;height:100%}.Attachment .placeholder-container{flex-direction:column;justify-content:center;align-items:center;padding-top:.5em;display:flex}.Attachment .play-icon{color:#ffffffbf;text-shadow:0 0 2px #0006;font-size:4.5em;position:absolute;top:calc(50% - 2.25rem);left:calc(50% - 2.25rem)}.Attachment .play-icon:before{margin:0}.Attachment .attachment-buttons{z-index:1;margin-top:.5em;margin-right:.5em;display:flex;position:absolute;top:0;right:0}.Attachment .attachment-buttons .attachment-button{border-radius:var(--roundness);text-align:center;width:2em;height:2em;margin-left:.5em;padding:0;font-size:1em}.Attachment.-contain-fit img,.Attachment.-contain-fit canvas{object-fit:contain}.Attachment.-cover-fit img,.Attachment.-cover-fit canvas{object-fit:cover}.Attachment .oembed-container{flex:1 0 100%;width:100%;margin-right:15px;line-height:1.2em;display:flex}.Attachment .oembed-container img{width:100%}.Attachment .oembed-container .image{flex:1}.Attachment .oembed-container .image img{object-fit:cover;border:0;border-radius:5px;height:100%}.Attachment .oembed-container .text{overflow-wrap:break-word;text-wrap:pretty;flex:2;margin:8px}.Attachment .oembed-container .text h1{margin:0;font-size:1rem}.Attachment.-size-small .play-icon{zoom:.5;opacity:.7}.Attachment.-size-small .attachment-buttons{zoom:.7;opacity:.5}.Attachment.-editable{padding:.5em}.Attachment.-editable .description-container,.Attachment.-editable .attachment-buttons{margin:0}.Attachment.-placeholder{color:var(--link);white-space:nowrap;height:auto;line-height:1.5;display:inline-block;overflow:hidden}.Attachment.-placeholder:not(.-editable){border:none}.Attachment.-placeholder.-editable{flex-direction:row;align-items:baseline;display:flex}.Attachment.-placeholder.-editable .description-container,.Attachment.-placeholder.-editable .attachment-buttons{margin:0;padding:0;position:relative}.Attachment.-placeholder.-editable .description-container{flex:1;padding-left:.5em}.Attachment.-placeholder.-editable .attachment-buttons{order:99;align-self:center}.Attachment.-placeholder a{text-overflow:ellipsis;max-width:100%;display:inline-block;overflow:hidden}.Attachment.-placeholder svg{color:inherit}.Attachment.-loading{cursor:progress}.Attachment.-compact .placeholder-container{padding-bottom:.5em}.description-popover{box-sizing:border-box;width:50ch;max-width:90vw;padding:1em;overflow:hidden}.description-popover summary{pointer-events:none;margin-bottom:.5em;font-weight:700;display:inline-block}.description-popover span{text-wrap:pretty;white-space:pre-wrap;max-height:10.5em;line-height:1.5;display:block;overflow-y:auto}.Gallery .gallery-rows{flex-direction:column;display:flex}.Gallery .gallery-row{flex-grow:1;width:100%;height:0;position:relative}.Gallery .gallery-row .gallery-row-inner{flex-flow:wrap;align-content:stretch;display:flex;position:absolute;inset:0}.Gallery .gallery-row .gallery-row-inner .gallery-item{box-sizing:border-box;flex-grow:1;min-width:2em;height:100%;margin:0 .5em 0 0}.Gallery .gallery-row .gallery-row-inner .gallery-item:last-child{margin:0}.Gallery .gallery-row .gallery-row-inner.-grid{grid-gap:.5em;grid-template-columns:repeat(auto-fill,minmax(15em,1fr));width:100%;height:auto;display:grid;position:relative}.Gallery .gallery-row .gallery-row-inner.-grid .gallery-item{height:20em;margin:0}.Gallery .gallery-row.-grid,.Gallery .gallery-row.-minimal{height:auto}.Gallery .gallery-row.-grid .gallery-row-inner,.Gallery .gallery-row.-minimal .gallery-row-inner{position:relative}.Gallery .gallery-row:not(:first-child){margin-top:.5em}.Gallery.-long .gallery-rows{-webkit-mask:-webkit-linear-gradient(#fff,#0000) bottom/100% 70px no-repeat,-webkit-linear-gradient(#fff,#fff);-webkit-mask-composite:xor;max-height:25em;-webkit-mask:linear-gradient(#0000,#fff) bottom/100% 70px no-repeat,linear-gradient(#fff,#fff);mask:linear-gradient(#0000,#fff) bottom/100% 70px no-repeat,linear-gradient(#fff,#fff);mask-composite:xor;-webkit-mask-composite:xor;overflow:hidden;-webkit-mask-composite:xor;mask-composite:exclude}.Gallery .many-attachments-text{text-align:center;line-height:2}.Gallery .many-attachments-buttons{display:flex}.Gallery .many-attachments-button{flex:1;justify-content:center;line-height:2;display:flex}.Gallery .many-attachments-button button{padding:0 2em}.media-upload .hidden-input-file{display:none}label.media-upload{cursor:pointer}.ScopeSelector{display:inline-block}.ScopeSelector .scope{text-align:center;min-width:1.3em;min-height:1.3em;padding:.5em .25em;display:inline-block}.link-preview-card{cursor:pointer;flex-direction:row;margin-top:.5em;display:flex;overflow:hidden}.link-preview-card .card-image{flex-shrink:0;width:120px;max-width:25%}.link-preview-card .card-image img{object-fit:cover;border-radius:var(--roundness);width:100%;height:100%;max-height:10em}.link-preview-card .card-content{flex-direction:column;max-height:100%;margin:.5em;display:flex}.link-preview-card .card-host{font-size:.85em}.link-preview-card .card-description{text-overflow:ellipsis;overflow-wrap:break-word;text-wrap:pretty;max-height:calc(3.6em - 1px);margin:.5em 0 0;line-height:1.2em;overflow:hidden}.link-preview-card .nsfw-alert{margin:2em 0}.link-preview-card{color:var(--text);border-radius:var(--roundness);border-style:solid;border-width:1px;border-color:var(--border)}.poll .votes{flex-direction:column;margin:0 0 .5em;display:flex}.poll .poll-option{margin:.75em .5em}.poll .poll-option .input{line-height:inherit}.poll .option-result{height:100%;color:var(--textLight);flex-direction:row;display:flex;position:relative}.poll .option-result-label{z-index:1;overflow-wrap:break-word;text-wrap:pretty;align-items:center;padding:.1em .25em;display:flex}.poll .result-percentage{flex-shrink:0;width:3.5em}.poll .result-fill{border-radius:var(--roundness);height:100%;transition:width .5s;position:absolute;top:0;left:0}.poll input{width:3.5em}.poll.loading *{cursor:progress}.poll .poll-vote-button{margin-right:.5em;padding:0 1em}.poll .poll-checkbox{display:none}.StatusBody{flex-direction:column;display:flex}.StatusBody .emoji{--_still_image-label-scale:.5}.StatusBody .attachments{margin-top:.5em}.StatusBody .text,.StatusBody .summary{white-space:pre-wrap;overflow-wrap:break-word;text-wrap:pretty;line-height:var(--post-line-height)}.StatusBody .summary{padding-bottom:.5em;font-style:italic;display:block}.StatusBody .text.-single-line{white-space:nowrap;text-overflow:ellipsis;height:1.4em;overflow:hidden}.StatusBody .summary-wrapper{border-style:solid;border-width:0 0 1px;border-color:var(--border);flex-grow:0;margin-bottom:.5em}.StatusBody .summary-wrapper.-tall{position:relative}.StatusBody .summary-wrapper.-tall .summary{white-space:nowrap;text-overflow:ellipsis;max-height:2em;overflow:hidden}.StatusBody .text-wrapper{text-overflow:ellipsis;overflow-wrap:break-word;flex-flow:column;display:flex;position:relative;overflow:hidden}.StatusBody .text-wrapper.-tall-status{z-index:1}.StatusBody .text-wrapper.-tall-status:not(.-hidden){height:16em}.StatusBody .text-wrapper.-tall-status .media-body{-webkit-mask:-webkit-linear-gradient(#fff,#0000) bottom/100% 8em no-repeat,-webkit-linear-gradient(#fff,#fff);-webkit-mask-composite:xor;min-height:0;-webkit-mask:linear-gradient(#0000,#fff) bottom/100% 8em no-repeat,linear-gradient(#fff,#fff);mask:linear-gradient(#0000,#fff) bottom/100% 8em no-repeat,linear-gradient(#fff,#fff);mask-composite:xor;-webkit-mask-composite:xor;-webkit-mask-composite:xor;mask-composite:exclude}.StatusBody .text-wrapper.-expanded{overflow:visible}.StatusBody .tall-status-hider,.StatusBody .tall-subject-hider,.StatusBody .status-unhider,.StatusBody .cw-status-hider{overflow-wrap:break-word;text-wrap:pretty;text-align:center;width:100%;margin:.1em 0;display:inline-block}.StatusBody .status-unhider{margin-top:auto;padding-bottom:1em;position:sticky;bottom:0}.StatusBody .tall-subject-hider{padding-bottom:.5em}.StatusBody .tall-subject-hider:not(.cw-status-hider){z-index:2;height:5em;margin-top:10em;line-height:8em;position:absolute}.StatusBody .status-unhider,.StatusBody .cw-status-hider{overflow-wrap:break-word;text-wrap:pretty}.StatusBody .status-unhider svg,.StatusBody .cw-status-hider svg{color:inherit}.StatusBody .toggle-button{padding:.5em}.StatusBody.-compact{flex-direction:row;align-items:start}.StatusBody.-compact .body,.StatusBody.-compact .attachments{max-height:3.25em}.StatusBody.-compact .body{white-space:normal;-webkit-mask-image:-webkit-linear-gradient(0deg,#fff 2em,#0000 3em);-webkit-mask-position:0 0,0 0;mask-position:0 0,0 0;-webkit-mask-size:auto 3.5em,auto;mask-size:auto 3.5em,auto;-webkit-mask-repeat:repeat-x,repeat;mask-repeat:repeat-x,repeat;-webkit-mask-composite:xor;min-width:5em;mask-image:linear-gradient(#fff 2em,#0000 3em);mask-composite:xor;-webkit-mask-composite:xor;flex:5 auto;overflow:hidden;-webkit-mask-composite:xor;mask-composite:exclude}.StatusBody.-compact .attachments{flex:1 1 0;min-width:5em;height:100%;margin-top:0;margin-left:.5em}.StatusBody.-compact .summary-wrapper .summary:after{content:": "}.StatusBody.-compact .summary-wrapper{line-height:inherit;border:none;margin:0}.StatusBody.-compact .text-wrapper{width:100%;display:inline-block}.StatusContent{flex:1;min-width:0}.StatusContent .poll-icon{margin:.5em}.post-status-form{position:relative}.post-status-form .attachments{margin-bottom:.5em}.post-status-form .more-post-actions,.post-status-form .more-post-actions .btn{height:100%}.post-status-form .form-bottom{justify-content:space-between;height:2.5em;padding:.5em;display:flex}.post-status-form .form-bottom .post-button-group{width:10em;display:flex}.post-status-form .form-bottom .post-button-group .post-button{flex:1 0 auto}.post-status-form .form-bottom .post-button-group .more-post-actions{flex:none}.post-status-form .form-bottom p{margin:.35em;padding:.35em;display:flex}.post-status-form .form-bottom-left{gap:1.5em;margin-right:1em;display:flex}.post-status-form .form-bottom-left button{margin:-.5em;padding:.5em}.post-status-form .preview-heading{flex-wrap:wrap;margin:0 .5em;display:flex}.post-status-form .preview-toggle{cursor:pointer;-webkit-user-select:none;user-select:none;flex:10 0 auto}.post-status-form .preview-toggle:hover{text-decoration:underline}.post-status-form .preview-toggle svg,.post-status-form .preview-toggle i{margin-left:.2em;font-size:.8em;transform:rotate(90deg)}.post-status-form .preview-container{margin-bottom:1em}.post-status-form .preview-error{color:var(--textFaint);font-style:italic}.post-status-form .preview-status{border:1px solid var(--border);border-radius:var(--roundness);margin:0;padding:.5em}.post-status-form .reply-or-quote-selector{flex-wrap:wrap-reverse;grid-template-columns:1fr 1fr;gap:0 1em;margin-bottom:.5em;display:flex}.post-status-form .text-format .only-format{color:var(--textFaint)}.post-status-form .visibility-tray{justify-content:space-between;align-items:baseline;display:flex}.post-status-form .visibility-notice{border:1px solid var(--border);border-radius:var(--roundness)}.post-status-form .visibility-notice.edit-warning>:first-child{margin-top:0}.post-status-form .visibility-notice.edit-warning>:last-child{margin-bottom:0}.post-status-form .media-upload-icon{-webkit-box-pack:left;order:1;justify-content:left}.post-status-form .emoji-icon{order:2;justify-content:center}.post-status-form .poll-icon{order:3;justify-content:center}.post-status-form .quote-icon{-webkit-box-pack:right;order:4;justify-content:right}.post-status-form .bottom-left-button{flex:1;align-items:center;padding:0 .1em;font-size:1.85em;line-height:1.1;display:flex}.post-status-form .error{text-align:center}.post-status-form .media-upload-wrapper{width:18em;margin-bottom:.5em;margin-right:.2em}.post-status-form .media-upload-wrapper img,.post-status-form .media-upload-wrapper video{object-fit:contain;max-height:10em}.post-status-form .media-upload-wrapper .video{max-height:10em}.post-status-form .media-upload-wrapper input{flex:1;width:100%}.post-status-form .status-input-wrapper{flex-direction:column;width:100%;display:flex;position:relative}.post-status-form .btn[disabled]{cursor:not-allowed}.post-status-form form{flex-direction:column;margin:.6em;display:flex;position:relative}.post-status-form .form-group{flex-direction:column;padding:.25em .5em .5em;line-height:1.85;display:flex}.post-status-form .inputs-wrapper{padding:0}.post-status-form textarea.input.form-post-body{box-sizing:content-box;padding-bottom:calc(var(--_padding) + var(--post-line-height) * 1em);height:calc(var(--post-line-height) * 1em);min-height:calc(var(--post-line-height) * 1em);resize:none;text-wrap:stable;background:0 0;padding-right:.5em;transition:min-height .2s .1s;overflow:hidden}.post-status-form textarea.input.form-post-body.scrollable-form{overflow-y:auto}.post-status-form .main-input{position:relative}.post-status-form .subject-input{border-bottom:1px solid var(--border)}.post-status-form .character-counter{height:2.2em;margin:0;padding:0;line-height:2.2em;position:absolute;bottom:0;right:2.2em}.post-status-form .character-counter.error{color:var(--cRed)}@keyframes fade-in{0%{opacity:0}to{opacity:.6}}@keyframes fade-out{0%{opacity:.6}to{opacity:0}}.post-status-form .drop-indicator{opacity:.6;width:100%;height:100%;color:var(--text);background-color:var(--bg);border-radius:var(--roundness);border:2px dashed var(--text);justify-content:center;align-items:center;font-size:5em;display:flex;position:absolute}.post-status-form .auto-save-status{align-self:center}.bookmark-folder-menu{--__horizontal-gap:.5em;--_still-image-label-visibility:hidden}.bookmark-folder-menu .emoji{width:var(--__line-height);height:var(--__line-height)}.quick-action{border:2px solid #0000;justify-content:space-between;align-items:center;display:flex}.quick-action .chevron-popover .popover-trigger-button{display:flex}.quick-action .action-counter{text-overflow:ellipsis;white-space:nowrap;overflow-x:hidden}.quick-action .action-button-inner,.quick-action .extra-button{z-index:1;padding:.5em}.quick-action .separator{background-color:var(--icon);opacity:.75;align-self:stretch;width:1px;margin:.5em 0;display:block}.quick-action .action-button-inner{grid-gap:.125em;grid-template-columns:-webkit-max-content;grid-template-columns:max-content;grid-auto-flow:column;grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content;align-items:center;display:grid}.quick-action .action-button-inner .focus-marker{visibility:hidden}.quick-action .action-button-inner .active-marker{visibility:visible}.quick-action .action-button-inner:focus:not(:focus-visible,:hover) .focus-marker{visibility:hidden}.quick-action .action-button-inner:focus:not(:focus-visible,:hover) .active-marker,.quick-action .action-button-inner:hover .focus-marker,.quick-action .action-button-inner:focus .focus-marker{visibility:visible}.quick-action .action-button-inner:hover .active-marker,.quick-action .action-button-inner:focus .active-marker{visibility:hidden}.quick-action .action-button-inner:focus-visible .focus-marker{visibility:visible}.quick-action .action-button-inner:focus-visible .active-marker{visibility:hidden}.quick-action.-pin{border:2px dashed var(--icon);border-radius:var(--roundness);grid-template-columns:minmax(-webkit-max-content, 1fr) auto;grid-template-columns:minmax(max-content,1fr) auto}.quick-action.-pin .action-button-inner{opacity:.8;pointer-events:none;padding-right:0}.quick-action.-pin .chevron-icon,.quick-action.-pin .extra-button,.quick-action.-pin .separator{display:none}.quick-action.-with-extra .action-button-inner,.quick-action.-with-extra .extra-button{padding-left:.25em;padding-right:.25em}.action-button{grid-auto-flow:column;align-items:center;padding:0;display:grid}.action-button .action-button-inner:hover.reply-button:not(.disabled) .svg-inline--fa,.action-button .action-button-inner.-active.reply-button:not(.disabled) .svg-inline--fa{color:var(--cBlue)}.action-button .action-button-inner:hover.retweet-button:not(.disabled) .svg-inline--fa,.action-button .action-button-inner.-active.retweet-button:not(.disabled) .svg-inline--fa{color:var(--cGreen)}.action-button .action-button-inner:hover.favorite-button:not(.disabled) .svg-inline--fa,.action-button .action-button-inner.-active.favorite-button:not(.disabled) .svg-inline--fa{color:var(--cOrange)}.action-button.-extra .action-counter{justify-self:end;margin-left:1em}.action-button.-extra .chevron-icon{justify-self:end}.action-button.-extra .extra-button{justify-content:end;justify-self:end}.StatusActionButtons .quick-action-buttons{grid-gap:.5em .1em;margin-left:-.5em;margin-top:var(--status-margin);grid-template-columns:repeat(auto-fill,minmax(3.75em,10%));grid-auto-rows:1fr;grid-auto-flow:dense;display:grid}.StatusActionButtons .pin-action-button{z-index:1;margin:0;padding:.5em;display:flex}.extra-action-buttons .extra-action{margin:0;padding-top:0;padding-bottom:0;padding-right:0}.status-popover.popover{border-color:var(--border);border-style:solid;border-width:1px;min-width:15em;max-width:95%;font-size:1rem}.status-popover.popover .Status.Status{border:none}.status-popover.popover .status-preview-no-content{text-align:center;padding:1em}.status-popover.popover .status-preview-no-content i{font-size:2em}.Status{white-space:normal;overflow-wrap:break-word;text-wrap:pretty;min-width:0}.Status:hover{--_still-image-img-visibility:visible;--_still-image-canvas-visibility:hidden;--_still-image-label-visibility:hidden}.Status .gravestone{padding:var(--status-margin);display:flex}.Status .gravestone .deleted-text{align-items:center;margin:.5em 0}.Status .status-container{padding:var(--status-margin);gap:var(--status-margin);display:flex}.Status .status-container>*{min-width:0}.Status .pin{justify-content:flex-end;align-items:center;margin-right:.5em;display:flex}._misclick-prevention .Status{pointer-events:none}._misclick-prevention .Status .attachments{pointer-events:initial;cursor:initial}.Status .left-side{flex:none}.Status .right-side{flex:auto}.Status .usercard{margin-bottom:var(--status-margin)}.Status .status-username{white-space:nowrap;text-overflow:ellipsis;--_still_image-label-scale:.25;--emoji-size:1em;flex-shrink:1;max-width:85%;margin-right:.4em;font-weight:700;overflow:hidden}.Status .status-favicon{object-fit:contain;width:1.2em;height:1.2em;margin-right:.4em}.Status .status-heading{margin-bottom:.5em}.Status .heading-name-row{justify-content:space-between;line-height:1.3;display:flex}.Status .heading-name-row a{white-space:nowrap;text-overflow:ellipsis;width:100%;display:inline-block;overflow-x:hidden}.Status .account-name{white-space:nowrap;text-overflow:ellipsis;flex:1 1 0;min-width:1em;margin-right:.4em;display:inline-block;overflow:hidden}.Status .account-name.unknown{min-width:8em}.Status .heading-left{min-width:0;display:flex}.Status .heading-right{word-break:keep-all;flex-shrink:0;align-self:baseline;display:flex}.Status .heading-right .button-unstyled{margin:-.2em;padding:.2em}.Status .heading-right .svg-inline--fa{margin-left:.25em}.Status .glued-label{white-space:nowrap;display:inline-flex}.Status .timeago{margin-right:.2em}.Status .heading-reply-row,.Status .heading-edited-row{align-content:baseline;align-items:stretch;max-width:100%;margin-top:.2em;font-size:.85em;line-height:130%;position:relative}.Status .reply-to-popover,.Status .reply-to-no-popover,.Status .mentions{flex-shrink:0;min-width:0;margin-right:.4em}.Status .reply-glued-label{margin-right:.5em}.Status .reply-to-popover .reply-to:hover:before{content:"";border-bottom:1px solid var(--faint);pointer-events:none;width:100%;display:block;position:absolute;bottom:0}.Status .reply-to-popover .faint-link:hover{text-decoration:none}.Status .reply-to-popover.-strikethrough .reply-to:after{content:"";border-bottom:1px solid var(--faint);pointer-events:none;width:100%;display:block;position:absolute;top:50%}.Status .mentions,.Status .reply-to{white-space:nowrap;position:relative}.Status .mentions-text,.Status .reply-to-text{color:var(--faint);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Status .mentions-line{display:inline}.Status .replies{flex-wrap:wrap;margin-top:.25em;font-size:.85em;line-height:1.3;display:flex}.Status .replies>*{margin-right:.4em}.Status .reply-link{height:17px}.Status .repeat-info{padding:.4em var(--status-margin);align-items:center;display:flex}.Status .repeat-info .repeater-avatar{border-radius:var(--roundness);flex:0 0 1.5em;width:1.5em;height:1.5em;margin-left:2em}.Status .repeat-info .right-side{text-overflow:ellipsis;flex:auto;gap:.5em;margin-right:0;display:flex;overflow-x:hidden}.Status .repeat-info .right-side .repeater-name{flex:0 auto;margin:0}.Status .repeat-info .right-side .repeat-label{white-space:nowrap;flex:none}.Status .repeat-info .right-side .repeat-label .repeat-icon{vertical-align:middle;color:var(--cGreen)}.Status .repeat-info .right-side .emoji{vertical-align:middle;object-fit:contain;width:1em;height:1em}.Status .status-fadein{animation-name:fadein;animation-duration:.4s}@keyframes fadein{0%{opacity:0}to{opacity:1}}.Status .status-actions{width:100%;margin-top:var(--status-margin);grid-template-columns:1fr;grid-auto-columns:1fr;grid-auto-flow:column;display:grid;position:relative}.Status .muted{text-overflow:ellipsis;flex-wrap:nowrap;gap:1ex;height:1.2em;padding:.25em .6em;line-height:1.2em;display:flex;overflow:hidden}.Status .muted .status-username,.Status .muted .mute-reason{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.Status .muted .status-username{flex:0 auto;margin-right:.2em;font-size:smaller;font-weight:400;display:flex}.Status .muted .unmute{flex:none;margin-left:auto;display:block}.Status .reply-form{padding-top:0;padding-bottom:0}.Status .reply-body{flex:1}.Status .favs-repeated-users{margin-top:var(--status-margin)}.Status .stats{width:100%;line-height:1em;display:flex}.Status .avatar-row{flex:1;align-items:center;display:flex;position:relative;overflow:hidden}.Status .avatar-row:before{content:"";background-color:var(--textFaint);width:1px;height:100%;position:absolute;left:0}.Status .stat-count{margin-right:var(--status-margin);-webkit-user-select:none;user-select:none}.Status .stat-count .stat-title{color:var(--textFaint);text-transform:uppercase;font-size:.85em;position:relative}.Status .stat-count .stat-number{color:var(--text);font-size:1.1em;font-weight:bolder;line-height:1em}.Status .stat-count:hover .stat-title{text-decoration:underline}.SearchBar{vertical-align:baseline;justify-content:flex-end;align-items:baseline;display:flex}.SearchBar .search-bar-input,.SearchBar .search-button{height:2em}.SearchBar .search-bar-input{flex:1 0 auto}.SearchBar .cancel-search{height:50px}.SearchBar .cancel-icon{color:var(--text)}.DesktopNav{width:100%;z-index:var(--ZI_navbar)}.DesktopNav input{color:var(--inputTopbarText,var(--inputText))}.DesktopNav .inner-nav{grid-template-rows:var(--navbar-height);box-sizing:border-box;grid-template-columns:minmax(5em,1fr) auto minmax(5em,1fr);grid-template-areas:"sitename logo actions";max-width:980px;margin:auto;padding:0 1.2em;display:grid}.DesktopNav.-column-stretch .inner-nav{--miniColumn:25rem;--maxiColumn:45rem;--columnGap:1em;max-width:calc(var(--sidebarColumnWidth,var(--miniColumn)) + var(--contentColumnWidth,var(--maxiColumn)) + var(--columnGap))}.DesktopNav.-logoLeft .inner-nav{grid-template-columns:auto minmax(5em,1fr) minmax(5em,1fr);grid-template-areas:"logo sitename actions"}.DesktopNav.-column-stretch.-wide .inner-nav{max-width:calc(var(--sidebarColumnWidth,var(--miniColumn)) + var(--contentColumnWidth,var(--maxiColumn)) + var(--notifsColumnWidth,var(--miniColumn)) + var(--columnGap))}.DesktopNav .button-default,.DesktopNav .button-default svg{color:var(--text)}.DesktopNav .logo{transition:opacity;grid-area:logo;transition-duration:.1s;transition-timing-function:ease-out;position:relative}@media (width>=800px){.DesktopNav .logo{opacity:1!important}}.DesktopNav .logo .mask{background-color:var(--text);position:absolute;inset:0;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.DesktopNav .logo img{height:var(--navbar-height);display:inline-block}.DesktopNav .nav-icon{text-align:center;width:2em;height:100%;margin-left:.2em}.DesktopNav .sitename{grid-area:sitename}.DesktopNav .actions{text-align:right;z-index:1;grid-area:actions;justify-content:flex-end}.DesktopNav .item{line-height:var(--navbar-height);height:var(--navbar-height);display:flex}.DesktopNav .spacer{min-width:1em}.features-panel li{line-height:24px}.global-notice-list{top:calc(var(--navbar-height) + .5em);pointer-events:none;width:100%;z-index:var(--ZI_modals_popovers);flex-direction:column;align-items:center;display:flex;position:fixed}.global-notice-list .global-notice{pointer-events:auto;text-align:center;width:40em;max-width:calc(100% - 3em);margin-bottom:.5em;padding-left:1.5em;line-height:2;display:flex}.global-notice-list .global-notice .notice-message{flex:100%}.global-notice-list .close-notice{padding-right:.2em}.instance-specific-panel .panel-body{border-radius:var(--roundness)}.NavigationPins{flex-wrap:wrap;height:100%;display:flex;overflow:hidden}.NavigationPins.alert-dot-notification{background-color:var(--badgeNotification)}.NavigationPins.alert-dot-neutral{background-color:var(--badgeNeutral)}.NavigationPins .pinned-item{text-align:center;box-sizing:border-box;flex:1 0 3em;min-width:2em;height:100%;position:relative;overflow:visible}.NavigationPins .pinned-item .bookmark-emoji{box-sizing:border-box;height:100%;padding:.5em}.NavigationPins .pinned-item .bookmark-emoji,.NavigationPins .pinned-item .svg-inline--fa,.NavigationPins .pinned-item .iconLetter{margin:0}.NavigationPins .pinned-item.toggled{border-bottom:4px solid;margin-bottom:-4px}.MobileNav{z-index:var(--ZI_navbar)}.MobileNav .mobile-nav{line-height:var(--navbar-height);grid-template-rows:var(--navbar-height);box-sizing:border-box;grid-template-columns:2fr auto;width:100%;display:grid}.MobileNav .mobile-nav a{color:var(--link)}.MobileNav .mobile-inner-nav{align-items:center;width:100%;display:flex}.MobileNav .mobile-nav-button{text-align:center;cursor:pointer;padding:0 1em;display:inline-block;position:relative}.MobileNav .site-name{padding:0 .3em;display:inline-block}.MobileNav .item{display:flex}.MobileNav .mobile-notifications-drawer{width:100%;height:100vh;box-shadow:var(--shadow);z-index:var(--ZI_navbar);-webkit-overflow-scrolling:touch;background:var(--background);transition-property:transform;transition-duration:.25s;position:fixed;top:0;left:0;overflow-x:hidden;transform:translate(0)}.MobileNav .mobile-notifications-drawer.-closed{box-shadow:none;transform:translate(100%)}.MobileNav .mobile-notifications-header{z-index:calc(var(--ZI_navbar) + 100);width:100%;height:3.5em;box-shadow:var(--shadow);justify-content:space-between;align-items:center;line-height:3.5em;display:flex;position:absolute}.MobileNav .mobile-notifications-header .spacer{flex:1}.MobileNav .mobile-notifications-header .title{white-space:nowrap;text-overflow:ellipsis;margin-left:.6em;font-size:1.3em;overflow-x:hidden}.MobileNav .pins{flex:1}.MobileNav .pins .pinned-item{flex-grow:1}.MobileNav .mobile-notifications{width:100vw;height:calc(100vh - var(--navbar-height));margin-top:3.5em;overflow:hidden scroll}.MobileNav .mobile-notifications .notifications{box-shadow:none;border-radius:0;padding:0}.MobileNav .mobile-notifications .notifications .panel{box-shadow:none;border-radius:0;margin:0}.MobileNav .mobile-notifications .notifications .panel:after{border-radius:0}.MobileNav .mobile-notifications .notifications .panel .panel-heading{box-shadow:none;border-radius:0}.MobileNav .confirm-modal.dark-overlay:before{z-index:3000}.MobileNav .confirm-modal.dark-overlay .dialog-modal.panel{z-index:3001}.MobilePostButton.button-default{z-index:10;transition:transform .35s;border-radius:100%;justify-content:center;align-items:center;width:5em;height:5em;transition-timing-function:cubic-bezier(0,1,.5,1);display:flex;position:fixed;bottom:1.5em;right:1.5em;box-shadow:0 2px 2px #0000004d,0 4px 6px #0000004d}.MobilePostButton.hidden{transform:translateY(150%)}.MobilePostButton svg{color:var(--text);font-size:1.5em}@media (width>=801px){.new-status-button:not(.always-show){display:none}}.NavigationEntry.menu-item{--__line-height:2.5em;--__horizontal-gap:.5em;--__vertical-gap:.4em;padding:var(--__vertical-gap) var(--__horizontal-gap);grid-template-columns:1fr;grid-auto-columns:var(--__line-height);grid-gap:var(--__horizontal-gap);grid-auto-flow:column;align-items:baseline;display:grid}.NavigationEntry.menu-item[aria-expanded]{padding-right:var(--__horizontal-gap)}.NavigationEntry.menu-item .main-link{line-height:var(--__line-height);box-sizing:border-box}.NavigationEntry.menu-item .menu-icon{line-height:var(--__line-height);width:var(--__line-height);margin-right:var(--__horizontal-gap);padding:0}.NavigationEntry.menu-item .timelines-chevron,.NavigationEntry.menu-item .extra-button{line-height:var(--__line-height);text-align:center;width:100%;padding:0}.NavigationEntry.menu-item .badge{justify-self:center}.NavigationEntry.menu-item .iconEmoji{text-align:center;object-fit:contain;vertical-align:middle;height:var(--__line-height);width:var(--__line-height);display:inline-block}.NavigationEntry.menu-item .iconEmoji>span{font-size:1.5rem}.NavigationEntry.menu-item img.iconEmoji{box-sizing:border-box;padding:.25rem}.NavPanel .panel{box-shadow:var(--shadow);overflow:hidden}.NavPanel ul{margin:0;padding:0;list-style:none}.NavPanel .navigation-chevron{margin-left:.8em;margin-right:.8em;font-size:1.1em}.NavPanel .timelines-background{padding:0 0 0 .6em}.NavPanel .nav-panel-heading{--panel-heading-height-padding:0px}.login-panel .login-form{flex-direction:column;padding:.6em;display:flex}.login-panel .btn{width:10em;min-height:2em}.login-panel .register{flex:1}.login-panel .login-bottom{flex-direction:row;justify-content:space-between;align-items:center;margin-top:1em;display:flex}.login-panel .form-group{flex-direction:column;padding:.3em .5em .6em;line-height:24px;display:flex}.login-panel .login-error{margin:.5em;line-height:2;animation-name:shakeError;animation-duration:.4s;animation-timing-function:ease-in-out;display:flex}.login-panel .error-message{flex:1}.user-panel .panel{background:var(--background);-webkit-backdrop-filter:var(--backdrop-filter);backdrop-filter:var(--backdrop-filter)}.user-panel .user-info{margin:.6em .6em 0}.user-panel .user-info .Avatar{width:min(5em,20cqw);height:min(5em,20cqw)}.user-panel .post-status-form form{margin-top:0}.user-panel .signed-in{z-index:10}:root,:host{--fa-font-solid:normal 900 1em/1 "Font Awesome 7 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 7 Free";--fa-font-light:normal 300 1em/1 "Font Awesome 7 Pro";--fa-font-thin:normal 100 1em/1 "Font Awesome 7 Pro";--fa-font-duotone:normal 900 1em/1 "Font Awesome 7 Duotone";--fa-font-duotone-regular:normal 400 1em/1 "Font Awesome 7 Duotone";--fa-font-duotone-light:normal 300 1em/1 "Font Awesome 7 Duotone";--fa-font-duotone-thin:normal 100 1em/1 "Font Awesome 7 Duotone";--fa-font-brands:normal 400 1em/1 "Font Awesome 7 Brands";--fa-font-sharp-solid:normal 900 1em/1 "Font Awesome 7 Sharp";--fa-font-sharp-regular:normal 400 1em/1 "Font Awesome 7 Sharp";--fa-font-sharp-light:normal 300 1em/1 "Font Awesome 7 Sharp";--fa-font-sharp-thin:normal 100 1em/1 "Font Awesome 7 Sharp";--fa-font-sharp-duotone-solid:normal 900 1em/1 "Font Awesome 7 Sharp Duotone";--fa-font-sharp-duotone-regular:normal 400 1em/1 "Font Awesome 7 Sharp Duotone";--fa-font-sharp-duotone-light:normal 300 1em/1 "Font Awesome 7 Sharp Duotone";--fa-font-sharp-duotone-thin:normal 100 1em/1 "Font Awesome 7 Sharp Duotone";--fa-font-slab-regular:normal 400 1em/1 "Font Awesome 7 Slab";--fa-font-slab-press-regular:normal 400 1em/1 "Font Awesome 7 Slab Press";--fa-font-whiteboard-semibold:normal 600 1em/1 "Font Awesome 7 Whiteboard";--fa-font-thumbprint-light:normal 300 1em/1 "Font Awesome 7 Thumbprint";--fa-font-notdog-solid:normal 900 1em/1 "Font Awesome 7 Notdog";--fa-font-notdog-duo-solid:normal 900 1em/1 "Font Awesome 7 Notdog Duo";--fa-font-etch-solid:normal 900 1em/1 "Font Awesome 7 Etch";--fa-font-jelly-regular:normal 400 1em/1 "Font Awesome 7 Jelly";--fa-font-jelly-fill-regular:normal 400 1em/1 "Font Awesome 7 Jelly Fill";--fa-font-jelly-duo-regular:normal 400 1em/1 "Font Awesome 7 Jelly Duo";--fa-font-chisel-regular:normal 400 1em/1 "Font Awesome 7 Chisel";--fa-font-utility-semibold:normal 600 1em/1 "Font Awesome 7 Utility";--fa-font-utility-duo-semibold:normal 600 1em/1 "Font Awesome 7 Utility Duo";--fa-font-utility-fill-semibold:normal 600 1em/1 "Font Awesome 7 Utility Fill"}.svg-inline--fa{box-sizing:content-box;display:var(--fa-display,inline-block);vertical-align:-.125em;height:1em;width:var(--fa-width,1.25em);overflow:visible}.svg-inline--fa.fa-2xs{vertical-align:.1em}.svg-inline--fa.fa-xs{vertical-align:0}.svg-inline--fa.fa-sm{vertical-align:-.0714286em}.svg-inline--fa.fa-lg{vertical-align:-.2em}.svg-inline--fa.fa-xl{vertical-align:-.25em}.svg-inline--fa.fa-2xl{vertical-align:-.3125em}.svg-inline--fa.fa-pull-left,.svg-inline--fa .fa-pull-start{float:inline-start;-webkit-margin-end:var(--fa-pull-margin,.3em);margin-inline-end:var(--fa-pull-margin,.3em)}.svg-inline--fa.fa-pull-right,.svg-inline--fa .fa-pull-end{float:inline-end;-webkit-margin-start:var(--fa-pull-margin,.3em);margin-inline-start:var(--fa-pull-margin,.3em)}.svg-inline--fa.fa-li{width:var(--fa-li-width,2em);inset-block-start:.25em;inset-inline-start:calc(-1 * var(--fa-li-width,2em))}.fa-layers-counter,.fa-layers-text{text-align:center;display:inline-block;position:absolute}.fa-layers{text-align:center;vertical-align:-.125em;height:1em;width:var(--fa-width,1.25em);display:inline-block;position:relative}.fa-layers .svg-inline--fa{transform-origin:50%;margin:auto;position:absolute;inset:0}.fa-layers-text{transform-origin:50%;top:50%;left:50%;transform:translate(-50%,-50%)}.fa-layers-counter{background-color:var(--fa-counter-background-color,#ff253a);border-radius:var(--fa-counter-border-radius,1em);box-sizing:border-box;color:var(--fa-inverse,#fff);line-height:var(--fa-counter-line-height,1);max-width:var(--fa-counter-max-width,5em);min-width:var(--fa-counter-min-width,1.5em);padding:var(--fa-counter-padding,.25em .5em);right:var(--fa-right,0);text-overflow:ellipsis;top:var(--fa-top,0);-webkit-transform:scale(var(--fa-counter-scale,.25));transform:scale(var(--fa-counter-scale,.25));transform-origin:100% 0;overflow:hidden}.fa-layers-bottom-right{bottom:var(--fa-bottom,0);right:var(--fa-right,0);-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));transform-origin:100% 100%;top:auto}.fa-layers-bottom-left{bottom:var(--fa-bottom,0);left:var(--fa-left,0);-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));transform-origin:0 100%;top:auto;right:auto}.fa-layers-top-right{top:var(--fa-top,0);right:var(--fa-right,0);-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));transform-origin:100% 0}.fa-layers-top-left{left:var(--fa-left,0);right:auto;top:var(--fa-top,0);-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));transform-origin:0 0}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{vertical-align:.225em;font-size:.625em;line-height:.1em}.fa-xs{vertical-align:.125em;font-size:.75em;line-height:.0833333em}.fa-sm{vertical-align:.0535715em;font-size:.875em;line-height:.0714286em}.fa-lg{vertical-align:-.075em;font-size:1.25em;line-height:.05em}.fa-xl{vertical-align:-.125em;font-size:1.5em;line-height:.0416667em}.fa-2xl{vertical-align:-.1875em;font-size:2em;line-height:.03125em}.fa-width-auto{--fa-width:auto}.fa-fw,.fa-width-fixed{--fa-width:1.25em}.fa-ul{-webkit-margin-start:var(--fa-li-margin,2.5em);-webkit-padding-start:0;margin-inline-start:var(--fa-li-margin,2.5em);padding-inline-start:0;list-style-type:none}.fa-ul>li{position:relative}.fa-li{text-align:center;width:var(--fa-li-width,2em);line-height:inherit;position:absolute;inset-inline-start:calc(-1 * var(--fa-li-width,2em))}.fa-border{border-color:var(--fa-border-color,#eee);border-radius:var(--fa-border-radius,.1em);border-style:var(--fa-border-style,solid);border-width:var(--fa-border-width,.0625em);box-sizing:var(--fa-border-box-sizing,content-box);padding:var(--fa-border-padding,.1875em .25em)}.fa-pull-left,.fa-pull-start{float:inline-start;-webkit-margin-end:var(--fa-pull-margin,.3em);margin-inline-end:var(--fa-pull-margin,.3em)}.fa-pull-right,.fa-pull-end{float:inline-end;-webkit-margin-start:var(--fa-pull-margin,.3em);margin-inline-start:var(--fa-pull-margin,.3em)}.fa-beat{animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28, .84, .42, 1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28, .84, .42, 1))}.fa-fade{animation-name:fa-fade;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4, 0, .6, 1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4, 0, .6, 1))}.fa-beat-fade{animation-name:fa-beat-fade;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4, 0, .6, 1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4, 0, .6, 1))}.fa-flip{animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{animation-name:fa-shake;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin{animation-name:fa-spin;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-bounce,.fa-fade,.fa-beat-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{transition:none!important;animation:none!important}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-bounce{0%{transform:scale(1)translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1), var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1), var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9), var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9), var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05), var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05), var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1, 1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1, 1) translateY(var(--fa-bounce-rebound,-.125em))}64%{transform:scale(1)translateY(0)}to{transform:scale(1)translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0), var(--fa-flip-y,1), var(--fa-flip-z,0), var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0), var(--fa-flip-y,1), var(--fa-flip-z,0), var(--fa-flip-angle,-180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,to{transform:rotate(0)}}@keyframes fa-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,0));transform:rotate(var(--fa-rotate-angle,0))}.svg-inline--fa .fa-primary{fill:var(--fa-primary-color,currentColor);opacity:var(--fa-primary-opacity,1)}.svg-inline--fa .fa-secondary{fill:var(--fa-secondary-color,currentColor);opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-primary{opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-secondary{opacity:var(--fa-primary-opacity,1)}.svg-inline--fa mask .fa-primary,.svg-inline--fa mask .fa-secondary{fill:#000}.svg-inline--fa.fa-inverse{fill:var(--fa-inverse,#fff)}.fa-stack{vertical-align:middle;width:2.5em;height:2em;line-height:2em;display:inline-block;position:relative}.fa-inverse{color:var(--fa-inverse,#fff)}.svg-inline--fa.fa-stack-1x{--fa-width:1.25em;height:1em;width:var(--fa-width)}.svg-inline--fa.fa-stack-2x{--fa-width:2.5em;height:2em;width:var(--fa-width)}.fa-stack-1x,.fa-stack-2x{z-index:var(--fa-stack-z-index,auto);margin:auto;position:absolute;inset:0}pinch-zoom{touch-action:none;--scale:1;--x:0;--y:0;display:block;overflow:hidden}pinch-zoom>*{-webkit-transform:translate(var(--x), var(--y)) scale(var(--scale));transform:translate(var(--x), var(--y)) scale(var(--scale));transform-origin:0 0;will-change:transform}.panel{--__panel-background:var(--background);--__panel-backdrop-filter:var(--backdrop-filter);--_shadow:var(--shadow)}.panel .tab-switcher .tabs{background:var(--__panel-background);-webkit-backdrop-filter:var(--__panel-backdrop-filter);backdrop-filter:var(--__panel-backdrop-filter)}.panel{flex-direction:column;display:flex;position:relative}.panel .panel-heading{background-color:inherit}.panel:after,.panel{border-radius:var(--roundness)}.panel:after{content:"";z-index:5;box-shadow:var(--_shadow);pointer-events:none;position:absolute;inset:0}.panel-body{padding:var(--panel-body-padding,0);background:var(--background);-webkit-backdrop-filter:var(--__panel-backdrop-filter);backdrop-filter:var(--__panel-backdrop-filter)}.panel-body .tab-switcher .tabs{-webkit-backdrop-filter:none;backdrop-filter:none;background:0 0}.panel-body:empty:before{content:"¯\\_(ツ)_/¯";text-align:center;padding:1em;display:block}.panel-body>p{margin:0;padding:1em;line-height:1.3}.panel-heading,.panel-footer{--panel-heading-height-padding:calc(var(--panel-header-height) * .2);--__panel-heading-gap:calc(var(--panel-header-height) * .1565);--__panel-heading-height:var(--panel-header-height);--__panel-heading-height-inner:calc(var(--__panel-heading-height) - 2 * var(--panel-heading-height-padding,0));font-size:calc(var(--panelHeaderSize) / 3.2);-webkit-backdrop-filter:var(--__panel-backdrop-filter);backdrop-filter:var(--__panel-backdrop-filter);box-sizing:border-box;grid-column-gap:var(--__panel-heading-gap);padding:var(--panel-heading-height-padding);height:var(--__panel-heading-height);line-height:var(--__panel-heading-height-inner);z-index:4;background-size:cover;flex:none;grid-template-columns:minmax(50%,1fr);grid-auto-columns:auto;grid-auto-flow:column;display:grid;position:relative}.panel-heading.-flexible-height,.panel-footer.-flexible-height{--__panel-heading-height:auto}.panel-heading.-flexible-height:after,.panel-heading.-flexible-height:before,.panel-footer.-flexible-height:after,.panel-footer.-flexible-height:before{display:none}.panel-heading.-stub,.panel-heading.-stub:after,.panel-footer.-stub,.panel-footer.-stub:after{border-radius:var(--roundness)}.panel-heading.-sticky,.panel-footer.-sticky{top:var(--navbar-height);position:sticky}.panel-heading:after,.panel-heading:before,.panel-footer:after,.panel-footer:before{content:"";pointer-events:none;position:absolute;inset:0}.panel-heading .title,.panel-footer .title{margin:0;font-size:1.3em;font-weight:400}.panel-heading .alert,.panel-footer .alert{white-space:nowrap;text-overflow:ellipsis;overflow-x:hidden}.panel-heading:not(.-flexible-height)>.button-default,.panel-heading:not(.-flexible-height)>.alert,.panel-footer:not(.-flexible-height)>.button-default,.panel-footer:not(.-flexible-height)>.alert{height:var(--__panel-heading-height-inner);box-sizing:border-box;align-self:stretch;min-width:1px;min-height:0;margin:0;padding-top:0;padding-bottom:0}.panel-heading:not(.-flexible-height)>.alert,.panel-footer:not(.-flexible-height)>.alert{line-height:calc(var(--__panel-heading-height-inner) - 2px)}.panel-heading{border-radius:var(--roundness) var(--roundness) 0 0;background-image:-webkit-linear-gradient(top, var(--background), var(--background)), -webkit-linear-gradient(top, var(--__panel-background), var(--__panel-background));background-image:linear-gradient(to bottom, var(--background), var(--background)), linear-gradient(to bottom, var(--__panel-background), var(--__panel-background));text-overflow:ellipsis;border-width:0 0 1px;align-items:start;overflow:hidden}.panel-heading .title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.panel-heading{--_shadow:var(--shadow)}.panel-heading:after{background-color:var(--background);z-index:-2;border-radius:var(--roundness) var(--roundness) 0 0;box-shadow:var(--_shadow)}.panel-heading:not(.-flexible-height)>.button-default{flex-shrink:0}.panel-heading .rightside-button{text-align:center;width:var(--__panel-heading-height);height:var(--__panel-heading-height);margin:calc(-1 * var(--panel-heading-height-padding)) 0;margin-right:calc(-1 * var(--__panel-heading-gap));align-self:stretch}.panel-heading .rightside-button>button{box-sizing:border-box;padding:calc(1 * var(--panel-heading-height-padding)) 0;text-align:center;width:100%;height:100%}.panel-heading .rightside-button>button svg{font-size:1.2em}.panel-heading .rightside-icon{text-align:center;width:var(--__panel-heading-height);margin-right:calc(-1 * var(--__panel-heading-gap));align-self:stretch}.panel-heading .rightside-icon svg{font-size:1.2em}.panel-footer{border-style:solid;border-width:1px 0 0;border-color:var(--border);background-color:var(--__panel-background);border-top-left-radius:0;border-top-right-radius:0;align-items:center}:root{--status-margin:.75em;--post-line-height:1.4;--ZI_media_modal:9000;--ZI_modals_popovers:8500;--ZI_modals:8000;--ZI_navbar_popovers:7500;--ZI_navbar:7000;--ZI_popovers:6000;--background:var(--bg)}html{font-size:var(--textSize,1rem);--navbar-height:var(--navbarSize,3.5rem);--emoji-size:var(--emojiSize,32px);--panel-header-height:var(--panelHeaderSize,3.2rem)}body{font-family:sans-serif;font-family:var(--font);color:var(--text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overscroll-behavior-y:none;margin:0;padding:0;overflow:clip scroll}body.hidden{display:none}@media (any-pointer:fine){*{scrollbar-color:var(--icon) transparent}::-webkit-scrollbar{background:0 0}::-webkit-scrollbar-corner{background:0 0}::-webkit-resizer{background-image:-webkit-linear-gradient(315deg, transparent calc(50% - 1px), var(--textFaint) 50%, transparent calc(50% + 1px), transparent calc(75% - 1px), var(--textFaint) 75%, transparent calc(75% + 1px));background-image:linear-gradient(135deg, transparent calc(50% - 1px), var(--textFaint) 50%, transparent calc(50% + 1px), transparent calc(75% - 1px), var(--textFaint) 75%, transparent calc(75% + 1px));background-color:#0000!important}::-webkit-scrollbar-button{box-shadow:var(--shadow);border-radius:var(--roundness)}::-webkit-scrollbar-thumb{box-shadow:var(--shadow);border-radius:var(--roundness)}::-webkit-scrollbar-button{--___bgPadding:2px;color:var(--text);background-repeat:no-repeat,no-repeat}::-webkit-scrollbar-button:horizontal{background-size:50% calc(50% - var(--___bgPadding)), 50% calc(50% - var(--___bgPadding))}::-webkit-scrollbar-button:horizontal:increment{background-image:-webkit-linear-gradient(45deg, var(--text) 50%, transparent 51%), -webkit-linear-gradient(135deg, transparent 50%, var(--text) 51%);background-image:linear-gradient(45deg, var(--text) 50%, transparent 51%), linear-gradient(-45deg, transparent 50%, var(--text) 51%);background-position:top var(--___bgPadding) left 50%, right 50% bottom var(--___bgPadding)}::-webkit-scrollbar-button:horizontal:decrement{background-image:-webkit-linear-gradient(45deg, transparent 50%, var(--text) calc(50% + 1px)), -webkit-linear-gradient(135deg, var(--text) 50%, transparent 51%);background-image:linear-gradient(45deg, transparent 50%, var(--text) calc(50% + 1px)), linear-gradient(-45deg, var(--text) 50%, transparent 51%);background-position:bottom var(--___bgPadding) right 50%, left 50% top var(--___bgPadding)}::-webkit-scrollbar-button:vertical{background-size:calc(50% - var(--___bgPadding)) 50%, calc(50% - var(--___bgPadding)) 50%}::-webkit-scrollbar-button:vertical:increment{background-image:-webkit-linear-gradient(135deg, transparent 50%, var(--text) 51%), -webkit-linear-gradient(45deg, transparent 50%, var(--text) 51%);background-image:linear-gradient(-45deg, transparent 50%, var(--text) 51%), linear-gradient(45deg, transparent 50%, var(--text) 51%);background-position:right var(--___bgPadding) top 50%, left var(--___bgPadding) top 50%}::-webkit-scrollbar-button:vertical:decrement{background-image:-webkit-linear-gradient(135deg, var(--text) 50%, transparent 51%), -webkit-linear-gradient(45deg, var(--text) 50%, transparent 51%);background-image:linear-gradient(-45deg, var(--text) 50%, transparent 51%), linear-gradient(45deg, var(--text) 50%, transparent 51%);background-position:left var(--___bgPadding) top 50%, right var(--___bgPadding) top 50%}html{scrollbar-color:var(--icon) var(--wallpaper);background:var(--wallpaper)}}a{color:var(--link);text-decoration:none}h4{margin:0}code{background:var(--background);border:1px solid var(--border);border-radius:var(--roundness);padding:0 .2em}code pre,pre code{padding:.2em;display:block;overflow-x:auto}code.pre{white-space:pre;display:block}.iconLetter{text-align:center;font-weight:1000;display:inline-block}i[class*=icon-],.svg-inline--fa,.iconLetter{color:var(--icon)}nav{z-index:var(--ZI_navbar);box-shadow:var(--shadow);box-sizing:border-box;height:var(--navbar-height);font-size:calc(var(--navbar-height) / 3.5);position:fixed}#sidebar{grid-area:sidebar}#modal{z-index:var(--ZI_modals);position:absolute}.column.-scrollable{top:var(--navbar-height);position:sticky}#main-scroller{grid-area:content;position:relative}#notifs-column{grid-area:notifs}.app-bg-wrapper{height:100%;top:var(--navbar-height);z-index:-1000;background-repeat:no-repeat;background-size:cover;background-color:var(--wallpaper);background-image:var(--body-background-image);background-position:50%;transition:background-image 1s;position:fixed;left:0;right:-20px}.underlay{pointer-events:none;background-color:var(--underlay);z-index:-1000;grid-area:1/1/1/span 3}.app-layout{--miniColumn:25rem;--maxiColumn:45rem;--columnGap:1rem;--effectiveSidebarColumnWidth:minmax(var(--miniColumn), var(--sidebarColumnWidth,var(--miniColumn)));--effectiveNotifsColumnWidth:minmax(var(--miniColumn), var(--notifsColumnWidth,var(--miniColumn)));--effectiveContentColumnWidth:minmax(var(--miniColumn), var(--contentColumnWidth,var(--maxiColumn)));grid-template-columns:var(--effectiveSidebarColumnWidth) var(--effectiveContentColumnWidth);box-sizing:border-box;flex-wrap:wrap;grid-template-rows:1fr;grid-template-areas:"sidebar content";place-content:flex-start center;min-height:100vh;margin:0 auto;display:grid;position:relative;overflow-x:clip}.app-layout .column{--___columnMargin:var(--columnGap);box-sizing:border-box;margin:0 calc(var(--___columnMargin) / 2);padding:calc(var(--___columnMargin)) 0;row-gap:var(--___columnMargin);grid-row:1/1;grid-template-columns:100%;align-content:start;display:grid}.app-layout .column:not(.-scrollable){margin-top:var(--navbar-height)}.app-layout .column:hover{z-index:2}.app-layout .column.-full-height{margin-bottom:0;padding-top:0;padding-bottom:0}.app-layout .column.-scrollable{--___paddingIncrease:calc(var(--columnGap) / 2);top:var(--navbar-height);max-height:calc(100vh - var(--navbar-height));margin-left:calc(var(--___paddingIncrease) * -1);padding-left:calc(var(--___paddingIncrease) + var(--___columnMargin) / 2);position:sticky;overflow:hidden auto}@supports (scrollbar-width:none) or (-webkit-text-fill-color:initial){.app-layout .column.-scrollable:not(.-show-scrollbar){scrollbar-width:none;margin-right:calc(var(--___paddingIncrease) * -1);padding-right:calc(var(--___paddingIncrease) + var(--___columnMargin) / 2)}.app-layout .column.-scrollable:not(.-show-scrollbar)::-webkit-scrollbar{width:0;display:block}}.app-layout .column.-scrollable .panel-heading.-sticky{top:calc(var(--columnGap) / -1)}.app-layout.-has-new-post-button .column{padding-bottom:10rem}.app-layout.-no-sticky-headers .column .panel-heading.-sticky{position:relative;top:0}.app-layout .column-inner{box-sizing:border-box;grid-template-columns:100%;align-content:start;row-gap:1em;display:grid}.app-layout.-reverse:not(.-wide,.-mobile){grid-template-columns:var(--effectiveContentColumnWidth) var(--effectiveSidebarColumnWidth);grid-template-areas:"content sidebar"}.app-layout.-wide{grid-template-columns:var(--effectiveSidebarColumnWidth) var(--effectiveContentColumnWidth) var(--effectiveNotifsColumnWidth);grid-template-areas:"sidebar content notifs"}.app-layout.-wide.-reverse{grid-template-columns:var(--effectiveNotifsColumnWidth) var(--effectiveContentColumnWidth) var(--effectiveSidebarColumnWidth);grid-template-areas:"notifs content sidebar"}.app-layout.-mobile{grid-template-columns:100vw;grid-template-areas:"content";padding:0}.app-layout.-mobile .column{margin:var(--navbar-height) 0 0 0;padding-top:0}.app-layout.-mobile .panel-heading,.app-layout.-mobile .panel-heading:after,.app-layout.-mobile .panel-heading:before,.app-layout.-mobile .panel,.app-layout.-mobile .panel:after{border-top-left-radius:0;border-top-right-radius:0}.app-layout.-mobile #sidebar,.app-layout.-mobile #notifs-column,.app-layout.-normal #notifs-column{display:none}.text-center{text-align:center}.button-default{-webkit-user-select:none;user-select:none;color:var(--text);cursor:pointer;background-color:var(--background);box-shadow:var(--shadow);font-family:sans-serif;font-size:1em;font-family:var(--font);border:none}.button-default.-transparent{-webkit-backdrop-filter:blur(.125em)contrast(60%);backdrop-filter:blur(.125em)contrast(60%)}.button-default::-moz-focus-inner{border:none}.button-default:disabled{cursor:not-allowed}.button-default:active{transform:translate(1px,1px)}.menu-item{line-height:var(--__line-height);cursor:pointer;font-family:inherit;font-size:100%;font-weight:400}.menu-item a,.menu-item button:not(.button-default){color:var(--text);text-align:initial;font-family:inherit;font-size:100%;line-height:unset;background:0 0;border:none;outline:none;padding:0;display:inline}.menu-item.disabled{cursor:not-allowed}.menu-item,.list-item{box-sizing:border-box;text-align:initial;color:inherit;clear:both;white-space:nowrap;width:100%;padding:var(--__vertical-gap) var(--__horizontal-gap);--__line-height:1.5em;--__horizontal-gap:.75em;--__vertical-gap:.5em;background:0 0;border:none;outline:none;display:block;position:relative}.button-unstyled{text-align:initial;box-shadow:var(--shadow);font-family:inherit;font-size:100%;line-height:unset;cursor:pointer;box-sizing:content-box;color:inherit;background-color:#0000;border:none;outline:none;padding:0;display:inline}.button-unstyled.-link{color:var(--link)!important}label.-disabled{color:var(--textFaint)}input,textarea{border:none;outline:none;display:inline-block}.input.unstyled{box-shadow:none;height:unset;border-radius:0;background:0 0!important}.input::placeholder{color:var(--textFaint)}.input{--_padding:.5em;background-color:var(--background);color:var(--text);box-shadow:var(--shadow);font-family:var(--font);box-sizing:border-box;-webkit-hyphens:none;hyphens:none;padding:0 var(--_padding);border:none;margin:0;font-size:1em;line-height:2;display:inline-block;position:relative}.input:disabled,.input[disabled=disabled],.input.disabled{cursor:not-allowed;color:var(--textFaint);background-color:#0000!important}.input[type=range]{box-shadow:none;background:0 0;border:none;flex:1;margin:0}.input[type=radio]{display:none}.input[type=radio]:checked+label:before{box-shadow:var(--shadow);background-color:var(--background);color:var(--text)}.input[type=radio]:disabled,.input[type=radio]:disabled+label,.input[type=radio]:disabled+label:before{opacity:.5}.input[type=radio]:disabled{background-color:var(--background)}.input[type=radio]+label:before{content:"•";background-color:var(--background);width:1.1em;height:1.1em;box-shadow:var(--shadow);vertical-align:top;text-align:center;box-sizing:border-box;color:#0000;border-radius:100%;flex-shrink:0;margin-right:.5em;font-size:1.1em;line-height:1.1;transition:box-shadow .2s;display:inline-block;overflow:hidden}.input[type=checkbox]:checked+label:before{color:var(--text);background-color:var(--background);box-shadow:var(--shadow)}.input[type=checkbox]:disabled,.input[type=checkbox]:disabled+label,.input[type=checkbox]:disabled+label:before{opacity:.5}.input[type=checkbox]+label:before{content:"✓";border-radius:var(--roundness);width:1.1em;height:1.1em;box-shadow:var(--shadow);vertical-align:top;text-align:center;box-sizing:border-box;color:#0000;flex-shrink:0;margin-right:.5em;font-size:1.1em;line-height:1.1;transition:color .2s;display:inline-block;overflow:hidden}.input.resize-height{resize:vertical}.input,.button-default{--_roundness-left:var(--roundness);--_roundness-right:var(--roundness);border-top-left-radius:var(--_roundness-left);border-bottom-left-radius:var(--_roundness-left);border-top-right-radius:var(--_roundness-right);border-bottom-right-radius:var(--_roundness-right)}textarea.input{padding:var(--_padding);line-height:var(--post-line-height)}option{color:var(--text);background-color:var(--background)}.hide-number-spinner{appearance:textfield}.hide-number-spinner[type=number]::-webkit-inner-spin-button{opacity:0;display:none}.hide-number-spinner[type=number]::-webkit-outer-spin-button{opacity:0;display:none}.cards-list{grid-gap:.5em;grid-template-columns:repeat(auto-fit,minmax(20em,1fr));grid-auto-flow:dense;list-style:none;display:grid}.cards-list li{border:1px solid var(--border);border-radius:var(--roundness);margin:.25em;padding:.5em}.btn-group{vertical-align:middle;display:inline-flex;position:relative}.btn-group>*,.btn-group>* .button-default{--_roundness-left:0;--_roundness-right:0;position:relative}.btn-group>:first-child,.btn-group>:first-child .button-default{--_roundness-left:var(--roundness)}.btn-group>:last-child,.btn-group>:last-child .button-default{--_roundness-right:var(--roundness)}.fa{color:gray}.mobile-shown{display:none}.badge{box-sizing:border-box;vertical-align:middle;text-align:center;white-space:nowrap;text-overflow:ellipsis;border-radius:99px;min-width:1.7em;max-width:10em;height:1.3em;padding:.15em;font-size:.9em;font-style:normal;font-weight:400;line-height:1;display:inline-block;overflow:hidden}.badge.-dot,.badge.-counter{margin:0;position:absolute}.badge.-dot{min-width:.6em;max-width:.6em;min-height:.6em;max-height:.6em;margin:0;padding:0;line-height:0;top:calc(50% - 1em);left:calc(50% + .5em)}.badge.-counter{border-radius:var(--roundness);text-align:right;min-width:0;margin-top:-1em;margin-left:.7em;padding:.2em;font-size:.75em;line-height:1;top:calc(50% - .4em);left:calc(50% - .5em)}.alert{border-radius:var(--roundness);border:1px solid var(--border);margin:0 .35em;padding:0 .25em}.alert.-dismissible{align-items:baseline;margin:0;padding-left:.5em;line-height:2;display:flex}.alert.-dismissible span{flex:1 0 auto;display:block}.faint{--text:var(--textFaint);--link:var(--linkFaint);color:var(--text)}.notice-dismissible{align-items:baseline;padding:.75em 1em;line-height:1.5;display:flex}.notice-dismissible p,.notice-dismissible span{flex:auto;margin:0;display:block}.notice-dismissible .dismiss{color:inherit}.fa-scale-110.svg-inline--fa,.fa-scale-110.iconLetter{font-size:1.1em}.fa-scale-110.svg-inline--fa{vertical-align:-.15em}.fa-old-padding.iconLetter,.fa-old-padding.svg-inline--fa,.fa-old-padding-layer{padding:0 .3em}.veryfaint{opacity:.25}.timeago{--link:var(--text);--linkFaint:var(--textFaint)}.login-hint{text-align:center}@media (width>=801px){.login-hint{display:none}}.login-hint a{width:100%;padding:1em 0;display:inline-block}.btn.button-default{min-height:2em}.new-status-notification{z-index:1;flex:1;font-size:1.1em;position:relative}@media (width<=800px){.mobile-hidden{display:none}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(359deg)}}@keyframes shakeError{0%{transform:translate(0)}15%{transform:translate(.375rem)}30%{transform:translate(-.375rem)}45%{transform:translate(.375rem)}60%{transform:translate(-.375rem)}75%{transform:translate(.375rem)}90%{transform:translate(-.375rem)}to{transform:translate(0)}}.fade-enter-active,.fade-leave-active{transition:opacity .3s}.fade-enter-from,.fade-leave-active{opacity:0}.visible-for-screenreader-only{visibility:visible;clip:rect(0 0 0 0);width:1px;height:1px;margin:-1px;padding:0;display:block;position:absolute;overflow:hidden}::selection{color:var(--selectionText);background-color:var(--selectionBackground)}#splash{pointer-events:none}#splash #status.css-ok:before{content:"CSS OK";display:inline-block}#splash #status .initial-text{display:none}#splash #throbber{transform-origin:bottom;animation-name:bounce;animation-duration:3s;animation-iteration-count:infinite;animation-direction:normal}#splash #throbber.dead{animation-name:dead;animation-duration:.5s;animation-iteration-count:1;transform:rotateX(90deg)rotateY(0)rotate(-45deg)}@keyframes dead{0%{transform:rotateX(0)rotateY(0)rotate(0)}5%{transform:rotateX(0)rotateY(0)rotate(1deg)}10%{transform:rotateX(0)rotateY(0)rotate(-2deg)}15%{transform:rotateX(0)rotateY(0)rotate(3deg)}20%{transform:rotateX(0)rotateY(0)rotate(0)}25%{transform:rotateX(0)rotateY(0)rotate(0)}30%{transform:rotateX(10deg)rotateY(0)rotate(0)}35%{transform:rotateX(-10deg)rotateY(0)rotate(0)}40%{transform:rotateX(10deg)rotateY(0)rotate(0)}45%{transform:rotateX(-10deg)rotateY(0)rotate(0)}50%{transform:rotateX(10deg)rotateY(0)rotate(0)}to{transition-timing-function:cubic-bezier(.755,.05,.855,.06);transform:rotateX(90deg)rotateY(0)rotate(-45deg)}}@keyframes bounce{0%{animation-timing-function:ease-out;translate:0;scale:1}10%{translate:0;scale:1.2 .8;-webkit-transform:rotateZ(var(--defaultZ));transform:rotateZ(var(--defaultZ));animation-timing-function:ease-out}30%{translate:0 -40%;scale:.9 1.1;-webkit-transform:rotateZ(var(--defaultZ));transform:rotateZ(var(--defaultZ));animation-timing-function:ease-in}40%{translate:0 -50%;scale:1.1 .9;-webkit-transform:rotateZ(var(--defaultZ));transform:rotateZ(var(--defaultZ));animation-timing-function:ease-in}45%{translate:0 -45%;scale:.9 1.1;-webkit-transform:rotateZ(var(--defaultZ));transform:rotateZ(var(--defaultZ));animation-timing-function:ease-in}50%{animation-timing-function:ease-in;translate:0 -40%;scale:1.05 .95}55%{translate:0 -35%;scale:.985 1.025;-webkit-transform:rotateZ(var(--defaultZ));transform:rotateZ(var(--defaultZ));animation-timing-function:ease-in}60%{translate:0 -30%;scale:1.0125 .9985;-webkit-transform:rotateZ(var(--defaultZ));transform:rotateZ(var(--defaultZ));animation-timing-function:ease-in}80%{translate:0 -10%;scale:1.0063 .9938;-webkit-transform:rotateZ(var(--defaultZ));transform:rotateZ(var(--defaultZ));animation-timing-function:ease-in-out}90%{translate:0;scale:1.2 .8;-webkit-transform:rotateZ(var(--defaultZ));transform:rotateZ(var(--defaultZ));animation-timing-function:ease-out}to{translate:0;scale:1;-webkit-transform:rotateZ(var(--defaultZ));transform:rotateZ(var(--defaultZ));animation-timing-function:ease-out}}@property --shadow{syntax:"*";inherits:false}.thread-tree-replies{margin-left:var(--status-margin);border-left:2px solid var(--border)}.thread-tree-replies-hidden{padding:var(--status-margin);flex-direction:column;align-items:stretch;display:flex}.Conversation{z-index:1}.Conversation.-hidden{background:var(--__panel-background);-webkit-backdrop-filter:var(--__panel-backdrop-filter);backdrop-filter:var(--__panel-backdrop-filter)}.Conversation .conversation-dive-to-top-level-box{padding:var(--status-margin);border-bottom:1px solid var(--border);border-radius:0;flex-direction:column;align-items:stretch;display:flex}.Conversation .thread-ancestors{margin-left:var(--status-margin);border-left:2px solid var(--border)}.Conversation .thread-ancestor.-faded .RichContent{--text:var(--textFaint)!important;--link:var(--linkFaint)!important;--funtextGreentext:var(--funtextGreentextFaint)!important;--funtextCyantext:var(--funtextCyantextFaint)!important}.Conversation .thread-ancestor-dive-box{padding-left:var(--status-margin);border-bottom:1px solid var(--border);border-radius:0}.Conversation .thread-ancestor-dive-box,.Conversation .thread-ancestor-dive-box-inner{flex-direction:column;align-items:stretch;display:flex}.Conversation .thread-ancestor-dive-box-inner{padding:var(--status-margin)}.Conversation .conversation-status{border-bottom:1px solid var(--border);border-radius:0}.Conversation .thread-ancestor-has-other-replies .conversation-status,.Conversation:last-child:not(.-expanded) .conversation-status,.Conversation.-expanded .conversation-status:last-child,.Conversation .thread-ancestor:last-child .conversation-status,.Conversation .thread-ancestor:last-child .thread-ancestor-dive-box,.Conversation.-expanded .thread-tree .conversation-status{border-bottom:none}.Conversation .thread-ancestors+.thread-tree>.conversation-status{border-top:1px solid var(--border)}.Conversation.status-fadein.-expanded .thread-body{border-left:4px solid var(--cRed);border-radius:var(--roundness);border-bottom:1px solid var(--border);border-top-left-radius:0;border-top-right-radius:0}.Conversation.-expanded.status-fadein{--___margin:calc(var(--status-margin) / 2);background:var(--background);margin:var(--___margin)}.Conversation.-expanded.status-fadein:before{z-index:-1;content:"";inset:calc(var(--___margin) * -1);background:var(--background);-webkit-backdrop-filter:var(--__panel-backdrop-filter);backdrop-filter:var(--__panel-backdrop-filter);display:block;position:absolute}.scroll-to-top{display:none}.-scrolled .scroll-to-top{display:inline-block}.timeline-menu-popover{border-top-left-radius:0;border-top-right-radius:0;min-width:24rem;max-width:100vw;margin-top:.6rem;font-size:1rem}.timeline-menu-popover ul{margin:0;padding:0;list-style:none}.TimelineMenu{min-width:0;margin-right:auto}.TimelineMenu .popover-trigger-button{vertical-align:bottom}.TimelineMenu .panel:after{border-top-left-radius:0;border-top-right-radius:0}.TimelineMenu .timeline-menu-title{cursor:pointer;-webkit-user-select:none;user-select:none;width:100%;margin:0;display:flex}.TimelineMenu .timeline-menu-title .timeline-menu-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.TimelineMenu .timeline-menu-title svg{margin-left:.6em;transition:transform .1s}.TimelineMenu .timeline-menu-title .click-blocker{cursor:default;flex-grow:1}.TimelineMenu.open .timeline-menu-title svg{transform:rotate(180deg)}.TimelineMenu .panel{box-shadow:var(--popoverShadow)}.Timeline .timeline-body{-webkit-backdrop-filter:none;backdrop-filter:none;background:0 0}.Timeline .alert-badge{text-align:right;border-radius:var(--roundness);margin-top:-1em;margin-left:.7em;padding:.2em;font-size:.75em;line-height:1;position:absolute;top:calc(50% - .4em);left:calc(50% - .5em)}.Timeline .loadmore-button{position:relative}.Timeline.-blocked{cursor:progress}.Timeline .conversation-heading{top:calc(var(--__panel-heading-height) * var(--currentPanelStack,1) + var(--navbar-height));z-index:2}.Timeline.-embedded .timeline-heading{text-align:center;padding:0 .5em;line-height:2.75em}.Timeline.-embedded .timeline-heading:empty:before{content:initial}.Timeline.-embedded .timeline-heading .button-default,.Timeline.-embedded .timeline-heading .alert{width:100%;line-height:2em} diff --git a/priv/static/static/css/main.CF7uYwoC.css b/priv/static/static/css/main.CF7uYwoC.css deleted file mode 100644 index 092237dd7..000000000 --- a/priv/static/static/css/main.CF7uYwoC.css +++ /dev/null @@ -1 +0,0 @@ -@charset "UTF-8";.modal-view{z-index:var(--ZI_modals);position:fixed;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;overflow:auto;pointer-events:none;-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-name:modal-background-fadein;animation-name:modal-background-fadein;opacity:0}.modal-view>*{pointer-events:initial}.modal-view.modal-background{pointer-events:initial;background-color:#00000080}.modal-view.open{opacity:1}@-webkit-keyframes modal-background-fadein{0%{background-color:#0000}to{background-color:#00000080}}@keyframes modal-background-fadein{0%{background-color:#0000}to{background-color:#00000080}}.vue-recycle-scroller{position:relative}.vue-recycle-scroller.direction-vertical:not(.page-mode){overflow-y:auto}.vue-recycle-scroller.direction-horizontal:not(.page-mode){overflow-x:auto}.vue-recycle-scroller.direction-horizontal{display:-webkit-box;display:-ms-flexbox;display:flex}.vue-recycle-scroller__slot{-webkit-box-flex:1;-ms-flex:auto 0 0px;flex:auto 0 0}.vue-recycle-scroller__item-wrapper{-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;position:relative}.vue-recycle-scroller.ready .vue-recycle-scroller__item-view{position:absolute;top:0;left:0;will-change:transform}.vue-recycle-scroller.direction-vertical .vue-recycle-scroller__item-wrapper{width:100%}.vue-recycle-scroller.direction-horizontal .vue-recycle-scroller__item-wrapper{height:100%}.vue-recycle-scroller.ready.direction-vertical .vue-recycle-scroller__item-view{width:100%}.vue-recycle-scroller.ready.direction-horizontal .vue-recycle-scroller__item-view{height:100%}.resize-observer[data-v-b329ee4c]{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;border:none;background-color:transparent;pointer-events:none;display:block;overflow:hidden;opacity:0}.resize-observer[data-v-b329ee4c] object{display:block;position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1}.login-panel .login-form{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;padding:.6em}.login-panel .btn{min-height:2em;width:10em}.login-panel .register{-webkit-box-flex:1;flex:1 1}.login-panel .login-bottom{margin-top:1em;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-align:center;align-items:center;-webkit-box-pack:justify;justify-content:space-between}.login-panel .form-group{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;padding:.3em .5em .6em;line-height:24px}.login-panel .login-error{display:-webkit-box;display:flex;line-height:2;margin:.5em;-webkit-animation-name:shakeError;animation-name:shakeError;-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.login-panel .error-message{-webkit-box-flex:1;flex:1}.media-upload .hidden-input-file{display:none}label.media-upload{cursor:pointer}.ScopeSelector{display:inline-block}.ScopeSelector .scope{display:inline-block;min-width:1.3em;min-height:1.3em;text-align:center;padding:.5em .25em}.checkbox{position:relative;display:inline-block;min-height:1.2em}.checkbox-indicator,.checkbox .label{vertical-align:middle}.checkbox>.checkbox-indicator{padding:0;margin:0;position:relative;line-height:inherit;display:inline-block;width:1.2em;height:1.2em;box-shadow:none;--_shadow: var(--shadow)}.checkbox-indicator:before{position:absolute;top:0;right:0;bottom:0;left:0;display:block;content:"✓";-webkit-transition:color .2s;transition:color .2s;width:1.1em;height:1.1em;border-radius:var(--roundness);box-shadow:var(--_shadow);background-color:var(--background);vertical-align:top;text-align:center;line-height:1.1em;font-size:1.1em;color:transparent;overflow:hidden;box-sizing:border-box}.checkbox.-radio .checkbox-indicator,.checkbox.-radio .checkbox-indicator:before{border-radius:9999px}.checkbox.-radio .checkbox-indicator:before{content:"•"}.checkbox .disabled .checkbox-indicator:before{background-color:transparent}.checkbox input[type=checkbox]:checked+.checkbox-indicator:before{color:var(--text)}.checkbox input[type=checkbox]:indeterminate+.checkbox-indicator:before{content:"–";color:var(--text)}.checkbox.indeterminate-fix input[type=checkbox]+.checkbox-indicator:before{content:"–"}.checkbox>.label.-after{margin-left:.5em}.checkbox>.label.-before{margin-right:.5em}.popover-trigger-button{display:inline-block}.popover{z-index:var(--ZI_popover_override, var(--ZI_popovers));position:fixed;min-width:0;max-width:calc(100vw - 20px);--_shadow: var(--shadow)}.popover-default{border-radius:var(--roundness);border-color:var(--border);border-style:solid;border-width:1px;background-color:var(--background)}.popover-default:after{content:"";position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;box-shadow:var(--_shadow);pointer-events:none}.dropdown-menu{display:block;padding:0;font-size:1em;text-align:left;list-style:none;max-width:100vw;z-index:var(--ZI_popover_override, var(--ZI_popovers));white-space:nowrap;background-color:var(--background)}.dropdown-menu .dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid var(--border)}.dropdown-menu .dropdown-item{padding:0;display:grid;grid-template-columns:1fr;grid-auto-flow:column;grid-auto-columns:auto;grid-gap:.5em}.dropdown-menu .dropdown-item .popover-wrapper{box-sizing:border-box;display:grid;grid-template-columns:1fr}.dropdown-menu .dropdown-item .extra-button{border-left:1px solid;border-image-source:linear-gradient(to bottom,transparent 0%,var(--icon) var(--__horizontal-gap) calc(100% - var(--__horizontal-gap)),transparent 100%);border-image-slice:1;padding-left:calc(var(--__horizontal-gap) - 1px);padding-right:var(--__horizontal-gap);padding-top:var(--__horizontal-gap);padding-bottom:var(--__horizontal-gap);max-width:-webkit-fit-content;max-width:fit-content}.dropdown-menu .dropdown-item .main-button{width:100%;padding:var(--__horizontal-gap) var(--__horizontal-gap);grid-gap:var(--__horizontal-gap);grid-template-columns:1fr var(--__line-height);grid-auto-flow:column;grid-auto-columns:auto}.dropdown-menu .dropdown-item .main-button .menu-checkbox{display:inline-block;vertical-align:middle;min-width:calc(var(--__line-height) + 1px);max-width:calc(var(--__line-height) + 1px);min-height:calc(var(--__line-height) + 1px);max-height:calc(var(--__line-height) + 1px);line-height:var(--__line-height);text-align:center;border-radius:0;box-shadow:var(--shadow);margin-right:var(--__horizontal-gap)}.dropdown-menu .dropdown-item .main-button .menu-checkbox.menu-checkbox-checked:after{font-size:1.25em;content:"✓"}.dropdown-menu .dropdown-item .main-button .menu-checkbox.-radio{border-radius:9999px}.dropdown-menu .dropdown-item .main-button .menu-checkbox.-radio.menu-checkbox-checked:after{font-size:2em;content:"•"}.dropdown-menu .dropdown-item .main-button,.dropdown-menu .dropdown-item .extra-button{display:grid;box-sizing:border-box;-webkit-box-align:center;align-items:center}.dropdown-menu .dropdown-item .main-button.disabled,.dropdown-menu .dropdown-item .extra-button.disabled{cursor:not-allowed}.dropdown-menu .dropdown-item .main-button:not(.disabled),.dropdown-menu .dropdown-item .extra-button:not(.disabled){cursor:pointer}.dropdown-menu .dropdown-item.-icon .main-button{grid-template-columns:var(--__line-height) 1fr}.dropdown-menu .dropdown-item.-icon-space .main-button{padding-left:calc(var(--__line-height) + var(--__horizontal-gap) * 2)}.dropdown-menu .dropdown-item.-icon-double .main-button{grid-template-columns:var(--__line-height) var(--__line-height) 1fr}.still-image{position:relative;line-height:0;overflow:hidden;display:-webkit-inline-box;display:inline-flex;-webkit-box-align:center;align-items:center}.still-image canvas{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:contain;visibility:var(--_still-image-canvas-visibility, visible)}.still-image img{width:100%;height:100%;object-fit:contain}.still-image.animated:before{zoom:var(--_still_image-label-scale, 1);content:"gif";position:absolute;line-height:1;font-size:.7em;top:.5em;left:.5em;background:#7f7f7f80;color:#fff;display:block;padding:2px 4px;border-radius:var(--roundness);z-index:2;visibility:var(--_still-image-label-visibility, visible)}.still-image.animated:hover canvas{display:none}.still-image.animated:hover:before{visibility:var(--_still-image-label-visibility, hidden)}.still-image.animated img{visibility:var(--_still-image-img-visibility, hidden)}.still-image.animated:hover img{visibility:visible}.emoji-picker{--__emoji-picker-header: 2.2em;width:25em;max-width:calc(100vw - 20px);display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.emoji-picker-header-image{display:-webkit-inline-box;display:inline-flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;width:var(--__emoji-picker-header);max-width:var(--__emoji-picker-header);height:var(--__emoji-picker-header);max-height:var(--__emoji-picker-header)}.emoji-picker-header-image .still-image{width:var(--__emoji-picker-header);max-width:var(--__emoji-picker-header);height:var(--__emoji-picker-header);max-height:var(--__emoji-picker-header);object-fit:contain;--_still_image-label-scale: .5}.emoji-picker .keep-open,.emoji-picker .too-many-emoji,.emoji-picker .hide-custom-emoji{padding:.5em;line-height:normal}.emoji-picker .hide-custom-emoji{padding-top:0}.emoji-picker .too-many-emoji{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.emoji-picker .keep-open-label{padding:0 .5em;display:-webkit-box;display:flex}.emoji-picker .heading{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;padding:.7em .5em 0}.emoji-picker .content{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-flex:1;flex:1 1 auto;min-height:0}.emoji-picker .emoji-tabs{-webkit-box-flex:1;flex-grow:1;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row nowrap;overflow:auto hidden}.emoji-picker .additional-tabs{display:-webkit-box;display:flex;border-left:1px solid;border-left-color:var(--border);padding-left:.5em;-webkit-box-flex:0;flex:0 0 auto}.emoji-picker .additional-tabs,.emoji-picker .emoji-tabs{flex-basis:auto;display:-webkit-box;display:flex;align-content:center;scrollbar-width:thin}.emoji-picker .additional-tabs-item,.emoji-picker .emoji-tabs-item{padding:0 .5em;cursor:pointer;width:var(--__emoji-picker-header);max-width:var(--__emoji-picker-header);height:var(--__emoji-picker-header);max-height:var(--__emoji-picker-header);display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center}.emoji-picker .additional-tabs-item .svg-inline--fa,.emoji-picker .emoji-tabs-item .svg-inline--fa{font-size:1.85em}.emoji-picker .additional-tabs-item.disabled,.emoji-picker .emoji-tabs-item.disabled{opacity:.5;pointer-events:none}.emoji-picker .additional-tabs-item.toggled,.emoji-picker .emoji-tabs-item.toggled{border-bottom:.2em solid}.emoji-picker .sticker-picker{-webkit-box-flex:1;flex:1 1 auto}.emoji-picker .stickers-content,.emoji-picker .emoji-content{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-flex:1;flex:1 1 auto;min-height:0}.emoji-picker .stickers-content.hidden,.emoji-picker .emoji-content.hidden{opacity:0;pointer-events:none;position:absolute}.emoji-picker .emoji-search{padding-bottom:.5em;-webkit-box-flex:0;flex:0 0 auto}.emoji-picker .emoji-search input{width:100%}.emoji-picker .emoji-groups{height:100%;min-height:200px;-webkit-box-flex:1;flex:1 1 1px;position:relative;overflow:auto;scrollbar-gutter:stable both-edges;-webkit-user-select:none;user-select:none;-webkit-mask:-webkit-linear-gradient(bottom,white 0,transparent 100%) bottom no-repeat,-webkit-linear-gradient(top,white 0,transparent 100%) top no-repeat,-webkit-linear-gradient(bottom,white,white);mask:linear-gradient(to top,white 0,transparent 100%) bottom no-repeat,linear-gradient(to bottom,white 0,transparent 100%) top no-repeat,linear-gradient(to top,white,white);-webkit-transition:-webkit-mask-size .15s;transition:-webkit-mask-size .15s;transition:mask-size .15s;transition:mask-size .15s,-webkit-mask-size .15s;-webkit-mask-size:100% 20px,100% 20px,auto;mask-size:100% 20px,100% 20px,auto;mask-composite:xor;-webkit-mask-composite:xor;mask-composite:exclude}.emoji-picker .emoji-groups.scrolled-top{-webkit-mask-size:100% 20px,100% 0,auto;mask-size:100% 20px,100% 0,auto}.emoji-picker .emoji-groups.scrolled-bottom{-webkit-mask-size:100% 0,100% 20px,auto;mask-size:100% 0,100% 20px,auto}.emoji-picker .emoji-item{width:var(--emoji-size);height:var(--emoji-size);box-sizing:border-box;display:-webkit-box;display:flex;line-height:var(--emoji-size);-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;margin:.2em;cursor:pointer}.emoji-picker .emoji-item .emoji-picker-emoji.-custom{object-fit:contain;width:var(--emoji-size);max-width:var(--emoji-size);height:var(--emoji-size);max-height:var(--emoji-size);--_still_image-label-scale: .5}.emoji-picker .emoji-item .emoji-picker-emoji.-unicode{font-size:calc(var(--emoji-size) * .8);overflow:hidden}.emoji-picker .emoji-group{display:grid;grid-template-columns:repeat(var(--__amount),1fr);place-items:center center;-webkit-box-pack:center;justify-content:center;grid-template-rows:repeat(1,auto)}.emoji-picker .emoji-group.first-row{grid-template-rows:repeat(2,auto)}.emoji-picker .emoji-group.first-row .emoji-item{grid-row:2}.emoji-picker .emoji-group-title{font-size:.85em;grid-column:span var(--__amount);width:100%;margin:0;padding-left:.3em}.emoji-picker .emoji-group-title.disabled{display:none}.input.emoji-input{padding:0;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;position:relative}.input.emoji-input .emoji-picker-icon{position:absolute;top:0;right:0;margin:.2em .25em;font-size:1.3em;cursor:pointer;line-height:1.2em}.input.emoji-input .emoji-picker-icon:hover i{color:var(--text)}.input.emoji-input .emoji-picker-panel{position:absolute;z-index:20;margin-top:.2em}.input.emoji-input .emoji-picker-panel.hide{display:none}.input.emoji-input input,.input.emoji-input textarea{-webkit-box-flex:1;flex:1 0 auto;color:inherit;background:none!important;box-shadow:none;border:none;outline:none}.input.emoji-input.with-picker input{padding-right:2em}.input.emoji-input .hidden-overlay{opacity:0;pointer-events:none;position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;color:red}.input.emoji-input .hidden-overlay .caret{width:0;margin-right:calc(-1ch - 1px);border:1px solid red}.autocomplete-panel{position:absolute}.autocomplete-item.menu-item{display:-webkit-box;display:flex;padding-top:0;padding-bottom:0}.autocomplete-item.menu-item .image{width:calc(var(--__line-height) + var(--__vertical-gap) * 2);height:calc(var(--__line-height) + var(--__vertical-gap) * 2);line-height:var(--__line-height);text-align:center;margin-right:var(--__horizontal-gap)}.autocomplete-item.menu-item .image img{width:calc(var(--__line-height) + var(--__vertical-gap) * 2);height:calc(var(--__line-height) + var(--__vertical-gap) * 2);object-fit:contain}.autocomplete-item.menu-item .image span{font-size:var(--__line-height);line-height:var(--__line-height)}.autocomplete-item.menu-item .label{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-pack:center;justify-content:center;margin:0 .1em 0 .2em}.autocomplete-item.menu-item .label .displayText{line-height:1.5}.autocomplete-item.menu-item .label .detailText{font-size:.6em;line-height:.6em}label.Select{padding:0;display:-webkit-box;display:flex}label.Select select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:none;color:var(--text);margin:0;padding:0 2em 0 .5em;font-family:var(--font);font-size:1em;width:100%;z-index:1;line-height:2}label.Select select[multiple],label.Select select[size]{height:100%;padding:.2em}label.Select select[multiple] option,label.Select select[size] option{background-color:transparent}label.Select select[multiple] option:checked,label.Select select[multiple] option.-active,label.Select select[size] option:checked,label.Select select[size] option.-active{color:var(--selectionText);background-color:var(--selectionBackground)}label.Select.disabled,label.Select:disabled{background-color:var(--background);opacity:1;color:var(--faint)}label.Select.disabled select[multiple] option.-active,label.Select.disabled select[size] option.-active,label.Select:disabled select[multiple] option.-active,label.Select:disabled select[size] option.-active{color:var(--faint);background:transparent}label.Select .select-down-icon{position:absolute;top:0;bottom:0;right:.5em;height:100%;width:.875em;font-family:var(--font);line-height:2;z-index:1;pointer-events:none}.poll-form{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;padding:0 .5em .5em}.poll-form .add-option{align-self:flex-start;padding-top:.25em;padding-left:.1em}.poll-form .poll-option{display:-webkit-box;display:flex;-webkit-box-align:baseline;align-items:baseline;-webkit-box-pack:justify;justify-content:space-between;margin-bottom:.25em}.poll-form .input-container{width:100%}.poll-form .input-container input{padding-right:2.5em;width:100%}.poll-form .delete-option{width:1.5em;margin-left:-1.5em;z-index:1}.poll-form .poll-type-expiry{margin-top:.5em;display:-webkit-box;display:flex;width:100%}.poll-form .poll-type{margin-right:.75em;-webkit-box-flex:1;flex:1 1 60%}.poll-form .poll-type .poll-type-select{padding-right:.75em}.poll-form .poll-expiry{display:-webkit-box;display:flex}.poll-form .poll-expiry .expiry-amount{width:3em;text-align:right}.Flash{display:inline-block;width:100%;height:100%;position:relative}.Flash .player{height:100%;width:100%}.Flash .placeholder{height:100%;width:100%;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;background:var(--bg);color:var(--link)}.Flash .hider{top:0}.Flash .label{text-align:center;-webkit-box-flex:1;flex:1 1 0;line-height:1.2;white-space:normal}.Flash .hidden{display:none;visibility:hidden}.Attachment{display:-webkit-inline-box;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;position:relative;align-self:flex-start;line-height:0;height:100%;border-style:solid;border-width:1px;border-radius:var(--roundness);border-color:var(--border)}.Attachment .attachment-wrapper{-webkit-box-flex:1;flex:1 1 auto;height:100%;position:relative;overflow:hidden}.Attachment .description-container{-webkit-box-flex:0;flex:0 1 0;display:-webkit-box;display:flex;padding-top:.5em;z-index:1}.Attachment .description-container p{-webkit-box-flex:1;flex:1;text-align:center;line-height:1.5;padding:.5em;margin:0;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.Attachment .description-container.-static{position:absolute;left:0;right:0;bottom:0;padding-top:0;background:var(--popover);box-shadow:var(--popupShadow)}.Attachment .description-field{-webkit-box-flex:1;flex:1;min-width:0}.Attachment .placeholder-container,.Attachment .image-container,.Attachment .audio-container,.Attachment .video-container,.Attachment .flash-container,.Attachment .oembed-container{display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;width:100%;height:100%}.Attachment .image-container .image{width:100%;height:100%}.Attachment .flash-container .flash,.Attachment .flash-container video,.Attachment .video-container .flash,.Attachment .video-container video{width:100%;height:100%;object-fit:contain;align-self:center}.Attachment .video-container{border:none;outline:none;color:inherit;background:transparent}.Attachment .audio-container{display:-webkit-box;display:flex;-webkit-box-align:end;align-items:flex-end}.Attachment .audio-container audio{width:100%;height:100%}.Attachment .placeholder-container{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;padding-top:.5em}.Attachment .play-icon{position:absolute;font-size:4.5em;top:calc(50% - 2.25rem);left:calc(50% - 2.25rem);color:#ffffffbf;text-shadow:0 0 2px rgba(0,0,0,.4)}.Attachment .play-icon:before{margin:0}.Attachment .attachment-buttons{display:-webkit-box;display:flex;position:absolute;right:0;top:0;margin-top:.5em;margin-right:.5em;z-index:1}.Attachment .attachment-buttons .attachment-button{padding:0;border-radius:var(--roundness);text-align:center;width:2em;height:2em;margin-left:.5em;font-size:1.25em}.Attachment.-contain-fit img,.Attachment.-contain-fit canvas{object-fit:contain}.Attachment.-cover-fit img,.Attachment.-cover-fit canvas{object-fit:cover}.Attachment .oembed-container{line-height:1.2em;-webkit-box-flex:1;flex:1 0 100%;width:100%;margin-right:15px;display:-webkit-box;display:flex}.Attachment .oembed-container img{width:100%}.Attachment .oembed-container .image{-webkit-box-flex:1;flex:1}.Attachment .oembed-container .image img{border:0;border-radius:5px;height:100%;object-fit:cover}.Attachment .oembed-container .text{-webkit-box-flex:2;flex:2;margin:8px;overflow-wrap:break-word;text-wrap:pretty}.Attachment .oembed-container .text h1{font-size:1rem;margin:0}.Attachment.-size-small .play-icon{zoom:.5;opacity:.7}.Attachment.-size-small .attachment-buttons{zoom:.7;opacity:.5}.Attachment.-editable{padding:.5em}.Attachment.-editable .description-container,.Attachment.-editable .attachment-buttons{margin:0}.Attachment.-placeholder{display:inline-block;color:var(--link);overflow:hidden;white-space:nowrap;height:auto;line-height:1.5}.Attachment.-placeholder:not(.-editable){border:none}.Attachment.-placeholder.-editable{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-align:baseline;align-items:baseline}.Attachment.-placeholder.-editable .description-container,.Attachment.-placeholder.-editable .attachment-buttons{margin:0;padding:0;position:relative}.Attachment.-placeholder.-editable .description-container{-webkit-box-flex:1;flex:1;padding-left:.5em}.Attachment.-placeholder.-editable .attachment-buttons{-webkit-box-ordinal-group:100;order:99;align-self:center}.Attachment.-placeholder a{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis}.Attachment.-placeholder svg{color:inherit}.Attachment.-loading{cursor:progress}.Attachment.-compact .placeholder-container{padding-bottom:.5em}.Gallery .gallery-rows{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.Gallery .gallery-row{position:relative;height:0;width:100%;-webkit-box-flex:1;flex-grow:1}.Gallery .gallery-row .gallery-row-inner{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;align-content:stretch}.Gallery .gallery-row .gallery-row-inner .gallery-item{margin:0 .5em 0 0;-webkit-box-flex:1;flex-grow:1;height:100%;box-sizing:border-box;min-width:2em}.Gallery .gallery-row .gallery-row-inner .gallery-item:last-child{margin:0}.Gallery .gallery-row .gallery-row-inner.-grid{width:100%;height:auto;position:relative;display:grid;grid-gap:.5em;grid-template-columns:repeat(auto-fill,minmax(15em,1fr))}.Gallery .gallery-row .gallery-row-inner.-grid .gallery-item{margin:0;height:15em}.Gallery .gallery-row.-grid,.Gallery .gallery-row.-minimal{height:auto}.Gallery .gallery-row.-grid .gallery-row-inner,.Gallery .gallery-row.-minimal .gallery-row-inner{position:relative}.Gallery .gallery-row:not(:first-child){margin-top:.5em}.Gallery.-long .gallery-rows{max-height:25em;overflow:hidden;-webkit-mask:-webkit-linear-gradient(bottom,white,transparent) bottom/100% 70px no-repeat,-webkit-linear-gradient(bottom,white,white);mask:linear-gradient(to top,white,transparent) bottom/100% 70px no-repeat,linear-gradient(to top,white,white);mask-composite:xor;-webkit-mask-composite:xor;mask-composite:exclude}.Gallery .many-attachments-text{text-align:center;line-height:2}.Gallery .many-attachments-buttons{display:-webkit-box;display:flex}.Gallery .many-attachments-button{display:-webkit-box;display:flex;-webkit-box-flex:1;flex:1;-webkit-box-pack:center;justify-content:center;line-height:2}.Gallery .many-attachments-button button{padding:0 2em}.emoji-popover{margin:0 .5em .5em;text-align:center}.emoji-popover .emoji{width:4.6em;height:4.6em}.emoji-popover .emoji-popover-centered{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center}.emoji-popover .emoji-popover-button{width:100%;margin-top:.5em}.emoji-popover .Select{width:100%}.Avatar{--_avatarShadowBox: var(--shadow);--_avatarShadowFilter: var(--shadowFilter);--_avatarShadowInset: var(--shadowInset);--_still-image-label-visibility: hidden;display:inline-block;position:relative;width:3.5em;height:3.5em}.Avatar.-compact{width:2.2em;height:2.2em;border-radius:var(--roundness)}.Avatar .avatar{width:100%;height:100%;box-shadow:var(--_avatarShadowBox);border-radius:var(--roundness)}.Avatar .avatar.-better-shadow{box-shadow:var(--_avatarShadowInset);-webkit-filter:var(--_avatarShadowFilter);filter:var(--_avatarShadowFilter)}.Avatar .avatar.-animated:before{display:none}.Avatar .avatar.-compact{border-radius:var(--roundness)}.Avatar .avatar.-placeholder{background-color:var(--background)}.Avatar img{width:100%;height:100%}.Avatar .actor-type-indicator{position:absolute;bottom:0;right:0;margin:-.2em;padding:.2em;background:#7f7f7f80;color:#fff;border-radius:var(--roundness)}.MentionLink{position:relative;white-space:normal;display:inline;word-break:normal}.MentionLink .new,.MentionLink .original{display:inline}.MentionLink .mention-avatar{border-radius:var(--roundness);width:1.5em;height:1.5em;vertical-align:middle;-webkit-user-select:none;user-select:none;margin-right:.2em}.MentionLink .full{position:absolute;display:inline-block;pointer-events:none;opacity:0;top:100%;left:0;height:100%;white-space:nowrap;-webkit-transition:opacity .2s ease;transition:opacity .2s ease;z-index:1;margin-top:.25em;padding:.5em;-webkit-user-select:all;user-select:all}.MentionLink .short.-with-tooltip,.MentionLink .you{-webkit-user-select:none;user-select:none}.MentionLink .short,.MentionLink .full{white-space:nowrap}.MentionLink .shortName{white-space:normal}.MentionLink .new.-you .shortName{font-weight:600}.MentionLink .new.-has-selection{--color: var(--selectionText);--link: var(--selectionText);background-color:var(--selectionBackground)}.MentionLink .new .at{color:var(--link);opacity:.8;display:inline-block;line-height:1;padding:0 .1em;vertical-align:-25%;margin:0}.MentionLink .new.-striped .shortName{background-image:-webkit-repeating-linear-gradient(315deg,var(--____highlight-tintColor),var(--____highlight-tintColor) 5px,var(--____highlight-tintColor2) 5px,var(--____highlight-tintColor2) 10px);background-image:repeating-linear-gradient(135deg,var(--____highlight-tintColor),var(--____highlight-tintColor) 5px,var(--____highlight-tintColor2) 5px,var(--____highlight-tintColor2) 10px)}.MentionLink .new.-solid .shortName{background-image:-webkit-linear-gradient(var(--____highlight-tintColor2),var(--____highlight-tintColor2));background-image:linear-gradient(var(--____highlight-tintColor2),var(--____highlight-tintColor2))}.MentionLink .new.-side .shortName{box-shadow:0 -5px 3px -4px inset var(--____highlight-solidColor)}.MentionLink .serverName.-faded{color:var(--linkFaint)}.mention-link-popover{max-width:70ch;max-height:20rem;overflow:hidden}.MentionsLine{overflow-wrap:break-word;text-wrap:pretty}.MentionsLine .mention-link:not(:first-child):before{content:" "}.MentionsLine .showMoreLess{margin-left:.5em;white-space:normal;color:var(--link)}.HashtagLink{position:relative;white-space:normal;display:inline-block;color:var(--link)}.RichContent{font-family:var(--font)}.RichContent.-faint{color:var(--text);--text: var(--textFaint) !important;--link: var(--linkFaint) !important;--funtextGreentext: var(--funtextGreentextFaint) !important;--funtextCyantext: var(--funtextCyantextFaint) !important}.RichContent.-faint a{color:var(--linkFaint)}.RichContent blockquote{margin:.2em 0 .2em .2em;font-style:italic;border-left:.2em solid var(--textFaint);padding-left:1em}.RichContent pre{overflow:auto}.RichContent code,.RichContent samp,.RichContent kbd,.RichContent var,.RichContent pre{font-family:var(--monoFont)}.RichContent p{margin:0 0 1em}.RichContent p:last-child{margin:0}.RichContent h1{font-size:1.1em;line-height:1.2em;margin:1.4em 0}.RichContent h2{font-size:1.1em;margin:1em 0}.RichContent h3{font-size:1em;margin:1.2em 0}.RichContent h4{margin:1.1em 0}.RichContent .img{display:inline-block}.RichContent .img button{display:-webkit-inline-box;display:inline-flex}.RichContent .emoji{display:inline-block;width:var(--emoji-size, 32px);height:var(--emoji-size, 32px)}.RichContent .img,.RichContent video{max-width:100%;max-height:400px;vertical-align:middle;object-fit:contain}.RichContent .greentext{color:var(--funtextGreentext)}.RichContent .cyantext{color:var(--funtextCyantext)}a .RichContent{color:var(--link)!important}.poll .votes{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;margin:0 0 .5em}.poll .poll-option{margin:.75em .5em}.poll .poll-option .input{line-height:inherit}.poll .option-result{height:100%;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;position:relative;color:var(--textLight)}.poll .option-result-label{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;padding:.1em .25em;z-index:1;overflow-wrap:break-word;text-wrap:pretty}.poll .result-percentage{width:3.5em;flex-shrink:0}.poll .result-fill{height:100%;position:absolute;border-radius:var(--roundness);top:0;left:0;-webkit-transition:width .5s;transition:width .5s}.poll input{width:3.5em}.poll.loading *{cursor:progress}.poll .poll-vote-button{padding:0 1em;margin-right:.5em}.poll .poll-checkbox{display:none}.StatusBody{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.StatusBody .emoji{--_still_image-label-scale: .5}.StatusBody .attachments{margin-top:.5em}.StatusBody .text,.StatusBody .summary{white-space:pre-wrap;overflow-wrap:break-word;text-wrap:pretty;line-height:var(--post-line-height)}.StatusBody .summary{display:block;font-style:italic;padding-bottom:.5em}.StatusBody .text.-single-line{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;height:1.4em}.StatusBody .summary-wrapper{margin-bottom:.5em;border-style:solid;border-width:0 0 1px;border-color:var(--border);-webkit-box-flex:0;flex-grow:0}.StatusBody .summary-wrapper.-tall{position:relative}.StatusBody .summary-wrapper.-tall .summary{max-height:2em;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.StatusBody .text-wrapper{text-overflow:ellipsis;overflow-wrap:break-word;overflow:hidden;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-flow:column nowrap}.StatusBody .text-wrapper.-tall-status{position:relative;height:16em;z-index:1}.StatusBody .text-wrapper.-tall-status .media-body{min-height:0;-webkit-mask:-webkit-linear-gradient(bottom,white,transparent) bottom/100% 8em no-repeat,-webkit-linear-gradient(bottom,white,white);mask:linear-gradient(to top,white,transparent) bottom/100% 8em no-repeat,linear-gradient(to top,white,white);mask-composite:xor;-webkit-mask-composite:xor;mask-composite:exclude}.StatusBody .text-wrapper.-expanded{overflow:visible}.StatusBody .tall-status-hider,.StatusBody .tall-subject-hider,.StatusBody .status-unhider,.StatusBody .cw-status-hider{display:inline-block;overflow-wrap:break-word;text-wrap:pretty;width:100%;text-align:center}.StatusBody .status-unhider{margin-top:auto;position:-webkit-sticky;position:sticky;bottom:0;padding-bottom:1em}.StatusBody .tall-status-hider{position:absolute;height:5em;margin-top:10em;line-height:8em;z-index:2}.StatusBody .tall-subject-hider{padding-bottom:.5em}.StatusBody .status-unhider,.StatusBody .cw-status-hider{overflow-wrap:break-word;text-wrap:pretty}.StatusBody .status-unhider svg,.StatusBody .cw-status-hider svg{color:inherit}.StatusBody .toggle-button{padding:.5em}.StatusBody.-compact{-webkit-box-align:start;align-items:start;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;--emoji-size: calc(var(--emojiSize, 32px) / 2)}.StatusBody.-compact .body,.StatusBody.-compact .attachments{max-height:3.25em}.StatusBody.-compact .body{overflow:hidden;white-space:normal;min-width:5em;-webkit-box-flex:5;flex:5 1 auto;-webkit-mask-size:auto 3.5em,auto auto;mask-size:auto 3.5em,auto auto;-webkit-mask-position:0 0,0 0;mask-position:0 0,0 0;-webkit-mask-repeat:repeat-x,repeat;mask-repeat:repeat-x,repeat;-webkit-mask-image:-webkit-linear-gradient(top,white 2em,transparent 3em);mask-image:linear-gradient(to bottom,white 2em,transparent 3em);mask-composite:xor;-webkit-mask-composite:xor;mask-composite:exclude}.StatusBody.-compact .attachments{margin-top:0;-webkit-box-flex:1;flex:1 1 0;min-width:5em;height:100%;margin-left:.5em}.StatusBody.-compact .summary-wrapper{line-height:inherit;margin:0;border:none}.StatusBody.-compact .summary-wrapper .summary:after{content:": "}.StatusBody.-compact .text-wrapper{display:inline-block;width:100%}.link-preview-card{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;cursor:pointer;overflow:hidden;margin-top:.5em;color:var(--text);border-style:solid;border-width:1px;border-radius:var(--roundness);border-color:var(--border)}.link-preview-card .card-image{flex-shrink:0;width:120px;max-width:25%}.link-preview-card .card-image img{width:100%;height:100%;object-fit:cover;border-radius:var(--roundness)}.link-preview-card .card-content{max-height:100%;margin:.5em;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.link-preview-card .card-host{font-size:.85em}.link-preview-card .card-description{margin:.5em 0 0;overflow:hidden;text-overflow:ellipsis;overflow-wrap:break-word;text-wrap:pretty;line-height:1.2em;max-height:calc(3.6em - 1px)}.link-preview-card .nsfw-alert{margin:2em 0}.StatusContent{-webkit-box-flex:1;flex:1;min-width:0}.StatusContent .poll-icon{margin:.5em}.dark-overlay:before{top:0;right:0;bottom:0;left:0;content:" ";display:block;cursor:default;position:fixed;background:#1b1f2380;z-index:2000}.dialog-container{display:grid;position:fixed;top:0;right:0;bottom:0;left:0;-webkit-box-pack:center;justify-content:center;place-items:center center;overflow:auto}.dialog-modal.panel{max-width:90vw;z-index:2001;cursor:default;display:block}.dialog-modal.panel .dialog-modal-heading .title{text-align:center}.dialog-modal.panel .dialog-modal-content{margin:0;padding:1rem;white-space:normal;text-align:center}.dialog-modal.panel .dialog-modal-footer{margin:0;padding:.5em;border-top:1px solid var(--border);display:grid;-webkit-box-pack:end;justify-content:end;grid-gap:.5em;grid-template-columns:-webkit-min-content;grid-template-columns:min-content;grid-auto-columns:-webkit-min-content;grid-auto-columns:min-content;grid-auto-flow:column dense;height:auto}.dialog-modal.panel .dialog-modal-footer button{width:auto;white-space:nowrap;padding-left:2em;padding-right:2em}#modal.-mobile .dialog-container{-webkit-box-pack:stretch;justify-content:stretch;place-items:end stretch}#modal.-mobile .dialog-container.-center-mobile{-webkit-box-align:center;align-items:center}#modal.-mobile .dialog-modal.panel{min-width:100vw}#modal.-mobile .dialog-modal-footer{-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-pack:end;justify-content:flex-end;grid-template-columns:1fr;grid-auto-rows:auto;grid-auto-flow:row dense}#modal.-mobile .dialog-modal-footer button{grid-column:1;height:3em}.post-status-form{position:relative}.post-status-form .attachments{margin-bottom:.5em}.post-status-form .more-post-actions,.post-status-form .more-post-actions .btn{height:100%}.post-status-form .form-bottom{display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;padding:.5em;height:2.5em}.post-status-form .form-bottom .post-button-group{width:10em;display:-webkit-box;display:flex}.post-status-form .form-bottom .post-button-group .post-button{-webkit-box-flex:1;flex:1 0 auto}.post-status-form .form-bottom .post-button-group .more-post-actions{-webkit-box-flex:0;flex:0 0 auto}.post-status-form .form-bottom p{margin:.35em;padding:.35em;display:-webkit-box;display:flex}.post-status-form .form-bottom-left{display:-webkit-box;display:flex;gap:1.5em}.post-status-form .form-bottom-left button{padding:.5em;margin:-.5em}.post-status-form .preview-heading{display:-webkit-box;display:flex;flex-wrap:wrap}.post-status-form .preview-toggle{-webkit-box-flex:10;flex:10 0 auto;cursor:pointer;-webkit-user-select:none;user-select:none;padding-left:.5em}.post-status-form .preview-toggle:hover{text-decoration:underline}.post-status-form .preview-toggle svg,.post-status-form .preview-toggle i{margin-left:.2em;font-size:.8em;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.post-status-form .preview-container{margin-bottom:1em}.post-status-form .preview-error{font-style:italic;color:var(--textFaint)}.post-status-form .preview-status{border:1px solid var(--border);border-radius:var(--roundness);padding:.5em;margin:0}.post-status-form .reply-or-quote-selector{-webkit-box-flex:1;flex:1 0 auto;margin-bottom:.5em;display:grid;grid-template-columns:1fr 1fr}.post-status-form .text-format .only-format{color:var(--textFaint)}.post-status-form .visibility-tray{display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;-webkit-box-align:baseline;align-items:baseline;margin-left:-.5em}.post-status-form .visibility-notice{border:1px solid var(--border);border-radius:var(--roundness);padding:.5em 1em}.post-status-form .visibility-notice.edit-warning>:first-child{margin-top:0}.post-status-form .visibility-notice.edit-warning>:last-child{margin-bottom:0}.post-status-form .media-upload-icon{-webkit-box-ordinal-group:2;order:1;-webkit-box-pack:left;justify-content:left}.post-status-form .emoji-icon{-webkit-box-ordinal-group:3;order:2;-webkit-box-pack:center;justify-content:center}.post-status-form .poll-icon{-webkit-box-ordinal-group:4;order:3;-webkit-box-pack:right;justify-content:right}.post-status-form .media-upload-icon,.post-status-form .poll-icon,.post-status-form .emoji-icon{font-size:1.85em;line-height:1.1;-webkit-box-flex:1;flex:1;padding:0 .1em;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center}.post-status-form .error{text-align:center}.post-status-form .media-upload-wrapper{margin-right:.2em;margin-bottom:.5em;width:18em}.post-status-form .media-upload-wrapper img,.post-status-form .media-upload-wrapper video{object-fit:contain;max-height:10em}.post-status-form .media-upload-wrapper .video{max-height:10em}.post-status-form .media-upload-wrapper input{-webkit-box-flex:1;flex:1;width:100%}.post-status-form .status-input-wrapper{display:-webkit-box;display:flex;position:relative;width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.post-status-form .btn[disabled]{cursor:not-allowed}.post-status-form form{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;margin:.6em;position:relative}.post-status-form .form-group{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;padding:.25em .5em .5em;line-height:1.85}.post-status-form .inputs-wrapper{padding:0}.post-status-form .input.form-post-body{box-sizing:content-box;overflow:hidden;-webkit-transition:min-height .2s .1s;transition:min-height .2s .1s;padding-bottom:calc(var(--_padding) + var(--post-line-height) * 1em);padding-right:1.5em;height:calc(var(--post-line-height) * 1em);min-height:calc(var(--post-line-height) * 1em);resize:none;background:transparent;text-wrap:stable}.post-status-form .input.form-post-body.scrollable-form{overflow-y:auto}.post-status-form .main-input{position:relative}.post-status-form .subject-input{border-bottom:1px solid var(--border)}.post-status-form .character-counter{position:absolute;bottom:0;right:0;padding:0;margin:0 .5em}.post-status-form .character-counter.error{color:var(--cRed)}@-webkit-keyframes fade-in{0%{opacity:0}to{opacity:.6}}@keyframes fade-in{0%{opacity:0}to{opacity:.6}}@-webkit-keyframes fade-out{0%{opacity:.6}to{opacity:0}}@keyframes fade-out{0%{opacity:.6}to{opacity:0}}.post-status-form .drop-indicator{position:absolute;width:100%;height:100%;font-size:5em;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;opacity:.6;color:var(--text);background-color:var(--bg);border-radius:var(--roundness);border:2px dashed var(--text)}.post-status-form .auto-save-status{align-self:center}.color-input{display:-webkit-inline-box;display:inline-flex;flex-wrap:wrap;max-width:10em}.color-input.-compact{max-width:none}.color-input .label{-webkit-box-flex:1;flex:1 1 auto;grid-area:label}.color-input .opt{grid-area:checkbox;margin-right:.5em}.color-input-field.input{-webkit-box-flex:1;flex:1 1 10em;max-width:10em;grid-area:input;display:-webkit-box;display:flex;-webkit-box-align:stretch;align-items:stretch}.color-input-field.input input{color:var(--text);background:none;border:none;padding:0;margin:0}.color-input-field.input input.textColor{-webkit-box-flex:1;flex:1 0 3em;min-width:3em;padding:0}.color-input-field.input .nativeColor{cursor:pointer;-webkit-box-flex:0;flex:0 0 auto;padding:0}.color-input-field.input .nativeColor input{-webkit-appearance:none;-moz-appearance:none;appearance:none;max-width:0;min-width:0;max-height:0;opacity:0!important}.color-input-field.input .computedIndicator,.color-input-field.input .validIndicator,.color-input-field.input .invalidIndicator,.color-input-field.input .transparentIndicator{-webkit-box-flex:0;flex:0 0 2em;margin:.2em .5em;min-width:2em;align-self:stretch;min-height:1.1em;border-radius:var(--roundness)}.color-input-field.input .invalidIndicator{background:transparent;box-sizing:border-box;border:2px solid var(--cRed)}.color-input-field.input .transparentIndicator{background-color:#f0f;position:relative}.color-input-field.input .transparentIndicator:before,.color-input-field.input .transparentIndicator:after{display:block;content:"";background-color:#000;position:absolute;height:50%;width:50%}.color-input-field.input .transparentIndicator:after{top:0;left:0;border-top-left-radius:var(--roundness)}.color-input-field.input .transparentIndicator:before{bottom:0;right:0;border-bottom-right-radius:var(--roundness)}.color-input-field.input.disabled .nativeColor input,.color-input-field.input.disabled .computedIndicator,.color-input-field.input.disabled .validIndicator,.color-input-field.input.disabled .invalidIndicator,.color-input-field.input.disabled .transparentIndicator,.color-input-field.input:disabled .nativeColor input,.color-input-field.input:disabled .computedIndicator,.color-input-field.input:disabled .validIndicator,.color-input-field.input:disabled .invalidIndicator,.color-input-field.input:disabled .transparentIndicator{opacity:.25!important}.remote-follow{max-width:220px}.remote-follow .remote-button{width:100%;min-height:2em}.moderation-tools-popover{height:100%}.moderation-tools-popover .trigger{display:-webkit-box!important;display:flex!important;height:100%}.moderation-tools-button{white-space:nowrap}.moderation-tools-button svg,.moderation-tools-button i{font-size:.8em}.UserTimedFilterModal .input-dont-ask-again{margin-left:1em}.UserTimedFilterModal .input-expire-at{margin-left:.25em}.UserTimedFilterModal .footer-left-checkbox{width:-webkit-max-content;width:max-content}.AccountActions .ellipsis-button{width:2.5em;margin:-.5em 0;padding:.5em 0;text-align:center}.panel-loading{display:-webkit-box;display:flex;height:100%;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;font-size:2em;color:var(--text)}.panel-loading .loading-text svg{line-height:0;vertical-align:middle;color:var(--text)}.user-note{position:relative}.user-note h4{-webkit-box-pack:justify;justify-content:space-between;margin-bottom:.5em}.user-note .note-text{align-self:stretch;min-width:100%;margin:-.6em}.user-note .overlay{position:absolute;top:0;right:0;bottom:0;left:0;background-color:#0000004d}.user-note .overlay .panel-loading{font-size:1em}.image-cropper{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.image-cropper-canvas,.image-cropper .image{height:100%}.image-cropper .image-cropper-img-input{display:none}.image-cropper-buttons-wrapper{display:grid;grid-gap:.5em;grid-template-columns:1fr 1fr 1fr}.image-cropper-buttons-wrapper button{margin-top:1em}.user-card{position:relative;z-index:1;overflow:hidden;border-top-left-radius:calc(var(--roundness) - 1px);border-top-right-radius:calc(var(--roundness) - 1px)}.user-card h4{line-height:2;display:-webkit-box;display:flex}.user-card h3{padding-left:.6em;margin-bottom:0}.user-card h3 .button-default{font-size:1rem;line-height:2;padding:0 .6em}.user-card .input.bio{height:auto}.user-card .follow-button{-webkit-box-flex:1;flex:1 0 auto}.user-card .user-card-inner{padding-bottom:0}.user-card-setting,.user-card-bio{color:var(--lightText);display:block;line-height:1.3;padding:0 .6em}.user-card-setting img,.user-card-bio img{object-fit:contain;vertical-align:middle;max-width:100%;max-height:400px}.user-card .user-card-setting{margin-left:.6em;margin-right:.6em}.user-card .user-card-bio{text-align:center;margin:0 .6em}.user-card .user-card-bio.input{margin:0 1em}.user-card .user-card-bio.input textarea{text-align:inherit}.user-card .user-card-bio,.user-card .user-card-bio *{line-height:1.5}.user-card .user-card-bio.-justify-left{text-align:start}.user-card:hover{--_still-image-img-visibility: visible;--_still-image-canvas-visibility: hidden;--_still-image-label-visibility: hidden}.user-card .personal-marks{margin:.6em;padding:.6em}.user-card .personal-marks:not(:last-child){border-bottom:1px solid var(--border)}.user-card .personal-marks .highlighter h4{margin-top:.6em}.user-card .personal-marks .highlighter .userHighlightSel{vertical-align:bottom;margin-left:-.1em}.user-card .personal-marks .highlighter .userHighlightSel.-none select{color:var(--textFaint)}.user-card .personal-marks .highlighter .userHighlightSel.-none select option{color:var(--text);background:var(--background)}.user-card .personal-marks .highlighter .highlighter-color{vertical-align:bottom;margin-left:.6em}.user-card .header-overlay{position:absolute;bottom:0;right:-1.2em;left:-1.2em;top:-1.4em;-webkit-mask:-webkit-linear-gradient(bottom,transparent 0,white 5em) bottom no-repeat;mask:linear-gradient(to top,transparent 0,white 5em) bottom no-repeat}.user-card .banner-overlay,.user-card .banner-image{position:absolute;top:0;right:0;bottom:0;left:0;padding:0;border-top-left-radius:calc(var(--roundness) - 1px);border-top-right-radius:calc(var(--roundness) - 1px)}.user-card .banner-image{z-index:-2}.user-card .banner-image img{object-fit:cover;height:100%;width:100%}.user-card .banner-overlay{background-color:var(--profileTint);opacity:.5;pointer-events:none;z-index:-1}.user-card .bottom-buttons{display:-webkit-box;display:flex;gap:.5em}.user-info{position:relative;text-align:left;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;gap:1em}.user-info .user-identity{position:relative;aspect-ratio:3;min-height:6em;display:-webkit-box;display:flex;-webkit-box-align:end;align-items:flex-end;container:user-card/inline-size}.user-info .user-identity>*{min-width:0}.user-info .user-identity>a{vertical-align:middle;display:-webkit-box;display:flex}.user-info .user-identity .Avatar{--_avatarShadowBox: var(--avatarShadow);--_avatarShadowFilter: var(--avatarShadowFilter);--_avatarShadowInset: var(--avatarShadowInset);width:7em;width:min(7em,20cqw);height:7em;height:min(7em,20cqw);object-fit:cover}.user-info .other-actions{position:relative;display:inline-grid;grid-auto-flow:column;grid-gap:.6em;font-size:1.25rem;z-index:2;align-self:end}.user-info .other-actions a,.user-info .other-actions button,.user-info .other-actions div{text-align:center;width:2em;height:2em;line-height:2em;padding:.6em;margin:-.6em}.user-info .other-actions a.edit-banner-button,.user-info .other-actions button.edit-banner-button,.user-info .other-actions div.edit-banner-button{width:auto}.user-info .other-actions a:hover .icon,.user-info .other-actions button:hover .icon,.user-info .other-actions div:hover .icon{color:var(--textFaint)}.user-info .other-actions a:not(:hover) .icon,.user-info .other-actions button:not(:hover) .icon,.user-info .other-actions div:not(:hover) .icon{color:var(--lightText)}.user-info-avatar{position:relative;cursor:pointer;margin-right:.6em}.user-info-avatar.-overlay{position:absolute;top:-.6em;bottom:-.6em;left:-.6em;right:-1.2em;display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;border-radius:var(--roundness);opacity:0;-webkit-transition:opacity .2s ease;transition:opacity .2s ease}.user-info-avatar.-overlay svg{color:#fff;margin:.5em}.user-info-avatar:hover .user-info-avatar.-overlay{opacity:1;background-color:#0000004d}.user-info .user-info-avatar.-editable .-overlay{opacity:1;place-items:start end;-webkit-box-pack:end;justify-content:end}.user-info .user-summary{align-self:stretch;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;margin-left:.6em;text-align:left;text-overflow:ellipsis;white-space:nowrap;-webkit-box-flex:1;flex:1 1 0;z-index:1;line-height:2em;-webkit-filter:drop-shadow(0 0 .5em var(--profileTint)) drop-shadow(0 0 .2em var(--profileTint));filter:drop-shadow(0 0 .5em var(--profileTint)) drop-shadow(0 0 .2em var(--profileTint));--emoji-size: 1.7em}.user-info .user-summary .alert{text-shadow:none}.user-info .user-summary .RichContent{--link: var(--text) !important}.user-info .user-summary .name-wrapper{display:-webkit-box;display:flex;-webkit-box-align:baseline;align-items:baseline}.user-info .user-summary .name-wrapper .edit-button{width:3em;text-align:center}.user-info .user-summary .name-wrapper .edit-button:hover .icon{color:var(--textFaint)}.user-info .user-summary .name-wrapper .edit-button:not(:hover) .icon{color:var(--lightText)}.user-info .user-summary .name-wrapper .input,.user-info .user-summary .name-wrapper .user-name{-webkit-box-flex:1;flex:1;font-weight:600;line-height:2;margin-right:1em;text-overflow:ellipsis;overflow:hidden}.user-info .user-summary .name-wrapper .input{margin:0 -.5em;padding:0 .5em}.user-info .user-summary .top-line{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-pack:justify;justify-content:space-between;-webkit-box-flex:1;flex:1;line-height:2;margin-bottom:-.2em;font-size:max(110%,4cqw)}.user-info .user-summary .bottom-line{display:-webkit-box;display:flex;-webkit-box-align:baseline;align-items:baseline;flex-wrap:wrap;white-space:normal;font-weight:500;font-size:.9em;font-size:max(90%,2.5cqw);line-height:1.5;margin-top:.5em}.user-info .user-summary .lock-icon{display:inline-block;vertical-align:baseline;overflow-x:hidden;margin:0 .35em 0 .5em}.user-info .user-summary .user-screen-name{color:var(--text);text-overflow:ellipsis;overflow:hidden;display:inline-block}.user-info .user-summary .user-role{display:inline-block;vertical-align:baseline}.user-info .user-interactions{position:relative;display:-webkit-box;display:flex;flex-wrap:wrap;gap:.6em}.user-info .user-interactions>*{-webkit-box-flex:0;flex:0 0 8em}.user-info .user-interactions .popover-trigger-button,.user-info .user-interactions .moderation-tools-button{width:100%}.user-info .user-interactions>.btn-group,.user-info .user-interactions>button{white-space:nowrap}.sidebar .edit-profile-button{display:none}.user-extras{padding:1.2em .6em;line-height:1.5}.user-extras .user-stats{display:block;text-align:center;word-wrap:break-word;width:100%}.user-extras .user-stats dl{display:inline;margin-right:1em;white-space:nowrap}.user-extras .user-stats dd{font-weight:bolder;text-overflow:ellipsis;overflow:hidden;margin:0}.user-extras .user-stats dd,.user-extras .user-stats dt{display:inline}.user-extras .user-stats a{text-decoration:none}.user-extras .birthday{width:100%;text-align:center;white-space:nowrap;--icon: var(--text)}.user-profile-fields{margin:0 .5em;padding:0 .5em;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;--emoji-size: 1.8em}.user-profile-fields .user-profile-field-add,.user-profile-fields .user-profile-field{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;margin:.25em;border:1px solid var(--border);border-radius:var(--roundness);line-height:2em}.user-profile-fields .user-profile-field-add .label,.user-profile-fields .user-profile-field .label{margin-left:.5em}.user-profile-fields .user-profile-field-add{-webkit-box-pack:center;justify-content:center;margin:.25em}.user-profile-fields .user-profile-field .input{text-align:inherit;-webkit-box-flex:1;flex:1}.user-profile-fields .user-profile-field .delete-field{display:inline-block;text-align:center;width:2em}.user-profile-fields .user-profile-field .user-profile-field-name,.user-profile-fields .user-profile-field .user-profile-field-value,.user-profile-fields .user-profile-field .user-profile-field-add{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;box-sizing:border-box;display:-webkit-inline-box;display:inline-flex}.user-profile-fields .user-profile-field .user-profile-field-name.-edit,.user-profile-fields .user-profile-field .user-profile-field-value.-edit,.user-profile-fields .user-profile-field .user-profile-field-add.-edit{padding:0}.user-profile-fields .user-profile-field .user-profile-field-name.-edit input,.user-profile-fields .user-profile-field .user-profile-field-value.-edit input,.user-profile-fields .user-profile-field .user-profile-field-add.-edit input{font-weight:inherit}.user-profile-fields .user-profile-field .user-profile-field-name{-webkit-box-flex:0;flex:0 1 50%;font-weight:600;text-align:right;-webkit-box-pack:end;justify-content:end;color:var(--lightText);min-width:9em;border-right:1px solid var(--border);padding-left:1.2em;padding-right:.6em}.user-profile-fields .user-profile-field .user-profile-field-value{-webkit-box-flex:1;flex:1 1 55%;color:var(--text);padding-left:.6em;margin:0}.edit-image .panel-body{text-align:center;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.edit-image .current-avatar{object-fit:contain}.edit-image .image-container{display:-webkit-box;display:flex;align-self:center;margin:0 0 1em;max-height:30em;max-width:100%;-webkit-box-flex:1;flex:1 0 20em;aspect-ratio:1;gap:.5em}.edit-image .image-container.-banner{aspect-ratio:3;max-width:100%}.edit-image .image-container .new-image{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.edit-image .image-container .cropper{-webkit-box-flex:1;flex:1;overflow-x:auto}.edit-image .image-container>*{-webkit-box-flex:1;flex:1 0 10em;max-height:100%;aspect-ratio:1}.edit-image .image-container .separator{min-width:1.1em;font-size:500%;align-self:center;-webkit-box-flex:0;flex:0 1 5em;aspect-ratio:unset}.edit-image.-banner .images-container{grid-template-rows:20em 5em 20em;grid-template-columns:1fr}.edit-image.-banner .images-container>*{-webkit-box-flex:1;flex:1 0 10em;width:100%;aspect-ratio:3}.edit-image.-banner .separator{min-height:1.1em;font-size:500%;justify-self:center;-webkit-box-flex:0;flex:0 1 5em;aspect-ratio:unset}#modal.-mobile .edit-image #pick-image{height:3em}#modal.-mobile .edit-image .image-container.-banner{max-height:10em}.user-panel .panel{background:var(--background);-webkit-backdrop-filter:var(--backdrop-filter);backdrop-filter:var(--backdrop-filter)}.user-panel .user-info{margin:.6em .6em 0}.user-panel .user-info .Avatar{width:5em;width:min(5em,20cqw);height:5em;height:min(5em,20cqw)}.user-panel .post-status-form form{margin-top:0}.user-panel .signed-in{z-index:10}.NavigationEntry.menu-item{--__line-height: 2.5em;--__horizontal-gap: .5em;--__vertical-gap: .4em;padding:var(--__vertical-gap) var(--__horizontal-gap);display:grid;grid-template-columns:1fr;grid-auto-columns:var(--__line-height);grid-auto-flow:column;grid-gap:var(--__horizontal-gap);-webkit-box-align:baseline;align-items:baseline}.NavigationEntry.menu-item[aria-expanded]{padding-right:var(--__horizontal-gap)}.NavigationEntry.menu-item .main-link{line-height:var(--__line-height);box-sizing:border-box}.NavigationEntry.menu-item .menu-icon{line-height:var(--__line-height);padding:0;width:var(--__line-height);margin-right:var(--__horizontal-gap)}.NavigationEntry.menu-item .timelines-chevron,.NavigationEntry.menu-item .extra-button{line-height:var(--__line-height);width:100%;padding:0;text-align:center}.NavigationEntry.menu-item .badge{justify-self:center}.NavigationEntry.menu-item .iconEmoji{display:inline-block;text-align:center;object-fit:contain;vertical-align:middle;height:var(--__line-height);width:var(--__line-height)}.NavigationEntry.menu-item .iconEmoji>span{font-size:1.5rem}.NavigationEntry.menu-item img.iconEmoji{padding:.25rem;box-sizing:border-box}.NavigationPins{display:-webkit-box;display:flex;flex-wrap:wrap;overflow:hidden;height:100%}.NavigationPins.alert-dot-notification{background-color:var(--badgeNotification)}.NavigationPins.alert-dot-neutral{background-color:var(--badgeNeutral)}.NavigationPins .pinned-item{position:relative;-webkit-box-flex:1;flex:1 0 3em;min-width:2em;text-align:center;overflow:visible;box-sizing:border-box;height:100%}.NavigationPins .pinned-item .bookmark-emoji{height:100%;box-sizing:border-box;padding:.5em}.NavigationPins .pinned-item .bookmark-emoji,.NavigationPins .pinned-item .svg-inline--fa,.NavigationPins .pinned-item .iconLetter{margin:0}.NavigationPins .pinned-item.toggled{margin-bottom:-4px;border-bottom:4px solid}.NavPanel .panel{overflow:hidden;box-shadow:var(--shadow)}.NavPanel ul{list-style:none;margin:0;padding:0}.NavPanel .navigation-chevron{margin-left:.8em;margin-right:.8em;font-size:1.1em}.NavPanel .timelines-background{padding:0 0 0 .6em}.NavPanel .nav-panel-heading{--panel-heading-height-padding: 0px}.features-panel li{line-height:24px}.who-to-follow *{vertical-align:middle}.who-to-follow img{width:32px;height:32px}.who-to-follow{padding:0 1em;margin:0}.who-to-follow-items{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0;margin:1em 0}.who-to-follow-more{padding:0;margin:1em 0;text-align:center}.floating-shout{position:fixed;bottom:.5em;z-index:var(--ZI_popovers);max-width:25em}.floating-shout.-left{left:.5em}.floating-shout:not(.-left){right:.5em}.shout-panel .shout-heading{cursor:pointer}.shout-panel .shout-heading .icon{color:var(--text);margin-right:.5em}.shout-panel .shout-heading .title{display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;-webkit-box-align:center;align-items:center}.shout-panel .shout-window{overflow:hidden auto;max-height:20em}.shout-panel .shout-window-container{height:100%}.shout-panel .shout-message{display:-webkit-box;display:flex;padding:.2em .5em}.shout-panel .shout-avatar img{height:.6em;width:.6em;border-radius:var(--roundness);margin-right:.5em;margin-top:.25em}.shout-panel .shout-input{display:-webkit-box;display:flex}.shout-panel .shout-input textarea{-webkit-box-flex:1;flex:1;margin:.6em;min-height:3.5em;resize:none}.shout-panel .shout-panel .title{display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between}@-webkit-keyframes media-fadein{0%{opacity:0}to{opacity:1}}@keyframes media-fadein{0%{opacity:0}to{opacity:1}}.media-modal-view .modal-image-container{display:-webkit-box;display:flex;overflow:hidden;-webkit-box-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;max-width:100%;max-height:100%;width:100%;height:100%;-webkit-box-flex:1;flex-grow:1;-webkit-box-pack:center;justify-content:center}.media-modal-view .modal-image-container-inner{width:100%;height:100%;-webkit-box-flex:1;flex-grow:1;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center}.media-modal-view .description,.media-modal-view .counter{color:#fff;margin-top:1em;text-shadow:0 0 10px black,0 0 10px black;padding:.2em 2em}.media-modal-view .description{-webkit-box-flex:0;flex:0 0 auto;overflow-y:auto;min-height:1em;max-width:35.8em;max-height:9.5em;overflow-wrap:break-word;text-wrap:pretty}.media-modal-view .modal-image{max-width:100%;max-height:100%;image-orientation:from-image;-webkit-animation:.1s cubic-bezier(.7,0,1,.6) media-fadein;animation:.1s cubic-bezier(.7,0,1,.6) media-fadein}.media-modal-view .modal-image.loading{opacity:.5}.media-modal-view .loading-spinner{width:100%;height:100%;position:absolute;pointer-events:none;display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center}.media-modal-view .loading-spinner svg{color:#fff}.media-modal-view .modal-view-button{border:0;padding:0;opacity:0;box-shadow:none;background:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;overflow:visible;cursor:pointer;-webkit-transition:opacity 333ms cubic-bezier(.4,0,.22,1);transition:opacity 333ms cubic-bezier(.4,0,.22,1);height:3em;width:3em}.media-modal-view .modal-view-button .button-icon{position:absolute;height:3em;width:3em;font-size:1rem;line-height:3em;color:#fff;text-align:center;background-color:#0000004d}.media-modal-view .modal-view-button-arrow{position:absolute;display:block;top:50%;margin-top:1.5em;width:3em;height:3em}.media-modal-view .modal-view-button-arrow .arrow-icon{position:absolute;top:0;line-height:3em;color:#fff;text-align:center;background-color:#0000004d}.media-modal-view .modal-view-button-arrow--prev{left:0}.media-modal-view .modal-view-button-arrow--prev .arrow-icon{left:.5em}.media-modal-view .modal-view-button-arrow--next{right:0}.media-modal-view .modal-view-button-arrow--next .arrow-icon{right:.5em}.media-modal-view .modal-view-button-hide{position:absolute;top:0;right:0}.media-modal-view .modal-view-button-hide .button-icon{top:.5em;right:.5em}.modal-view.media-modal-view{z-index:var(--ZI_media_modal);-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;overflow:hidden}.modal-view.media-modal-view .modal-view-button-arrow,.modal-view.media-modal-view .modal-view-button-hide{opacity:.75}.modal-view.media-modal-view .modal-view-button-arrow:focus,.modal-view.media-modal-view .modal-view-button-arrow:hover,.modal-view.media-modal-view .modal-view-button-hide:focus,.modal-view.media-modal-view .modal-view-button-hide:hover{outline:none;box-shadow:none}.modal-view.media-modal-view .modal-view-button-arrow:hover,.modal-view.media-modal-view .modal-view-button-hide:hover{opacity:1}.side-drawer-container{position:fixed;z-index:var(--ZI_navbar);top:0;left:0;width:100%;height:100%;display:-webkit-box;display:flex;-webkit-box-align:stretch;align-items:stretch;-webkit-transition-duration:0s;transition-duration:0s;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform}.side-drawer-container-open{-webkit-transform:translate(0%);transform:translate(0)}.side-drawer-container-closed{-webkit-transition-delay:.35s;transition-delay:.35s;-webkit-transform:translate(-100%);transform:translate(-100%)}.side-drawer-darken{top:0;left:0;width:100vw;height:100vh;position:fixed;z-index:-1;-webkit-transition:.35s;transition:.35s;-webkit-transition-property:background-color;transition-property:background-color;background-color:#00000080}.side-drawer-darken-closed{background-color:#0000}.side-drawer-click-outside{-webkit-box-flex:1;flex:1 1 100%}.side-drawer{overflow-x:hidden;-webkit-transition:.35s;transition:.35s;-webkit-transition-timing-function:cubic-bezier(0,1,.5,1);transition-timing-function:cubic-bezier(0,1,.5,1);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;margin:0 0 0 -100px;padding:0 0 1em 100px;width:80%;max-width:20em;-webkit-box-flex:0;flex:0 0 80%;box-shadow:var(--shadow);background-color:var(--background)}.side-drawer .badge{margin-left:10px}.side-drawer-logo-wrapper{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;padding:.85em}.side-drawer-logo-wrapper img{-webkit-box-flex:0;flex:none;height:50px;margin-right:.85em}.side-drawer-logo-wrapper span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.side-drawer-click-outside-closed{-webkit-box-flex:0;flex:0 0 0}.side-drawer-closed{-webkit-transform:translate(-100%);transform:translate(-100%)}.side-drawer-heading{background:transparent;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-align:stretch;align-items:stretch;display:-webkit-box;display:flex;padding:0;margin:0}.side-drawer-heading .user-info{margin:1em}.side-drawer ul{list-style:none;margin:0;padding:0;border-bottom:1px solid;border-color:var(--border)}.side-drawer ul:last-child{border:0}.side-drawer li{padding:0}.side-drawer li a,.side-drawer li button{box-sizing:border-box;display:block;height:3em;line-height:3em;padding:0 .7em}.MobilePostButton.button-default{width:5em;height:5em;border-radius:100%;position:fixed;bottom:1.5em;right:1.5em;display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;box-shadow:0 2px 2px #0000004d,0 4px 6px #0000004d;z-index:10;-webkit-transition:.35s -webkit-transform;transition:.35s -webkit-transform;transition:.35s transform;transition:.35s transform,.35s -webkit-transform;-webkit-transition-timing-function:cubic-bezier(0,1,.5,1);transition-timing-function:cubic-bezier(0,1,.5,1)}.MobilePostButton.hidden{-webkit-transform:translateY(150%);transform:translateY(150%)}.MobilePostButton svg{font-size:1.5em;color:var(--text)}@media all and (width >= 801px){.new-status-button:not(.always-show){display:none}}.avatars{display:-webkit-box;display:flex;margin:0;padding:0;flex-wrap:wrap;height:24px}.avatars .avatars-item{margin:0 0 5px 5px}.avatars .avatars-item:first-child{padding-left:5px}.avatars .avatars-item .avatar-small{border-radius:var(--roundness);height:24px;width:24px}.status-popover.popover{font-size:1rem;min-width:15em;max-width:95%;border-color:var(--border);border-style:solid;border-width:1px}.status-popover.popover .Status.Status{border:none}.status-popover.popover .status-preview-no-content{padding:1em;text-align:center}.status-popover.popover .status-preview-no-content i{font-size:2em}.user-popover{margin:0}.user-popover .user-info{width:100%;margin:1.2em}.user-popover .user-identity{aspect-ratio:unset;min-width:min(30em,98vw)}.user-popover .user-card-inner{display:-webkit-box;display:flex}.user-popover.popover{overflow:hidden}.user-list-popover{padding:.5em;--emoji-size: calc(var(--emojiSize, 32px) / 2)}.user-list-popover .user-list-row{padding:.25em;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row}.user-list-popover .user-list-row .user-list-names{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;margin-left:.5em;min-width:5em}.user-list-popover .user-list-row .user-list-screen-name{font-size:.65em}.EmojiReactions{display:-webkit-box;display:flex;margin-top:.25em;flex-wrap:wrap;--emoji-size: calc(var(--emojiSize, 1.25em) * var(--emojiReactionsScale, 1))}.EmojiReactions .emoji-reaction-container{display:-webkit-box;display:flex;-webkit-box-align:stretch;align-items:stretch;margin-top:.5em;margin-right:.5em}.EmojiReactions .emoji-reaction-container .emoji-reaction-popover{padding:0}.EmojiReactions .emoji-reaction-container .emoji-reaction-popover .emoji-reaction-count-button{margin:0;height:100%;border-top-left-radius:0;border-bottom-left-radius:0;box-sizing:border-box;min-width:2em;display:-webkit-inline-box;display:inline-flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center}.EmojiReactions .emoji-reaction{padding-left:.5em;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;box-sizing:border-box;border-top-right-radius:0;border-bottom-right-radius:0;margin:0}.EmojiReactions .emoji-reaction .reaction-emoji{width:var(--emoji-size);height:var(--emoji-size);margin-right:.25em;line-height:var(--emoji-size);display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;--_still_image-label-scale: .3}.EmojiReactions .emoji-reaction .reaction-emoji-content{max-width:100%;max-height:100%;width:var(--emoji-size);height:var(--emoji-size);line-height:inherit;overflow:hidden;font-size:calc(var(--emoji-size) * .8);margin:0}.EmojiReactions .emoji-reaction .reaction-emoji-content img{object-fit:contain}.EmojiReactions .emoji-reaction:focus{outline:none}.EmojiReactions .emoji-reaction .svg-inline--fa{color:var(--text)}.EmojiReactions .emoji-reaction.-picked-reaction .svg-inline--fa{color:var(--accent)}.EmojiReactions .emoji-reaction .focus-marker{visibility:hidden}.EmojiReactions .emoji-reaction .active-marker{visibility:visible}.EmojiReactions .emoji-reaction:focus:not(:focus-visible,:hover) .focus-marker{visibility:hidden}.EmojiReactions .emoji-reaction:focus:not(:focus-visible,:hover) .active-marker{visibility:visible}.EmojiReactions .emoji-reaction:hover .svg-inline--fa,.EmojiReactions .emoji-reaction:focus .svg-inline--fa{color:var(--accent)}.EmojiReactions .emoji-reaction:hover .focus-marker,.EmojiReactions .emoji-reaction:focus .focus-marker{visibility:visible}.EmojiReactions .emoji-reaction:hover .active-marker,.EmojiReactions .emoji-reaction:focus .active-marker{visibility:hidden}.EmojiReactions .emoji-reaction:focus-visible .svg-inline--fa{color:var(--accent)}.EmojiReactions .emoji-reaction:focus-visible .focus-marker{visibility:visible}.EmojiReactions .emoji-reaction:focus-visible .active-marker{visibility:hidden}.EmojiReactions .emoji-reaction-expand{padding:0 .5em;margin-right:.5em;margin-top:.5em;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center}.EmojiReactions .emoji-reaction-expand:hover{text-decoration:underline}.bookmark-folder-menu{--__horizontal-gap: .5em;--_still-image-label-visibility: hidden}.bookmark-folder-menu .emoji{width:var(--__line-height);height:var(--__line-height)}.quick-action{-webkit-box-pack:justify;justify-content:space-between;display:-webkit-box;display:flex;-webkit-box-align:baseline;align-items:baseline;-webkit-box-align:center;align-items:center;height:1.5em}.quick-action .action-counter{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap;margin-left:1em}.quick-action .action-button-inner,.quick-action .extra-button{margin:-.5em;padding:.5em}.quick-action .separator{display:block;align-self:stretch;width:1px;background-color:var(--icon);margin-left:.75em;margin-right:.125em}.quick-action.-pin{margin:calc(-2px - .25em);padding:.25em;border:2px dashed var(--icon);border-radius:var(--roundness);grid-template-columns:minmax(-webkit-max-content,1fr) auto;grid-template-columns:minmax(max-content,1fr) auto}.quick-action.-pin .chevron-icon,.quick-action.-pin .extra-button,.quick-action.-pin .separator{display:none}.quick-action .action-button-inner{display:grid;grid-gap:1em;grid-template-columns:-webkit-max-content;grid-template-columns:max-content;grid-auto-flow:column;grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content;-webkit-box-align:center;align-items:center}.quick-action .action-button-inner .focus-marker{visibility:hidden}.quick-action .action-button-inner .active-marker{visibility:visible}.quick-action .action-button-inner:focus:not(:focus-visible,:hover) .focus-marker{visibility:hidden}.quick-action .action-button-inner:focus:not(:focus-visible,:hover) .active-marker{visibility:visible}.quick-action .action-button-inner:hover .focus-marker,.quick-action .action-button-inner:focus .focus-marker{visibility:visible}.quick-action .action-button-inner:hover .active-marker,.quick-action .action-button-inner:focus .active-marker{visibility:hidden}.quick-action .action-button-inner:focus-visible .focus-marker{visibility:visible}.quick-action .action-button-inner:focus-visible .active-marker{visibility:hidden}.action-button{display:grid;grid-auto-flow:column;-webkit-box-align:center;align-items:center;padding:0}.action-button .action-button-inner:hover.reply-button:not(.disabled) .svg-inline--fa,.action-button .action-button-inner.-active.reply-button:not(.disabled) .svg-inline--fa{color:var(--cBlue)}.action-button .action-button-inner:hover.retweet-button:not(.disabled) .svg-inline--fa,.action-button .action-button-inner.-active.retweet-button:not(.disabled) .svg-inline--fa{color:var(--cGreen)}.action-button .action-button-inner:hover.favorite-button:not(.disabled) .svg-inline--fa,.action-button .action-button-inner.-active.favorite-button:not(.disabled) .svg-inline--fa{color:var(--cOrange)}.action-button.-extra .action-counter{justify-self:end;margin-right:1em}.action-button.-extra .chevron-icon{justify-self:end}.action-button.-extra .extra-button{justify-self:end;-webkit-box-pack:end;justify-content:end}.expiry-amount{width:4em;text-align:right}.StatusActionButtons .quick-action-buttons{display:grid;grid-template-columns:repeat(auto-fill,minmax(10%,3em));grid-auto-flow:row dense;grid-auto-rows:1fr;grid-gap:1.25em 1em;margin-top:var(--status-margin)}.StatusActionButtons .pin-action-button{margin:-.5em;padding:.5em}.extra-action-buttons .extra-action{margin:0;padding-top:0;padding-bottom:0;padding-right:0}.Status{min-width:0;white-space:normal;overflow-wrap:break-word;text-wrap:pretty}.Status:hover{--_still-image-img-visibility: visible;--_still-image-canvas-visibility: hidden;--_still-image-label-visibility: hidden}.Status .gravestone{padding:var(--status-margin);display:-webkit-box;display:flex}.Status .gravestone .deleted-text{margin:.5em 0;-webkit-box-align:center;align-items:center}.Status .status-container{display:-webkit-box;display:flex;padding:var(--status-margin)}.Status .status-container>*{min-width:0}.Status .status-container.-repeat{padding-top:0}.Status .pin{padding:var(--status-margin) var(--status-margin) 0;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:end;justify-content:flex-end}._misclick-prevention .Status{pointer-events:none}._misclick-prevention .Status .attachments{pointer-events:initial;cursor:initial}.Status .left-side{margin-right:var(--status-margin)}.Status .right-side{-webkit-box-flex:1;flex:1;min-width:0}.Status .usercard{margin-bottom:var(--status-margin)}.Status .status-username{white-space:nowrap;overflow:hidden;max-width:85%;font-weight:700;flex-shrink:1;margin-right:.4em;text-overflow:ellipsis;--_still_image-label-scale: .25;--emoji-size: 1em}.Status .status-favicon{height:1.2em;width:1.2em;margin-right:.4em;object-fit:contain}.Status .status-heading{margin-bottom:.5em}.Status .heading-name-row{display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;line-height:1.3}.Status .heading-name-row a{display:inline-block;white-space:nowrap;text-overflow:ellipsis;overflow-x:hidden;width:100%}.Status .account-name{display:inline-block;min-width:1em;margin-right:.4em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-box-flex:1;flex:1 1 0}.Status .account-name.unknown{min-width:8em}.Status .heading-left{display:-webkit-box;display:flex;min-width:0}.Status .heading-right{display:-webkit-box;display:flex;flex-shrink:0;align-self:baseline}.Status .heading-right .button-unstyled{padding:.2em;margin:-.2em}.Status .heading-right .svg-inline--fa{margin-left:.25em}.Status .glued-label{display:-webkit-inline-box;display:inline-flex;white-space:nowrap}.Status .timeago{margin-right:.2em}.Status .heading-reply-row,.Status .heading-edited-row{position:relative;align-content:baseline;font-size:.85em;margin-top:.2em;line-height:130%;max-width:100%;-webkit-box-align:stretch;align-items:stretch}.Status .reply-to-popover,.Status .reply-to-no-popover,.Status .mentions{min-width:0;margin-right:.4em;flex-shrink:0}.Status .reply-glued-label{margin-right:.5em}.Status .reply-to-popover .reply-to:hover:before{content:"";display:block;position:absolute;bottom:0;width:100%;border-bottom:1px solid var(--faint);pointer-events:none}.Status .reply-to-popover .faint-link:hover{text-decoration:none}.Status .reply-to-popover.-strikethrough .reply-to:after{content:"";display:block;position:absolute;top:50%;width:100%;border-bottom:1px solid var(--faint);pointer-events:none}.Status .mentions,.Status .reply-to{white-space:nowrap;position:relative}.Status .mentions-text,.Status .reply-to-text{color:var(--faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Status .mentions-line{display:inline}.Status .replies{margin-top:.25em;line-height:1.3;font-size:.85em;display:-webkit-box;display:flex;flex-wrap:wrap}.Status .replies>*{margin-right:.4em}.Status .reply-link{height:17px}.Status .repeat-info{padding:.4em var(--status-margin)}.Status .repeat-info .repeat-icon{color:var(--cGreen)}.Status .repeater-avatar{border-radius:var(--roundness);margin-left:2em;width:1.5em;height:1.5em}.Status .repeater-name{text-overflow:ellipsis;margin-right:0}.Status .repeater-name .emoji{width:1em;height:1em;vertical-align:middle;object-fit:contain}.Status .status-fadein{-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-name:fadein;animation-name:fadein}@-webkit-keyframes fadein{0%{opacity:0}to{opacity:1}}@keyframes fadein{0%{opacity:0}to{opacity:1}}.Status .status-actions{position:relative;width:100%;display:grid;grid-template-columns:1fr;grid-auto-columns:1fr;grid-auto-flow:column;margin-top:var(--status-margin)}.Status .muted{padding:.25em .6em;height:1.2em;line-height:1.2em;text-overflow:ellipsis;overflow:hidden;display:-webkit-box;display:flex;flex-wrap:nowrap;gap:1ex}.Status .muted .status-username,.Status .muted .mute-reason{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.Status .muted .status-username{font-weight:400;-webkit-box-flex:0;flex:0 1 auto;margin-right:.2em;font-size:smaller;display:-webkit-box;display:flex}.Status .muted .unmute{-webkit-box-flex:0;flex:0 0 auto;margin-left:auto;display:block}.Status .reply-form{padding-top:0;padding-bottom:0}.Status .reply-body{-webkit-box-flex:1;flex:1}.Status .favs-repeated-users{margin-top:var(--status-margin)}.Status .stats{width:100%;display:-webkit-box;display:flex;line-height:1em}.Status .avatar-row{-webkit-box-flex:1;flex:1;position:relative;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;overflow:hidden}.Status .avatar-row:before{content:"";position:absolute;height:100%;width:1px;left:0;background-color:var(--textFaint)}.Status .stat-count{margin-right:var(--status-margin);-webkit-user-select:none;user-select:none}.Status .stat-count .stat-title{color:var(--textFaint);font-size:.85em;text-transform:uppercase;position:relative}.Status .stat-count .stat-number{font-weight:bolder;font-size:1.1em;line-height:1em;color:var(--text)}.Status .stat-count:hover .stat-title{text-decoration:underline}@media all and (width <= 800px){.Status .repeater-avatar{margin-left:20px}.Status .post-avatar{width:40px;height:40px}.Status .post-avatar.-compact{width:32px;height:32px}}.Status .quoted-status{margin-top:.5em;border:1px solid var(--border);border-radius:var(--roundness)}.Status .quoted-status.-unavailable-prompt{padding:.5em}.Status .display-quoted-status-button{margin:.5em}.Status .display-quoted-status-button-icon{color:inherit}.Report .report-content,.Report .report-state{margin:.5em 0 1em}.Report .reported-status{border:1px solid var(--border);border-radius:var(--roundness);display:block;padding:.5em;margin:.5em 0}.Report .reported-status .status-content{pointer-events:none}.Report .reported-status .reported-status-heading{display:-webkit-box;display:flex;width:100%;-webkit-box-pack:justify;justify-content:space-between;margin-bottom:.2em}.Report .reported-status .reported-status-name{font-weight:700}.Report .note{width:100%;margin-bottom:.5em}.Notification{border-bottom:1px solid;border-color:var(--border);overflow-wrap:break-word;text-wrap:pretty;--emoji-size: 1em}.Notification .status-content{cursor:pointer}.Notification.Status{background-color:transparent!important}.Notification:hover{--_still-image-img-visibility: visible;--_still-image-canvas-visibility: hidden;--_still-image-label-visibility: hidden}.Notification.-muted{padding:.25em .6em;height:1.2em;line-height:1.2em;text-overflow:ellipsis;overflow:hidden;display:-webkit-box;display:flex;flex-wrap:nowrap;gap:1ex}.Notification.-muted .status-username,.Notification.-muted .mute-thread,.Notification.-muted .mute-words{white-space:nowrap}.Notification.-muted .status-username,.Notification.-muted .mute-words{text-overflow:ellipsis;overflow:hidden}.Notification.-muted .status-username{font-weight:400;-webkit-box-flex:0;flex:0 1 auto;margin-right:.2em;font-size:smaller}.Notification.-muted .mute-thread{-webkit-box-flex:0;flex:0 0 auto}.Notification.-muted .mute-words{-webkit-box-flex:1;flex:1 0 5em;margin-left:.2em}.Notification.-muted .mute-words:before{content:" "}.Notification.-muted .unmute{-webkit-box-flex:0;flex:0 0 auto;margin-left:auto;display:block}.Notification .type-icon{margin:0 .1em}.Notification.-type--repeat .type-icon{color:var(--cGreen)}.Notification.-type--follow .type-icon,.Notification.-type--follow-request .type-icon{color:var(--cBlue)}.Notification.-type--like .type-icon{color:var(--cOrange)}.Notification.-type--move .type-icon{color:var(--cBlue)}.ExtraNotifications{width:100%;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-align:stretch;align-items:stretch}.ExtraNotifications .notification{width:100%;border-bottom:1px solid;border-color:var(--border);display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-align:stretch;align-items:stretch}.ExtraNotifications .extra-notification{padding:1em}.ExtraNotifications .icon{margin-right:.5em}.ExtraNotifications .tip{display:inline}.Notifications:not(.minimal){padding-bottom:15em}.Notifications .loadmore-error{color:var(--text)}.Notifications .notification{position:relative}.Notifications .notification .notification-overlay{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.Notifications .notification.unseen .notification-overlay{background-image:-webkit-linear-gradient(315deg,var(--badgeNotification) 4px,transparent 10px);background-image:linear-gradient(135deg,var(--badgeNotification) 4px,transparent 10px)}.notification{box-sizing:border-box}.notification .Status{-webkit-box-flex:1;flex:1}.notification:hover .animated.Avatar canvas{display:none}.notification:hover .animated.Avatar img{visibility:visible}.notification:last-child .Notification{border-bottom:none}.notification .non-mention{display:-webkit-box;display:flex;-webkit-box-flex:1;flex:1;flex-wrap:nowrap;padding:.6em;min-width:0}.notification .non-mention .avatar-container{width:32px;height:32px}.notification .follow-request-accept:hover{color:var(--text)}.notification .follow-request-reject:hover{color:var(--cRed)}.notification .follow-text,.notification .move-text{padding:.5em 0;overflow-wrap:break-word;display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between}.notification .follow-text .follow-name,.notification .move-text .follow-name{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notification time{white-space:nowrap}.notification .notification-right{-webkit-box-flex:1;flex:1;padding-left:.8em;min-width:0}.notification .notification-right .timeago{min-width:3em;text-align:right}.notification .notification-right .timeago-link{margin-right:.2em}.notification .notification-right .expand-icon .svg-inline--fa{margin-left:.25em}.notification .emoji-reaction-emoji{font-size:1.3em;max-width:1.25em;height:1.25em;width:auto}.notification .emoji-reaction-emoji-image{vertical-align:middle;object-fit:contain}.notification .notification-details{min-width:0;line-height:var(--post-line-height);position:relative;overflow:hidden;width:100%;-webkit-box-flex:1;flex:1 1 0;display:-webkit-box;display:flex;flex-wrap:nowrap;-webkit-box-pack:justify;justify-content:space-between}.notification .notification-details .name-and-action{-webkit-box-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis}.notification .notification-details .username{font-weight:bolder;max-width:100%;text-overflow:ellipsis;white-space:nowrap}.notification .notification-details .timeago{margin-right:.2em}.notification .notification-details .status-content{margin:0;max-height:300px}.notification .notification-details h1{overflow-wrap:break-word;text-wrap:pretty;margin:0 0 .3em;padding:0;font-size:1em;line-height:1.5}.notification .notification-details h1 small{font-weight:lighter}.notification .notification-details p{margin:0 0 .3em}.MobileNav{z-index:var(--ZI_navbar)}.MobileNav .mobile-nav{display:grid;line-height:var(--navbar-height);grid-template-rows:var(--navbar-height);grid-template-columns:2fr auto;width:100%;box-sizing:border-box}.MobileNav .mobile-nav a{color:var(--link)}.MobileNav .mobile-inner-nav{width:100%;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center}.MobileNav .mobile-nav-button{display:inline-block;text-align:center;padding:0 1em;position:relative;cursor:pointer}.MobileNav .site-name{padding:0 .3em;display:inline-block}.MobileNav .item{display:-webkit-box;display:flex}.MobileNav .mobile-notifications-drawer{width:100%;height:100vh;overflow-x:hidden;position:fixed;top:0;left:0;box-shadow:var(--shadow);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.25s;transition-duration:.25s;-webkit-transform:translateX(0);transform:translate(0);z-index:var(--ZI_navbar);-webkit-overflow-scrolling:touch;background:var(--background)}.MobileNav .mobile-notifications-drawer.-closed{-webkit-transform:translateX(100%);transform:translate(100%);box-shadow:none}.MobileNav .mobile-notifications-header{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:justify;justify-content:space-between;z-index:calc(var(--ZI_navbar) + 100);width:100%;height:3.5em;line-height:3.5em;position:absolute;box-shadow:var(--shadow)}.MobileNav .mobile-notifications-header .spacer{-webkit-box-flex:1;flex:1}.MobileNav .mobile-notifications-header .title{font-size:1.3em;margin-left:.6em;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis}.MobileNav .pins{-webkit-box-flex:1;flex:1}.MobileNav .pins .pinned-item{-webkit-box-flex:1;flex-grow:1}.MobileNav .mobile-notifications{margin-top:3.5em;width:100vw;height:calc(100vh - var(--navbar-height));overflow:hidden scroll}.MobileNav .mobile-notifications .notifications{padding:0;border-radius:0;box-shadow:none}.MobileNav .mobile-notifications .notifications .panel{border-radius:0;margin:0;box-shadow:none}.MobileNav .mobile-notifications .notifications .panel:after{border-radius:0}.MobileNav .mobile-notifications .notifications .panel .panel-heading{border-radius:0;box-shadow:none}.MobileNav .confirm-modal.dark-overlay:before{z-index:3000}.MobileNav .confirm-modal.dark-overlay .dialog-modal.panel{z-index:3001}.SearchBar{display:-webkit-inline-box;display:inline-flex;-webkit-box-align:baseline;align-items:baseline;vertical-align:baseline;-webkit-box-pack:end;justify-content:flex-end}.SearchBar.-expanded{width:100%}.SearchBar .search-bar-input,.SearchBar .search-button{height:29px}.SearchBar .search-bar-input{-webkit-box-flex:1;flex:1 0 auto}.SearchBar .cancel-search{height:50px}.SearchBar .cancel-icon{color:var(--text)}.DesktopNav{width:100%;z-index:var(--ZI_navbar)}.DesktopNav input{color:var(--inputTopbarText, var(--inputText))}.DesktopNav .inner-nav{display:grid;grid-template-rows:var(--navbar-height);grid-template-columns:2fr auto 2fr;grid-template-areas:"sitename logo actions";box-sizing:border-box;padding:0 1.2em;margin:auto;max-width:980px}.DesktopNav.-column-stretch .inner-nav{--miniColumn: 25rem;--maxiColumn: 45rem;--columnGap: 1em;max-width:calc(var(--sidebarColumnWidth, var(--miniColumn)) + var(--contentColumnWidth, var(--maxiColumn)) + var(--columnGap))}.DesktopNav.-logoLeft .inner-nav{grid-template-columns:auto 2fr 2fr;grid-template-areas:"logo sitename actions"}.DesktopNav.-column-stretch.-wide .inner-nav{max-width:calc(var(--sidebarColumnWidth, var(--miniColumn)) + var(--contentColumnWidth, var(--maxiColumn)) + var(--notifsColumnWidth, var(--miniColumn)) + var(--columnGap))}.DesktopNav .button-default,.DesktopNav .button-default svg{color:var(--text)}.DesktopNav .logo{grid-area:logo;position:relative;-webkit-transition:opacity;transition:opacity;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out;-webkit-transition-duration:.1s;transition-duration:.1s}@media all and (width >= 800px){.DesktopNav .logo{opacity:1!important}}.DesktopNav .logo .mask{-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain;background-color:var(--text);position:absolute;top:0;right:0;bottom:0;left:0}.DesktopNav .logo img{display:inline-block;height:var(--navbar-height)}.DesktopNav .nav-icon{margin-left:.2em;width:2em;height:100%;text-align:center}.DesktopNav .sitename{grid-area:sitename}.DesktopNav .actions{grid-area:actions}.DesktopNav .item{-webkit-box-flex:1;flex:1;line-height:var(--navbar-height);height:var(--navbar-height);overflow:hidden;display:-webkit-box;display:flex;flex-wrap:wrap}.DesktopNav .item.right{-webkit-box-pack:end;justify-content:flex-end;text-align:right}.DesktopNav .spacer{width:1em}.user-reporting-panel{width:90vw;max-width:50rem;min-height:20vh;max-height:80vh}.user-reporting-panel .user-link{display:inline}.user-reporting-panel .panel-body{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;flex-direction:column-reverse;border-top:1px solid;border-color:var(--border);overflow:hidden}.user-reporting-panel-left{padding:1.1em .7em .7em;line-height:var(--post-line-height);box-sizing:border-box}.user-reporting-panel-left>div{margin-bottom:1em}.user-reporting-panel-left>div:last-child{margin-bottom:0}.user-reporting-panel-left p{margin-top:0}.user-reporting-panel-left textarea.form-control{line-height:1.1;resize:none;overflow:hidden;-webkit-transition:min-height .2s .1s;transition:min-height .2s .1s;min-height:44px;width:100%}.user-reporting-panel-left .btn{min-width:10em;padding:0 2em}.user-reporting-panel-left .alert{margin:1em 0 0;line-height:1.3em}.user-reporting-panel-right{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;overflow-y:auto}.user-reporting-panel-sitem{display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between}.user-reporting-panel-sitem>.Status{-webkit-box-flex:1;flex:1}.user-reporting-panel-sitem>.checkbox{margin:.75em}@media all and (width >= 801px){.user-reporting-panel .panel-body{-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row}.user-reporting-panel-left{width:50%;max-width:320px;border-right:1px solid;border-color:var(--border);padding:1.1em}.user-reporting-panel-left>div{margin-bottom:2em}.user-reporting-panel-right{width:50%;-webkit-box-flex:1;flex:1 1 auto;margin-bottom:12px}}.modal-view.edit-form-modal-view{-webkit-box-align:start;align-items:flex-start}.edit-form-modal-panel{flex-shrink:0;margin-top:25%;margin-bottom:2em;width:100%;max-width:700px}@media (orientation: landscape){.edit-form-modal-panel{margin-top:8%}}.edit-form-modal-panel .form-bottom-left{max-width:6.5em}.edit-form-modal-panel .form-bottom-left .emoji-icon{-webkit-box-pack:right;justify-content:right}.modal-view.post-form-modal-view{-webkit-box-align:start;align-items:flex-start}.post-form-modal-panel{flex-shrink:0;margin-top:25%;margin-bottom:2em;width:100%;max-width:700px}@media (orientation: landscape){.post-form-modal-panel{margin-top:8%}}.modal-view.status-history-modal-view{-webkit-box-align:start;align-items:flex-start}.status-history-modal-panel{flex-shrink:0;margin-top:25%;margin-bottom:2em;width:100%;max-width:700px}@media (orientation: landscape){.status-history-modal-panel{margin-top:8%}}.global-notice-list{position:fixed;top:calc(var(--navbar-height) + .5em);width:100%;pointer-events:none;z-index:var(--ZI_modals_popovers);display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-align:center;align-items:center}.global-notice-list .global-notice{pointer-events:auto;text-align:center;width:40em;max-width:calc(100% - 3em);display:-webkit-box;display:flex;padding-left:1.5em;line-height:2;margin-bottom:.5em}.global-notice-list .global-notice .notice-message{-webkit-box-flex:1;flex:1 1 100%}.global-notice-list .close-notice{padding-right:.2em}:root,:host{--fa-font-solid: normal 900 1em/1 "Font Awesome 6 Free";--fa-font-regular: normal 400 1em/1 "Font Awesome 6 Free";--fa-font-light: normal 300 1em/1 "Font Awesome 6 Pro";--fa-font-thin: normal 100 1em/1 "Font Awesome 6 Pro";--fa-font-duotone: normal 900 1em/1 "Font Awesome 6 Duotone";--fa-font-duotone-regular: normal 400 1em/1 "Font Awesome 6 Duotone";--fa-font-duotone-light: normal 300 1em/1 "Font Awesome 6 Duotone";--fa-font-duotone-thin: normal 100 1em/1 "Font Awesome 6 Duotone";--fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands";--fa-font-sharp-solid: normal 900 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-regular: normal 400 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-light: normal 300 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-thin: normal 100 1em/1 "Font Awesome 6 Sharp";--fa-font-sharp-duotone-solid: normal 900 1em/1 "Font Awesome 6 Sharp Duotone";--fa-font-sharp-duotone-regular: normal 400 1em/1 "Font Awesome 6 Sharp Duotone";--fa-font-sharp-duotone-light: normal 300 1em/1 "Font Awesome 6 Sharp Duotone";--fa-font-sharp-duotone-thin: normal 100 1em/1 "Font Awesome 6 Sharp Duotone"}svg.svg-inline--fa:not(:root),svg.svg-inline--fa:not(:host){overflow:visible;box-sizing:content-box}.svg-inline--fa{display:var(--fa-display, inline-block);height:1em;overflow:visible;vertical-align:-.125em}.svg-inline--fa.fa-2xs{vertical-align:.1em}.svg-inline--fa.fa-xs{vertical-align:0em}.svg-inline--fa.fa-sm{vertical-align:-.07143em}.svg-inline--fa.fa-lg{vertical-align:-.2em}.svg-inline--fa.fa-xl{vertical-align:-.25em}.svg-inline--fa.fa-2xl{vertical-align:-.3125em}.svg-inline--fa.fa-pull-left{margin-right:var(--fa-pull-margin, .3em);width:auto}.svg-inline--fa.fa-pull-right{margin-left:var(--fa-pull-margin, .3em);width:auto}.svg-inline--fa.fa-li{width:var(--fa-li-width, 2em);top:.25em}.svg-inline--fa.fa-fw{width:var(--fa-fw-width, 1.25em)}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-text{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter{background-color:var(--fa-counter-background-color, #ff253a);border-radius:var(--fa-counter-border-radius, 1em);box-sizing:border-box;color:var(--fa-inverse, #fff);line-height:var(--fa-counter-line-height, 1);max-width:var(--fa-counter-max-width, 5em);min-width:var(--fa-counter-min-width, 1.5em);overflow:hidden;padding:var(--fa-counter-padding, .25em .5em);right:var(--fa-right, 0);text-overflow:ellipsis;top:var(--fa-top, 0);-webkit-transform:scale(var(--fa-counter-scale, .25));transform:scale(var(--fa-counter-scale, .25));-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-bottom-right{bottom:var(--fa-bottom, 0);right:var(--fa-right, 0);top:auto;-webkit-transform:scale(var(--fa-layers-scale, .25));transform:scale(var(--fa-layers-scale, .25));-webkit-transform-origin:bottom right;transform-origin:bottom right}.fa-layers-bottom-left{bottom:var(--fa-bottom, 0);left:var(--fa-left, 0);right:auto;top:auto;-webkit-transform:scale(var(--fa-layers-scale, .25));transform:scale(var(--fa-layers-scale, .25));-webkit-transform-origin:bottom left;transform-origin:bottom left}.fa-layers-top-right{top:var(--fa-top, 0);right:var(--fa-right, 0);-webkit-transform:scale(var(--fa-layers-scale, .25));transform:scale(var(--fa-layers-scale, .25));-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-top-left{left:var(--fa-left, 0);right:auto;top:var(--fa-top, 0);-webkit-transform:scale(var(--fa-layers-scale, .25));transform:scale(var(--fa-layers-scale, .25));-webkit-transform-origin:top left;transform-origin:top left}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin, 2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(-1 * var(--fa-li-width, 2em));position:absolute;text-align:center;width:var(--fa-li-width, 2em);line-height:inherit}.fa-border{border-color:var(--fa-border-color, #eee);border-radius:var(--fa-border-radius, .1em);border-style:var(--fa-border-style, solid);border-width:var(--fa-border-width, .08em);padding:var(--fa-border-padding, .2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin, .3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin, .3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay, 0s);animation-delay:var(--fa-animation-delay, 0s);-webkit-animation-direction:var(--fa-animation-direction, normal);animation-direction:var(--fa-animation-direction, normal);-webkit-animation-duration:var(--fa-animation-duration, 1s);animation-duration:var(--fa-animation-duration, 1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-iteration-count:var(--fa-animation-iteration-count, infinite);-webkit-animation-timing-function:var(--fa-animation-timing, ease-in-out);animation-timing-function:var(--fa-animation-timing, ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay, 0s);animation-delay:var(--fa-animation-delay, 0s);-webkit-animation-direction:var(--fa-animation-direction, normal);animation-direction:var(--fa-animation-direction, normal);-webkit-animation-duration:var(--fa-animation-duration, 1s);animation-duration:var(--fa-animation-duration, 1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-iteration-count:var(--fa-animation-iteration-count, infinite);-webkit-animation-timing-function:var(--fa-animation-timing, cubic-bezier(.28, .84, .42, 1));animation-timing-function:var(--fa-animation-timing, cubic-bezier(.28, .84, .42, 1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-delay:var(--fa-animation-delay, 0s);animation-delay:var(--fa-animation-delay, 0s);-webkit-animation-direction:var(--fa-animation-direction, normal);animation-direction:var(--fa-animation-direction, normal);-webkit-animation-duration:var(--fa-animation-duration, 1s);animation-duration:var(--fa-animation-duration, 1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-iteration-count:var(--fa-animation-iteration-count, infinite);-webkit-animation-timing-function:var(--fa-animation-timing, cubic-bezier(.4, 0, .6, 1));animation-timing-function:var(--fa-animation-timing, cubic-bezier(.4, 0, .6, 1))}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-delay:var(--fa-animation-delay, 0s);animation-delay:var(--fa-animation-delay, 0s);-webkit-animation-direction:var(--fa-animation-direction, normal);animation-direction:var(--fa-animation-direction, normal);-webkit-animation-duration:var(--fa-animation-duration, 1s);animation-duration:var(--fa-animation-duration, 1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-iteration-count:var(--fa-animation-iteration-count, infinite);-webkit-animation-timing-function:var(--fa-animation-timing, cubic-bezier(.4, 0, .6, 1));animation-timing-function:var(--fa-animation-timing, cubic-bezier(.4, 0, .6, 1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay, 0s);animation-delay:var(--fa-animation-delay, 0s);-webkit-animation-direction:var(--fa-animation-direction, normal);animation-direction:var(--fa-animation-direction, normal);-webkit-animation-duration:var(--fa-animation-duration, 1s);animation-duration:var(--fa-animation-duration, 1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-iteration-count:var(--fa-animation-iteration-count, infinite);-webkit-animation-timing-function:var(--fa-animation-timing, ease-in-out);animation-timing-function:var(--fa-animation-timing, ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-delay:var(--fa-animation-delay, 0s);animation-delay:var(--fa-animation-delay, 0s);-webkit-animation-direction:var(--fa-animation-direction, normal);animation-direction:var(--fa-animation-direction, normal);-webkit-animation-duration:var(--fa-animation-duration, 1s);animation-duration:var(--fa-animation-duration, 1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-iteration-count:var(--fa-animation-iteration-count, infinite);-webkit-animation-timing-function:var(--fa-animation-timing, linear);animation-timing-function:var(--fa-animation-timing, linear)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-delay:var(--fa-animation-delay, 0s);animation-delay:var(--fa-animation-delay, 0s);-webkit-animation-direction:var(--fa-animation-direction, normal);animation-direction:var(--fa-animation-direction, normal);-webkit-animation-duration:var(--fa-animation-duration, 2s);animation-duration:var(--fa-animation-duration, 2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-iteration-count:var(--fa-animation-iteration-count, infinite);-webkit-animation-timing-function:var(--fa-animation-timing, linear);animation-timing-function:var(--fa-animation-timing, linear)}.fa-spin-reverse{--fa-animation-direction: reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction, normal);animation-direction:var(--fa-animation-direction, normal);-webkit-animation-duration:var(--fa-animation-duration, 1s);animation-duration:var(--fa-animation-duration, 1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-iteration-count:var(--fa-animation-iteration-count, infinite);-webkit-animation-timing-function:var(--fa-animation-timing, steps(8));animation-timing-function:var(--fa-animation-timing, steps(8))}@media (prefers-reduced-motion: reduce){.fa-beat,.fa-bounce,.fa-fade,.fa-beat-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale, 1.25));transform:scale(var(--fa-beat-scale, 1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale, 1.25));transform:scale(var(--fa-beat-scale, 1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x, 1.1),var(--fa-bounce-start-scale-y, .9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x, 1.1),var(--fa-bounce-start-scale-y, .9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x, .9),var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -.5em));transform:scale(var(--fa-bounce-jump-scale-x, .9),var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x, 1.05),var(--fa-bounce-land-scale-y, .95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x, 1.05),var(--fa-bounce-land-scale-y, .95)) translateY(0)}57%{-webkit-transform:scale(1,1) translateY(var(--fa-bounce-rebound, -.125em));transform:scale(1) translateY(var(--fa-bounce-rebound, -.125em))}64%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1,1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x, 1.1),var(--fa-bounce-start-scale-y, .9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x, 1.1),var(--fa-bounce-start-scale-y, .9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x, .9),var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -.5em));transform:scale(var(--fa-bounce-jump-scale-x, .9),var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x, 1.05),var(--fa-bounce-land-scale-y, .95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x, 1.05),var(--fa-bounce-land-scale-y, .95)) translateY(0)}57%{-webkit-transform:scale(1,1) translateY(var(--fa-bounce-rebound, -.125em));transform:scale(1) translateY(var(--fa-bounce-rebound, -.125em))}64%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1,1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity, .4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity, .4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity, .4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale, 1.125));transform:scale(var(--fa-beat-fade-scale, 1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity, .4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale, 1.125));transform:scale(var(--fa-beat-fade-scale, 1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x, 0),var(--fa-flip-y, 1),var(--fa-flip-z, 0),var(--fa-flip-angle, -180deg));transform:rotate3d(var(--fa-flip-x, 0),var(--fa-flip-y, 1),var(--fa-flip-z, 0),var(--fa-flip-angle, -180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x, 0),var(--fa-flip-y, 1),var(--fa-flip-z, 0),var(--fa-flip-angle, -180deg));transform:rotate3d(var(--fa-flip-x, 0),var(--fa-flip-y, 1),var(--fa-flip-z, 0),var(--fa-flip-angle, -180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle, 0));transform:rotate(var(--fa-rotate-angle, 0))}.fa-stack{display:inline-block;vertical-align:middle;height:2em;position:relative;width:2.5em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;z-index:var(--fa-stack-z-index, auto)}.svg-inline--fa.fa-stack-1x{height:1em;width:1.25em}.svg-inline--fa.fa-stack-2x{height:2em;width:2.5em}.fa-inverse{color:var(--fa-inverse, #fff)}.sr-only,.fa-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sr-only-focusable:not(:focus),.fa-sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.svg-inline--fa .fa-primary{fill:var(--fa-primary-color, currentColor);opacity:var(--fa-primary-opacity, 1)}.svg-inline--fa .fa-secondary{fill:var(--fa-secondary-color, currentColor);opacity:var(--fa-secondary-opacity, .4)}.svg-inline--fa.fa-swap-opacity .fa-primary{opacity:var(--fa-secondary-opacity, .4)}.svg-inline--fa.fa-swap-opacity .fa-secondary{opacity:var(--fa-primary-opacity, 1)}.svg-inline--fa mask .fa-primary,.svg-inline--fa mask .fa-secondary{fill:#000}pinch-zoom{display:block;overflow:hidden;touch-action:none;--scale: 1;--x: 0;--y: 0}pinch-zoom>*{-webkit-transform:translate(var(--x),var(--y)) scale(var(--scale));transform:translate(var(--x),var(--y)) scale(var(--scale));-webkit-transform-origin:0 0;transform-origin:0 0;will-change:transform}.panel{--__panel-background: var(--background);--__panel-backdrop-filter: var(--backdrop-filter);--_shadow: var(--shadow);position:relative;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.panel .tab-switcher .tabs{background:var(--__panel-background);-webkit-backdrop-filter:var(--__panel-backdrop-filter);backdrop-filter:var(--__panel-backdrop-filter)}.panel .panel-heading{background-color:inherit}.panel:after,.panel{border-radius:var(--roundness)}.panel:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:5;box-shadow:var(--_shadow);pointer-events:none}.panel-body{padding:var(--panel-body-padding, 0);background:var(--background);-webkit-backdrop-filter:var(--__panel-backdrop-filter);backdrop-filter:var(--__panel-backdrop-filter)}.panel-body .tab-switcher .tabs{background:none;-webkit-backdrop-filter:none;backdrop-filter:none}.panel-body:empty:before{content:"¯\\_(ツ)_/¯";display:block;padding:1em;text-align:center}.panel-body>p{line-height:1.3;padding:1em;margin:0}.panel-heading,.panel-footer{--panel-heading-height-padding: calc(var(--panel-header-height) * .2);--__panel-heading-gap: calc(var(--panel-header-height) * .1565);--__panel-heading-height: var(--panel-header-height);--__panel-heading-height-inner: calc(var(--__panel-heading-height) - 2 * var(--panel-heading-height-padding, 0));font-size:calc(var(--panelHeaderSize) / 3.2);-webkit-backdrop-filter:var(--__panel-backdrop-filter);backdrop-filter:var(--__panel-backdrop-filter);position:relative;box-sizing:border-box;display:grid;grid-auto-flow:column;grid-template-columns:minmax(50%,1fr);grid-auto-columns:auto;grid-column-gap:var(--__panel-heading-gap);-webkit-box-flex:0;flex:none;background-size:cover;padding:var(--panel-heading-height-padding);height:var(--__panel-heading-height);line-height:var(--__panel-heading-height-inner);z-index:4}.panel-heading.-flexible-height,.panel-footer.-flexible-height{--__panel-heading-height: auto}.panel-heading.-flexible-height:after,.panel-heading.-flexible-height:before,.panel-footer.-flexible-height:after,.panel-footer.-flexible-height:before{display:none}.panel-heading.-stub,.panel-heading.-stub:after,.panel-footer.-stub,.panel-footer.-stub:after{border-radius:var(--roundness)}.panel-heading.-sticky,.panel-footer.-sticky{position:-webkit-sticky;position:sticky;top:var(--navbar-height)}.panel-heading:after,.panel-heading:before,.panel-footer:after,.panel-footer:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.panel-heading .title,.panel-footer .title{font-size:1.3em;margin:0;font-weight:400}.panel-heading .alert,.panel-footer .alert{white-space:nowrap;text-overflow:ellipsis;overflow-x:hidden}.panel-heading:not(.-flexible-height)>.button-default,.panel-heading:not(.-flexible-height)>.alert,.panel-footer:not(.-flexible-height)>.button-default,.panel-footer:not(.-flexible-height)>.alert{height:var(--__panel-heading-height-inner);min-height:0;box-sizing:border-box;margin:0;min-width:1px;padding-top:0;padding-bottom:0;align-self:stretch}.panel-heading:not(.-flexible-height)>.alert,.panel-footer:not(.-flexible-height)>.alert{line-height:calc(var(--__panel-heading-height-inner) - 2px)}.panel-heading{border-radius:var(--roundness) var(--roundness) 0 0;border-width:0 0 1px;-webkit-box-align:start;align-items:start;background-image:-webkit-linear-gradient(top,var(--background),var(--background)),-webkit-linear-gradient(top,var(--__panel-background),var(--__panel-background));background-image:linear-gradient(to bottom,var(--background),var(--background)),linear-gradient(to bottom,var(--__panel-background),var(--__panel-background));--_shadow: var(--shadow)}.panel-heading:after{background-color:var(--background);z-index:-2;border-radius:var(--roundness) var(--roundness) 0 0;box-shadow:var(--_shadow)}.panel-heading:not(.-flexible-height)>.button-default{flex-shrink:0}.panel-heading .rightside-button{align-self:stretch;text-align:center;width:var(--__panel-heading-height);height:var(--__panel-heading-height);margin:calc(-1 * var(--panel-heading-height-padding)) 0;margin-right:calc(-1 * var(--__panel-heading-gap))}.panel-heading .rightside-button>button{box-sizing:border-box;padding:calc(1 * var(--panel-heading-height-padding)) 0;height:100%;width:100%;text-align:center}.panel-heading .rightside-button>button svg{font-size:1.2em}.panel-heading .rightside-icon{align-self:stretch;text-align:center;width:var(--__panel-heading-height);margin-right:calc(-1 * var(--__panel-heading-gap))}.panel-heading .rightside-icon svg{font-size:1.2em}.panel-footer{border-top-left-radius:0;border-top-right-radius:0;-webkit-box-align:center;align-items:center;border-width:1px 0 0;border-style:solid;border-color:var(--border);background-color:var(--__panel-background)}:root{--status-margin: .75em;--post-line-height: 1.4;--ZI_media_modal: 9000;--ZI_modals_popovers: 8500;--ZI_modals: 8000;--ZI_navbar_popovers: 7500;--ZI_navbar: 7000;--ZI_popovers: 6000;--background: var(--bg)}html{font-size:var(--textSize, 1rem);--navbar-height: var(--navbarSize, 3.5rem);--emoji-size: var(--emojiSize, 32px);--panel-header-height: var(--panelHeaderSize, 3.2rem)}body{font-family:sans-serif;font-family:var(--font);margin:0;padding:0;color:var(--text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overscroll-behavior-y:none;overflow:clip scroll}body.hidden{display:none}@media (any-pointer: fine){*{scrollbar-color:var(--fg) transparent}*::-webkit-scrollbar{background:transparent}*::-webkit-scrollbar-corner{background:transparent}*::-webkit-resizer{background-color:transparent!important;background-image:-webkit-linear-gradient(315deg,transparent calc(50% - 1px),var(--textFaint) 50%,transparent calc(50% + 1px),transparent calc(75% - 1px),var(--textFaint) 75%,transparent calc(75% + 1px));background-image:linear-gradient(135deg,transparent calc(50% - 1px),var(--textFaint) 50%,transparent calc(50% + 1px),transparent calc(75% - 1px),var(--textFaint) 75%,transparent calc(75% + 1px))}*::-webkit-scrollbar-button,*::-webkit-scrollbar-thumb{box-shadow:var(--shadow);border-radius:var(--roundness)}*::-webkit-scrollbar-button{--___bgPadding: 2px;color:var(--text);background-repeat:no-repeat,no-repeat}*::-webkit-scrollbar-button:horizontal{background-size:50% calc(50% - var(--___bgPadding)),50% calc(50% - var(--___bgPadding))}*::-webkit-scrollbar-button:horizontal:increment{background-image:-webkit-linear-gradient(45deg,var(--text) 50%,transparent 51%),-webkit-linear-gradient(135deg,transparent 50%,var(--text) 51%);background-image:linear-gradient(45deg,var(--text) 50%,transparent 51%),linear-gradient(-45deg,transparent 50%,var(--text) 51%);background-position:top var(--___bgPadding) left 50%,right 50% bottom var(--___bgPadding)}*::-webkit-scrollbar-button:horizontal:decrement{background-image:-webkit-linear-gradient(45deg,transparent 50%,var(--text) calc(50% + 1px)),-webkit-linear-gradient(135deg,var(--text) 50%,transparent 51%);background-image:linear-gradient(45deg,transparent 50%,var(--text) calc(50% + 1px)),linear-gradient(-45deg,var(--text) 50%,transparent 51%);background-position:bottom var(--___bgPadding) right 50%,left 50% top var(--___bgPadding)}*::-webkit-scrollbar-button:vertical{background-size:calc(50% - var(--___bgPadding)) 50%,calc(50% - var(--___bgPadding)) 50%}*::-webkit-scrollbar-button:vertical:increment{background-image:-webkit-linear-gradient(135deg,transparent 50%,var(--text) 51%),-webkit-linear-gradient(45deg,transparent 50%,var(--text) 51%);background-image:linear-gradient(-45deg,transparent 50%,var(--text) 51%),linear-gradient(45deg,transparent 50%,var(--text) 51%);background-position:right var(--___bgPadding) top 50%,left var(--___bgPadding) top 50%}*::-webkit-scrollbar-button:vertical:decrement{background-image:-webkit-linear-gradient(135deg,var(--text) 50%,transparent 51%),-webkit-linear-gradient(45deg,var(--text) 50%,transparent 51%);background-image:linear-gradient(-45deg,var(--text) 50%,transparent 51%),linear-gradient(45deg,var(--text) 50%,transparent 51%);background-position:left var(--___bgPadding) top 50%,right var(--___bgPadding) top 50%}html{scrollbar-color:var(--fg) var(--wallpaper);background:var(--wallpaper)}}a{text-decoration:none;color:var(--link)}h4{margin:0}.iconLetter{display:inline-block;text-align:center;font-weight:1000}i[class*=icon-],.svg-inline--fa,.iconLetter{color:var(--icon)}nav{z-index:var(--ZI_navbar);box-shadow:var(--shadow);box-sizing:border-box;height:var(--navbar-height);font-size:calc(var(--navbar-height) / 3.5);position:fixed}#sidebar{grid-area:sidebar}#modal{position:absolute;z-index:var(--ZI_modals)}.column.-scrollable{top:var(--navbar-height);position:-webkit-sticky;position:sticky}#main-scroller{grid-area:content;position:relative}#notifs-column{grid-area:notifs}.app-bg-wrapper{position:fixed;height:100%;top:var(--navbar-height);z-index:-1000;left:0;right:-20px;background-size:cover;background-repeat:no-repeat;background-color:var(--wallpaper);background-image:var(--body-background-image);background-position:50%}.underlay{grid-column:1/span 3;grid-row:1/1;pointer-events:none;background-color:var(--underlay);z-index:-1000}.app-layout{--miniColumn: 25rem;--maxiColumn: 45rem;--columnGap: 1rem;--effectiveSidebarColumnWidth: minmax(var(--miniColumn), var(--sidebarColumnWidth, var(--miniColumn)));--effectiveNotifsColumnWidth: minmax(var(--miniColumn), var(--notifsColumnWidth, var(--miniColumn)));--effectiveContentColumnWidth: minmax(var(--miniColumn), var(--contentColumnWidth, var(--maxiColumn)));position:relative;display:grid;grid-template-columns:var(--effectiveSidebarColumnWidth) var(--effectiveContentColumnWidth);grid-template-areas:"sidebar content";grid-template-rows:1fr;box-sizing:border-box;margin:0 auto;place-content:flex-start center;flex-wrap:wrap;min-height:100vh;overflow-x:clip}.app-layout .column{--___columnMargin: var(--columnGap);display:grid;grid-template-columns:100%;box-sizing:border-box;grid-row:1/1;margin:0 calc(var(--___columnMargin) / 2);padding:calc(var(--___columnMargin)) 0;row-gap:var(--___columnMargin);align-content:start}.app-layout .column:not(.-scrollable){margin-top:var(--navbar-height)}.app-layout .column:hover{z-index:2}.app-layout .column.-full-height{margin-bottom:0;padding-top:0;padding-bottom:0}.app-layout .column.-scrollable{--___paddingIncrease: calc(var(--columnGap) / 2);position:-webkit-sticky;position:sticky;top:var(--navbar-height);max-height:calc(100vh - var(--navbar-height));overflow:hidden auto;margin-left:calc(var(--___paddingIncrease) * -1);padding-left:calc(var(--___paddingIncrease) + var(--___columnMargin) / 2)}@supports (scrollbar-width: none) or (-webkit-text-fill-color: initial){.app-layout .column.-scrollable:not(.-show-scrollbar){scrollbar-width:none;margin-right:calc(var(--___paddingIncrease) * -1);padding-right:calc(var(--___paddingIncrease) + var(--___columnMargin) / 2)}.app-layout .column.-scrollable:not(.-show-scrollbar)::-webkit-scrollbar{display:block;width:0}}.app-layout .column.-scrollable .panel-heading.-sticky{top:calc(var(--columnGap) / -1)}.app-layout.-has-new-post-button .column{padding-bottom:10rem}.app-layout.-no-sticky-headers .column .panel-heading.-sticky{position:relative;top:0}.app-layout .column-inner{display:grid;grid-template-columns:100%;box-sizing:border-box;row-gap:1em;align-content:start}.app-layout.-reverse:not(.-wide,.-mobile){grid-template-columns:var(--effectiveContentColumnWidth) var(--effectiveSidebarColumnWidth);grid-template-areas:"content sidebar"}.app-layout.-wide{grid-template-columns:var(--effectiveSidebarColumnWidth) var(--effectiveContentColumnWidth) var(--effectiveNotifsColumnWidth);grid-template-areas:"sidebar content notifs"}.app-layout.-wide.-reverse{grid-template-columns:var(--effectiveNotifsColumnWidth) var(--effectiveContentColumnWidth) var(--effectiveSidebarColumnWidth);grid-template-areas:"notifs content sidebar"}.app-layout.-mobile{grid-template-columns:100vw;grid-template-areas:"content";padding:0}.app-layout.-mobile .column{padding-top:0;margin:var(--navbar-height) 0 0 0}.app-layout.-mobile .panel-heading,.app-layout.-mobile .panel-heading:after,.app-layout.-mobile .panel-heading:before,.app-layout.-mobile .panel,.app-layout.-mobile .panel:after{border-top-left-radius:0;border-top-right-radius:0}.app-layout.-mobile #sidebar,.app-layout.-mobile #notifs-column,.app-layout.-normal #notifs-column{display:none}.text-center{text-align:center}.button-default{-webkit-user-select:none;user-select:none;color:var(--text);border:none;cursor:pointer;background-color:var(--background);box-shadow:var(--shadow);font-size:1em;font-family:sans-serif;font-family:var(--font)}.button-default.-transparent{-webkit-backdrop-filter:blur(.125em) contrast(60%);backdrop-filter:blur(.125em) contrast(60%)}.button-default::-moz-focus-inner{border:none}.button-default:disabled{cursor:not-allowed}.button-default:active{-webkit-transform:translate(1px,1px);transform:translate(1px,1px)}.menu-item{line-height:var(--__line-height);font-family:inherit;font-weight:400;font-size:100%;cursor:pointer}.menu-item a,.menu-item button:not(.button-default){color:var(--text);font-size:100%}.menu-item.disabled{cursor:not-allowed}.list-item{border-color:var(--border);border-style:solid;border-width:0;border-top-width:1px}.list-item.-active,.list-item:hover{border-top-width:1px;border-bottom-width:1px}.list-item.-active+.list-item,.list-item:hover+.list-item{border-top-width:0}.list-item:hover+.menu-item-collapsible:not(.-expanded)+.list-item,.list-item.-active+.menu-item-collapsible:not(.-expanded)+.list-item{border-top-width:0}.list-item[aria-expanded=true]{border-bottom-width:1px}.list-item:first-child{border-top-right-radius:var(--roundness);border-top-left-radius:var(--roundness);border-top-width:0}.list-item:last-child{border-bottom-right-radius:var(--roundness);border-bottom-left-radius:var(--roundness);border-bottom-width:0}.menu-item,.list-item{display:block;box-sizing:border-box;border:none;outline:none;text-align:initial;color:inherit;clear:both;position:relative;white-space:nowrap;width:100%;padding:var(--__vertical-gap) var(--__horizontal-gap);background:transparent;--__line-height: 1.5em;--__horizontal-gap: .75em;--__vertical-gap: .5em}.menu-item.-non-interactive,.list-item.-non-interactive{cursor:auto}.menu-item a,.menu-item button:not(.button-default),.list-item a,.list-item button:not(.button-default){text-align:initial;padding:0;background:none;border:none;outline:none;display:inline;font-family:inherit;line-height:unset}.button-unstyled{border:none;outline:none;display:inline;text-align:initial;font-size:100%;font-family:inherit;box-shadow:var(--shadow);background-color:transparent;padding:0;line-height:unset;cursor:pointer;box-sizing:content-box;color:inherit}.button-unstyled.-link{color:var(--link)!important}label.-disabled{color:var(--textFaint)}input,textarea{border:none;display:inline-block;outline:none}.input{--_padding: .5em;border:none;background-color:var(--background);color:var(--text);box-shadow:var(--shadow);font-family:var(--font);font-size:1em;margin:0;box-sizing:border-box;display:inline-block;position:relative;line-height:2;-webkit-hyphens:none;hyphens:none;padding:0 var(--_padding)}.input.unstyled{border-radius:0;background:none!important;box-shadow:none;height:unset}.input::-webkit-input-placeholder{color:var(--textFaint)}.input::placeholder{color:var(--textFaint)}.input:disabled,.input[disabled=disabled],.input.disabled{cursor:not-allowed;color:var(--textFaint);background-color:transparent!important}.input[type=range]{background:none;border:none;margin:0;box-shadow:none;-webkit-box-flex:1;flex:1}.input[type=radio]{display:none}.input[type=radio]:checked+label:before{box-shadow:var(--shadow);background-color:var(--background);color:var(--text)}.input[type=radio]:disabled{background-color:var(--background)}.input[type=radio]:disabled,.input[type=radio]:disabled+label,.input[type=radio]:disabled+label:before{opacity:.5}.input[type=radio]+label:before{flex-shrink:0;display:inline-block;content:"•";-webkit-transition:box-shadow .2s;transition:box-shadow .2s;width:1.1em;height:1.1em;border-radius:100%;background-color:var(--background);box-shadow:var(--shadow);margin-right:.5em;vertical-align:top;text-align:center;line-height:1.1;font-size:1.1em;box-sizing:border-box;color:transparent;overflow:hidden}.input[type=checkbox]:checked+label:before{color:var(--text);background-color:var(--background);box-shadow:var(--shadow)}.input[type=checkbox]:disabled,.input[type=checkbox]:disabled+label,.input[type=checkbox]:disabled+label:before{opacity:.5}.input[type=checkbox]+label:before{flex-shrink:0;display:inline-block;content:"✓";-webkit-transition:color .2s;transition:color .2s;width:1.1em;height:1.1em;border-radius:var(--roundness);box-shadow:var(--shadow);margin-right:.5em;vertical-align:top;text-align:center;line-height:1.1;font-size:1.1em;box-sizing:border-box;color:transparent;overflow:hidden}.input.resize-height{resize:vertical}.input,.button-default{--_roundness-left: var(--roundness);--_roundness-right: var(--roundness);border-top-left-radius:var(--_roundness-left);border-bottom-left-radius:var(--_roundness-left);border-top-right-radius:var(--_roundness-right);border-bottom-right-radius:var(--_roundness-right)}textarea.input{padding:var(--_padding);line-height:var(--post-line-height)}option{color:var(--text);background-color:var(--background)}.hide-number-spinner{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.hide-number-spinner[type=number]::-webkit-inner-spin-button,.hide-number-spinner[type=number]::-webkit-outer-spin-button{opacity:0;display:none}.cards-list{list-style:none;display:grid;grid-auto-flow:row dense;grid-template-columns:repeat(auto-fit,minmax(20em,1fr));grid-gap:.5em}.cards-list li{border:1px solid var(--border);border-radius:var(--roundness);padding:.5em;margin:.25em}.btn-group{position:relative;display:-webkit-inline-box;display:inline-flex;vertical-align:middle}.btn-group>*,.btn-group>* .button-default{--_roundness-left: 0;--_roundness-right: 0;position:relative}.btn-group>*:first-child,.btn-group>*:first-child .button-default{--_roundness-left: var(--roundness)}.btn-group>*:last-child,.btn-group>*:last-child .button-default{--_roundness-right: var(--roundness)}.fa{color:gray}.mobile-shown{display:none}.badge{box-sizing:border-box;display:inline-block;border-radius:99px;max-width:10em;min-width:1.7em;height:1.3em;padding:.15em;vertical-align:middle;font-weight:400;font-style:normal;font-size:.9em;line-height:1;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.badge.-dot,.badge.-counter{margin:0;position:absolute}.badge.-dot{min-height:.6em;max-height:.6em;min-width:.6em;max-width:.6em;left:calc(50% + .5em);top:calc(50% - 1em);line-height:0;padding:0;margin:0}.badge.-counter{border-radius:var(--roundness);font-size:.75em;line-height:1;text-align:right;padding:.2em;min-width:0;left:calc(50% - .5em);top:calc(50% - .4em);margin-left:.7em;margin-top:-1em}.alert{margin:0 .35em;padding:0 .25em;border-radius:var(--roundness);border:1px solid var(--border)}.faint{--text: var(--textFaint);--link: var(--linkFaint);color:var(--text)}.notice-dismissible{padding-right:4rem;position:relative}.notice-dismissible .dismiss{position:absolute;top:0;right:0;padding:.5em;color:inherit}.fa-scale-110.svg-inline--fa,.fa-scale-110.iconLetter{font-size:1.1em}.fa-scale-110.svg-inline--fa{vertical-align:-.15em}.fa-old-padding.iconLetter,.fa-old-padding.svg-inline--fa,.fa-old-padding-layer{padding:0 .3em}.veryfaint{opacity:.25}.timeago{--link: var(--text);--linkFaint: var(--textFaint)}.login-hint{text-align:center}@media all and (width >= 801px){.login-hint{display:none}}.login-hint a{display:inline-block;padding:1em 0;width:100%}.btn.button-default{min-height:2em}.new-status-notification{position:relative;font-size:1.1em;z-index:1;-webkit-box-flex:1;flex:1}@media all and (width <= 800px){.mobile-hidden{display:none}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-webkit-keyframes shakeError{0%{-webkit-transform:translateX(0);transform:translate(0)}15%{-webkit-transform:translateX(.375rem);transform:translate(.375rem)}30%{-webkit-transform:translateX(-.375rem);transform:translate(-.375rem)}45%{-webkit-transform:translateX(.375rem);transform:translate(.375rem)}60%{-webkit-transform:translateX(-.375rem);transform:translate(-.375rem)}75%{-webkit-transform:translateX(.375rem);transform:translate(.375rem)}90%{-webkit-transform:translateX(-.375rem);transform:translate(-.375rem)}to{-webkit-transform:translateX(0);transform:translate(0)}}@keyframes shakeError{0%{-webkit-transform:translateX(0);transform:translate(0)}15%{-webkit-transform:translateX(.375rem);transform:translate(.375rem)}30%{-webkit-transform:translateX(-.375rem);transform:translate(-.375rem)}45%{-webkit-transform:translateX(.375rem);transform:translate(.375rem)}60%{-webkit-transform:translateX(-.375rem);transform:translate(-.375rem)}75%{-webkit-transform:translateX(.375rem);transform:translate(.375rem)}90%{-webkit-transform:translateX(-.375rem);transform:translate(-.375rem)}to{-webkit-transform:translateX(0);transform:translate(0)}}.fade-enter-active,.fade-leave-active{-webkit-transition:opacity .3s;transition:opacity .3s}.fade-enter-from,.fade-leave-active{opacity:0}.visible-for-screenreader-only{display:block;width:1px;height:1px;margin:-1px;overflow:hidden;visibility:visible;clip:rect(0 0 0 0);padding:0;position:absolute}*::selection{color:var(--selectionText);background-color:var(--selectionBackground)}#splash{pointer-events:none}#splash #status.css-ok:before{display:inline-block;content:"CSS OK"}#splash #status .initial-text{display:none}#splash #throbber{-webkit-animation-duration:3s;animation-duration:3s;-webkit-animation-name:bounce;animation-name:bounce;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-direction:normal;animation-direction:normal;-webkit-transform-origin:bottom center;transform-origin:bottom center}#splash #throbber.dead{-webkit-animation-name:dead;animation-name:dead;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transform:rotateX(90deg) rotateY(0) rotateZ(-45deg);transform:rotateX(90deg) rotateY(0) rotate(-45deg)}@-webkit-keyframes dead{0%{-webkit-transform:rotateX(0) rotateY(0) rotateZ(0);transform:rotateX(0) rotateY(0) rotate(0)}5%{-webkit-transform:rotateX(0) rotateY(0) rotateZ(1deg);transform:rotateX(0) rotateY(0) rotate(1deg)}10%{-webkit-transform:rotateX(0) rotateY(0) rotateZ(-2deg);transform:rotateX(0) rotateY(0) rotate(-2deg)}15%{-webkit-transform:rotateX(0) rotateY(0) rotateZ(3deg);transform:rotateX(0) rotateY(0) rotate(3deg)}20%{-webkit-transform:rotateX(0) rotateY(0) rotateZ(0);transform:rotateX(0) rotateY(0) rotate(0)}25%{-webkit-transform:rotateX(0) rotateY(0) rotateZ(0);transform:rotateX(0) rotateY(0) rotate(0)}30%{-webkit-transform:rotateX(10deg) rotateY(0) rotateZ(0);transform:rotateX(10deg) rotateY(0) rotate(0)}35%{-webkit-transform:rotateX(-10deg) rotateY(0) rotateZ(0);transform:rotateX(-10deg) rotateY(0) rotate(0)}40%{-webkit-transform:rotateX(10deg) rotateY(0) rotateZ(0);transform:rotateX(10deg) rotateY(0) rotate(0)}45%{-webkit-transform:rotateX(-10deg) rotateY(0) rotateZ(0);transform:rotateX(-10deg) rotateY(0) rotate(0)}50%{-webkit-transform:rotateX(10deg) rotateY(0) rotateZ(0);transform:rotateX(10deg) rotateY(0) rotate(0)}to{-webkit-transform:rotateX(90deg) rotateY(0) rotateZ(-45deg);transform:rotateX(90deg) rotateY(0) rotate(-45deg);-webkit-transition-timing-function:cubic-bezier(.755,.05,.855,.06);transition-timing-function:cubic-bezier(.755,.05,.855,.06)}}@keyframes dead{0%{-webkit-transform:rotateX(0) rotateY(0) rotateZ(0);transform:rotateX(0) rotateY(0) rotate(0)}5%{-webkit-transform:rotateX(0) rotateY(0) rotateZ(1deg);transform:rotateX(0) rotateY(0) rotate(1deg)}10%{-webkit-transform:rotateX(0) rotateY(0) rotateZ(-2deg);transform:rotateX(0) rotateY(0) rotate(-2deg)}15%{-webkit-transform:rotateX(0) rotateY(0) rotateZ(3deg);transform:rotateX(0) rotateY(0) rotate(3deg)}20%{-webkit-transform:rotateX(0) rotateY(0) rotateZ(0);transform:rotateX(0) rotateY(0) rotate(0)}25%{-webkit-transform:rotateX(0) rotateY(0) rotateZ(0);transform:rotateX(0) rotateY(0) rotate(0)}30%{-webkit-transform:rotateX(10deg) rotateY(0) rotateZ(0);transform:rotateX(10deg) rotateY(0) rotate(0)}35%{-webkit-transform:rotateX(-10deg) rotateY(0) rotateZ(0);transform:rotateX(-10deg) rotateY(0) rotate(0)}40%{-webkit-transform:rotateX(10deg) rotateY(0) rotateZ(0);transform:rotateX(10deg) rotateY(0) rotate(0)}45%{-webkit-transform:rotateX(-10deg) rotateY(0) rotateZ(0);transform:rotateX(-10deg) rotateY(0) rotate(0)}50%{-webkit-transform:rotateX(10deg) rotateY(0) rotateZ(0);transform:rotateX(10deg) rotateY(0) rotate(0)}to{-webkit-transform:rotateX(90deg) rotateY(0) rotateZ(-45deg);transform:rotateX(90deg) rotateY(0) rotate(-45deg);-webkit-transition-timing-function:cubic-bezier(.755,.05,.855,.06);transition-timing-function:cubic-bezier(.755,.05,.855,.06)}}@-webkit-keyframes bounce{0%{scale:1 1;translate:0 0;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}10%{scale:1.2 .8;translate:0 0;-webkit-transform:rotateZ(var(--defaultZ));transform:rotate(var(--defaultZ));-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}30%{scale:.9 1.1;translate:0 -40%;-webkit-transform:rotateZ(var(--defaultZ));transform:rotate(var(--defaultZ));-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}40%{scale:1.1 .9;translate:0 -50%;-webkit-transform:rotateZ(var(--defaultZ));transform:rotate(var(--defaultZ));-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}45%{scale:.9 1.1;translate:0 -45%;-webkit-transform:rotateZ(var(--defaultZ));transform:rotate(var(--defaultZ));-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}50%{scale:1.05 .95;translate:0 -40%;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}55%{scale:.985 1.025;translate:0 -35%;-webkit-transform:rotateZ(var(--defaultZ));transform:rotate(var(--defaultZ));-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{scale:1.0125 .9985;translate:0 -30%;-webkit-transform:rotateZ(var(--defaultZ));transform:rotate(var(--defaultZ));-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{scale:1.0063 .9938;translate:0 -10%;-webkit-transform:rotateZ(var(--defaultZ));transform:rotate(var(--defaultZ));-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}90%{scale:1.2 .8;translate:0 0;-webkit-transform:rotateZ(var(--defaultZ));transform:rotate(var(--defaultZ));-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}to{scale:1 1;translate:0 0;-webkit-transform:rotateZ(var(--defaultZ));transform:rotate(var(--defaultZ));-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes bounce{0%{scale:1 1;translate:0 0;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}10%{scale:1.2 .8;translate:0 0;-webkit-transform:rotateZ(var(--defaultZ));transform:rotate(var(--defaultZ));-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}30%{scale:.9 1.1;translate:0 -40%;-webkit-transform:rotateZ(var(--defaultZ));transform:rotate(var(--defaultZ));-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}40%{scale:1.1 .9;translate:0 -50%;-webkit-transform:rotateZ(var(--defaultZ));transform:rotate(var(--defaultZ));-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}45%{scale:.9 1.1;translate:0 -45%;-webkit-transform:rotateZ(var(--defaultZ));transform:rotate(var(--defaultZ));-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}50%{scale:1.05 .95;translate:0 -40%;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}55%{scale:.985 1.025;translate:0 -35%;-webkit-transform:rotateZ(var(--defaultZ));transform:rotate(var(--defaultZ));-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{scale:1.0125 .9985;translate:0 -30%;-webkit-transform:rotateZ(var(--defaultZ));transform:rotate(var(--defaultZ));-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{scale:1.0063 .9938;translate:0 -10%;-webkit-transform:rotateZ(var(--defaultZ));transform:rotate(var(--defaultZ));-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}90%{scale:1.2 .8;translate:0 0;-webkit-transform:rotateZ(var(--defaultZ));transform:rotate(var(--defaultZ));-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}to{scale:1 1;translate:0 0;-webkit-transform:rotateZ(var(--defaultZ));transform:rotate(var(--defaultZ));-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@property --shadow{syntax: "*"; inherits: false;}.thread-tree-replies{margin-left:var(--status-margin);border-left:2px solid var(--border)}.thread-tree-replies-hidden{padding:var(--status-margin);display:-webkit-box;display:flex;-webkit-box-align:stretch;align-items:stretch;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.Conversation{z-index:1}.Conversation.-hidden{background:var(--__panel-background);-webkit-backdrop-filter:var(--__panel-backdrop-filter);backdrop-filter:var(--__panel-backdrop-filter)}.Conversation .conversation-dive-to-top-level-box{padding:var(--status-margin);border-bottom:1px solid var(--border);border-radius:0;display:-webkit-box;display:flex;-webkit-box-align:stretch;align-items:stretch;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.Conversation .thread-ancestors{margin-left:var(--status-margin);border-left:2px solid var(--border)}.Conversation .thread-ancestor.-faded .RichContent{--text: var(--textFaint) !important;--link: var(--linkFaint) !important;--funtextGreentext: var(--funtextGreentextFaint) !important;--funtextCyantext: var(--funtextCyantextFaint) !important}.Conversation .thread-ancestor-dive-box{padding-left:var(--status-margin);border-bottom:1px solid var(--border);border-radius:0}.Conversation .thread-ancestor-dive-box,.Conversation .thread-ancestor-dive-box-inner{display:-webkit-box;display:flex;-webkit-box-align:stretch;align-items:stretch;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.Conversation .thread-ancestor-dive-box-inner{padding:var(--status-margin)}.Conversation .conversation-status{border-bottom:1px solid var(--border);border-radius:0}.Conversation .thread-ancestor-has-other-replies .conversation-status,.Conversation:last-child:not(.-expanded) .conversation-status,.Conversation.-expanded .conversation-status:last-child,.Conversation .thread-ancestor:last-child .conversation-status,.Conversation .thread-ancestor:last-child .thread-ancestor-dive-box,.Conversation.-expanded .thread-tree .conversation-status{border-bottom:none}.Conversation .thread-ancestors+.thread-tree>.conversation-status{border-top:1px solid var(--border)}.Conversation.status-fadein.-expanded .thread-body{border-left:4px solid var(--cRed);border-radius:var(--roundness);border-top-left-radius:0;border-top-right-radius:0;border-bottom:1px solid var(--border)}.Conversation.-expanded.status-fadein{--___margin: calc(var(--status-margin) / 2);background:var(--background);margin:var(--___margin)}.Conversation.-expanded.status-fadein:before{z-index:-1;content:"";display:block;position:absolute;inset:calc(var(--___margin) * -1);background:var(--background);-webkit-backdrop-filter:var(--__panel-backdrop-filter);backdrop-filter:var(--__panel-backdrop-filter)}.timeline-menu-popover{min-width:24rem;max-width:100vw;margin-top:.6rem;font-size:1rem;border-top-right-radius:0;border-top-left-radius:0}.timeline-menu-popover ul{list-style:none;margin:0;padding:0}.TimelineMenu{margin-right:auto;min-width:0}.TimelineMenu .popover-trigger-button{vertical-align:bottom}.TimelineMenu .panel:after{border-top-right-radius:0;border-top-left-radius:0}.TimelineMenu .timeline-menu-title{margin:0;cursor:pointer;-webkit-user-select:none;user-select:none;width:100%;display:-webkit-box;display:flex}.TimelineMenu .timeline-menu-title .timeline-menu-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.TimelineMenu .timeline-menu-title svg{margin-left:.6em;-webkit-transition:-webkit-transform .1s;transition:-webkit-transform .1s;transition:transform .1s;transition:transform .1s,-webkit-transform .1s}.TimelineMenu .timeline-menu-title .click-blocker{cursor:default;-webkit-box-flex:1;flex-grow:1}.TimelineMenu.open .timeline-menu-title svg{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.TimelineMenu .panel{box-shadow:var(--popoverShadow)}.scroll-to-top{display:none}.-scrolled .scroll-to-top{display:inline-block}.Timeline .timeline-body{background:none;-webkit-backdrop-filter:none;backdrop-filter:none}.Timeline .alert-badge{font-size:.75em;line-height:1;text-align:right;border-radius:var(--roundness);position:absolute;left:calc(50% - .5em);top:calc(50% - .4em);padding:.2em;margin-left:.7em;margin-top:-1em}.Timeline .loadmore-button{position:relative}.Timeline.-blocked{cursor:progress}.Timeline .conversation-heading{top:calc(var(--__panel-heading-height) * var(--currentPanelStack, 1) + var(--navbar-height));z-index:2}.Timeline.-embedded .timeline-heading{text-align:center;line-height:2.75em;padding:0 .5em}.Timeline.-embedded .timeline-heading:empty:before{content:initial}.Timeline.-embedded .timeline-heading .button-default,.Timeline.-embedded .timeline-heading .alert{line-height:2em;width:100%}.tab-switcher{display:-webkit-box;display:flex}.tab-switcher .tab-icon{margin:.2em auto;display:block}.tab-switcher.top-tabs{-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.tab-switcher.top-tabs>.tabs{width:100%;overflow:auto hidden;padding-top:5px;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-flex:0;flex:0 0 auto}.tab-switcher.top-tabs>.tabs:after,.tab-switcher.top-tabs>.tabs:before{content:"";-webkit-box-flex:1;flex:1 1 auto;border-bottom:1px solid;border-bottom-color:var(--border)}.tab-switcher.top-tabs>.tabs .tab-wrapper{height:2em}.tab-switcher.top-tabs>.tabs .tab-wrapper:not(.active):after{left:0;right:0;bottom:0;border-bottom:1px solid;border-bottom-color:var(--border)}.tab-switcher.top-tabs>.tabs .tab{width:100%;min-width:1px;border-bottom-left-radius:0;border-bottom-right-radius:0;padding-bottom:99px;margin-bottom:-93px}.tab-switcher.top-tabs .contents.scrollable-tabs{flex-basis:0}.tab-switcher .contents{-webkit-box-flex:1;flex:1 0 auto;min-height:0}.tab-switcher .contents .hidden{display:none}.tab-switcher .contents .-full-height:not(.hidden){height:100%;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.tab-switcher .contents .-full-height:not(.hidden)>*:not(.mobile-label){-webkit-box-flex:1;flex:1}.tab-switcher .contents .-full-width:not(.hidden){display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.tab-switcher .contents .-full-width:not(.hidden)>*:not(.mobile-label){width:auto}.tab-switcher .contents.scrollable-tabs{overflow-y:auto}.tab-switcher .tab{-webkit-user-select:none;user-select:none;color:var(--text);border:none;cursor:pointer;box-shadow:var(--shadow);font-size:1em;font-family:var(--font);border-radius:var(--roundness);background-color:var(--background);position:relative;white-space:nowrap;padding:6px 1em}.tab-switcher .tab:not(.active){z-index:4;margin-top:.25em}.tab-switcher .tab:not(.active):hover{z-index:6}.tab-switcher .tab.active{background:transparent;z-index:5}.tab-switcher .tab img{max-height:1.9em;vertical-align:top;margin-top:-.3em}.tab-switcher .tabs{display:-webkit-box;display:flex;position:relative;box-sizing:border-box}.tab-switcher .tabs:after,.tab-switcher .tabs:before{display:block;-webkit-box-flex:1;flex:1 1 auto}.tab-switcher .tab-wrapper{position:relative;display:-webkit-box;display:flex;-webkit-box-flex:0;flex:0 0 auto}.tab-switcher .tab-wrapper:not(.active):after{content:"";position:absolute;z-index:7}.tab-switcher .mobile-label{padding-left:.3em;padding-bottom:.25em;margin-top:.5em;margin-left:.2em;margin-bottom:.25em;border-bottom:1px solid var(--border)}@media all and (width >= 800px){.tab-switcher .mobile-label{display:none}}.chat-title{display:-webkit-box;display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;--emoji-size: 1em}.chat-title .username{max-width:100%;text-overflow:ellipsis;white-space:nowrap;display:inline;overflow:hidden}.chat-title .avatar-container{align-self:center;line-height:1}.chat-title .titlebar-avatar{margin-right:.5em;height:1.5em;width:1.5em;border-radius:var(--roundness)}.chat-title .titlebar-avatar.animated:before{display:none}.chat-list-item{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;overflow:hidden;box-sizing:border-box;cursor:pointer}.chat-list-item :focus{outline:none}.chat-list-item .chat-list-item-left{margin-right:1em}.chat-list-item .chat-list-item-center{width:100%;box-sizing:border-box;overflow:hidden}.chat-list-item .heading{width:100%;display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;line-height:1em}.chat-list-item .heading-right{white-space:nowrap}.chat-list-item .name-and-account-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;flex-shrink:1;line-height:var(--post-line-height)}.chat-list-item .chat-preview{display:-webkit-box;display:flex;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin:.35em 0;color:var(--textFaint);width:100%}.chat-list-item a{color:var(--linkFaint);text-decoration:none;pointer-events:none}.chat-list-item:hover .animated.avatar canvas{display:none}.chat-list-item:hover .animated.avatar img{visibility:visible}.chat-list-item .chat-preview-body{--emoji-size: 1.4em;padding-right:1em}.chat-list-item .time-wrapper{line-height:var(--post-line-height)}.basic-user-card{display:-webkit-box;display:flex;-webkit-box-flex:1;flex:1 0;margin:0;--emoji-size: 1em}.basic-user-card-collapsed-content{margin-left:.7em;text-align:left;-webkit-box-flex:1;flex:1;min-width:0}.basic-user-card-user-name img{object-fit:contain;height:16px;width:16px;vertical-align:middle}.basic-user-card-user-name-value,.basic-user-card-screen-name{display:inline-block;max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.basic-user-card-expanded-content{-webkit-box-flex:1;flex:1;margin-left:.7em;min-width:0}.chat-new .input-wrap{display:-webkit-box;display:flex;margin:.7em .5em}.chat-new .input-wrap input{width:100%}.chat-new .search-icon{margin-right:.3em}.chat-new .member-list{padding-bottom:.7rem}.chat-new .go-back-button{text-align:center;line-height:1;height:100%;align-self:start;width:var(--__panel-heading-height-inner)}.chat-list{min-height:25em;margin-bottom:0}.empty-chat-list-alert{padding:3em;font-size:1.2em;display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;color:var(--textFaint)}.chat-message-wrapper.hovered-message-chain .animated.Avatar canvas{display:none}.chat-message-wrapper.hovered-message-chain .animated.Avatar img{visibility:visible}.chat-message-wrapper .chat-message-menu{-webkit-transition:opacity .1s;transition:opacity .1s;opacity:0;position:absolute;top:-.8em}.chat-message-wrapper .chat-message-menu button{padding-top:.2em;padding-bottom:.2em}.chat-message-wrapper .menu-icon{cursor:pointer}.chat-message-wrapper .popover{width:12em}.chat-message-wrapper .chat-message{display:-webkit-box;display:flex;padding-bottom:.5em}.chat-message-wrapper .chat-message .status-body:hover{--_still-image-img-visibility: visible;--_still-image-canvas-visibility: hidden;--_still-image-label-visibility: hidden}.chat-message-wrapper .avatar-wrapper{margin-right:.72em;width:32px}.chat-message-wrapper .link-preview,.chat-message-wrapper .attachments{margin-bottom:1em}.chat-message-wrapper .status{background-color:var(--background);color:var(--text);border-radius:var(--roundness);display:-webkit-box;display:flex;padding:.75em;border:1px solid var(--border)}.chat-message-wrapper .created-at{position:relative;float:right;font-size:.8em;margin:-1em 0 -.5em;font-style:italic;opacity:.8}.chat-message-wrapper .without-attachment .message-content .RichContent:after{margin-right:5.4em;content:" ";display:inline-block}.chat-message-wrapper .pending .status-content.media-body,.chat-message-wrapper .pending .created-at{color:var(--faint)}.chat-message-wrapper .error .status-content.media-body,.chat-message-wrapper .error .created-at{color:var(--badgeNotification)}.chat-message-wrapper .chat-message-inner{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-align:start;align-items:flex-start;max-width:80%;min-width:10em;width:100%}.chat-message-wrapper .outgoing{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;place-content:end flex-end}.chat-message-wrapper .outgoing .chat-message-inner{-webkit-box-align:end;align-items:flex-end}.chat-message-wrapper .outgoing .chat-message-menu{right:.4rem}.chat-message-wrapper .incoming .chat-message-menu{left:.4rem}.chat-message-wrapper .chat-message-inner.with-media,.chat-message-wrapper .chat-message-inner.with-media .status{width:100%}.chat-message-wrapper .visible{opacity:1}.chat-message-date-separator{text-align:center;margin:1.4em 0;font-size:.9em;-webkit-user-select:none;user-select:none;color:var(--textFaint)}.chat-view{display:-webkit-box;display:flex;height:100%}.chat-view .chat-view-inner{height:auto;width:100%;overflow:visible;display:-webkit-box;display:flex}.chat-view .chat-view-body{box-sizing:border-box;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;width:100%;overflow:visible;min-height:calc(100vh - var(--navbar-height));margin:0;border-radius:var(--roundness);border-bottom-left-radius:0;border-bottom-right-radius:0}.chat-view .chat-view-body:after{border-radius:0}.chat-view .message-list{padding:0 .8em;height:100%;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-pack:end;justify-content:end}.chat-view .footer{position:-webkit-sticky;position:sticky;bottom:0;z-index:1}.chat-view .chat-view-heading{grid-template-columns:auto minmax(50%,1fr)}.chat-view .go-back-button{text-align:center;line-height:1;height:100%;align-self:start;width:var(--__panel-heading-height-inner)}.chat-view .jump-to-bottom-button{width:2.5em;height:2.5em;border-radius:100%;position:absolute;right:1.3em;top:-3.2em;display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;box-shadow:0 1px 1px #0000004d,0 2px 4px #0000004d;z-index:10;-webkit-transition:.35s all;transition:.35s all;-webkit-transition-timing-function:cubic-bezier(0,1,.5,1);transition-timing-function:cubic-bezier(0,1,.5,1);opacity:0;visibility:hidden;cursor:pointer}.chat-view .jump-to-bottom-button.visible{opacity:1;visibility:visible}.chat-view .jump-to-bottom-button .unread-message-count{font-size:.8em;left:50%;margin-top:-1rem;padding:.1em;border-radius:50px;position:absolute}.chat-view .jump-to-bottom-button .chat-loading-error{width:100%;display:-webkit-box;display:flex;-webkit-box-align:end;align-items:flex-end;height:100%}.chat-view .jump-to-bottom-button .chat-loading-error .error{width:100%}.follow-card-content-container{flex-shrink:0;display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap;-webkit-box-pack:justify;justify-content:space-between;line-height:1.5em}.follow-card-button{margin-top:.5em;padding:0 1.5em;margin-left:1em}.follow-card-follow-button{margin-top:.5em;margin-left:auto;width:10em}.with-load-more-footer{padding:.9em;text-align:center;border-top:1px solid;border-top-color:var(--border)}.with-load-more-footer .error{font-size:1rem}.with-load-more-footer a{cursor:pointer}.user-profile{-webkit-box-flex:2;flex:2;--currentPanelStack: 0}.user-profile .card-wrapper{border-top-left-radius:var(--roundness);border-top-right-radius:var(--roundness)}.user-profile .panel-footer{border-bottom-left-radius:var(--roundness);border-bottom-right-radius:var(--roundness)}.user-profile .userlist-placeholder{display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;padding:2em}.user-profile .user-info{margin:1.2em}.user-profile-placeholder .panel-body{display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;padding:7em}.user-profile-placeholder .alert{padding:.75em 5em;border-width:2px}.user-profile-placeholder .alert .error-message{color:var(--text);font-weight:700}.search-result-heading{color:var(--faint);padding:.75rem;text-align:center}@media all and (width <= 800px){.search-nav-heading .tab-switcher .tabs .tab-wrapper{display:block;-webkit-box-pack:center;justify-content:center;-webkit-box-flex:1;flex:1 1 auto;text-align:center}}.search-result{box-sizing:border-box;border-bottom:1px solid;border-color:var(--border)}.search-input-container{padding:.8rem;display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center}.search-input-container .search-input{width:100%;line-height:1.125rem;font-size:1rem;padding:.5rem;box-sizing:border-box}.search-input-container .search-button{margin-left:.5em}.loading-icon{padding:1em}.trend{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center}.trend .hashtag{-webkit-box-flex:1;flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.trend .hashtag .name{color:var(--link)}.trend .count{-webkit-box-flex:0;flex:0 0 auto;width:2rem;font-size:1.5rem;line-height:2.25rem;font-weight:500;text-align:center;color:var(--text)}.more-statuses-button{height:3.5em;line-height:3.5em;width:100%}.ProfileSettingIndicator{display:inline-block;position:relative}.profilesetting-tooltip{margin:.5em 1em;min-width:10em;text-align:center}.interface-language-switcher .setting-list .setting-item{display:grid;grid-template-columns:subgrid}.interface-language-switcher .add-button{display:block;text-align:center;padding-bottom:1em}.interface-language-switcher .add-button .default-button{display:block;width:auto}.-mobile .interface-language-switcher li.setting-item{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;gap:.5em;-webkit-box-align:stretch;align-items:stretch;border-bottom:none}.-mobile .interface-language-switcher .add-button{border-bottom:1px solid var(--border)}.tos-content{margin:1em}.registration-form{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;margin:1em}.registration-form .container{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row}.registration-form .container>*{min-width:0}.registration-form .terms-of-service{-webkit-box-flex:0;flex:0 1 50%;margin:.6em 0 0 .8em}.registration-form .text-fields{margin-top:.6em;-webkit-box-flex:1;flex:1 0;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.registration-form textarea{min-height:100px;resize:vertical}.registration-form .form-group{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;padding:.3em 0;line-height:2;margin-bottom:1em}.registration-form .form-group--error{-webkit-animation-name:shakeError;animation-name:shakeError;-webkit-animation-duration:.6s;animation-duration:.6s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.registration-form .form-group--error .form--label{color:var(--cRed)}.registration-form .form-error{margin-top:-.7em;text-align:left}.registration-form .form-error span{font-size:.85em}.registration-form .form-error ul{list-style:none;padding:0 0 0 5px;margin-top:0}.registration-form .form-error ul li:before{content:"• "}.registration-form form textarea{line-height:1;resize:vertical}.registration-form .captcha{max-width:350px;margin-bottom:.4em}.registration-form .btn{margin-top:.6em;height:2em}.registration-form .error{text-align:center}.registration-notice{margin:.6em}@media all and (width <= 800px){.registration-form .container{-webkit-box-orient:vertical;-webkit-box-direction:reverse;flex-direction:column-reverse}.registration-form .container .terms-of-service{margin:0}}.password-reset-form{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-align:center;align-items:center;margin:.6em}.password-reset-form .container{display:-webkit-box;display:flex;-webkit-box-flex:1;flex:1 0;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;margin-top:.6em;max-width:18rem}.password-reset-form .container>*{min-width:0}.password-reset-form .form-group{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;margin-bottom:1em;padding:.3em 0;line-height:1.85em}.password-reset-form .error{text-align:center;-webkit-animation-name:shakeError;animation-name:shakeError;-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.password-reset-form .alert{padding:.5em;margin:.3em 0 1em}.password-reset-form .notice-dismissible{padding-right:2rem}.password-reset-form .dismiss{cursor:pointer}.follow-request-card-content-container{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-flow:row wrap}.follow-request-card-content-container button{margin-top:.5em;margin-right:.5em;-webkit-box-flex:1;flex:1 1;max-width:12em;min-width:8em}.follow-request-card-content-container button:last-child{margin-right:0}.staff-group{padding:1em}.staff-group .basic-user-card{padding-left:0}.mrf-section{margin:1em}.mrf-section table{width:100%;text-align:left;padding-left:.5em;padding-bottom:1.1em}.mrf-section table th,.mrf-section table td{width:11em;max-width:25em;overflow:hidden;vertical-align:text-top}.mrf-section table th+th,.mrf-section table td+td{width:auto}.list-card{display:-webkit-box;display:flex}.list-name{-webkit-box-flex:1;flex-grow:1}.list-name,.button-list-edit{margin:0;padding:1em;color:var(--link)}.Lists .new-list-button{padding:0 .5em}.ListsUserSearch .input-wrap{display:-webkit-box;display:flex;margin:.7em .5em}.ListsUserSearch .input-wrap input{width:100%}.ListsUserSearch .search-icon{margin-right:.3em}.ListEdit{--panel-body-padding: .5em;height:calc(100vh - var(--navbar-height));overflow:hidden;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.ListEdit .list-edit-heading{grid-template-columns:auto minmax(50%,1fr)}.ListEdit .panel-body{display:-webkit-box;display:flex;-webkit-box-flex:1;flex:1;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;overflow:hidden}.ListEdit .list-member-management{-webkit-box-flex:1;flex:1 0 auto}.ListEdit .search-icon{margin-right:.3em}.ListEdit .users-list{padding-bottom:.7rem;overflow-y:auto}.ListEdit .search-list,.ListEdit .members-list{overflow:hidden;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;min-height:0}.ListEdit .go-back-button{text-align:center;line-height:1;height:100%;align-self:start;width:var(--__panel-heading-height-inner)}.ListEdit .btn{margin:0 .5em}.ListEdit .panel-footer{grid-template-columns:minmax(10%,1fr)}.ListEdit .panel-footer .footer-button{min-width:9em}.announcement-editor{display:-webkit-box;display:flex;-webkit-box-align:stretch;align-items:stretch;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.announcement-editor .announcement-metadata{margin-top:.5em}.announcement-editor .post-textarea{resize:vertical;height:10em;overflow:visible;box-sizing:content-box}.announcement{border-bottom:1px solid var(--border);border-radius:0;padding:var(--status-margin)}.announcement .heading,.announcement .body{margin-bottom:var(--status-margin)}.announcement .footer,.announcement .footer .times{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.announcement .footer .actions{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-pack:space-evenly;justify-content:space-evenly}.announcement .footer .actions .btn{-webkit-box-flex:1;flex:1;margin:1em;max-width:10em}.announcements-page .post-form{padding:var(--status-margin)}.announcements-page .post-form .heading,.announcements-page .post-form .body{margin-bottom:var(--status-margin)}.announcements-page .post-form .post-button{min-width:10em}.Draft{position:relative}.Draft .status-content{padding:.5em;margin:.5em 0}.Draft .status-preview{display:grid;grid-template-columns:1fr;grid-auto-columns:10em;grid-auto-flow:column;grid-gap:.5em;-webkit-box-align:start;align-items:start;max-width:100%}.Draft .status-preview p{white-space:normal;overflow-x:hidden}.Draft .status-preview .poll-indicator-container{border-radius:var(--roundness);display:grid;place-items:center center;align-self:start;height:0;padding-bottom:62.5%;position:relative}.Draft .status-preview .poll-indicator{box-sizing:border-box;border:1px solid var(--border);position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center center;width:100%;height:100%}.Draft .actions{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-pack:space-evenly;justify-content:space-evenly}.Draft .actions .btn{-webkit-box-flex:1;flex:1;margin-left:1em;margin-right:1em}.draft{margin:1em 0}.empty-drafs-list-alert{padding:3em;font-size:1.2em;display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;color:var(--textFaint)}.bookmark-folder-card{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center}a.bookmark-folder-name{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-flex:1;flex-grow:1}a.bookmark-folder-name .icon,a.bookmark-folder-name .iconLetter,a.bookmark-folder-name .iconEmoji{display:inline-block;height:2.5rem;width:2.5rem;margin-right:.5rem}a.bookmark-folder-name .icon,a.bookmark-folder-name .iconLetter{font-size:1.5rem;line-height:2.5rem;text-align:center}a.bookmark-folder-name .iconEmoji{text-align:center;object-fit:contain;vertical-align:middle}a.bookmark-folder-name .iconEmoji>span{font-size:1.5rem;line-height:2.5rem}a.bookmark-folder-name img.iconEmoji{padding:.25em;box-sizing:border-box}.bookmark-folder-name,.button-folder-edit{margin:0;padding:1em;color:var(--link)}.Bookmark-folders .new-folder-button{padding:0 .5em}.BookmarkFolderEdit{--panel-body-padding: .5em;overflow:hidden;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.BookmarkFolderEdit .folder-edit-heading{grid-template-columns:auto minmax(50%,1fr)}.BookmarkFolderEdit .panel-body{display:-webkit-box;display:flex;gap:.5em}.BookmarkFolderEdit .emoji-picker-panel{position:absolute;z-index:20;margin-top:2px}.BookmarkFolderEdit .emoji-picker-panel.hide{display:none}.BookmarkFolderEdit .input-emoji{height:2.5em;width:2.5em;padding:0}.BookmarkFolderEdit .input-emoji .iconEmoji{display:inline-block;text-align:center;object-fit:contain;vertical-align:middle;height:2.5em;width:2.5em}.BookmarkFolderEdit .input-emoji .iconEmoji>span{font-size:1.5rem;line-height:2.5rem}.BookmarkFolderEdit .input-emoji img.iconEmoji{padding:.25em;box-sizing:border-box}.BookmarkFolderEdit .input-wrap{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;gap:.5em}.BookmarkFolderEdit .go-back-button{text-align:center;line-height:1;height:100%;align-self:start;width:var(--__panel-heading-height-inner)}.BookmarkFolderEdit .btn{margin:0 .5em}.BookmarkFolderEdit .panel-footer{grid-template-columns:minmax(10%,1fr)}.BookmarkFolderEdit .panel-footer .footer-button{min-width:9em} diff --git a/priv/static/static/css/media_modal.Bc6XAjzi.css b/priv/static/static/css/media_modal.Bc6XAjzi.css new file mode 100644 index 000000000..1d4082591 --- /dev/null +++ b/priv/static/static/css/media_modal.Bc6XAjzi.css @@ -0,0 +1 @@ +@keyframes media-fadein{0%{opacity:0}to{opacity:1}}.media-modal-view .modal-image-container{flex-direction:column;flex-grow:1;justify-content:center;align-items:center;width:100%;max-width:100%;height:100%;max-height:100%;display:flex;overflow:hidden}.media-modal-view .modal-image-container-inner{flex-direction:column;flex-grow:1;justify-content:center;align-items:center;width:100%;height:100%;display:flex}.media-modal-view .description,.media-modal-view .counter{color:#fff;text-shadow:0 0 1em #000,0 0 1em #000,0 0 1em #000;margin:1em 2em;overflow:hidden}.media-modal-view .description+.counter{margin-top:0}.media-modal-view .description{flex:none;max-width:80ch;max-height:9.5em}.media-modal-view .description summary{pointer-events:none;margin-bottom:.5em;font-weight:700;display:inline-block}.media-modal-view .description span{text-wrap:pretty;white-space:pre-wrap;scrollbar-color:white transparent;min-height:1em;max-height:10.5em;line-height:1.5;display:block;overflow-y:auto}.media-modal-view .description span::-webkit-scrollbar-button{background-color:#fff}.media-modal-view .description span::-webkit-scrollbar-thumb{background-color:#fff}.media-modal-view .modal-image{image-orientation:from-image;max-width:100%;max-height:100%;animation:.1s cubic-bezier(.7,0,1,.6) media-fadein}.media-modal-view .modal-image.loading{opacity:.5}.media-modal-view .loading-spinner{pointer-events:none;justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:absolute}.media-modal-view .loading-spinner svg{color:#fff}.media-modal-view .modal-view-button{opacity:0;box-shadow:none;appearance:none;cursor:pointer;background:0 0;border:0;width:3em;height:3em;padding:0;transition:opacity .333s cubic-bezier(.4,0,.22,1);overflow:visible}.media-modal-view .modal-view-button .button-icon{color:#fff;text-align:center;background-color:#0000004d;width:3em;height:3em;font-size:1rem;line-height:3em;position:absolute}.media-modal-view .modal-view-button-arrow{width:3em;height:3em;margin-top:1.5em;display:block;position:absolute;top:50%}.media-modal-view .modal-view-button-arrow .arrow-icon{color:#fff;text-align:center;background-color:#0000004d;line-height:3em;position:absolute;top:0}.media-modal-view .modal-view-button-arrow--prev{left:0}.media-modal-view .modal-view-button-arrow--prev .arrow-icon{left:.5em}.media-modal-view .modal-view-button-arrow--next{right:0}.media-modal-view .modal-view-button-arrow--next .arrow-icon{right:.5em}.media-modal-view .modal-view-button-hide{position:absolute;top:0;right:0}.media-modal-view .modal-view-button-hide .button-icon{top:.5em;right:.5em}.modal-view.media-modal-view{z-index:var(--ZI_media_modal);flex-direction:column}.modal-view.media-modal-view .modal-view-button-arrow,.modal-view.media-modal-view .modal-view-button-hide{opacity:.75}.modal-view.media-modal-view .modal-view-button-arrow:focus,.modal-view.media-modal-view .modal-view-button-arrow:hover,.modal-view.media-modal-view .modal-view-button-hide:focus,.modal-view.media-modal-view .modal-view-button-hide:hover{box-shadow:none;outline:none}.modal-view.media-modal-view .modal-view-button-arrow:hover,.modal-view.media-modal-view .modal-view-button-hide:hover{opacity:1}.modal-view.media-modal-view{overflow:hidden} diff --git a/priv/static/static/css/modal.Dv3V-p-W.css b/priv/static/static/css/modal.Dv3V-p-W.css new file mode 100644 index 000000000..c80b0d06d --- /dev/null +++ b/priv/static/static/css/modal.Dv3V-p-W.css @@ -0,0 +1 @@ +.modal-view{z-index:var(--ZI_modals);pointer-events:none;opacity:0;justify-content:center;align-items:center;animation-name:modal-background-fadein;animation-duration:.2s;display:flex;position:fixed;inset:0;overflow:auto}.modal-view>*{pointer-events:initial}.modal-view.modal-background{pointer-events:initial;background-color:#00000080}.modal-view.open{opacity:1}@keyframes modal-background-fadein{0%{background-color:#0000}to{background-color:#00000080}} diff --git a/priv/static/static/css/moderation_tools.DoZVYsfl.css b/priv/static/static/css/moderation_tools.DoZVYsfl.css new file mode 100644 index 000000000..42b811333 --- /dev/null +++ b/priv/static/static/css/moderation_tools.DoZVYsfl.css @@ -0,0 +1 @@ +.moderation-tools-popover{height:100%}.moderation-tools-popover .trigger{height:100%;display:flex!important}.moderation-tools-button{white-space:nowrap}.moderation-tools-button svg,.moderation-tools-button i{font-size:.8em} diff --git a/priv/static/static/css/mute_confirm.p-qSlYOr.css b/priv/static/static/css/mute_confirm.p-qSlYOr.css new file mode 100644 index 000000000..9fa4ab9a4 --- /dev/null +++ b/priv/static/static/css/mute_confirm.p-qSlYOr.css @@ -0,0 +1 @@ +.expiry-amount{text-align:right;width:4em} diff --git a/priv/static/static/css/notifications.CW0-QQtF.css b/priv/static/static/css/notifications.CW0-QQtF.css new file mode 100644 index 000000000..179f47722 --- /dev/null +++ b/priv/static/static/css/notifications.CW0-QQtF.css @@ -0,0 +1 @@ +.ExtraNotifications{flex-direction:column;align-items:stretch;width:100%;display:flex}.ExtraNotifications.panel-body:before{content:"";padding:0}.ExtraNotifications .notification{border-bottom:1px solid;border-color:var(--border);flex-direction:column;align-items:stretch;width:100%;display:flex}.ExtraNotifications .extra-notification{padding:1em}.ExtraNotifications .icon{margin-right:.5em}.ExtraNotifications .tip{display:inline}.Report .report-content,.Report .report-state{margin:.5em 0 1em}.Report .reported-status{border:1px solid var(--border);border-radius:var(--roundness);margin:.5em 0;padding:.5em;display:block}.Report .reported-status .status-content{pointer-events:none}.Report .reported-status .reported-status-heading{justify-content:space-between;width:100%;margin-bottom:.2em;display:flex}.Report .reported-status .reported-status-name{font-weight:700}.Report .note{width:100%;margin-bottom:.5em}.Notification{border-bottom:1px solid;border-color:var(--border);overflow-wrap:break-word;text-wrap:pretty}.Notification .status-content{cursor:pointer}.Notification{--emoji-size:1em}.Notification:hover{--_still-image-img-visibility:visible;--_still-image-canvas-visibility:hidden;--_still-image-label-visibility:hidden}.Notification.-muted{text-overflow:ellipsis;flex-wrap:nowrap;gap:1ex;height:1.2em;padding:.25em .6em;line-height:1.2em;display:flex;overflow:hidden}.Notification.-muted .status-username,.Notification.-muted .mute-thread,.Notification.-muted .mute-words{white-space:nowrap}.Notification.-muted .status-username,.Notification.-muted .mute-words{text-overflow:ellipsis;overflow:hidden}.Notification.-muted .status-username{flex:0 auto;margin-right:.2em;font-size:smaller;font-weight:400}.Notification.-muted .mute-thread{flex:none}.Notification.-muted .mute-words{flex:1 0 5em;margin-left:.2em}.Notification.-muted .mute-words:before{content:" "}.Notification.-muted .unmute{flex:none;margin-left:auto;display:block}.Notification .type-icon{margin:0 .1em}.Notification.-type--repeat .type-icon{color:var(--cGreen)}.Notification.-type--follow .type-icon,.Notification.-type--follow-request .type-icon{color:var(--cBlue)}.Notification.-type--like .type-icon{color:var(--cOrange)}.Notification.-type--move .type-icon{color:var(--cBlue)}.Notifications:not(.minimal){padding-bottom:15em}.Notifications .loadmore-error{color:var(--text)}.Notifications .notification{position:relative}.Notifications .notification .notification-overlay{pointer-events:none;position:absolute;inset:0}.Notifications .notification.unseen .notification-overlay{background-image:-webkit-linear-gradient(315deg, var(--badgeNotification) 4px, transparent 10px);background-image:linear-gradient(135deg, var(--badgeNotification) 4px, transparent 10px)}.notification{box-sizing:border-box}.notification .Status{flex:1}.notification:hover .animated.Avatar canvas{display:none}.notification:hover .animated.Avatar img{visibility:visible}.notification:last-child .Notification{border-bottom:none}.notification .non-mention{flex-wrap:nowrap;flex:1;min-width:0;padding:.6em;display:flex}.notification .non-mention .avatar-container{width:32px;height:32px}.notification .follow-request-accept:hover{color:var(--text)}.notification .follow-request-reject:hover{color:var(--cRed)}.notification .follow-text,.notification .move-text{overflow-wrap:break-word;justify-content:space-between;padding:.5em 0;display:flex}.notification .follow-text .follow-name,.notification .move-text .follow-name{text-overflow:ellipsis;white-space:nowrap;max-width:100%;display:block;overflow:hidden}.notification time{white-space:nowrap}.notification .notification-right{flex:1;min-width:0;padding-left:.8em}.notification .notification-right .timeago{text-align:right;min-width:3em}.notification .notification-right .timeago-link{margin-right:.2em}.notification .notification-right .expand-icon .svg-inline--fa{margin-left:.25em}.notification .emoji-reaction-emoji{width:auto;max-width:1.25em;height:1.25em;font-size:1.3em}.notification .emoji-reaction-emoji.-wide{max-width:3.75em}.notification .emoji-reaction-emoji-image{vertical-align:middle;object-fit:contain}.notification .notification-details{min-width:0;line-height:var(--post-line-height);flex-wrap:nowrap;flex:1 1 0;justify-content:space-between;width:100%;display:flex;position:relative;overflow:hidden}.notification .notification-details .name-and-action{text-overflow:ellipsis;flex:1;overflow:hidden}.notification .notification-details .username{text-overflow:ellipsis;white-space:nowrap;max-width:100%;font-weight:bolder}.notification .notification-details .timeago{margin-right:.2em}.notification .notification-details .status-content{max-height:300px;margin:0}.notification .notification-details h1{overflow-wrap:break-word;text-wrap:pretty;margin:0 0 .3em;padding:0;font-size:1em;line-height:1.5}.notification .notification-details h1 small{font-weight:lighter}.notification .notification-details p{margin:0 0 .3em} diff --git a/priv/static/static/css/panel_loading.DQYYmPMZ.css b/priv/static/static/css/panel_loading.DQYYmPMZ.css new file mode 100644 index 000000000..0cc8a88d6 --- /dev/null +++ b/priv/static/static/css/panel_loading.DQYYmPMZ.css @@ -0,0 +1 @@ +.panel-loading{height:100%;color:var(--text);justify-content:center;align-items:center;font-size:2em;display:flex}.panel-loading .loading-text svg{vertical-align:middle;color:var(--text);line-height:0} diff --git a/priv/static/static/css/password_reset.BLv39QBH.css b/priv/static/static/css/password_reset.BLv39QBH.css new file mode 100644 index 000000000..a7b561aae --- /dev/null +++ b/priv/static/static/css/password_reset.BLv39QBH.css @@ -0,0 +1 @@ +.password-reset-form{flex-direction:column;align-items:center;margin:.6em;display:flex}.password-reset-form .container{flex-direction:column;flex:1 0;max-width:18rem;margin-top:.6em;display:flex}.password-reset-form .container>*{min-width:0}.password-reset-form .form-group{flex-direction:column;margin-bottom:1em;padding:.3em 0;line-height:1.85em;display:flex}.password-reset-form .error{text-align:center;animation-name:shakeError;animation-duration:.4s;animation-timing-function:ease-in-out}.password-reset-form .alert{margin:.3em 0 1em;padding:.5em}.password-reset-form .dismiss{cursor:pointer} diff --git a/priv/static/static/css/poll_form.s0YHqxUy.css b/priv/static/static/css/poll_form.s0YHqxUy.css new file mode 100644 index 000000000..511272c0b --- /dev/null +++ b/priv/static/static/css/poll_form.s0YHqxUy.css @@ -0,0 +1 @@ +.poll-form{flex-direction:column;padding:0 .5em .5em;display:flex}.poll-form .add-option{align-self:flex-start;padding-top:.25em;padding-left:.1em}.poll-form .poll-option{justify-content:space-between;align-items:baseline;margin-bottom:.25em;display:flex}.poll-form .input-container{width:100%}.poll-form .input-container input{width:100%;padding-right:2.5em}.poll-form .delete-option{z-index:1;width:1.5em;margin-left:-1.5em}.poll-form .poll-type-expiry{width:100%;margin-top:.5em;display:flex}.poll-form .poll-type{flex:60%;margin-right:.75em}.poll-form .poll-type .poll-type-select{padding-right:.75em}.poll-form .poll-expiry{display:flex}.poll-form .poll-expiry .expiry-amount{text-align:right;width:3em} diff --git a/priv/static/static/css/popover.BlbX_Uwp.css b/priv/static/static/css/popover.BlbX_Uwp.css new file mode 100644 index 000000000..a42fbcb86 --- /dev/null +++ b/priv/static/static/css/popover.BlbX_Uwp.css @@ -0,0 +1 @@ +.popover-trigger-button{display:inline-block}.popover{z-index:var(--ZI_popover_override,var(--ZI_popovers));--_shadow:var(--shadow);min-width:0;max-width:calc(100vw - 20px);position:fixed}.popover-default:after{content:"";box-shadow:var(--_shadow);pointer-events:none;position:absolute;inset:-1px}.popover-default{border-radius:var(--roundness);border-color:var(--border);background-color:var(--background);border-style:solid;border-width:1px}.dropdown-menu{text-align:left;max-width:100vw;z-index:var(--ZI_popover_override,var(--ZI_popovers));white-space:nowrap;background-color:var(--background);padding:0;font-size:1em;list-style:none;display:block}.dropdown-menu .dropdown-divider{border-top:1px solid var(--border);height:0;margin:.5rem 0;overflow:hidden}.dropdown-menu .dropdown-item{grid-gap:.5em;grid-template-columns:1fr;grid-auto-columns:auto;grid-auto-flow:column;padding:0;display:grid}.dropdown-menu .dropdown-item .popover-wrapper{box-sizing:border-box;grid-template-columns:1fr;display:grid}.dropdown-menu .dropdown-item .extra-button{border-left:1px solid;border-image-source:linear-gradient(to bottom, transparent 0%, var(--icon) var(--__horizontal-gap) calc(100% - var(--__horizontal-gap)), transparent 100%);padding-left:calc(var(--__horizontal-gap) - 1px);padding-right:var(--__horizontal-gap);padding-top:var(--__horizontal-gap);padding-bottom:var(--__horizontal-gap);border-image-slice:1;max-width:fit-content}.dropdown-menu .dropdown-item .main-button{width:100%;padding:var(--__horizontal-gap) var(--__horizontal-gap);grid-gap:var(--__horizontal-gap);grid-template-columns:1fr var(--__line-height);grid-auto-columns:auto;grid-auto-flow:column}.dropdown-menu .dropdown-item .main-button .menu-checkbox{vertical-align:middle;min-width:calc(var(--__line-height) + 1px);max-width:calc(var(--__line-height) + 1px);min-height:calc(var(--__line-height) + 1px);max-height:calc(var(--__line-height) + 1px);line-height:var(--__line-height);text-align:center;box-shadow:var(--shadow);margin-right:var(--__horizontal-gap);border-radius:0;display:inline-block}.dropdown-menu .dropdown-item .main-button .menu-checkbox.menu-checkbox-checked:after{content:"✓";font-size:1.25em}.dropdown-menu .dropdown-item .main-button .menu-checkbox.menu-checkbox-indeterminate:after{content:"–";font-size:1.25em}.dropdown-menu .dropdown-item .main-button .menu-checkbox.-radio{border-radius:9999px}.dropdown-menu .dropdown-item .main-button .menu-checkbox.-radio.menu-checkbox-checked:after{content:"•";font-size:2em}.dropdown-menu .dropdown-item .main-button .menu-checkbox.-radio.menu-checkbox-indeterminate:after{content:"–";font-size:2em}.dropdown-menu .dropdown-item .main-button,.dropdown-menu .dropdown-item .extra-button{box-sizing:border-box;align-items:center;display:grid}.dropdown-menu .dropdown-item .main-button.disabled,.dropdown-menu .dropdown-item .extra-button.disabled{cursor:not-allowed}.dropdown-menu .dropdown-item .main-button:not(.disabled),.dropdown-menu .dropdown-item .extra-button:not(.disabled){cursor:pointer}.dropdown-menu .dropdown-item.-icon .main-button{grid-template-columns:var(--__line-height) 1fr}.dropdown-menu .dropdown-item.-icon-space .main-button{padding-left:calc(var(--__line-height) + var(--__horizontal-gap) * 2)}.dropdown-menu .dropdown-item.-icon-double .main-button{grid-template-columns:var(--__line-height) var(--__line-height) 1fr} diff --git a/priv/static/static/css/post_status_modal.C4svyRW2.css b/priv/static/static/css/post_status_modal.C4svyRW2.css new file mode 100644 index 000000000..7f1a2bc8f --- /dev/null +++ b/priv/static/static/css/post_status_modal.C4svyRW2.css @@ -0,0 +1 @@ +.modal-view.post-form-modal-view{align-items:flex-start}.post-form-modal-panel{flex-shrink:0;width:100%;max-width:700px;margin-top:25%;margin-bottom:2em}@media (orientation:landscape){.post-form-modal-panel{margin-top:8%}} diff --git a/priv/static/static/css/quote.DAX2X1-h.css b/priv/static/static/css/quote.DAX2X1-h.css new file mode 100644 index 000000000..36c83f3a1 --- /dev/null +++ b/priv/static/static/css/quote.DAX2X1-h.css @@ -0,0 +1 @@ +.quoted-status{border:1px solid var(--border);border-radius:var(--roundness);margin-top:.5em}.quoted-status.-unavailable-prompt{padding:.5em}.quoted-status .display-quoted-status-button{margin:.5em}.quoted-status .display-quoted-status-button-icon{color:inherit} diff --git a/priv/static/static/css/quote_form.ix5T3mDK.css b/priv/static/static/css/quote_form.ix5T3mDK.css new file mode 100644 index 000000000..a30ec5318 --- /dev/null +++ b/priv/static/static/css/quote_form.ix5T3mDK.css @@ -0,0 +1 @@ +.quote-form{flex-direction:column;padding:0 .5em .5em;display:flex}.quote-form .input-container{flex-direction:row;width:100%;display:flex}.quote-form .input-container input{width:100%}.quote-form .input-container .checkbox{white-space:pre;-webkit-column-gap:.5em;-webkit-user-select:none;user-select:none;flex-flow:row-reverse;align-items:center;column-gap:.5em;line-height:2;display:flex} diff --git a/priv/static/static/css/registration.BpinXGMn.css b/priv/static/static/css/registration.BpinXGMn.css new file mode 100644 index 000000000..a3bf58a09 --- /dev/null +++ b/priv/static/static/css/registration.BpinXGMn.css @@ -0,0 +1 @@ +.registration-form{flex-direction:column;margin:1em;display:flex}.registration-form .container{flex-direction:row;display:flex}.registration-form .container>*{min-width:0}.registration-form .terms-of-service{flex:0 50%;margin:.6em 0 0 .8em}.registration-form .text-fields{flex-direction:column;flex:1 0;margin-top:.6em;display:flex}.registration-form textarea{resize:vertical;min-height:100px}.registration-form .form-group{flex-direction:column;margin-bottom:1em;padding:.3em 0;line-height:2;display:flex}.registration-form .form-group--error{animation-name:shakeError;animation-duration:.6s;animation-timing-function:ease-in-out}.registration-form .form-group--error .form--label{color:var(--cRed)}.registration-form .form-error{text-align:left;margin-top:-.7em}.registration-form .form-error span{font-size:.85em}.registration-form .form-error ul{margin-top:0;padding:0 0 0 5px;list-style:none}.registration-form .form-error ul li:before{content:"• "}.registration-form form textarea{resize:vertical;line-height:1}.registration-form .captcha{max-width:350px;margin-bottom:.4em}.registration-form .btn{height:2em;margin-top:.6em}.registration-form .error{text-align:center}.registration-notice{margin:.6em}@media (width<=800px){.registration-form .container{flex-direction:column-reverse}.registration-form .container .terms-of-service{margin:0}} diff --git a/priv/static/static/css/remote_follow.BrTyl75C.css b/priv/static/static/css/remote_follow.BrTyl75C.css new file mode 100644 index 000000000..5dcf7a920 --- /dev/null +++ b/priv/static/static/css/remote_follow.BrTyl75C.css @@ -0,0 +1 @@ +.remote-follow{max-width:220px}.remote-follow .remote-button{width:100%;min-height:2em} diff --git a/priv/static/static/css/search.BMRqSZdz.css b/priv/static/static/css/search.BMRqSZdz.css new file mode 100644 index 000000000..d69ac9cd2 --- /dev/null +++ b/priv/static/static/css/search.BMRqSZdz.css @@ -0,0 +1 @@ +.search-result-heading{color:var(--faint);text-align:center;padding:.75rem}@media (width<=800px){.search-nav-heading .tab-switcher .tabs .tab-wrapper{text-align:center;flex:auto;justify-content:center;display:block}}.search-result{box-sizing:border-box;border-bottom:1px solid;border-color:var(--border)}.search-input-container{justify-content:center;padding:.8rem;display:flex}.search-input-container .search-input{box-sizing:border-box;width:100%;padding:.5rem;font-size:1rem;line-height:1.125rem}.search-input-container .search-button{margin-left:.5em}.loading-icon{padding:1em}.trend{align-items:center;display:flex}.trend .hashtag{text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}.trend .hashtag .name{color:var(--link)}.trend .count{text-align:center;width:2rem;color:var(--text);flex:none;font-size:1.5rem;font-weight:500;line-height:2.25rem}.more-statuses-button{width:100%;height:3.5em;line-height:3.5em} diff --git a/priv/static/static/css/select.BF2ygbkJ.css b/priv/static/static/css/select.BF2ygbkJ.css new file mode 100644 index 000000000..7b87419bd --- /dev/null +++ b/priv/static/static/css/select.BF2ygbkJ.css @@ -0,0 +1 @@ +label.Select{padding:0;display:flex}label.Select select{appearance:none;color:var(--text);font-family:var(--font);z-index:1;background:0 0;border:none;width:100%;margin:0;padding:0 2em 0 .5em;font-size:1em;line-height:2}label.Select select[multiple],label.Select select[size]{height:100%;padding:.2em}label.Select select[multiple] option,label.Select select[size] option{background-color:#0000}label.Select select[multiple] option:checked,label.Select select[multiple] option.-active,label.Select select[size] option:checked,label.Select select[size] option.-active{color:var(--selectionText);background-color:var(--selectionBackground)}label.Select.disabled,label.Select:disabled{background-color:var(--background);opacity:1;color:var(--faint)}label.Select.disabled select[multiple] option.-active,label.Select.disabled select[size] option.-active,label.Select:disabled select[multiple] option.-active,label.Select:disabled select[size] option.-active{color:var(--faint);background:0 0}label.Select .select-down-icon{width:.875em;height:100%;font-family:var(--font);z-index:1;pointer-events:none;line-height:2;position:absolute;top:0;bottom:0;right:.5em} diff --git a/priv/static/static/css/settings_modal._8lsImIr.css b/priv/static/static/css/settings_modal._8lsImIr.css new file mode 100644 index 000000000..137a4352e --- /dev/null +++ b/priv/static/static/css/settings_modal._8lsImIr.css @@ -0,0 +1 @@ +.async-component-error{justify-content:center;align-items:center;height:100%;display:flex}.async-component-error .btn{margin:.5em;padding:.5em 2em}.settings-modal{overflow:hidden}.settings-modal h2{margin-top:1em;margin-bottom:1em;margin-right:1em;font-size:1.3rem;font-weight:500}.settings-modal h3{border-bottom:1px solid var(--border);box-sizing:border-box;margin-top:1em;margin-bottom:.5em;margin-right:1em;padding-bottom:.25em;padding-left:.5em;font-size:1.2rem;font-weight:500}.settings-modal h4{margin:1em 1em .5em;font-size:1.1rem}.settings-modal h5{margin-top:.75em;margin-bottom:.25em;margin-left:1em;font-size:1rem}.settings-modal .toolbar{flex-wrap:wrap;align-items:end;gap:.5em;display:flex}.settings-modal .toolbar .header-buttons{flex:1 0 auto;justify-content:end;align-items:end;display:flex}.settings-modal .toolbar .header-buttons:not(.btn-group){gap:.5em}.settings-modal .toolbar .header-buttons .header-text{flex:1 0 auto}.settings-modal .toolbar .button-default{flex:none;padding:.5em;font-size:1rem}.settings-modal .toolbar .popover-wrapper{display:flex}.settings-modal p{margin-left:2em;line-height:1.5}.settings-modal .sidenote{margin-top:.25em;margin-left:5em;padding:.25em 1em}.settings-modal .setting-description{margin-top:.2em;margin-bottom:0;margin-left:0;font-size:80%}.settings-modal .setting-item{-webkit-column-gap:.5em;grid-template-columns:4fr 5fr;grid-template-areas:"label control""label desc"".draft";align-items:baseline;column-gap:.5em;padding:.5em 0;line-height:1.5em;display:grid}.settings-modal .setting-item .setting-label{text-align:right;grid-area:label}.settings-modal .setting-item .ModifiedIndicator,.settings-modal .setting-item .LocalSettingIndicator{grid-area:indicator}.settings-modal .setting-item .setting-control{grid-area:control}.settings-modal .setting-item .setting-control.textarea{align-self:baseline;overflow:auto}.settings-modal .setting-item .setting-control.checkbox{grid-template-columns:subgrid;display:grid}.settings-modal .setting-item .setting-control.checkbox .label{text-align:right;grid-area:label}.settings-modal .setting-item .setting-control.checkbox .checkbox-indicator{grid-area:control;align-self:baseline;height:1.5em;line-height:1.5em}.-mobile .settings-modal .setting-item .setting-control.checkbox .label{text-align:left}.settings-modal .setting-item .setting-control.setting-label{text-align:left;grid-column:1/3}.settings-modal .setting-item .setting-description{grid-area:desc}.settings-modal .setting-item .DraftButtons{grid-area:draft}.settings-modal .vertical-tab-switcher{height:100%}.settings-modal .setting-list,.settings-modal .option-list{margin:0;padding-left:0;list-style-type:none}.settings-modal .setting-list.suboptions,.settings-modal .option-list.suboptions{border-top:1px dotted var(--border);border-bottom:1px dotted var(--border);margin-left:2em}.settings-modal .setting-list .btn:not(.dropdown-button),.settings-modal .option-list .btn:not(.dropdown-button){padding:0 2em}.settings-modal .setting-list .btn-group .button-default,.settings-modal .option-list .btn-group .button-default{flex:0 auto}.settings-modal .setting-list.two-column,.settings-modal .option-list.two-column{border-bottom:1px solid var(--border);grid-template-columns:1fr 1fr;margin-bottom:1em;margin-left:2em;padding-bottom:.5em;display:grid}.settings-modal .setting-list.two-column .setting-item,.settings-modal .option-list.two-column .setting-item{grid-template-columns:3fr 1fr}.settings-modal .setting-list.two-column>li,.settings-modal .option-list.two-column>li{-webkit-column-break-inside:avoid;break-inside:avoid;margin:0}.settings-modal .settings-modal-panel{transition:transform;width:70em;max-width:90vw;height:90vh;transition-duration:.3s;transition-timing-function:ease-in-out;overflow:hidden}@media (width<=800px){.settings-modal .settings-modal-panel{max-width:100vw;height:100%}}.settings-modal .settings-modal-panel>.panel-body{height:100%;overflow-y:hidden}.settings-modal .settings-modal-panel>.panel-body .btn{min-height:2em}.settings-modal .settings-footer{flex-wrap:wrap;line-height:2;display:flex}.settings-modal .settings-footer>*{margin-right:.5em}.settings-modal .settings-footer .extra-content{flex-grow:1;display:flex}.settings-modal.-mobile .tabs .menu-item{padding-top:.75em;padding-bottom:.75em;font-size:1.2em}.settings-modal.-mobile li .sidenote{margin-left:1em}.settings-modal.-mobile .setting-item{grid-template-columns:1fr -webkit-min-content;-webkit-column-gap:.5em;grid-template-columns:1fr min-content;align-items:center;column-gap:.5em;padding:1em}.settings-modal.-mobile .setting-item .setting-label{text-align:left}.settings-modal.-mobile .setting-item .checkbox .label{text-align:left;order:2}.settings-modal.-mobile .setting-item .checkbox .checkbox-indicator{order:1}.settings-modal.-mobile ul{padding:0}.settings-modal.-mobile ul li:not(:first-child) .setting-item{border-top:1px solid var(--border)}.settings-modal.-mobile .setting-list:not(.suboptions).two-column,.settings-modal.-mobile .option-list.two-column{grid-template-columns:1fr}.settings-modal.-mobile .UnitSetting{padding-right:.5em}.settings-modal.minimize .settings-modal-panel{transform:translateY(calc(50vh + 50% - 50px))}@media (width<=800px){.settings-modal.minimize .settings-modal-panel{transform:translateY(calc(100% - 50px))}} diff --git a/priv/static/static/css/settings_modal.dQ5YFZGx.css b/priv/static/static/css/settings_modal.dQ5YFZGx.css deleted file mode 100644 index 7dfd4e1c4..000000000 --- a/priv/static/static/css/settings_modal.dQ5YFZGx.css +++ /dev/null @@ -1 +0,0 @@ -.async-component-error{display:-webkit-box;display:flex;height:100%;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center}.async-component-error .btn{margin:.5em;padding:.5em 2em}.settings-modal{overflow:hidden}.settings-modal h2{font-size:1.3rem;font-weight:500;margin-top:1em;margin-bottom:1em;margin-right:1em}.settings-modal h3{font-size:1.2rem;font-weight:500;margin-top:1em;margin-bottom:.5em;margin-right:1em;border-bottom:1px solid var(--border);padding-bottom:.25em;box-sizing:border-box;padding-left:.5em}.settings-modal h4{font-size:1.1rem;margin:1em 1em .5em}.settings-modal h5{font-size:1rem;margin-left:1em;margin-bottom:.25em;margin-top:.75em}.settings-modal p{line-height:1.5}.settings-modal .suboptions{margin-left:1em}.settings-modal .sidenote{margin-left:5em;padding:.25em 1em;margin-top:.25em}.settings-modal .setting-description{margin-top:.2em;margin-bottom:0;font-size:80%}.settings-modal .setting-item{display:grid;grid-template-areas:"label control" "label desc" ". draft";grid-template-columns:4fr 5fr;-webkit-column-gap:.5em;column-gap:.5em;-webkit-box-align:baseline;align-items:baseline;padding:.5em 0}.settings-modal .setting-item .setting-label{grid-area:label;text-align:right}.settings-modal .setting-item .ModifiedIndicator,.settings-modal .setting-item .ProfileSettingIndicator{grid-area:indicator}.settings-modal .setting-item .setting-control{grid-area:control}.settings-modal .setting-item .setting-control.textarea{align-self:baseline;overflow:auto}.settings-modal .setting-item .setting-control.checkbox{display:grid;grid-template-columns:subgrid}.settings-modal .setting-item .setting-control.checkbox .label{grid-area:label;text-align:right}.settings-modal .setting-item .setting-control.checkbox .checkbox-indicator{grid-area:control}.-mobile .settings-modal .setting-item .setting-control.checkbox .label{text-align:left}.settings-modal .setting-item .setting-control.setting-label{grid-column:1/3;text-align:left}.settings-modal .setting-item .setting-description{grid-area:desc}.settings-modal .setting-item .DraftButtons{grid-area:draft}.settings-modal .vertical-tab-switcher{height:100%}.settings-modal .setting-list,.settings-modal .option-list{list-style-type:none;padding-left:0;margin:0}.settings-modal .setting-list .btn:not(.dropdown-button),.settings-modal .option-list .btn:not(.dropdown-button){padding:0 2em}.settings-modal .setting-list .btn-group .button-default,.settings-modal .option-list .btn-group .button-default{-webkit-box-flex:0;flex:0 1 auto}.settings-modal .setting-list.two-column,.settings-modal .option-list.two-column{display:grid;grid-template-columns:1fr 1fr;margin-left:2em;border-bottom:1px solid var(--border);padding-bottom:.5em;margin-bottom:1em}.settings-modal .setting-list.two-column .setting-item,.settings-modal .option-list.two-column .setting-item{grid-template-columns:3fr 1fr}.settings-modal .setting-list.two-column>li,.settings-modal .option-list.two-column>li{margin:0;-webkit-column-break-inside:avoid;break-inside:avoid}.settings-modal .settings-modal-panel{overflow:hidden;-webkit-transition:-webkit-transform;transition:-webkit-transform;transition:transform;transition:transform,-webkit-transform;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;-webkit-transition-duration:.3s;transition-duration:.3s;width:70em;max-width:90vw;height:90vh}@media all and (width <= 800px){.settings-modal .settings-modal-panel{max-width:100vw;height:100%}}.settings-modal .settings-modal-panel>.panel-body{height:100%;overflow-y:hidden}.settings-modal .settings-modal-panel>.panel-body .btn{min-height:2em}.settings-modal .settings-footer{display:-webkit-box;display:flex;flex-wrap:wrap;line-height:2}.settings-modal .settings-footer>*{margin-right:.5em}.settings-modal .settings-footer .extra-content{display:-webkit-box;display:flex;-webkit-box-flex:1;flex-grow:1}.settings-modal.-mobile .tabs .menu-item{font-size:1.2em;padding-top:.75em;padding-bottom:.75em}.settings-modal.-mobile .setting-item{grid-template-columns:1fr -webkit-min-content;grid-template-columns:1fr min-content;-webkit-column-gap:.5em;column-gap:.5em;padding:1em;-webkit-box-align:center;align-items:center}.settings-modal.-mobile .setting-item .setting-label{text-align:left}.settings-modal.-mobile .setting-item .checkbox .label{text-align:left;margin-left:0}.settings-modal.-mobile ul{padding:0}.settings-modal.-mobile ul li:not(:first-child) .setting-item{border-top:1px solid var(--border)}.settings-modal.-mobile .setting-list:not(.suboptions).two-column,.settings-modal.-mobile .option-list.two-column{grid-template-columns:1fr}.settings-modal.peek .settings-modal-panel{-webkit-transform:translateY(calc((100vh - 100%)/2 + 100% - 50px));transform:translateY(calc((100vh - 100%)/2 + 100% - 50px))}@media all and (width <= 800px){.settings-modal.peek .settings-modal-panel{-webkit-transform:translateY(calc(100% - 50px));transform:translateY(calc(100% - 50px))}} diff --git a/priv/static/static/css/settings_modal_admin_content.CKTEQiM8.css b/priv/static/static/css/settings_modal_admin_content.CKTEQiM8.css new file mode 100644 index 000000000..0e18eace4 --- /dev/null +++ b/priv/static/static/css/settings_modal_admin_content.CKTEQiM8.css @@ -0,0 +1 @@ +.AttachmentSetting .attachment{width:100%;height:15em;margin-bottom:.5em;display:block}.AttachmentSetting .attachment-input{flex-direction:column;width:20em;margin-left:1em;display:flex}.AttachmentSetting.-compact .attachment-input{flex-direction:row;align-items:flex-end}.AttachmentSetting.-compact .attachment{flex:0;order:0;align-self:center;min-width:4em;height:4em;margin-bottom:0;display:block}.AttachmentSetting.-compact .control-field{order:1;min-width:12em;margin-left:.5em}.AttachmentSetting.-compact .control-upload{order:2;min-width:12em;padding:0 .5em}.AttachmentSetting .controls{margin-bottom:.5em}.AttachmentSetting .controls input,.AttachmentSetting .controls button{width:100%}.ListSetting .setting-list .checkbox{padding:.5em 0}.MapSetting .btn-group{display:flex}.MapSetting dl{grid-template-columns:auto auto;gap:.5em;display:inline-grid}.MapSetting dl dt{font-weight:800;display:inline}.MapSetting dl dt:after{content:":"}.MapSetting dl dd{margin:0;display:inline}.emoji-tab-edit-popover{padding-bottom:.5em;padding-left:.5em;padding-right:.5em}.emoji-tab-edit-popover .emoji-tab-popover-new-upload{margin-bottom:2em}.emoji-tab-edit-popover .emoji{width:2.3em;height:2.3em}.emoji-tab-edit-popover .Select{display:inline-block}.emoji-tab-edit-popover h4{margin-top:1em;margin-bottom:1em}.EmojiTab .setting-list{margin:.5em 2em}.EmojiTab .setting-section{margin-left:.5em;margin-right:.5em}.EmojiTab .toolbar{flex-wrap:wrap;gap:.5em;display:flex}.EmojiTab .toolbar .header-buttons{flex:1 0 auto;justify-content:end;align-items:end;display:flex}.EmojiTab .toolbar .header-buttons:not(.btn-group){gap:.5em}.EmojiTab .toolbar .header-buttons .header-text{flex:1 0 auto}.EmojiTab .toolbar .button-default{flex:none;padding:.5em;font-size:1rem}.EmojiTab .toolbar .popover-wrapper{display:flex}.EmojiTab .selector-buttons,.EmojiTab .meta-buttons{flex-wrap:wrap;gap:.5em;margin-left:1em;display:flex}.EmojiTab h5{margin-top:1em;margin-bottom:.25em}.EmojiTab h3.toolbar{align-items:end}.EmojiTab .emoji-info-input{width:100%}.EmojiTab .emoji-data-input{width:40%;margin-left:.5em;margin-right:.5em}.EmojiTab .emoji{width:2em;height:2em}.EmojiTab .emoji-unsaved{box-shadow:0 3px 5px var(--cBlue)}.EmojiTab .emoji-list{flex-wrap:wrap;gap:1em;display:flex}.EmojiTab .emoji-list .button-unstyled{display:flex}.EmojiTab .emoji-list .emoji-item,.EmojiTab .emoji-list .placeholder{opacity:.5;width:2em;height:2em}.EmojiTab .emoji-list .placeholder{background:var(--textFaint);border-radius:.5em}.emoji-tab-popover-button:not(:first-child){margin-left:.5em}.emoji-tab-popover-input{margin-bottom:.5em}.emoji-tab-popover-input label{margin-bottom:.5em;display:block}.emoji-tab-popover-input input{width:20em}.emoji-tab-popover-input .emoji-tab-popover-file{padding-top:3px}.emoji-tab-popover-input .warning{color:var(--cOrange)}.ListTupleSetting .btn-group{display:flex}.ListTupleSetting dl{grid-template-columns:auto auto;align-items:baseline;gap:.5em;display:inline-grid}.ListTupleSetting dl dt{font-weight:800;display:inline}.ListTupleSetting dl dt:after{content:":"}.ListTupleSetting dl dd{margin:0;display:inline}.FrontendsTab{padding:0 1em}.FrontendsTab .cards-list{padding:0}.FrontendsTab li.frontend-card{flex-direction:column;margin:0;display:flex}.FrontendsTab .frontend-buttons{flex-wrap:wrap;flex:1 0 auto;justify-content:end;align-items:end;gap:.5em;margin-top:.5em;display:flex}.FrontendsTab .relative{position:relative}.FrontendsTab .overlay{background:var(--bg);z-index:2;opacity:.9;position:absolute;inset:0}.FrontendsTab h5{text-transform:capitalize;margin:0;font-size:1.15em}.FrontendsTab dl{margin-left:1em}.FrontendsTab dt{text-overflow:ellipsis;white-space:nowrap;margin-top:.5em;overflow-x:hidden}.FrontendsTab dd{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ColorSetting.setting-item{grid-template-areas:"label control"".desc"".draft";display:grid}.ColorSetting.setting-item .setting-label{text-align:right;align-self:center}.ColorSetting.setting-item .setting-control{align-self:end}.ColorSetting .color-setting-input{align-self:baseline}div.PWAManifestIconsSetting{margin-left:3em}div.PWAManifestIconsSetting.setting-item{grid-template:"label"2em"desc""control"1fr"draft"/1fr;display:grid}div.PWAManifestIconsSetting .pwa-label.setting-label{text-align:left;align-self:end}div.PWAManifestIconsSetting .buttons{gap:.5em;-webkit-box-pack:right;justify-content:right;margin-top:.5em;display:flex}div.PWAManifestIconsSetting .buttons button{line-height:2}div.PWAManifestIconsSetting ul{grid-gap:2em;grid-template-columns:repeat(auto-fit,12em);list-style:none;display:grid}div.PWAManifestIconsSetting dl{grid-template-columns:1fr;align-items:baseline;gap:.25em;margin-top:.5em;display:grid}div.PWAManifestIconsSetting dl dt{font-weight:800}div.PWAManifestIconsSetting dl dt:after{content:":"}div.PWAManifestIconsSetting dl dd{margin:0}div.PWAManifestIconsSetting .src-field{grid-template-columns:auto;justify-items:center;gap:.5em;display:grid}div.PWAManifestIconsSetting .src-field .src-attachment{width:10em;height:10em;margin-bottom:.5em;display:block}div.PWAManifestIconsSetting .src-field .src-upload{width:100%;display:block}div.PWAManifestIconsSetting .src-field .src-url{flex-direction:column;gap:.25em;width:100%;display:flex}div.PWAManifestIconsSetting .src-field .src-url label{display:block}.RateSetting.setting-item{grid-template-areas:"label control""desc control"".draft";display:grid}.RateSetting.setting-item .setting-label{text-align:right;align-self:center}.RateSetting.setting-item .setting-description{text-align:right}.RateSetting.setting-item .setting-control{align-self:end}.RateSetting table{margin-top:.5em}.RateSetting th{font-weight:400}.RateSetting td input{width:15ch}.RateSetting{margin-bottom:2em}.AdminUserCard details{white-space:normal}.AdminUserCard details summary{font-weight:700}.AdminUserCard details span{resize:vertical;max-height:6.5em;display:block;overflow-y:auto}.AdminUserCard .right-side{flex-wrap:wrap;justify-content:end;align-items:baseline;gap:.5em;margin-top:.5em;display:flex}.AdminUserCard .right-side .alert{margin:0}.UsersTab{flex-direction:column;height:100%;padding:0;display:flex}.UsersTab h3{margin-left:.5em;margin-right:.5em}.UsersTab .splitter{height:100%;display:flex;overflow-y:hidden}.UsersTab .filters-section{border-right:1px solid var(--border);flex-direction:column;flex:none;gap:1em;margin-right:1em;padding:1em;display:flex;overflow:auto visible}.UsersTab .filters-section>div{flex:0 auto}.UsersTab .filters-section .filter{min-width:14em;display:block}.UsersTab .filters-section .filter .query-label{margin-bottom:.5em}.UsersTab .filters-section .filter>input{width:100%}.UsersTab .users-list{flex:1 0 30em}.settings-admin-content .setting-item{grid-template-columns:1fr 3fr} diff --git a/priv/static/static/css/settings_modal_admin_content.d1pRGdhX.css b/priv/static/static/css/settings_modal_admin_content.d1pRGdhX.css deleted file mode 100644 index cc2da389c..000000000 --- a/priv/static/static/css/settings_modal_admin_content.d1pRGdhX.css +++ /dev/null @@ -1 +0,0 @@ -.ColorSetting.setting-item{display:grid;grid-template-areas:"label control" ". desc" ". draft"}.ColorSetting.setting-item .setting-label{text-align:right;align-self:center}.ColorSetting.setting-item .setting-control{align-self:end}.ColorSetting .color-setting-input{align-self:baseline}.AttachmentSetting .attachment{display:block;width:100%;height:15em;margin-bottom:.5em}.AttachmentSetting .attachment-input{margin-left:1em;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;width:20em}.AttachmentSetting.-compact .attachment-input{-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-webkit-box-align:end;align-items:flex-end}.AttachmentSetting.-compact .attachment{-webkit-box-flex:0;flex:0;-webkit-box-ordinal-group:1;order:0;display:block;min-width:4em;height:4em;align-self:center;margin-bottom:0}.AttachmentSetting.-compact .control-field{-webkit-box-ordinal-group:2;order:1;min-width:12em;margin-left:.5em}.AttachmentSetting.-compact .control-upload{-webkit-box-ordinal-group:3;order:2;min-width:12em;padding:0 .5em}.AttachmentSetting .controls{margin-bottom:.5em}.AttachmentSetting .controls input,.AttachmentSetting .controls button{width:100%}.ListSetting .setting-list .checkbox{padding:.5em 0}div.PWAManifestIconsSetting{margin-left:3em}div.PWAManifestIconsSetting.setting-item{display:grid;grid-template-areas:"label" "desc" "control" "draft";grid-template-rows:2em auto 1fr;grid-template-columns:1fr}div.PWAManifestIconsSetting .pwa-label.setting-label{align-self:end;text-align:left}div.PWAManifestIconsSetting .buttons{display:-webkit-box;display:flex;gap:.5em;-webkit-box-pack:right;justify-content:right;margin-top:.5em}div.PWAManifestIconsSetting .buttons button{line-height:2}div.PWAManifestIconsSetting ul{list-style:none;display:grid;grid-template-columns:repeat(auto-fit,12em);grid-gap:2em}div.PWAManifestIconsSetting dl{display:grid;grid-template-columns:1fr;margin-top:.5em;gap:.25em;-webkit-box-align:baseline;align-items:baseline}div.PWAManifestIconsSetting dl dt{font-weight:800}div.PWAManifestIconsSetting dl dt:after{content:":"}div.PWAManifestIconsSetting dl dd{margin:0}div.PWAManifestIconsSetting .src-field{display:grid;grid-template-columns:auto;justify-items:center;gap:.5em}div.PWAManifestIconsSetting .src-field .src-attachment{width:10em;height:10em;display:block;margin-bottom:.5em}div.PWAManifestIconsSetting .src-field .src-upload{display:block;width:100%}div.PWAManifestIconsSetting .src-field .src-url{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;gap:.25em;width:100%}div.PWAManifestIconsSetting .src-field .src-url label{display:block}.MapSetting .btn-group{display:-webkit-box;display:flex}.MapSetting dl{display:inline-grid;grid-template-columns:auto auto;gap:.5em}.MapSetting dl dt{display:inline;font-weight:800}.MapSetting dl dt:after{content:":"}.MapSetting dl dd{display:inline;margin:0}.FrontendsTab .cards-list{padding:0}.FrontendsTab li.frontend-card{display:-webkit-box;display:flex;margin:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.FrontendsTab .frontend-buttons{margin-top:.5em;display:-webkit-box;display:flex;-webkit-box-pack:end;justify-content:end;gap:.5em;flex-wrap:wrap;-webkit-box-flex:1;flex:1 0 auto;-webkit-box-align:end;align-items:end}.FrontendsTab .relative{position:relative}.FrontendsTab .overlay{position:absolute;background:var(--bg);z-index:2;opacity:.9;top:0;right:0;bottom:0;left:0}.FrontendsTab h5{margin:0;font-size:1.15em}.FrontendsTab dl{margin-left:1em}.FrontendsTab dt{margin-top:.5em;text-overflow:ellipsis;white-space:nowrap;overflow-x:hidden}.FrontendsTab dd{text-overflow:ellipsis;white-space:nowrap;overflow-x:hidden}.emoji-tab-edit-popover{padding-left:.5em;padding-right:.5em;padding-bottom:.5em}.emoji-tab-edit-popover .emoji-tab-popover-new-upload{margin-bottom:2em}.emoji-tab-edit-popover .emoji{width:2.3em;height:2.3em}.emoji-tab-edit-popover .Select{display:inline-block}.emoji-tab-edit-popover h4{margin-bottom:1em;margin-top:1em}.EmojiTab .setting-list{margin:.5em 2em}.EmojiTab .toolbar{display:-webkit-box;display:flex;flex-wrap:wrap;gap:.5em}.EmojiTab .toolbar .header-buttons{display:-webkit-box;display:flex;-webkit-box-flex:1;flex:1 0 auto;-webkit-box-pack:end;justify-content:end;-webkit-box-align:end;align-items:end}.EmojiTab .toolbar .header-buttons:not(.btn-group){gap:.5em}.EmojiTab .toolbar .header-buttons .header-text{-webkit-box-flex:1;flex:1 0 auto}.EmojiTab .toolbar .button-default{-webkit-box-flex:0;flex:0 0 auto;padding:.5em;font-size:1rem}.EmojiTab .toolbar .popover-wrapper{display:-webkit-box;display:flex}.EmojiTab .selector-buttons,.EmojiTab .meta-buttons{display:-webkit-box;display:flex;flex-wrap:wrap;gap:.5em;margin-left:1em}.EmojiTab h5{margin-top:1em;margin-bottom:.25em}.EmojiTab h3.toolbar{-webkit-box-align:end;align-items:end}.EmojiTab .emoji-info-input{width:100%}.EmojiTab .emoji-data-input{width:40%;margin-left:.5em;margin-right:.5em}.EmojiTab .emoji{width:2em;height:2em}.EmojiTab .emoji-unsaved{box-shadow:0 3px 5px var(--cBlue)}.EmojiTab .emoji-list{display:-webkit-box;display:flex;flex-wrap:wrap;gap:1em}.EmojiTab .emoji-list .button-unstyled{display:-webkit-box;display:flex}.EmojiTab .emoji-list .emoji-item,.EmojiTab .emoji-list .placeholder{width:2em;height:2em;opacity:.5}.EmojiTab .emoji-list .placeholder{background:var(--textFaint);border-radius:.5em}.emoji-tab-popover-button:not(:first-child){margin-left:.5em}.emoji-tab-popover-input{margin-bottom:.5em}.emoji-tab-popover-input label{display:block;margin-bottom:.5em}.emoji-tab-popover-input input{width:20em}.emoji-tab-popover-input .emoji-tab-popover-file{padding-top:3px}.emoji-tab-popover-input .warning{color:var(--cOrange)}.RateSetting{margin-bottom:2em}.RateSetting.setting-item{display:grid;grid-template-areas:"label control" "desc control" ". draft"}.RateSetting.setting-item .setting-label{text-align:right;align-self:center}.RateSetting.setting-item .setting-description{text-align:right}.RateSetting.setting-item .setting-control{align-self:end}.RateSetting table{margin-top:.5em}.RateSetting th{font-weight:400}.RateSetting td input{width:15ch}.ListTupleSetting .btn-group{display:-webkit-box;display:flex}.ListTupleSetting dl{display:inline-grid;grid-template-columns:auto auto;gap:.5em;-webkit-box-align:baseline;align-items:baseline}.ListTupleSetting dl dt{display:inline;font-weight:800}.ListTupleSetting dl dt:after{content:":"}.ListTupleSetting dl dd{display:inline;margin:0}.settings-admin-content .setting-item{grid-template-columns:1fr 3fr} diff --git a/priv/static/static/css/settings_modal_user_content.7KpKOwxU.css b/priv/static/static/css/settings_modal_user_content.7KpKOwxU.css deleted file mode 100644 index 7287404d6..000000000 --- a/priv/static/static/css/settings_modal_user_content.7KpKOwxU.css +++ /dev/null @@ -1 +0,0 @@ -.importer-uploading{font-size:1.5em;margin:.25em}.exporter{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.exporter-processing{margin:.25em}.data-import-export-tab .importer-exporter{display:-webkit-inline-box;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;gap:.5em}.data-import-export-tab table td,.data-import-export-tab table th{line-height:1.5}.data-import-export-tab table th{padding:0 .5em}.data-import-export-tab table td{padding:.5em}.autosuggest{position:relative}.autosuggest-input{display:block;width:100%}.autosuggest-results{position:absolute;left:0;top:100%;right:0;max-height:400px;background-color:var(--bg);border-style:solid;border-width:1px;border-color:var(--border);border-radius:var(--roundness);border-top-left-radius:0;border-top-right-radius:0;box-shadow:1px 1px 4px #0009;box-shadow:var(--shadow);overflow-y:auto;z-index:1}.block-card-content-container{margin-top:.5em;text-align:right}.block-card-content-container button{width:10em}.mute-card-content-container{margin-top:.5em;text-align:right}.mute-card-content-container button{width:10em}.domain-mute-card{-webkit-box-flex:1;flex:1 0;display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;-webkit-box-align:center;align-items:center;padding:.6em 1em .6em 0}.domain-mute-card-domain{margin-right:1em;overflow:hidden;text-overflow:ellipsis}.domain-mute-card button{width:10em}.autosuggest-results .domain-mute-card{padding-left:1em}.selectable-list{--__line-height: 1.5em;--__horizontal-gap: .75em;--__vertical-gap: .5em}.selectable-list-item-inner{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center}.selectable-list-item-inner>*{min-width:0}.selectable-list-header{display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;padding:var(--__vertical-gap) var(--__horizontal-gap);border-bottom:1px solid;border-bottom-color:var(--border)}.selectable-list-header-actions{-webkit-box-flex:1;flex:1}.selectable-list-checkbox-wrapper{padding-right:var(--__horizontal-gap);-webkit-box-flex:0;flex:none}.with-subscription-loading{padding:.7em;text-align:center}.with-subscription-loading .error{font-size:1rem}.mutes-and-blocks-tab{height:100%}.mutes-and-blocks-tab .usersearch-wrapper{padding:1em}.mutes-and-blocks-tab .bulk-actions{text-align:right;padding:0 1em;min-height:2em}.mutes-and-blocks-tab .bulk-action-button{width:10em}.mutes-and-blocks-tab .domain-mute-form{padding:1em;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.mutes-and-blocks-tab .domain-mute-button{align-self:flex-end;margin-top:1em;width:10em}.UnitSetting .no-break{display:-webkit-inline-box;display:inline-flex}.UnitSetting .number-input{max-width:6.5em;text-align:right}.UnitSetting .unit-input,.UnitSetting .unit-input select{min-width:4em;width:auto}.HelpIndicator{display:inline-block;position:relative}.help-tooltip{margin:.5em 1em;min-width:10em;max-width:30vw;text-align:center}.filtering-tab .muteFilterContainer{border:1px solid var(--border);border-radius:var(--roundness);height:33vh;overflow-y:auto}.filtering-tab .mute-filter{border:1px solid var(--border);border-radius:var(--roundness);margin:.5em;padding:.5em;display:grid;-webkit-box-align:baseline;align-items:baseline;grid-gap:.5em}.filtering-tab .never{margin-left:.5em}.filtering-tab .filter-name{grid-column:1/span 2;grid-row:1}.filtering-tab .alert,.filtering-tab .button-default{display:inline-block;line-height:2;padding:0 .5em}.filtering-tab .filter-enabled{grid-column:3;grid-row:1;text-align:right;line-height:2}.filtering-tab .filter-field{display:grid;grid-template-columns:subgrid;grid-template-rows:subgrid;grid-column:1/span 3;-webkit-box-align:baseline;align-items:baseline}.filtering-tab .filter-field label{grid-column:1;text-align:right}.filtering-tab .filter-field .filter-field-value{grid-column:2/span 2}.filtering-tab .filter-buttons{grid-column:1/span 3;justify-self:end;display:inline-grid;grid-gap:.5em;grid-template-columns:repeat(4,1fr);max-width:100%;-webkit-box-pack:end;justify-content:end}.filtering-tab .muteFiltersActions,.filtering-tab .muteFiltersActionsBottom{display:grid;-webkit-box-align:baseline;align-items:baseline;grid-auto-flow:column;grid-template-columns:1fr;grid-gap:.5em;margin:.5em 0}.filtering-tab .muteFiltersActions .total,.filtering-tab .muteFiltersActionsBottom .total{-webkit-box-flex:1;flex:1}.settings-modal.-mobile .filtering-tab .filter-buttons{grid-template-columns:repeat(1,1fr)}.mfa-backup-codes .warning{color:var(--cOrange)}.mfa-backup-codes .backup-codes{font-family:var(--monoFont)}.mfa-settings .mfa-heading,.mfa-settings .method-item{display:-webkit-box;display:flex;flex-wrap:wrap;-webkit-box-pack:justify;justify-content:space-between;-webkit-box-align:baseline;align-items:baseline}.mfa-settings .warning{color:var(--cOrange)}.mfa-settings .setup-otp{display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;flex-wrap:wrap}.mfa-settings .setup-otp .qr-code{-webkit-box-flex:1;flex:1;padding-right:.7em}.mfa-settings .setup-otp .verify{-webkit-box-flex:1;flex:1}.mfa-settings .setup-otp .error{margin:.3em 0 0}.mfa-settings .setup-otp .confirm-otp-actions button{width:15em;margin-top:5px}.profile-tab .setting-section.profile-edit{margin:0}.profile-tab .setting-section.profile-edit h2{margin-left:1rem}.profile-tab .setting-section.profile-edit .user-card{padding:1.2em;overflow:hidden}.profile-tab .setting-item .custom-boolean-setting{display:grid;grid-template-columns:subgrid}.profile-tab .setting-item .custom-boolean-setting .label{grid-area:label;text-align:right}.-mobile .profile-tab .setting-item .custom-boolean-setting .label{text-align:left}.profile-tab .setting-item .custom-boolean-setting .checkbox-indicator{grid-area:control}.invalid-tooltip{margin:.5em 1em;min-width:10em;text-align:center}.posts-tab .greentext{color:var(--funtextGreentext)}.PaletteEditor{justify-content:space-around;grid-template-columns:repeat(4,1fr);grid-template-rows:repeat(5,1fr) auto;grid-gap:.5em;-webkit-box-align:baseline;align-items:baseline}.PaletteEditor .buttons{margin-top:.5em;display:grid;gap:.5em}.PaletteEditor .palette{display:grid;grid-template-rows:1fr;grid-auto-flow:row;grid-auto-rows:auto;grid-template-columns:repeat(auto-fill,10em);grid-gap:.5em;margin-bottom:.5em}.PaletteEditor .palette-import-button{grid-column:1/span 2}.PaletteEditor .palette-export-button{grid-column:3/span 2}.PaletteEditor .palette-apply-button{grid-column:1/span 2}.PaletteEditor .color-input.style-control{margin:0}.PaletteEditor.-compact{grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(5,1fr) auto}.PaletteEditor.-compact .palette-import-button{grid-column:1}.PaletteEditor.-compact .palette-export-button{grid-column:2}.PaletteEditor.-compact.-apply{grid-template-rows:repeat(5,1fr) auto auto}.PaletteEditor.-compact.-apply .palette-apply-button,.PaletteEditor.-mobile.-apply .palette-apply-button{grid-column:1/span 2}.PaletteEditor.-mobile .color-input{display:grid;gap:.5em}.PaletteEditor.-mobile .color-input label{-webkit-box-flex:1;flex:1}.theme-preview-container{position:relative;border-top:1px dashed;border-bottom:1px dashed;border-color:var(--border);margin:1em 0;padding:1em;background-color:var(--wallpaper);background-image:var(--body-background-image);background-size:cover;background-position:50% 50%}.theme-preview-container .theme-preview-content{padding:1.5em}.theme-preview-container .dummy .post{font-family:var(--postFont);display:-webkit-box;display:flex}.theme-preview-container .dummy .post .content{-webkit-box-flex:1;flex:1}.theme-preview-container .dummy .post .content h4{margin-bottom:.25em}.theme-preview-container .dummy .post .content .icons{margin-top:.5em;display:-webkit-box;display:flex}.theme-preview-container .dummy .post .content .icons i{margin-right:1em}.theme-preview-container .dummy .after-post{margin-top:1em;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center}.theme-preview-container .dummy .avatar,.theme-preview-container .dummy .avatar-alt{background:-webkit-linear-gradient(315deg,#b8e1fc 0%,#a9d2f3 10%,#90bae4 25%,#90bcea 37%,#90bff0 50%,#6ba8e5 51%,#a2daf5 83%,#bdf3fd 100%);background:linear-gradient(135deg,#b8e1fc,#a9d2f3 10%,#90bae4 25%,#90bcea 37%,#90bff0 50%,#6ba8e5 51%,#a2daf5 83%,#bdf3fd);color:#000;font-family:sans-serif;text-align:center;margin-right:1em}.theme-preview-container .dummy .avatar-alt{-webkit-box-flex:0;flex:0 auto;margin-left:2em;font-size:.85em;min-width:2.2rem;min-height:2.2rem;line-height:1.5em;align-content:center}.theme-preview-container .dummy .avatar{-webkit-box-flex:0;flex:0 auto;width:3.5em;height:3.5em;font-size:1rem;line-height:3.5em;-webkit-box-pack:center;justify-content:center}.theme-preview-container .dummy .actions{display:-webkit-box;display:flex;-webkit-box-align:baseline;align-items:baseline}.theme-preview-container .dummy .actions .checkbox{margin-right:1em;-webkit-box-flex:1;flex:1}.theme-preview-container .dummy .separator{margin:1em;border-bottom:1px solid;border-color:var(--border)}.theme-preview-container .dummy .btn{min-width:3em}.theme-preview-container .underlay-preview{position:absolute;top:0;right:.9em;bottom:0;left:.9em}.appearance-tab{margin:1em}.appearance-tab h3{border:none}.appearance-tab .palette,.appearance-tab .theme-notice{padding:.5em}.appearance-tab .theme-name{font-weight:900;padding-bottom:.5em}.appearance-tab input[type=file]{padding:.25em;height:auto}.appearance-tab .banner-background{display:-webkit-box;display:flex;gap:1em;flex-wrap:wrap}.appearance-tab .banner-background h4{margin:0}.appearance-tab .banner-background-input{-webkit-box-flex:1;flex:1;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;gap:.5em}.appearance-tab .banner-background-input .custom-bg-control{display:grid;gap:.5em;grid-template-columns:1fr 1fr}.appearance-tab .banner-background-preview{display:-webkit-box;display:flex;max-width:100%;width:300px;position:relative}.appearance-tab .banner-background-preview img{width:100%}.appearance-tab .banner-background-preview .fun-monitor{position:relative;pointer-events:none;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-align:center;align-items:center}.appearance-tab .banner-background-preview .fun-monitor *{line-height:1}.appearance-tab .banner-background-preview .fun-monitor-display-bezel,.appearance-tab .banner-background-preview .fun-monitor-display-screen{aspect-ratio:16/9;width:16em}.appearance-tab .banner-background-preview .fun-monitor img{object-fit:cover}.appearance-tab .banner-background-preview .fun-monitor .wallpaper{position:absolute;top:0;right:0;bottom:0;left:0;background-color:var(--wallpaper)}.appearance-tab .banner-background-preview .fun-monitor-display-uploading{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:-webkit-box;display:flex;place-items:center;place-content:center;background-color:#0009;font-size:4em}.appearance-tab .banner-background-preview .fun-monitor-display-screen{padding:0;overflow:hidden;position:relative}.appearance-tab .banner-background-preview .fun-monitor-display-screen-overlay{background:transparent;position:absolute;top:0;right:0;bottom:0;left:0;z-index:2}.appearance-tab .banner-background-preview .fun-monitor-display-screen-image{aspect-ratio:16/9}.appearance-tab .banner-background-preview .fun-monitor-display-bezel{padding:1em;margin:0;-webkit-box-ordinal-group:2;order:1;z-index:3}.appearance-tab .banner-background-preview .fun-monitor-neck{width:5em;height:3em;margin-top:-1em;margin-bottom:-.5em;-webkit-box-ordinal-group:3;order:2}.appearance-tab .banner-background-preview .fun-monitor-stand{width:8em;height:1em;-webkit-box-ordinal-group:4;order:3;z-index:1}.appearance-tab .palettes-container{height:15em;overflow:hidden auto;scrollbar-gutter:stable;border-radius:var(--roundness);border:1px solid var(--border);margin-bottom:.5em;margin-top:0;padding:.5em}.appearance-tab .palettes{display:grid;grid-template-columns:1fr 1fr;grid-gap:.5em;padding:.5em;width:100%}.appearance-tab .palettes h5{grid-column:1/span 2;margin-bottom:0}.appearance-tab .palette-entry{display:grid;grid-template-columns:1fr auto;-webkit-box-align:center;align-items:center;-webkit-box-pack:justify;justify-content:space-between;padding:0 .5em;height:-webkit-max-content;height:max-content}.appearance-tab .palette-entry .palette-label{height:auto}.appearance-tab .palette-entry .palette-label label{text-align:center}.appearance-tab .palette-entry .palette-square{-webkit-box-flex:0;flex:0 0 auto;display:inline-block;min-width:1em;min-height:1em}.appearance-tab .column-settings{display:-webkit-box;display:flex;-webkit-box-pack:space-evenly;justify-content:space-evenly;flex-wrap:wrap}.appearance-tab .column-settings .size-label{display:block;margin-bottom:.5em;margin-top:.5em}.modal-view.-mobile .appearance-tab .palettes{grid-template-columns:1fr}.modal-view.-mobile .appearance-tab .palette-entry{grid-column:1;-webkit-box-pack:center;justify-content:center}.modal-view.-mobile .appearance-tab .palette-label{line-height:1.5em;margin-top:.5em}.appearance-tab .palette-preview{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;grid-template-rows:1em 1em;margin:.5em 0}.appearance-tab .theme-list{list-style:none;display:-webkit-box;display:flex;flex-wrap:wrap;margin:-.5em 0 1em;height:25em;overflow:hidden auto;scrollbar-gutter:stable;border-radius:var(--roundness);border:1px solid var(--border);padding:0}.appearance-tab .theme-list .theme-preview{font-size:1rem;width:14rem;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-align:center;align-items:center;margin:.5em}.appearance-tab .theme-list .theme-preview.placeholder{opacity:.2}.appearance-tab .theme-list .theme-preview .theme-preview-container{pointer-events:none;zoom:.5;border:none;border-radius:var(--roundness);text-align:left}.developer-tab .setting-list{margin-left:2em}.developer-tab .cache-buttons{display:grid;grid-template-columns:1fr 1fr;grid-column:1/3;-webkit-column-gap:.5em;column-gap:.5em;margin:0 5em}.-mobile .developer-tab .cache-buttons{grid-template-columns:1fr;grid-template-rows:1fr 1fr;row-gap:.5em;margin:0}.developer-tab dt{font-weight:900}.developer-tab dd{margin-top:.5em;margin-bottom:1em}.SelectMotion{-webkit-box-flex:0;flex:0 0 auto;display:grid;grid-auto-columns:1fr;grid-auto-flow:column;margin-top:.25em}.SelectMotion .button-default{margin:0;padding:0}.ComponentPreview{display:grid;grid-template-columns:1em 1fr 1fr 1em;grid-template-rows:2em 1fr 1fr 1fr 1em 2em -webkit-max-content;grid-template-rows:2em 1fr 1fr 1fr 1em 2em max-content;grid-template-areas:"header header header header " "preview preview preview y-slide" "preview preview preview y-slide" "preview preview preview y-slide" "x-slide x-slide x-slide . " "x-num x-num y-num y-num " "assists assists assists assists";grid-gap:.5em}.ComponentPreview:not(.-shadow-controls){grid-template-areas:"header header header header " "preview preview preview y-slide" "preview preview preview y-slide" "preview preview preview y-slide" "assists assists assists assists";grid-template-rows:2em 1fr 1fr 1fr -webkit-max-content;grid-template-rows:2em 1fr 1fr 1fr max-content}.ComponentPreview .header{grid-area:header;place-self:baseline center;line-height:2}.ComponentPreview .invalid-container{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center center;background-color:#64000080}.ComponentPreview .invalid-container .alert{padding:.5em 1em}.ComponentPreview .assists{grid-area:assists;display:grid;grid-auto-flow:row;grid-auto-rows:2em;grid-gap:.5em}.ComponentPreview .input-light-grid{justify-self:center}.ComponentPreview .input-number{min-width:2em}.ComponentPreview .x-shift-number{grid-area:x-num;justify-self:right}.ComponentPreview .y-shift-number{grid-area:y-num;justify-self:left}.ComponentPreview .x-shift-number input,.ComponentPreview .y-shift-number input{max-width:4em}.ComponentPreview .x-shift-slider{grid-area:x-slide;height:auto;align-self:start;min-width:10em}.ComponentPreview .y-shift-slider{grid-area:y-slide;-webkit-writing-mode:vertical-lr;writing-mode:vertical-lr;justify-self:left;min-height:10em}.ComponentPreview .x-shift-slider,.ComponentPreview .y-shift-slider{padding:0}.ComponentPreview .preview-window{--__grid-color1: rgb(102 102 102);--__grid-color2: rgb(153 153 153);--__grid-color1-disabled: rgb(102 102 102 / 20%);--__grid-color2-disabled: rgb(153 153 153 / 20%);position:relative;grid-area:preview;aspect-ratio:1;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;min-width:10em;min-height:10em;background-color:var(--__grid-color2);background-image:-webkit-linear-gradient(45deg,var(--__grid-color1) 25%,transparent 25%),-webkit-linear-gradient(135deg,var(--__grid-color1) 25%,transparent 25%),-webkit-linear-gradient(45deg,transparent 75%,var(--__grid-color1) 75%),-webkit-linear-gradient(135deg,transparent 75%,var(--__grid-color1) 75%);background-image:linear-gradient(45deg,var(--__grid-color1) 25%,transparent 25%),linear-gradient(-45deg,var(--__grid-color1) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--__grid-color1) 75%),linear-gradient(-45deg,transparent 75%,var(--__grid-color1) 75%);background-size:20px 20px;background-position:0 0,0 10px,10px -10px,-10px 0;border-radius:var(--roundness)}.ComponentPreview .preview-window.-light-grid{--__grid-color1: rgb(205 205 205);--__grid-color2: rgb(255 255 255);--__grid-color1-disabled: rgb(205 205 205 / 20%);--__grid-color2-disabled: rgb(255 255 255 / 20%)}.ComponentPreview .preview-window.disabled{background-color:var(--__grid-color2-disabled);background-image:-webkit-linear-gradient(45deg,var(--__grid-color1-disabled) 25%,transparent 25%),-webkit-linear-gradient(135deg,var(--__grid-color1-disabled) 25%,transparent 25%),-webkit-linear-gradient(45deg,transparent 75%,var(--__grid-color1-disabled) 75%),-webkit-linear-gradient(135deg,transparent 75%,var(--__grid-color1-disabled) 75%);background-image:linear-gradient(45deg,var(--__grid-color1-disabled) 25%,transparent 25%),linear-gradient(-45deg,var(--__grid-color1-disabled) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--__grid-color1-disabled) 75%),linear-gradient(-45deg,transparent 75%,var(--__grid-color1-disabled) 75%)}.ComponentPreview .preview-window .preview-block{background:var(--background, var(--bg));display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;min-width:33%;min-height:33%;max-width:80%;max-height:80%;border-width:0;border-style:solid;border-color:var(--border);border-radius:var(--roundness);box-shadow:var(--shadow)}.ShadowControl{display:grid;grid-template-columns:10em 1fr 1fr;grid-template-rows:1fr;grid-template-areas:"selector preview tweak";grid-gap:.5em;-webkit-box-pack:stretch;justify-content:stretch}.ShadowControl .style-control{display:-webkit-box;display:flex}.ShadowControl.-compact{grid-template-columns:10em 1fr;grid-template-rows:auto auto;grid-template-areas:"selector preview" "tweak tweak"}.ShadowControl.-compact.-no-preview{grid-template-columns:1fr;grid-template-rows:10em 1fr;grid-template-areas:"selector" "tweak"}.ShadowControl .shadow-switcher{grid-area:selector;-webkit-box-ordinal-group:2;order:1;-webkit-box-flex:1;flex:1 0 6em;min-width:6em;margin-right:.125em;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.ShadowControl .shadow-switcher .shadow-list{-webkit-box-flex:1;flex:1 0 auto}.ShadowControl .shadow-tweak{grid-area:tweak;-webkit-box-ordinal-group:4;order:3;-webkit-box-flex:2;flex:2 0 10em;min-width:10em;margin-left:.125em;margin-right:.125em;display:grid;grid-template-rows:auto 1fr;grid-gap:.25em}.ShadowControl .shadow-tweak .input-boolean{-webkit-box-flex:1;flex:1;display:-webkit-box;display:flex}.ShadowControl .shadow-tweak .input-boolean .label{-webkit-box-flex:1;flex:1}.ShadowControl .shadow-tweak .input-string{-webkit-box-flex:1;flex:1 0 5em}.ShadowControl .shadow-tweak .shadow-expression{width:100%;height:100%}.ShadowControl .shadow-tweak .id-control{-webkit-box-align:stretch;align-items:stretch}.ShadowControl .shadow-tweak .id-control .shadow-switcher,.ShadowControl .shadow-tweak .id-control .btn{min-width:1px;margin-right:5px}.ShadowControl .shadow-tweak .id-control .btn{padding:0 .4em;margin:0 .1em}.ShadowControl.-no-preview{grid-template-columns:10em 1fr;grid-template-rows:1fr;grid-template-areas:"selector tweak"}.ShadowControl.-no-preview .shadow-tweak{-webkit-box-ordinal-group:1;order:0;-webkit-box-flex:2;flex:2 0 8em;max-width:100%}.ShadowControl.-no-preview .input-range{min-width:5em}.ShadowControl .inset-alert{padding:.25em .5em}.ShadowControl.disabled .inset-alert{opacity:.2}.ShadowControl .shadow-preview{grid-area:preview;margin-left:.125em;place-self:start center}.inset-tooltip{max-width:30em}.tooltip{margin:.5em 1em}.contrast-ratio{display:-webkit-box;display:flex;-webkit-box-pack:end;justify-content:flex-end;-webkit-box-align:baseline;align-items:baseline}.contrast-ratio .label{margin-right:1em}.contrast-ratio .rating{display:inline-block;margin-left:.5em}.old-theme-tab{min-width:var(--themeEditorMinWidth, -webkit-fit-content);min-width:var(--themeEditorMinWidth, fit-content);margin:1em;padding-bottom:2em}.old-theme-tab .deprecation-warning{padding:.5em;margin:2em}.old-theme-tab .preset-switcher{margin-right:1em}.old-theme-tab .btn{margin-left:.25em;margin-right:.25em}.old-theme-tab .btn-group .btn{margin:0}.old-theme-tab .style-control{display:-webkit-box;display:flex;-webkit-box-align:baseline;align-items:baseline;margin-bottom:5px}.old-theme-tab .style-control .label{margin-right:1em;-webkit-box-flex:1;flex:1;line-height:2}.old-theme-tab .style-control .opt{margin:.5em}.old-theme-tab .style-control .color-input{-webkit-box-flex:0;flex:0 0 0}.old-theme-tab .style-control input,.old-theme-tab .style-control select{min-width:3em;margin:0;-webkit-box-flex:0;flex:0}.old-theme-tab .style-control input[type=number],.old-theme-tab .style-control select[type=number]{min-width:9em}.old-theme-tab .style-control input[type=number].-small,.old-theme-tab .style-control select[type=number].-small{min-width:5em}.old-theme-tab .style-control input[type=range],.old-theme-tab .style-control select[type=range]{-webkit-box-flex:1;flex:1;min-width:9em;align-self:center;margin:0 .5em}.old-theme-tab .style-control input[type=checkbox]+i,.old-theme-tab .style-control select[type=checkbox]+i{height:1.1em;align-self:center}.old-theme-tab .reset-container{flex-wrap:wrap}.old-theme-tab .fonts-container,.old-theme-tab .reset-container,.old-theme-tab .apply-container,.old-theme-tab .radius-container,.old-theme-tab .color-container{display:-webkit-box;display:flex}.old-theme-tab .fonts-container,.old-theme-tab .radius-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.old-theme-tab .color-container{flex-wrap:wrap;-webkit-box-pack:justify;justify-content:space-between}.old-theme-tab .color-container>h4{width:99%}.old-theme-tab .fonts-container,.old-theme-tab .color-container,.old-theme-tab .shadow-container,.old-theme-tab .radius-container,.old-theme-tab .presets-container{margin:1em 1em 0}.old-theme-tab .tab-header{display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;-webkit-box-align:baseline;align-items:baseline;width:100%;min-height:2.1em;margin-bottom:1em}.old-theme-tab .tab-header p{-webkit-box-flex:1;flex:1;margin:0 .5em 0 0}.old-theme-tab .tab-header-buttons{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.old-theme-tab .tab-header-buttons .btn{min-width:1px;-webkit-box-flex:0;flex:0 auto;padding:0 1em;margin-bottom:.5em}.old-theme-tab .shadow-selector .override{-webkit-box-flex:1;flex:1;margin-left:.5em}.old-theme-tab .shadow-selector .select-container{margin-top:-4px;margin-bottom:-3px}.old-theme-tab .save-load,.old-theme-tab .save-load-options{display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:baseline;align-items:baseline;flex-wrap:wrap}.old-theme-tab .save-load .presets,.old-theme-tab .save-load .import-export,.old-theme-tab .save-load-options .presets,.old-theme-tab .save-load-options .import-export{margin-bottom:.5em}.old-theme-tab .save-load .import-export,.old-theme-tab .save-load-options .import-export{display:-webkit-box;display:flex}.old-theme-tab .save-load .override,.old-theme-tab .save-load-options .override{margin-left:.5em}.old-theme-tab .save-load-options{flex-wrap:wrap;margin-top:.5em;-webkit-box-pack:center;justify-content:center}.old-theme-tab .save-load-options .keep-option{margin:0 .5em .5em;min-width:25%}.old-theme-tab .radius-item{flex-basis:auto}.old-theme-tab .radius-item,.old-theme-tab .color-item{min-width:20em;margin:5px 6px 0 0;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-flex:1;flex:1 1 0}.old-theme-tab .radius-item.wide,.old-theme-tab .color-item.wide{min-width:60%}.old-theme-tab .radius-item:not(.wide):nth-child(odd),.old-theme-tab .color-item:not(.wide):nth-child(odd){margin-right:7px}.old-theme-tab .radius-item .color,.old-theme-tab .radius-item .opacity,.old-theme-tab .color-item .color,.old-theme-tab .color-item .opacity{display:-webkit-box;display:flex;-webkit-box-align:baseline;align-items:baseline}.old-theme-tab .theme-radius-rn,.old-theme-tab .theme-color-cl{border:0;box-shadow:none;background:transparent;color:var(--textFaint);align-self:stretch}.old-theme-tab .theme-color-cl,.old-theme-tab .theme-radius-in,.old-theme-tab .theme-color-in{margin-left:.3em}.old-theme-tab .theme-radius-in{min-width:1em;max-width:7em;-webkit-box-flex:1;flex:1}.old-theme-tab .theme-radius-lb{max-width:50em}.old-theme-tab .theme-warning{display:-webkit-box;display:flex;-webkit-box-align:baseline;align-items:baseline;margin-bottom:.5em}.old-theme-tab .theme-warning .buttons .btn{margin-bottom:.5em}.extra-content .apply-container{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;justify-content:space-around;-webkit-box-flex:1;flex-grow:1}.extra-content .apply-container .btn{-webkit-box-flex:1;flex-grow:1;min-height:2em;min-width:0;max-width:10em;padding:0}.StyleTab{min-width:var(--themeEditorMinWidth, -webkit-fit-content);min-width:var(--themeEditorMinWidth, fit-content);margin:1em}.StyleTab .style-control{-webkit-box-align:baseline;align-items:baseline;margin-bottom:.5em}.StyleTab .style-control .label{display:inline-block;margin-right:.5em;-webkit-box-flex:1;flex:1 1 auto;line-height:2;min-height:2em}.StyleTab .style-control.suboption{margin-left:1em}.StyleTab .style-control input,.StyleTab .style-control select{min-width:3em;margin:0;-webkit-box-flex:0;flex:0}.StyleTab .style-control input[type=number],.StyleTab .style-control select[type=number]{min-width:9em}.StyleTab .style-control input[type=number].-small,.StyleTab .style-control select[type=number].-small{min-width:5em}.StyleTab .style-control input[type=range],.StyleTab .style-control select[type=range]{-webkit-box-flex:1;flex:1;min-width:9em;align-self:center;margin:0 .25em}.StyleTab .style-control input[type=checkbox]+i,.StyleTab .style-control select[type=checkbox]+i{height:1.1em;align-self:center}.StyleTab .setting-section.heading{padding:0}.StyleTab .meta-preview{display:grid;grid-template:"meta preview";grid-gap:1em;grid-template-columns:-webkit-min-content 6fr;grid-template-columns:min-content 6fr}.StyleTab .meta-preview .theme-preview-container{margin:0}.StyleTab .meta-preview ul.setting-list{padding:0;margin:0;grid-area:meta}.StyleTab .meta-preview ul.setting-list>li{margin:0}.StyleTab .meta-preview ul.setting-list .meta-field{margin:0}.StyleTab .meta-preview ul.setting-list .meta-field .setting-label{display:inline-block;margin-bottom:.5em}.StyleTab .meta-preview #edited-style-preview{grid-area:preview}.StyleTab .setting-section{padding-bottom:0;margin-top:1em}.StyleTab .setting-section .btn{padding:0 .5em}.StyleTab .setting-section:not(:first-child){margin-top:.5em}.StyleTab .setting-section:not(:last-child){margin-bottom:.5em}.StyleTab .list-editor{display:grid;grid-template-areas:"label editor" "selector editor" "movement editor";grid-template-columns:10em 1fr;grid-template-rows:auto 1fr auto;grid-gap:.5em}.StyleTab .list-editor .list-edit-area{grid-area:editor;-webkit-box-align:baseline;align-items:baseline}.StyleTab .list-editor .list-select{grid-area:selector;margin:0}.StyleTab .list-editor .list-select-label{font-weight:700;grid-area:label;margin:0;align-self:baseline}.StyleTab .list-editor .list-select-movement{grid-area:movement;margin:0}.StyleTab .variables-editor .variable-selector{display:grid;grid-template-columns:auto 1fr auto 10em;grid-template-rows:subgrid;-webkit-box-align:baseline;align-items:baseline;grid-gap:0 .5em}.StyleTab .variables-editor .list-edit-area{display:grid;grid-template-rows:subgrid}.StyleTab .variables-editor .shadow-control{grid-row:2/span 2}.StyleTab .component-editor{display:grid;grid-template-columns:6fr 3fr 4fr;grid-template-rows:auto auto 1fr;grid-gap:.5em;grid-template-areas:"component component variant" "state state state" "preview settings settings"}.StyleTab .component-editor .component-selector{grid-area:component;align-self:center}.StyleTab .component-editor .component-selector,.StyleTab .component-editor .state-selector,.StyleTab .component-editor .variant-selector{display:grid;grid-template-columns:1fr minmax(10em,1fr);grid-template-rows:auto;grid-auto-flow:column;grid-gap:.5em;-webkit-box-align:baseline;align-items:baseline}.StyleTab .component-editor .component-selector>label:not(.Select),.StyleTab .component-editor .state-selector>label:not(.Select),.StyleTab .component-editor .variant-selector>label:not(.Select){font-weight:700;justify-self:right}.StyleTab .component-editor .state-selector{grid-area:state;grid-template-columns:minmax(-webkit-min-content,7em) 1fr;grid-template-columns:minmax(min-content,7em) 1fr}.StyleTab .component-editor .variant-selector{grid-area:variant}.StyleTab .component-editor .state-selector-list{display:grid;list-style:none;grid-auto-flow:dense;grid-template-columns:repeat(5,minmax(-webkit-min-content,1fr));grid-template-columns:repeat(5,minmax(min-content,1fr));grid-auto-rows:1fr;grid-gap:.5em;padding:0;margin:0}.StyleTab .component-editor .preview-container{--border: none;--shadow: none;--roundness: none;grid-area:preview}.StyleTab .component-editor .component-settings{grid-area:settings}.StyleTab .component-editor .editor-tab{display:grid;grid-template-columns:1fr 2em;grid-column-gap:.5em;-webkit-box-align:center;align-items:center;grid-auto-rows:-webkit-min-content;grid-auto-rows:min-content;grid-auto-flow:dense;border-left:1px solid var(--border);border-right:1px solid var(--border);border-bottom:1px solid var(--border);padding:.5em}.StyleTab .component-editor .shadow-tab{grid-template-columns:1fr;justify-items:center}.-mobile .StyleTab .meta-preview{grid-template:"meta" "preview"}.-mobile .StyleTab .list-editor{display:grid;grid-template-areas:"label" "selector" "movement" "editor" "editor" "editor" "editor";grid-template-columns:1fr;grid-template-rows:auto 1fr auto}.-mobile .StyleTab .component-editor{grid-template-columns:1fr;grid-template-rows:auto;grid-template-areas:"component" "variant" "state" "preview" "settings"}.-mobile .StyleTab .variable-selector{grid-template-columns:1fr;grid-template-rows:auto;grid-auto-flow:row;grid-gap:.5em}.extra-content .style-actions-container{width:100%;display:-webkit-box;display:flex;-webkit-box-pack:end;justify-content:end}.extra-content .style-actions-container .style-actions{display:grid;grid-template-columns:repeat(4,minmax(7em,1fr));grid-gap:.25em} diff --git a/priv/static/static/css/settings_modal_user_content.DUcdr5Gz.css b/priv/static/static/css/settings_modal_user_content.DUcdr5Gz.css new file mode 100644 index 000000000..bd463121e --- /dev/null +++ b/priv/static/static/css/settings_modal_user_content.DUcdr5Gz.css @@ -0,0 +1 @@ +.tooltip{margin:.5em 1em}.contrast-ratio{justify-content:flex-end;align-items:baseline;display:flex}.contrast-ratio .label{margin-right:1em}.contrast-ratio .rating{margin-left:.5em;display:inline-block}.PaletteEditor{grid-gap:.5em;grid-template-rows:repeat(5,1fr) auto;grid-template-columns:repeat(4,1fr);justify-content:space-around;align-items:baseline}.PaletteEditor .buttons{gap:.5em;margin-top:.5em;display:grid}.PaletteEditor .palette{grid-gap:.5em;grid-template-rows:1fr;grid-template-columns:repeat(auto-fill,10em);grid-auto-rows:auto;grid-auto-flow:row;margin-bottom:.5em;display:grid}.PaletteEditor .palette-import-button{grid-column:1/span 2}.PaletteEditor .palette-export-button{grid-column:3/span 2}.PaletteEditor .palette-apply-button{grid-column:1/span 2}.PaletteEditor .color-input.style-control{margin:0}.PaletteEditor.-compact{grid-template-rows:repeat(5,1fr) auto;grid-template-columns:repeat(2,1fr)}.PaletteEditor.-compact .palette-import-button{grid-column:1}.PaletteEditor.-compact .palette-export-button{grid-column:2}.PaletteEditor.-compact.-apply{grid-template-rows:repeat(5,1fr) auto auto}.PaletteEditor.-compact.-apply .palette-apply-button,.PaletteEditor.-mobile.-apply .palette-apply-button{grid-column:1/span 2}.UnitSetting .no-break{display:inline-flex}.UnitSetting .number-input{text-align:right;max-width:6.5em}.UnitSetting .unit-input,.UnitSetting .unit-input select{width:auto;min-width:4em}.theme-preview-container{border-top:1px dashed;border-bottom:1px dashed;border-color:var(--border);background-color:var(--wallpaper);background-image:var(--body-background-image);background-position:50%;background-size:cover;margin:1em 0;padding:1em;position:relative}.theme-preview-container .theme-preview-content{padding:1.5em}.theme-preview-container .dummy .post{font-family:var(--postFont);display:flex}.theme-preview-container .dummy .post .content{flex:1}.theme-preview-container .dummy .post .content h4{margin-bottom:.25em}.theme-preview-container .dummy .post .content .icons{margin-top:.5em;display:flex}.theme-preview-container .dummy .post .content .icons i{margin-right:1em}.theme-preview-container .dummy .after-post{align-items:center;margin-top:1em;display:flex}.theme-preview-container .dummy .avatar,.theme-preview-container .dummy .avatar-alt{color:#000;text-align:center;background:linear-gradient(135deg,#b8e1fc 0%,#a9d2f3 10%,#90bae4 25%,#90bcea 37%,#90bff0 50%,#6ba8e5 51%,#a2daf5 83%,#bdf3fd 100%);margin-right:1em;font-family:sans-serif}.theme-preview-container .dummy .avatar-alt{flex:0 auto;align-content:center;min-width:2.2rem;min-height:2.2rem;margin-left:2em;font-size:.85em;line-height:1.5em}.theme-preview-container .dummy .avatar{flex:0 auto;justify-content:center;width:3.5em;height:3.5em;font-size:1rem;line-height:3.5em}.theme-preview-container .dummy .actions{align-items:baseline;display:flex}.theme-preview-container .dummy .actions .checkbox{flex:1;margin-right:1em}.theme-preview-container .dummy .separator{border-bottom:1px solid;border-color:var(--border);margin:1em}.theme-preview-container .dummy .btn{min-width:3em}.theme-preview-container .underlay-preview{position:absolute;inset:0 .9em}.appearance-tab{margin:1em}.appearance-tab h3{border:none}.appearance-tab .palette,.appearance-tab .theme-notice{padding:.5em}.appearance-tab .theme-name{padding-bottom:.5em;font-weight:900}.appearance-tab input[type=file]{height:auto;padding:.25em}.appearance-tab .banner-background{flex-wrap:wrap;gap:1em;display:flex}.appearance-tab .banner-background h4{margin:0}.appearance-tab .banner-background-input{flex-direction:column;flex:1;gap:.5em;display:flex}.appearance-tab .banner-background-input .custom-bg-control{grid-template-columns:1fr 1fr;gap:.5em;display:grid}.appearance-tab .banner-background-preview{width:300px;max-width:100%;display:flex;position:relative}.appearance-tab .banner-background-preview img{width:100%}.appearance-tab .banner-background-preview .fun-monitor{pointer-events:none;flex-direction:column;align-items:center;display:flex;position:relative}.appearance-tab .banner-background-preview .fun-monitor *{line-height:1}.appearance-tab .banner-background-preview .fun-monitor-display-bezel,.appearance-tab .banner-background-preview .fun-monitor-display-screen{aspect-ratio:16/9;width:16em}.appearance-tab .banner-background-preview .fun-monitor img{object-fit:cover}.appearance-tab .banner-background-preview .fun-monitor .wallpaper{background-color:var(--wallpaper);position:absolute;inset:0}.appearance-tab .banner-background-preview .fun-monitor-display-uploading{z-index:1;background-color:#0009;place-content:center;place-items:center;font-size:4em;display:flex;position:absolute;inset:0}.appearance-tab .banner-background-preview .fun-monitor-display-screen{padding:0;position:relative;overflow:hidden}.appearance-tab .banner-background-preview .fun-monitor-display-screen-overlay{z-index:2;background:0 0;position:absolute;inset:0}.appearance-tab .banner-background-preview .fun-monitor-display-screen-image{aspect-ratio:16/9}.appearance-tab .banner-background-preview .fun-monitor-display-bezel{z-index:3;order:1;margin:0;padding:1em}.appearance-tab .banner-background-preview .fun-monitor-neck{order:2;width:5em;height:3em;margin-top:-1em;margin-bottom:-.5em}.appearance-tab .banner-background-preview .fun-monitor-stand{z-index:1;order:3;width:8em;height:1em}.appearance-tab .palettes-container{scrollbar-gutter:stable;border-radius:var(--roundness);border:1px solid var(--border);height:15em;margin-top:0;margin-bottom:.5em;padding:.5em;overflow:hidden auto}.appearance-tab .palettes{grid-gap:.5em;grid-template-columns:1fr 1fr;width:100%;padding:.5em;display:grid}.appearance-tab .palettes h5{grid-column:1/span 2;margin-bottom:0}.appearance-tab .palette-entry{grid-template-columns:1fr auto;justify-content:space-between;align-items:center;height:max-content;padding:0 .5em;display:grid}.appearance-tab .palette-entry .palette-label{height:auto}.appearance-tab .palette-entry .palette-label label{text-align:center}.appearance-tab .palette-entry .palette-square{flex:none;min-width:1em;min-height:1em;display:inline-block}.appearance-tab .column-settings{-webkit-box-pack:space-evenly;flex-wrap:wrap;justify-content:space-evenly;display:flex}.appearance-tab .column-settings .size-label{margin-top:.5em;margin-bottom:.5em;display:block}.modal-view.-mobile .appearance-tab .palettes{grid-template-columns:1fr}.modal-view.-mobile .appearance-tab .palette-entry{grid-column:1;justify-content:center}.modal-view.-mobile .appearance-tab .palette-label{margin-top:.5em;line-height:1.5em}.appearance-tab .palette-preview{grid-template-rows:1em 1em;grid-template-columns:1fr 1fr 1fr 1fr;margin:.5em 0;display:grid}.appearance-tab .theme-list{scrollbar-gutter:stable;border-radius:var(--roundness);border:1px solid var(--border);flex-wrap:wrap;height:25em;margin:-.5em 0 1em;padding:0;list-style:none;display:flex;overflow:hidden auto}.appearance-tab .theme-list .theme-preview{flex-direction:column;align-items:center;width:14rem;margin:.5em;font-size:1rem;display:flex}.appearance-tab .theme-list .theme-preview.placeholder{opacity:.2}.appearance-tab .theme-list .theme-preview .theme-preview-container{pointer-events:none;zoom:.5;border-radius:var(--roundness);text-align:left;border:none}.HelpIndicator{display:inline-block;position:relative}.help-tooltip{text-align:center;min-width:10em;max-width:30vw;margin:.5em 1em}.invalid-tooltip{text-align:center;min-width:10em;margin:.5em 1em}.exporter{flex-direction:column;display:flex}.exporter-processing{margin:.25em}.importer-uploading{margin:.25em;font-size:1.5em}.data-import-export-tab .importer-exporter{flex-direction:column;gap:.5em;display:inline-flex}.data-import-export-tab table td,.data-import-export-tab table th{line-height:1.5}.data-import-export-tab table th{padding:0 .5em}.data-import-export-tab table td{padding:.5em}.developer-tab .setting-list{margin-left:2em}.developer-tab .cache-buttons{-webkit-column-gap:.5em;grid-column:1/3;grid-template-columns:1fr 1fr;column-gap:.5em;margin:0 5em;display:grid}.-mobile .developer-tab .cache-buttons{grid-template-rows:1fr 1fr;grid-template-columns:1fr;row-gap:.5em;margin:0}.developer-tab dt{font-weight:900}.developer-tab dd{margin-top:.5em;margin-bottom:1em}.filtering-tab .muteFilterContainer{border:1px solid var(--border);border-radius:var(--roundness);height:33vh;overflow-y:auto}.filtering-tab .mute-filter{border:1px solid var(--border);border-radius:var(--roundness);grid-gap:.5em;align-items:baseline;margin:.5em;padding:.5em;display:grid}.filtering-tab .never{margin-left:.5em}.filtering-tab .filter-name{grid-area:1/1/auto/span 2}.filtering-tab .alert,.filtering-tab .button-default{padding:0 .5em;line-height:2;display:inline-block}.filtering-tab .filter-enabled{text-align:right;grid-area:1/3;line-height:2}.filtering-tab .filter-field{grid-template-columns:subgrid;grid-template-rows:subgrid;grid-column:1/span 3;align-items:baseline;display:grid}.filtering-tab .filter-field label{text-align:right;grid-column:1}.filtering-tab .filter-field>label.checkbox{grid-template-columns:subgrid;grid-template-rows:subgrid;text-align:right;grid-column:1/span 2;display:grid}.filtering-tab .filter-field .filter-field-value{grid-column:2/span 2;display:flex}.filtering-tab .filter-buttons{grid-gap:.5em;grid-column:1/span 3;grid-template-columns:repeat(4,1fr);justify-content:end;justify-self:end;max-width:100%;display:inline-grid}.filtering-tab .muteFiltersActions,.filtering-tab .muteFiltersActionsBottom{grid-gap:.5em;grid-template-columns:1fr;grid-auto-flow:column;align-items:baseline;margin:.5em 0;display:grid}.filtering-tab .muteFiltersActions .total,.filtering-tab .muteFiltersActionsBottom .total{flex:1}.settings-modal.-mobile .filtering-tab .filter-buttons{grid-template-columns:repeat(1,1fr)}.autosuggest{position:relative}.autosuggest-input{width:100%;display:block}.autosuggest-results{background-color:var(--bg);border-style:solid;border-width:1px;border-color:var(--border);border-radius:var(--roundness);max-height:400px;box-shadow:1px 1px 4px #0009;box-shadow:var(--shadow);z-index:1;border-top-left-radius:0;border-top-right-radius:0;position:absolute;top:100%;left:0;right:0;overflow-y:auto}.block-card-content-container{text-align:right;margin-top:.5em}.block-card-content-container button{width:10em}.domain-mute-card{flex:1 0;justify-content:space-between;align-items:center;padding:.6em 1em .6em 0;display:flex}.domain-mute-card-domain{text-overflow:ellipsis;margin-right:1em;overflow:hidden}.domain-mute-card button{width:10em}.autosuggest-results .domain-mute-card{padding-left:1em}.mute-card-content-container{text-align:right;margin-top:.5em}.mute-card-content-container button{width:10em}.mutes-and-blocks-tab{min-height:100%}.mutes-and-blocks-tab .usersearch-wrapper{padding:1em}.mutes-and-blocks-tab .bulk-actions{text-align:right;min-height:2em;padding:0 1em}.mutes-and-blocks-tab .bulk-action-button{width:10em}.mutes-and-blocks-tab .domain-mute-form{flex-direction:column;padding:1em;display:flex}.mutes-and-blocks-tab .domain-mute-button{align-self:flex-end;width:10em;margin-top:1em}.mutes-and-blocks-tab .blocks,.mutes-and-blocks-tab .mutes{flex-direction:column;min-height:100%;display:flex;position:absolute;inset:0}.ComponentPreview{grid-template-columns:1em 1fr 1fr 1em;grid-template-rows:2em 1fr 1fr 1fr 1em 2em -webkit-max-content;grid-gap:.5em;grid-template-rows:2em 1fr 1fr 1fr 1em 2em max-content;grid-template-areas:"header header header header""preview preview preview y-slide""preview preview preview y-slide""preview preview preview y-slide""x-slide x-slide x-slide.""x-num x-num y-num y-num""assists assists assists assists";display:grid}.ComponentPreview:not(.-shadow-controls){grid-template-areas:"header header header header""preview preview preview y-slide""preview preview preview y-slide""preview preview preview y-slide""assists assists assists assists";grid-template-rows:2em 1fr 1fr 1fr -webkit-max-content;grid-template-rows:2em 1fr 1fr 1fr max-content}.ComponentPreview .header{grid-area:header;place-self:baseline center;line-height:2}.ComponentPreview .invalid-container{background-color:#64000080;place-items:center;display:grid;position:absolute;inset:0}.ComponentPreview .invalid-container .alert{padding:.5em 1em}.ComponentPreview .assists{grid-gap:.5em;grid-area:assists;grid-auto-rows:2em;grid-auto-flow:row;display:grid}.ComponentPreview .input-light-grid{justify-self:center}.ComponentPreview .input-number{min-width:2em}.ComponentPreview .x-shift-number{grid-area:x-num;justify-self:right}.ComponentPreview .y-shift-number{grid-area:y-num;justify-self:left}.ComponentPreview .x-shift-number input,.ComponentPreview .y-shift-number input{max-width:4em}.ComponentPreview .x-shift-slider{grid-area:x-slide;align-self:start;min-width:10em;height:auto}.ComponentPreview .y-shift-slider{-webkit-writing-mode:vertical-lr;writing-mode:vertical-lr;grid-area:y-slide;justify-self:left;min-height:10em}.ComponentPreview .x-shift-slider,.ComponentPreview .y-shift-slider{padding:0}.ComponentPreview .preview-window{--__grid-color1:#666;--__grid-color2:#999;--__grid-color1-disabled:#6663;--__grid-color2-disabled:#9993}.ComponentPreview .preview-window.-light-grid{--__grid-color1:#cdcdcd;--__grid-color2:#fff;--__grid-color1-disabled:#cdcdcd33;--__grid-color2-disabled:#fff3}.ComponentPreview .preview-window{aspect-ratio:1;background-color:var(--__grid-color2);background-image:-webkit-linear-gradient(45deg, var(--__grid-color1) 25%, transparent 25%), -webkit-linear-gradient(135deg, var(--__grid-color1) 25%, transparent 25%), -webkit-linear-gradient(45deg, transparent 75%, var(--__grid-color1) 75%), -webkit-linear-gradient(135deg, transparent 75%, var(--__grid-color1) 75%);background-image:linear-gradient(45deg, var(--__grid-color1) 25%, transparent 25%), linear-gradient(-45deg, var(--__grid-color1) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, var(--__grid-color1) 75%), linear-gradient(-45deg, transparent 75%, var(--__grid-color1) 75%);border-radius:var(--roundness);background-position:0 0,0 10px,10px -10px,-10px 0;background-size:20px 20px;grid-area:preview;justify-content:center;align-items:center;min-width:10em;min-height:10em;display:flex;position:relative}.ComponentPreview .preview-window.disabled{background-color:var(--__grid-color2-disabled);background-image:-webkit-linear-gradient(45deg, var(--__grid-color1-disabled) 25%, transparent 25%), -webkit-linear-gradient(135deg, var(--__grid-color1-disabled) 25%, transparent 25%), -webkit-linear-gradient(45deg, transparent 75%, var(--__grid-color1-disabled) 75%), -webkit-linear-gradient(135deg, transparent 75%, var(--__grid-color1-disabled) 75%);background-image:linear-gradient(45deg, var(--__grid-color1-disabled) 25%, transparent 25%), linear-gradient(-45deg, var(--__grid-color1-disabled) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, var(--__grid-color1-disabled) 75%), linear-gradient(-45deg, transparent 75%, var(--__grid-color1-disabled) 75%)}.ComponentPreview .preview-window .preview-block{background:var(--background,var(--bg));border-style:solid;border-width:0;border-color:var(--border);border-radius:var(--roundness);min-width:33%;max-width:80%;min-height:33%;max-height:80%;box-shadow:var(--shadow);justify-content:center;align-items:center;display:flex}.SelectMotion{flex:none;grid-auto-columns:1fr;grid-auto-flow:column;margin-top:.25em;display:grid}.SelectMotion .button-default{margin:0;padding:0}.ShadowControl{grid-gap:.5em;-webkit-box-pack:stretch;grid-template:"selector preview tweak"1fr/10em 1fr 1fr;justify-content:stretch;display:grid}.ShadowControl .style-control{display:flex}.ShadowControl.-compact{grid-template:"selector preview""tweak tweak"/10em 1fr}.ShadowControl.-compact.-no-preview{grid-template:"selector"10em"tweak"1fr/1fr}.ShadowControl .shadow-switcher{flex-direction:column;flex:1 0 6em;order:1;grid-area:selector;min-width:6em;margin-right:.125em;display:flex}.ShadowControl .shadow-switcher .shadow-list{flex:1 0 auto}.ShadowControl .shadow-tweak{grid-gap:.25em;flex:2 0 10em;order:3;grid-area:tweak;grid-template-rows:auto 1fr;min-width:10em;margin-left:.125em;margin-right:.125em;display:grid}.ShadowControl .shadow-tweak .input-boolean{flex:1;display:flex}.ShadowControl .shadow-tweak .input-boolean .label{flex:1}.ShadowControl .shadow-tweak .input-string{flex:1 0 5em}.ShadowControl .shadow-tweak .shadow-expression{width:100%;height:100%}.ShadowControl .shadow-tweak .id-control{align-items:stretch}.ShadowControl .shadow-tweak .id-control .shadow-switcher,.ShadowControl .shadow-tweak .id-control .btn{min-width:1px;margin-right:5px}.ShadowControl .shadow-tweak .id-control .btn{margin:0 .1em;padding:0 .4em}.ShadowControl.-no-preview{grid-template:"selector tweak"1fr/10em 1fr}.ShadowControl.-no-preview .shadow-tweak{flex:2 0 8em;order:0;max-width:100%}.ShadowControl.-no-preview .input-range{min-width:5em}.ShadowControl .inset-alert{padding:.25em .5em}.ShadowControl.disabled .inset-alert{opacity:.2}.ShadowControl .shadow-preview{grid-area:preview;place-self:start center;margin-left:.125em}.inset-tooltip{max-width:30em}.old-theme-tab{min-width:var(--themeEditorMinWidth,-webkit-fit-content);min-width:var(--themeEditorMinWidth,fit-content);margin:1em}.old-theme-tab .deprecation-warning{margin:2em;padding:.5em}.old-theme-tab{padding-bottom:2em}.old-theme-tab .preset-switcher{margin-right:1em}.old-theme-tab .btn{margin-left:.25em;margin-right:.25em}.old-theme-tab .btn-group .btn{margin:0}.old-theme-tab .style-control{align-items:baseline;margin-bottom:5px;display:flex}.old-theme-tab .style-control .label{flex:1;margin-right:1em;line-height:2}.old-theme-tab .style-control .opt{margin:.5em}.old-theme-tab .style-control .color-input{flex:0 0 0}.old-theme-tab .style-control input,.old-theme-tab .style-control select{flex:0;min-width:3em;margin:0}.old-theme-tab .style-control input[type=number],.old-theme-tab .style-control select[type=number]{min-width:9em}.old-theme-tab .style-control input[type=number].-small,.old-theme-tab .style-control select[type=number].-small{min-width:5em}.old-theme-tab .style-control input[type=range],.old-theme-tab .style-control select[type=range]{flex:1;align-self:center;min-width:9em;margin:0 .5em}.old-theme-tab .style-control input[type=checkbox]+i,.old-theme-tab .style-control select[type=checkbox]+i{align-self:center;height:1.1em}.old-theme-tab .reset-container{flex-wrap:wrap}.old-theme-tab .fonts-container,.old-theme-tab .reset-container,.old-theme-tab .apply-container,.old-theme-tab .radius-container,.old-theme-tab .color-container{display:flex}.old-theme-tab .fonts-container,.old-theme-tab .radius-container{flex-direction:column}.old-theme-tab .color-container>h4{width:99%}.old-theme-tab .color-container{flex-wrap:wrap;justify-content:space-between}.old-theme-tab .fonts-container,.old-theme-tab .color-container,.old-theme-tab .shadow-container,.old-theme-tab .radius-container,.old-theme-tab .presets-container{margin:1em 1em 0}.old-theme-tab .tab-header{justify-content:space-between;align-items:baseline;width:100%;min-height:2.1em;margin-bottom:1em;display:flex}.old-theme-tab .tab-header p{flex:1;margin:0 .5em 0 0}.old-theme-tab .tab-header-buttons{flex-direction:column;display:flex}.old-theme-tab .tab-header-buttons .btn{flex:0 auto;min-width:1px;margin-bottom:.5em;padding:0 1em}.old-theme-tab .shadow-selector .override{flex:1;margin-left:.5em}.old-theme-tab .shadow-selector .select-container{margin-top:-4px;margin-bottom:-3px}.old-theme-tab .save-load,.old-theme-tab .save-load-options{flex-wrap:wrap;justify-content:center;align-items:baseline;display:flex}.old-theme-tab .save-load .presets,.old-theme-tab .save-load .import-export,.old-theme-tab .save-load-options .presets,.old-theme-tab .save-load-options .import-export{margin-bottom:.5em}.old-theme-tab .save-load .import-export,.old-theme-tab .save-load-options .import-export{display:flex}.old-theme-tab .save-load .override,.old-theme-tab .save-load-options .override{margin-left:.5em}.old-theme-tab .save-load-options{flex-wrap:wrap;justify-content:center;margin-top:.5em}.old-theme-tab .save-load-options .keep-option{min-width:25%;margin:0 .5em .5em}.old-theme-tab .radius-item{flex-basis:auto}.old-theme-tab .radius-item,.old-theme-tab .color-item{flex-direction:column;flex:1 1 0;min-width:20em;margin:5px 6px 0 0;display:flex}.old-theme-tab .radius-item.wide,.old-theme-tab .color-item.wide{min-width:60%}.old-theme-tab .radius-item:not(.wide):nth-child(odd),.old-theme-tab .color-item:not(.wide):nth-child(odd){margin-right:7px}.old-theme-tab .radius-item .color,.old-theme-tab .radius-item .opacity,.old-theme-tab .color-item .color,.old-theme-tab .color-item .opacity{align-items:baseline;display:flex}.old-theme-tab .theme-radius-rn,.old-theme-tab .theme-color-cl{box-shadow:none;color:var(--textFaint);background:0 0;border:0;align-self:stretch}.old-theme-tab .theme-color-cl,.old-theme-tab .theme-radius-in,.old-theme-tab .theme-color-in{margin-left:.3em}.old-theme-tab .theme-radius-in{flex:1;min-width:1em;max-width:7em}.old-theme-tab .theme-radius-lb{max-width:50em}.old-theme-tab .theme-warning{align-items:baseline;margin-bottom:.5em;display:flex}.old-theme-tab .theme-warning .buttons .btn{margin-bottom:.5em}.extra-content .apply-container{flex-direction:row;flex-grow:1;justify-content:space-around;display:flex}.extra-content .apply-container .btn{flex-grow:1;min-width:0;max-width:10em;min-height:2em;padding:0}.posts-tab .greentext{color:var(--funtextGreentext)}.profile-tab .setting-section.profile-edit{margin:0}.profile-tab .setting-section.profile-edit h2{margin-left:1rem}.profile-tab .setting-section.profile-edit .user-card{padding:1.2em;overflow:hidden}.profile-tab .setting-item .custom-boolean-setting{grid-template-columns:subgrid;display:grid}.profile-tab .setting-item .custom-boolean-setting .label{text-align:right;grid-area:label}.-mobile .profile-tab .setting-item .custom-boolean-setting .label{text-align:left}.profile-tab .setting-item .custom-boolean-setting .checkbox-indicator{grid-area:control}.mfa-backup-codes .warning{color:var(--cOrange)}.mfa-backup-codes .backup-codes{font-family:var(--monoFont)}.mfa-settings .mfa-heading,.mfa-settings .method-item{flex-wrap:wrap;justify-content:space-between;align-items:baseline;display:flex}.mfa-settings .warning{color:var(--cOrange)}.mfa-settings .setup-otp{flex-wrap:wrap;justify-content:center;display:flex}.mfa-settings .setup-otp .qr-code{flex:1;padding-right:.7em}.mfa-settings .setup-otp .verify{flex:1}.mfa-settings .setup-otp .error{margin:.3em 0 0}.mfa-settings .setup-otp .confirm-otp-actions button{width:15em;margin-top:5px}.StyleTab{min-width:var(--themeEditorMinWidth,-webkit-fit-content);min-width:var(--themeEditorMinWidth,fit-content);margin:1em}.StyleTab .style-control{align-items:baseline;margin-bottom:.5em}.StyleTab .style-control .label{flex:auto;min-height:2em;margin-right:.5em;line-height:2;display:inline-block}.StyleTab .style-control.suboption{margin-left:1em}.StyleTab .style-control input,.StyleTab .style-control select{flex:0;min-width:3em;margin:0}.StyleTab .style-control input[type=number],.StyleTab .style-control select[type=number]{min-width:9em}.StyleTab .style-control input[type=number].-small,.StyleTab .style-control select[type=number].-small{min-width:5em}.StyleTab .style-control input[type=range],.StyleTab .style-control select[type=range]{flex:1;align-self:center;min-width:9em;margin:0 .25em}.StyleTab .style-control input[type=checkbox]+i,.StyleTab .style-control select[type=checkbox]+i{align-self:center;height:1.1em}.StyleTab .setting-section.heading{padding:0}.StyleTab .meta-preview{grid-gap:1em;grid-template:"meta preview";grid-template-columns:-webkit-min-content 6fr;grid-template-columns:min-content 6fr;display:grid}.StyleTab .meta-preview .theme-preview-container{margin:0}.StyleTab .meta-preview ul.setting-list{grid-area:meta;margin:0;padding:0}.StyleTab .meta-preview ul.setting-list>li,.StyleTab .meta-preview ul.setting-list .meta-field{margin:0}.StyleTab .meta-preview ul.setting-list .meta-field .setting-label{margin-bottom:.5em;display:inline-block}.StyleTab .meta-preview #edited-style-preview{grid-area:preview}.StyleTab .setting-section{margin-top:1em;padding-bottom:0}.StyleTab .setting-section .btn{padding:0 .5em}.StyleTab .setting-section:not(:first-child){margin-top:.5em}.StyleTab .setting-section:not(:last-child){margin-bottom:.5em}.StyleTab .list-editor{grid-gap:.5em;grid-template:"label editor""selector editor"1fr"movement editor"/10em 1fr;display:grid}.StyleTab .list-editor .list-edit-area{grid-area:editor;align-items:baseline}.StyleTab .list-editor .list-select{grid-area:selector;margin:0}.StyleTab .list-editor .list-select-label{grid-area:label;align-self:baseline;margin:0;font-weight:700}.StyleTab .list-editor .list-select-movement{grid-area:movement;margin:0}.StyleTab .variables-editor .variable-selector{grid-template-columns:auto 1fr auto 10em;grid-template-rows:subgrid;grid-gap:0 .5em;align-items:baseline;display:grid}.StyleTab .variables-editor .list-edit-area{grid-template-rows:subgrid;display:grid}.StyleTab .variables-editor .shadow-control{grid-row:2/span 2}.StyleTab .component-editor{grid-gap:.5em;grid-template:"component component variant""state state state""preview settings settings"1fr/6fr 3fr 4fr;display:grid}.StyleTab .component-editor .component-selector{grid-area:component;align-self:center}.StyleTab .component-editor .component-selector,.StyleTab .component-editor .state-selector,.StyleTab .component-editor .variant-selector{grid-gap:.5em;grid-template-rows:auto;grid-template-columns:1fr minmax(10em,1fr);grid-auto-flow:column;align-items:baseline;display:grid}.StyleTab .component-editor .component-selector>label:not(.Select),.StyleTab .component-editor .state-selector>label:not(.Select),.StyleTab .component-editor .variant-selector>label:not(.Select){justify-self:right;font-weight:700}.StyleTab .component-editor .state-selector{grid-area:state;grid-template-columns:minmax(-webkit-min-content, 7em) 1fr;grid-template-columns:minmax(min-content,7em) 1fr}.StyleTab .component-editor .variant-selector{grid-area:variant}.StyleTab .component-editor .state-selector-list{grid-auto-flow:dense;grid-template-columns:repeat(5, minmax(-webkit-min-content, 1fr));grid-gap:.5em;grid-template-columns:repeat(5,minmax(min-content,1fr));grid-auto-rows:1fr;margin:0;padding:0;list-style:none;display:grid}.StyleTab .component-editor .preview-container{--border:none;--shadow:none;--roundness:none;grid-area:preview}.StyleTab .component-editor .component-settings{grid-area:settings}.StyleTab .component-editor .editor-tab{grid-column-gap:.5em;grid-template-columns:1fr 2em;grid-auto-rows:-webkit-min-content;grid-auto-rows:min-content;grid-auto-flow:dense;border-left:1px solid var(--border);border-right:1px solid var(--border);border-bottom:1px solid var(--border);align-items:center;padding:.5em;display:grid}.StyleTab .component-editor .shadow-tab{grid-template-columns:1fr;justify-items:center}.-mobile .StyleTab .meta-preview{grid-template:"meta""preview"}.-mobile .StyleTab .list-editor{grid-template:"label""selector"1fr"movement""editor""editor""editor""editor"/1fr;display:grid}.-mobile .StyleTab .component-editor{grid-template:"component""variant""state""preview""settings"/1fr}.-mobile .StyleTab .variable-selector{grid-gap:.5em;grid-template-rows:auto;grid-template-columns:1fr;grid-auto-flow:row}.extra-content .style-actions-container{justify-content:end;width:100%;display:flex}.extra-content .style-actions-container .style-actions{grid-gap:.25em;grid-template-columns:repeat(4,minmax(7em,1fr));display:grid} diff --git a/priv/static/static/css/shout_panel.BHBsqket.css b/priv/static/static/css/shout_panel.BHBsqket.css new file mode 100644 index 000000000..50d0eca34 --- /dev/null +++ b/priv/static/static/css/shout_panel.BHBsqket.css @@ -0,0 +1 @@ +.floating-shout{z-index:var(--ZI_popovers);max-width:25em;position:fixed;bottom:.5em}.floating-shout.-left{left:.5em}.floating-shout:not(.-left){right:.5em}.shout-panel .shout-heading{cursor:pointer}.shout-panel .shout-heading .icon{color:var(--text);margin-right:.5em}.shout-panel .shout-heading .title{justify-content:space-between;align-items:center;display:flex}.shout-panel .shout-window{max-height:20em;overflow:hidden auto}.shout-panel .shout-window-container{height:100%}.shout-panel .shout-message{padding:.2em .5em;display:flex}.shout-panel .shout-avatar img{border-radius:var(--roundness);width:.6em;height:.6em;margin-top:.25em;margin-right:.5em}.shout-panel .shout-input{display:flex}.shout-panel .shout-input textarea{resize:none;flex:1;min-height:3.5em;margin:.6em}.shout-panel .shout-panel .title{justify-content:space-between;display:flex} diff --git a/priv/static/static/css/side_drawer.2CnDtAJj.css b/priv/static/static/css/side_drawer.2CnDtAJj.css new file mode 100644 index 000000000..63d7240fa --- /dev/null +++ b/priv/static/static/css/side_drawer.2CnDtAJj.css @@ -0,0 +1 @@ +.side-drawer-container{z-index:var(--ZI_navbar);align-items:stretch;width:100%;height:100%;transition-property:transform;transition-duration:0s;display:flex;position:fixed;top:0;left:0}.side-drawer-container-open{transform:translate(0%)}.side-drawer-container-closed{transition-delay:.35s;transform:translate(-100%)}.side-drawer-darken{z-index:-1;transition:all .35s;background-color:#00000080;width:100vw;height:100vh;transition-property:background-color;position:fixed;top:0;left:0}.side-drawer-darken-closed{background-color:#0000}.side-drawer-click-outside{flex:100%}.side-drawer{transition:all .35s;width:80%;max-width:20em;box-shadow:var(--shadow);background-color:var(--background);flex:0 0 80%;margin:0 0 0 -100px;padding:0 0 1em 100px;transition-property:transform;transition-timing-function:cubic-bezier(0,1,.5,1);overflow-x:hidden}.side-drawer .badge{margin-left:10px}.side-drawer-logo-wrapper{align-items:center;padding:.85em;display:flex}.side-drawer-logo-wrapper img{flex:none;height:50px;margin-right:.85em}.side-drawer-logo-wrapper span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.side-drawer-click-outside-closed{flex:0 0 0}.side-drawer-closed{transform:translate(-100%)}.side-drawer-heading{background:0 0;flex-direction:column;align-items:stretch;margin:0;padding:0;display:flex}.side-drawer-heading .user-info{margin:1em}.side-drawer ul{border-bottom:1px solid;border-color:var(--border);margin:0;padding:0;list-style:none}.side-drawer ul:last-child{border:0}.side-drawer li{padding:0}.side-drawer li a,.side-drawer li button{box-sizing:border-box;height:3em;padding:0 .7em;line-height:3em;display:block} diff --git a/priv/static/static/css/status_history_modal.CZzNzXP5.css b/priv/static/static/css/status_history_modal.CZzNzXP5.css new file mode 100644 index 000000000..fe0df3392 --- /dev/null +++ b/priv/static/static/css/status_history_modal.CZzNzXP5.css @@ -0,0 +1 @@ +.modal-view.status-history-modal-view{align-items:flex-start}.status-history-modal-panel{flex-shrink:0;width:100%;max-width:700px;margin-top:25%;margin-bottom:2em}@media (orientation:landscape){.status-history-modal-panel{margin-top:8%}} diff --git a/priv/static/static/css/sticker_picker.BzJVB0Ta.css b/priv/static/static/css/sticker_picker.BzJVB0Ta.css deleted file mode 100644 index bae400571..000000000 --- a/priv/static/static/css/sticker_picker.BzJVB0Ta.css +++ /dev/null @@ -1 +0,0 @@ -.sticker-picker{width:100%}.sticker-picker .contents{min-height:250px}.sticker-picker .contents .sticker-picker-content{display:-webkit-box;display:flex;flex-wrap:wrap;padding:0 4px}.sticker-picker .contents .sticker-picker-content .sticker{display:-webkit-box;display:flex;-webkit-box-flex:1;flex:1 1 auto;margin:4px;width:56px;height:56px}.sticker-picker .contents .sticker-picker-content .sticker img{height:100%}.sticker-picker .contents .sticker-picker-content .sticker img:hover{-webkit-filter:drop-shadow(0 0 5px var(--accent));filter:drop-shadow(0 0 5px var(--accent))} diff --git a/priv/static/static/css/sticker_picker.C2lbaygI.css b/priv/static/static/css/sticker_picker.C2lbaygI.css new file mode 100644 index 000000000..1d642ee90 --- /dev/null +++ b/priv/static/static/css/sticker_picker.C2lbaygI.css @@ -0,0 +1 @@ +.sticker-picker{width:100%}.sticker-picker .contents{min-height:250px}.sticker-picker .contents .sticker-picker-content{flex-wrap:wrap;padding:0 4px;display:flex}.sticker-picker .contents .sticker-picker-content .sticker{flex:auto;width:56px;height:56px;margin:4px;display:flex}.sticker-picker .contents .sticker-picker-content .sticker img{height:100%}.sticker-picker .contents .sticker-picker-content .sticker img:hover{filter:drop-shadow(0 0 5px var(--accent))} diff --git a/priv/static/static/css/string_setting.CtukauKH.css b/priv/static/static/css/string_setting.CtukauKH.css deleted file mode 100644 index f85b58786..000000000 --- a/priv/static/static/css/string_setting.CtukauKH.css +++ /dev/null @@ -1 +0,0 @@ -.vertical-tab-switcher{display:-webkit-box;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;container-type:inline-size}.vertical-tab-switcher>.tabs{-webkit-box-flex:0;flex:0 0 15em;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;overflow:hidden auto;white-space:nowrap;text-overflow:ellipsis;width:15em;min-width:15em;border-right:1px solid;border-right-color:var(--border);box-sizing:border-box}.vertical-tab-switcher>.tabs>.menu-item{padding:.5em 1em}.vertical-tab-switcher>.tabs>.menu-item .tab-icon{vertical-align:middle;margin-right:.75em}.vertical-tab-switcher>.contents .tab-content-label{box-sizing:border-box;margin:0;border-bottom:1px solid var(--border);display:none}.vertical-tab-switcher>.contents .tab-content-label button{box-sizing:border-box;padding:.5em}.vertical-tab-switcher>.contents .tab-slot-wrapper{-webkit-box-flex:1;flex:1 1 auto;height:100%;overflow-y:auto;display:grid;grid-template-columns:minmax(1em,1fr) minmax(-webkit-min-content,45em) minmax(1em,1fr);grid-template-columns:minmax(1em,1fr) minmax(min-content,45em) minmax(1em,1fr);grid-template-areas:". content .";-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.vertical-tab-switcher>.contents .tab-slot-wrapper .tab-content{grid-area:content}.vertical-tab-switcher>.contents .tab-slot-wrapper .tab-content.-full-width{grid-column:1/4}.vertical-tab-switcher>.contents .tab-slot-wrapper .tab-content.-full-height>*{height:100%}.vertical-tab-switcher>.contents .tab-content-wrapper{display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;height:100%;-webkit-box-flex:1;flex:1 1 auto}.vertical-tab-switcher>.contents .tab-content-wrapper.-hidden{display:none}.vertical-tab-switcher.-mobile>.contents .tab-content-label{display:block}.vertical-tab-switcher.-mobile.-nav-contents>.contents{display:block;-webkit-box-flex:1;flex-grow:1;flex-shrink:1}.vertical-tab-switcher.-mobile.-nav-contents>.tabs{display:none;-webkit-box-flex:0;flex-grow:0;flex-shrink:1}.vertical-tab-switcher.-mobile.-nav-tabs>.tabs{display:block;-webkit-box-flex:1;flex-grow:1}.vertical-tab-switcher.-mobile.-nav-tabs>.contents{display:none;-webkit-box-flex:0;flex-grow:0;flex-shrink:1}.vertical-tab-switcher.-mobile .tab-slot-wrapper{grid-template-columns:0 minmax(-webkit-min-content,45em) 0;grid-template-columns:0 minmax(min-content,45em) 0}@supports (container-type: inline-size){.vertical-tab-switcher.-nav-contents>.contents,.vertical-tab-switcher.-nav-tabs>.contents,.vertical-tab-switcher.-mobile.-nav-contents>.contents,.vertical-tab-switcher.-mobile.-nav-tabs>.contents{display:block;-webkit-box-flex:1;flex-grow:1}.vertical-tab-switcher.-nav-contents>.tabs,.vertical-tab-switcher.-nav-tabs>.tabs,.vertical-tab-switcher.-mobile.-nav-contents>.tabs,.vertical-tab-switcher.-mobile.-nav-tabs>.tabs{display:block;-webkit-box-flex:0;flex-grow:0}@container (width < 50em){.vertical-tab-switcher>.contents .tab-content-label{display:block}.vertical-tab-switcher.-mobile>.contents .tab-content-label{display:block}.vertical-tab-switcher.-nav-contents>.contents,.vertical-tab-switcher.-mobile.-nav-contents>.contents{display:block;-webkit-box-flex:1;flex-grow:1}.vertical-tab-switcher.-nav-contents>.tabs,.vertical-tab-switcher.-mobile.-nav-contents>.tabs{display:none;-webkit-box-flex:0;flex-grow:0;flex-shrink:1}.vertical-tab-switcher.-nav-tabs>.tabs,.vertical-tab-switcher.-mobile.-nav-tabs>.tabs{display:block;-webkit-box-flex:1;flex-grow:1}.vertical-tab-switcher.-nav-tabs>.contents,.vertical-tab-switcher.-mobile.-nav-tabs>.contents{display:none;-webkit-box-flex:0;flex-grow:0;flex-shrink:1}}}.ModifiedIndicator{display:inline-block;position:relative}.modified-tooltip{margin:.5em 1em;min-width:10em;text-align:center}.DraftButtons{display:-webkit-inline-box;display:inline-flex;position:relative;gap:.5em;margin-top:.5em}.draft-tooltip{margin:.5em 1em;min-width:10em;text-align:center}.-mobile .ChoiceSetting.setting-item{display:block}.-mobile .ChoiceSetting.setting-item .setting-label{display:block;margin-bottom:.5em} diff --git a/priv/static/static/css/tab_switcher.CEadvXLu.css b/priv/static/static/css/tab_switcher.CEadvXLu.css new file mode 100644 index 000000000..2c11cc953 --- /dev/null +++ b/priv/static/static/css/tab_switcher.CEadvXLu.css @@ -0,0 +1 @@ +.tab-switcher{display:flex}.tab-switcher .tab-icon{margin:.2em auto;display:block}.tab-switcher.top-tabs{flex-direction:column}.tab-switcher.top-tabs>.tabs{flex-direction:row;flex:none;width:100%;padding-top:5px;overflow:auto hidden}.tab-switcher.top-tabs>.tabs:after,.tab-switcher.top-tabs>.tabs:before{content:"";border-bottom:1px solid;border-bottom-color:var(--border);flex:auto}.tab-switcher.top-tabs>.tabs .tab-wrapper{height:2em}.tab-switcher.top-tabs>.tabs .tab-wrapper:not(.active):after{border-bottom:1px solid;border-bottom-color:var(--border);bottom:0;left:0;right:0}.tab-switcher.top-tabs>.tabs .tab{border-bottom-right-radius:0;border-bottom-left-radius:0;width:100%;min-width:1px;margin-bottom:-93px;padding-bottom:99px}.tab-switcher.top-tabs .contents.scrollable-tabs{flex-basis:0;position:relative}.tab-switcher .contents{flex:1 0 auto;min-height:0;position:relative}.tab-switcher .contents .hidden{display:none}.tab-switcher .contents .-full-height:not(.hidden){flex-direction:column;height:100%;display:flex}.tab-switcher .contents .-full-height:not(.hidden)>:not(.mobile-label){flex:1}.tab-switcher .contents .-full-width:not(.hidden){flex-direction:column;display:flex}.tab-switcher .contents .-full-width:not(.hidden)>:not(.mobile-label){width:auto}.tab-switcher .contents.scrollable-tabs{overflow-y:auto}.tab-switcher .tab{-webkit-user-select:none;user-select:none;color:var(--text);cursor:pointer;box-shadow:var(--shadow);font-size:1em;font-family:var(--font);border-radius:var(--roundness);background-color:var(--background);white-space:nowrap;border:none;padding:6px 1em;position:relative}.tab-switcher .tab:not(.active){z-index:4;margin-top:.25em}.tab-switcher .tab:not(.active):hover{z-index:6}.tab-switcher .tab.active{z-index:5;background:0 0}.tab-switcher .tab img{vertical-align:top;max-height:1.9em;margin-top:-.3em}.tab-switcher .tabs{box-sizing:border-box;display:flex;position:relative}.tab-switcher .tabs:after,.tab-switcher .tabs:before{flex:auto;display:block}.tab-switcher .tab-wrapper{flex:none;display:flex;position:relative}.tab-switcher .tab-wrapper:not(.active):after{content:"";z-index:7;position:absolute}.tab-switcher .mobile-label{border-bottom:1px solid var(--border);margin-top:.5em;margin-bottom:.25em;margin-left:.2em;padding-bottom:.25em;padding-left:.3em}@media (width>=800px){.tab-switcher .mobile-label{display:none}} diff --git a/priv/static/static/css/terms_of_service_panel.ClR_b2MD.css b/priv/static/static/css/terms_of_service_panel.ClR_b2MD.css new file mode 100644 index 000000000..4db7f26ac --- /dev/null +++ b/priv/static/static/css/terms_of_service_panel.ClR_b2MD.css @@ -0,0 +1 @@ +.tos-content{margin:1em} diff --git a/priv/static/static/css/update_notification.BJ1CAGCw.css b/priv/static/static/css/update_notification.BJ1CAGCw.css deleted file mode 100644 index f261faefb..000000000 --- a/priv/static/static/css/update_notification.BJ1CAGCw.css +++ /dev/null @@ -1 +0,0 @@ -.UpdateNotification{overflow:hidden}.UpdateNotificationModal{--__top-fringe: 15em;--__bottom-fringe: 80em;--__right-fringe: 8em;font-size:15px;position:relative;-webkit-transition:-webkit-transform;transition:-webkit-transform;transition:transform;transition:transform,-webkit-transform;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;-webkit-transition-duration:.5s;transition-duration:.5s}.UpdateNotificationModal .text{max-width:40em;padding-left:1em}@media all and (width <= 800px){.UpdateNotificationModal{width:100vw}}@media all and (height <= 600px){.UpdateNotificationModal{display:none}}.UpdateNotificationModal .content{overflow:hidden;margin-top:calc(-1 * var(--__top-fringe));margin-bottom:calc(-1 * var(--__bottom-fringe));margin-right:calc(-1 * var(--__right-fringe))}.UpdateNotificationModal .content.-noImage .text{padding-right:var(--__right-fringe)}.UpdateNotificationModal .panel-body{border-width:0 0 1px;border-style:solid;border-color:var(--border)}.UpdateNotificationModal .panel-footer{z-index:22;position:relative;border-width:0;grid-template-columns:auto}.UpdateNotificationModal .pleroma-tan{object-fit:cover;object-position:top;-webkit-transition:position,left,right,top,bottom,max-width,max-height;transition:position,left,right,top,bottom,max-width,max-height;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;-webkit-transition-duration:.5s;transition-duration:.5s;width:25em;float:right;z-index:20;position:relative;shape-margin:.5em;-webkit-filter:drop-shadow(5px 5px 10px rgba(0,0,0,.5));filter:drop-shadow(5px 5px 10px rgba(0,0,0,.5));pointer-events:none}.UpdateNotificationModal .spacer-top{min-height:var(--__top-fringe)}.UpdateNotificationModal .spacer-bottom{min-height:var(--__bottom-fringe)}.UpdateNotificationModal .extra-info-group{-webkit-transition:max-height,padding,height;transition:max-height,padding,height;-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;-webkit-transition-duration:.7s;transition-duration:.7s;max-height:70vh;-webkit-mask:-webkit-linear-gradient(bottom,white,transparent) bottom/100% 2px no-repeat,-webkit-linear-gradient(bottom,white,white);mask:linear-gradient(to top,white,transparent) bottom/100% 2px no-repeat,linear-gradient(to top,white,white)}.UpdateNotificationModal .art-credit{text-align:right}.UpdateNotificationModal.-peek{-webkit-transform:translateY(calc((100vh - 100%)/2));transform:translateY(calc((100vh - 100%)/2))}.UpdateNotificationModal.-peek .pleroma-tan{float:right;z-index:10;shape-image-threshold:70%}.UpdateNotificationModal.-peek .extra-info-group{max-height:0} diff --git a/priv/static/static/css/update_notification.Co8luhDO.css b/priv/static/static/css/update_notification.Co8luhDO.css new file mode 100644 index 000000000..d49f70fc8 --- /dev/null +++ b/priv/static/static/css/update_notification.Co8luhDO.css @@ -0,0 +1 @@ +.UpdateNotification{overflow:hidden}.UpdateNotificationModal{--__top-fringe:15em;--__bottom-fringe:80em;--__right-fringe:8em;--__panel-background:rgb(0,255,255 / 80%);transition:transform;font-size:15px;transition-duration:.5s;transition-timing-function:ease-in-out;position:relative}.UpdateNotificationModal .text{max-width:40em;padding-left:1em}.UpdateNotificationModal .footer-buttons{--panel-heading-height-padding:calc(var(--panel-header-height) * .2);--__panel-heading-gap:calc(var(--panel-header-height) * .1565);--__panel-heading-height:var(--panel-header-height);--__panel-heading-height-inner:calc(var(--__panel-heading-height) - 2 * var(--panel-heading-height-padding,0));box-sizing:border-box;z-index:20;grid-column-gap:var(--__panel-heading-gap);padding:var(--panel-heading-height-padding);height:var(--__panel-heading-height);line-height:var(--__panel-heading-height-inner);font-size:calc(var(--panelHeaderSize) / 3.2);grid-template-columns:auto;grid-auto-columns:auto;grid-auto-flow:column;display:grid;position:absolute;bottom:0;left:0;right:0}@media (width<=800px){.UpdateNotificationModal{width:100vw}}@media (height<=600px){.UpdateNotificationModal{display:none}}.UpdateNotificationModal .content{margin-top:calc(-1 * var(--__top-fringe));margin-bottom:calc(-1 * var(--__bottom-fringe));margin-right:calc(-1 * var(--__right-fringe));overflow:hidden}.UpdateNotificationModal .content.-noImage .text{padding-right:var(--__right-fringe)}.UpdateNotificationModal .panel-body{border-style:solid;border-width:0 0 1px;border-color:var(--border)}.UpdateNotificationModal .panel-footer{z-index:10;border-width:0;position:relative}.UpdateNotificationModal .panel-footer .button-default{z-index:2}.UpdateNotificationModal .pleroma-tan{object-fit:cover;object-position:top;transition:position,left,right,top,bottom,max-width,max-height;float:right;z-index:20;shape-margin:.5em;filter:drop-shadow(5px 5px 10px #00000080);pointer-events:none;width:25em;transition-duration:.5s;transition-timing-function:ease-in-out;position:relative}.UpdateNotificationModal .spacer-top{min-height:var(--__top-fringe)}.UpdateNotificationModal .spacer-bottom{min-height:calc(var(--__bottom-fringe) + var(--panel-header-height))}.UpdateNotificationModal .extra-info-group{transition:max-height,padding,height;-webkit-mask:-webkit-linear-gradient(#fff,#0000) bottom/100% 2px no-repeat,-webkit-linear-gradient(#fff,#fff);max-height:70vh;transition-duration:.7s;transition-timing-function:ease-in;-webkit-mask:linear-gradient(#0000,#fff) bottom/100% 2px no-repeat,linear-gradient(#fff,#fff);mask:linear-gradient(#0000,#fff) bottom/100% 2px no-repeat,linear-gradient(#fff,#fff)}.UpdateNotificationModal .art-credit{text-align:right}.UpdateNotificationModal.-peek{transform:translateY(calc(50vh - 50%))}.UpdateNotificationModal.-peek .pleroma-tan{float:right;z-index:10;shape-image-threshold:70%}.UpdateNotificationModal.-peek .extra-info-group{max-height:0} diff --git a/priv/static/static/css/user_card.C2QiPTUj.css b/priv/static/static/css/user_card.C2QiPTUj.css new file mode 100644 index 000000000..aef67f754 --- /dev/null +++ b/priv/static/static/css/user_card.C2QiPTUj.css @@ -0,0 +1 @@ +.Avatar{--_avatarShadowBox:var(--shadow);--_avatarShadowFilter:var(--shadowFilter);--_avatarShadowInset:var(--shadowInset);--_still-image-label-visibility:hidden;width:3.5em;height:3.5em;display:inline-block;position:relative}.Avatar.-compact{border-radius:var(--roundness);width:2.2em;height:2.2em}.Avatar .avatar{width:100%;height:100%;box-shadow:var(--_avatarShadowBox);border-radius:var(--roundness)}.Avatar .avatar.-better-shadow{box-shadow:var(--_avatarShadowInset);filter:var(--_avatarShadowFilter)}.Avatar .avatar.-animated:before{display:none}.Avatar .avatar.-compact{border-radius:var(--roundness)}.Avatar .avatar.-placeholder{background-color:var(--background)}.Avatar img{width:100%;height:100%}.Avatar .actor-type-indicator{color:#fff;border-radius:var(--roundness);background:#7f7f7f80;margin:-.2em;padding:.2em;position:absolute;bottom:0;right:0}.color-input{flex-wrap:wrap;max-width:10em;display:inline-flex}.color-input.-compact{max-width:none}.color-input .label{flex:auto;grid-area:label}.color-input .opt{grid-area:checkbox;margin-right:.5em}.color-input-field.input{flex:10em;grid-area:input;align-items:stretch;max-width:10em;display:flex}.color-input-field.input input{color:var(--text);background:0 0;border:none;margin:0;padding:0}.color-input-field.input input.textColor{flex:1 0 3em;min-width:3em;padding:0}.color-input-field.input .nativeColor{cursor:pointer;flex:none;padding:0}.color-input-field.input .nativeColor input{appearance:none;min-width:0;max-width:0;max-height:0;opacity:0!important}.color-input-field.input .computedIndicator,.color-input-field.input .validIndicator,.color-input-field.input .invalidIndicator,.color-input-field.input .transparentIndicator{border-radius:var(--roundness);flex:0 0 2em;align-self:stretch;min-width:2em;min-height:1.1em;margin:.2em .5em}.color-input-field.input .invalidIndicator{box-sizing:border-box;border:2px solid var(--cRed);background:0 0}.color-input-field.input .transparentIndicator{background-color:#f0f;position:relative}.color-input-field.input .transparentIndicator:before,.color-input-field.input .transparentIndicator:after{content:"";background-color:#000;width:50%;height:50%;display:block;position:absolute}.color-input-field.input .transparentIndicator:after{border-top-left-radius:var(--roundness);top:0;left:0}.color-input-field.input .transparentIndicator:before{border-bottom-right-radius:var(--roundness);bottom:0;right:0}.color-input-field.input.disabled .nativeColor input,.color-input-field.input.disabled .computedIndicator,.color-input-field.input.disabled .validIndicator,.color-input-field.input.disabled .invalidIndicator,.color-input-field.input.disabled .transparentIndicator,.color-input-field.input:disabled .nativeColor input,.color-input-field.input:disabled .computedIndicator,.color-input-field.input:disabled .validIndicator,.color-input-field.input:disabled .invalidIndicator,.color-input-field.input:disabled .transparentIndicator{opacity:.25!important}.user-card{z-index:1;border-top-left-radius:calc(var(--roundness) - 1px);border-top-right-radius:calc(var(--roundness) - 1px);position:relative;overflow:hidden}.user-card h4{line-height:2;display:flex}.user-card h3{margin-bottom:0;padding-left:.6em}.user-card h3 .button-default{padding:0 .6em;font-size:1rem;line-height:2}.user-card summary{cursor:pointer;font-weight:700}.user-card details{margin:.5em 0}.user-card details[open] summary{margin-bottom:.5em}.user-card details ul{margin:0}.user-card .input.bio{height:auto}.user-card .follow-button{flex:1 0 auto}.user-card .user-card-inner{padding-bottom:0}.user-card-setting,.user-card-bio{color:var(--lightText);padding:0 .6em;line-height:1.3;display:block}.user-card-setting img,.user-card-bio img{object-fit:contain;vertical-align:middle;max-width:100%;max-height:400px}.user-card .user-card-setting{margin-left:.6em;margin-right:.6em}.user-card .user-card-bio{text-align:center;margin:.6em}.user-card .user-card-bio.input{margin:0 1em}.user-card .user-card-bio.input textarea{text-align:inherit}.user-card .user-card-bio,.user-card .user-card-bio *{line-height:1.5}.user-card .user-card-bio.-justify-left{text-align:start}.user-card:hover{--_still-image-img-visibility:visible;--_still-image-canvas-visibility:hidden;--_still-image-label-visibility:hidden}.user-card .admin-data,.user-card .personal-marks{margin:0 .6em;padding:0 .6em}.user-card .admin-data:not(:last-child),.user-card .personal-marks:not(:last-child){border-bottom:1px dotted var(--border)}.user-card .admin-data .highlighter,.user-card .personal-marks .highlighter{margin-bottom:.5em}.user-card .admin-data .highlighter h4,.user-card .personal-marks .highlighter h4{margin-top:.6em}.user-card .admin-data .highlighter .userHighlightSel,.user-card .personal-marks .highlighter .userHighlightSel{vertical-align:bottom;margin-left:-.1em}.user-card .admin-data .highlighter .userHighlightSel.-none select,.user-card .personal-marks .highlighter .userHighlightSel.-none select{color:var(--textFaint)}.user-card .admin-data .highlighter .userHighlightSel.-none select option,.user-card .personal-marks .highlighter .userHighlightSel.-none select option{color:var(--text);background:var(--background)}.user-card .admin-data .highlighter .highlighter-color,.user-card .personal-marks .highlighter .highlighter-color{vertical-align:bottom;margin-left:.6em}.user-card .header-overlay{-webkit-mask:-webkit-linear-gradient(#0000 0,#fff 5em) bottom no-repeat;position:absolute;inset:-1.4em -1.2em 0;-webkit-mask:linear-gradient(0deg,#0000 0,#fff 5em) bottom no-repeat;mask:linear-gradient(0deg,#0000 0,#fff 5em) bottom no-repeat}.user-card .banner-overlay,.user-card .banner-image{border-top-left-radius:calc(var(--roundness) - 1px);border-top-right-radius:calc(var(--roundness) - 1px);padding:0;position:absolute;inset:0}.user-card .banner-image{z-index:-2}.user-card .banner-image img{object-fit:cover;width:100%;height:100%}.user-card .banner-overlay{background-color:var(--profileTint);opacity:.5;pointer-events:none;z-index:-1}.user-card .bottom-buttons{gap:.5em;display:flex}.user-info{text-align:left;flex-direction:column;gap:1em;display:flex;position:relative}.user-info .user-identity{align-items:flex-end;min-height:6em;display:flex;position:relative;container:user-card/inline-size}.user-info .user-identity:not(.-compact){aspect-ratio:3}.user-info .user-identity>*{min-width:0}.user-info .user-identity>a{vertical-align:middle;display:flex}.user-info .user-identity .Avatar{--_avatarShadowBox:var(--avatarShadow);--_avatarShadowFilter:var(--avatarShadowFilter);--_avatarShadowInset:var(--avatarShadowInset);object-fit:cover;width:min(7em,20cqw);height:min(7em,20cqw)}.user-info .other-actions{grid-gap:.6em;z-index:2;grid-auto-flow:column;align-self:end;font-size:1.25rem;display:inline-grid;position:relative}.user-info .other-actions a,.user-info .other-actions button,.user-info .other-actions div{text-align:center;width:2em;height:2em;margin:-.6em;padding:.6em;line-height:2em}.user-info .other-actions a.edit-banner-button,.user-info .other-actions button.edit-banner-button,.user-info .other-actions div.edit-banner-button{width:auto}.user-info .other-actions a:hover .icon,.user-info .other-actions button:hover .icon,.user-info .other-actions div:hover .icon{color:var(--textFaint)}.user-info .other-actions a:not(:hover) .icon,.user-info .other-actions button:not(:hover) .icon,.user-info .other-actions div:not(:hover) .icon{color:var(--lightText)}.user-info-avatar{cursor:pointer;margin-right:.6em;position:relative}.user-info-avatar.-overlay{border-radius:var(--roundness);opacity:0;justify-content:center;align-items:center;transition:opacity .2s;display:flex;position:absolute;inset:-.6em -1.2em -.6em -.6em}.user-info-avatar.-overlay svg{color:#fff;margin:.5em}.user-info-avatar:hover .user-info-avatar.-overlay{opacity:1;background-color:#0000004d}.user-info .user-info-avatar.-editable .-overlay{opacity:1;justify-content:end;place-items:start end}.user-info .user-summary{text-align:left;text-overflow:ellipsis;white-space:nowrap;z-index:1;filter:drop-shadow(0 0 .5em var(--profileTint)) drop-shadow(0 0 .2em var(--profileTint));flex-direction:column;flex:1 1 0;align-self:stretch;margin-left:.6em;line-height:2em;display:flex}.user-info .user-summary .alert{text-shadow:none}.user-info .user-summary{--emoji-size:1.7em}.user-info .user-summary .RichContent{--link:var(--text)!important}.user-info .user-summary .name-wrapper{align-items:baseline;display:flex}.user-info .user-summary .name-wrapper .edit-button{text-align:center;width:3em}.user-info .user-summary .name-wrapper .edit-button:hover .icon{color:var(--textFaint)}.user-info .user-summary .name-wrapper .edit-button:not(:hover) .icon{color:var(--lightText)}.user-info .user-summary .name-wrapper .input,.user-info .user-summary .name-wrapper .user-name{text-overflow:ellipsis;flex:1;margin-right:1em;font-weight:600;line-height:2;overflow:hidden}.user-info .user-summary .name-wrapper .input{margin:0 -.5em;padding:0 .5em}.user-info .user-summary .top-line{flex-direction:column;flex:1;justify-content:space-between;margin-bottom:-.2em;font-size:max(110%,4cqw);line-height:2;display:flex}.user-info .user-summary .bottom-line{white-space:normal;flex-wrap:wrap;align-items:baseline;margin-top:.5em;font-size:max(90%,2.5cqw);font-weight:500;line-height:1.5;display:flex}.user-info .user-summary .lock-icon{vertical-align:baseline;margin:0 .35em 0 .5em;display:inline-block;overflow-x:hidden}.user-info .user-summary .user-screen-name{color:var(--text);text-overflow:ellipsis;display:inline-block;overflow:hidden}.user-info .user-summary .user-role{vertical-align:baseline;display:inline-block}.user-info .user-interactions{flex-wrap:wrap;gap:.6em;display:flex;position:relative}.user-info .user-interactions>*{flex:0 0 8em}.user-info .user-interactions .popover-trigger-button,.user-info .user-interactions .moderation-tools-button{width:100%}.user-info .user-interactions>.btn-group,.user-info .user-interactions>button{white-space:nowrap}.sidebar .edit-profile-button{display:none}.user-extras{padding:1.2em .6em;line-height:1.5}.user-extras .user-stats{text-align:center;word-wrap:break-word;width:100%;display:block}.user-extras .user-stats dl{white-space:nowrap;margin-right:1em;display:inline}.user-extras .user-stats dd{text-overflow:ellipsis;margin:0;font-weight:bolder;overflow:hidden}.user-extras .user-stats dd .svg-inline--fa{color:var(--text)}.user-extras .user-stats dd,.user-extras .user-stats dt{display:inline}.user-extras .user-stats a{text-decoration:none}.user-extras .birthday{text-align:center;white-space:nowrap;--icon:var(--text);width:100%}.user-profile-fields{--emoji-size:1.8em;flex-direction:column;margin:0 .5em;padding:0 .5em;display:flex}.user-profile-fields .user-profile-field-add,.user-profile-fields .user-profile-field{border:1px solid var(--border);border-radius:var(--roundness);align-items:center;margin:.25em;line-height:2em;display:flex}.user-profile-fields .user-profile-field-add .label,.user-profile-fields .user-profile-field .label{margin-left:.5em}.user-profile-fields .user-profile-field-add{justify-content:center;margin:.25em}.user-profile-fields .user-profile-field .input{text-align:inherit;flex:1}.user-profile-fields .user-profile-field .delete-field{text-align:center;width:2em;display:inline-block}.user-profile-fields .user-profile-field .user-profile-field-name,.user-profile-fields .user-profile-field .user-profile-field-value,.user-profile-fields .user-profile-field .user-profile-field-add{text-overflow:ellipsis;white-space:nowrap;box-sizing:border-box;display:inline-flex;overflow:hidden}.user-profile-fields .user-profile-field .user-profile-field-name.-edit,.user-profile-fields .user-profile-field .user-profile-field-value.-edit,.user-profile-fields .user-profile-field .user-profile-field-add.-edit{padding:0}.user-profile-fields .user-profile-field .user-profile-field-name.-edit input,.user-profile-fields .user-profile-field .user-profile-field-value.-edit input,.user-profile-fields .user-profile-field .user-profile-field-add.-edit input{font-weight:inherit}.user-profile-fields .user-profile-field .user-profile-field-name{text-align:right;color:var(--lightText);border-right:1px solid var(--border);flex:0 50%;justify-content:end;min-width:9em;padding-left:1.2em;padding-right:.6em;font-weight:600}.user-profile-fields .user-profile-field .user-profile-field-value{color:var(--text);flex:55%;margin:0;padding-left:.6em}.edit-image .panel-body{text-align:center;flex-direction:column;display:flex}.edit-image .current-avatar{object-fit:contain}.edit-image .image-container{aspect-ratio:1;flex:1 0 20em;align-self:center;gap:.5em;max-width:100%;max-height:30em;margin:0 0 1em;display:flex}.edit-image .image-container.-banner{aspect-ratio:3;max-width:100%}.edit-image .image-container .new-image{flex-direction:column;display:flex}.edit-image .image-container .cropper{flex:1;overflow-x:auto}.edit-image .image-container>*{aspect-ratio:1;flex:1 0 10em;max-height:100%}.edit-image .image-container .separator{min-width:1.1em;aspect-ratio:unset;flex:0 5em;align-self:center;font-size:500%}.edit-image.-banner .images-container{grid-template-rows:20em 5em 20em;grid-template-columns:1fr}.edit-image.-banner .images-container>*{aspect-ratio:3;flex:1 0 10em;width:100%}.edit-image.-banner .separator{min-height:1.1em;aspect-ratio:unset;flex:0 5em;justify-self:center;font-size:500%}#modal.-mobile .edit-image #pick-image{height:3em}#modal.-mobile .edit-image .image-container.-banner{max-height:10em} diff --git a/priv/static/static/css/user_note.A3UYQeEG.css b/priv/static/static/css/user_note.A3UYQeEG.css new file mode 100644 index 000000000..9b9dfe009 --- /dev/null +++ b/priv/static/static/css/user_note.A3UYQeEG.css @@ -0,0 +1 @@ +.user-note{position:relative}.user-note h4{justify-content:space-between;margin-bottom:.5em}.user-note .note-text{align-self:stretch;min-width:100%;margin:-.6em}.user-note .overlay{background-color:#0000004d;position:absolute;inset:0}.user-note .overlay .panel-loading{font-size:1em} diff --git a/priv/static/static/css/user_profile.CC-U32e-.css b/priv/static/static/css/user_profile.CC-U32e-.css new file mode 100644 index 000000000..f948f2ae7 --- /dev/null +++ b/priv/static/static/css/user_profile.CC-U32e-.css @@ -0,0 +1 @@ +.user-profile{flex:2}.user-profile .card-wrapper{border-top-left-radius:var(--roundness);border-top-right-radius:var(--roundness)}.user-profile .panel-footer{border-bottom-left-radius:var(--roundness);border-bottom-right-radius:var(--roundness)}.user-profile{--currentPanelStack:0}.user-profile .userlist-placeholder{justify-content:center;align-items:center;padding:2em;display:flex}.user-profile .user-info{margin:1.2em}.user-profile.-admin-view .filter{padding:1em}.user-profile.-admin-view .list-item{border-bottom:1px solid var(--border);padding:0}.user-profile.-admin-view .list-item .Status{width:100%}.user-profile.-admin-view .footer{background:var(--background)}.user-profile-placeholder .panel-body{justify-content:center;align-items:center;padding:7em;display:flex}.user-profile-placeholder .alert{border-width:2px;padding:.75em 5em}.user-profile-placeholder .alert .error-message{color:var(--text);font-weight:700} diff --git a/priv/static/static/css/user_reporting_modal.CVdwO3Sc.css b/priv/static/static/css/user_reporting_modal.CVdwO3Sc.css new file mode 100644 index 000000000..77dbac433 --- /dev/null +++ b/priv/static/static/css/user_reporting_modal.CVdwO3Sc.css @@ -0,0 +1 @@ +.user-reporting-panel{width:90vw;max-width:50rem;min-height:20vh;max-height:80vh}.user-reporting-panel .user-link{display:inline}.user-reporting-panel .panel-body{border-top:1px solid;border-color:var(--border);flex-direction:column-reverse;display:flex;overflow:hidden}.user-reporting-panel-left{line-height:var(--post-line-height);box-sizing:border-box;padding:1.1em .7em .7em}.user-reporting-panel-left>div{margin-bottom:1em}.user-reporting-panel-left>div:last-child{margin-bottom:0}.user-reporting-panel-left p{margin-top:0}.user-reporting-panel-left textarea.form-control{resize:none;width:100%;min-height:44px;line-height:1.1;transition:min-height .2s .1s;overflow:hidden}.user-reporting-panel-left .btn{min-width:10em;padding:0 2em}.user-reporting-panel-left .alert{margin:1em 0 0;line-height:1.3em}.user-reporting-panel-right{flex-direction:column;display:flex;overflow-y:auto}@media (width>=801px){.user-reporting-panel .panel-body{flex-direction:row}.user-reporting-panel-left{border-right:1px solid;border-color:var(--border);width:50%;max-width:320px;padding:1.1em}.user-reporting-panel-left>div{margin-bottom:2em}.user-reporting-panel-right{flex:auto;width:50%;margin-bottom:12px}} diff --git a/priv/static/static/css/user_timed_filter_modal.ClNyvF9i.css b/priv/static/static/css/user_timed_filter_modal.ClNyvF9i.css new file mode 100644 index 000000000..0d55c27f2 --- /dev/null +++ b/priv/static/static/css/user_timed_filter_modal.ClNyvF9i.css @@ -0,0 +1 @@ +.UserTimedFilterModal .input-dont-ask-again{margin-left:1em}.UserTimedFilterModal .input-expire-at{margin-left:.25em}.UserTimedFilterModal .footer-left-checkbox{width:max-content}.UserTimedFilterModal .expirationTime{white-space:nowrap;padding:.5em;display:inline-flex}.UserTimedFilterModal .dialog-modal-content .checkbox{vertical-align:middle;padding:.5em} diff --git a/priv/static/static/css/vertical_tab_switcher.DU3QPNwr.css b/priv/static/static/css/vertical_tab_switcher.DU3QPNwr.css new file mode 100644 index 000000000..5f01f9bee --- /dev/null +++ b/priv/static/static/css/vertical_tab_switcher.DU3QPNwr.css @@ -0,0 +1 @@ +.DraftButtons{gap:.5em;margin-top:.5em;display:inline-flex;position:relative}.draft-tooltip{text-align:center;min-width:10em;margin:.5em 1em}.LocalSettingIndicator{display:inline-block;position:relative}.profilesetting-tooltip{text-align:center;min-width:10em;margin:.5em 1em}.ModifiedIndicator{display:inline-block;position:relative}.modified-tooltip{text-align:center;min-width:10em;margin:.5em 1em}.-mobile .ChoiceSetting.setting-item{display:block}.-mobile .ChoiceSetting.setting-item .setting-label{margin-bottom:.5em;display:block}.vertical-tab-switcher{flex-direction:row;display:flex;container-type:inline-size}.vertical-tab-switcher>.tabs{white-space:nowrap;text-overflow:ellipsis;border-right:1px solid;border-right-color:var(--border);box-sizing:border-box;flex-direction:column;flex:0 0 15em;width:15em;min-width:15em;overflow:hidden auto}.vertical-tab-switcher>.tabs>.menu-item{padding:.5em 1em}.vertical-tab-switcher>.tabs>.menu-item .tab-icon{vertical-align:middle;margin-right:.75em}.vertical-tab-switcher>.contents .tab-content-label{box-sizing:border-box;border-bottom:1px solid var(--border);margin:0;display:none}.vertical-tab-switcher>.contents .tab-content-label button{box-sizing:border-box;padding:.5em}.vertical-tab-switcher>.contents .tab-slot-wrapper{grid-template-columns:minmax(1em, 1fr) minmax(-webkit-min-content, 45em) minmax(1em, 1fr);flex-direction:column;flex:auto;grid-template-columns:minmax(1em,1fr) minmax(min-content,45em) minmax(1em,1fr);grid-template-areas:".content.";height:100%;padding:0 1em;display:grid;position:relative;overflow-y:auto}.vertical-tab-switcher>.contents .tab-slot-wrapper.-full-width{padding-left:0;padding-right:0}.vertical-tab-switcher>.contents .tab-slot-wrapper.-full-height{padding-top:0;padding-bottom:0}.vertical-tab-switcher>.contents .tab-slot-wrapper .tab-content{grid-area:content}.vertical-tab-switcher>.contents .tab-slot-wrapper .tab-content.-full-width{grid-column:1/4}.vertical-tab-switcher>.contents .tab-slot-wrapper .tab-content.-full-height{flex-direction:column;height:100%;display:flex}.vertical-tab-switcher>.contents .tab-slot-wrapper .tab-content.-full-height>*{height:100%}.vertical-tab-switcher>.contents .tab-slot-wrapper .tab-content.-full-width.-full-height{position:absolute;inset:0}.vertical-tab-switcher>.contents .tab-content-wrapper{flex-direction:column;flex:auto;height:100%;display:flex}.vertical-tab-switcher>.contents .tab-content-wrapper.-hidden{display:none}.vertical-tab-switcher.-mobile>.contents .tab-content-label{display:block}.vertical-tab-switcher.-mobile.-nav-contents>.contents{flex-grow:1;flex-shrink:1;display:block}.vertical-tab-switcher.-mobile.-nav-contents>.tabs{flex-grow:0;flex-shrink:1;display:none}.vertical-tab-switcher.-mobile.-nav-tabs>.tabs{flex-grow:1;display:block}.vertical-tab-switcher.-mobile.-nav-tabs>.contents{flex-grow:0;flex-shrink:1;display:none}.vertical-tab-switcher.-mobile .tab-slot-wrapper{grid-template-columns:0 minmax(-webkit-min-content, 45em) 0;grid-template-columns:0 minmax(min-content,45em) 0}@supports (container-type:inline-size){.vertical-tab-switcher.-nav-contents>.contents,.vertical-tab-switcher.-nav-tabs>.contents,.vertical-tab-switcher.-mobile.-nav-contents>.contents,.vertical-tab-switcher.-mobile.-nav-tabs>.contents{flex-grow:1;display:block}.vertical-tab-switcher.-nav-contents>.tabs,.vertical-tab-switcher.-nav-tabs>.tabs,.vertical-tab-switcher.-mobile.-nav-contents>.tabs,.vertical-tab-switcher.-mobile.-nav-tabs>.tabs{flex-grow:0;display:block}@container (width<50em){.vertical-tab-switcher>.contents .tab-content-label,.vertical-tab-switcher.-mobile>.contents .tab-content-label{display:block}.vertical-tab-switcher.-nav-contents>.contents,.vertical-tab-switcher.-mobile.-nav-contents>.contents{flex-grow:1;display:block}.vertical-tab-switcher.-nav-contents>.tabs,.vertical-tab-switcher.-mobile.-nav-contents>.tabs{flex-grow:0;flex-shrink:1;display:none}.vertical-tab-switcher.-nav-tabs>.tabs,.vertical-tab-switcher.-mobile.-nav-tabs>.tabs{flex-grow:1;display:block}.vertical-tab-switcher.-nav-tabs>.contents,.vertical-tab-switcher.-mobile.-nav-tabs>.contents{flex-grow:0;flex-shrink:1;display:none}}} diff --git a/priv/static/static/css/who_to_follow_panel.BP23-WSI.css b/priv/static/static/css/who_to_follow_panel.BP23-WSI.css new file mode 100644 index 000000000..7025ee981 --- /dev/null +++ b/priv/static/static/css/who_to_follow_panel.BP23-WSI.css @@ -0,0 +1 @@ +.who-to-follow *{vertical-align:middle}.who-to-follow img{width:32px;height:32px}.who-to-follow{margin:0;padding:0 1em}.who-to-follow-items{white-space:nowrap;text-overflow:ellipsis;margin:1em 0;padding:0;overflow:hidden}.who-to-follow-more{text-align:center;margin:1em 0;padding:0} diff --git a/priv/static/static/js/_plugin-vue_export-helper.By3-ojQa.js b/priv/static/static/js/_plugin-vue_export-helper.By3-ojQa.js new file mode 100644 index 000000000..f60e09dc8 --- /dev/null +++ b/priv/static/static/js/_plugin-vue_export-helper.By3-ojQa.js @@ -0,0 +1,2 @@ +function e(e){let t=Object.create(null);for(let n of e.split(`,`))t[n]=1;return e=>e in t}var t={},n=()=>{},r=Object.assign,i=(e,t)=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)},a=Object.prototype.hasOwnProperty,o=(e,t)=>a.call(e,t),s=Array.isArray,c=e=>h(e)===`[object Map]`,l=e=>h(e)===`[object Set]`,u=e=>typeof e==`function`,d=e=>typeof e==`string`,f=e=>typeof e==`symbol`,p=e=>typeof e==`object`&&!!e,m=Object.prototype.toString,h=e=>m.call(e),g=e=>h(e).slice(8,-1),_=e=>h(e)===`[object Object]`,v=e=>d(e)&&e!==`NaN`&&e[0]!==`-`&&``+parseInt(e,10)===e,y=(e,t)=>!Object.is(e,t),b=(e,t,n,r=!1)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},x,S=class{constructor(e=!1){this.detached=e,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=x,!e&&x&&(this.index=(x.scopes||=[]).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let e,t;if(this.scopes)for(e=0,t=this.scopes.length;e0&&--this._on===0&&(x=this.prevScope,this.prevScope=void 0)}stop(e){if(this._active){this._active=!1;let t,n;for(t=0,n=this.effects.length;t0)return;if(D){let e=D;for(D=void 0;e;){let t=e.next;e.next=void 0,e.flags&=-9,e=t}}let e;for(;re;){let t=re;for(re=void 0;t;){let n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(t){e||=t}t=n}}if(e)throw e}function se(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function ce(e){let t,n=e.depsTail,r=n;for(;r;){let e=r.prevDep;r.version===-1?(r===n&&(n=e),de(r),fe(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=e}e.deps=t,e.depsTail=n}function le(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(ue(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function ue(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===_e)||(e.globalVersion=_e,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!le(e))))return;e.flags|=2;let t=e.dep,n=E,r=O;E=e,O=!0;try{se(e);let n=e.fn(e._value);(t.version===0||y(n,e._value))&&(e.flags|=128,e._value=n,t.version++)}catch(e){throw t.version++,e}finally{E=n,O=r,ce(e),e.flags&=-3}}function de(e,t=!1){let{dep:n,prevSub:r,nextSub:i}=e;if(r&&(r.nextSub=i,e.prevSub=void 0),i&&(i.prevSub=r,e.nextSub=void 0),n.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let e=n.computed.deps;e;e=e.nextDep)de(e,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function fe(e){let{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}var O=!0,pe=[];function me(){pe.push(O),O=!1}function he(){let e=pe.pop();O=e===void 0?!0:e}function ge(e){let{cleanup:t}=e;if(e.cleanup=void 0,t){let e=E;E=void 0;try{t()}finally{E=e}}}var _e=0,ve=class{constructor(e,t){this.sub=e,this.dep=t,this.version=t.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}},ye=class{constructor(e){this.computed=e,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(e){if(!E||!O||E===this.computed)return;let t=this.activeLink;if(t===void 0||t.sub!==E)t=this.activeLink=new ve(E,this),E.deps?(t.prevDep=E.depsTail,E.depsTail.nextDep=t,E.depsTail=t):E.deps=E.depsTail=t,be(t);else if(t.version===-1&&(t.version=this.version,t.nextDep)){let e=t.nextDep;e.prevDep=t.prevDep,t.prevDep&&(t.prevDep.nextDep=e),t.prevDep=E.depsTail,t.nextDep=void 0,E.depsTail.nextDep=t,E.depsTail=t,E.deps===t&&(E.deps=e)}return t}trigger(e){this.version++,_e++,this.notify(e)}notify(e){ae();try{for(let e=this.subs;e;e=e.prevSub)e.sub.notify()&&e.sub.dep.notify()}finally{oe()}}};function be(e){if(e.dep.sc++,e.sub.flags&4){let t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let e=t.deps;e;e=e.nextDep)be(e)}let n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}var xe=new WeakMap,Se=Symbol(``),Ce=Symbol(``),we=Symbol(``);function k(e,t,n){if(O&&E){let t=xe.get(e);t||xe.set(e,t=new Map);let r=t.get(n);r||(t.set(n,r=new ye),r.map=t,r.key=n),r.track()}}function Te(e,t,n,r,i,a){let o=xe.get(e);if(!o){_e++;return}let l=e=>{e&&e.trigger()};if(ae(),t===`clear`)o.forEach(l);else{let i=s(e),a=i&&v(n);if(i&&n===`length`){let e=Number(r);o.forEach((t,n)=>{(n===`length`||n===we||!f(n)&&n>=e)&&l(t)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),a&&l(o.get(we)),t){case`add`:i?a&&l(o.get(`length`)):(l(o.get(Se)),c(e)&&l(o.get(Ce)));break;case`delete`:i||(l(o.get(Se)),c(e)&&l(o.get(Ce)));break;case`set`:c(e)&&l(o.get(Se));break}}oe()}function Ee(e,t){let n=xe.get(e);return n&&n.get(t)}function De(e){let t=j(e);return t===e?t:(k(t,`iterate`,we),A(e)?t:t.map(M))}function Oe(e){return k(e=j(e),`iterate`,we),e}var ke={__proto__:null,[Symbol.iterator](){return Ae(this,Symbol.iterator,M)},concat(...e){return De(this).concat(...e.map(e=>s(e)?De(e):e))},entries(){return Ae(this,`entries`,e=>(e[1]=M(e[1]),e))},every(e,t){return Me(this,`every`,e,t,void 0,arguments)},filter(e,t){return Me(this,`filter`,e,t,e=>e.map(M),arguments)},find(e,t){return Me(this,`find`,e,t,M,arguments)},findIndex(e,t){return Me(this,`findIndex`,e,t,void 0,arguments)},findLast(e,t){return Me(this,`findLast`,e,t,M,arguments)},findLastIndex(e,t){return Me(this,`findLastIndex`,e,t,void 0,arguments)},forEach(e,t){return Me(this,`forEach`,e,t,void 0,arguments)},includes(...e){return Pe(this,`includes`,e)},indexOf(...e){return Pe(this,`indexOf`,e)},join(e){return De(this).join(e)},lastIndexOf(...e){return Pe(this,`lastIndexOf`,e)},map(e,t){return Me(this,`map`,e,t,void 0,arguments)},pop(){return Fe(this,`pop`)},push(...e){return Fe(this,`push`,e)},reduce(e,...t){return Ne(this,`reduce`,e,t)},reduceRight(e,...t){return Ne(this,`reduceRight`,e,t)},shift(){return Fe(this,`shift`)},some(e,t){return Me(this,`some`,e,t,void 0,arguments)},splice(...e){return Fe(this,`splice`,e)},toReversed(){return De(this).toReversed()},toSorted(e){return De(this).toSorted(e)},toSpliced(...e){return De(this).toSpliced(...e)},unshift(...e){return Fe(this,`unshift`,e)},values(){return Ae(this,`values`,M)}};function Ae(e,t,n){let r=Oe(e),i=r[t]();return r!==e&&!A(e)&&(i._next=i.next,i.next=()=>{let e=i._next();return e.done||(e.value=n(e.value)),e}),i}var je=Array.prototype;function Me(e,t,n,r,i,a){let o=Oe(e),s=o!==e&&!A(e),c=o[t];if(c!==je[t]){let t=c.apply(e,a);return s?M(t):t}let l=n;o!==e&&(s?l=function(t,r){return n.call(this,M(t),r,e)}:n.length>2&&(l=function(t,r){return n.call(this,t,r,e)}));let u=c.call(o,l,r);return s&&i?i(u):u}function Ne(e,t,n,r){let i=Oe(e),a=n;return i!==e&&(A(e)?n.length>3&&(a=function(t,r,i){return n.call(this,t,r,i,e)}):a=function(t,r,i){return n.call(this,t,M(r),i,e)}),i[t](a,...r)}function Pe(e,t,n){let r=j(e);k(r,`iterate`,we);let i=r[t](...n);return(i===-1||i===!1)&&ft(n[0])?(n[0]=j(n[0]),r[t](...n)):i}function Fe(e,t,n=[]){me(),ae();let r=j(e)[t].apply(e,n);return oe(),he(),r}var Ie=e(`__proto__,__v_isRef,__isVue`),Le=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!==`arguments`&&e!==`caller`).map(e=>Symbol[e]).filter(f));function Re(e){f(e)||(e=String(e));let t=j(this);return k(t,`has`,e),t.hasOwnProperty(e)}var ze=class{constructor(e=!1,t=!1){this._isReadonly=e,this._isShallow=t}get(e,t,n){if(t===`__v_skip`)return e.__v_skip;let r=this._isReadonly,i=this._isShallow;if(t===`__v_isReactive`)return!r;if(t===`__v_isReadonly`)return r;if(t===`__v_isShallow`)return i;if(t===`__v_raw`)return n===(r?i?rt:nt:i?tt:et).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(n)?e:void 0;let a=s(e);if(!r){let e;if(a&&(e=ke[t]))return e;if(t===`hasOwnProperty`)return Re}let o=Reflect.get(e,t,N(e)?e:n);if((f(t)?Le.has(t):Ie(t))||(r||k(e,`get`,t),i))return o;if(N(o)){let e=a&&v(t)?o:o.value;return r&&p(e)?ct(e):e}return p(o)?r?ct(o):ot(o):o}},Be=class extends ze{constructor(e=!1){super(!1,e)}set(e,t,n,r){let i=e[t];if(!this._isShallow){let t=dt(i);if(!A(n)&&!dt(n)&&(i=j(i),n=j(n)),!s(e)&&N(i)&&!N(n))return t||(i.value=n),!0}let a=s(e)&&v(t)?Number(t)e,Ke=e=>Reflect.getPrototypeOf(e);function qe(e,t,n){return function(...r){let i=this.__v_raw,a=j(i),o=c(a),s=e===`entries`||e===Symbol.iterator&&o,l=e===`keys`&&o,u=i[e](...r),d=n?Ge:t?mt:M;return!t&&k(a,`iterate`,l?Ce:Se),{next(){let{value:e,done:t}=u.next();return t?{value:e,done:t}:{value:s?[d(e[0]),d(e[1])]:d(e),done:t}},[Symbol.iterator](){return this}}}}function Je(e){return function(...t){return e===`delete`?!1:e===`clear`?void 0:this}}function Ye(e,t){let n={get(n){let r=this.__v_raw,i=j(r),a=j(n);e||(y(n,a)&&k(i,`get`,n),k(i,`get`,a));let{has:o}=Ke(i),s=t?Ge:e?mt:M;if(o.call(i,n))return s(r.get(n));if(o.call(i,a))return s(r.get(a));r!==i&&r.get(n)},get size(){let t=this.__v_raw;return!e&&k(j(t),`iterate`,Se),t.size},has(t){let n=this.__v_raw,r=j(n),i=j(t);return e||(y(t,i)&&k(r,`has`,t),k(r,`has`,i)),t===i?n.has(t):n.has(t)||n.has(i)},forEach(n,r){let i=this,a=i.__v_raw,o=j(a),s=t?Ge:e?mt:M;return!e&&k(o,`iterate`,Se),a.forEach((e,t)=>n.call(r,s(e),s(t),i))}};return r(n,e?{add:Je(`add`),set:Je(`set`),delete:Je(`delete`),clear:Je(`clear`)}:{add(e){!t&&!A(e)&&!dt(e)&&(e=j(e));let n=j(this);return Ke(n).has.call(n,e)||(n.add(e),Te(n,`add`,e,e)),this},set(e,n){!t&&!A(n)&&!dt(n)&&(n=j(n));let r=j(this),{has:i,get:a}=Ke(r),o=i.call(r,e);o||=(e=j(e),i.call(r,e));let s=a.call(r,e);return r.set(e,n),o?y(n,s)&&Te(r,`set`,e,n,s):Te(r,`add`,e,n),this},delete(e){let t=j(this),{has:n,get:r}=Ke(t),i=n.call(t,e);i||=(e=j(e),n.call(t,e));let a=r?r.call(t,e):void 0,o=t.delete(e);return i&&Te(t,`delete`,e,void 0,a),o},clear(){let e=j(this),t=e.size!==0,n=e.clear();return t&&Te(e,`clear`,void 0,void 0,void 0),n}}),[`keys`,`values`,`entries`,Symbol.iterator].forEach(r=>{n[r]=qe(r,e,t)}),n}function Xe(e,t){let n=Ye(e,t);return(t,r,i)=>r===`__v_isReactive`?!e:r===`__v_isReadonly`?e:r===`__v_raw`?t:Reflect.get(o(n,r)&&r in t?n:t,r,i)}var Ze={get:Xe(!1,!1)},Qe={get:Xe(!1,!0)},$e={get:Xe(!0,!1)},et=new WeakMap,tt=new WeakMap,nt=new WeakMap,rt=new WeakMap;function it(e){switch(e){case`Object`:case`Array`:return 1;case`Map`:case`Set`:case`WeakMap`:case`WeakSet`:return 2;default:return 0}}function at(e){return e.__v_skip||!Object.isExtensible(e)?0:it(g(e))}function ot(e){return dt(e)?e:lt(e,!1,He,Ze,et)}function st(e){return lt(e,!1,We,Qe,tt)}function ct(e){return lt(e,!0,Ue,$e,nt)}function lt(e,t,n,r,i){if(!p(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;let a=at(e);if(a===0)return e;let o=i.get(e);if(o)return o;let s=new Proxy(e,a===2?r:n);return i.set(e,s),s}function ut(e){return dt(e)?ut(e.__v_raw):!!(e&&e.__v_isReactive)}function dt(e){return!!(e&&e.__v_isReadonly)}function A(e){return!!(e&&e.__v_isShallow)}function ft(e){return e?!!e.__v_raw:!1}function j(e){let t=e&&e.__v_raw;return t?j(t):e}function pt(e){return!o(e,`__v_skip`)&&Object.isExtensible(e)&&b(e,`__v_skip`,!0),e}var M=e=>p(e)?ot(e):e,mt=e=>p(e)?ct(e):e;function N(e){return e?e.__v_isRef===!0:!1}function ht(e){return _t(e,!1)}function gt(e){return _t(e,!0)}function _t(e,t){return N(e)?e:new vt(e,t)}var vt=class{constructor(e,t){this.dep=new ye,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=t?e:j(e),this._value=t?e:M(e),this.__v_isShallow=t}get value(){return this.dep.track(),this._value}set value(e){let t=this._rawValue,n=this.__v_isShallow||A(e)||dt(e);e=n?e:j(e),y(e,t)&&(this._rawValue=e,this._value=n?e:M(e),this.dep.trigger())}};function yt(e){return N(e)?e.value:e}var bt={get:(e,t,n)=>t===`__v_raw`?e:yt(Reflect.get(e,t,n)),set:(e,t,n,r)=>{let i=e[t];return N(i)&&!N(n)?(i.value=n,!0):Reflect.set(e,t,n,r)}};function xt(e){return ut(e)?e:new Proxy(e,bt)}function St(e){let t=s(e)?Array(e.length):{};for(let n in e)t[n]=wt(e,n);return t}var Ct=class{constructor(e,t,n){this._object=e,this._key=t,this._defaultValue=n,this.__v_isRef=!0,this._value=void 0}get value(){let e=this._object[this._key];return this._value=e===void 0?this._defaultValue:e}set value(e){this._object[this._key]=e}get dep(){return Ee(j(this._object),this._key)}};function wt(e,t,n){let r=e[t];return N(r)?r:new Ct(e,t,n)}var Tt=class{constructor(e,t,n){this.fn=e,this.setter=t,this._value=void 0,this.dep=new ye(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=_e-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!t,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&E!==this)return ie(this,!0),!0}get value(){let e=this.dep.track();return ue(this),e&&(e.version=this.dep.version),this._value}set value(e){this.setter&&this.setter(e)}};function Et(e,t,n=!1){let r,i;return u(e)?r=e:(r=e.get,i=e.set),new Tt(r,i,n)}var Dt={},Ot=new WeakMap,kt=void 0;function At(e,t=!1,n=kt){if(n){let t=Ot.get(n);t||Ot.set(n,t=[]),t.push(e)}}function jt(e,r,a=t){let{immediate:o,deep:c,once:l,scheduler:d,augmentJob:f,call:p}=a,m=e=>c?e:A(e)||c===!1||c===0?Mt(e,1):Mt(e),h,g,_,v,b=!1,x=!1;if(N(e)?(g=()=>e.value,b=A(e)):ut(e)?(g=()=>m(e),b=!0):s(e)?(x=!0,b=e.some(e=>ut(e)||A(e)),g=()=>e.map(e=>{if(N(e))return e.value;if(ut(e))return m(e);if(u(e))return p?p(e,2):e()})):g=u(e)?r?p?()=>p(e,2):e:()=>{if(_){me();try{_()}finally{he()}}let t=kt;kt=h;try{return p?p(e,3,[v]):e(v)}finally{kt=t}}:n,r&&c){let e=g,t=c===!0?1/0:c;g=()=>Mt(e(),t)}let S=w(),C=()=>{h.stop(),S&&S.active&&i(S.effects,h)};if(l&&r){let e=r;r=(...t)=>{e(...t),C()}}let T=x?Array(e.length).fill(Dt):Dt,E=e=>{if(!(!(h.flags&1)||!h.dirty&&!e))if(r){let e=h.run();if(c||b||(x?e.some((e,t)=>y(e,T[t])):y(e,T))){_&&_();let t=kt;kt=h;try{let t=[e,T===Dt?void 0:x&&T[0]===Dt?[]:T,v];T=e,p?p(r,3,t):r(...t)}finally{kt=t}}}else h.run()};return f&&f(E),h=new te(g),h.scheduler=d?()=>d(E,!1):E,v=e=>At(e,!1,h),_=h.onStop=()=>{let e=Ot.get(h);if(e){if(p)p(e,4);else for(let t of e)t();Ot.delete(h)}},r?o?E(!0):T=h.run():d?d(E.bind(null,!0),!0):h.run(),C.pause=h.pause.bind(h),C.resume=h.resume.bind(h),C.stop=C,C}function Mt(e,t=1/0,n){if(t<=0||!p(e)||e.__v_skip||(n||=new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,N(e))Mt(e.value,t,n);else if(s(e))for(let r=0;r{Mt(e,t,n)});else if(_(e)){for(let r in e)Mt(e[r],t,n);for(let r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&Mt(e[r],t,n)}return e}function Nt(e){let t=Object.create(null);for(let n of e.split(`,`))t[n]=1;return e=>e in t}var P={},Pt=[],Ft=()=>{},It=()=>!1,Lt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Rt=e=>e.startsWith(`onUpdate:`),F=Object.assign,zt=(e,t)=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)},Bt=Object.prototype.hasOwnProperty,I=(e,t)=>Bt.call(e,t),L=Array.isArray,Vt=e=>qt(e)===`[object Map]`,Ht=e=>qt(e)===`[object Set]`,Ut=e=>qt(e)===`[object RegExp]`,R=e=>typeof e==`function`,z=e=>typeof e==`string`,Wt=e=>typeof e==`symbol`,B=e=>typeof e==`object`&&!!e,Gt=e=>(B(e)||R(e))&&R(e.then)&&R(e.catch),Kt=Object.prototype.toString,qt=e=>Kt.call(e),Jt=e=>qt(e)===`[object Object]`,Yt=Nt(`,key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted`),Xt=e=>{let t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},Zt=/-\w/g,V=Xt(e=>e.replace(Zt,e=>e.slice(1).toUpperCase())),Qt=/\B([A-Z])/g,$t=Xt(e=>e.replace(Qt,`-$1`).toLowerCase()),en=Xt(e=>e.charAt(0).toUpperCase()+e.slice(1)),tn=Xt(e=>e?`on${en(e)}`:``),nn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},an=e=>{let t=parseFloat(e);return isNaN(t)?e:t},on,sn=()=>on||=typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:typeof global<`u`?global:{};function cn(e){if(L(e)){let t={};for(let n=0;n{if(e){let n=e.split(un);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function pn(e){let t=``;if(z(e))t=e;else if(L(e))for(let n=0;n!!(e&&e.__v_isRef===!0),gn=e=>z(e)?e:e==null?``:L(e)||B(e)&&(e.toString===Kt||!R(e.toString))?hn(e)?gn(e.value):JSON.stringify(e,_n,2):String(e),_n=(e,t)=>hn(t)?_n(e,t.value):Vt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((e,[t,n],r)=>(e[vn(t,r)+` =>`]=n,e),{})}:Ht(t)?{[`Set(${t.size})`]:[...t.values()].map(e=>vn(e))}:Wt(t)?vn(t):B(t)&&!L(t)&&!Jt(t)?String(t):t,vn=(e,t=``)=>Wt(e)?`Symbol(${e.description??t})`:e;function yn(e,t,n,r){try{return r?e(...r):e()}catch(e){bn(e,t,n)}}function H(e,t,n,r){if(R(e)){let i=yn(e,t,n,r);return i&&Gt(i)&&i.catch(e=>{bn(e,t,n)}),i}if(L(e)){let i=[];for(let a=0;a>>1,i=U[r],a=Fn(i);a=Fn(n)?U.push(e):U.splice(kn(t),0,e),e.flags|=1,jn()}}function jn(){Dn||=En.then(In)}function Mn(e){L(e)?Cn.push(...e):wn&&e.id===-1?wn.splice(Tn+1,0,e):e.flags&1||(Cn.push(e),e.flags|=1),jn()}function Nn(e,t,n=Sn+1){for(;nFn(e)-Fn(t));if(Cn.length=0,wn){wn.push(...e);return}for(wn=e,Tn=0;Tne.id==null?e.flags&2?-1:1/0:e.id;function In(e){try{for(Sn=0;SnHn;function Hn(e,t=W,n){if(!t||e._n)return e;let r=(...n)=>{r._d&&ja(-1);let i=Rn(t),a;try{a=e(...n)}finally{Rn(i),r._d&&ja(1)}return a};return r._n=!0,r._c=!0,r._d=!0,r}function Un(e,t){if(W===null)return e;let n=ho(W),r=e.dirs||=[];for(let e=0;ee.__isTeleport,qn=e=>e&&(e.disabled||e.disabled===``),Jn=e=>e&&(e.defer||e.defer===``),Yn=e=>typeof SVGElement<`u`&&e instanceof SVGElement,Xn=e=>typeof MathMLElement==`function`&&e instanceof MathMLElement,Zn=(e,t)=>{let n=e&&e.to;return z(n)?t?t(n):null:n},Qn={name:`Teleport`,__isTeleport:!0,process(e,t,n,r,i,a,o,s,c,l){let{mc:u,pc:d,pbc:f,o:{insert:p,querySelector:m,createText:h,createComment:g}}=l,_=qn(t.props),{shapeFlag:v,children:y,dynamicChildren:b}=t;if(e==null){let e=t.el=h(``),l=t.anchor=h(``);p(e,n,r),p(l,n,r);let d=(e,t)=>{v&16&&u(y,e,t,i,a,o,s,c)},f=()=>{let e=t.target=Zn(t.props,m),n=rr(e,t,h,p);e&&(o!==`svg`&&Yn(e)?o=`svg`:o!==`mathml`&&Xn(e)&&(o=`mathml`),i&&i.isCE&&(i.ce._teleportTargets||(i.ce._teleportTargets=new Set)).add(e),_||(d(e,n),nr(t,!1)))};_&&(d(n,l),nr(t,!0)),Jn(t.props)?(t.el.__isMounted=!1,q(()=>{f(),delete t.el.__isMounted},a)):f()}else{if(Jn(t.props)&&e.el.__isMounted===!1){q(()=>{Qn.process(e,t,n,r,i,a,o,s,c,l)},a);return}t.el=e.el,t.targetStart=e.targetStart;let u=t.anchor=e.anchor,p=t.target=e.target,h=t.targetAnchor=e.targetAnchor,g=qn(e.props),v=g?n:p,y=g?u:h;if(o===`svg`||Yn(p)?o=`svg`:(o===`mathml`||Xn(p))&&(o=`mathml`),b?(f(e.dynamicChildren,b,v,i,a,o,s),na(e,t,!0)):c||d(e,t,v,y,i,a,o,s,!1),_)g?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):$n(t,n,u,l,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){let e=t.target=Zn(t.props,m);e&&$n(t,e,null,l,0)}else g&&$n(t,p,h,l,1);nr(t,_)}},remove(e,t,n,{um:r,o:{remove:i}},a){let{shapeFlag:o,children:s,anchor:c,targetStart:l,targetAnchor:u,target:d,props:f}=e;if(d&&(i(l),i(u)),a&&i(c),o&16){let e=a||!qn(f);for(let i=0;i{e.isMounted=!0}),Ur(()=>{e.isUnmounting=!0}),e}var G=[Function,Array],sr={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:G,onEnter:G,onAfterEnter:G,onEnterCancelled:G,onBeforeLeave:G,onLeave:G,onAfterLeave:G,onLeaveCancelled:G,onBeforeAppear:G,onAppear:G,onAfterAppear:G,onAppearCancelled:G},cr=e=>{let t=e.subTree;return t.component?cr(t.component):t},lr={name:`BaseTransition`,props:sr,setup(e,{slots:t}){let n=$a(),r=or();return()=>{let i=t.default&&_r(t.default(),!0);if(!i||!i.length)return;let a=ur(i),o=j(e),{mode:s}=o;if(r.isLeaving)return mr(a);let c=hr(a);if(!c)return mr(a);let l=pr(c,o,r,n,e=>l=e);c.type!==Y&&gr(c,l);let u=n.subTree&&hr(n.subTree);if(u&&u.type!==Y&&!Ia(u,c)&&cr(n).type!==Y){let e=pr(u,o,r,n);if(gr(u,e),s===`out-in`&&c.type!==Y)return r.isLeaving=!0,e.afterLeave=()=>{r.isLeaving=!1,n.job.flags&8||n.update(),delete e.afterLeave,u=void 0},mr(a);s===`in-out`&&c.type!==Y?e.delayLeave=(e,t,n)=>{let i=fr(r,u);i[String(u.key)]=u,e[ir]=()=>{t(),e[ir]=void 0,delete l.delayedLeave,u=void 0},l.delayedLeave=()=>{n(),delete l.delayedLeave,u=void 0}}:u=void 0}else u&&=void 0;return a}}};function ur(e){let t=e[0];if(e.length>1){for(let n of e)if(n.type!==Y){t=n;break}}return t}var dr=lr;function fr(e,t){let{leavingVNodes:n}=e,r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function pr(e,t,n,r,i){let{appear:a,mode:o,persisted:s=!1,onBeforeEnter:c,onEnter:l,onAfterEnter:u,onEnterCancelled:d,onBeforeLeave:f,onLeave:p,onAfterLeave:m,onLeaveCancelled:h,onBeforeAppear:g,onAppear:_,onAfterAppear:v,onAppearCancelled:y}=t,b=String(e.key),x=fr(n,e),S=(e,t)=>{e&&H(e,r,9,t)},C=(e,t)=>{let n=t[1];S(e,t),L(e)?e.every(e=>e.length<=1)&&n():e.length<=1&&n()},w={mode:o,persisted:s,beforeEnter(t){let r=c;if(!n.isMounted)if(a)r=g||c;else return;t[ir]&&t[ir](!0);let i=x[b];i&&Ia(e,i)&&i.el[ir]&&i.el[ir](),S(r,[t])},enter(e){let t=l,r=u,i=d;if(!n.isMounted)if(a)t=_||l,r=v||u,i=y||d;else return;let o=!1,s=e[ar]=t=>{o||(o=!0,S(t?i:r,[e]),w.delayedLeave&&w.delayedLeave(),e[ar]=void 0)};t?C(t,[e,s]):s()},leave(t,r){let i=String(e.key);if(t[ar]&&t[ar](!0),n.isUnmounting)return r();S(f,[t]);let a=!1,o=t[ir]=n=>{a||(a=!0,r(),S(n?h:m,[t]),t[ir]=void 0,x[i]===e&&delete x[i])};x[i]=e,p?C(p,[t,o]):o()},clone(e){let a=pr(e,t,n,r,i);return i&&i(a),a}};return w}function mr(e){if(Or(e))return e=Ha(e),e.children=null,e}function hr(e){if(!Or(e))return Kn(e.type)&&e.children?ur(e.children):e;if(e.component)return e.component.subTree;let{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&R(n.default))return n.default()}}function gr(e,t){e.shapeFlag&6&&e.component?(e.transition=t,gr(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function _r(e,t=!1,n){let r=[],i=0;for(let a=0;a1)for(let e=0;exr(e,t&&(L(t)?t[a]:t),n,r,i));return}if(Tr(r)&&!i){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&xr(e,t,n,r.component.subTree);return}let a=r.shapeFlag&4?ho(r.component):r.el,o=i?null:a,{i:s,r:c}=e,l=t&&t.r,u=s.refs===P?s.refs={}:s.refs,d=s.setupState,f=j(d),p=d===P?It:e=>I(f,e),m=e=>!0;if(l!=null&&l!==c){if(Sr(t),z(l))u[l]=null,p(l)&&(d[l]=null);else if(N(l)){m(l)&&(l.value=null);let e=t;e.k&&(u[e.k]=null)}}if(R(c))yn(c,s,12,[o,u]);else{let t=z(c),r=N(c);if(t||r){let s=()=>{if(e.f){let n=t?p(c)?d[c]:u[c]:m(c)||!e.k?c.value:u[e.k];if(i)L(n)&&zt(n,a);else if(L(n))n.includes(a)||n.push(a);else if(t)u[c]=[a],p(c)&&(d[c]=u[c]);else{let t=[a];m(c)&&(c.value=t),e.k&&(u[e.k]=t)}}else t?(u[c]=o,p(c)&&(d[c]=o)):r&&(m(c)&&(c.value=o),e.k&&(u[e.k]=o))};if(o){let t=()=>{s(),br.delete(e)};t.id=-1,br.set(e,t),q(t,n)}else Sr(e),s()}}}function Sr(e){let t=br.get(e);t&&(t.flags|=8,br.delete(e))}var Cr=e=>e.nodeType===8;sn().requestIdleCallback,sn().cancelIdleCallback;function wr(e,t){if(Cr(e)&&e.data===`[`){let n=1,r=e.nextSibling;for(;r;){if(r.nodeType===1){if(t(r)===!1)break}else if(Cr(r))if(r.data===`]`){if(--n===0)break}else r.data===`[`&&n++;r=r.nextSibling}}else t(e)}var Tr=e=>!!e.type.__asyncLoader;function Er(e){R(e)&&(e={loader:e});let{loader:t,loadingComponent:n,errorComponent:r,delay:i=200,hydrate:a,timeout:o,suspensible:s=!0,onError:c}=e,l=null,u,d=0,f=()=>(d++,l=null,p()),p=()=>{let e;return l||(e=l=t().catch(e=>{if(e=e instanceof Error?e:Error(String(e)),c)return new Promise((t,n)=>{c(e,()=>t(f()),()=>n(e),d+1)});throw e}).then(t=>e!==l&&l?l:(t&&(t.__esModule||t[Symbol.toStringTag]===`Module`)&&(t=t.default),u=t,t)))};return vr({name:`AsyncComponentWrapper`,__asyncLoader:p,__asyncHydrate(e,t,n){let r=!1;(t.bu||=[]).push(()=>r=!0);let i=()=>{r||n()},o=a?()=>{let n=a(i,t=>wr(e,t));n&&(t.bum||=[]).push(n)}:i;u?o():p().then(()=>!t.isUnmounted&&o())},get __asyncResolved(){return u},setup(){let e=$;if(yr(e),u)return()=>Dr(u,e);let t=t=>{l=null,bn(t,e,13,!r)};if(s&&e.suspense||ao)return p().then(t=>()=>Dr(t,e)).catch(e=>(t(e),()=>r?Z(r,{error:e}):null));let a=ht(!1),c=ht(),d=ht(!!i);return i&&setTimeout(()=>{d.value=!1},i),o!=null&&setTimeout(()=>{if(!a.value&&!c.value){let e=Error(`Async component timed out after ${o}ms.`);t(e),c.value=e}},o),p().then(()=>{a.value=!0,e.parent&&Or(e.parent.vnode)&&e.parent.update()}).catch(e=>{t(e),c.value=e}),()=>{if(a.value&&u)return Dr(u,e);if(c.value&&r)return Z(r,{error:c.value});if(n&&!d.value)return Z(n)}}})}function Dr(e,t){let{ref:n,props:r,children:i,ce:a}=t.vnode,o=Z(e,r,i);return o.ref=n,o.ce=a,delete t.vnode.ce,o}var Or=e=>e.type.__isKeepAlive,kr={name:`KeepAlive`,__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){let n=$a(),r=n.ctx;if(!r.renderer)return()=>{let e=t.default&&t.default();return e&&e.length===1?e[0]:e};let i=new Map,a=new Set,o=null,s=n.suspense,{renderer:{p:c,m:l,um:u,o:{createElement:d}}}=r,f=d(`div`);r.activate=(e,t,n,r,i)=>{let a=e.component;l(e,t,n,0,s),c(a.vnode,e,t,n,a,s,r,e.slotScopeIds,i),q(()=>{a.isDeactivated=!1,a.a&&nn(a.a);let t=e.props&&e.props.onVnodeMounted;t&&Q(t,a.parent,e)},s)},r.deactivate=e=>{let t=e.component;aa(t.m),aa(t.a),l(e,f,null,1,s),q(()=>{t.da&&nn(t.da);let n=e.props&&e.props.onVnodeUnmounted;n&&Q(n,t.parent,e),t.isDeactivated=!0},s)};function p(e){Fr(e),u(e,n,s,!0)}function m(e){i.forEach((t,n)=>{let r=go(t.type);r&&!e(r)&&h(n)})}function h(e){let t=i.get(e);t&&(!o||!Ia(t,o))?p(t):o&&Fr(o),i.delete(e),a.delete(e)}ca(()=>[e.include,e.exclude],([e,t])=>{e&&m(t=>Ar(e,t)),t&&m(e=>!Ar(t,e))},{flush:`post`,deep:!0});let g=null,_=()=>{g!=null&&(Ca(n.subTree.type)?q(()=>{i.set(g,Ir(n.subTree))},n.subTree.suspense):i.set(g,Ir(n.subTree)))};return Br(_),Hr(_),Ur(()=>{i.forEach(e=>{let{subTree:t,suspense:r}=n,i=Ir(t);if(e.type===i.type&&e.key===i.key){Fr(i);let e=i.component.da;e&&q(e,r);return}p(e)})}),()=>{if(g=null,!t.default)return o=null;let n=t.default(),r=n[0];if(n.length>1)return o=null,n;if(!Fa(r)||!(r.shapeFlag&4)&&!(r.shapeFlag&128))return o=null,r;let s=Ir(r);if(s.type===Y)return o=null,s;let c=s.type,l=go(Tr(s)?s.type.__asyncResolved||{}:c),{include:u,exclude:d,max:f}=e;if(u&&(!l||!Ar(u,l))||d&&l&&Ar(d,l))return s.shapeFlag&=-257,o=s,r;let p=s.key==null?c:s.key,m=i.get(p);return s.el&&(s=Ha(s),r.shapeFlag&128&&(r.ssContent=s)),g=p,m?(s.el=m.el,s.component=m.component,s.transition&&gr(s,s.transition),s.shapeFlag|=512,a.delete(p),a.add(p)):(a.add(p),f&&a.size>parseInt(f,10)&&h(a.values().next().value)),s.shapeFlag|=256,o=s,Ca(r.type)?r:s}}};function Ar(e,t){return L(e)?e.some(e=>Ar(e,t)):z(e)?e.split(`,`).includes(t):Ut(e)?(e.lastIndex=0,e.test(t)):!1}function jr(e,t){Nr(e,`a`,t)}function Mr(e,t){Nr(e,`da`,t)}function Nr(e,t,n=$){let r=e.__wdc||=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()};if(Lr(t,r,n),n){let e=n.parent;for(;e&&e.parent;)Or(e.parent.vnode)&&Pr(r,t,n,e),e=e.parent}}function Pr(e,t,n,r){let i=Lr(t,e,r,!0);Wr(()=>{zt(r[t],i)},n)}function Fr(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function Ir(e){return e.shapeFlag&128?e.ssContent:e}function Lr(e,t,n=$,r=!1){if(n){let i=n[e]||(n[e]=[]),a=t.__weh||=(...r)=>{me();let i=no(n),a=H(t,n,e,r);return i(),he(),a};return r?i.unshift(a):i.push(a),a}}var Rr=e=>(t,n=$)=>{(!ao||e===`sp`)&&Lr(e,(...e)=>t(...e),n)},zr=Rr(`bm`),Br=Rr(`m`),Vr=Rr(`bu`),Hr=Rr(`u`),Ur=Rr(`bum`),Wr=Rr(`um`),Gr=Rr(`sp`),Kr=Rr(`rtg`),qr=Rr(`rtc`);function Jr(e,t=$){Lr(`ec`,e,t)}var Yr=`components`,Xr=`directives`;function Zr(e,t){return ti(Yr,e,!0,t)||e}var Qr=Symbol.for(`v-ndc`);function $r(e){return z(e)?ti(Yr,e,!1)||e:e||Qr}function ei(e){return ti(Xr,e)}function ti(e,t,n=!0,r=!1){let i=W||$;if(i){let n=i.type;if(e===Yr){let e=go(n,!1);if(e&&(e===t||e===V(t)||e===en(V(t))))return n}let a=ni(i[e]||n[e],t)||ni(i.appContext[e],t);return!a&&r?n:a}}function ni(e,t){return e&&(e[t]||e[V(t)]||e[en(V(t))])}function ri(e,t,n,r){let i,a=n&&n[r],o=L(e);if(o||z(e)){let n=o&&ut(e),r=!1,s=!1;n&&(r=!A(e),s=dt(e),e=Oe(e)),i=Array(e.length);for(let n=0,o=e.length;nt(e,n,void 0,a&&a[n]));else{let n=Object.keys(e);i=Array(n.length);for(let r=0,o=n.length;r0;return t!=="default"&&(n.name=t),Oa(),Pa(J,null,[Z(`slot`,n,r&&r())],e?-2:64)}let a=e[t];a&&a._c&&(a._d=!1),Oa();let o=a&&ai(a(n)),s=n.key||o&&o.key,c=Pa(J,{key:(s&&!Wt(s)?s:`_${t}`)+(!o&&r?`_fb`:``)},o||(r?r():[]),o&&e._===1?64:-2);return!i&&c.scopeId&&(c.slotScopeIds=[c.scopeId+`-s`]),a&&a._c&&(a._d=!0),c}function ai(e){return e.some(e=>Fa(e)?!(e.type===Y||e.type===J&&!ai(e.children)):!0)?e:null}function oi(e,t){let n={};for(let r in e)n[t&&/[A-Z]/.test(r)?`on:${r}`:tn(r)]=e[r];return n}var si=e=>e?io(e)?ho(e):si(e.parent):null,ci=F(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>si(e.parent),$root:e=>si(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>_i(e),$forceUpdate:e=>e.f||=()=>{An(e.update)},$nextTick:e=>e.n||=On.bind(e.proxy),$watch:e=>ua.bind(e)}),li=(e,t)=>e!==P&&!e.__isScriptSetup&&I(e,t),ui={get({_:e},t){if(t===`__v_skip`)return!0;let{ctx:n,setupState:r,data:i,props:a,accessCache:o,type:s,appContext:c}=e,l;if(t[0]!==`$`){let s=o[t];if(s!==void 0)switch(s){case 1:return r[t];case 2:return i[t];case 4:return n[t];case 3:return a[t]}else if(li(r,t))return o[t]=1,r[t];else if(i!==P&&I(i,t))return o[t]=2,i[t];else if((l=e.propsOptions[0])&&I(l,t))return o[t]=3,a[t];else if(n!==P&&I(n,t))return o[t]=4,n[t];else fi&&(o[t]=0)}let u=ci[t],d,f;if(u)return t===`$attrs`&&k(e.attrs,`get`,``),u(e);if((d=s.__cssModules)&&(d=d[t]))return d;if(n!==P&&I(n,t))return o[t]=4,n[t];if(f=c.config.globalProperties,I(f,t))return f[t]},set({_:e},t,n){let{data:r,setupState:i,ctx:a}=e;return li(i,t)?(i[t]=n,!0):r!==P&&I(r,t)?(r[t]=n,!0):I(e.props,t)||t[0]===`$`&&t.slice(1)in e?!1:(a[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:i,propsOptions:a,type:o}},s){let c,l;return!!(n[s]||e!==P&&s[0]!==`$`&&I(e,s)||li(t,s)||(c=a[0])&&I(c,s)||I(r,s)||I(ci,s)||I(i.config.globalProperties,s)||(l=o.__cssModules)&&l[s])},defineProperty(e,t,n){return n.get==null?I(n,`value`)&&this.set(e,t,n.value,null):e._.accessCache[t]=0,Reflect.defineProperty(e,t,n)}};function di(e){return L(e)?e.reduce((e,t)=>(e[t]=null,e),{}):e}var fi=!0;function pi(e){let t=_i(e),n=e.proxy,r=e.ctx;fi=!1,t.beforeCreate&&hi(t.beforeCreate,e,`bc`);let{data:i,computed:a,methods:o,watch:s,provide:c,inject:l,created:u,beforeMount:d,mounted:f,beforeUpdate:p,updated:m,activated:h,deactivated:g,beforeDestroy:_,beforeUnmount:v,destroyed:y,unmounted:b,render:x,renderTracked:S,renderTriggered:C,errorCaptured:w,serverPrefetch:T,expose:E,inheritAttrs:ee,components:te,directives:ne,filters:re}=t;if(l&&mi(l,r,null),o)for(let e in o){let t=o[e];R(t)&&(r[e]=t.bind(n))}if(i){let t=i.call(n,n);B(t)&&(e.data=ot(t))}if(fi=!0,a)for(let e in a){let t=a[e],i=vo({get:R(t)?t.bind(n,n):R(t.get)?t.get.bind(n,n):Ft,set:!R(t)&&R(t.set)?t.set.bind(n):Ft});Object.defineProperty(r,e,{enumerable:!0,configurable:!0,get:()=>i.value,set:e=>i.value=e})}if(s)for(let e in s)gi(s[e],r,n,e);if(c){let e=R(c)?c.call(n):c;Reflect.ownKeys(e).forEach(t=>{Ai(t,e[t])})}u&&hi(u,e,`c`);function D(e,t){L(t)?t.forEach(t=>e(t.bind(n))):t&&e(t.bind(n))}if(D(zr,d),D(Br,f),D(Vr,p),D(Hr,m),D(jr,h),D(Mr,g),D(Jr,w),D(qr,S),D(Kr,C),D(Ur,v),D(Wr,b),D(Gr,T),L(E))if(E.length){let t=e.exposed||={};E.forEach(e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t,enumerable:!0})})}else e.exposed||={};x&&e.render===Ft&&(e.render=x),ee!=null&&(e.inheritAttrs=ee),te&&(e.components=te),ne&&(e.directives=ne),T&&yr(e)}function mi(e,t,n=Ft){L(e)&&(e=Si(e));for(let n in e){let r=e[n],i;i=B(r)?`default`in r?ji(r.from||n,r.default,!0):ji(r.from||n):ji(r),N(i)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>i.value,set:e=>i.value=e}):t[n]=i}}function hi(e,t,n){H(L(e)?e.map(e=>e.bind(t.proxy)):e.bind(t.proxy),t,n)}function gi(e,t,n,r){let i=r.includes(`.`)?da(n,r):()=>n[r];if(z(e)){let n=t[e];R(n)&&ca(i,n)}else if(R(e))ca(i,e.bind(n));else if(B(e))if(L(e))e.forEach(e=>gi(e,t,n,r));else{let r=R(e.handler)?e.handler.bind(n):t[e.handler];R(r)&&ca(i,r,e)}}function _i(e){let t=e.type,{mixins:n,extends:r}=t,{mixins:i,optionsCache:a,config:{optionMergeStrategies:o}}=e.appContext,s=a.get(t),c;return s?c=s:!i.length&&!n&&!r?c=t:(c={},i.length&&i.forEach(e=>vi(c,e,o,!0)),vi(c,t,o)),B(t)&&a.set(t,c),c}function vi(e,t,n,r=!1){let{mixins:i,extends:a}=t;a&&vi(e,a,n,!0),i&&i.forEach(t=>vi(e,t,n,!0));for(let i in t)if(!(r&&i===`expose`)){let r=yi[i]||n&&n[i];e[i]=r?r(e[i],t[i]):t[i]}return e}var yi={data:bi,props:wi,emits:wi,methods:Ci,computed:Ci,beforeCreate:K,created:K,beforeMount:K,mounted:K,beforeUpdate:K,updated:K,beforeDestroy:K,beforeUnmount:K,destroyed:K,unmounted:K,activated:K,deactivated:K,errorCaptured:K,serverPrefetch:K,components:Ci,directives:Ci,watch:Ti,provide:bi,inject:xi};function bi(e,t){return t?e?function(){return F(R(e)?e.call(this,this):e,R(t)?t.call(this,this):t)}:t:e}function xi(e,t){return Ci(Si(e),Si(t))}function Si(e){if(L(e)){let t={};for(let n=0;n1)return n&&R(t)?t.call(r&&r.proxy):t}}function Mi(){return!!($a()||ki)}var Ni={},Pi=()=>Object.create(Ni),Fi=e=>Object.getPrototypeOf(e)===Ni;function Ii(e,t,n,r=!1){let i={},a=Pi();e.propsDefaults=Object.create(null),Ri(e,t,i,a);for(let t in e.propsOptions[0])t in i||(i[t]=void 0);n?e.props=r?i:st(i):e.type.props?e.props=i:e.props=a,e.attrs=a}function Li(e,t,n,r){let{props:i,attrs:a,vnode:{patchFlag:o}}=e,s=j(i),[c]=e.propsOptions,l=!1;if((r||o>0)&&!(o&16)){if(o&8){let n=e.vnode.dynamicProps;for(let r=0;r{c=!0;let[n,r]=Vi(e,t,!0);F(o,n),r&&s.push(...r)};!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends),e.mixins&&e.mixins.forEach(r)}if(!a&&!c)return B(e)&&r.set(e,Pt),Pt;if(L(a))for(let e=0;ee===`_`||e===`_ctx`||e===`$stable`,Wi=e=>L(e)?e.map(Ka):[Ka(e)],Gi=(e,t,n)=>{if(t._n)return t;let r=Hn((...e)=>Wi(t(...e)),n);return r._c=!1,r},Ki=(e,t,n)=>{let r=e._ctx;for(let n in e){if(Ui(n))continue;let i=e[n];if(R(i))t[n]=Gi(n,i,r);else if(i!=null){let e=Wi(i);t[n]=()=>e}}},qi=(e,t)=>{let n=Wi(t);e.slots.default=()=>n},Ji=(e,t,n)=>{for(let r in t)(n||!Ui(r))&&(e[r]=t[r])},Yi=(e,t,n)=>{let r=e.slots=Pi();if(e.vnode.shapeFlag&32){let e=t._;e?(Ji(r,t,n),n&&rn(r,`_`,e,!0)):Ki(t,r)}else t&&qi(e,t)},Xi=(e,t,n)=>{let{vnode:r,slots:i}=e,a=!0,o=P;if(r.shapeFlag&32){let e=t._;e?n&&e===1?a=!1:Ji(i,t,n):(a=!t.$stable,Ki(t,i)),o=t}else t&&(qi(e,t),o={default:1});if(a)for(let e in i)!Ui(e)&&o[e]==null&&delete i[e]},q=wa;function Zi(e){return Qi(e)}function Qi(e,t){let n=sn();n.__VUE__=!0;let{insert:r,remove:i,patchProp:a,createElement:o,createText:s,createComment:c,setText:l,setElementText:u,parentNode:d,nextSibling:f,setScopeId:p=Ft,insertStaticContent:m}=e,h=(e,t,n,r=null,i=null,a=null,o=void 0,s=null,c=!!t.dynamicChildren)=>{if(e===t)return;e&&!Ia(e,t)&&(r=_e(e),de(e,i,a,!0),e=null),t.patchFlag===-2&&(c=!1,t.dynamicChildren=null);let{type:l,ref:u,shapeFlag:d}=t;switch(l){case Ta:g(e,t,n,r);break;case Y:_(e,t,n,r);break;case Ea:e??v(t,n,r,o);break;case J:ne(e,t,n,r,i,a,o,s,c);break;default:d&1?x(e,t,n,r,i,a,o,s,c):d&6?re(e,t,n,r,i,a,o,s,c):(d&64||d&128)&&l.process(e,t,n,r,i,a,o,s,c,be)}u!=null&&i?xr(u,e&&e.ref,a,t||e,!t):u==null&&e&&e.ref!=null&&xr(e.ref,null,a,e,!0)},g=(e,t,n,i)=>{if(e==null)r(t.el=s(t.children),n,i);else{let n=t.el=e.el;t.children!==e.children&&l(n,t.children)}},_=(e,t,n,i)=>{e==null?r(t.el=c(t.children||``),n,i):t.el=e.el},v=(e,t,n,r)=>{[e.el,e.anchor]=m(e.children,t,n,r,e.el,e.anchor)},y=({el:e,anchor:t},n,i)=>{let a;for(;e&&e!==t;)a=f(e),r(e,n,i),e=a;r(t,n,i)},b=({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=f(e),i(e),e=n;i(t)},x=(e,t,n,r,i,a,o,s,c)=>{t.type===`svg`?o=`svg`:t.type===`math`&&(o=`mathml`),e==null?S(t,n,r,i,a,o,s,c):T(e,t,i,a,o,s,c)},S=(e,t,n,i,s,c,l,d)=>{let f,p,{props:m,shapeFlag:h,transition:g,dirs:_}=e;if(f=e.el=o(e.type,c,m&&m.is,m),h&8?u(f,e.children):h&16&&w(e.children,f,null,i,s,$i(e,c),l,d),_&&Wn(e,null,i,`created`),C(f,e,e.scopeId,l,i),m){for(let e in m)e!==`value`&&!Yt(e)&&a(f,e,null,m[e],c,i);`value`in m&&a(f,`value`,null,m.value,c),(p=m.onVnodeBeforeMount)&&Q(p,i,e)}_&&Wn(e,null,i,`beforeMount`);let v=ta(s,g);v&&g.beforeEnter(f),r(f,t,n),((p=m&&m.onVnodeMounted)||v||_)&&q(()=>{p&&Q(p,i,e),v&&g.enter(f),_&&Wn(e,null,i,`mounted`)},s)},C=(e,t,n,r,i)=>{if(n&&p(e,n),r)for(let t=0;t{for(let l=c;l{let c=t.el=e.el,{patchFlag:l,dynamicChildren:d,dirs:f}=t;l|=e.patchFlag&16;let p=e.props||P,m=t.props||P,h;if(n&&ea(n,!1),(h=m.onVnodeBeforeUpdate)&&Q(h,n,t,e),f&&Wn(t,e,n,`beforeUpdate`),n&&ea(n,!0),(p.innerHTML&&m.innerHTML==null||p.textContent&&m.textContent==null)&&u(c,``),d?E(e.dynamicChildren,d,c,n,r,$i(t,i),o):s||se(e,t,c,null,n,r,$i(t,i),o,!1),l>0){if(l&16)ee(c,p,m,n,i);else if(l&2&&p.class!==m.class&&a(c,`class`,null,m.class,i),l&4&&a(c,`style`,p.style,m.style,i),l&8){let e=t.dynamicProps;for(let t=0;t{h&&Q(h,n,t,e),f&&Wn(t,e,n,`updated`)},r)},E=(e,t,n,r,i,a,o)=>{for(let s=0;s{if(t!==n){if(t!==P)for(let o in t)!Yt(o)&&!(o in n)&&a(e,o,t[o],null,i,r);for(let o in n){if(Yt(o))continue;let s=n[o],c=t[o];s!==c&&o!==`value`&&a(e,o,c,s,i,r)}`value`in n&&a(e,`value`,t.value,n.value,i)}},ne=(e,t,n,i,a,o,c,l,u)=>{let d=t.el=e?e.el:s(``),f=t.anchor=e?e.anchor:s(``),{patchFlag:p,dynamicChildren:m,slotScopeIds:h}=t;h&&(l=l?l.concat(h):h),e==null?(r(d,n,i),r(f,n,i),w(t.children||[],n,f,a,o,c,l,u)):p>0&&p&64&&m&&e.dynamicChildren?(E(e.dynamicChildren,m,n,a,o,c,l),(t.key!=null||a&&t===a.subTree)&&na(e,t,!0)):se(e,t,n,f,a,o,c,l,u)},re=(e,t,n,r,i,a,o,s,c)=>{t.slotScopeIds=s,e==null?t.shapeFlag&512?i.ctx.activate(t,n,r,o,c):D(t,n,r,i,a,o,c):ie(e,t,c)},D=(e,t,n,r,i,a,o)=>{let s=e.component=Qa(e,r,i);if(Or(e)&&(s.ctx.renderer=be),oo(s,!1,o),s.asyncDep){if(i&&i.registerDep(s,ae,o),!e.el){let r=s.subTree=Z(Y);_(null,r,t,n),e.placeholder=r.el}}else ae(s,e,t,n,i,a,o)},ie=(e,t,n)=>{let r=t.component=e.component;if(ba(e,t,n))if(r.asyncDep&&!r.asyncResolved){oe(r,t,n);return}else r.next=t,r.update();else t.el=e.el,r.vnode=t},ae=(e,t,n,r,i,a,o)=>{let s=()=>{if(e.isMounted){let{next:t,bu:n,u:r,parent:c,vnode:l}=e;{let n=ia(e);if(n){t&&(t.el=l.el,oe(e,t,o)),n.asyncDep.then(()=>{e.isUnmounted||s()});return}}let u=t,f;ea(e,!1),t?(t.el=l.el,oe(e,t,o)):t=l,n&&nn(n),(f=t.props&&t.props.onVnodeBeforeUpdate)&&Q(f,c,t,l),ea(e,!0);let p=_a(e),m=e.subTree;e.subTree=p,h(m,p,d(m.el),_e(m),e,i,a),t.el=p.el,u===null&&Sa(e,p.el),r&&q(r,i),(f=t.props&&t.props.onVnodeUpdated)&&q(()=>Q(f,c,t,l),i)}else{let o,{el:s,props:c}=t,{bm:l,m:u,parent:d,root:f,type:p}=e,m=Tr(t);if(ea(e,!1),l&&nn(l),!m&&(o=c&&c.onVnodeBeforeMount)&&Q(o,d,t),ea(e,!0),s&&Se){let t=()=>{e.subTree=_a(e),Se(s,e.subTree,e,i,null)};m&&p.__asyncHydrate?p.__asyncHydrate(s,e,t):t()}else{f.ce&&f.ce._def.shadowRoot!==!1&&f.ce._injectChildStyle(p);let o=e.subTree=_a(e);h(null,o,n,r,e,i,a),t.el=o.el}if(u&&q(u,i),!m&&(o=c&&c.onVnodeMounted)){let e=t;q(()=>Q(o,d,e),i)}(t.shapeFlag&256||d&&Tr(d.vnode)&&d.vnode.shapeFlag&256)&&e.a&&q(e.a,i),e.isMounted=!0,t=n=r=null}};e.scope.on();let c=e.effect=new te(s);e.scope.off();let l=e.update=c.run.bind(c),u=e.job=c.runIfDirty.bind(c);u.i=e,u.id=e.uid,c.scheduler=()=>An(u),ea(e,!0),l()},oe=(e,t,n)=>{t.component=e;let r=e.vnode.props;e.vnode=t,e.next=null,Li(e,t.props,r,n),Xi(e,t.children,n),me(),Nn(e),he()},se=(e,t,n,r,i,a,o,s,c=!1)=>{let l=e&&e.children,d=e?e.shapeFlag:0,f=t.children,{patchFlag:p,shapeFlag:m}=t;if(p>0){if(p&128){le(l,f,n,r,i,a,o,s,c);return}else if(p&256){ce(l,f,n,r,i,a,o,s,c);return}}m&8?(d&16&&ge(l,i,a),f!==l&&u(n,f)):d&16?m&16?le(l,f,n,r,i,a,o,s,c):ge(l,i,a,!0):(d&8&&u(n,``),m&16&&w(f,n,r,i,a,o,s,c))},ce=(e,t,n,r,i,a,o,s,c)=>{e||=Pt,t||=Pt;let l=e.length,u=t.length,d=Math.min(l,u),f;for(f=0;fu?ge(e,i,a,!0,!1,d):w(t,n,r,i,a,o,s,c,d)},le=(e,t,n,r,i,a,o,s,c)=>{let l=0,u=t.length,d=e.length-1,f=u-1;for(;l<=d&&l<=f;){let r=e[l],u=t[l]=c?qa(t[l]):Ka(t[l]);if(Ia(r,u))h(r,u,n,null,i,a,o,s,c);else break;l++}for(;l<=d&&l<=f;){let r=e[d],l=t[f]=c?qa(t[f]):Ka(t[f]);if(Ia(r,l))h(r,l,n,null,i,a,o,s,c);else break;d--,f--}if(l>d){if(l<=f){let e=f+1,d=ef)for(;l<=d;)de(e[l],i,a,!0),l++;else{let p=l,m=l,g=new Map;for(l=m;l<=f;l++){let e=t[l]=c?qa(t[l]):Ka(t[l]);e.key!=null&&g.set(e.key,l)}let _,v=0,y=f-m+1,b=!1,x=0,S=Array(y);for(l=0;l=y){de(r,i,a,!0);continue}let u;if(r.key!=null)u=g.get(r.key);else for(_=m;_<=f;_++)if(S[_-m]===0&&Ia(r,t[_])){u=_;break}u===void 0?de(r,i,a,!0):(S[u-m]=l+1,u>=x?x=u:b=!0,h(r,t[u],n,null,i,a,o,s,c),v++)}let C=b?ra(S):Pt;for(_=C.length-1,l=y-1;l>=0;l--){let e=m+l,d=t[e],f=t[e+1],p=e+1{let{el:s,type:c,transition:l,children:u,shapeFlag:d}=e;if(d&6){ue(e.component.subTree,t,n,a);return}if(d&128){e.suspense.move(t,n,a);return}if(d&64){c.move(e,t,n,be);return}if(c===J){r(s,t,n);for(let e=0;el.enter(s),o);else{let{leave:a,delayLeave:o,afterLeave:c}=l,u=()=>{e.ctx.isUnmounted?i(s):r(s,t,n)},d=()=>{s._isLeaving&&s[ir](!0),a(s,()=>{u(),c&&c()})};o?o(s,u,d):d()}else r(s,t,n)},de=(e,t,n,r=!1,i=!1)=>{let{type:a,props:o,ref:s,children:c,dynamicChildren:l,shapeFlag:u,patchFlag:d,dirs:f,cacheIndex:p}=e;if(d===-2&&(i=!1),s!=null&&(me(),xr(s,null,n,e,!0),he()),p!=null&&(t.renderCache[p]=void 0),u&256){t.ctx.deactivate(e);return}let m=u&1&&f,h=!Tr(e),g;if(h&&(g=o&&o.onVnodeBeforeUnmount)&&Q(g,t,e),u&6)pe(e.component,n,r);else{if(u&128){e.suspense.unmount(n,r);return}m&&Wn(e,null,t,`beforeUnmount`),u&64?e.type.remove(e,t,n,be,r):l&&!l.hasOnce&&(a!==J||d>0&&d&64)?ge(l,t,n,!1,!0):(a===J&&d&384||!i&&u&16)&&ge(c,t,n),r&&fe(e)}(h&&(g=o&&o.onVnodeUnmounted)||m)&&q(()=>{g&&Q(g,t,e),m&&Wn(e,null,t,`unmounted`)},n)},fe=e=>{let{type:t,el:n,anchor:r,transition:a}=e;if(t===J){O(n,r);return}if(t===Ea){b(e);return}let o=()=>{i(n),a&&!a.persisted&&a.afterLeave&&a.afterLeave()};if(e.shapeFlag&1&&a&&!a.persisted){let{leave:t,delayLeave:r}=a,i=()=>t(n,o);r?r(e.el,o,i):i()}else o()},O=(e,t)=>{let n;for(;e!==t;)n=f(e),i(e),e=n;i(t)},pe=(e,t,n)=>{let{bum:r,scope:i,job:a,subTree:o,um:s,m:c,a:l}=e;aa(c),aa(l),r&&nn(r),i.stop(),a&&(a.flags|=8,de(o,e,t,n)),s&&q(s,t),q(()=>{e.isUnmounted=!0},t)},ge=(e,t,n,r=!1,i=!1,a=0)=>{for(let o=a;o{if(e.shapeFlag&6)return _e(e.component.subTree);if(e.shapeFlag&128)return e.suspense.next();let t=f(e.anchor||e.el),n=t&&t[Gn];return n?f(n):t},ve=!1,ye=(e,t,n)=>{e==null?t._vnode&&de(t._vnode,null,null,!0):h(t._vnode||null,e,t,null,null,null,n),t._vnode=e,ve||=(ve=!0,Nn(),Pn(),!1)},be={p:h,um:de,m:ue,r:fe,mt:D,mc:w,pc:se,pbc:E,n:_e,o:e},xe,Se;return t&&([xe,Se]=t(be)),{render:ye,hydrate:xe,createApp:Oi(ye,xe)}}function $i({type:e,props:t},n){return n===`svg`&&e===`foreignObject`||n===`mathml`&&e===`annotation-xml`&&t&&t.encoding&&t.encoding.includes(`html`)?void 0:n}function ea({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function ta(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function na(e,t,n=!1){let r=e.children,i=t.children;if(L(r)&&L(i))for(let e=0;e>1,e[n[s]]0&&(t[r]=n[a-1]),n[a]=r)}}for(a=n.length,o=n[a-1];a-- >0;)n[a]=o,o=t[o];return n}function ia(e){let t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:ia(t)}function aa(e){if(e)for(let t=0;tji(oa);function ca(e,t,n){return la(e,t,n)}function la(e,t,n=P){let{immediate:r,deep:i,flush:a,once:o}=n,s=F({},n),c=t&&r||!t&&a!==`post`,l;if(ao){if(a===`sync`){let e=sa();l=e.__watcherHandles||=[]}else if(!c){let e=()=>{};return e.stop=Ft,e.resume=Ft,e.pause=Ft,e}}let u=$;s.call=(e,t,n)=>H(e,u,t,n);let d=!1;a===`post`?s.scheduler=e=>{q(e,u&&u.suspense)}:a!==`sync`&&(d=!0,s.scheduler=(e,t)=>{t?e():An(e)}),s.augmentJob=e=>{t&&(e.flags|=4),d&&(e.flags|=2,u&&(e.id=u.uid,e.i=u))};let f=jt(e,t,s);return ao&&(l?l.push(f):c&&f()),f}function ua(e,t,n){let r=this.proxy,i=z(e)?e.includes(`.`)?da(r,e):()=>r[e]:e.bind(r,r),a;R(t)?a=t:(a=t.handler,n=t);let o=no(this),s=la(i,a.bind(r),n);return o(),s}function da(e,t){let n=t.split(`.`);return()=>{let t=e;for(let e=0;et===`modelValue`||t===`model-value`?e.modelModifiers:e[`${t}Modifiers`]||e[`${V(t)}Modifiers`]||e[`${$t(t)}Modifiers`];function pa(e,t,...n){if(e.isUnmounted)return;let r=e.vnode.props||P,i=n,a=t.startsWith(`update:`),o=a&&fa(r,t.slice(7));o&&(o.trim&&(i=n.map(e=>z(e)?e.trim():e)),o.number&&(i=n.map(an)));let s,c=r[s=tn(t)]||r[s=tn(V(t))];!c&&a&&(c=r[s=tn($t(t))]),c&&H(c,e,6,i);let l=r[s+`Once`];if(l){if(!e.emitted)e.emitted={};else if(e.emitted[s])return;e.emitted[s]=!0,H(l,e,6,i)}}var ma=new WeakMap;function ha(e,t,n=!1){let r=n?ma:t.emitsCache,i=r.get(e);if(i!==void 0)return i;let a=e.emits,o={},s=!1;if(!R(e)){let r=e=>{let n=ha(e,t,!0);n&&(s=!0,F(o,n))};!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends),e.mixins&&e.mixins.forEach(r)}return!a&&!s?(B(e)&&r.set(e,null),null):(L(a)?a.forEach(e=>o[e]=null):F(o,a),B(e)&&r.set(e,o),o)}function ga(e,t){return!e||!Lt(t)?!1:(t=t.slice(2).replace(/Once$/,``),I(e,t[0].toLowerCase()+t.slice(1))||I(e,$t(t))||I(e,t))}function _a(e){let{type:t,vnode:n,proxy:r,withProxy:i,propsOptions:[a],slots:o,attrs:s,emit:c,render:l,renderCache:u,props:d,data:f,setupState:p,ctx:m,inheritAttrs:h}=e,g=Rn(e),_,v;try{if(n.shapeFlag&4){let e=i||r,t=e;_=Ka(l.call(t,e,u,d,p,f,m)),v=s}else{let e=t;_=Ka(e.length>1?e(d,{attrs:s,slots:o,emit:c}):e(d,null)),v=t.props?s:va(s)}}catch(t){Da.length=0,bn(t,e,1),_=Z(Y)}let y=_;if(v&&h!==!1){let e=Object.keys(v),{shapeFlag:t}=y;e.length&&t&7&&(a&&e.some(Rt)&&(v=ya(v,a)),y=Ha(y,v,!1,!0))}return n.dirs&&(y=Ha(y,null,!1,!0),y.dirs=y.dirs?y.dirs.concat(n.dirs):n.dirs),n.transition&&gr(y,n.transition),_=y,Rn(g),_}var va=e=>{let t;for(let n in e)(n===`class`||n===`style`||Lt(n))&&((t||={})[n]=e[n]);return t},ya=(e,t)=>{let n={};for(let r in e)(!Rt(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function ba(e,t,n){let{props:r,children:i,component:a}=e,{props:o,children:s,patchFlag:c}=t,l=a.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?xa(r,o,l):!!o;if(c&8){let e=t.dynamicProps;for(let t=0;te.__isSuspense;function wa(e,t){t&&t.pendingBranch?L(e)?t.effects.push(...e):t.effects.push(e):Mn(e)}var J=Symbol.for(`v-fgt`),Ta=Symbol.for(`v-txt`),Y=Symbol.for(`v-cmt`),Ea=Symbol.for(`v-stc`),Da=[],X=null;function Oa(e=!1){Da.push(X=e?null:[])}function ka(){Da.pop(),X=Da[Da.length-1]||null}var Aa=1;function ja(e,t=!1){Aa+=e,e<0&&X&&t&&(X.hasOnce=!0)}function Ma(e){return e.dynamicChildren=Aa>0?X||Pt:null,ka(),Aa>0&&X&&X.push(e),e}function Na(e,t,n,r,i,a){return Ma(za(e,t,n,r,i,a,!0))}function Pa(e,t,n,r,i){return Ma(Z(e,t,n,r,i,!0))}function Fa(e){return e?e.__v_isVNode===!0:!1}function Ia(e,t){return e.type===t.type&&e.key===t.key}var La=({key:e})=>e??null,Ra=({ref:e,ref_key:t,ref_for:n})=>(typeof e==`number`&&(e=``+e),e==null?null:z(e)||N(e)||R(e)?{i:W,r:e,k:t,f:!!n}:e);function za(e,t=null,n=null,r=0,i=null,a=e===J?0:1,o=!1,s=!1){let c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&La(t),ref:t&&Ra(t),scopeId:Ln,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:a,patchFlag:r,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:W};return s?(Ja(c,n),a&128&&e.normalize(c)):n&&(c.shapeFlag|=z(n)?8:16),Aa>0&&!o&&X&&(c.patchFlag>0||a&6)&&c.patchFlag!==32&&X.push(c),c}var Z=Ba;function Ba(e,t=null,n=null,r=0,i=null,a=!1){if((!e||e===Qr)&&(e=Y),Fa(e)){let r=Ha(e,t,!0);return n&&Ja(r,n),Aa>0&&!a&&X&&(r.shapeFlag&6?X[X.indexOf(e)]=r:X.push(r)),r.patchFlag=-2,r}if(_o(e)&&(e=e.__vccOpts),t){t=Va(t);let{class:e,style:n}=t;e&&!z(e)&&(t.class=pn(e)),B(n)&&(ft(n)&&!L(n)&&(n=F({},n)),t.style=cn(n))}let o=z(e)?1:Ca(e)?128:Kn(e)?64:B(e)?4:R(e)?2:0;return za(e,t,n,r,i,o,a,!0)}function Va(e){return e?ft(e)||Fi(e)?F({},e):e:null}function Ha(e,t,n=!1,r=!1){let{props:i,ref:a,patchFlag:o,children:s,transition:c}=e,l=t?Ya(i||{},t):i,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&La(l),ref:t&&t.ref?n&&a?L(a)?a.concat(Ra(t)):[a,Ra(t)]:Ra(t):a,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:s,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==J?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Ha(e.ssContent),ssFallback:e.ssFallback&&Ha(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&r&&gr(u,c.clone(u)),u}function Ua(e=` `,t=0){return Z(Ta,null,e,t)}function Wa(e,t){let n=Z(Ea,null,e);return n.staticCount=t,n}function Ga(e=``,t=!1){return t?(Oa(),Pa(Y,null,e)):Z(Y,null,e)}function Ka(e){return e==null||typeof e==`boolean`?Z(Y):L(e)?Z(J,null,e.slice()):Fa(e)?qa(e):Z(Ta,null,String(e))}function qa(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Ha(e)}function Ja(e,t){let n=0,{shapeFlag:r}=e;if(t==null)t=null;else if(L(t))n=16;else if(typeof t==`object`)if(r&65){let n=t.default;n&&(n._c&&(n._d=!1),Ja(e,n()),n._c&&(n._d=!0));return}else{n=32;let r=t._;!r&&!Fi(t)?t._ctx=W:r===3&&W&&(W.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else R(t)?(t={default:t,_ctx:W},n=32):(t=String(t),r&64?(n=16,t=[Ua(t)]):n=8);e.children=t,e.shapeFlag|=n}function Ya(...e){let t={};for(let n=0;n$||W,eo,to;{let e=sn(),t=(t,n)=>{let r;return(r=e[t])||(r=e[t]=[]),r.push(n),e=>{r.length>1?r.forEach(t=>t(e)):r[0](e)}};eo=t(`__VUE_INSTANCE_SETTERS__`,e=>$=e),to=t(`__VUE_SSR_SETTERS__`,e=>ao=e)}var no=e=>{let t=$;return eo(e),e.scope.on(),()=>{e.scope.off(),eo(t)}},ro=()=>{$&&$.scope.off(),eo(null)};function io(e){return e.vnode.shapeFlag&4}var ao=!1;function oo(e,t=!1,n=!1){t&&to(t);let{props:r,children:i}=e.vnode,a=io(e);Ii(e,r,a,t),Yi(e,i,n||t);let o=a?so(e,t):void 0;return t&&to(!1),o}function so(e,t){let n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,ui);let{setup:r}=n;if(r){me();let n=e.setupContext=r.length>1?mo(e):null,i=no(e),a=yn(r,e,0,[e.props,n]),o=Gt(a);if(he(),i(),(o||e.sp)&&!Tr(e)&&yr(e),o){if(a.then(ro,ro),t)return a.then(n=>{co(e,n,t)}).catch(t=>{bn(t,e,0)});e.asyncDep=a}else co(e,a,t)}else fo(e,t)}function co(e,t,n){R(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:B(t)&&(e.setupState=xt(t)),fo(e,n)}var lo,uo;function fo(e,t,n){let r=e.type;if(!e.render){if(!t&&lo&&!r.render){let t=r.template||_i(e).template;if(t){let{isCustomElement:n,compilerOptions:i}=e.appContext.config,{delimiters:a,compilerOptions:o}=r;r.render=lo(t,F(F({isCustomElement:n,delimiters:a},i),o))}}e.render=r.render||Ft,uo&&uo(e)}{let t=no(e);me();try{pi(e)}finally{he(),t()}}}var po={get(e,t){return k(e,`get`,``),e[t]}};function mo(e){return{attrs:new Proxy(e.attrs,po),slots:e.slots,emit:e.emit,expose:t=>{e.exposed=t||{}}}}function ho(e){return e.exposed?e.exposeProxy||=new Proxy(xt(pt(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in ci)return ci[n](e)},has(e,t){return t in e||t in ci}}):e.proxy}function go(e,t=!0){return R(e)?e.displayName||e.name:e.name||t&&e.__name}function _o(e){return R(e)&&`__vccOpts`in e}var vo=(e,t)=>Et(e,t,ao);function yo(e,t,n){try{ja(-1);let r=arguments.length;return r===2?B(t)&&!L(t)?Fa(t)?Z(e,null,[t]):Z(e,t):Z(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Fa(n)&&(n=[n]),Z(e,t,n))}finally{ja(1)}}var bo=`3.5.22`,xo=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n};export{ut as $,Br as A,$r as B,Mi as C,On as D,Ya as E,zn as F,Vn as G,ca as H,ri as I,mn as J,V as K,ii as L,Oa as M,Bn as N,zr as O,Ai as P,w as Q,Zr as R,yo as S,Fa as T,Hn as U,oi as V,Un as W,gn as X,cn as Y,C as Z,Z as _,kr as a,ht as at,$a as b,H as c,j as ct,Pa as d,dt as et,Ga as f,Ua as g,Wa as h,J as i,ot as it,Wr as j,Ur as k,vo as l,St as lt,Zi as m,dr as n,pt as nt,tr as o,st as ot,Na as p,pn as q,sr as r,T as rt,Ta as s,gt as st,xo as t,N as tt,za as u,yt as ut,Er as v,ji as w,Va as x,vr as y,ei as z}; +//# sourceMappingURL=_plugin-vue_export-helper.By3-ojQa.js.map \ No newline at end of file diff --git a/priv/static/static/js/_plugin-vue_export-helper.By3-ojQa.js.map b/priv/static/static/js/_plugin-vue_export-helper.By3-ojQa.js.map new file mode 100644 index 000000000..164604606 --- /dev/null +++ b/priv/static/static/js/_plugin-vue_export-helper.By3-ojQa.js.map @@ -0,0 +1 @@ +{"version":3,"file":"_plugin-vue_export-helper.By3-ojQa.js","names":["makeMap","EMPTY_OBJ","NOOP","extend","remove","hasOwnProperty","hasOwn","isArray","isMap","toTypeString","isSet","isFunction","isString","isSymbol","isObject","objectToString","isPlainObject","cacheStringFunction","camelizeRE","camelize","hyphenateRE","hyphenate","capitalize","toHandlerKey","def","specialBooleanAttrs","isBooleanAttr","isArray","isSymbol","isMap","hasOwnProperty","isRef","isObject","hasOwn","computed","isFunction","watch","EMPTY_OBJ","NOOP","isSet","isPlainObject","isRef"],"sources":["../../../node_modules/@vue/reactivity/node_modules/@vue/shared/dist/shared.esm-bundler.js","../../../node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js","../../../node_modules/@vue/runtime-core/node_modules/@vue/shared/dist/shared.esm-bundler.js","../../../node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js"],"sourcesContent":["/**\n* @vue/shared v3.5.22\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n// @__NO_SIDE_EFFECTS__\nfunction makeMap(str) {\n const map = /* @__PURE__ */ Object.create(null);\n for (const key of str.split(\",\")) map[key] = 1;\n return (val) => val in map;\n}\n\nconst EMPTY_OBJ = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze({}) : {};\nconst EMPTY_ARR = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze([]) : [];\nconst NOOP = () => {\n};\nconst NO = () => false;\nconst isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter\n(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);\nconst isModelListener = (key) => key.startsWith(\"onUpdate:\");\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n const i = arr.indexOf(el);\n if (i > -1) {\n arr.splice(i, 1);\n }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === \"[object Map]\";\nconst isSet = (val) => toTypeString(val) === \"[object Set]\";\nconst isDate = (val) => toTypeString(val) === \"[object Date]\";\nconst isRegExp = (val) => toTypeString(val) === \"[object RegExp]\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isString = (val) => typeof val === \"string\";\nconst isSymbol = (val) => typeof val === \"symbol\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isPromise = (val) => {\n return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === \"[object Object]\";\nconst isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nconst isReservedProp = /* @__PURE__ */ makeMap(\n // the leading comma is intentional so empty string \"\" is also included\n \",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"\n);\nconst isBuiltInDirective = /* @__PURE__ */ makeMap(\n \"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"\n);\nconst cacheStringFunction = (fn) => {\n const cache = /* @__PURE__ */ Object.create(null);\n return ((str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n });\n};\nconst camelizeRE = /-\\w/g;\nconst camelize = cacheStringFunction(\n (str) => {\n return str.replace(camelizeRE, (c) => c.slice(1).toUpperCase());\n }\n);\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction(\n (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nconst capitalize = cacheStringFunction((str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n});\nconst toHandlerKey = cacheStringFunction(\n (str) => {\n const s = str ? `on${capitalize(str)}` : ``;\n return s;\n }\n);\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, ...arg) => {\n for (let i = 0; i < fns.length; i++) {\n fns[i](...arg);\n }\n};\nconst def = (obj, key, value, writable = false) => {\n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: false,\n writable,\n value\n });\n};\nconst looseToNumber = (val) => {\n const n = parseFloat(val);\n return isNaN(n) ? val : n;\n};\nconst toNumber = (val) => {\n const n = isString(val) ? Number(val) : NaN;\n return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n return _globalThis || (_globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : {});\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n return identRE.test(name) ? `__props.${name}` : `__props[${JSON.stringify(name)}]`;\n}\nfunction genCacheKey(source, options) {\n return source + JSON.stringify(\n options,\n (_, val) => typeof val === \"function\" ? val.toString() : val\n );\n}\n\nconst PatchFlags = {\n \"TEXT\": 1,\n \"1\": \"TEXT\",\n \"CLASS\": 2,\n \"2\": \"CLASS\",\n \"STYLE\": 4,\n \"4\": \"STYLE\",\n \"PROPS\": 8,\n \"8\": \"PROPS\",\n \"FULL_PROPS\": 16,\n \"16\": \"FULL_PROPS\",\n \"NEED_HYDRATION\": 32,\n \"32\": \"NEED_HYDRATION\",\n \"STABLE_FRAGMENT\": 64,\n \"64\": \"STABLE_FRAGMENT\",\n \"KEYED_FRAGMENT\": 128,\n \"128\": \"KEYED_FRAGMENT\",\n \"UNKEYED_FRAGMENT\": 256,\n \"256\": \"UNKEYED_FRAGMENT\",\n \"NEED_PATCH\": 512,\n \"512\": \"NEED_PATCH\",\n \"DYNAMIC_SLOTS\": 1024,\n \"1024\": \"DYNAMIC_SLOTS\",\n \"DEV_ROOT_FRAGMENT\": 2048,\n \"2048\": \"DEV_ROOT_FRAGMENT\",\n \"CACHED\": -1,\n \"-1\": \"CACHED\",\n \"BAIL\": -2,\n \"-2\": \"BAIL\"\n};\nconst PatchFlagNames = {\n [1]: `TEXT`,\n [2]: `CLASS`,\n [4]: `STYLE`,\n [8]: `PROPS`,\n [16]: `FULL_PROPS`,\n [32]: `NEED_HYDRATION`,\n [64]: `STABLE_FRAGMENT`,\n [128]: `KEYED_FRAGMENT`,\n [256]: `UNKEYED_FRAGMENT`,\n [512]: `NEED_PATCH`,\n [1024]: `DYNAMIC_SLOTS`,\n [2048]: `DEV_ROOT_FRAGMENT`,\n [-1]: `CACHED`,\n [-2]: `BAIL`\n};\n\nconst ShapeFlags = {\n \"ELEMENT\": 1,\n \"1\": \"ELEMENT\",\n \"FUNCTIONAL_COMPONENT\": 2,\n \"2\": \"FUNCTIONAL_COMPONENT\",\n \"STATEFUL_COMPONENT\": 4,\n \"4\": \"STATEFUL_COMPONENT\",\n \"TEXT_CHILDREN\": 8,\n \"8\": \"TEXT_CHILDREN\",\n \"ARRAY_CHILDREN\": 16,\n \"16\": \"ARRAY_CHILDREN\",\n \"SLOTS_CHILDREN\": 32,\n \"32\": \"SLOTS_CHILDREN\",\n \"TELEPORT\": 64,\n \"64\": \"TELEPORT\",\n \"SUSPENSE\": 128,\n \"128\": \"SUSPENSE\",\n \"COMPONENT_SHOULD_KEEP_ALIVE\": 256,\n \"256\": \"COMPONENT_SHOULD_KEEP_ALIVE\",\n \"COMPONENT_KEPT_ALIVE\": 512,\n \"512\": \"COMPONENT_KEPT_ALIVE\",\n \"COMPONENT\": 6,\n \"6\": \"COMPONENT\"\n};\n\nconst SlotFlags = {\n \"STABLE\": 1,\n \"1\": \"STABLE\",\n \"DYNAMIC\": 2,\n \"2\": \"DYNAMIC\",\n \"FORWARDED\": 3,\n \"3\": \"FORWARDED\"\n};\nconst slotFlagsText = {\n [1]: \"STABLE\",\n [2]: \"DYNAMIC\",\n [3]: \"FORWARDED\"\n};\n\nconst GLOBALS_ALLOWED = \"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol\";\nconst isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED);\nconst isGloballyWhitelisted = isGloballyAllowed;\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n start = Math.max(0, Math.min(start, source.length));\n end = Math.max(0, Math.min(end, source.length));\n if (start > end) return \"\";\n let lines = source.split(/(\\r?\\n)/);\n const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n lines = lines.filter((_, idx) => idx % 2 === 0);\n let count = 0;\n const res = [];\n for (let i = 0; i < lines.length; i++) {\n count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);\n if (count >= start) {\n for (let j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length) continue;\n const line = j + 1;\n res.push(\n `${line}${\" \".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`\n );\n const lineLength = lines[j].length;\n const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;\n if (j === i) {\n const pad = start - (count - (lineLength + newLineSeqLength));\n const length = Math.max(\n 1,\n end > count ? lineLength - pad : end - start\n );\n res.push(` | ` + \" \".repeat(pad) + \"^\".repeat(length));\n } else if (j > i) {\n if (end > count) {\n const length = Math.max(Math.min(end - count, lineLength), 1);\n res.push(` | ` + \"^\".repeat(length));\n }\n count += lineLength + newLineSeqLength;\n }\n }\n break;\n }\n }\n return res.join(\"\\n\");\n}\n\nfunction normalizeStyle(value) {\n if (isArray(value)) {\n const res = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);\n if (normalized) {\n for (const key in normalized) {\n res[key] = normalized[key];\n }\n }\n }\n return res;\n } else if (isString(value) || isObject(value)) {\n return value;\n }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*[^]*?\\*\\//g;\nfunction parseStringStyle(cssText) {\n const ret = {};\n cssText.replace(styleCommentRE, \"\").split(listDelimiterRE).forEach((item) => {\n if (item) {\n const tmp = item.split(propertyDelimiterRE);\n tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return ret;\n}\nfunction stringifyStyle(styles) {\n if (!styles) return \"\";\n if (isString(styles)) return styles;\n let ret = \"\";\n for (const key in styles) {\n const value = styles[key];\n if (isString(value) || typeof value === \"number\") {\n const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n ret += `${normalizedKey}:${value};`;\n }\n }\n return ret;\n}\nfunction normalizeClass(value) {\n let res = \"\";\n if (isString(value)) {\n res = value;\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const normalized = normalizeClass(value[i]);\n if (normalized) {\n res += normalized + \" \";\n }\n }\n } else if (isObject(value)) {\n for (const name in value) {\n if (value[name]) {\n res += name + \" \";\n }\n }\n }\n return res.trim();\n}\nfunction normalizeProps(props) {\n if (!props) return null;\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (style) {\n props.style = normalizeStyle(style);\n }\n return props;\n}\n\nconst HTML_TAGS = \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\";\nconst SVG_TAGS = \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\";\nconst MATH_TAGS = \"annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics\";\nconst VOID_TAGS = \"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\";\nconst isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);\nconst isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);\nconst isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS);\nconst isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);\n\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);\nconst isBooleanAttr = /* @__PURE__ */ makeMap(\n specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`\n);\nfunction includeBooleanAttr(value) {\n return !!value || value === \"\";\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n if (attrValidationCache.hasOwnProperty(name)) {\n return attrValidationCache[name];\n }\n const isUnsafe = unsafeAttrCharRE.test(name);\n if (isUnsafe) {\n console.error(`unsafe attribute name: ${name}`);\n }\n return attrValidationCache[name] = !isUnsafe;\n}\nconst propsToAttrMap = {\n acceptCharset: \"accept-charset\",\n className: \"class\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\"\n};\nconst isKnownHtmlAttr = /* @__PURE__ */ makeMap(\n `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`\n);\nconst isKnownSvgAttr = /* @__PURE__ */ makeMap(\n `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`\n);\nconst isKnownMathMLAttr = /* @__PURE__ */ makeMap(\n `accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns`\n);\nfunction isRenderableAttrValue(value) {\n if (value == null) {\n return false;\n }\n const type = typeof value;\n return type === \"string\" || type === \"number\" || type === \"boolean\";\n}\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n const str = \"\" + string;\n const match = escapeRE.exec(str);\n if (!match) {\n return str;\n }\n let html = \"\";\n let escaped;\n let index;\n let lastIndex = 0;\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escaped = \""\";\n break;\n case 38:\n escaped = \"&\";\n break;\n case 39:\n escaped = \"'\";\n break;\n case 60:\n escaped = \"<\";\n break;\n case 62:\n escaped = \">\";\n break;\n default:\n continue;\n }\n if (lastIndex !== index) {\n html += str.slice(lastIndex, index);\n }\n lastIndex = index + 1;\n html += escaped;\n }\n return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\nconst commentStripRE = /^-?>||--!>|?@[\\\\\\]^`{|}~]/g;\nfunction getEscapedCssVarName(key, doubleEscape) {\n return key.replace(\n cssVarNameEscapeSymbolsRE,\n (s) => doubleEscape ? s === '\"' ? '\\\\\\\\\\\\\"' : `\\\\\\\\${s}` : `\\\\${s}`\n );\n}\n\nfunction looseCompareArrays(a, b) {\n if (a.length !== b.length) return false;\n let equal = true;\n for (let i = 0; equal && i < a.length; i++) {\n equal = looseEqual(a[i], b[i]);\n }\n return equal;\n}\nfunction looseEqual(a, b) {\n if (a === b) return true;\n let aValidType = isDate(a);\n let bValidType = isDate(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n }\n aValidType = isSymbol(a);\n bValidType = isSymbol(b);\n if (aValidType || bValidType) {\n return a === b;\n }\n aValidType = isArray(a);\n bValidType = isArray(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n }\n aValidType = isObject(a);\n bValidType = isObject(b);\n if (aValidType || bValidType) {\n if (!aValidType || !bValidType) {\n return false;\n }\n const aKeysCount = Object.keys(a).length;\n const bKeysCount = Object.keys(b).length;\n if (aKeysCount !== bKeysCount) {\n return false;\n }\n for (const key in a) {\n const aHasKey = a.hasOwnProperty(key);\n const bHasKey = b.hasOwnProperty(key);\n if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) {\n return false;\n }\n }\n }\n return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n return arr.findIndex((item) => looseEqual(item, val));\n}\n\nconst isRef = (val) => {\n return !!(val && val[\"__v_isRef\"] === true);\n};\nconst toDisplayString = (val) => {\n return isString(val) ? val : val == null ? \"\" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val);\n};\nconst replacer = (_key, val) => {\n if (isRef(val)) {\n return replacer(_key, val.value);\n } else if (isMap(val)) {\n return {\n [`Map(${val.size})`]: [...val.entries()].reduce(\n (entries, [key, val2], i) => {\n entries[stringifySymbol(key, i) + \" =>\"] = val2;\n return entries;\n },\n {}\n )\n };\n } else if (isSet(val)) {\n return {\n [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))\n };\n } else if (isSymbol(val)) {\n return stringifySymbol(val);\n } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n return String(val);\n }\n return val;\n};\nconst stringifySymbol = (v, i = \"\") => {\n var _a;\n return (\n // Symbol.description in es2019+ so we need to cast here to pass\n // the lib: es2016 check\n isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v\n );\n};\n\nfunction normalizeCssVarValue(value) {\n if (value == null) {\n return \"initial\";\n }\n if (typeof value === \"string\") {\n return value === \"\" ? \" \" : value;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n console.warn(\n \"[Vue warn] Invalid value used for CSS binding. Expected a string or a finite number but received:\",\n value\n );\n }\n }\n return String(value);\n}\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, PatchFlags, ShapeFlags, SlotFlags, camelize, capitalize, cssVarNameEscapeSymbolsRE, def, escapeHtml, escapeHtmlComment, extend, genCacheKey, genPropsAccessExp, generateCodeFrame, getEscapedCssVarName, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyAllowed, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownMathMLAttr, isKnownSvgAttr, isMap, isMathMLTag, isModelListener, isObject, isOn, isPlainObject, isPromise, isRegExp, isRenderableAttrValue, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, looseToNumber, makeMap, normalizeClass, normalizeCssVarValue, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n","/**\n* @vue/reactivity v3.5.22\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { extend, hasChanged, isArray, isIntegerKey, isSymbol, isMap, hasOwn, makeMap, isObject, capitalize, toRawType, def, isFunction, EMPTY_OBJ, isSet, isPlainObject, remove, NOOP } from '@vue/shared';\n\nfunction warn(msg, ...args) {\n console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n constructor(detached = false) {\n this.detached = detached;\n /**\n * @internal\n */\n this._active = true;\n /**\n * @internal track `on` calls, allow `on` call multiple times\n */\n this._on = 0;\n /**\n * @internal\n */\n this.effects = [];\n /**\n * @internal\n */\n this.cleanups = [];\n this._isPaused = false;\n this.parent = activeEffectScope;\n if (!detached && activeEffectScope) {\n this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(\n this\n ) - 1;\n }\n }\n get active() {\n return this._active;\n }\n pause() {\n if (this._active) {\n this._isPaused = true;\n let i, l;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].pause();\n }\n }\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].pause();\n }\n }\n }\n /**\n * Resumes the effect scope, including all child scopes and effects.\n */\n resume() {\n if (this._active) {\n if (this._isPaused) {\n this._isPaused = false;\n let i, l;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].resume();\n }\n }\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].resume();\n }\n }\n }\n }\n run(fn) {\n if (this._active) {\n const currentEffectScope = activeEffectScope;\n try {\n activeEffectScope = this;\n return fn();\n } finally {\n activeEffectScope = currentEffectScope;\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(`cannot run an inactive effect scope.`);\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n on() {\n if (++this._on === 1) {\n this.prevScope = activeEffectScope;\n activeEffectScope = this;\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n off() {\n if (this._on > 0 && --this._on === 0) {\n activeEffectScope = this.prevScope;\n this.prevScope = void 0;\n }\n }\n stop(fromParent) {\n if (this._active) {\n this._active = false;\n let i, l;\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].stop();\n }\n this.effects.length = 0;\n for (i = 0, l = this.cleanups.length; i < l; i++) {\n this.cleanups[i]();\n }\n this.cleanups.length = 0;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].stop(true);\n }\n this.scopes.length = 0;\n }\n if (!this.detached && this.parent && !fromParent) {\n const last = this.parent.scopes.pop();\n if (last && last !== this) {\n this.parent.scopes[this.index] = last;\n last.index = this.index;\n }\n }\n this.parent = void 0;\n }\n }\n}\nfunction effectScope(detached) {\n return new EffectScope(detached);\n}\nfunction getCurrentScope() {\n return activeEffectScope;\n}\nfunction onScopeDispose(fn, failSilently = false) {\n if (activeEffectScope) {\n activeEffectScope.cleanups.push(fn);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onScopeDispose() is called when there is no active effect scope to be associated with.`\n );\n }\n}\n\nlet activeSub;\nconst EffectFlags = {\n \"ACTIVE\": 1,\n \"1\": \"ACTIVE\",\n \"RUNNING\": 2,\n \"2\": \"RUNNING\",\n \"TRACKING\": 4,\n \"4\": \"TRACKING\",\n \"NOTIFIED\": 8,\n \"8\": \"NOTIFIED\",\n \"DIRTY\": 16,\n \"16\": \"DIRTY\",\n \"ALLOW_RECURSE\": 32,\n \"32\": \"ALLOW_RECURSE\",\n \"PAUSED\": 64,\n \"64\": \"PAUSED\",\n \"EVALUATED\": 128,\n \"128\": \"EVALUATED\"\n};\nconst pausedQueueEffects = /* @__PURE__ */ new WeakSet();\nclass ReactiveEffect {\n constructor(fn) {\n this.fn = fn;\n /**\n * @internal\n */\n this.deps = void 0;\n /**\n * @internal\n */\n this.depsTail = void 0;\n /**\n * @internal\n */\n this.flags = 1 | 4;\n /**\n * @internal\n */\n this.next = void 0;\n /**\n * @internal\n */\n this.cleanup = void 0;\n this.scheduler = void 0;\n if (activeEffectScope && activeEffectScope.active) {\n activeEffectScope.effects.push(this);\n }\n }\n pause() {\n this.flags |= 64;\n }\n resume() {\n if (this.flags & 64) {\n this.flags &= -65;\n if (pausedQueueEffects.has(this)) {\n pausedQueueEffects.delete(this);\n this.trigger();\n }\n }\n }\n /**\n * @internal\n */\n notify() {\n if (this.flags & 2 && !(this.flags & 32)) {\n return;\n }\n if (!(this.flags & 8)) {\n batch(this);\n }\n }\n run() {\n if (!(this.flags & 1)) {\n return this.fn();\n }\n this.flags |= 2;\n cleanupEffect(this);\n prepareDeps(this);\n const prevEffect = activeSub;\n const prevShouldTrack = shouldTrack;\n activeSub = this;\n shouldTrack = true;\n try {\n return this.fn();\n } finally {\n if (!!(process.env.NODE_ENV !== \"production\") && activeSub !== this) {\n warn(\n \"Active effect was not restored correctly - this is likely a Vue internal bug.\"\n );\n }\n cleanupDeps(this);\n activeSub = prevEffect;\n shouldTrack = prevShouldTrack;\n this.flags &= -3;\n }\n }\n stop() {\n if (this.flags & 1) {\n for (let link = this.deps; link; link = link.nextDep) {\n removeSub(link);\n }\n this.deps = this.depsTail = void 0;\n cleanupEffect(this);\n this.onStop && this.onStop();\n this.flags &= -2;\n }\n }\n trigger() {\n if (this.flags & 64) {\n pausedQueueEffects.add(this);\n } else if (this.scheduler) {\n this.scheduler();\n } else {\n this.runIfDirty();\n }\n }\n /**\n * @internal\n */\n runIfDirty() {\n if (isDirty(this)) {\n this.run();\n }\n }\n get dirty() {\n return isDirty(this);\n }\n}\nlet batchDepth = 0;\nlet batchedSub;\nlet batchedComputed;\nfunction batch(sub, isComputed = false) {\n sub.flags |= 8;\n if (isComputed) {\n sub.next = batchedComputed;\n batchedComputed = sub;\n return;\n }\n sub.next = batchedSub;\n batchedSub = sub;\n}\nfunction startBatch() {\n batchDepth++;\n}\nfunction endBatch() {\n if (--batchDepth > 0) {\n return;\n }\n if (batchedComputed) {\n let e = batchedComputed;\n batchedComputed = void 0;\n while (e) {\n const next = e.next;\n e.next = void 0;\n e.flags &= -9;\n e = next;\n }\n }\n let error;\n while (batchedSub) {\n let e = batchedSub;\n batchedSub = void 0;\n while (e) {\n const next = e.next;\n e.next = void 0;\n e.flags &= -9;\n if (e.flags & 1) {\n try {\n ;\n e.trigger();\n } catch (err) {\n if (!error) error = err;\n }\n }\n e = next;\n }\n }\n if (error) throw error;\n}\nfunction prepareDeps(sub) {\n for (let link = sub.deps; link; link = link.nextDep) {\n link.version = -1;\n link.prevActiveLink = link.dep.activeLink;\n link.dep.activeLink = link;\n }\n}\nfunction cleanupDeps(sub) {\n let head;\n let tail = sub.depsTail;\n let link = tail;\n while (link) {\n const prev = link.prevDep;\n if (link.version === -1) {\n if (link === tail) tail = prev;\n removeSub(link);\n removeDep(link);\n } else {\n head = link;\n }\n link.dep.activeLink = link.prevActiveLink;\n link.prevActiveLink = void 0;\n link = prev;\n }\n sub.deps = head;\n sub.depsTail = tail;\n}\nfunction isDirty(sub) {\n for (let link = sub.deps; link; link = link.nextDep) {\n if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) {\n return true;\n }\n }\n if (sub._dirty) {\n return true;\n }\n return false;\n}\nfunction refreshComputed(computed) {\n if (computed.flags & 4 && !(computed.flags & 16)) {\n return;\n }\n computed.flags &= -17;\n if (computed.globalVersion === globalVersion) {\n return;\n }\n computed.globalVersion = globalVersion;\n if (!computed.isSSR && computed.flags & 128 && (!computed.deps && !computed._dirty || !isDirty(computed))) {\n return;\n }\n computed.flags |= 2;\n const dep = computed.dep;\n const prevSub = activeSub;\n const prevShouldTrack = shouldTrack;\n activeSub = computed;\n shouldTrack = true;\n try {\n prepareDeps(computed);\n const value = computed.fn(computed._value);\n if (dep.version === 0 || hasChanged(value, computed._value)) {\n computed.flags |= 128;\n computed._value = value;\n dep.version++;\n }\n } catch (err) {\n dep.version++;\n throw err;\n } finally {\n activeSub = prevSub;\n shouldTrack = prevShouldTrack;\n cleanupDeps(computed);\n computed.flags &= -3;\n }\n}\nfunction removeSub(link, soft = false) {\n const { dep, prevSub, nextSub } = link;\n if (prevSub) {\n prevSub.nextSub = nextSub;\n link.prevSub = void 0;\n }\n if (nextSub) {\n nextSub.prevSub = prevSub;\n link.nextSub = void 0;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && dep.subsHead === link) {\n dep.subsHead = nextSub;\n }\n if (dep.subs === link) {\n dep.subs = prevSub;\n if (!prevSub && dep.computed) {\n dep.computed.flags &= -5;\n for (let l = dep.computed.deps; l; l = l.nextDep) {\n removeSub(l, true);\n }\n }\n }\n if (!soft && !--dep.sc && dep.map) {\n dep.map.delete(dep.key);\n }\n}\nfunction removeDep(link) {\n const { prevDep, nextDep } = link;\n if (prevDep) {\n prevDep.nextDep = nextDep;\n link.prevDep = void 0;\n }\n if (nextDep) {\n nextDep.prevDep = prevDep;\n link.nextDep = void 0;\n }\n}\nfunction effect(fn, options) {\n if (fn.effect instanceof ReactiveEffect) {\n fn = fn.effect.fn;\n }\n const e = new ReactiveEffect(fn);\n if (options) {\n extend(e, options);\n }\n try {\n e.run();\n } catch (err) {\n e.stop();\n throw err;\n }\n const runner = e.run.bind(e);\n runner.effect = e;\n return runner;\n}\nfunction stop(runner) {\n runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = false;\n}\nfunction enableTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = true;\n}\nfunction resetTracking() {\n const last = trackStack.pop();\n shouldTrack = last === void 0 ? true : last;\n}\nfunction onEffectCleanup(fn, failSilently = false) {\n if (activeSub instanceof ReactiveEffect) {\n activeSub.cleanup = fn;\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onEffectCleanup() was called when there was no active effect to associate with.`\n );\n }\n}\nfunction cleanupEffect(e) {\n const { cleanup } = e;\n e.cleanup = void 0;\n if (cleanup) {\n const prevSub = activeSub;\n activeSub = void 0;\n try {\n cleanup();\n } finally {\n activeSub = prevSub;\n }\n }\n}\n\nlet globalVersion = 0;\nclass Link {\n constructor(sub, dep) {\n this.sub = sub;\n this.dep = dep;\n this.version = dep.version;\n this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0;\n }\n}\nclass Dep {\n // TODO isolatedDeclarations \"__v_skip\"\n constructor(computed) {\n this.computed = computed;\n this.version = 0;\n /**\n * Link between this dep and the current active effect\n */\n this.activeLink = void 0;\n /**\n * Doubly linked list representing the subscribing effects (tail)\n */\n this.subs = void 0;\n /**\n * For object property deps cleanup\n */\n this.map = void 0;\n this.key = void 0;\n /**\n * Subscriber counter\n */\n this.sc = 0;\n /**\n * @internal\n */\n this.__v_skip = true;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.subsHead = void 0;\n }\n }\n track(debugInfo) {\n if (!activeSub || !shouldTrack || activeSub === this.computed) {\n return;\n }\n let link = this.activeLink;\n if (link === void 0 || link.sub !== activeSub) {\n link = this.activeLink = new Link(activeSub, this);\n if (!activeSub.deps) {\n activeSub.deps = activeSub.depsTail = link;\n } else {\n link.prevDep = activeSub.depsTail;\n activeSub.depsTail.nextDep = link;\n activeSub.depsTail = link;\n }\n addSub(link);\n } else if (link.version === -1) {\n link.version = this.version;\n if (link.nextDep) {\n const next = link.nextDep;\n next.prevDep = link.prevDep;\n if (link.prevDep) {\n link.prevDep.nextDep = next;\n }\n link.prevDep = activeSub.depsTail;\n link.nextDep = void 0;\n activeSub.depsTail.nextDep = link;\n activeSub.depsTail = link;\n if (activeSub.deps === link) {\n activeSub.deps = next;\n }\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") && activeSub.onTrack) {\n activeSub.onTrack(\n extend(\n {\n effect: activeSub\n },\n debugInfo\n )\n );\n }\n return link;\n }\n trigger(debugInfo) {\n this.version++;\n globalVersion++;\n this.notify(debugInfo);\n }\n notify(debugInfo) {\n startBatch();\n try {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n for (let head = this.subsHead; head; head = head.nextSub) {\n if (head.sub.onTrigger && !(head.sub.flags & 8)) {\n head.sub.onTrigger(\n extend(\n {\n effect: head.sub\n },\n debugInfo\n )\n );\n }\n }\n }\n for (let link = this.subs; link; link = link.prevSub) {\n if (link.sub.notify()) {\n ;\n link.sub.dep.notify();\n }\n }\n } finally {\n endBatch();\n }\n }\n}\nfunction addSub(link) {\n link.dep.sc++;\n if (link.sub.flags & 4) {\n const computed = link.dep.computed;\n if (computed && !link.dep.subs) {\n computed.flags |= 4 | 16;\n for (let l = computed.deps; l; l = l.nextDep) {\n addSub(l);\n }\n }\n const currentTail = link.dep.subs;\n if (currentTail !== link) {\n link.prevSub = currentTail;\n if (currentTail) currentTail.nextSub = link;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && link.dep.subsHead === void 0) {\n link.dep.subsHead = link;\n }\n link.dep.subs = link;\n }\n}\nconst targetMap = /* @__PURE__ */ new WeakMap();\nconst ITERATE_KEY = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Object iterate\" : \"\"\n);\nconst MAP_KEY_ITERATE_KEY = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Map keys iterate\" : \"\"\n);\nconst ARRAY_ITERATE_KEY = Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Array iterate\" : \"\"\n);\nfunction track(target, type, key) {\n if (shouldTrack && activeSub) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n targetMap.set(target, depsMap = /* @__PURE__ */ new Map());\n }\n let dep = depsMap.get(key);\n if (!dep) {\n depsMap.set(key, dep = new Dep());\n dep.map = depsMap;\n dep.key = key;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n dep.track({\n target,\n type,\n key\n });\n } else {\n dep.track();\n }\n }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n globalVersion++;\n return;\n }\n const run = (dep) => {\n if (dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n dep.trigger({\n target,\n type,\n key,\n newValue,\n oldValue,\n oldTarget\n });\n } else {\n dep.trigger();\n }\n }\n };\n startBatch();\n if (type === \"clear\") {\n depsMap.forEach(run);\n } else {\n const targetIsArray = isArray(target);\n const isArrayIndex = targetIsArray && isIntegerKey(key);\n if (targetIsArray && key === \"length\") {\n const newLength = Number(newValue);\n depsMap.forEach((dep, key2) => {\n if (key2 === \"length\" || key2 === ARRAY_ITERATE_KEY || !isSymbol(key2) && key2 >= newLength) {\n run(dep);\n }\n });\n } else {\n if (key !== void 0 || depsMap.has(void 0)) {\n run(depsMap.get(key));\n }\n if (isArrayIndex) {\n run(depsMap.get(ARRAY_ITERATE_KEY));\n }\n switch (type) {\n case \"add\":\n if (!targetIsArray) {\n run(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n run(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n } else if (isArrayIndex) {\n run(depsMap.get(\"length\"));\n }\n break;\n case \"delete\":\n if (!targetIsArray) {\n run(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n run(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n }\n break;\n case \"set\":\n if (isMap(target)) {\n run(depsMap.get(ITERATE_KEY));\n }\n break;\n }\n }\n }\n endBatch();\n}\nfunction getDepFromReactive(object, key) {\n const depMap = targetMap.get(object);\n return depMap && depMap.get(key);\n}\n\nfunction reactiveReadArray(array) {\n const raw = toRaw(array);\n if (raw === array) return raw;\n track(raw, \"iterate\", ARRAY_ITERATE_KEY);\n return isShallow(array) ? raw : raw.map(toReactive);\n}\nfunction shallowReadArray(arr) {\n track(arr = toRaw(arr), \"iterate\", ARRAY_ITERATE_KEY);\n return arr;\n}\nconst arrayInstrumentations = {\n __proto__: null,\n [Symbol.iterator]() {\n return iterator(this, Symbol.iterator, toReactive);\n },\n concat(...args) {\n return reactiveReadArray(this).concat(\n ...args.map((x) => isArray(x) ? reactiveReadArray(x) : x)\n );\n },\n entries() {\n return iterator(this, \"entries\", (value) => {\n value[1] = toReactive(value[1]);\n return value;\n });\n },\n every(fn, thisArg) {\n return apply(this, \"every\", fn, thisArg, void 0, arguments);\n },\n filter(fn, thisArg) {\n return apply(this, \"filter\", fn, thisArg, (v) => v.map(toReactive), arguments);\n },\n find(fn, thisArg) {\n return apply(this, \"find\", fn, thisArg, toReactive, arguments);\n },\n findIndex(fn, thisArg) {\n return apply(this, \"findIndex\", fn, thisArg, void 0, arguments);\n },\n findLast(fn, thisArg) {\n return apply(this, \"findLast\", fn, thisArg, toReactive, arguments);\n },\n findLastIndex(fn, thisArg) {\n return apply(this, \"findLastIndex\", fn, thisArg, void 0, arguments);\n },\n // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement\n forEach(fn, thisArg) {\n return apply(this, \"forEach\", fn, thisArg, void 0, arguments);\n },\n includes(...args) {\n return searchProxy(this, \"includes\", args);\n },\n indexOf(...args) {\n return searchProxy(this, \"indexOf\", args);\n },\n join(separator) {\n return reactiveReadArray(this).join(separator);\n },\n // keys() iterator only reads `length`, no optimization required\n lastIndexOf(...args) {\n return searchProxy(this, \"lastIndexOf\", args);\n },\n map(fn, thisArg) {\n return apply(this, \"map\", fn, thisArg, void 0, arguments);\n },\n pop() {\n return noTracking(this, \"pop\");\n },\n push(...args) {\n return noTracking(this, \"push\", args);\n },\n reduce(fn, ...args) {\n return reduce(this, \"reduce\", fn, args);\n },\n reduceRight(fn, ...args) {\n return reduce(this, \"reduceRight\", fn, args);\n },\n shift() {\n return noTracking(this, \"shift\");\n },\n // slice could use ARRAY_ITERATE but also seems to beg for range tracking\n some(fn, thisArg) {\n return apply(this, \"some\", fn, thisArg, void 0, arguments);\n },\n splice(...args) {\n return noTracking(this, \"splice\", args);\n },\n toReversed() {\n return reactiveReadArray(this).toReversed();\n },\n toSorted(comparer) {\n return reactiveReadArray(this).toSorted(comparer);\n },\n toSpliced(...args) {\n return reactiveReadArray(this).toSpliced(...args);\n },\n unshift(...args) {\n return noTracking(this, \"unshift\", args);\n },\n values() {\n return iterator(this, \"values\", toReactive);\n }\n};\nfunction iterator(self, method, wrapValue) {\n const arr = shallowReadArray(self);\n const iter = arr[method]();\n if (arr !== self && !isShallow(self)) {\n iter._next = iter.next;\n iter.next = () => {\n const result = iter._next();\n if (!result.done) {\n result.value = wrapValue(result.value);\n }\n return result;\n };\n }\n return iter;\n}\nconst arrayProto = Array.prototype;\nfunction apply(self, method, fn, thisArg, wrappedRetFn, args) {\n const arr = shallowReadArray(self);\n const needsWrap = arr !== self && !isShallow(self);\n const methodFn = arr[method];\n if (methodFn !== arrayProto[method]) {\n const result2 = methodFn.apply(self, args);\n return needsWrap ? toReactive(result2) : result2;\n }\n let wrappedFn = fn;\n if (arr !== self) {\n if (needsWrap) {\n wrappedFn = function(item, index) {\n return fn.call(this, toReactive(item), index, self);\n };\n } else if (fn.length > 2) {\n wrappedFn = function(item, index) {\n return fn.call(this, item, index, self);\n };\n }\n }\n const result = methodFn.call(arr, wrappedFn, thisArg);\n return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result;\n}\nfunction reduce(self, method, fn, args) {\n const arr = shallowReadArray(self);\n let wrappedFn = fn;\n if (arr !== self) {\n if (!isShallow(self)) {\n wrappedFn = function(acc, item, index) {\n return fn.call(this, acc, toReactive(item), index, self);\n };\n } else if (fn.length > 3) {\n wrappedFn = function(acc, item, index) {\n return fn.call(this, acc, item, index, self);\n };\n }\n }\n return arr[method](wrappedFn, ...args);\n}\nfunction searchProxy(self, method, args) {\n const arr = toRaw(self);\n track(arr, \"iterate\", ARRAY_ITERATE_KEY);\n const res = arr[method](...args);\n if ((res === -1 || res === false) && isProxy(args[0])) {\n args[0] = toRaw(args[0]);\n return arr[method](...args);\n }\n return res;\n}\nfunction noTracking(self, method, args = []) {\n pauseTracking();\n startBatch();\n const res = toRaw(self)[method].apply(self, args);\n endBatch();\n resetTracking();\n return res;\n}\n\nconst isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== \"arguments\" && key !== \"caller\").map((key) => Symbol[key]).filter(isSymbol)\n);\nfunction hasOwnProperty(key) {\n if (!isSymbol(key)) key = String(key);\n const obj = toRaw(this);\n track(obj, \"has\", key);\n return obj.hasOwnProperty(key);\n}\nclass BaseReactiveHandler {\n constructor(_isReadonly = false, _isShallow = false) {\n this._isReadonly = _isReadonly;\n this._isShallow = _isShallow;\n }\n get(target, key, receiver) {\n if (key === \"__v_skip\") return target[\"__v_skip\"];\n const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_isShallow\") {\n return isShallow2;\n } else if (key === \"__v_raw\") {\n if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype\n // this means the receiver is a user proxy of the reactive proxy\n Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {\n return target;\n }\n return;\n }\n const targetIsArray = isArray(target);\n if (!isReadonly2) {\n let fn;\n if (targetIsArray && (fn = arrayInstrumentations[key])) {\n return fn;\n }\n if (key === \"hasOwnProperty\") {\n return hasOwnProperty;\n }\n }\n const res = Reflect.get(\n target,\n key,\n // if this is a proxy wrapping a ref, return methods using the raw ref\n // as receiver so that we don't have to call `toRaw` on the ref in all\n // its class methods\n isRef(target) ? target : receiver\n );\n if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n return res;\n }\n if (!isReadonly2) {\n track(target, \"get\", key);\n }\n if (isShallow2) {\n return res;\n }\n if (isRef(res)) {\n const value = targetIsArray && isIntegerKey(key) ? res : res.value;\n return isReadonly2 && isObject(value) ? readonly(value) : value;\n }\n if (isObject(res)) {\n return isReadonly2 ? readonly(res) : reactive(res);\n }\n return res;\n }\n}\nclass MutableReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(false, isShallow2);\n }\n set(target, key, value, receiver) {\n let oldValue = target[key];\n if (!this._isShallow) {\n const isOldValueReadonly = isReadonly(oldValue);\n if (!isShallow(value) && !isReadonly(value)) {\n oldValue = toRaw(oldValue);\n value = toRaw(value);\n }\n if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\n if (isOldValueReadonly) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target[key]\n );\n }\n return true;\n } else {\n oldValue.value = value;\n return true;\n }\n }\n }\n const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key);\n const result = Reflect.set(\n target,\n key,\n value,\n isRef(target) ? target : receiver\n );\n if (target === toRaw(receiver)) {\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n }\n return result;\n }\n deleteProperty(target, key) {\n const hadKey = hasOwn(target, key);\n const oldValue = target[key];\n const result = Reflect.deleteProperty(target, key);\n if (result && hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n }\n has(target, key) {\n const result = Reflect.has(target, key);\n if (!isSymbol(key) || !builtInSymbols.has(key)) {\n track(target, \"has\", key);\n }\n return result;\n }\n ownKeys(target) {\n track(\n target,\n \"iterate\",\n isArray(target) ? \"length\" : ITERATE_KEY\n );\n return Reflect.ownKeys(target);\n }\n}\nclass ReadonlyReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(true, isShallow2);\n }\n set(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n deleteProperty(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Delete operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n}\nconst mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();\nconst readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();\nconst shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(true);\nconst shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true);\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction createIterableMethod(method, isReadonly2, isShallow2) {\n return function(...args) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const targetIsMap = isMap(rawTarget);\n const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n const isKeyOnly = method === \"keys\" && targetIsMap;\n const innerIterator = target[method](...args);\n const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;\n !isReadonly2 && track(\n rawTarget,\n \"iterate\",\n isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY\n );\n return {\n // iterator protocol\n next() {\n const { value, done } = innerIterator.next();\n return done ? { value, done } : {\n value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n done\n };\n },\n // iterable protocol\n [Symbol.iterator]() {\n return this;\n }\n };\n };\n}\nfunction createReadonlyMethod(type) {\n return function(...args) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n warn(\n `${capitalize(type)} operation ${key}failed: target is readonly.`,\n toRaw(this)\n );\n }\n return type === \"delete\" ? false : type === \"clear\" ? void 0 : this;\n };\n}\nfunction createInstrumentations(readonly, shallow) {\n const instrumentations = {\n get(key) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!readonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"get\", key);\n }\n track(rawTarget, \"get\", rawKey);\n }\n const { has } = getProto(rawTarget);\n const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n if (has.call(rawTarget, key)) {\n return wrap(target.get(key));\n } else if (has.call(rawTarget, rawKey)) {\n return wrap(target.get(rawKey));\n } else if (target !== rawTarget) {\n target.get(key);\n }\n },\n get size() {\n const target = this[\"__v_raw\"];\n !readonly && track(toRaw(target), \"iterate\", ITERATE_KEY);\n return target.size;\n },\n has(key) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!readonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"has\", key);\n }\n track(rawTarget, \"has\", rawKey);\n }\n return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n },\n forEach(callback, thisArg) {\n const observed = this;\n const target = observed[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n !readonly && track(rawTarget, \"iterate\", ITERATE_KEY);\n return target.forEach((value, key) => {\n return callback.call(thisArg, wrap(value), wrap(key), observed);\n });\n }\n };\n extend(\n instrumentations,\n readonly ? {\n add: createReadonlyMethod(\"add\"),\n set: createReadonlyMethod(\"set\"),\n delete: createReadonlyMethod(\"delete\"),\n clear: createReadonlyMethod(\"clear\")\n } : {\n add(value) {\n if (!shallow && !isShallow(value) && !isReadonly(value)) {\n value = toRaw(value);\n }\n const target = toRaw(this);\n const proto = getProto(target);\n const hadKey = proto.has.call(target, value);\n if (!hadKey) {\n target.add(value);\n trigger(target, \"add\", value, value);\n }\n return this;\n },\n set(key, value) {\n if (!shallow && !isShallow(value) && !isReadonly(value)) {\n value = toRaw(value);\n }\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get.call(target, key);\n target.set(key, value);\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n return this;\n },\n delete(key) {\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get ? get.call(target, key) : void 0;\n const result = target.delete(key);\n if (hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n },\n clear() {\n const target = toRaw(this);\n const hadItems = target.size !== 0;\n const oldTarget = !!(process.env.NODE_ENV !== \"production\") ? isMap(target) ? new Map(target) : new Set(target) : void 0;\n const result = target.clear();\n if (hadItems) {\n trigger(\n target,\n \"clear\",\n void 0,\n void 0,\n oldTarget\n );\n }\n return result;\n }\n }\n );\n const iteratorMethods = [\n \"keys\",\n \"values\",\n \"entries\",\n Symbol.iterator\n ];\n iteratorMethods.forEach((method) => {\n instrumentations[method] = createIterableMethod(method, readonly, shallow);\n });\n return instrumentations;\n}\nfunction createInstrumentationGetter(isReadonly2, shallow) {\n const instrumentations = createInstrumentations(isReadonly2, shallow);\n return (target, key, receiver) => {\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_raw\") {\n return target;\n }\n return Reflect.get(\n hasOwn(instrumentations, key) && key in target ? instrumentations : target,\n key,\n receiver\n );\n };\n}\nconst mutableCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has, key) {\n const rawKey = toRaw(key);\n if (rawKey !== key && has.call(target, rawKey)) {\n const type = toRawType(target);\n warn(\n `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`\n );\n }\n}\n\nconst reactiveMap = /* @__PURE__ */ new WeakMap();\nconst shallowReactiveMap = /* @__PURE__ */ new WeakMap();\nconst readonlyMap = /* @__PURE__ */ new WeakMap();\nconst shallowReadonlyMap = /* @__PURE__ */ new WeakMap();\nfunction targetTypeMap(rawType) {\n switch (rawType) {\n case \"Object\":\n case \"Array\":\n return 1 /* COMMON */;\n case \"Map\":\n case \"Set\":\n case \"WeakMap\":\n case \"WeakSet\":\n return 2 /* COLLECTION */;\n default:\n return 0 /* INVALID */;\n }\n}\nfunction getTargetType(value) {\n return value[\"__v_skip\"] || !Object.isExtensible(value) ? 0 /* INVALID */ : targetTypeMap(toRawType(value));\n}\nfunction reactive(target) {\n if (isReadonly(target)) {\n return target;\n }\n return createReactiveObject(\n target,\n false,\n mutableHandlers,\n mutableCollectionHandlers,\n reactiveMap\n );\n}\nfunction shallowReactive(target) {\n return createReactiveObject(\n target,\n false,\n shallowReactiveHandlers,\n shallowCollectionHandlers,\n shallowReactiveMap\n );\n}\nfunction readonly(target) {\n return createReactiveObject(\n target,\n true,\n readonlyHandlers,\n readonlyCollectionHandlers,\n readonlyMap\n );\n}\nfunction shallowReadonly(target) {\n return createReactiveObject(\n target,\n true,\n shallowReadonlyHandlers,\n shallowReadonlyCollectionHandlers,\n shallowReadonlyMap\n );\n}\nfunction createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {\n if (!isObject(target)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `value cannot be made ${isReadonly2 ? \"readonly\" : \"reactive\"}: ${String(\n target\n )}`\n );\n }\n return target;\n }\n if (target[\"__v_raw\"] && !(isReadonly2 && target[\"__v_isReactive\"])) {\n return target;\n }\n const targetType = getTargetType(target);\n if (targetType === 0 /* INVALID */) {\n return target;\n }\n const existingProxy = proxyMap.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n const proxy = new Proxy(\n target,\n targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers\n );\n proxyMap.set(target, proxy);\n return proxy;\n}\nfunction isReactive(value) {\n if (isReadonly(value)) {\n return isReactive(value[\"__v_raw\"]);\n }\n return !!(value && value[\"__v_isReactive\"]);\n}\nfunction isReadonly(value) {\n return !!(value && value[\"__v_isReadonly\"]);\n}\nfunction isShallow(value) {\n return !!(value && value[\"__v_isShallow\"]);\n}\nfunction isProxy(value) {\n return value ? !!value[\"__v_raw\"] : false;\n}\nfunction toRaw(observed) {\n const raw = observed && observed[\"__v_raw\"];\n return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n if (!hasOwn(value, \"__v_skip\") && Object.isExtensible(value)) {\n def(value, \"__v_skip\", true);\n }\n return value;\n}\nconst toReactive = (value) => isObject(value) ? reactive(value) : value;\nconst toReadonly = (value) => isObject(value) ? readonly(value) : value;\n\nfunction isRef(r) {\n return r ? r[\"__v_isRef\"] === true : false;\n}\nfunction ref(value) {\n return createRef(value, false);\n}\nfunction shallowRef(value) {\n return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n if (isRef(rawValue)) {\n return rawValue;\n }\n return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n constructor(value, isShallow2) {\n this.dep = new Dep();\n this[\"__v_isRef\"] = true;\n this[\"__v_isShallow\"] = false;\n this._rawValue = isShallow2 ? value : toRaw(value);\n this._value = isShallow2 ? value : toReactive(value);\n this[\"__v_isShallow\"] = isShallow2;\n }\n get value() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.dep.track({\n target: this,\n type: \"get\",\n key: \"value\"\n });\n } else {\n this.dep.track();\n }\n return this._value;\n }\n set value(newValue) {\n const oldValue = this._rawValue;\n const useDirectValue = this[\"__v_isShallow\"] || isShallow(newValue) || isReadonly(newValue);\n newValue = useDirectValue ? newValue : toRaw(newValue);\n if (hasChanged(newValue, oldValue)) {\n this._rawValue = newValue;\n this._value = useDirectValue ? newValue : toReactive(newValue);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.dep.trigger({\n target: this,\n type: \"set\",\n key: \"value\",\n newValue,\n oldValue\n });\n } else {\n this.dep.trigger();\n }\n }\n }\n}\nfunction triggerRef(ref2) {\n if (ref2.dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n ref2.dep.trigger({\n target: ref2,\n type: \"set\",\n key: \"value\",\n newValue: ref2._value\n });\n } else {\n ref2.dep.trigger();\n }\n }\n}\nfunction unref(ref2) {\n return isRef(ref2) ? ref2.value : ref2;\n}\nfunction toValue(source) {\n return isFunction(source) ? source() : unref(source);\n}\nconst shallowUnwrapHandlers = {\n get: (target, key, receiver) => key === \"__v_raw\" ? target : unref(Reflect.get(target, key, receiver)),\n set: (target, key, value, receiver) => {\n const oldValue = target[key];\n if (isRef(oldValue) && !isRef(value)) {\n oldValue.value = value;\n return true;\n } else {\n return Reflect.set(target, key, value, receiver);\n }\n }\n};\nfunction proxyRefs(objectWithRefs) {\n return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n constructor(factory) {\n this[\"__v_isRef\"] = true;\n this._value = void 0;\n const dep = this.dep = new Dep();\n const { get, set } = factory(dep.track.bind(dep), dep.trigger.bind(dep));\n this._get = get;\n this._set = set;\n }\n get value() {\n return this._value = this._get();\n }\n set value(newVal) {\n this._set(newVal);\n }\n}\nfunction customRef(factory) {\n return new CustomRefImpl(factory);\n}\nfunction toRefs(object) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isProxy(object)) {\n warn(`toRefs() expects a reactive object but received a plain one.`);\n }\n const ret = isArray(object) ? new Array(object.length) : {};\n for (const key in object) {\n ret[key] = propertyToRef(object, key);\n }\n return ret;\n}\nclass ObjectRefImpl {\n constructor(_object, _key, _defaultValue) {\n this._object = _object;\n this._key = _key;\n this._defaultValue = _defaultValue;\n this[\"__v_isRef\"] = true;\n this._value = void 0;\n }\n get value() {\n const val = this._object[this._key];\n return this._value = val === void 0 ? this._defaultValue : val;\n }\n set value(newVal) {\n this._object[this._key] = newVal;\n }\n get dep() {\n return getDepFromReactive(toRaw(this._object), this._key);\n }\n}\nclass GetterRefImpl {\n constructor(_getter) {\n this._getter = _getter;\n this[\"__v_isRef\"] = true;\n this[\"__v_isReadonly\"] = true;\n this._value = void 0;\n }\n get value() {\n return this._value = this._getter();\n }\n}\nfunction toRef(source, key, defaultValue) {\n if (isRef(source)) {\n return source;\n } else if (isFunction(source)) {\n return new GetterRefImpl(source);\n } else if (isObject(source) && arguments.length > 1) {\n return propertyToRef(source, key, defaultValue);\n } else {\n return ref(source);\n }\n}\nfunction propertyToRef(source, key, defaultValue) {\n const val = source[key];\n return isRef(val) ? val : new ObjectRefImpl(source, key, defaultValue);\n}\n\nclass ComputedRefImpl {\n constructor(fn, setter, isSSR) {\n this.fn = fn;\n this.setter = setter;\n /**\n * @internal\n */\n this._value = void 0;\n /**\n * @internal\n */\n this.dep = new Dep(this);\n /**\n * @internal\n */\n this.__v_isRef = true;\n // TODO isolatedDeclarations \"__v_isReadonly\"\n // A computed is also a subscriber that tracks other deps\n /**\n * @internal\n */\n this.deps = void 0;\n /**\n * @internal\n */\n this.depsTail = void 0;\n /**\n * @internal\n */\n this.flags = 16;\n /**\n * @internal\n */\n this.globalVersion = globalVersion - 1;\n /**\n * @internal\n */\n this.next = void 0;\n // for backwards compat\n this.effect = this;\n this[\"__v_isReadonly\"] = !setter;\n this.isSSR = isSSR;\n }\n /**\n * @internal\n */\n notify() {\n this.flags |= 16;\n if (!(this.flags & 8) && // avoid infinite self recursion\n activeSub !== this) {\n batch(this, true);\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\")) ;\n }\n get value() {\n const link = !!(process.env.NODE_ENV !== \"production\") ? this.dep.track({\n target: this,\n type: \"get\",\n key: \"value\"\n }) : this.dep.track();\n refreshComputed(this);\n if (link) {\n link.version = this.dep.version;\n }\n return this._value;\n }\n set value(newValue) {\n if (this.setter) {\n this.setter(newValue);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\"Write operation failed: computed value is readonly\");\n }\n }\n}\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n let getter;\n let setter;\n if (isFunction(getterOrOptions)) {\n getter = getterOrOptions;\n } else {\n getter = getterOrOptions.get;\n setter = getterOrOptions.set;\n }\n const cRef = new ComputedRefImpl(getter, setter, isSSR);\n if (!!(process.env.NODE_ENV !== \"production\") && debugOptions && !isSSR) {\n cRef.onTrack = debugOptions.onTrack;\n cRef.onTrigger = debugOptions.onTrigger;\n }\n return cRef;\n}\n\nconst TrackOpTypes = {\n \"GET\": \"get\",\n \"HAS\": \"has\",\n \"ITERATE\": \"iterate\"\n};\nconst TriggerOpTypes = {\n \"SET\": \"set\",\n \"ADD\": \"add\",\n \"DELETE\": \"delete\",\n \"CLEAR\": \"clear\"\n};\nconst ReactiveFlags = {\n \"SKIP\": \"__v_skip\",\n \"IS_REACTIVE\": \"__v_isReactive\",\n \"IS_READONLY\": \"__v_isReadonly\",\n \"IS_SHALLOW\": \"__v_isShallow\",\n \"RAW\": \"__v_raw\",\n \"IS_REF\": \"__v_isRef\"\n};\n\nconst WatchErrorCodes = {\n \"WATCH_GETTER\": 2,\n \"2\": \"WATCH_GETTER\",\n \"WATCH_CALLBACK\": 3,\n \"3\": \"WATCH_CALLBACK\",\n \"WATCH_CLEANUP\": 4,\n \"4\": \"WATCH_CLEANUP\"\n};\nconst INITIAL_WATCHER_VALUE = {};\nconst cleanupMap = /* @__PURE__ */ new WeakMap();\nlet activeWatcher = void 0;\nfunction getCurrentWatcher() {\n return activeWatcher;\n}\nfunction onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) {\n if (owner) {\n let cleanups = cleanupMap.get(owner);\n if (!cleanups) cleanupMap.set(owner, cleanups = []);\n cleanups.push(cleanupFn);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onWatcherCleanup() was called when there was no active watcher to associate with.`\n );\n }\n}\nfunction watch(source, cb, options = EMPTY_OBJ) {\n const { immediate, deep, once, scheduler, augmentJob, call } = options;\n const warnInvalidSource = (s) => {\n (options.onWarn || warn)(\n `Invalid watch source: `,\n s,\n `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`\n );\n };\n const reactiveGetter = (source2) => {\n if (deep) return source2;\n if (isShallow(source2) || deep === false || deep === 0)\n return traverse(source2, 1);\n return traverse(source2);\n };\n let effect;\n let getter;\n let cleanup;\n let boundCleanup;\n let forceTrigger = false;\n let isMultiSource = false;\n if (isRef(source)) {\n getter = () => source.value;\n forceTrigger = isShallow(source);\n } else if (isReactive(source)) {\n getter = () => reactiveGetter(source);\n forceTrigger = true;\n } else if (isArray(source)) {\n isMultiSource = true;\n forceTrigger = source.some((s) => isReactive(s) || isShallow(s));\n getter = () => source.map((s) => {\n if (isRef(s)) {\n return s.value;\n } else if (isReactive(s)) {\n return reactiveGetter(s);\n } else if (isFunction(s)) {\n return call ? call(s, 2) : s();\n } else {\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(s);\n }\n });\n } else if (isFunction(source)) {\n if (cb) {\n getter = call ? () => call(source, 2) : source;\n } else {\n getter = () => {\n if (cleanup) {\n pauseTracking();\n try {\n cleanup();\n } finally {\n resetTracking();\n }\n }\n const currentEffect = activeWatcher;\n activeWatcher = effect;\n try {\n return call ? call(source, 3, [boundCleanup]) : source(boundCleanup);\n } finally {\n activeWatcher = currentEffect;\n }\n };\n }\n } else {\n getter = NOOP;\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(source);\n }\n if (cb && deep) {\n const baseGetter = getter;\n const depth = deep === true ? Infinity : deep;\n getter = () => traverse(baseGetter(), depth);\n }\n const scope = getCurrentScope();\n const watchHandle = () => {\n effect.stop();\n if (scope && scope.active) {\n remove(scope.effects, effect);\n }\n };\n if (once && cb) {\n const _cb = cb;\n cb = (...args) => {\n _cb(...args);\n watchHandle();\n };\n }\n let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;\n const job = (immediateFirstRun) => {\n if (!(effect.flags & 1) || !effect.dirty && !immediateFirstRun) {\n return;\n }\n if (cb) {\n const newValue = effect.run();\n if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue))) {\n if (cleanup) {\n cleanup();\n }\n const currentWatcher = activeWatcher;\n activeWatcher = effect;\n try {\n const args = [\n newValue,\n // pass undefined as the old value when it's changed for the first time\n oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,\n boundCleanup\n ];\n oldValue = newValue;\n call ? call(cb, 3, args) : (\n // @ts-expect-error\n cb(...args)\n );\n } finally {\n activeWatcher = currentWatcher;\n }\n }\n } else {\n effect.run();\n }\n };\n if (augmentJob) {\n augmentJob(job);\n }\n effect = new ReactiveEffect(getter);\n effect.scheduler = scheduler ? () => scheduler(job, false) : job;\n boundCleanup = (fn) => onWatcherCleanup(fn, false, effect);\n cleanup = effect.onStop = () => {\n const cleanups = cleanupMap.get(effect);\n if (cleanups) {\n if (call) {\n call(cleanups, 4);\n } else {\n for (const cleanup2 of cleanups) cleanup2();\n }\n cleanupMap.delete(effect);\n }\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n effect.onTrack = options.onTrack;\n effect.onTrigger = options.onTrigger;\n }\n if (cb) {\n if (immediate) {\n job(true);\n } else {\n oldValue = effect.run();\n }\n } else if (scheduler) {\n scheduler(job.bind(null, true), true);\n } else {\n effect.run();\n }\n watchHandle.pause = effect.pause.bind(effect);\n watchHandle.resume = effect.resume.bind(effect);\n watchHandle.stop = watchHandle;\n return watchHandle;\n}\nfunction traverse(value, depth = Infinity, seen) {\n if (depth <= 0 || !isObject(value) || value[\"__v_skip\"]) {\n return value;\n }\n seen = seen || /* @__PURE__ */ new Map();\n if ((seen.get(value) || 0) >= depth) {\n return value;\n }\n seen.set(value, depth);\n depth--;\n if (isRef(value)) {\n traverse(value.value, depth, seen);\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n traverse(value[i], depth, seen);\n }\n } else if (isSet(value) || isMap(value)) {\n value.forEach((v) => {\n traverse(v, depth, seen);\n });\n } else if (isPlainObject(value)) {\n for (const key in value) {\n traverse(value[key], depth, seen);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n if (Object.prototype.propertyIsEnumerable.call(value, key)) {\n traverse(value[key], depth, seen);\n }\n }\n }\n return value;\n}\n\nexport { ARRAY_ITERATE_KEY, EffectFlags, EffectScope, ITERATE_KEY, MAP_KEY_ITERATE_KEY, ReactiveEffect, ReactiveFlags, TrackOpTypes, TriggerOpTypes, WatchErrorCodes, computed, customRef, effect, effectScope, enableTracking, getCurrentScope, getCurrentWatcher, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onEffectCleanup, onScopeDispose, onWatcherCleanup, pauseTracking, proxyRefs, reactive, reactiveReadArray, readonly, ref, resetTracking, shallowReactive, shallowReadArray, shallowReadonly, shallowRef, stop, toRaw, toReactive, toReadonly, toRef, toRefs, toValue, track, traverse, trigger, triggerRef, unref, watch };\n","/**\n* @vue/shared v3.5.22\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n// @__NO_SIDE_EFFECTS__\nfunction makeMap(str) {\n const map = /* @__PURE__ */ Object.create(null);\n for (const key of str.split(\",\")) map[key] = 1;\n return (val) => val in map;\n}\n\nconst EMPTY_OBJ = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze({}) : {};\nconst EMPTY_ARR = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze([]) : [];\nconst NOOP = () => {\n};\nconst NO = () => false;\nconst isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter\n(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);\nconst isModelListener = (key) => key.startsWith(\"onUpdate:\");\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n const i = arr.indexOf(el);\n if (i > -1) {\n arr.splice(i, 1);\n }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === \"[object Map]\";\nconst isSet = (val) => toTypeString(val) === \"[object Set]\";\nconst isDate = (val) => toTypeString(val) === \"[object Date]\";\nconst isRegExp = (val) => toTypeString(val) === \"[object RegExp]\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isString = (val) => typeof val === \"string\";\nconst isSymbol = (val) => typeof val === \"symbol\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isPromise = (val) => {\n return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === \"[object Object]\";\nconst isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nconst isReservedProp = /* @__PURE__ */ makeMap(\n // the leading comma is intentional so empty string \"\" is also included\n \",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"\n);\nconst isBuiltInDirective = /* @__PURE__ */ makeMap(\n \"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"\n);\nconst cacheStringFunction = (fn) => {\n const cache = /* @__PURE__ */ Object.create(null);\n return ((str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n });\n};\nconst camelizeRE = /-\\w/g;\nconst camelize = cacheStringFunction(\n (str) => {\n return str.replace(camelizeRE, (c) => c.slice(1).toUpperCase());\n }\n);\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction(\n (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nconst capitalize = cacheStringFunction((str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n});\nconst toHandlerKey = cacheStringFunction(\n (str) => {\n const s = str ? `on${capitalize(str)}` : ``;\n return s;\n }\n);\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, ...arg) => {\n for (let i = 0; i < fns.length; i++) {\n fns[i](...arg);\n }\n};\nconst def = (obj, key, value, writable = false) => {\n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: false,\n writable,\n value\n });\n};\nconst looseToNumber = (val) => {\n const n = parseFloat(val);\n return isNaN(n) ? val : n;\n};\nconst toNumber = (val) => {\n const n = isString(val) ? Number(val) : NaN;\n return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n return _globalThis || (_globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : {});\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n return identRE.test(name) ? `__props.${name}` : `__props[${JSON.stringify(name)}]`;\n}\nfunction genCacheKey(source, options) {\n return source + JSON.stringify(\n options,\n (_, val) => typeof val === \"function\" ? val.toString() : val\n );\n}\n\nconst PatchFlags = {\n \"TEXT\": 1,\n \"1\": \"TEXT\",\n \"CLASS\": 2,\n \"2\": \"CLASS\",\n \"STYLE\": 4,\n \"4\": \"STYLE\",\n \"PROPS\": 8,\n \"8\": \"PROPS\",\n \"FULL_PROPS\": 16,\n \"16\": \"FULL_PROPS\",\n \"NEED_HYDRATION\": 32,\n \"32\": \"NEED_HYDRATION\",\n \"STABLE_FRAGMENT\": 64,\n \"64\": \"STABLE_FRAGMENT\",\n \"KEYED_FRAGMENT\": 128,\n \"128\": \"KEYED_FRAGMENT\",\n \"UNKEYED_FRAGMENT\": 256,\n \"256\": \"UNKEYED_FRAGMENT\",\n \"NEED_PATCH\": 512,\n \"512\": \"NEED_PATCH\",\n \"DYNAMIC_SLOTS\": 1024,\n \"1024\": \"DYNAMIC_SLOTS\",\n \"DEV_ROOT_FRAGMENT\": 2048,\n \"2048\": \"DEV_ROOT_FRAGMENT\",\n \"CACHED\": -1,\n \"-1\": \"CACHED\",\n \"BAIL\": -2,\n \"-2\": \"BAIL\"\n};\nconst PatchFlagNames = {\n [1]: `TEXT`,\n [2]: `CLASS`,\n [4]: `STYLE`,\n [8]: `PROPS`,\n [16]: `FULL_PROPS`,\n [32]: `NEED_HYDRATION`,\n [64]: `STABLE_FRAGMENT`,\n [128]: `KEYED_FRAGMENT`,\n [256]: `UNKEYED_FRAGMENT`,\n [512]: `NEED_PATCH`,\n [1024]: `DYNAMIC_SLOTS`,\n [2048]: `DEV_ROOT_FRAGMENT`,\n [-1]: `CACHED`,\n [-2]: `BAIL`\n};\n\nconst ShapeFlags = {\n \"ELEMENT\": 1,\n \"1\": \"ELEMENT\",\n \"FUNCTIONAL_COMPONENT\": 2,\n \"2\": \"FUNCTIONAL_COMPONENT\",\n \"STATEFUL_COMPONENT\": 4,\n \"4\": \"STATEFUL_COMPONENT\",\n \"TEXT_CHILDREN\": 8,\n \"8\": \"TEXT_CHILDREN\",\n \"ARRAY_CHILDREN\": 16,\n \"16\": \"ARRAY_CHILDREN\",\n \"SLOTS_CHILDREN\": 32,\n \"32\": \"SLOTS_CHILDREN\",\n \"TELEPORT\": 64,\n \"64\": \"TELEPORT\",\n \"SUSPENSE\": 128,\n \"128\": \"SUSPENSE\",\n \"COMPONENT_SHOULD_KEEP_ALIVE\": 256,\n \"256\": \"COMPONENT_SHOULD_KEEP_ALIVE\",\n \"COMPONENT_KEPT_ALIVE\": 512,\n \"512\": \"COMPONENT_KEPT_ALIVE\",\n \"COMPONENT\": 6,\n \"6\": \"COMPONENT\"\n};\n\nconst SlotFlags = {\n \"STABLE\": 1,\n \"1\": \"STABLE\",\n \"DYNAMIC\": 2,\n \"2\": \"DYNAMIC\",\n \"FORWARDED\": 3,\n \"3\": \"FORWARDED\"\n};\nconst slotFlagsText = {\n [1]: \"STABLE\",\n [2]: \"DYNAMIC\",\n [3]: \"FORWARDED\"\n};\n\nconst GLOBALS_ALLOWED = \"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol\";\nconst isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED);\nconst isGloballyWhitelisted = isGloballyAllowed;\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n start = Math.max(0, Math.min(start, source.length));\n end = Math.max(0, Math.min(end, source.length));\n if (start > end) return \"\";\n let lines = source.split(/(\\r?\\n)/);\n const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n lines = lines.filter((_, idx) => idx % 2 === 0);\n let count = 0;\n const res = [];\n for (let i = 0; i < lines.length; i++) {\n count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);\n if (count >= start) {\n for (let j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length) continue;\n const line = j + 1;\n res.push(\n `${line}${\" \".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`\n );\n const lineLength = lines[j].length;\n const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;\n if (j === i) {\n const pad = start - (count - (lineLength + newLineSeqLength));\n const length = Math.max(\n 1,\n end > count ? lineLength - pad : end - start\n );\n res.push(` | ` + \" \".repeat(pad) + \"^\".repeat(length));\n } else if (j > i) {\n if (end > count) {\n const length = Math.max(Math.min(end - count, lineLength), 1);\n res.push(` | ` + \"^\".repeat(length));\n }\n count += lineLength + newLineSeqLength;\n }\n }\n break;\n }\n }\n return res.join(\"\\n\");\n}\n\nfunction normalizeStyle(value) {\n if (isArray(value)) {\n const res = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);\n if (normalized) {\n for (const key in normalized) {\n res[key] = normalized[key];\n }\n }\n }\n return res;\n } else if (isString(value) || isObject(value)) {\n return value;\n }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*[^]*?\\*\\//g;\nfunction parseStringStyle(cssText) {\n const ret = {};\n cssText.replace(styleCommentRE, \"\").split(listDelimiterRE).forEach((item) => {\n if (item) {\n const tmp = item.split(propertyDelimiterRE);\n tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return ret;\n}\nfunction stringifyStyle(styles) {\n if (!styles) return \"\";\n if (isString(styles)) return styles;\n let ret = \"\";\n for (const key in styles) {\n const value = styles[key];\n if (isString(value) || typeof value === \"number\") {\n const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n ret += `${normalizedKey}:${value};`;\n }\n }\n return ret;\n}\nfunction normalizeClass(value) {\n let res = \"\";\n if (isString(value)) {\n res = value;\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const normalized = normalizeClass(value[i]);\n if (normalized) {\n res += normalized + \" \";\n }\n }\n } else if (isObject(value)) {\n for (const name in value) {\n if (value[name]) {\n res += name + \" \";\n }\n }\n }\n return res.trim();\n}\nfunction normalizeProps(props) {\n if (!props) return null;\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (style) {\n props.style = normalizeStyle(style);\n }\n return props;\n}\n\nconst HTML_TAGS = \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\";\nconst SVG_TAGS = \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\";\nconst MATH_TAGS = \"annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics\";\nconst VOID_TAGS = \"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\";\nconst isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);\nconst isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);\nconst isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS);\nconst isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);\n\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);\nconst isBooleanAttr = /* @__PURE__ */ makeMap(\n specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`\n);\nfunction includeBooleanAttr(value) {\n return !!value || value === \"\";\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n if (attrValidationCache.hasOwnProperty(name)) {\n return attrValidationCache[name];\n }\n const isUnsafe = unsafeAttrCharRE.test(name);\n if (isUnsafe) {\n console.error(`unsafe attribute name: ${name}`);\n }\n return attrValidationCache[name] = !isUnsafe;\n}\nconst propsToAttrMap = {\n acceptCharset: \"accept-charset\",\n className: \"class\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\"\n};\nconst isKnownHtmlAttr = /* @__PURE__ */ makeMap(\n `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`\n);\nconst isKnownSvgAttr = /* @__PURE__ */ makeMap(\n `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`\n);\nconst isKnownMathMLAttr = /* @__PURE__ */ makeMap(\n `accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns`\n);\nfunction isRenderableAttrValue(value) {\n if (value == null) {\n return false;\n }\n const type = typeof value;\n return type === \"string\" || type === \"number\" || type === \"boolean\";\n}\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n const str = \"\" + string;\n const match = escapeRE.exec(str);\n if (!match) {\n return str;\n }\n let html = \"\";\n let escaped;\n let index;\n let lastIndex = 0;\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escaped = \""\";\n break;\n case 38:\n escaped = \"&\";\n break;\n case 39:\n escaped = \"'\";\n break;\n case 60:\n escaped = \"<\";\n break;\n case 62:\n escaped = \">\";\n break;\n default:\n continue;\n }\n if (lastIndex !== index) {\n html += str.slice(lastIndex, index);\n }\n lastIndex = index + 1;\n html += escaped;\n }\n return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\nconst commentStripRE = /^-?>||--!>|?@[\\\\\\]^`{|}~]/g;\nfunction getEscapedCssVarName(key, doubleEscape) {\n return key.replace(\n cssVarNameEscapeSymbolsRE,\n (s) => doubleEscape ? s === '\"' ? '\\\\\\\\\\\\\"' : `\\\\\\\\${s}` : `\\\\${s}`\n );\n}\n\nfunction looseCompareArrays(a, b) {\n if (a.length !== b.length) return false;\n let equal = true;\n for (let i = 0; equal && i < a.length; i++) {\n equal = looseEqual(a[i], b[i]);\n }\n return equal;\n}\nfunction looseEqual(a, b) {\n if (a === b) return true;\n let aValidType = isDate(a);\n let bValidType = isDate(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n }\n aValidType = isSymbol(a);\n bValidType = isSymbol(b);\n if (aValidType || bValidType) {\n return a === b;\n }\n aValidType = isArray(a);\n bValidType = isArray(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n }\n aValidType = isObject(a);\n bValidType = isObject(b);\n if (aValidType || bValidType) {\n if (!aValidType || !bValidType) {\n return false;\n }\n const aKeysCount = Object.keys(a).length;\n const bKeysCount = Object.keys(b).length;\n if (aKeysCount !== bKeysCount) {\n return false;\n }\n for (const key in a) {\n const aHasKey = a.hasOwnProperty(key);\n const bHasKey = b.hasOwnProperty(key);\n if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) {\n return false;\n }\n }\n }\n return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n return arr.findIndex((item) => looseEqual(item, val));\n}\n\nconst isRef = (val) => {\n return !!(val && val[\"__v_isRef\"] === true);\n};\nconst toDisplayString = (val) => {\n return isString(val) ? val : val == null ? \"\" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val);\n};\nconst replacer = (_key, val) => {\n if (isRef(val)) {\n return replacer(_key, val.value);\n } else if (isMap(val)) {\n return {\n [`Map(${val.size})`]: [...val.entries()].reduce(\n (entries, [key, val2], i) => {\n entries[stringifySymbol(key, i) + \" =>\"] = val2;\n return entries;\n },\n {}\n )\n };\n } else if (isSet(val)) {\n return {\n [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))\n };\n } else if (isSymbol(val)) {\n return stringifySymbol(val);\n } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n return String(val);\n }\n return val;\n};\nconst stringifySymbol = (v, i = \"\") => {\n var _a;\n return (\n // Symbol.description in es2019+ so we need to cast here to pass\n // the lib: es2016 check\n isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v\n );\n};\n\nfunction normalizeCssVarValue(value) {\n if (value == null) {\n return \"initial\";\n }\n if (typeof value === \"string\") {\n return value === \"\" ? \" \" : value;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n console.warn(\n \"[Vue warn] Invalid value used for CSS binding. Expected a string or a finite number but received:\",\n value\n );\n }\n }\n return String(value);\n}\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, PatchFlags, ShapeFlags, SlotFlags, camelize, capitalize, cssVarNameEscapeSymbolsRE, def, escapeHtml, escapeHtmlComment, extend, genCacheKey, genPropsAccessExp, generateCodeFrame, getEscapedCssVarName, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyAllowed, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownMathMLAttr, isKnownSvgAttr, isMap, isMathMLTag, isModelListener, isObject, isOn, isPlainObject, isPromise, isRegExp, isRenderableAttrValue, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, looseToNumber, makeMap, normalizeClass, normalizeCssVarValue, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n","/**\n* @vue/runtime-core v3.5.22\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { pauseTracking, resetTracking, isRef, toRaw, traverse, shallowRef, readonly, isReactive, ref, isShallow, isReadonly, shallowReadArray, toReadonly, toReactive, shallowReadonly, track, reactive, shallowReactive, trigger, ReactiveEffect, watch as watch$1, customRef, isProxy, proxyRefs, markRaw, EffectScope, computed as computed$1 } from '@vue/reactivity';\nexport { EffectScope, ReactiveEffect, TrackOpTypes, TriggerOpTypes, customRef, effect, effectScope, getCurrentScope, getCurrentWatcher, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, onWatcherCleanup, proxyRefs, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, toValue, triggerRef, unref } from '@vue/reactivity';\nimport { isString, isFunction, EMPTY_OBJ, isPromise, isArray, NOOP, getGlobalThis, extend, isBuiltInDirective, NO, hasOwn, remove, def, isOn, isReservedProp, normalizeClass, stringifyStyle, normalizeStyle, isKnownSvgAttr, isBooleanAttr, isKnownHtmlAttr, includeBooleanAttr, isRenderableAttrValue, normalizeCssVarValue, getEscapedCssVarName, isObject, isRegExp, invokeArrayFns, toHandlerKey, camelize, capitalize, isSymbol, isGloballyAllowed, EMPTY_ARR, hyphenate, makeMap, toRawType, hasChanged, looseToNumber, isModelListener, toNumber } from '@vue/shared';\nexport { camelize, capitalize, normalizeClass, normalizeProps, normalizeStyle, toDisplayString, toHandlerKey } from '@vue/shared';\n\nconst stack = [];\nfunction pushWarningContext(vnode) {\n stack.push(vnode);\n}\nfunction popWarningContext() {\n stack.pop();\n}\nlet isWarning = false;\nfunction warn$1(msg, ...args) {\n if (isWarning) return;\n isWarning = true;\n pauseTracking();\n const instance = stack.length ? stack[stack.length - 1].component : null;\n const appWarnHandler = instance && instance.appContext.config.warnHandler;\n const trace = getComponentTrace();\n if (appWarnHandler) {\n callWithErrorHandling(\n appWarnHandler,\n instance,\n 11,\n [\n // eslint-disable-next-line no-restricted-syntax\n msg + args.map((a) => {\n var _a, _b;\n return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a);\n }).join(\"\"),\n instance && instance.proxy,\n trace.map(\n ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`\n ).join(\"\\n\"),\n trace\n ]\n );\n } else {\n const warnArgs = [`[Vue warn]: ${msg}`, ...args];\n if (trace.length && // avoid spamming console during tests\n true) {\n warnArgs.push(`\n`, ...formatTrace(trace));\n }\n console.warn(...warnArgs);\n }\n resetTracking();\n isWarning = false;\n}\nfunction getComponentTrace() {\n let currentVNode = stack[stack.length - 1];\n if (!currentVNode) {\n return [];\n }\n const normalizedStack = [];\n while (currentVNode) {\n const last = normalizedStack[0];\n if (last && last.vnode === currentVNode) {\n last.recurseCount++;\n } else {\n normalizedStack.push({\n vnode: currentVNode,\n recurseCount: 0\n });\n }\n const parentInstance = currentVNode.component && currentVNode.component.parent;\n currentVNode = parentInstance && parentInstance.vnode;\n }\n return normalizedStack;\n}\nfunction formatTrace(trace) {\n const logs = [];\n trace.forEach((entry, i) => {\n logs.push(...i === 0 ? [] : [`\n`], ...formatTraceEntry(entry));\n });\n return logs;\n}\nfunction formatTraceEntry({ vnode, recurseCount }) {\n const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;\n const isRoot = vnode.component ? vnode.component.parent == null : false;\n const open = ` at <${formatComponentName(\n vnode.component,\n vnode.type,\n isRoot\n )}`;\n const close = `>` + postfix;\n return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close];\n}\nfunction formatProps(props) {\n const res = [];\n const keys = Object.keys(props);\n keys.slice(0, 3).forEach((key) => {\n res.push(...formatProp(key, props[key]));\n });\n if (keys.length > 3) {\n res.push(` ...`);\n }\n return res;\n}\nfunction formatProp(key, value, raw) {\n if (isString(value)) {\n value = JSON.stringify(value);\n return raw ? value : [`${key}=${value}`];\n } else if (typeof value === \"number\" || typeof value === \"boolean\" || value == null) {\n return raw ? value : [`${key}=${value}`];\n } else if (isRef(value)) {\n value = formatProp(key, toRaw(value.value), true);\n return raw ? value : [`${key}=Ref<`, value, `>`];\n } else if (isFunction(value)) {\n return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];\n } else {\n value = toRaw(value);\n return raw ? value : [`${key}=`, value];\n }\n}\nfunction assertNumber(val, type) {\n if (!!!(process.env.NODE_ENV !== \"production\")) return;\n if (val === void 0) {\n return;\n } else if (typeof val !== \"number\") {\n warn$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`);\n } else if (isNaN(val)) {\n warn$1(`${type} is NaN - the duration expression might be incorrect.`);\n }\n}\n\nconst ErrorCodes = {\n \"SETUP_FUNCTION\": 0,\n \"0\": \"SETUP_FUNCTION\",\n \"RENDER_FUNCTION\": 1,\n \"1\": \"RENDER_FUNCTION\",\n \"NATIVE_EVENT_HANDLER\": 5,\n \"5\": \"NATIVE_EVENT_HANDLER\",\n \"COMPONENT_EVENT_HANDLER\": 6,\n \"6\": \"COMPONENT_EVENT_HANDLER\",\n \"VNODE_HOOK\": 7,\n \"7\": \"VNODE_HOOK\",\n \"DIRECTIVE_HOOK\": 8,\n \"8\": \"DIRECTIVE_HOOK\",\n \"TRANSITION_HOOK\": 9,\n \"9\": \"TRANSITION_HOOK\",\n \"APP_ERROR_HANDLER\": 10,\n \"10\": \"APP_ERROR_HANDLER\",\n \"APP_WARN_HANDLER\": 11,\n \"11\": \"APP_WARN_HANDLER\",\n \"FUNCTION_REF\": 12,\n \"12\": \"FUNCTION_REF\",\n \"ASYNC_COMPONENT_LOADER\": 13,\n \"13\": \"ASYNC_COMPONENT_LOADER\",\n \"SCHEDULER\": 14,\n \"14\": \"SCHEDULER\",\n \"COMPONENT_UPDATE\": 15,\n \"15\": \"COMPONENT_UPDATE\",\n \"APP_UNMOUNT_CLEANUP\": 16,\n \"16\": \"APP_UNMOUNT_CLEANUP\"\n};\nconst ErrorTypeStrings$1 = {\n [\"sp\"]: \"serverPrefetch hook\",\n [\"bc\"]: \"beforeCreate hook\",\n [\"c\"]: \"created hook\",\n [\"bm\"]: \"beforeMount hook\",\n [\"m\"]: \"mounted hook\",\n [\"bu\"]: \"beforeUpdate hook\",\n [\"u\"]: \"updated\",\n [\"bum\"]: \"beforeUnmount hook\",\n [\"um\"]: \"unmounted hook\",\n [\"a\"]: \"activated hook\",\n [\"da\"]: \"deactivated hook\",\n [\"ec\"]: \"errorCaptured hook\",\n [\"rtc\"]: \"renderTracked hook\",\n [\"rtg\"]: \"renderTriggered hook\",\n [0]: \"setup function\",\n [1]: \"render function\",\n [2]: \"watcher getter\",\n [3]: \"watcher callback\",\n [4]: \"watcher cleanup function\",\n [5]: \"native event handler\",\n [6]: \"component event handler\",\n [7]: \"vnode hook\",\n [8]: \"directive hook\",\n [9]: \"transition hook\",\n [10]: \"app errorHandler\",\n [11]: \"app warnHandler\",\n [12]: \"ref function\",\n [13]: \"async component loader\",\n [14]: \"scheduler flush\",\n [15]: \"component update\",\n [16]: \"app unmount cleanup function\"\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n try {\n return args ? fn(...args) : fn();\n } catch (err) {\n handleError(err, instance, type);\n }\n}\nfunction callWithAsyncErrorHandling(fn, instance, type, args) {\n if (isFunction(fn)) {\n const res = callWithErrorHandling(fn, instance, type, args);\n if (res && isPromise(res)) {\n res.catch((err) => {\n handleError(err, instance, type);\n });\n }\n return res;\n }\n if (isArray(fn)) {\n const values = [];\n for (let i = 0; i < fn.length; i++) {\n values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));\n }\n return values;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof fn}`\n );\n }\n}\nfunction handleError(err, instance, type, throwInDev = true) {\n const contextVNode = instance ? instance.vnode : null;\n const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || EMPTY_OBJ;\n if (instance) {\n let cur = instance.parent;\n const exposedInstance = instance.proxy;\n const errorInfo = !!(process.env.NODE_ENV !== \"production\") ? ErrorTypeStrings$1[type] : `https://vuejs.org/error-reference/#runtime-${type}`;\n while (cur) {\n const errorCapturedHooks = cur.ec;\n if (errorCapturedHooks) {\n for (let i = 0; i < errorCapturedHooks.length; i++) {\n if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n return;\n }\n }\n }\n cur = cur.parent;\n }\n if (errorHandler) {\n pauseTracking();\n callWithErrorHandling(errorHandler, null, 10, [\n err,\n exposedInstance,\n errorInfo\n ]);\n resetTracking();\n return;\n }\n }\n logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction);\n}\nfunction logError(err, type, contextVNode, throwInDev = true, throwInProd = false) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const info = ErrorTypeStrings$1[type];\n if (contextVNode) {\n pushWarningContext(contextVNode);\n }\n warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`);\n if (contextVNode) {\n popWarningContext();\n }\n if (throwInDev) {\n throw err;\n } else {\n console.error(err);\n }\n } else if (throwInProd) {\n throw err;\n } else {\n console.error(err);\n }\n}\n\nconst queue = [];\nlet flushIndex = -1;\nconst pendingPostFlushCbs = [];\nlet activePostFlushCbs = null;\nlet postFlushIndex = 0;\nconst resolvedPromise = /* @__PURE__ */ Promise.resolve();\nlet currentFlushPromise = null;\nconst RECURSION_LIMIT = 100;\nfunction nextTick(fn) {\n const p = currentFlushPromise || resolvedPromise;\n return fn ? p.then(this ? fn.bind(this) : fn) : p;\n}\nfunction findInsertionIndex(id) {\n let start = flushIndex + 1;\n let end = queue.length;\n while (start < end) {\n const middle = start + end >>> 1;\n const middleJob = queue[middle];\n const middleJobId = getId(middleJob);\n if (middleJobId < id || middleJobId === id && middleJob.flags & 2) {\n start = middle + 1;\n } else {\n end = middle;\n }\n }\n return start;\n}\nfunction queueJob(job) {\n if (!(job.flags & 1)) {\n const jobId = getId(job);\n const lastJob = queue[queue.length - 1];\n if (!lastJob || // fast path when the job id is larger than the tail\n !(job.flags & 2) && jobId >= getId(lastJob)) {\n queue.push(job);\n } else {\n queue.splice(findInsertionIndex(jobId), 0, job);\n }\n job.flags |= 1;\n queueFlush();\n }\n}\nfunction queueFlush() {\n if (!currentFlushPromise) {\n currentFlushPromise = resolvedPromise.then(flushJobs);\n }\n}\nfunction queuePostFlushCb(cb) {\n if (!isArray(cb)) {\n if (activePostFlushCbs && cb.id === -1) {\n activePostFlushCbs.splice(postFlushIndex + 1, 0, cb);\n } else if (!(cb.flags & 1)) {\n pendingPostFlushCbs.push(cb);\n cb.flags |= 1;\n }\n } else {\n pendingPostFlushCbs.push(...cb);\n }\n queueFlush();\n}\nfunction flushPreFlushCbs(instance, seen, i = flushIndex + 1) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (; i < queue.length; i++) {\n const cb = queue[i];\n if (cb && cb.flags & 2) {\n if (instance && cb.id !== instance.uid) {\n continue;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n queue.splice(i, 1);\n i--;\n if (cb.flags & 4) {\n cb.flags &= -2;\n }\n cb();\n if (!(cb.flags & 4)) {\n cb.flags &= -2;\n }\n }\n }\n}\nfunction flushPostFlushCbs(seen) {\n if (pendingPostFlushCbs.length) {\n const deduped = [...new Set(pendingPostFlushCbs)].sort(\n (a, b) => getId(a) - getId(b)\n );\n pendingPostFlushCbs.length = 0;\n if (activePostFlushCbs) {\n activePostFlushCbs.push(...deduped);\n return;\n }\n activePostFlushCbs = deduped;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\n const cb = activePostFlushCbs[postFlushIndex];\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n if (cb.flags & 4) {\n cb.flags &= -2;\n }\n if (!(cb.flags & 8)) cb();\n cb.flags &= -2;\n }\n activePostFlushCbs = null;\n postFlushIndex = 0;\n }\n}\nconst getId = (job) => job.id == null ? job.flags & 2 ? -1 : Infinity : job.id;\nfunction flushJobs(seen) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n const check = !!(process.env.NODE_ENV !== \"production\") ? (job) => checkRecursiveUpdates(seen, job) : NOOP;\n try {\n for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job && !(job.flags & 8)) {\n if (!!(process.env.NODE_ENV !== \"production\") && check(job)) {\n continue;\n }\n if (job.flags & 4) {\n job.flags &= ~1;\n }\n callWithErrorHandling(\n job,\n job.i,\n job.i ? 15 : 14\n );\n if (!(job.flags & 4)) {\n job.flags &= ~1;\n }\n }\n }\n } finally {\n for (; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job) {\n job.flags &= -2;\n }\n }\n flushIndex = -1;\n queue.length = 0;\n flushPostFlushCbs(seen);\n currentFlushPromise = null;\n if (queue.length || pendingPostFlushCbs.length) {\n flushJobs(seen);\n }\n }\n}\nfunction checkRecursiveUpdates(seen, fn) {\n const count = seen.get(fn) || 0;\n if (count > RECURSION_LIMIT) {\n const instance = fn.i;\n const componentName = instance && getComponentName(instance.type);\n handleError(\n `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,\n null,\n 10\n );\n return true;\n }\n seen.set(fn, count + 1);\n return false;\n}\n\nlet isHmrUpdating = false;\nconst hmrDirtyComponents = /* @__PURE__ */ new Map();\nif (!!(process.env.NODE_ENV !== \"production\")) {\n getGlobalThis().__VUE_HMR_RUNTIME__ = {\n createRecord: tryWrap(createRecord),\n rerender: tryWrap(rerender),\n reload: tryWrap(reload)\n };\n}\nconst map = /* @__PURE__ */ new Map();\nfunction registerHMR(instance) {\n const id = instance.type.__hmrId;\n let record = map.get(id);\n if (!record) {\n createRecord(id, instance.type);\n record = map.get(id);\n }\n record.instances.add(instance);\n}\nfunction unregisterHMR(instance) {\n map.get(instance.type.__hmrId).instances.delete(instance);\n}\nfunction createRecord(id, initialDef) {\n if (map.has(id)) {\n return false;\n }\n map.set(id, {\n initialDef: normalizeClassComponent(initialDef),\n instances: /* @__PURE__ */ new Set()\n });\n return true;\n}\nfunction normalizeClassComponent(component) {\n return isClassComponent(component) ? component.__vccOpts : component;\n}\nfunction rerender(id, newRender) {\n const record = map.get(id);\n if (!record) {\n return;\n }\n record.initialDef.render = newRender;\n [...record.instances].forEach((instance) => {\n if (newRender) {\n instance.render = newRender;\n normalizeClassComponent(instance.type).render = newRender;\n }\n instance.renderCache = [];\n isHmrUpdating = true;\n if (!(instance.job.flags & 8)) {\n instance.update();\n }\n isHmrUpdating = false;\n });\n}\nfunction reload(id, newComp) {\n const record = map.get(id);\n if (!record) return;\n newComp = normalizeClassComponent(newComp);\n updateComponentDef(record.initialDef, newComp);\n const instances = [...record.instances];\n for (let i = 0; i < instances.length; i++) {\n const instance = instances[i];\n const oldComp = normalizeClassComponent(instance.type);\n let dirtyInstances = hmrDirtyComponents.get(oldComp);\n if (!dirtyInstances) {\n if (oldComp !== record.initialDef) {\n updateComponentDef(oldComp, newComp);\n }\n hmrDirtyComponents.set(oldComp, dirtyInstances = /* @__PURE__ */ new Set());\n }\n dirtyInstances.add(instance);\n instance.appContext.propsCache.delete(instance.type);\n instance.appContext.emitsCache.delete(instance.type);\n instance.appContext.optionsCache.delete(instance.type);\n if (instance.ceReload) {\n dirtyInstances.add(instance);\n instance.ceReload(newComp.styles);\n dirtyInstances.delete(instance);\n } else if (instance.parent) {\n queueJob(() => {\n if (!(instance.job.flags & 8)) {\n isHmrUpdating = true;\n instance.parent.update();\n isHmrUpdating = false;\n dirtyInstances.delete(instance);\n }\n });\n } else if (instance.appContext.reload) {\n instance.appContext.reload();\n } else if (typeof window !== \"undefined\") {\n window.location.reload();\n } else {\n console.warn(\n \"[HMR] Root or manually mounted instance modified. Full reload required.\"\n );\n }\n if (instance.root.ce && instance !== instance.root) {\n instance.root.ce._removeChildStyle(oldComp);\n }\n }\n queuePostFlushCb(() => {\n hmrDirtyComponents.clear();\n });\n}\nfunction updateComponentDef(oldComp, newComp) {\n extend(oldComp, newComp);\n for (const key in oldComp) {\n if (key !== \"__file\" && !(key in newComp)) {\n delete oldComp[key];\n }\n }\n}\nfunction tryWrap(fn) {\n return (id, arg) => {\n try {\n return fn(id, arg);\n } catch (e) {\n console.error(e);\n console.warn(\n `[HMR] Something went wrong during Vue component hot-reload. Full reload required.`\n );\n }\n };\n}\n\nlet devtools$1;\nlet buffer = [];\nlet devtoolsNotInstalled = false;\nfunction emit$1(event, ...args) {\n if (devtools$1) {\n devtools$1.emit(event, ...args);\n } else if (!devtoolsNotInstalled) {\n buffer.push({ event, args });\n }\n}\nfunction setDevtoolsHook$1(hook, target) {\n var _a, _b;\n devtools$1 = hook;\n if (devtools$1) {\n devtools$1.enabled = true;\n buffer.forEach(({ event, args }) => devtools$1.emit(event, ...args));\n buffer = [];\n } else if (\n // handle late devtools injection - only do this if we are in an actual\n // browser environment to avoid the timer handle stalling test runner exit\n // (#4815)\n typeof window !== \"undefined\" && // some envs mock window but not fully\n window.HTMLElement && // also exclude jsdom\n // eslint-disable-next-line no-restricted-syntax\n !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes(\"jsdom\"))\n ) {\n const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [];\n replay.push((newHook) => {\n setDevtoolsHook$1(newHook, target);\n });\n setTimeout(() => {\n if (!devtools$1) {\n target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;\n devtoolsNotInstalled = true;\n buffer = [];\n }\n }, 3e3);\n } else {\n devtoolsNotInstalled = true;\n buffer = [];\n }\n}\nfunction devtoolsInitApp(app, version) {\n emit$1(\"app:init\" /* APP_INIT */, app, version, {\n Fragment,\n Text,\n Comment,\n Static\n });\n}\nfunction devtoolsUnmountApp(app) {\n emit$1(\"app:unmount\" /* APP_UNMOUNT */, app);\n}\nconst devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook(\"component:added\" /* COMPONENT_ADDED */);\nconst devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook(\"component:updated\" /* COMPONENT_UPDATED */);\nconst _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook(\n \"component:removed\" /* COMPONENT_REMOVED */\n);\nconst devtoolsComponentRemoved = (component) => {\n if (devtools$1 && typeof devtools$1.cleanupBuffer === \"function\" && // remove the component if it wasn't buffered\n !devtools$1.cleanupBuffer(component)) {\n _devtoolsComponentRemoved(component);\n }\n};\n// @__NO_SIDE_EFFECTS__\nfunction createDevtoolsComponentHook(hook) {\n return (component) => {\n emit$1(\n hook,\n component.appContext.app,\n component.uid,\n component.parent ? component.parent.uid : void 0,\n component\n );\n };\n}\nconst devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook(\"perf:start\" /* PERFORMANCE_START */);\nconst devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook(\"perf:end\" /* PERFORMANCE_END */);\nfunction createDevtoolsPerformanceHook(hook) {\n return (component, type, time) => {\n emit$1(hook, component.appContext.app, component.uid, component, type, time);\n };\n}\nfunction devtoolsComponentEmit(component, event, params) {\n emit$1(\n \"component:emit\" /* COMPONENT_EMIT */,\n component.appContext.app,\n component,\n event,\n params\n );\n}\n\nlet currentRenderingInstance = null;\nlet currentScopeId = null;\nfunction setCurrentRenderingInstance(instance) {\n const prev = currentRenderingInstance;\n currentRenderingInstance = instance;\n currentScopeId = instance && instance.type.__scopeId || null;\n return prev;\n}\nfunction pushScopeId(id) {\n currentScopeId = id;\n}\nfunction popScopeId() {\n currentScopeId = null;\n}\nconst withScopeId = (_id) => withCtx;\nfunction withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) {\n if (!ctx) return fn;\n if (fn._n) {\n return fn;\n }\n const renderFnWithContext = (...args) => {\n if (renderFnWithContext._d) {\n setBlockTracking(-1);\n }\n const prevInstance = setCurrentRenderingInstance(ctx);\n let res;\n try {\n res = fn(...args);\n } finally {\n setCurrentRenderingInstance(prevInstance);\n if (renderFnWithContext._d) {\n setBlockTracking(1);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentUpdated(ctx);\n }\n return res;\n };\n renderFnWithContext._n = true;\n renderFnWithContext._c = true;\n renderFnWithContext._d = true;\n return renderFnWithContext;\n}\n\nfunction validateDirectiveName(name) {\n if (isBuiltInDirective(name)) {\n warn$1(\"Do not use built-in directive ids as custom directive id: \" + name);\n }\n}\nfunction withDirectives(vnode, directives) {\n if (currentRenderingInstance === null) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`withDirectives can only be used inside render functions.`);\n return vnode;\n }\n const instance = getComponentPublicInstance(currentRenderingInstance);\n const bindings = vnode.dirs || (vnode.dirs = []);\n for (let i = 0; i < directives.length; i++) {\n let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];\n if (dir) {\n if (isFunction(dir)) {\n dir = {\n mounted: dir,\n updated: dir\n };\n }\n if (dir.deep) {\n traverse(value);\n }\n bindings.push({\n dir,\n instance,\n value,\n oldValue: void 0,\n arg,\n modifiers\n });\n }\n }\n return vnode;\n}\nfunction invokeDirectiveHook(vnode, prevVNode, instance, name) {\n const bindings = vnode.dirs;\n const oldBindings = prevVNode && prevVNode.dirs;\n for (let i = 0; i < bindings.length; i++) {\n const binding = bindings[i];\n if (oldBindings) {\n binding.oldValue = oldBindings[i].value;\n }\n let hook = binding.dir[name];\n if (hook) {\n pauseTracking();\n callWithAsyncErrorHandling(hook, instance, 8, [\n vnode.el,\n binding,\n vnode,\n prevVNode\n ]);\n resetTracking();\n }\n }\n}\n\nconst TeleportEndKey = Symbol(\"_vte\");\nconst isTeleport = (type) => type.__isTeleport;\nconst isTeleportDisabled = (props) => props && (props.disabled || props.disabled === \"\");\nconst isTeleportDeferred = (props) => props && (props.defer || props.defer === \"\");\nconst isTargetSVG = (target) => typeof SVGElement !== \"undefined\" && target instanceof SVGElement;\nconst isTargetMathML = (target) => typeof MathMLElement === \"function\" && target instanceof MathMLElement;\nconst resolveTarget = (props, select) => {\n const targetSelector = props && props.to;\n if (isString(targetSelector)) {\n if (!select) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Current renderer does not support string target for Teleports. (missing querySelector renderer option)`\n );\n return null;\n } else {\n const target = select(targetSelector);\n if (!!(process.env.NODE_ENV !== \"production\") && !target && !isTeleportDisabled(props)) {\n warn$1(\n `Failed to locate Teleport target with selector \"${targetSelector}\". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.`\n );\n }\n return target;\n }\n } else {\n if (!!(process.env.NODE_ENV !== \"production\") && !targetSelector && !isTeleportDisabled(props)) {\n warn$1(`Invalid Teleport target: ${targetSelector}`);\n }\n return targetSelector;\n }\n};\nconst TeleportImpl = {\n name: \"Teleport\",\n __isTeleport: true,\n process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, internals) {\n const {\n mc: mountChildren,\n pc: patchChildren,\n pbc: patchBlockChildren,\n o: { insert, querySelector, createText, createComment }\n } = internals;\n const disabled = isTeleportDisabled(n2.props);\n let { shapeFlag, children, dynamicChildren } = n2;\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) {\n optimized = false;\n dynamicChildren = null;\n }\n if (n1 == null) {\n const placeholder = n2.el = !!(process.env.NODE_ENV !== \"production\") ? createComment(\"teleport start\") : createText(\"\");\n const mainAnchor = n2.anchor = !!(process.env.NODE_ENV !== \"production\") ? createComment(\"teleport end\") : createText(\"\");\n insert(placeholder, container, anchor);\n insert(mainAnchor, container, anchor);\n const mount = (container2, anchor2) => {\n if (shapeFlag & 16) {\n mountChildren(\n children,\n container2,\n anchor2,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n };\n const mountToTarget = () => {\n const target = n2.target = resolveTarget(n2.props, querySelector);\n const targetAnchor = prepareAnchor(target, n2, createText, insert);\n if (target) {\n if (namespace !== \"svg\" && isTargetSVG(target)) {\n namespace = \"svg\";\n } else if (namespace !== \"mathml\" && isTargetMathML(target)) {\n namespace = \"mathml\";\n }\n if (parentComponent && parentComponent.isCE) {\n (parentComponent.ce._teleportTargets || (parentComponent.ce._teleportTargets = /* @__PURE__ */ new Set())).add(target);\n }\n if (!disabled) {\n mount(target, targetAnchor);\n updateCssVars(n2, false);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && !disabled) {\n warn$1(\n \"Invalid Teleport target on mount:\",\n target,\n `(${typeof target})`\n );\n }\n };\n if (disabled) {\n mount(container, mainAnchor);\n updateCssVars(n2, true);\n }\n if (isTeleportDeferred(n2.props)) {\n n2.el.__isMounted = false;\n queuePostRenderEffect(() => {\n mountToTarget();\n delete n2.el.__isMounted;\n }, parentSuspense);\n } else {\n mountToTarget();\n }\n } else {\n if (isTeleportDeferred(n2.props) && n1.el.__isMounted === false) {\n queuePostRenderEffect(() => {\n TeleportImpl.process(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n internals\n );\n }, parentSuspense);\n return;\n }\n n2.el = n1.el;\n n2.targetStart = n1.targetStart;\n const mainAnchor = n2.anchor = n1.anchor;\n const target = n2.target = n1.target;\n const targetAnchor = n2.targetAnchor = n1.targetAnchor;\n const wasDisabled = isTeleportDisabled(n1.props);\n const currentContainer = wasDisabled ? container : target;\n const currentAnchor = wasDisabled ? mainAnchor : targetAnchor;\n if (namespace === \"svg\" || isTargetSVG(target)) {\n namespace = \"svg\";\n } else if (namespace === \"mathml\" || isTargetMathML(target)) {\n namespace = \"mathml\";\n }\n if (dynamicChildren) {\n patchBlockChildren(\n n1.dynamicChildren,\n dynamicChildren,\n currentContainer,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds\n );\n traverseStaticChildren(n1, n2, !!!(process.env.NODE_ENV !== \"production\"));\n } else if (!optimized) {\n patchChildren(\n n1,\n n2,\n currentContainer,\n currentAnchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n false\n );\n }\n if (disabled) {\n if (!wasDisabled) {\n moveTeleport(\n n2,\n container,\n mainAnchor,\n internals,\n 1\n );\n } else {\n if (n2.props && n1.props && n2.props.to !== n1.props.to) {\n n2.props.to = n1.props.to;\n }\n }\n } else {\n if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) {\n const nextTarget = n2.target = resolveTarget(\n n2.props,\n querySelector\n );\n if (nextTarget) {\n moveTeleport(\n n2,\n nextTarget,\n null,\n internals,\n 0\n );\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n \"Invalid Teleport target on update:\",\n target,\n `(${typeof target})`\n );\n }\n } else if (wasDisabled) {\n moveTeleport(\n n2,\n target,\n targetAnchor,\n internals,\n 1\n );\n }\n }\n updateCssVars(n2, disabled);\n }\n },\n remove(vnode, parentComponent, parentSuspense, { um: unmount, o: { remove: hostRemove } }, doRemove) {\n const {\n shapeFlag,\n children,\n anchor,\n targetStart,\n targetAnchor,\n target,\n props\n } = vnode;\n if (target) {\n hostRemove(targetStart);\n hostRemove(targetAnchor);\n }\n doRemove && hostRemove(anchor);\n if (shapeFlag & 16) {\n const shouldRemove = doRemove || !isTeleportDisabled(props);\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n unmount(\n child,\n parentComponent,\n parentSuspense,\n shouldRemove,\n !!child.dynamicChildren\n );\n }\n }\n },\n move: moveTeleport,\n hydrate: hydrateTeleport\n};\nfunction moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2) {\n if (moveType === 0) {\n insert(vnode.targetAnchor, container, parentAnchor);\n }\n const { el, anchor, shapeFlag, children, props } = vnode;\n const isReorder = moveType === 2;\n if (isReorder) {\n insert(el, container, parentAnchor);\n }\n if (!isReorder || isTeleportDisabled(props)) {\n if (shapeFlag & 16) {\n for (let i = 0; i < children.length; i++) {\n move(\n children[i],\n container,\n parentAnchor,\n 2\n );\n }\n }\n }\n if (isReorder) {\n insert(anchor, container, parentAnchor);\n }\n}\nfunction hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, {\n o: { nextSibling, parentNode, querySelector, insert, createText }\n}, hydrateChildren) {\n function hydrateDisabledTeleport(node2, vnode2, targetStart, targetAnchor) {\n vnode2.anchor = hydrateChildren(\n nextSibling(node2),\n vnode2,\n parentNode(node2),\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n vnode2.targetStart = targetStart;\n vnode2.targetAnchor = targetAnchor;\n }\n const target = vnode.target = resolveTarget(\n vnode.props,\n querySelector\n );\n const disabled = isTeleportDisabled(vnode.props);\n if (target) {\n const targetNode = target._lpa || target.firstChild;\n if (vnode.shapeFlag & 16) {\n if (disabled) {\n hydrateDisabledTeleport(\n node,\n vnode,\n targetNode,\n targetNode && nextSibling(targetNode)\n );\n } else {\n vnode.anchor = nextSibling(node);\n let targetAnchor = targetNode;\n while (targetAnchor) {\n if (targetAnchor && targetAnchor.nodeType === 8) {\n if (targetAnchor.data === \"teleport start anchor\") {\n vnode.targetStart = targetAnchor;\n } else if (targetAnchor.data === \"teleport anchor\") {\n vnode.targetAnchor = targetAnchor;\n target._lpa = vnode.targetAnchor && nextSibling(vnode.targetAnchor);\n break;\n }\n }\n targetAnchor = nextSibling(targetAnchor);\n }\n if (!vnode.targetAnchor) {\n prepareAnchor(target, vnode, createText, insert);\n }\n hydrateChildren(\n targetNode && nextSibling(targetNode),\n vnode,\n target,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n }\n updateCssVars(vnode, disabled);\n } else if (disabled) {\n if (vnode.shapeFlag & 16) {\n hydrateDisabledTeleport(node, vnode, node, nextSibling(node));\n }\n }\n return vnode.anchor && nextSibling(vnode.anchor);\n}\nconst Teleport = TeleportImpl;\nfunction updateCssVars(vnode, isDisabled) {\n const ctx = vnode.ctx;\n if (ctx && ctx.ut) {\n let node, anchor;\n if (isDisabled) {\n node = vnode.el;\n anchor = vnode.anchor;\n } else {\n node = vnode.targetStart;\n anchor = vnode.targetAnchor;\n }\n while (node && node !== anchor) {\n if (node.nodeType === 1) node.setAttribute(\"data-v-owner\", ctx.uid);\n node = node.nextSibling;\n }\n ctx.ut();\n }\n}\nfunction prepareAnchor(target, vnode, createText, insert) {\n const targetStart = vnode.targetStart = createText(\"\");\n const targetAnchor = vnode.targetAnchor = createText(\"\");\n targetStart[TeleportEndKey] = targetAnchor;\n if (target) {\n insert(targetStart, target);\n insert(targetAnchor, target);\n }\n return targetAnchor;\n}\n\nconst leaveCbKey = Symbol(\"_leaveCb\");\nconst enterCbKey = Symbol(\"_enterCb\");\nfunction useTransitionState() {\n const state = {\n isMounted: false,\n isLeaving: false,\n isUnmounting: false,\n leavingVNodes: /* @__PURE__ */ new Map()\n };\n onMounted(() => {\n state.isMounted = true;\n });\n onBeforeUnmount(() => {\n state.isUnmounting = true;\n });\n return state;\n}\nconst TransitionHookValidator = [Function, Array];\nconst BaseTransitionPropsValidators = {\n mode: String,\n appear: Boolean,\n persisted: Boolean,\n // enter\n onBeforeEnter: TransitionHookValidator,\n onEnter: TransitionHookValidator,\n onAfterEnter: TransitionHookValidator,\n onEnterCancelled: TransitionHookValidator,\n // leave\n onBeforeLeave: TransitionHookValidator,\n onLeave: TransitionHookValidator,\n onAfterLeave: TransitionHookValidator,\n onLeaveCancelled: TransitionHookValidator,\n // appear\n onBeforeAppear: TransitionHookValidator,\n onAppear: TransitionHookValidator,\n onAfterAppear: TransitionHookValidator,\n onAppearCancelled: TransitionHookValidator\n};\nconst recursiveGetSubtree = (instance) => {\n const subTree = instance.subTree;\n return subTree.component ? recursiveGetSubtree(subTree.component) : subTree;\n};\nconst BaseTransitionImpl = {\n name: `BaseTransition`,\n props: BaseTransitionPropsValidators,\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const state = useTransitionState();\n return () => {\n const children = slots.default && getTransitionRawChildren(slots.default(), true);\n if (!children || !children.length) {\n return;\n }\n const child = findNonCommentChild(children);\n const rawProps = toRaw(props);\n const { mode } = rawProps;\n if (!!(process.env.NODE_ENV !== \"production\") && mode && mode !== \"in-out\" && mode !== \"out-in\" && mode !== \"default\") {\n warn$1(`invalid mode: ${mode}`);\n }\n if (state.isLeaving) {\n return emptyPlaceholder(child);\n }\n const innerChild = getInnerChild$1(child);\n if (!innerChild) {\n return emptyPlaceholder(child);\n }\n let enterHooks = resolveTransitionHooks(\n innerChild,\n rawProps,\n state,\n instance,\n // #11061, ensure enterHooks is fresh after clone\n (hooks) => enterHooks = hooks\n );\n if (innerChild.type !== Comment) {\n setTransitionHooks(innerChild, enterHooks);\n }\n let oldInnerChild = instance.subTree && getInnerChild$1(instance.subTree);\n if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(oldInnerChild, innerChild) && recursiveGetSubtree(instance).type !== Comment) {\n let leavingHooks = resolveTransitionHooks(\n oldInnerChild,\n rawProps,\n state,\n instance\n );\n setTransitionHooks(oldInnerChild, leavingHooks);\n if (mode === \"out-in\" && innerChild.type !== Comment) {\n state.isLeaving = true;\n leavingHooks.afterLeave = () => {\n state.isLeaving = false;\n if (!(instance.job.flags & 8)) {\n instance.update();\n }\n delete leavingHooks.afterLeave;\n oldInnerChild = void 0;\n };\n return emptyPlaceholder(child);\n } else if (mode === \"in-out\" && innerChild.type !== Comment) {\n leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {\n const leavingVNodesCache = getLeavingNodesForType(\n state,\n oldInnerChild\n );\n leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;\n el[leaveCbKey] = () => {\n earlyRemove();\n el[leaveCbKey] = void 0;\n delete enterHooks.delayedLeave;\n oldInnerChild = void 0;\n };\n enterHooks.delayedLeave = () => {\n delayedLeave();\n delete enterHooks.delayedLeave;\n oldInnerChild = void 0;\n };\n };\n } else {\n oldInnerChild = void 0;\n }\n } else if (oldInnerChild) {\n oldInnerChild = void 0;\n }\n return child;\n };\n }\n};\nfunction findNonCommentChild(children) {\n let child = children[0];\n if (children.length > 1) {\n let hasFound = false;\n for (const c of children) {\n if (c.type !== Comment) {\n if (!!(process.env.NODE_ENV !== \"production\") && hasFound) {\n warn$1(\n \" can only be used on a single element or component. Use for lists.\"\n );\n break;\n }\n child = c;\n hasFound = true;\n if (!!!(process.env.NODE_ENV !== \"production\")) break;\n }\n }\n }\n return child;\n}\nconst BaseTransition = BaseTransitionImpl;\nfunction getLeavingNodesForType(state, vnode) {\n const { leavingVNodes } = state;\n let leavingVNodesCache = leavingVNodes.get(vnode.type);\n if (!leavingVNodesCache) {\n leavingVNodesCache = /* @__PURE__ */ Object.create(null);\n leavingVNodes.set(vnode.type, leavingVNodesCache);\n }\n return leavingVNodesCache;\n}\nfunction resolveTransitionHooks(vnode, props, state, instance, postClone) {\n const {\n appear,\n mode,\n persisted = false,\n onBeforeEnter,\n onEnter,\n onAfterEnter,\n onEnterCancelled,\n onBeforeLeave,\n onLeave,\n onAfterLeave,\n onLeaveCancelled,\n onBeforeAppear,\n onAppear,\n onAfterAppear,\n onAppearCancelled\n } = props;\n const key = String(vnode.key);\n const leavingVNodesCache = getLeavingNodesForType(state, vnode);\n const callHook = (hook, args) => {\n hook && callWithAsyncErrorHandling(\n hook,\n instance,\n 9,\n args\n );\n };\n const callAsyncHook = (hook, args) => {\n const done = args[1];\n callHook(hook, args);\n if (isArray(hook)) {\n if (hook.every((hook2) => hook2.length <= 1)) done();\n } else if (hook.length <= 1) {\n done();\n }\n };\n const hooks = {\n mode,\n persisted,\n beforeEnter(el) {\n let hook = onBeforeEnter;\n if (!state.isMounted) {\n if (appear) {\n hook = onBeforeAppear || onBeforeEnter;\n } else {\n return;\n }\n }\n if (el[leaveCbKey]) {\n el[leaveCbKey](\n true\n /* cancelled */\n );\n }\n const leavingVNode = leavingVNodesCache[key];\n if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) {\n leavingVNode.el[leaveCbKey]();\n }\n callHook(hook, [el]);\n },\n enter(el) {\n let hook = onEnter;\n let afterHook = onAfterEnter;\n let cancelHook = onEnterCancelled;\n if (!state.isMounted) {\n if (appear) {\n hook = onAppear || onEnter;\n afterHook = onAfterAppear || onAfterEnter;\n cancelHook = onAppearCancelled || onEnterCancelled;\n } else {\n return;\n }\n }\n let called = false;\n const done = el[enterCbKey] = (cancelled) => {\n if (called) return;\n called = true;\n if (cancelled) {\n callHook(cancelHook, [el]);\n } else {\n callHook(afterHook, [el]);\n }\n if (hooks.delayedLeave) {\n hooks.delayedLeave();\n }\n el[enterCbKey] = void 0;\n };\n if (hook) {\n callAsyncHook(hook, [el, done]);\n } else {\n done();\n }\n },\n leave(el, remove) {\n const key2 = String(vnode.key);\n if (el[enterCbKey]) {\n el[enterCbKey](\n true\n /* cancelled */\n );\n }\n if (state.isUnmounting) {\n return remove();\n }\n callHook(onBeforeLeave, [el]);\n let called = false;\n const done = el[leaveCbKey] = (cancelled) => {\n if (called) return;\n called = true;\n remove();\n if (cancelled) {\n callHook(onLeaveCancelled, [el]);\n } else {\n callHook(onAfterLeave, [el]);\n }\n el[leaveCbKey] = void 0;\n if (leavingVNodesCache[key2] === vnode) {\n delete leavingVNodesCache[key2];\n }\n };\n leavingVNodesCache[key2] = vnode;\n if (onLeave) {\n callAsyncHook(onLeave, [el, done]);\n } else {\n done();\n }\n },\n clone(vnode2) {\n const hooks2 = resolveTransitionHooks(\n vnode2,\n props,\n state,\n instance,\n postClone\n );\n if (postClone) postClone(hooks2);\n return hooks2;\n }\n };\n return hooks;\n}\nfunction emptyPlaceholder(vnode) {\n if (isKeepAlive(vnode)) {\n vnode = cloneVNode(vnode);\n vnode.children = null;\n return vnode;\n }\n}\nfunction getInnerChild$1(vnode) {\n if (!isKeepAlive(vnode)) {\n if (isTeleport(vnode.type) && vnode.children) {\n return findNonCommentChild(vnode.children);\n }\n return vnode;\n }\n if (vnode.component) {\n return vnode.component.subTree;\n }\n const { shapeFlag, children } = vnode;\n if (children) {\n if (shapeFlag & 16) {\n return children[0];\n }\n if (shapeFlag & 32 && isFunction(children.default)) {\n return children.default();\n }\n }\n}\nfunction setTransitionHooks(vnode, hooks) {\n if (vnode.shapeFlag & 6 && vnode.component) {\n vnode.transition = hooks;\n setTransitionHooks(vnode.component.subTree, hooks);\n } else if (vnode.shapeFlag & 128) {\n vnode.ssContent.transition = hooks.clone(vnode.ssContent);\n vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);\n } else {\n vnode.transition = hooks;\n }\n}\nfunction getTransitionRawChildren(children, keepComment = false, parentKey) {\n let ret = [];\n let keyedFragmentCount = 0;\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i);\n if (child.type === Fragment) {\n if (child.patchFlag & 128) keyedFragmentCount++;\n ret = ret.concat(\n getTransitionRawChildren(child.children, keepComment, key)\n );\n } else if (keepComment || child.type !== Comment) {\n ret.push(key != null ? cloneVNode(child, { key }) : child);\n }\n }\n if (keyedFragmentCount > 1) {\n for (let i = 0; i < ret.length; i++) {\n ret[i].patchFlag = -2;\n }\n }\n return ret;\n}\n\n// @__NO_SIDE_EFFECTS__\nfunction defineComponent(options, extraOptions) {\n return isFunction(options) ? (\n // #8236: extend call and options.name access are considered side-effects\n // by Rollup, so we have to wrap it in a pure-annotated IIFE.\n /* @__PURE__ */ (() => extend({ name: options.name }, extraOptions, { setup: options }))()\n ) : options;\n}\n\nfunction useId() {\n const i = getCurrentInstance();\n if (i) {\n return (i.appContext.config.idPrefix || \"v\") + \"-\" + i.ids[0] + i.ids[1]++;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `useId() is called when there is no active component instance to be associated with.`\n );\n }\n return \"\";\n}\nfunction markAsyncBoundary(instance) {\n instance.ids = [instance.ids[0] + instance.ids[2]++ + \"-\", 0, 0];\n}\n\nconst knownTemplateRefs = /* @__PURE__ */ new WeakSet();\nfunction useTemplateRef(key) {\n const i = getCurrentInstance();\n const r = shallowRef(null);\n if (i) {\n const refs = i.refs === EMPTY_OBJ ? i.refs = {} : i.refs;\n let desc;\n if (!!(process.env.NODE_ENV !== \"production\") && (desc = Object.getOwnPropertyDescriptor(refs, key)) && !desc.configurable) {\n warn$1(`useTemplateRef('${key}') already exists.`);\n } else {\n Object.defineProperty(refs, key, {\n enumerable: true,\n get: () => r.value,\n set: (val) => r.value = val\n });\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `useTemplateRef() is called when there is no active component instance to be associated with.`\n );\n }\n const ret = !!(process.env.NODE_ENV !== \"production\") ? readonly(r) : r;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n knownTemplateRefs.add(ret);\n }\n return ret;\n}\n\nconst pendingSetRefMap = /* @__PURE__ */ new WeakMap();\nfunction setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {\n if (isArray(rawRef)) {\n rawRef.forEach(\n (r, i) => setRef(\n r,\n oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef),\n parentSuspense,\n vnode,\n isUnmount\n )\n );\n return;\n }\n if (isAsyncWrapper(vnode) && !isUnmount) {\n if (vnode.shapeFlag & 512 && vnode.type.__asyncResolved && vnode.component.subTree.component) {\n setRef(rawRef, oldRawRef, parentSuspense, vnode.component.subTree);\n }\n return;\n }\n const refValue = vnode.shapeFlag & 4 ? getComponentPublicInstance(vnode.component) : vnode.el;\n const value = isUnmount ? null : refValue;\n const { i: owner, r: ref } = rawRef;\n if (!!(process.env.NODE_ENV !== \"production\") && !owner) {\n warn$1(\n `Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.`\n );\n return;\n }\n const oldRef = oldRawRef && oldRawRef.r;\n const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs;\n const setupState = owner.setupState;\n const rawSetupState = toRaw(setupState);\n const canSetSetupRef = setupState === EMPTY_OBJ ? NO : (key) => {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (hasOwn(rawSetupState, key) && !isRef(rawSetupState[key])) {\n warn$1(\n `Template ref \"${key}\" used on a non-ref value. It will not work in the production build.`\n );\n }\n if (knownTemplateRefs.has(rawSetupState[key])) {\n return false;\n }\n }\n return hasOwn(rawSetupState, key);\n };\n const canSetRef = (ref2) => {\n return !!!(process.env.NODE_ENV !== \"production\") || !knownTemplateRefs.has(ref2);\n };\n if (oldRef != null && oldRef !== ref) {\n invalidatePendingSetRef(oldRawRef);\n if (isString(oldRef)) {\n refs[oldRef] = null;\n if (canSetSetupRef(oldRef)) {\n setupState[oldRef] = null;\n }\n } else if (isRef(oldRef)) {\n if (canSetRef(oldRef)) {\n oldRef.value = null;\n }\n const oldRawRefAtom = oldRawRef;\n if (oldRawRefAtom.k) refs[oldRawRefAtom.k] = null;\n }\n }\n if (isFunction(ref)) {\n callWithErrorHandling(ref, owner, 12, [value, refs]);\n } else {\n const _isString = isString(ref);\n const _isRef = isRef(ref);\n if (_isString || _isRef) {\n const doSet = () => {\n if (rawRef.f) {\n const existing = _isString ? canSetSetupRef(ref) ? setupState[ref] : refs[ref] : canSetRef(ref) || !rawRef.k ? ref.value : refs[rawRef.k];\n if (isUnmount) {\n isArray(existing) && remove(existing, refValue);\n } else {\n if (!isArray(existing)) {\n if (_isString) {\n refs[ref] = [refValue];\n if (canSetSetupRef(ref)) {\n setupState[ref] = refs[ref];\n }\n } else {\n const newVal = [refValue];\n if (canSetRef(ref)) {\n ref.value = newVal;\n }\n if (rawRef.k) refs[rawRef.k] = newVal;\n }\n } else if (!existing.includes(refValue)) {\n existing.push(refValue);\n }\n }\n } else if (_isString) {\n refs[ref] = value;\n if (canSetSetupRef(ref)) {\n setupState[ref] = value;\n }\n } else if (_isRef) {\n if (canSetRef(ref)) {\n ref.value = value;\n }\n if (rawRef.k) refs[rawRef.k] = value;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid template ref type:\", ref, `(${typeof ref})`);\n }\n };\n if (value) {\n const job = () => {\n doSet();\n pendingSetRefMap.delete(rawRef);\n };\n job.id = -1;\n pendingSetRefMap.set(rawRef, job);\n queuePostRenderEffect(job, parentSuspense);\n } else {\n invalidatePendingSetRef(rawRef);\n doSet();\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid template ref type:\", ref, `(${typeof ref})`);\n }\n }\n}\nfunction invalidatePendingSetRef(rawRef) {\n const pendingSetRef = pendingSetRefMap.get(rawRef);\n if (pendingSetRef) {\n pendingSetRef.flags |= 8;\n pendingSetRefMap.delete(rawRef);\n }\n}\n\nlet hasLoggedMismatchError = false;\nconst logMismatchError = () => {\n if (hasLoggedMismatchError) {\n return;\n }\n console.error(\"Hydration completed but contains mismatches.\");\n hasLoggedMismatchError = true;\n};\nconst isSVGContainer = (container) => container.namespaceURI.includes(\"svg\") && container.tagName !== \"foreignObject\";\nconst isMathMLContainer = (container) => container.namespaceURI.includes(\"MathML\");\nconst getContainerType = (container) => {\n if (container.nodeType !== 1) return void 0;\n if (isSVGContainer(container)) return \"svg\";\n if (isMathMLContainer(container)) return \"mathml\";\n return void 0;\n};\nconst isComment = (node) => node.nodeType === 8;\nfunction createHydrationFunctions(rendererInternals) {\n const {\n mt: mountComponent,\n p: patch,\n o: {\n patchProp,\n createText,\n nextSibling,\n parentNode,\n remove,\n insert,\n createComment\n }\n } = rendererInternals;\n const hydrate = (vnode, container) => {\n if (!container.hasChildNodes()) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Attempting to hydrate existing markup but container is empty. Performing full mount instead.`\n );\n patch(null, vnode, container);\n flushPostFlushCbs();\n container._vnode = vnode;\n return;\n }\n hydrateNode(container.firstChild, vnode, null, null, null);\n flushPostFlushCbs();\n container._vnode = vnode;\n };\n const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => {\n optimized = optimized || !!vnode.dynamicChildren;\n const isFragmentStart = isComment(node) && node.data === \"[\";\n const onMismatch = () => handleMismatch(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n isFragmentStart\n );\n const { type, ref, shapeFlag, patchFlag } = vnode;\n let domType = node.nodeType;\n vnode.el = node;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n def(node, \"__vnode\", vnode, true);\n def(node, \"__vueParentComponent\", parentComponent, true);\n }\n if (patchFlag === -2) {\n optimized = false;\n vnode.dynamicChildren = null;\n }\n let nextNode = null;\n switch (type) {\n case Text:\n if (domType !== 3) {\n if (vnode.children === \"\") {\n insert(vnode.el = createText(\"\"), parentNode(node), node);\n nextNode = node;\n } else {\n nextNode = onMismatch();\n }\n } else {\n if (node.data !== vnode.children) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration text mismatch in`,\n node.parentNode,\n `\n - rendered on server: ${JSON.stringify(\n node.data\n )}\n - expected on client: ${JSON.stringify(vnode.children)}`\n );\n logMismatchError();\n node.data = vnode.children;\n }\n nextNode = nextSibling(node);\n }\n break;\n case Comment:\n if (isTemplateNode(node)) {\n nextNode = nextSibling(node);\n replaceNode(\n vnode.el = node.content.firstChild,\n node,\n parentComponent\n );\n } else if (domType !== 8 || isFragmentStart) {\n nextNode = onMismatch();\n } else {\n nextNode = nextSibling(node);\n }\n break;\n case Static:\n if (isFragmentStart) {\n node = nextSibling(node);\n domType = node.nodeType;\n }\n if (domType === 1 || domType === 3) {\n nextNode = node;\n const needToAdoptContent = !vnode.children.length;\n for (let i = 0; i < vnode.staticCount; i++) {\n if (needToAdoptContent)\n vnode.children += nextNode.nodeType === 1 ? nextNode.outerHTML : nextNode.data;\n if (i === vnode.staticCount - 1) {\n vnode.anchor = nextNode;\n }\n nextNode = nextSibling(nextNode);\n }\n return isFragmentStart ? nextSibling(nextNode) : nextNode;\n } else {\n onMismatch();\n }\n break;\n case Fragment:\n if (!isFragmentStart) {\n nextNode = onMismatch();\n } else {\n nextNode = hydrateFragment(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n break;\n default:\n if (shapeFlag & 1) {\n if ((domType !== 1 || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) && !isTemplateNode(node)) {\n nextNode = onMismatch();\n } else {\n nextNode = hydrateElement(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n } else if (shapeFlag & 6) {\n vnode.slotScopeIds = slotScopeIds;\n const container = parentNode(node);\n if (isFragmentStart) {\n nextNode = locateClosingAnchor(node);\n } else if (isComment(node) && node.data === \"teleport start\") {\n nextNode = locateClosingAnchor(node, node.data, \"teleport end\");\n } else {\n nextNode = nextSibling(node);\n }\n mountComponent(\n vnode,\n container,\n null,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n optimized\n );\n if (isAsyncWrapper(vnode) && !vnode.type.__asyncResolved) {\n let subTree;\n if (isFragmentStart) {\n subTree = createVNode(Fragment);\n subTree.anchor = nextNode ? nextNode.previousSibling : container.lastChild;\n } else {\n subTree = node.nodeType === 3 ? createTextVNode(\"\") : createVNode(\"div\");\n }\n subTree.el = node;\n vnode.component.subTree = subTree;\n }\n } else if (shapeFlag & 64) {\n if (domType !== 8) {\n nextNode = onMismatch();\n } else {\n nextNode = vnode.type.hydrate(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized,\n rendererInternals,\n hydrateChildren\n );\n }\n } else if (shapeFlag & 128) {\n nextNode = vnode.type.hydrate(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n getContainerType(parentNode(node)),\n slotScopeIds,\n optimized,\n rendererInternals,\n hydrateNode\n );\n } else if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) {\n warn$1(\"Invalid HostVNode type:\", type, `(${typeof type})`);\n }\n }\n if (ref != null) {\n setRef(ref, null, parentSuspense, vnode);\n }\n return nextNode;\n };\n const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n optimized = optimized || !!vnode.dynamicChildren;\n const { type, props, patchFlag, shapeFlag, dirs, transition } = vnode;\n const forcePatch = type === \"input\" || type === \"option\";\n if (!!(process.env.NODE_ENV !== \"production\") || forcePatch || patchFlag !== -1) {\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"created\");\n }\n let needCallTransitionHooks = false;\n if (isTemplateNode(el)) {\n needCallTransitionHooks = needTransition(\n null,\n // no need check parentSuspense in hydration\n transition\n ) && parentComponent && parentComponent.vnode.props && parentComponent.vnode.props.appear;\n const content = el.content.firstChild;\n if (needCallTransitionHooks) {\n const cls = content.getAttribute(\"class\");\n if (cls) content.$cls = cls;\n transition.beforeEnter(content);\n }\n replaceNode(content, el, parentComponent);\n vnode.el = el = content;\n }\n if (shapeFlag & 16 && // skip if element has innerHTML / textContent\n !(props && (props.innerHTML || props.textContent))) {\n let next = hydrateChildren(\n el.firstChild,\n vnode,\n el,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n let hasWarned = false;\n while (next) {\n if (!isMismatchAllowed(el, 1 /* CHILDREN */)) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && !hasWarned) {\n warn$1(\n `Hydration children mismatch on`,\n el,\n `\nServer rendered element contains more child nodes than client vdom.`\n );\n hasWarned = true;\n }\n logMismatchError();\n }\n const cur = next;\n next = next.nextSibling;\n remove(cur);\n }\n } else if (shapeFlag & 8) {\n let clientText = vnode.children;\n if (clientText[0] === \"\\n\" && (el.tagName === \"PRE\" || el.tagName === \"TEXTAREA\")) {\n clientText = clientText.slice(1);\n }\n if (el.textContent !== clientText) {\n if (!isMismatchAllowed(el, 0 /* TEXT */)) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration text content mismatch on`,\n el,\n `\n - rendered on server: ${el.textContent}\n - expected on client: ${vnode.children}`\n );\n logMismatchError();\n }\n el.textContent = vnode.children;\n }\n }\n if (props) {\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__ || forcePatch || !optimized || patchFlag & (16 | 32)) {\n const isCustomElement = el.tagName.includes(\"-\");\n for (const key in props) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && // #11189 skip if this node has directives that have created hooks\n // as it could have mutated the DOM in any possible way\n !(dirs && dirs.some((d) => d.dir.created)) && propHasMismatch(el, key, props[key], vnode, parentComponent)) {\n logMismatchError();\n }\n if (forcePatch && (key.endsWith(\"value\") || key === \"indeterminate\") || isOn(key) && !isReservedProp(key) || // force hydrate v-bind with .prop modifiers\n key[0] === \".\" || isCustomElement) {\n patchProp(el, key, null, props[key], void 0, parentComponent);\n }\n }\n } else if (props.onClick) {\n patchProp(\n el,\n \"onClick\",\n null,\n props.onClick,\n void 0,\n parentComponent\n );\n } else if (patchFlag & 4 && isReactive(props.style)) {\n for (const key in props.style) props.style[key];\n }\n }\n let vnodeHooks;\n if (vnodeHooks = props && props.onVnodeBeforeMount) {\n invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"beforeMount\");\n }\n if ((vnodeHooks = props && props.onVnodeMounted) || dirs || needCallTransitionHooks) {\n queueEffectWithSuspense(() => {\n vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n needCallTransitionHooks && transition.enter(el);\n dirs && invokeDirectiveHook(vnode, null, parentComponent, \"mounted\");\n }, parentSuspense);\n }\n }\n return el.nextSibling;\n };\n const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n optimized = optimized || !!parentVNode.dynamicChildren;\n const children = parentVNode.children;\n const l = children.length;\n let hasWarned = false;\n for (let i = 0; i < l; i++) {\n const vnode = optimized ? children[i] : children[i] = normalizeVNode(children[i]);\n const isText = vnode.type === Text;\n if (node) {\n if (isText && !optimized) {\n if (i + 1 < l && normalizeVNode(children[i + 1]).type === Text) {\n insert(\n createText(\n node.data.slice(vnode.children.length)\n ),\n container,\n nextSibling(node)\n );\n node.data = vnode.children;\n }\n }\n node = hydrateNode(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n } else if (isText && !vnode.children) {\n insert(vnode.el = createText(\"\"), container);\n } else {\n if (!isMismatchAllowed(container, 1 /* CHILDREN */)) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && !hasWarned) {\n warn$1(\n `Hydration children mismatch on`,\n container,\n `\nServer rendered element contains fewer child nodes than client vdom.`\n );\n hasWarned = true;\n }\n logMismatchError();\n }\n patch(\n null,\n vnode,\n container,\n null,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n slotScopeIds\n );\n }\n }\n return node;\n };\n const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n const { slotScopeIds: fragmentSlotScopeIds } = vnode;\n if (fragmentSlotScopeIds) {\n slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;\n }\n const container = parentNode(node);\n const next = hydrateChildren(\n nextSibling(node),\n vnode,\n container,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n if (next && isComment(next) && next.data === \"]\") {\n return nextSibling(vnode.anchor = next);\n } else {\n logMismatchError();\n insert(vnode.anchor = createComment(`]`), container, next);\n return next;\n }\n };\n const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => {\n if (!isMismatchAllowed(node.parentElement, 1 /* CHILDREN */)) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration node mismatch:\n- rendered on server:`,\n node,\n node.nodeType === 3 ? `(text)` : isComment(node) && node.data === \"[\" ? `(start of fragment)` : ``,\n `\n- expected on client:`,\n vnode.type\n );\n logMismatchError();\n }\n vnode.el = null;\n if (isFragment) {\n const end = locateClosingAnchor(node);\n while (true) {\n const next2 = nextSibling(node);\n if (next2 && next2 !== end) {\n remove(next2);\n } else {\n break;\n }\n }\n }\n const next = nextSibling(node);\n const container = parentNode(node);\n remove(node);\n patch(\n null,\n vnode,\n container,\n next,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n slotScopeIds\n );\n if (parentComponent) {\n parentComponent.vnode.el = vnode.el;\n updateHOCHostEl(parentComponent, vnode.el);\n }\n return next;\n };\n const locateClosingAnchor = (node, open = \"[\", close = \"]\") => {\n let match = 0;\n while (node) {\n node = nextSibling(node);\n if (node && isComment(node)) {\n if (node.data === open) match++;\n if (node.data === close) {\n if (match === 0) {\n return nextSibling(node);\n } else {\n match--;\n }\n }\n }\n }\n return node;\n };\n const replaceNode = (newNode, oldNode, parentComponent) => {\n const parentNode2 = oldNode.parentNode;\n if (parentNode2) {\n parentNode2.replaceChild(newNode, oldNode);\n }\n let parent = parentComponent;\n while (parent) {\n if (parent.vnode.el === oldNode) {\n parent.vnode.el = parent.subTree.el = newNode;\n }\n parent = parent.parent;\n }\n };\n const isTemplateNode = (node) => {\n return node.nodeType === 1 && node.tagName === \"TEMPLATE\";\n };\n return [hydrate, hydrateNode];\n}\nfunction propHasMismatch(el, key, clientValue, vnode, instance) {\n let mismatchType;\n let mismatchKey;\n let actual;\n let expected;\n if (key === \"class\") {\n if (el.$cls) {\n actual = el.$cls;\n delete el.$cls;\n } else {\n actual = el.getAttribute(\"class\");\n }\n expected = normalizeClass(clientValue);\n if (!isSetEqual(toClassSet(actual || \"\"), toClassSet(expected))) {\n mismatchType = 2 /* CLASS */;\n mismatchKey = `class`;\n }\n } else if (key === \"style\") {\n actual = el.getAttribute(\"style\") || \"\";\n expected = isString(clientValue) ? clientValue : stringifyStyle(normalizeStyle(clientValue));\n const actualMap = toStyleMap(actual);\n const expectedMap = toStyleMap(expected);\n if (vnode.dirs) {\n for (const { dir, value } of vnode.dirs) {\n if (dir.name === \"show\" && !value) {\n expectedMap.set(\"display\", \"none\");\n }\n }\n }\n if (instance) {\n resolveCssVars(instance, vnode, expectedMap);\n }\n if (!isMapEqual(actualMap, expectedMap)) {\n mismatchType = 3 /* STYLE */;\n mismatchKey = \"style\";\n }\n } else if (el instanceof SVGElement && isKnownSvgAttr(key) || el instanceof HTMLElement && (isBooleanAttr(key) || isKnownHtmlAttr(key))) {\n if (isBooleanAttr(key)) {\n actual = el.hasAttribute(key);\n expected = includeBooleanAttr(clientValue);\n } else if (clientValue == null) {\n actual = el.hasAttribute(key);\n expected = false;\n } else {\n if (el.hasAttribute(key)) {\n actual = el.getAttribute(key);\n } else if (key === \"value\" && el.tagName === \"TEXTAREA\") {\n actual = el.value;\n } else {\n actual = false;\n }\n expected = isRenderableAttrValue(clientValue) ? String(clientValue) : false;\n }\n if (actual !== expected) {\n mismatchType = 4 /* ATTRIBUTE */;\n mismatchKey = key;\n }\n }\n if (mismatchType != null && !isMismatchAllowed(el, mismatchType)) {\n const format = (v) => v === false ? `(not rendered)` : `${mismatchKey}=\"${v}\"`;\n const preSegment = `Hydration ${MismatchTypeString[mismatchType]} mismatch on`;\n const postSegment = `\n - rendered on server: ${format(actual)}\n - expected on client: ${format(expected)}\n Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead.\n You should fix the source of the mismatch.`;\n {\n warn$1(preSegment, el, postSegment);\n }\n return true;\n }\n return false;\n}\nfunction toClassSet(str) {\n return new Set(str.trim().split(/\\s+/));\n}\nfunction isSetEqual(a, b) {\n if (a.size !== b.size) {\n return false;\n }\n for (const s of a) {\n if (!b.has(s)) {\n return false;\n }\n }\n return true;\n}\nfunction toStyleMap(str) {\n const styleMap = /* @__PURE__ */ new Map();\n for (const item of str.split(\";\")) {\n let [key, value] = item.split(\":\");\n key = key.trim();\n value = value && value.trim();\n if (key && value) {\n styleMap.set(key, value);\n }\n }\n return styleMap;\n}\nfunction isMapEqual(a, b) {\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a) {\n if (value !== b.get(key)) {\n return false;\n }\n }\n return true;\n}\nfunction resolveCssVars(instance, vnode, expectedMap) {\n const root = instance.subTree;\n if (instance.getCssVars && (vnode === root || root && root.type === Fragment && root.children.includes(vnode))) {\n const cssVars = instance.getCssVars();\n for (const key in cssVars) {\n const value = normalizeCssVarValue(cssVars[key]);\n expectedMap.set(`--${getEscapedCssVarName(key, false)}`, value);\n }\n }\n if (vnode === root && instance.parent) {\n resolveCssVars(instance.parent, instance.vnode, expectedMap);\n }\n}\nconst allowMismatchAttr = \"data-allow-mismatch\";\nconst MismatchTypeString = {\n [0 /* TEXT */]: \"text\",\n [1 /* CHILDREN */]: \"children\",\n [2 /* CLASS */]: \"class\",\n [3 /* STYLE */]: \"style\",\n [4 /* ATTRIBUTE */]: \"attribute\"\n};\nfunction isMismatchAllowed(el, allowedType) {\n if (allowedType === 0 /* TEXT */ || allowedType === 1 /* CHILDREN */) {\n while (el && !el.hasAttribute(allowMismatchAttr)) {\n el = el.parentElement;\n }\n }\n const allowedAttr = el && el.getAttribute(allowMismatchAttr);\n if (allowedAttr == null) {\n return false;\n } else if (allowedAttr === \"\") {\n return true;\n } else {\n const list = allowedAttr.split(\",\");\n if (allowedType === 0 /* TEXT */ && list.includes(\"children\")) {\n return true;\n }\n return list.includes(MismatchTypeString[allowedType]);\n }\n}\n\nconst requestIdleCallback = getGlobalThis().requestIdleCallback || ((cb) => setTimeout(cb, 1));\nconst cancelIdleCallback = getGlobalThis().cancelIdleCallback || ((id) => clearTimeout(id));\nconst hydrateOnIdle = (timeout = 1e4) => (hydrate) => {\n const id = requestIdleCallback(hydrate, { timeout });\n return () => cancelIdleCallback(id);\n};\nfunction elementIsVisibleInViewport(el) {\n const { top, left, bottom, right } = el.getBoundingClientRect();\n const { innerHeight, innerWidth } = window;\n return (top > 0 && top < innerHeight || bottom > 0 && bottom < innerHeight) && (left > 0 && left < innerWidth || right > 0 && right < innerWidth);\n}\nconst hydrateOnVisible = (opts) => (hydrate, forEach) => {\n const ob = new IntersectionObserver((entries) => {\n for (const e of entries) {\n if (!e.isIntersecting) continue;\n ob.disconnect();\n hydrate();\n break;\n }\n }, opts);\n forEach((el) => {\n if (!(el instanceof Element)) return;\n if (elementIsVisibleInViewport(el)) {\n hydrate();\n ob.disconnect();\n return false;\n }\n ob.observe(el);\n });\n return () => ob.disconnect();\n};\nconst hydrateOnMediaQuery = (query) => (hydrate) => {\n if (query) {\n const mql = matchMedia(query);\n if (mql.matches) {\n hydrate();\n } else {\n mql.addEventListener(\"change\", hydrate, { once: true });\n return () => mql.removeEventListener(\"change\", hydrate);\n }\n }\n};\nconst hydrateOnInteraction = (interactions = []) => (hydrate, forEach) => {\n if (isString(interactions)) interactions = [interactions];\n let hasHydrated = false;\n const doHydrate = (e) => {\n if (!hasHydrated) {\n hasHydrated = true;\n teardown();\n hydrate();\n e.target.dispatchEvent(new e.constructor(e.type, e));\n }\n };\n const teardown = () => {\n forEach((el) => {\n for (const i of interactions) {\n el.removeEventListener(i, doHydrate);\n }\n });\n };\n forEach((el) => {\n for (const i of interactions) {\n el.addEventListener(i, doHydrate, { once: true });\n }\n });\n return teardown;\n};\nfunction forEachElement(node, cb) {\n if (isComment(node) && node.data === \"[\") {\n let depth = 1;\n let next = node.nextSibling;\n while (next) {\n if (next.nodeType === 1) {\n const result = cb(next);\n if (result === false) {\n break;\n }\n } else if (isComment(next)) {\n if (next.data === \"]\") {\n if (--depth === 0) break;\n } else if (next.data === \"[\") {\n depth++;\n }\n }\n next = next.nextSibling;\n }\n } else {\n cb(node);\n }\n}\n\nconst isAsyncWrapper = (i) => !!i.type.__asyncLoader;\n// @__NO_SIDE_EFFECTS__\nfunction defineAsyncComponent(source) {\n if (isFunction(source)) {\n source = { loader: source };\n }\n const {\n loader,\n loadingComponent,\n errorComponent,\n delay = 200,\n hydrate: hydrateStrategy,\n timeout,\n // undefined = never times out\n suspensible = true,\n onError: userOnError\n } = source;\n let pendingRequest = null;\n let resolvedComp;\n let retries = 0;\n const retry = () => {\n retries++;\n pendingRequest = null;\n return load();\n };\n const load = () => {\n let thisRequest;\n return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => {\n err = err instanceof Error ? err : new Error(String(err));\n if (userOnError) {\n return new Promise((resolve, reject) => {\n const userRetry = () => resolve(retry());\n const userFail = () => reject(err);\n userOnError(err, userRetry, userFail, retries + 1);\n });\n } else {\n throw err;\n }\n }).then((comp) => {\n if (thisRequest !== pendingRequest && pendingRequest) {\n return pendingRequest;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && !comp) {\n warn$1(\n `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.`\n );\n }\n if (comp && (comp.__esModule || comp[Symbol.toStringTag] === \"Module\")) {\n comp = comp.default;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && comp && !isObject(comp) && !isFunction(comp)) {\n throw new Error(`Invalid async component load result: ${comp}`);\n }\n resolvedComp = comp;\n return comp;\n }));\n };\n return defineComponent({\n name: \"AsyncComponentWrapper\",\n __asyncLoader: load,\n __asyncHydrate(el, instance, hydrate) {\n let patched = false;\n (instance.bu || (instance.bu = [])).push(() => patched = true);\n const performHydrate = () => {\n if (patched) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `Skipping lazy hydration for component '${getComponentName(resolvedComp) || resolvedComp.__file}': it was updated before lazy hydration performed.`\n );\n }\n return;\n }\n hydrate();\n };\n const doHydrate = hydrateStrategy ? () => {\n const teardown = hydrateStrategy(\n performHydrate,\n (cb) => forEachElement(el, cb)\n );\n if (teardown) {\n (instance.bum || (instance.bum = [])).push(teardown);\n }\n } : performHydrate;\n if (resolvedComp) {\n doHydrate();\n } else {\n load().then(() => !instance.isUnmounted && doHydrate());\n }\n },\n get __asyncResolved() {\n return resolvedComp;\n },\n setup() {\n const instance = currentInstance;\n markAsyncBoundary(instance);\n if (resolvedComp) {\n return () => createInnerComp(resolvedComp, instance);\n }\n const onError = (err) => {\n pendingRequest = null;\n handleError(\n err,\n instance,\n 13,\n !errorComponent\n );\n };\n if (suspensible && instance.suspense || isInSSRComponentSetup) {\n return load().then((comp) => {\n return () => createInnerComp(comp, instance);\n }).catch((err) => {\n onError(err);\n return () => errorComponent ? createVNode(errorComponent, {\n error: err\n }) : null;\n });\n }\n const loaded = ref(false);\n const error = ref();\n const delayed = ref(!!delay);\n if (delay) {\n setTimeout(() => {\n delayed.value = false;\n }, delay);\n }\n if (timeout != null) {\n setTimeout(() => {\n if (!loaded.value && !error.value) {\n const err = new Error(\n `Async component timed out after ${timeout}ms.`\n );\n onError(err);\n error.value = err;\n }\n }, timeout);\n }\n load().then(() => {\n loaded.value = true;\n if (instance.parent && isKeepAlive(instance.parent.vnode)) {\n instance.parent.update();\n }\n }).catch((err) => {\n onError(err);\n error.value = err;\n });\n return () => {\n if (loaded.value && resolvedComp) {\n return createInnerComp(resolvedComp, instance);\n } else if (error.value && errorComponent) {\n return createVNode(errorComponent, {\n error: error.value\n });\n } else if (loadingComponent && !delayed.value) {\n return createVNode(loadingComponent);\n }\n };\n }\n });\n}\nfunction createInnerComp(comp, parent) {\n const { ref: ref2, props, children, ce } = parent.vnode;\n const vnode = createVNode(comp, props, children);\n vnode.ref = ref2;\n vnode.ce = ce;\n delete parent.vnode.ce;\n return vnode;\n}\n\nconst isKeepAlive = (vnode) => vnode.type.__isKeepAlive;\nconst KeepAliveImpl = {\n name: `KeepAlive`,\n // Marker for special handling inside the renderer. We are not using a ===\n // check directly on KeepAlive in the renderer, because importing it directly\n // would prevent it from being tree-shaken.\n __isKeepAlive: true,\n props: {\n include: [String, RegExp, Array],\n exclude: [String, RegExp, Array],\n max: [String, Number]\n },\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const sharedContext = instance.ctx;\n if (!sharedContext.renderer) {\n return () => {\n const children = slots.default && slots.default();\n return children && children.length === 1 ? children[0] : children;\n };\n }\n const cache = /* @__PURE__ */ new Map();\n const keys = /* @__PURE__ */ new Set();\n let current = null;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n instance.__v_cache = cache;\n }\n const parentSuspense = instance.suspense;\n const {\n renderer: {\n p: patch,\n m: move,\n um: _unmount,\n o: { createElement }\n }\n } = sharedContext;\n const storageContainer = createElement(\"div\");\n sharedContext.activate = (vnode, container, anchor, namespace, optimized) => {\n const instance2 = vnode.component;\n move(vnode, container, anchor, 0, parentSuspense);\n patch(\n instance2.vnode,\n vnode,\n container,\n anchor,\n instance2,\n parentSuspense,\n namespace,\n vnode.slotScopeIds,\n optimized\n );\n queuePostRenderEffect(() => {\n instance2.isDeactivated = false;\n if (instance2.a) {\n invokeArrayFns(instance2.a);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeMounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n }\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance2);\n }\n };\n sharedContext.deactivate = (vnode) => {\n const instance2 = vnode.component;\n invalidateMount(instance2.m);\n invalidateMount(instance2.a);\n move(vnode, storageContainer, null, 1, parentSuspense);\n queuePostRenderEffect(() => {\n if (instance2.da) {\n invokeArrayFns(instance2.da);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n }\n instance2.isDeactivated = true;\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance2);\n }\n if (!!(process.env.NODE_ENV !== \"production\") && true) {\n instance2.__keepAliveStorageContainer = storageContainer;\n }\n };\n function unmount(vnode) {\n resetShapeFlag(vnode);\n _unmount(vnode, instance, parentSuspense, true);\n }\n function pruneCache(filter) {\n cache.forEach((vnode, key) => {\n const name = getComponentName(vnode.type);\n if (name && !filter(name)) {\n pruneCacheEntry(key);\n }\n });\n }\n function pruneCacheEntry(key) {\n const cached = cache.get(key);\n if (cached && (!current || !isSameVNodeType(cached, current))) {\n unmount(cached);\n } else if (current) {\n resetShapeFlag(current);\n }\n cache.delete(key);\n keys.delete(key);\n }\n watch(\n () => [props.include, props.exclude],\n ([include, exclude]) => {\n include && pruneCache((name) => matches(include, name));\n exclude && pruneCache((name) => !matches(exclude, name));\n },\n // prune post-render after `current` has been updated\n { flush: \"post\", deep: true }\n );\n let pendingCacheKey = null;\n const cacheSubtree = () => {\n if (pendingCacheKey != null) {\n if (isSuspense(instance.subTree.type)) {\n queuePostRenderEffect(() => {\n cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n }, instance.subTree.suspense);\n } else {\n cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n }\n }\n };\n onMounted(cacheSubtree);\n onUpdated(cacheSubtree);\n onBeforeUnmount(() => {\n cache.forEach((cached) => {\n const { subTree, suspense } = instance;\n const vnode = getInnerChild(subTree);\n if (cached.type === vnode.type && cached.key === vnode.key) {\n resetShapeFlag(vnode);\n const da = vnode.component.da;\n da && queuePostRenderEffect(da, suspense);\n return;\n }\n unmount(cached);\n });\n });\n return () => {\n pendingCacheKey = null;\n if (!slots.default) {\n return current = null;\n }\n const children = slots.default();\n const rawVNode = children[0];\n if (children.length > 1) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`KeepAlive should contain exactly one component child.`);\n }\n current = null;\n return children;\n } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) {\n current = null;\n return rawVNode;\n }\n let vnode = getInnerChild(rawVNode);\n if (vnode.type === Comment) {\n current = null;\n return vnode;\n }\n const comp = vnode.type;\n const name = getComponentName(\n isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp\n );\n const { include, exclude, max } = props;\n if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) {\n vnode.shapeFlag &= -257;\n current = vnode;\n return rawVNode;\n }\n const key = vnode.key == null ? comp : vnode.key;\n const cachedVNode = cache.get(key);\n if (vnode.el) {\n vnode = cloneVNode(vnode);\n if (rawVNode.shapeFlag & 128) {\n rawVNode.ssContent = vnode;\n }\n }\n pendingCacheKey = key;\n if (cachedVNode) {\n vnode.el = cachedVNode.el;\n vnode.component = cachedVNode.component;\n if (vnode.transition) {\n setTransitionHooks(vnode, vnode.transition);\n }\n vnode.shapeFlag |= 512;\n keys.delete(key);\n keys.add(key);\n } else {\n keys.add(key);\n if (max && keys.size > parseInt(max, 10)) {\n pruneCacheEntry(keys.values().next().value);\n }\n }\n vnode.shapeFlag |= 256;\n current = vnode;\n return isSuspense(rawVNode.type) ? rawVNode : vnode;\n };\n }\n};\nconst KeepAlive = KeepAliveImpl;\nfunction matches(pattern, name) {\n if (isArray(pattern)) {\n return pattern.some((p) => matches(p, name));\n } else if (isString(pattern)) {\n return pattern.split(\",\").includes(name);\n } else if (isRegExp(pattern)) {\n pattern.lastIndex = 0;\n return pattern.test(name);\n }\n return false;\n}\nfunction onActivated(hook, target) {\n registerKeepAliveHook(hook, \"a\", target);\n}\nfunction onDeactivated(hook, target) {\n registerKeepAliveHook(hook, \"da\", target);\n}\nfunction registerKeepAliveHook(hook, type, target = currentInstance) {\n const wrappedHook = hook.__wdc || (hook.__wdc = () => {\n let current = target;\n while (current) {\n if (current.isDeactivated) {\n return;\n }\n current = current.parent;\n }\n return hook();\n });\n injectHook(type, wrappedHook, target);\n if (target) {\n let current = target.parent;\n while (current && current.parent) {\n if (isKeepAlive(current.parent.vnode)) {\n injectToKeepAliveRoot(wrappedHook, type, target, current);\n }\n current = current.parent;\n }\n }\n}\nfunction injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {\n const injected = injectHook(\n type,\n hook,\n keepAliveRoot,\n true\n /* prepend */\n );\n onUnmounted(() => {\n remove(keepAliveRoot[type], injected);\n }, target);\n}\nfunction resetShapeFlag(vnode) {\n vnode.shapeFlag &= -257;\n vnode.shapeFlag &= -513;\n}\nfunction getInnerChild(vnode) {\n return vnode.shapeFlag & 128 ? vnode.ssContent : vnode;\n}\n\nfunction injectHook(type, hook, target = currentInstance, prepend = false) {\n if (target) {\n const hooks = target[type] || (target[type] = []);\n const wrappedHook = hook.__weh || (hook.__weh = (...args) => {\n pauseTracking();\n const reset = setCurrentInstance(target);\n const res = callWithAsyncErrorHandling(hook, target, type, args);\n reset();\n resetTracking();\n return res;\n });\n if (prepend) {\n hooks.unshift(wrappedHook);\n } else {\n hooks.push(wrappedHook);\n }\n return wrappedHook;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n const apiName = toHandlerKey(ErrorTypeStrings$1[type].replace(/ hook$/, \"\"));\n warn$1(\n `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().` + (` If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` )\n );\n }\n}\nconst createHook = (lifecycle) => (hook, target = currentInstance) => {\n if (!isInSSRComponentSetup || lifecycle === \"sp\") {\n injectHook(lifecycle, (...args) => hook(...args), target);\n }\n};\nconst onBeforeMount = createHook(\"bm\");\nconst onMounted = createHook(\"m\");\nconst onBeforeUpdate = createHook(\n \"bu\"\n);\nconst onUpdated = createHook(\"u\");\nconst onBeforeUnmount = createHook(\n \"bum\"\n);\nconst onUnmounted = createHook(\"um\");\nconst onServerPrefetch = createHook(\n \"sp\"\n);\nconst onRenderTriggered = createHook(\"rtg\");\nconst onRenderTracked = createHook(\"rtc\");\nfunction onErrorCaptured(hook, target = currentInstance) {\n injectHook(\"ec\", hook, target);\n}\n\nconst COMPONENTS = \"components\";\nconst DIRECTIVES = \"directives\";\nfunction resolveComponent(name, maybeSelfReference) {\n return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;\n}\nconst NULL_DYNAMIC_COMPONENT = Symbol.for(\"v-ndc\");\nfunction resolveDynamicComponent(component) {\n if (isString(component)) {\n return resolveAsset(COMPONENTS, component, false) || component;\n } else {\n return component || NULL_DYNAMIC_COMPONENT;\n }\n}\nfunction resolveDirective(name) {\n return resolveAsset(DIRECTIVES, name);\n}\nfunction resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {\n const instance = currentRenderingInstance || currentInstance;\n if (instance) {\n const Component = instance.type;\n if (type === COMPONENTS) {\n const selfName = getComponentName(\n Component,\n false\n );\n if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) {\n return Component;\n }\n }\n const res = (\n // local registration\n // check instance[type] first which is resolved for options API\n resolve(instance[type] || Component[type], name) || // global registration\n resolve(instance.appContext[type], name)\n );\n if (!res && maybeSelfReference) {\n return Component;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && warnMissing && !res) {\n const extra = type === COMPONENTS ? `\nIf this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``;\n warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);\n }\n return res;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().`\n );\n }\n}\nfunction resolve(registry, name) {\n return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]);\n}\n\nfunction renderList(source, renderItem, cache, index) {\n let ret;\n const cached = cache && cache[index];\n const sourceIsArray = isArray(source);\n if (sourceIsArray || isString(source)) {\n const sourceIsReactiveArray = sourceIsArray && isReactive(source);\n let needsWrap = false;\n let isReadonlySource = false;\n if (sourceIsReactiveArray) {\n needsWrap = !isShallow(source);\n isReadonlySource = isReadonly(source);\n source = shallowReadArray(source);\n }\n ret = new Array(source.length);\n for (let i = 0, l = source.length; i < l; i++) {\n ret[i] = renderItem(\n needsWrap ? isReadonlySource ? toReadonly(toReactive(source[i])) : toReactive(source[i]) : source[i],\n i,\n void 0,\n cached && cached[i]\n );\n }\n } else if (typeof source === \"number\") {\n if (!!(process.env.NODE_ENV !== \"production\") && !Number.isInteger(source)) {\n warn$1(`The v-for range expect an integer value but got ${source}.`);\n }\n ret = new Array(source);\n for (let i = 0; i < source; i++) {\n ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]);\n }\n } else if (isObject(source)) {\n if (source[Symbol.iterator]) {\n ret = Array.from(\n source,\n (item, i) => renderItem(item, i, void 0, cached && cached[i])\n );\n } else {\n const keys = Object.keys(source);\n ret = new Array(keys.length);\n for (let i = 0, l = keys.length; i < l; i++) {\n const key = keys[i];\n ret[i] = renderItem(source[key], key, i, cached && cached[i]);\n }\n }\n } else {\n ret = [];\n }\n if (cache) {\n cache[index] = ret;\n }\n return ret;\n}\n\nfunction createSlots(slots, dynamicSlots) {\n for (let i = 0; i < dynamicSlots.length; i++) {\n const slot = dynamicSlots[i];\n if (isArray(slot)) {\n for (let j = 0; j < slot.length; j++) {\n slots[slot[j].name] = slot[j].fn;\n }\n } else if (slot) {\n slots[slot.name] = slot.key ? (...args) => {\n const res = slot.fn(...args);\n if (res) res.key = slot.key;\n return res;\n } : slot.fn;\n }\n }\n return slots;\n}\n\nfunction renderSlot(slots, name, props = {}, fallback, noSlotted) {\n if (currentRenderingInstance.ce || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.ce) {\n const hasProps = Object.keys(props).length > 0;\n if (name !== \"default\") props.name = name;\n return openBlock(), createBlock(\n Fragment,\n null,\n [createVNode(\"slot\", props, fallback && fallback())],\n hasProps ? -2 : 64\n );\n }\n let slot = slots[name];\n if (!!(process.env.NODE_ENV !== \"production\") && slot && slot.length > 1) {\n warn$1(\n `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.`\n );\n slot = () => [];\n }\n if (slot && slot._c) {\n slot._d = false;\n }\n openBlock();\n const validSlotContent = slot && ensureValidVNode(slot(props));\n const slotKey = props.key || // slot content array of a dynamic conditional slot may have a branch\n // key attached in the `createSlots` helper, respect that\n validSlotContent && validSlotContent.key;\n const rendered = createBlock(\n Fragment,\n {\n key: (slotKey && !isSymbol(slotKey) ? slotKey : `_${name}`) + // #7256 force differentiate fallback content from actual content\n (!validSlotContent && fallback ? \"_fb\" : \"\")\n },\n validSlotContent || (fallback ? fallback() : []),\n validSlotContent && slots._ === 1 ? 64 : -2\n );\n if (!noSlotted && rendered.scopeId) {\n rendered.slotScopeIds = [rendered.scopeId + \"-s\"];\n }\n if (slot && slot._c) {\n slot._d = true;\n }\n return rendered;\n}\nfunction ensureValidVNode(vnodes) {\n return vnodes.some((child) => {\n if (!isVNode(child)) return true;\n if (child.type === Comment) return false;\n if (child.type === Fragment && !ensureValidVNode(child.children))\n return false;\n return true;\n }) ? vnodes : null;\n}\n\nfunction toHandlers(obj, preserveCaseIfNecessary) {\n const ret = {};\n if (!!(process.env.NODE_ENV !== \"production\") && !isObject(obj)) {\n warn$1(`v-on with no argument expects an object value.`);\n return ret;\n }\n for (const key in obj) {\n ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key];\n }\n return ret;\n}\n\nconst getPublicInstance = (i) => {\n if (!i) return null;\n if (isStatefulComponent(i)) return getComponentPublicInstance(i);\n return getPublicInstance(i.parent);\n};\nconst publicPropertiesMap = (\n // Move PURE marker to new line to workaround compiler discarding it\n // due to type annotation\n /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), {\n $: (i) => i,\n $el: (i) => i.vnode.el,\n $data: (i) => i.data,\n $props: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.props) : i.props,\n $attrs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.attrs) : i.attrs,\n $slots: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.slots) : i.slots,\n $refs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.refs) : i.refs,\n $parent: (i) => getPublicInstance(i.parent),\n $root: (i) => getPublicInstance(i.root),\n $host: (i) => i.ce,\n $emit: (i) => i.emit,\n $options: (i) => __VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type,\n $forceUpdate: (i) => i.f || (i.f = () => {\n queueJob(i.update);\n }),\n $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)),\n $watch: (i) => __VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP\n })\n);\nconst isReservedPrefix = (key) => key === \"_\" || key === \"$\";\nconst hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);\nconst PublicInstanceProxyHandlers = {\n get({ _: instance }, key) {\n if (key === \"__v_skip\") {\n return true;\n }\n const { ctx, setupState, data, props, accessCache, type, appContext } = instance;\n if (!!(process.env.NODE_ENV !== \"production\") && key === \"__isVue\") {\n return true;\n }\n let normalizedProps;\n if (key[0] !== \"$\") {\n const n = accessCache[key];\n if (n !== void 0) {\n switch (n) {\n case 1 /* SETUP */:\n return setupState[key];\n case 2 /* DATA */:\n return data[key];\n case 4 /* CONTEXT */:\n return ctx[key];\n case 3 /* PROPS */:\n return props[key];\n }\n } else if (hasSetupBinding(setupState, key)) {\n accessCache[key] = 1 /* SETUP */;\n return setupState[key];\n } else if (data !== EMPTY_OBJ && hasOwn(data, key)) {\n accessCache[key] = 2 /* DATA */;\n return data[key];\n } else if (\n // only cache other properties when instance has declared (thus stable)\n // props\n (normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key)\n ) {\n accessCache[key] = 3 /* PROPS */;\n return props[key];\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) {\n accessCache[key] = 0 /* OTHER */;\n }\n }\n const publicGetter = publicPropertiesMap[key];\n let cssModule, globalProperties;\n if (publicGetter) {\n if (key === \"$attrs\") {\n track(instance.attrs, \"get\", \"\");\n !!(process.env.NODE_ENV !== \"production\") && markAttrsAccessed();\n } else if (!!(process.env.NODE_ENV !== \"production\") && key === \"$slots\") {\n track(instance, \"get\", key);\n }\n return publicGetter(instance);\n } else if (\n // css module (injected by vue-loader)\n (cssModule = type.__cssModules) && (cssModule = cssModule[key])\n ) {\n return cssModule;\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (\n // global properties\n globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)\n ) {\n {\n return globalProperties[key];\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading\n // to infinite warning loop\n key.indexOf(\"__v\") !== 0)) {\n if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {\n warn$1(\n `Property ${JSON.stringify(\n key\n )} must be accessed via $data because it starts with a reserved character (\"$\" or \"_\") and is not proxied on the render context.`\n );\n } else if (instance === currentRenderingInstance) {\n warn$1(\n `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`\n );\n }\n }\n },\n set({ _: instance }, key, value) {\n const { data, setupState, ctx } = instance;\n if (hasSetupBinding(setupState, key)) {\n setupState[key] = value;\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\") && setupState.__isScriptSetup && hasOwn(setupState, key)) {\n warn$1(`Cannot mutate \n\n\n","import { mapState } from 'pinia'\n\nimport FeaturesPanel from 'src/components/features_panel/features_panel.vue'\nimport InstanceSpecificPanel from 'src/components/instance_specific_panel/instance_specific_panel.vue'\nimport MRFTransparencyPanel from 'src/components/mrf_transparency_panel/mrf_transparency_panel.vue'\nimport StaffPanel from 'src/components/staff_panel/staff_panel.vue'\nimport TermsOfServicePanel from 'src/components/terms_of_service_panel/terms_of_service_panel.vue'\n\nimport { useInstanceStore } from 'src/stores/instance.js'\nimport { useMergedConfigStore } from 'src/stores/merged_config.js'\n\nconst pleromaFeCommitUrl =\n 'https://git.pleroma.social/pleroma/pleroma-fe/commit/'\n\nconst About = {\n components: {\n InstanceSpecificPanel,\n FeaturesPanel,\n TermsOfServicePanel,\n StaffPanel,\n MRFTransparencyPanel,\n },\n computed: {\n showFeaturesPanel() {\n return useInstanceStore().instanceIdentity.showFeaturesPanel\n },\n frontendVersionLink() {\n return pleromaFeCommitUrl + this.frontendVersion\n },\n ...mapState(useInstanceStore, [\n 'backendVersion',\n 'backendRepository',\n 'frontendVersion',\n ]),\n showInstanceSpecificPanel() {\n return (\n useInstanceStore().instanceIdentity.showInstanceSpecificPanel &&\n !useMergedConfigStore().mergedConfig.hideISP &&\n useInstanceStore().instanceIdentity.instanceSpecificPanelContent\n )\n },\n },\n}\n\nexport default About\n","\n\n\n\n"],"mappings":"2dAWM,GAA0B,EAAW,EAAM,IACxC,EAAU,IAAK,GAChB,EAAK,IAAQ,EAAK,GAAK,IAAa,EAAK,GAAK,GAAU,OACnD,CAAE,WAAU,OAAQ,EAAK,GAAK,GAAU,MAAO,EAEjD,CAAE,WAAU,OAAQ,EAAG,CAC/B,EAGG,EAAuB,CAC3B,SAAU,CACR,GAAG,EAAS,EAAkB,CAC5B,iBAAmB,GAAU,EAAM,iBACnC,YAAc,IAAA,EAAA,EAAA,KAAc,EAAO,gCAAiC,CAAC,CAAC,EACtE,oBAAsB,GACpB,GAAA,EAAA,EAAA,KACM,EAAO,yCAA0C,CAAC,CAAC,GAAA,EAAA,EAAA,KACnD,EAAO,8CAA+C,CAAC,CAAC,EAC5D,uBACF,EACF,gBAAkB,GAChB,GAAA,EAAA,EAAA,KACM,EAAO,qCAAsC,CAAC,CAAC,GAAA,EAAA,EAAA,KAC/C,EAAO,mCAAoC,CAAC,CAAC,EACjD,QACF,EACF,gBAAkB,GAChB,GAAA,EAAA,EAAA,KACM,EAAO,qCAAsC,CAAC,CAAC,GAAA,EAAA,EAAA,KAC/C,EAAO,mCAAoC,CAAC,CAAC,EACjD,QACF,EACF,oBAAsB,GACpB,GAAA,EAAA,EAAA,KAEI,EACA,yDACA,CAAC,CACH,GAAA,EAAA,EAAA,KACI,EAAO,mCAAoC,CAAC,CAAC,EACjD,4BACF,EACF,mBAAqB,GACnB,GAAA,EAAA,EAAA,KACM,EAAO,yCAA0C,CAAC,CAAC,GAAA,EAAA,EAAA,KACnD,EAAO,mCAAoC,CAAC,CAAC,EACjD,YACF,EACF,sBAAwB,GACtB,GAAA,EAAA,EAAA,KACM,EAAO,4CAA6C,CAAC,CAAC,GAAA,EAAA,EAAA,KACtD,EAAO,mCAAoC,CAAC,CAAC,EACjD,eACF,EACF,mBAAqB,IAAA,EAAA,EAAA,KAEjB,EACA,0DACA,CAAC,CACH,EACF,eAAiB,IAAA,EAAA,EAAA,KACX,EAAO,sCAAuC,CAAC,CAAC,EACtD,gBAAkB,IAAA,EAAA,EAAA,KACZ,EAAO,uCAAwC,CAAC,CAAC,CACzD,CAAC,EACD,6BAA8B,CAC5B,OACE,KAAK,oBAAoB,QACzB,KAAK,gBAAgB,QACrB,KAAK,gBAAgB,QACrB,KAAK,oBAAoB,QACzB,KAAK,mBAAmB,QACxB,KAAK,sBAAsB,MAE/B,EACA,oBAAqB,CACnB,OACE,KAAK,mBAAmB,QACxB,KAAK,eAAe,QACpB,KAAK,gBAAgB,MAEzB,CACF,CACF,WC3FI,MAAM,6BAED,MAAM,uCAAuC,KAC3C,MAAM,0DAA0D,KAC9D,MAAM,OAAO,KAIf,MAAM,YAAY,KAChB,MAAM,aAAa,iUAVtB,EAAA,kBAAA,EAAA,EADR,EA0OM,MA1ON,EA0OM,CAtOJ,EAqOM,MArON,EAqOM,CApOJ,EAIM,MAJN,EAIM,CAHJ,EAEM,MAFN,EAEM,EADD,EAAA,GAAE,sBAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAGT,EA8NM,MA9NN,EA8NM,CA7NJ,EA4NM,MA5NN,EA4NM,CA3NJ,EAA2C,KAAA,KAAA,EAApC,EAAA,GAAE,wBAAA,CAAA,EAAA,CAAA,EACT,EAA8C,IAAA,KAAA,EAAxC,EAAA,GAAE,6BAAA,CAAA,EAAA,CAAA,EAER,EAMK,KAAA,KAAA,EAAA,EAAA,EAAA,EALH,EAIE,EAAA,KAAA,EAHiB,EAAA,YAAV,QADT,EAIE,KAAA,CAFC,IAAK,cACN,EAAe,CAAD,uBAIR,EAAA,6BAAA,EAAA,EAAV,EAEK,KAAA,EAAA,EADA,EAAA,GAAE,kCAAA,CAAA,EAAA,CAAA,GAAA,EAAA,GAAA,EAAA,EAGI,EAAA,gBAAgB,QAAA,EAAA,EAA3B,EAyBM,MAAA,EAAA,CAxBJ,EAA4C,KAAA,KAAA,EAArC,EAAA,GAAE,yBAAA,CAAA,EAAA,CAAA,EAET,EAA+C,IAAA,KAAA,EAAzC,EAAA,GAAE,8BAAA,CAAA,EAAA,CAAA,EAER,EAmBQ,QAAA,KAAA,CAlBN,EAiBQ,QAAA,KAAA,CAhBN,EAGK,KAAA,KAAA,CAFH,EAA8C,KAAA,KAAA,EAAvC,EAAA,GAAE,2BAAA,CAAA,EAAA,CAAA,EACT,EAA4C,KAAA,KAAA,EAArC,EAAA,GAAE,yBAAA,CAAA,EAAA,CAAA,CAAA,CAAA,GAAA,EAAA,EAAA,EAEX,EAWK,EAAA,KAAA,EAVa,EAAA,gBAAT,QADT,EAWK,KAAA,CATF,IAAK,EAAM,SAAQ,SAAA,EAAA,CAEpB,EAA6B,KAAA,KAAA,EAAtB,EAAM,QAAQ,EAAA,CAAA,EACX,EAAM,SAAM,IAAA,EAAA,EAAtB,EAEK,KAAA,EAAA,EADA,EAAA,GAAE,iCAAA,CAAA,EAAA,CAAA,IAAA,EAAA,EAEP,EAEK,KAAA,EAAA,EADA,EAAM,MAAM,EAAA,CAAA,EAAA,CAAA,0BAOd,EAAA,gBAAgB,QAAA,EAAA,EAA3B,EAyBM,MAAA,EAAA,CAxBJ,EAA4C,KAAA,KAAA,EAArC,EAAA,GAAE,yBAAA,CAAA,EAAA,CAAA,EAET,EAA+C,IAAA,KAAA,EAAzC,EAAA,GAAE,8BAAA,CAAA,EAAA,CAAA,EAER,EAmBQ,QAAA,KAAA,CAlBN,EAiBQ,QAAA,KAAA,CAhBN,EAGK,KAAA,KAAA,CAFH,EAA8C,KAAA,KAAA,EAAvC,EAAA,GAAE,2BAAA,CAAA,EAAA,CAAA,EACT,EAA4C,KAAA,KAAA,EAArC,EAAA,GAAE,yBAAA,CAAA,EAAA,CAAA,CAAA,CAAA,GAAA,EAAA,EAAA,EAEX,EAWK,EAAA,KAAA,EAVa,EAAA,gBAAT,QADT,EAWK,KAAA,CATF,IAAK,EAAM,SAAQ,SAAA,EAAA,CAEpB,EAA6B,KAAA,KAAA,EAAtB,EAAM,QAAQ,EAAA,CAAA,EACX,EAAM,SAAM,IAAA,EAAA,EAAtB,EAEK,KAAA,EAAA,EADA,EAAA,GAAE,iCAAA,CAAA,EAAA,CAAA,IAAA,EAAA,EAEP,EAEK,KAAA,EAAA,EADA,EAAM,MAAM,EAAA,CAAA,EAAA,CAAA,0BAOd,EAAA,oBAAoB,QAAA,EAAA,EAA/B,EAyBM,MAAA,EAAA,CAxBJ,EAAgD,KAAA,KAAA,EAAzC,EAAA,GAAE,6BAAA,CAAA,EAAA,CAAA,EAET,EAAmD,IAAA,KAAA,EAA7C,EAAA,GAAE,kCAAA,CAAA,EAAA,CAAA,EAER,EAmBQ,QAAA,KAAA,CAlBN,EAiBQ,QAAA,KAAA,CAhBN,EAGK,KAAA,KAAA,CAFH,EAA8C,KAAA,KAAA,EAAvC,EAAA,GAAE,2BAAA,CAAA,EAAA,CAAA,EACT,EAA4C,KAAA,KAAA,EAArC,EAAA,GAAE,yBAAA,CAAA,EAAA,CAAA,CAAA,CAAA,GAAA,EAAA,EAAA,EAEX,EAWK,EAAA,KAAA,EAVa,EAAA,oBAAT,QADT,EAWK,KAAA,CATF,IAAK,EAAM,SAAQ,aAAA,EAAA,CAEpB,EAA6B,KAAA,KAAA,EAAtB,EAAM,QAAQ,EAAA,CAAA,EACX,EAAM,SAAM,IAAA,EAAA,EAAtB,EAEK,KAAA,EAAA,EADA,EAAA,GAAE,iCAAA,CAAA,EAAA,CAAA,IAAA,EAAA,EAEP,EAEK,KAAA,EAAA,EADA,EAAM,MAAM,EAAA,CAAA,EAAA,CAAA,0BAOd,EAAA,oBAAoB,QAAA,EAAA,EAA/B,EAyBM,MAAA,EAAA,CAxBJ,EAAiD,KAAA,KAAA,EAA1C,EAAA,GAAE,8BAAA,CAAA,EAAA,CAAA,EAET,EAAoD,IAAA,KAAA,EAA9C,EAAA,GAAE,mCAAA,CAAA,EAAA,CAAA,EAER,EAmBQ,QAAA,KAAA,CAlBN,EAiBQ,QAAA,KAAA,CAhBN,EAGK,KAAA,KAAA,CAFH,EAA8C,KAAA,KAAA,EAAvC,EAAA,GAAE,2BAAA,CAAA,EAAA,CAAA,EACT,EAA4C,KAAA,KAAA,EAArC,EAAA,GAAE,yBAAA,CAAA,EAAA,CAAA,CAAA,CAAA,GAAA,EAAA,EAAA,EAEX,EAWK,EAAA,KAAA,EAVa,EAAA,oBAAT,QADT,EAWK,KAAA,CATF,IAAK,EAAM,SAAQ,cAAA,EAAA,CAEpB,EAA6B,KAAA,KAAA,EAAtB,EAAM,QAAQ,EAAA,CAAA,EACX,EAAM,SAAM,IAAA,EAAA,EAAtB,EAEK,KAAA,EAAA,EADA,EAAA,GAAE,iCAAA,CAAA,EAAA,CAAA,IAAA,EAAA,EAEP,EAEK,KAAA,EAAA,EADA,EAAM,MAAM,EAAA,CAAA,EAAA,CAAA,0BAOd,EAAA,mBAAmB,QAAA,EAAA,EAA9B,EAyBM,MAAA,EAAA,CAxBJ,EAAgD,KAAA,KAAA,EAAzC,EAAA,GAAE,6BAAA,CAAA,EAAA,CAAA,EAET,EAAmD,IAAA,KAAA,EAA7C,EAAA,GAAE,kCAAA,CAAA,EAAA,CAAA,EAER,EAmBQ,QAAA,KAAA,CAlBN,EAiBQ,QAAA,KAAA,CAhBN,EAGK,KAAA,KAAA,CAFH,EAA8C,KAAA,KAAA,EAAvC,EAAA,GAAE,2BAAA,CAAA,EAAA,CAAA,EACT,EAA4C,KAAA,KAAA,EAArC,EAAA,GAAE,yBAAA,CAAA,EAAA,CAAA,CAAA,CAAA,GAAA,EAAA,EAAA,EAEX,EAWK,EAAA,KAAA,EAVa,EAAA,mBAAT,QADT,EAWK,KAAA,CATF,IAAK,EAAM,SAAQ,aAAA,EAAA,CAEpB,EAA6B,KAAA,KAAA,EAAtB,EAAM,QAAQ,EAAA,CAAA,EACX,EAAM,SAAM,IAAA,EAAA,EAAtB,EAEK,KAAA,EAAA,EADA,EAAA,GAAE,iCAAA,CAAA,EAAA,CAAA,IAAA,EAAA,EAEP,EAEK,KAAA,EAAA,EADA,EAAM,MAAM,EAAA,CAAA,EAAA,CAAA,0BAOd,EAAA,sBAAsB,QAAA,EAAA,EAAjC,EAyBM,MAAA,EAAA,CAxBJ,EAAmD,KAAA,KAAA,EAA5C,EAAA,GAAE,gCAAA,CAAA,EAAA,CAAA,EAET,EAAsD,IAAA,KAAA,EAAhD,EAAA,GAAE,qCAAA,CAAA,EAAA,CAAA,EAER,EAmBQ,QAAA,KAAA,CAlBN,EAiBQ,QAAA,KAAA,CAhBN,EAGK,KAAA,KAAA,CAFH,EAA8C,KAAA,KAAA,EAAvC,EAAA,GAAE,2BAAA,CAAA,EAAA,CAAA,EACT,EAA4C,KAAA,KAAA,EAArC,EAAA,GAAE,yBAAA,CAAA,EAAA,CAAA,CAAA,CAAA,GAAA,EAAA,EAAA,EAEX,EAWK,EAAA,KAAA,EAVa,EAAA,sBAAT,QADT,EAWK,KAAA,CATF,IAAK,EAAM,SAAQ,gBAAA,EAAA,CAEpB,EAA6B,KAAA,KAAA,EAAtB,EAAM,QAAQ,EAAA,CAAA,EACX,EAAM,SAAM,IAAA,EAAA,EAAtB,EAEK,KAAA,GAAA,EADA,EAAA,GAAE,iCAAA,CAAA,EAAA,CAAA,IAAA,EAAA,EAEP,EAEK,KAAA,EAAA,EADA,EAAM,MAAM,EAAA,CAAA,EAAA,CAAA,0BAOf,EAAA,oBAAA,EAAA,EAAV,EAEK,KAAA,EAAA,EADA,EAAA,GAAE,oCAAA,CAAA,EAAA,CAAA,GAAA,EAAA,GAAA,EAAA,EAGI,EAAA,mBAAmB,QAAA,EAAA,EAA9B,EAUM,MAAA,EAAA,CATJ,EAAkD,KAAA,KAAA,EAA3C,EAAA,GAAE,+BAAA,CAAA,EAAA,CAAA,EAET,EAMK,KAAA,KAAA,EAAA,EAAA,EAAA,EALH,EAIE,EAAA,KAAA,EAHkB,EAAA,mBAAX,QADT,EAIE,KAAA,CAFC,IAAK,cACN,EAAgB,CAAD,mCAKV,EAAA,eAAe,QAAA,EAAA,EAA1B,EAUM,MAAA,EAAA,CATJ,EAA6C,KAAA,KAAA,EAAtC,EAAA,GAAE,0BAAA,CAAA,EAAA,CAAA,EAET,EAMK,KAAA,KAAA,EAAA,EAAA,EAAA,EALH,EAIE,EAAA,KAAA,EAHkB,EAAA,eAAX,QADT,EAIE,KAAA,CAFC,IAAK,cACN,EAAgB,CAAD,mCAKV,EAAA,gBAAgB,QAAA,EAAA,EAA3B,EAaM,MAAA,GAAA,CAZJ,EAA8C,KAAA,KAAA,EAAvC,EAAA,GAAE,2BAAA,CAAA,EAAA,CAAA,EAET,EASK,KAAA,KAAA,EAAA,EAAA,EAAA,EARH,EAOK,EAAA,KAAA,EANe,EAAA,gBAAX,QADT,EAOK,KAAA,CALF,IAAK,CAAO,EAAA,EAEV,EAAQ,OAAO,EAAG,IACrB,EAAG,EAAA,GAAE,kCAAA,CAAA,EAAuC,IAC5C,EAAG,EAAQ,WAAW,EAAA,CAAA,sEC7NhC,GAAa,CACjB,SAAU,CAER,EADmC,EAAE,cAC3B,QAAS,GACjB,KAAK,OAAO,SAAS,qBAAsB,CAAQ,CACrD,CACF,EACA,WAAY,CACV,cAAA,EACF,EACA,SAAU,CACR,sBAAuB,CAIrB,IAAM,GAAA,EAAA,EAAA,UAAA,EAAA,EAAA,KAHoB,KAAK,cAAe,KAAK,cAAc,EAAE,OAChE,GAAM,CAEwC,EAAG,MAAM,EAE1D,MAAO,CACL,CAAE,KAAM,QAAS,MAAO,EAAqB,KAAM,EACnD,CAAE,KAAM,YAAa,MAAO,EAAqB,SAAU,CAC7D,EAAE,OAAQ,GAAU,EAAM,KAAK,CACjC,EACA,GAAG,EAAW,CAAC,gBAAgB,CAAC,EAChC,GAAGA,EAAS,CACV,cAAgB,GAAU,EAAiB,EAAE,aAC/C,CAAC,CACH,CACF,MCjCO,MAAM,aAAa,MACjB,MAAM,uCAAuC,MAC3C,MAAM,0DAA0D,MAC9D,MAAM,OAAO,MAIf,MAAM,YAAY,iEAP3B,EAsBM,MAtBN,GAsBM,CArBJ,EAoBM,MApBN,GAoBM,CAnBJ,EAIM,MAJN,GAIM,CAHJ,EAEM,MAFN,GAEM,EADD,EAAA,GAAE,aAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAGT,EAaM,MAbN,GAaM,EAAA,EAAA,EAAA,EAZJ,EAWM,EAAA,KAAA,EAVY,EAAA,qBAAT,QADT,EAWM,MAAA,CATH,IAAK,EAAM,KACZ,MAAM,gBAEN,EAA+C,KAAA,KAAA,EAAxC,EAAA,GAAE,gBAAmB,EAAM,IAAI,CAAA,EAAA,CAAA,GAAA,EAAA,EAAA,EACtC,EAIE,EAAA,KAAA,EAHe,EAAM,MAAd,QADT,EAIE,EAAA,CAFC,IAAK,EAAK,YACJ,8ECPb,GACJ,wDAEI,EAAQ,CACZ,WAAY,CACV,sBAAA,EACA,cAAA,EACA,oBAAA,EACA,WAAA,GACA,qBAAA,EACF,EACA,SAAU,CACR,mBAAoB,CAClB,OAAO,EAAiB,EAAE,iBAAiB,iBAC7C,EACA,qBAAsB,CACpB,OAAO,GAAqB,KAAK,eACnC,EACA,GAAG,EAAS,EAAkB,CAC5B,iBACA,oBACA,iBACF,CAAC,EACD,2BAA4B,CAC1B,OACE,EAAiB,EAAE,iBAAiB,2BACpC,CAAC,EAAqB,EAAE,aAAa,SACrC,EAAiB,EAAE,iBAAiB,4BAExC,CACF,CACF,MCzCO,MAAM,oBAAoB,MAMxB,MAAM,qBAAqB,MACzB,MAAM,eAAe,MACnB,MAAM,OAAO,MAIf,MAAM,YAAY,oMAZ3B,EAmCM,MAnCN,GAmCM,CAlC2B,EAAA,2BAAA,EAAA,EAA/B,EAA4D,EAAA,CAAA,IAAA,CAAA,CAAA,GAAA,EAAA,GAAA,EAAA,EAC5D,EAAe,CAAA,EACf,EAA0B,CAAA,EAC1B,EAAwB,CAAA,EACF,EAAA,mBAAA,EAAA,EAAtB,EAA2C,EAAA,CAAA,IAAA,CAAA,CAAA,GAAA,EAAA,GAAA,EAAA,EAC3C,EA4BM,MA5BN,GA4BM,CA3BJ,EAIM,MAJN,GAIM,CAHJ,EAEM,MAFN,GAEM,EADD,EAAA,GAAE,wBAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAGT,EAqBM,MArBN,GAqBM,CApBJ,EAmBK,KAAA,KAAA,CAlBH,EAAqD,KAAA,KAAA,EAA9C,EAAA,GAAE,kCAAA,CAAA,EAAA,CAAA,EACT,EAOK,KAAA,KAAA,CANH,EAKI,IAAA,CAJD,KAAM,EAAA,kBACP,OAAO,YAEJ,EAAA,cAAc,EAAA,EAAA,EAAA,CAAA,CAAA,EAGrB,EAAsD,KAAA,KAAA,EAA/C,EAAA,GAAE,mCAAA,CAAA,EAAA,CAAA,EACT,EAOK,KAAA,KAAA,CANH,EAKI,IAAA,CAJD,KAAM,EAAA,oBACP,OAAO,YAEJ,EAAA,eAAe,EAAA,EAAA,EAAA,CAAA,CAAA"} \ No newline at end of file diff --git a/priv/static/static/js/account_actions.iKah8h7y.js b/priv/static/static/js/account_actions.iKah8h7y.js new file mode 100644 index 000000000..93f928e07 --- /dev/null +++ b/priv/static/static/js/account_actions.iKah8h7y.js @@ -0,0 +1,3 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["static/js/confirm_modal.f5dYyJF2.js","static/js/_plugin-vue_export-helper.By3-ojQa.js","static/js/chunk.aKtaBQYM.js","static/js/free-solid-svg-icons.vn_kySUQ.js","static/js/runtime-dom.esm-bundler.DzcUlaDE.js","static/js/dialog_modal.CxsP9W3P.js","static/js/oauth.C4JLKGAu.js","static/js/lodash.daI9UflD.js","static/js/modal.BLgTTi-o.js","static/css/modal.Dv3V-p-W.css","static/js/helpers.DO6M90bq.js","static/css/dialog_modal.DC5hTqSH.css","static/css/confirm_modal.CxXYsWAn.css","static/js/user_timed_filter_modal.Njj7Gcae.js","static/js/main.CPF6dYCY.js","static/js/emoji.CKB_ooIp.js","static/js/preload-helper.zJ_50EbN.js","static/js/languages.q6q0orhR.js","static/js/free-regular-svg-icons.BGRGA4e_.js","static/js/vuex.esm-bundler.CWMfctgB.js","static/js/locale.service.ol8gNUGd.js","static/js/admin.Dy10Wzep.js","static/js/checkbox.BfKZDdOO.js","static/css/checkbox.DY0WQ--N.css","static/js/user_card.DVbLIASH.js","static/js/attributes_helper.service.Ku0p8pb2.js","static/js/emoji_picker.Ccx2u99H.js","static/js/popover.94nM-RDc.js","static/css/popover.BlbX_Uwp.css","static/css/emoji_picker.CJFAWWOw.css","static/js/unicode_domain_indicator.BnLqD48H.js","static/css/attributes_helper.DsgIU8rn.css","static/js/progress_button.B2rAp_zx.js","static/js/select.BU31Em0g.js","static/css/select.BF2ygbkJ.css","static/js/user_link.CzPI9p_B.js","static/js/user_profile_link_generator.WrdnW5sg.js","static/js/instance_capabilities.B6a7_omF.js","static/js/media_viewer.B2Dx6m_D.js","static/js/post_status.BF7jtp5r.js","static/css/user_card.C2QiPTUj.css","static/js/promise_interval.BgbE32Aa.js","static/css/main.0Iw0byjp.css","static/css/user_timed_filter_modal.ClNyvF9i.css"])))=>i.map(i=>d[i]); +import{I as e,M as t,R as n,U as r,X as i,_ as a,d as o,f as s,g as c,i as l,o as u,p as d,q as f,t as p,u as m,v as h}from"./_plugin-vue_export-helper.By3-ojQa.js";import{a as g}from"./modal.BLgTTi-o.js";import{O as _}from"./oauth.C4JLKGAu.js";import{T as v,kn as y,q as b}from"./free-solid-svg-icons.vn_kySUQ.js";import{t as x}from"./preload-helper.zJ_50EbN.js";import{n as S}from"./instance_capabilities.B6a7_omF.js";import{t as C}from"./popover.94nM-RDc.js";import{t as w}from"./progress_button.B2rAp_zx.js";import{V as T,z as E}from"./main.CPF6dYCY.js";y.add(v);var D={props:[`user`],data(){return{}},components:{Popover:C},created(){this.$store.dispatch(`fetchUserInLists`,this.user.id)},computed:{...g(T,{allLists:e=>e.allLists}),inListsSet(){return new Set(this.user.inLists.map(e=>e.id))},lists(){return this.user.inLists?this.allLists.map(e=>({...e,inList:this.inListsSet.has(e.id)})):[]},triggerAttrs(){return{class:`menu-item dropdown-item -has-submenu`}}},methods:{toggleList(e){this.inListsSet.has(e)?T().removeListAccount({accountId:this.user.id,listId:e}).then(e=>{e.ok&&this.$store.dispatch(`fetchUserInLists`,this.user.id)}):T().addListAccount({accountId:this.user.id,listId:e}).then(e=>{e.ok&&this.$store.dispatch(`fetchUserInLists`,this.user.id)})}}},O={class:`UserListMenu`},k={class:`dropdown-menu`},A=[`onClick`],j={class:`main-button`};function M(o,s,u,p,h,g){let _=n(`FAIcon`),v=n(`Popover`);return t(),d(`div`,O,[a(v,{trigger:`hover`,placement:`right`,"trigger-attrs":o.triggerAttrs,"remove-padding":``},{content:r(()=>[m(`div`,k,[(t(!0),d(l,null,e(o.lists,e=>(t(),d(`div`,{key:e.id,class:`menu-item dropdown-item -icon`},[m(`button`,{class:`main-button`,onClick:t=>o.toggleList(e.id)},[m(`span`,{class:f([`input menu-checkbox`,{"menu-checkbox-checked":e.inList}])},null,2),c(` `+i(e.title),1)],8,A)]))),128))])]),trigger:r(()=>[m(`span`,j,[c(i(o.$t(`lists.manage_lists`))+` `,1),a(_,{class:`chevron-icon`,size:`lg`,icon:`chevron-right`})])]),_:1},8,[`trigger-attrs`])])}var N=p(D,[[`render`,M]]);y.add(b);var P={props:[`user`,`relationship`],data(){return{showingConfirmBlock:!1,showingConfirmRemoveFollower:!1}},components:{ProgressButton:w,Popover:C,UserListMenu:N,ConfirmModal:h(()=>x(()=>import(`./confirm_modal.f5dYyJF2.js`).then(e=>e.n),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]))),UserTimedFilterModal:h(()=>x(()=>import(`./user_timed_filter_modal.Njj7Gcae.js`).then(e=>e.n),__vite__mapDeps([13,1,2,14,15,16,6,3,7,8,4,9,10,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43])))},methods:{showConfirmRemoveUserFromFollowers(){this.showingConfirmRemoveFollower=!0},hideConfirmRemoveUserFromFollowers(){this.showingConfirmRemoveFollower=!1},hideConfirmBlock(){this.showingConfirmBlock=!1},showRepeats(){this.$store.dispatch(`showReblogs`,this.user.id)},hideRepeats(){this.$store.dispatch(`hideReblogs`,this.user.id)},blockUser(){this.$refs.timedBlockDialog?this.$refs.timedBlockDialog.optionallyPrompt():this.shouldConfirmBlock?this.showingConfirmBlock=!0:this.doBlockUser()},doBlockUser(){this.$store.dispatch(`blockUser`,{id:this.user.id}),this.hideConfirmBlock()},unblockUser(){this.$store.dispatch(`unblockUser`,this.user.id)},removeUserFromFollowers(){this.shouldConfirmRemoveUserFromFollowers?this.showConfirmRemoveUserFromFollowers():this.doRemoveUserFromFollowers()},doRemoveUserFromFollowers(){this.$store.dispatch(`removeUserFromFollowers`,this.user.id),this.hideConfirmRemoveUserFromFollowers()},reportUser(){E().openUserReportingModal({userId:this.user.id})},openChat(){this.$router.push({name:`chat`,params:{username:this.$store.state.users.currentUser.screen_name,recipient_id:this.user.id}})}},computed:{shouldConfirmBlock(){return _().mergedConfig.modalOnBlock},shouldConfirmRemoveUserFromFollowers(){return _().mergedConfig.modalOnRemoveUserFromFollowers},...g(S,[`blockExpiration`,`pleromaChatMessagesAvailable`])}},F={class:`AccountActions`},I={class:`dropdown-menu`},L={key:0,class:`menu-item dropdown-item`},R={key:1,class:`menu-item dropdown-item`},z={key:1,class:`menu-item dropdown-item`},B={class:`menu-item dropdown-item`},V={class:`menu-item dropdown-item`},H={key:2,class:`menu-item dropdown-item`},U={class:`button-unstyled ellipsis-button`},W=[`textContent`],G=[`textContent`];function K(e,c,f,p,h,g){let _=n(`UserListMenu`),v=n(`FAIcon`),y=n(`Popover`),b=n(`i18n-t`),x=n(`ConfirmModal`),S=n(`UserTimedFilterModal`);return t(),d(`div`,F,[a(y,{trigger:`click`,placement:`bottom`,"remove-padding":``},{content:r(()=>[m(`div`,I,[e.relationship.following?(t(),d(l,{key:0},[e.relationship.showing_reblogs?(t(),d(`div`,L,[m(`button`,{class:`main-button`,onClick:c[0]||=(...t)=>e.hideRepeats&&e.hideRepeats(...t)},i(e.$t(`user_card.hide_repeats`)),1)])):s(``,!0),e.relationship.showing_reblogs?s(``,!0):(t(),d(`div`,R,[m(`button`,{class:`main-button`,onClick:c[1]||=(...t)=>e.showRepeats&&e.showRepeats(...t)},i(e.$t(`user_card.show_repeats`)),1)])),c[7]||=m(`div`,{role:`separator`,class:`dropdown-divider`},null,-1)],64)):s(``,!0),a(_,{user:e.user},null,8,[`user`]),e.relationship.followed_by?(t(),d(`div`,z,[m(`button`,{class:`main-button`,onClick:c[2]||=(...t)=>e.removeUserFromFollowers&&e.removeUserFromFollowers(...t)},i(e.$t(`user_card.remove_follower`)),1)])):s(``,!0),m(`div`,B,[e.relationship.blocking?(t(),d(`button`,{key:0,class:`main-button`,onClick:c[3]||=(...t)=>e.unblockUser&&e.unblockUser(...t)},i(e.$t(`user_card.unblock`)),1)):(t(),d(`button`,{key:1,class:`main-button`,onClick:c[4]||=(...t)=>e.blockUser&&e.blockUser(...t)},i(e.$t(`user_card.block`)),1))]),m(`div`,V,[m(`button`,{class:`main-button`,onClick:c[5]||=(...t)=>e.reportUser&&e.reportUser(...t)},i(e.$t(`user_card.report`)),1)]),e.pleromaChatMessagesAvailable?(t(),d(`div`,H,[m(`button`,{class:`main-button`,onClick:c[6]||=(...t)=>e.openChat&&e.openChat(...t)},i(e.$t(`user_card.message`)),1)])):s(``,!0)])]),trigger:r(()=>[m(`button`,U,[a(v,{class:`icon`,icon:`ellipsis-v`})])]),_:1}),(t(),o(u,{to:`#modal`},[e.showingConfirmBlock&&!e.blockExpiration?(t(),o(x,{key:0,ref:`blockDialog`,title:e.$t(`user_card.block_confirm_title`),"confirm-text":e.$t(`user_card.block_confirm_accept_button`),"cancel-text":e.$t(`user_card.block_confirm_cancel_button`),onAccepted:e.doBlockUser,onCancelled:e.hideConfirmBlock},{default:r(()=>[a(b,{keypath:`user_card.block_confirm`,tag:`span`,scope:`global`},{user:r(()=>[m(`span`,{textContent:i(e.user.screen_name_ui)},null,8,W)]),_:1})]),_:1},8,[`title`,`confirm-text`,`cancel-text`,`onAccepted`,`onCancelled`])):s(``,!0)])),(t(),o(u,{to:`#modal`},[e.showingConfirmRemoveFollower?(t(),o(x,{key:0,title:e.$t(`user_card.remove_follower_confirm_title`),"confirm-text":e.$t(`user_card.remove_follower_confirm_accept_button`),"cancel-text":e.$t(`user_card.remove_follower_confirm_cancel_button`),onAccepted:e.doRemoveUserFromFollowers,onCancelled:e.hideConfirmRemoveUserFromFollowers},{default:r(()=>[a(b,{keypath:`user_card.remove_follower_confirm`,tag:`span`,scope:`global`},{user:r(()=>[m(`span`,{textContent:i(e.user.screen_name_ui)},null,8,G)]),_:1})]),_:1},8,[`title`,`confirm-text`,`cancel-text`,`onAccepted`,`onCancelled`])):s(``,!0),e.blockExpiration?(t(),o(S,{key:1,ref:`timedBlockDialog`,"is-mute":!1,user:e.user},null,8,[`user`])):s(``,!0)]))])}var q=p(P,[[`render`,K]]);export{q as default}; +//# sourceMappingURL=account_actions.iKah8h7y.js.map \ No newline at end of file diff --git a/priv/static/static/js/account_actions.iKah8h7y.js.map b/priv/static/static/js/account_actions.iKah8h7y.js.map new file mode 100644 index 000000000..97bf5e559 --- /dev/null +++ b/priv/static/static/js/account_actions.iKah8h7y.js.map @@ -0,0 +1 @@ +{"version":3,"mappings":";8iBASAA,EAAQ,IAAI,CAAc,EAE1B,IAAM,EAAe,CACnB,MAAO,CAAC,MAAM,EACd,MAAO,CACL,MAAO,CAAC,CACV,EACA,WAAY,CACV,SACF,EACA,SAAU,CACR,KAAK,OAAO,SAAS,mBAAoB,KAAK,KAAK,EAAE,CACvD,EACA,SAAU,CACR,GAAG,EAAS,EAAe,CACzB,SAAW,GAAU,EAAM,QAC7B,CAAC,EACD,YAAa,CACX,OAAO,IAAI,IAAI,KAAK,KAAK,QAAQ,IAAK,GAAM,EAAE,EAAE,CAAC,CACnD,EACA,OAAQ,CAEN,OADK,KAAK,KAAK,QACR,KAAK,SAAS,IAAK,IAAU,CAClC,GAAG,EACH,OAAQ,KAAK,WAAW,IAAI,EAAK,EAAE,CACrC,EAAE,EAJ6B,CAAC,CAKlC,EACA,cAAe,CACb,MAAO,CACL,MAAO,sCACT,CACF,CACF,EACA,QAAS,CACP,WAAW,EAAQ,CACb,KAAK,WAAW,IAAI,CAAM,EAC5B,EAAc,EACX,kBAAkB,CAAE,UAAW,KAAK,KAAK,GAAI,QAAO,CAAC,EACrD,KAAM,GAAa,CACb,EAAS,IAGd,KAAK,OAAO,SAAS,mBAAoB,KAAK,KAAK,EAAE,CACvD,CAAC,EAEH,EAAc,EACX,eAAe,CAAE,UAAW,KAAK,KAAK,GAAI,QAAO,CAAC,EAClD,KAAM,GAAa,CACb,EAAS,IAGd,KAAK,OAAO,SAAS,mBAAoB,KAAK,KAAK,EAAE,CACvD,CAAC,CAEP,CACF,CACF,KChEO,MAAM,cAAc,KAQd,MAAM,eAAe,mBAoBpB,MAAM,aAAa,sEA5B/B,EAsCM,MAtCN,EAsCM,CArCJ,EAoCU,GAnCR,QAAQ,QACR,UAAU,QACT,gBAAe,eAChB,sBAEW,QAAO,MAkBV,CAjBN,EAiBM,MAjBN,EAiBM,QAhBJ,EAeM,SAdW,QAAR,QADT,EAeM,OAbH,IAAK,EAAK,GACX,MAAM,kCAEN,EASS,UARP,MAAM,cACL,QAAK,GAAE,aAAW,EAAK,EAAE,IAE1B,EAGE,QAFA,MAAK,GAAC,sBAAqB,yBACQ,EAAK,MAAM,eAC9C,IACF,EAAG,EAAK,KAAK,yBAKV,QAAO,MAQT,CAPP,EAOO,OAPP,EAOO,KANF,KAAE,uBAAyB,IAC9B,KAIE,GAHA,MAAM,eACN,KAAK,KACL,KAAK,4ECpBjBA,EAAQ,IAAI,CAAW,EAEvB,IAAM,EAAiB,CACrB,MAAO,CAAC,OAAQ,cAAc,EAC9B,MAAO,CACL,MAAO,CACL,oBAAqB,GACrB,6BAA8B,EAChC,CACF,EACA,WAAY,CACV,iBACA,UACA,eACA,aAAc,YACN,OAAO,4FACf,EACA,qBAAsB,YAElB,OACE,yLAEN,CACF,EACA,QAAS,CACP,oCAAqC,CACnC,KAAK,6BAA+B,EACtC,EACA,oCAAqC,CACnC,KAAK,6BAA+B,EACtC,EACA,kBAAmB,CACjB,KAAK,oBAAsB,EAC7B,EACA,aAAc,CACZ,KAAK,OAAO,SAAS,cAAe,KAAK,KAAK,EAAE,CAClD,EACA,aAAc,CACZ,KAAK,OAAO,SAAS,cAAe,KAAK,KAAK,EAAE,CAClD,EACA,WAAY,CACN,KAAK,MAAM,iBACb,KAAK,MAAM,iBAAiB,iBAAiB,EAExC,KAAK,mBAGR,KAAK,oBAAsB,GAF3B,KAAK,YAAY,CAKvB,EACA,aAAc,CACZ,KAAK,OAAO,SAAS,YAAa,CAAE,GAAI,KAAK,KAAK,EAAG,CAAC,EACtD,KAAK,iBAAiB,CACxB,EACA,aAAc,CACZ,KAAK,OAAO,SAAS,cAAe,KAAK,KAAK,EAAE,CAClD,EACA,yBAA0B,CACnB,KAAK,qCAGR,KAAK,mCAAmC,EAFxC,KAAK,0BAA0B,CAInC,EACA,2BAA4B,CAC1B,KAAK,OAAO,SAAS,0BAA2B,KAAK,KAAK,EAAE,EAC5D,KAAK,mCAAmC,CAC1C,EACA,YAAa,CACX,EAAgB,EAAE,uBAAuB,CAAE,OAAQ,KAAK,KAAK,EAAG,CAAC,CACnE,EACA,UAAW,CACT,KAAK,QAAQ,KAAK,CAChB,KAAM,OACN,OAAQ,CACN,SAAU,KAAK,OAAO,MAAM,MAAM,YAAY,YAC9C,aAAc,KAAK,KAAK,EAC1B,CACF,CAAC,CACH,CACF,EACA,SAAU,CACR,oBAAqB,CACnB,OAAO,EAAqB,EAAE,aAAa,YAC7C,EACA,sCAAuC,CACrC,OAAO,EAAqB,EAAE,aAAa,8BAC7C,EACA,GAAG,EAAS,EAA8B,CACxC,kBACA,8BACF,CAAC,CACH,CACF,KC3GO,MAAM,gBAAgB,KAOhB,MAAM,eAAe,WAIpB,MAAM,oCAWN,MAAM,oCAiBR,MAAM,8BASH,MAAM,yBAAyB,KAgB/B,MAAM,yBAAyB,WAUlC,MAAM,8BAYF,MAAM,iCAAiC,4LAtFrD,EAiJM,MAjJN,EAiJM,CAhJJ,EA4FU,GA3FR,QAAQ,QACR,UAAU,SACV,sBAEW,QAAO,MA6EV,CA5EN,EA4EM,MA5EN,EA4EM,CA3EY,eAAa,eAA7B,EA2BW,WAzBD,eAAa,qBADrB,EAUM,MAVN,EAUM,CANJ,EAKS,UAJP,MAAM,cACL,QAAK,eAAE,sCAEL,KAAE,0CAIA,eAAa,gBAOb,UAPa,IADtB,EAUM,MAVN,EAUM,CANJ,EAKS,UAJP,MAAM,cACL,QAAK,eAAE,sCAEL,KAAE,wCAGT,EAGE,OAFA,KAAK,YACL,MAAM,4CAGV,EAA6B,GAAd,KAAM,MAAI,mBAEjB,eAAa,iBADrB,EAUM,MAVN,EAUM,CANJ,EAKS,UAJP,MAAM,cACL,QAAK,eAAE,8DAEL,KAAE,6CAGT,EAeM,MAfN,EAeM,CAbI,eAAa,cADrB,EAMS,gBAJP,MAAM,cACL,QAAK,eAAE,sCAEL,KAAE,+BAEP,EAMS,gBAJP,MAAM,cACL,QAAK,eAAE,kCAEL,KAAE,0BAGT,EAOM,MAPN,EAOM,CANJ,EAKS,UAJP,MAAM,cACL,QAAK,eAAE,oCAEL,KAAE,0BAID,oCADR,EAUM,MAVN,EAUM,CANJ,EAKS,UAJP,MAAM,cACL,QAAK,eAAE,gCAEL,KAAE,yCAKF,QAAO,MAMP,CALT,EAKS,SALT,EAKS,CAJP,EAGE,GAFA,MAAM,OACN,KAAK,8BAKb,EAsBW,GAtBD,GAAG,QAAQ,GAEX,uBAAmB,CAAK,uBADhC,EAoBe,SAlBb,IAAI,cACH,MAAO,KAAE,iCACT,eAAc,KAAE,yCAChB,cAAa,KAAE,yCACf,WAAU,cACV,YAAW,mCAYH,CAVT,EAUS,GATP,QAAQ,0BACR,IAAI,OACJ,MAAM,WAEK,KAAI,MAGX,CAFF,EAEE,oBADA,EAA4B,EAApB,KAAK,cAAc,mHAMrC,EA2BW,GA3BD,GAAG,QAAQ,GAEX,oCADR,EAmBe,SAjBZ,MAAO,KAAE,2CACT,eAAc,KAAE,mDAChB,cAAa,KAAE,mDACf,WAAU,4BACV,YAAW,qDAYH,CAVT,EAUS,GATP,QAAQ,oCACR,IAAI,OACJ,MAAM,WAEK,KAAI,MAGX,CAFF,EAEE,oBADA,EAA4B,EAApB,KAAK,cAAc,2GAM3B,uBADR,EAKE,SAHA,IAAI,mBACH,UAAS,GACT,KAAM","names":["library"],"ignoreList":[],"sources":["../../../src/components/user_list_menu/user_list_menu.js?vue&type=script&src=true&lang.js","../../../src/components/user_list_menu/user_list_menu.vue","../../../src/components/account_actions/account_actions.js?vue&type=script&src=true&lang.js","../../../src/components/account_actions/account_actions.vue"],"sourcesContent":["import { mapState } from 'pinia'\n\nimport Popover from 'src/components/popover/popover.vue'\n\nimport { useListsStore } from 'src/stores/lists.js'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faChevronRight } from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(faChevronRight)\n\nconst UserListMenu = {\n props: ['user'],\n data() {\n return {}\n },\n components: {\n Popover,\n },\n created() {\n this.$store.dispatch('fetchUserInLists', this.user.id)\n },\n computed: {\n ...mapState(useListsStore, {\n allLists: (store) => store.allLists,\n }),\n inListsSet() {\n return new Set(this.user.inLists.map((x) => x.id))\n },\n lists() {\n if (!this.user.inLists) return []\n return this.allLists.map((list) => ({\n ...list,\n inList: this.inListsSet.has(list.id),\n }))\n },\n triggerAttrs() {\n return {\n class: 'menu-item dropdown-item -has-submenu',\n }\n },\n },\n methods: {\n toggleList(listId) {\n if (this.inListsSet.has(listId)) {\n useListsStore()\n .removeListAccount({ accountId: this.user.id, listId })\n .then((response) => {\n if (!response.ok) {\n return\n }\n this.$store.dispatch('fetchUserInLists', this.user.id)\n })\n } else {\n useListsStore()\n .addListAccount({ accountId: this.user.id, listId })\n .then((response) => {\n if (!response.ok) {\n return\n }\n this.$store.dispatch('fetchUserInLists', this.user.id)\n })\n }\n },\n },\n}\n\nexport default UserListMenu\n","\n\n\n","import { mapState } from 'pinia'\nimport { defineAsyncComponent } from 'vue'\n\nimport Popover from 'src/components/popover/popover.vue'\nimport ProgressButton from 'src/components/progress_button/progress_button.vue'\nimport UserListMenu from 'src/components/user_list_menu/user_list_menu.vue'\n\nimport { useInstanceCapabilitiesStore } from 'src/stores/instance_capabilities.js'\nimport { useMergedConfigStore } from 'src/stores/merged_config.js'\nimport { useReportsStore } from 'src/stores/reports'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faEllipsisV } from '@fortawesome/free-solid-svg-icons'\n\nlibrary.add(faEllipsisV)\n\nconst AccountActions = {\n props: ['user', 'relationship'],\n data() {\n return {\n showingConfirmBlock: false,\n showingConfirmRemoveFollower: false,\n }\n },\n components: {\n ProgressButton,\n Popover,\n UserListMenu,\n ConfirmModal: defineAsyncComponent(\n () => import('src/components/confirm_modal/confirm_modal.vue'),\n ),\n UserTimedFilterModal: defineAsyncComponent(\n () =>\n import(\n 'src/components/user_timed_filter_modal/user_timed_filter_modal.vue'\n ),\n ),\n },\n methods: {\n showConfirmRemoveUserFromFollowers() {\n this.showingConfirmRemoveFollower = true\n },\n hideConfirmRemoveUserFromFollowers() {\n this.showingConfirmRemoveFollower = false\n },\n hideConfirmBlock() {\n this.showingConfirmBlock = false\n },\n showRepeats() {\n this.$store.dispatch('showReblogs', this.user.id)\n },\n hideRepeats() {\n this.$store.dispatch('hideReblogs', this.user.id)\n },\n blockUser() {\n if (this.$refs.timedBlockDialog) {\n this.$refs.timedBlockDialog.optionallyPrompt()\n } else {\n if (!this.shouldConfirmBlock) {\n this.doBlockUser()\n } else {\n this.showingConfirmBlock = true\n }\n }\n },\n doBlockUser() {\n this.$store.dispatch('blockUser', { id: this.user.id })\n this.hideConfirmBlock()\n },\n unblockUser() {\n this.$store.dispatch('unblockUser', this.user.id)\n },\n removeUserFromFollowers() {\n if (!this.shouldConfirmRemoveUserFromFollowers) {\n this.doRemoveUserFromFollowers()\n } else {\n this.showConfirmRemoveUserFromFollowers()\n }\n },\n doRemoveUserFromFollowers() {\n this.$store.dispatch('removeUserFromFollowers', this.user.id)\n this.hideConfirmRemoveUserFromFollowers()\n },\n reportUser() {\n useReportsStore().openUserReportingModal({ userId: this.user.id })\n },\n openChat() {\n this.$router.push({\n name: 'chat',\n params: {\n username: this.$store.state.users.currentUser.screen_name,\n recipient_id: this.user.id,\n },\n })\n },\n },\n computed: {\n shouldConfirmBlock() {\n return useMergedConfigStore().mergedConfig.modalOnBlock\n },\n shouldConfirmRemoveUserFromFollowers() {\n return useMergedConfigStore().mergedConfig.modalOnRemoveUserFromFollowers\n },\n ...mapState(useInstanceCapabilitiesStore, [\n 'blockExpiration',\n 'pleromaChatMessagesAvailable',\n ]),\n },\n}\n\nexport default AccountActions\n","\n\n\n\n\n"],"file":"account_actions.iKah8h7y.js"} \ No newline at end of file diff --git a/priv/static/static/js/admin.Dy10Wzep.js b/priv/static/static/js/admin.Dy10Wzep.js new file mode 100644 index 000000000..811623906 --- /dev/null +++ b/priv/static/static/js/admin.Dy10Wzep.js @@ -0,0 +1,2 @@ +import{n as e}from"./chunk.aKtaBQYM.js";import{n as t}from"./helpers.DO6M90bq.js";var n=e({addNewEmojiFile:()=>Z,announcementToPayload:()=>F,changeStatusScope:()=>P,createEmojiPack:()=>q,deleteAccounts:()=>O,deleteAnnouncement:()=>L,deleteEmojiFile:()=>$,deleteEmojiPack:()=>W,disableMFA:()=>M,downloadRemoteEmojiPack:()=>Y,downloadRemoteEmojiPackZIP:()=>X,editAnnouncement:()=>I,getAnnouncements:()=>ue,getAvailableFrontends:()=>V,getInstanceConfigDescriptions:()=>B,getInstanceDBConfig:()=>z,getUserData:()=>D,importEmojiFromFS:()=>K,installFrontend:()=>U,listRemoteEmojiPacks:()=>J,listStatuses:()=>N,listUsers:()=>k,postAnnouncement:()=>de,pushInstanceDBConfig:()=>H,reloadEmoji:()=>G,requirePasswordChange:()=>j,resendConfirmationEmail:()=>A,saveEmojiPackMetadata:()=>fe,setReportState:()=>R,setUsersActivationStatus:()=>C,setUsersApprovalStatus:()=>w,setUsersConfirmationStatus:()=>T,setUsersRight:()=>S,setUsersSuggestionStatus:()=>E,setUsersTags:()=>x,updateEmojiFile:()=>Q}),r=`/api/v1/pleroma/admin/reports`,i=`/api/v1/pleroma/admin/config`,a=`/api/v1/pleroma/admin/config/descriptions`,o=(e=``)=>`/api/v1/pleroma/admin/announcements/${e}`,s=`/api/v1/pleroma/admin/frontends`,c=`/api/v1/pleroma/admin/frontends/install`,l=(e=``)=>`/api/v1/pleroma/admin/users/${e}`,u=({page:e,pageSize:t,filters:n={},query:r=``,name:i=``,email:a=``})=>{let{local:o=!1,external:s=!1,active:c=!1,needApproval:l=!1,unconfirmed:u=!1,deactivated:d=!1,isAdmin:f=!0,isModerator:p=!0}=n;return`/api/v1/pleroma/admin/users?page=${e}&page_size=${t}&filters=${[o&&`local`,s&&`external`,c&&`active`,l&&`need_approval`,u&&`unconfirmed`,d&&`deactivated`,f&&`is_admin`,p&&`is_moderator`].filter(e=>e).join(`,`)}&query=${r}&name=${i}&email=${a}`},d=`/api/pleroma/admin/users/tag`,f=e=>`/api/pleroma/admin/users/permission_group/${e}`,p=`/api/pleroma/admin/users/activate`,m=`/api/pleroma/admin/users/deactivate`,ee=`/api/pleroma/admin/users/suggest`,te=`/api/pleroma/admin/users/unsuggest`,ne=`/api/v1/pleroma/admin/users/approve`,h=`/api/v1/pleroma/admin/users/confirm_email`,g=`/api/v1/pleroma/admin/users/resend_confirmation_email`,_=({id:e,page:t,pageSize:n,godmode:r,withReblogs:i})=>`/api/v1/pleroma/admin/users/${e}/statuses?page_size=${n}&page=${t}&godmode=${r}&with_reblogs=${i}`,v=e=>`/api/v1/pleroma/admin/statuses/${e}`,re=`/api/v1/pleroma/admin/users/force_password_reset`,ie=`/api/v1/pleroma/admin/users/disable_mfa`,ae=`/api/pleroma/admin/reload_emoji`,oe=`/api/pleroma/emoji/packs/import`,y=e=>`/api/v1/pleroma/emoji/pack?name=${e}`,se=`/api/v1/pleroma/emoji/packs/download`,ce=`/api/v1/pleroma/emoji/packs/download_zip`,le=(e,t,n)=>`/api/v1/pleroma/emoji/packs/remote?url=${e}&page=${t}&page_size=${n}`,b=e=>`/api/v1/pleroma/emoji/packs/files?name=${e}`,x=({tags:e,credentials:n,value:r,screen_names:i})=>t({url:d,method:r?`PUT`:`DELETE`,credentials:n,payload:{nicknames:i,tags:e}}),S=({right:e,credentials:n,value:r,screen_names:i})=>t({url:f(e),method:r?`POST`:`DELETE`,credentials:n,payload:{nicknames:i}}),C=({credentials:e,screen_names:n,value:r})=>t({url:r?p:m,method:`PATCH`,credentials:e,payload:{nicknames:n}}).then(e=>e.users),w=({credentials:e,screen_names:n})=>t({url:ne,method:`PATCH`,credentials:e,payload:{nicknames:n}}).then(e=>e.users),T=({credentials:e,screen_names:n})=>t({url:h,method:`PATCH`,credentials:e,payload:{nicknames:n}}).then(e=>e.users),E=({credentials:e,screen_names:n,value:r})=>t({url:r?ee:te,method:`PATCH`,credentials:e,payload:{nicknames:n}}).then(e=>e.users),D=({credentials:e,screen_name:n})=>t({url:l(n),method:`GET`,credentials:e}),O=({credentials:e,screen_names:n})=>t({url:l(),method:`DELETE`,credentials:e,payload:{nicknames:n}}),ue=({id:e,credentials:n})=>t({url:o(e),credentials:n}),k=({opts:e,credentials:n})=>t({url:u(e),credentials:n,method:`GET`}),A=({screen_names:e,credentials:n})=>t({url:g,credentials:n,method:`PATCH`,payload:{nicknames:e}}),j=({screen_names:e,credentials:n})=>t({url:re,credentials:n,method:`PATCH`,payload:{nicknames:e}}),M=({screen_name:e,credentials:n})=>t({url:ie,credentials:n,method:`PUT`,payload:{nickname:e}}),N=({opts:e,credentials:n})=>t({url:_(e),credentials:n,method:`GET`}),P=({opts:{id:e,sensitive:n,visibility:r},credentials:i})=>{var a={};return n!==void 0&&(a.sensitive=n),r!==void 0&&(a.visibility=r),t({url:v(e),credentials:i,method:`PUT`,payload:a})},F=({content:e,startsAt:t,endsAt:n,allDay:r})=>{let i={content:e};return t!==void 0&&(i.starts_at=t?new Date(t).toISOString():null),n!==void 0&&(i.ends_at=n?new Date(n).toISOString():null),r!==void 0&&(i.all_day=r),i},de=({credentials:e,content:n,startsAt:r,endsAt:i,allDay:a})=>t({url:o(),credentials:e,method:`POST`,payload:F({content:n,startsAt:r,endsAt:i,allDay:a})}),I=({id:e,credentials:n,content:r,startsAt:i,endsAt:a,allDay:s})=>t({url:o(e),credentials:n,method:`PATCH`,payload:F({content:r,startsAt:i,endsAt:a,allDay:s})}),L=({id:e,credentials:n})=>t({url:o(e),credentials:n,method:`DELETE`}),R=({id:e,state:n,credentials:i})=>t({url:r,credentials:i,method:`PATCH`,payload:{reports:[{id:e,state:n}]}}),z=({credentials:e})=>t({url:i,credentials:e}),B=({credentials:e})=>t({url:a,credentials:e}),V=({credentials:e})=>t({url:s,credentials:e}),H=({credentials:e,payload:n})=>t({url:i,method:`POST`,credentials:e,payload:n}),U=({credentials:e,payload:n})=>t({url:c,credentials:e,method:`POST`,payload:n}),W=({name:e})=>t({url:y(e),method:`DELETE`}),G=({credentials:e})=>t({url:ae,method:`POST`,credentials:e}),K=({credentials:e})=>t({url:oe,credentials:e}),q=({name:e,credentials:n})=>t({url:y(e),method:`POST`,credentials:n}),J=({instance:e,page:n,pageSize:r,credentials:i})=>(e.startsWith(`http`)||(e=`https://`+e),t({url:le(e,n,r),credentials:i})),Y=({instance:e,packName:n,as:r,credentials:i})=>t({url:se,credentials:i,method:`POST`,payload:{url:e,name:n,as:r}}),X=({url:e,packName:n,file:r,credentials:i})=>{let a=new FormData;return r&&a.set(`file`,r),e&&a.set(`url`,e),a.set(`name`,n),t({url:ce,method:`POST`,formData:a})},fe=({name:e,newData:n,credentials:r})=>t({url:y(e),credentials:r,method:`PATCH`,payload:{metadata:n}}),Z=({packName:e,file:n,shortcode:r,filename:i})=>{let a=new FormData;return i.trim()!==``&&a.set(`filename`,i),r.trim()!==``&&a.set(`shortcode`,r),a.set(`file`,n),t({url:b(e),method:`POST`,formData:a})},Q=({packName:e,shortcode:n,newShortcode:r,newFilename:i,credentials:a,force:o})=>t({url:b(e),credentials:a,method:`PATCH`,payload:{shortcode:n,new_shortcode:r,new_filename:i,force:o}}),$=({packName:e,shortcode:n})=>t({url:`${b(e)}&shortcode=${n}`,method:`DELETE`});export{x as A,A as C,T as D,w as E,S as O,j as S,C as T,J as _,O as a,H as b,M as c,V as d,B as f,U as g,K as h,q as i,Q as j,E as k,Y as l,D as m,n,$ as o,z as p,P as r,W as s,Z as t,X as u,N as v,R as w,G as x,k as y}; +//# sourceMappingURL=admin.Dy10Wzep.js.map \ No newline at end of file diff --git a/priv/static/static/js/admin.Dy10Wzep.js.map b/priv/static/static/js/admin.Dy10Wzep.js.map new file mode 100644 index 000000000..2b9cf5feb --- /dev/null +++ b/priv/static/static/js/admin.Dy10Wzep.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admin.Dy10Wzep.js","names":[],"sources":["../../../src/api/admin.js"],"sourcesContent":["import { promisedRequest } from './helpers.js'\n\nconst REPORTS = '/api/v1/pleroma/admin/reports'\nconst CONFIG_URL = '/api/v1/pleroma/admin/config'\nconst DESCRIPTIONS_URL = '/api/v1/pleroma/admin/config/descriptions'\n\nconst ANNOUNCEMENTS_URL = (id = '') =>\n `/api/v1/pleroma/admin/announcements/${id}`\n\nconst FRONTENDS_URL = '/api/v1/pleroma/admin/frontends'\nconst FRONTENDS_INSTALL_URL = '/api/v1/pleroma/admin/frontends/install'\n\nconst USERS_URL = (nickname = '') => `/api/v1/pleroma/admin/users/${nickname}`\nconst USERS_URL_LIST = ({\n page,\n pageSize,\n filters = {},\n query = '',\n name = '',\n email = '',\n}) => {\n const {\n local = false,\n external = false,\n active = false,\n needApproval = false,\n unconfirmed = false,\n deactivated = false,\n isAdmin = true,\n isModerator = true,\n } = filters\n const filters_str = [\n local && 'local',\n external && 'external',\n active && 'active',\n needApproval && 'need_approval',\n unconfirmed && 'unconfirmed',\n deactivated && 'deactivated',\n isAdmin && 'is_admin',\n isModerator && 'is_moderator',\n ]\n .filter((x) => x)\n .join(',')\n return `/api/v1/pleroma/admin/users?page=${page}&page_size=${pageSize}&filters=${filters_str}&query=${query}&name=${name}&email=${email}`\n}\n\nconst TAG_USER_URL = '/api/pleroma/admin/users/tag'\n\nconst PERMISSION_GROUP_URL = (right) =>\n `/api/pleroma/admin/users/permission_group/${right}`\nconst ACTIVATE_USERS_URL = '/api/pleroma/admin/users/activate'\nconst DEACTIVATE_USERS_URL = '/api/pleroma/admin/users/deactivate'\nconst SUGGEST_USERS_URL = '/api/pleroma/admin/users/suggest'\nconst UNSUGGEST_USERS_URL = '/api/pleroma/admin/users/unsuggest'\nconst APPROVE_USERS_URL = '/api/v1/pleroma/admin/users/approve'\nconst CONFIRM_USERS_URL = '/api/v1/pleroma/admin/users/confirm_email'\nconst RESEND_CONFIRMATION_EMAIL_URL =\n '/api/v1/pleroma/admin/users/resend_confirmation_email'\nconst LIST_STATUSES_URL = ({ id, page, pageSize, godmode, withReblogs }) =>\n `/api/v1/pleroma/admin/users/${id}/statuses?page_size=${pageSize}&page=${page}&godmode=${godmode}&with_reblogs=${withReblogs}`\nconst CHANGE_STATUS_SCOPE_URL = (id) => `/api/v1/pleroma/admin/statuses/${id}`\nconst REQUIRE_PASSWORD_CHANGE_URL =\n '/api/v1/pleroma/admin/users/force_password_reset'\n\nconst DISABLE_MFA_URL = '/api/v1/pleroma/admin/users/disable_mfa'\nconst EMOJI_RELOAD_URL = '/api/pleroma/admin/reload_emoji'\nconst EMOJI_IMPORT_FS_URL = '/api/pleroma/emoji/packs/import'\nconst EMOJI_PACK_URL = (name) => `/api/v1/pleroma/emoji/pack?name=${name}`\nconst EMOJI_PACKS_DL_REMOTE_URL = '/api/v1/pleroma/emoji/packs/download'\nconst EMOJI_PACKS_DL_REMOTE_ZIP_URL = '/api/v1/pleroma/emoji/packs/download_zip'\nconst EMOJI_PACKS_LS_REMOTE_URL = (url, page, pageSize) =>\n `/api/v1/pleroma/emoji/packs/remote?url=${url}&page=${page}&page_size=${pageSize}`\nconst EMOJI_UPDATE_FILE_URL = (name) =>\n `/api/v1/pleroma/emoji/packs/files?name=${name}`\n\n//\n\nexport const setUsersTags = ({\n tags,\n credentials,\n value,\n screen_names: nicknames,\n}) =>\n promisedRequest({\n url: TAG_USER_URL,\n method: value ? 'PUT' : 'DELETE',\n credentials,\n payload: {\n nicknames,\n tags,\n },\n })\n\nexport const setUsersRight = ({\n right,\n credentials,\n value,\n screen_names: nicknames,\n}) =>\n promisedRequest({\n url: PERMISSION_GROUP_URL(right),\n method: value ? 'POST' : 'DELETE',\n credentials,\n payload: {\n nicknames,\n },\n })\n\nexport const setUsersActivationStatus = ({\n credentials,\n screen_names: nicknames,\n value,\n}) =>\n promisedRequest({\n url: value ? ACTIVATE_USERS_URL : DEACTIVATE_USERS_URL,\n method: 'PATCH',\n credentials,\n payload: {\n nicknames,\n },\n }).then((response) => response.users)\n\nexport const setUsersApprovalStatus = ({\n credentials,\n screen_names: nicknames,\n}) =>\n promisedRequest({\n url: APPROVE_USERS_URL,\n method: 'PATCH',\n credentials,\n payload: {\n nicknames,\n },\n }).then((response) => response.users)\n\nexport const setUsersConfirmationStatus = ({\n credentials,\n screen_names: nicknames,\n}) =>\n promisedRequest({\n url: CONFIRM_USERS_URL,\n method: 'PATCH',\n credentials,\n payload: {\n nicknames,\n },\n }).then((response) => response.users)\n\nexport const setUsersSuggestionStatus = ({\n credentials,\n screen_names: nicknames,\n value,\n}) =>\n promisedRequest({\n url: value ? SUGGEST_USERS_URL : UNSUGGEST_USERS_URL,\n method: 'PATCH',\n credentials,\n payload: {\n nicknames,\n },\n }).then((response) => response.users)\n\nexport const getUserData = ({ credentials, screen_name: nickname }) =>\n promisedRequest({\n url: USERS_URL(nickname),\n method: 'GET',\n credentials,\n })\n\nexport const deleteAccounts = ({ credentials, screen_names: nicknames }) =>\n promisedRequest({\n url: USERS_URL(),\n method: 'DELETE',\n credentials,\n payload: {\n nicknames,\n },\n })\n\nexport const getAnnouncements = ({ id, credentials }) =>\n promisedRequest({ url: ANNOUNCEMENTS_URL(id), credentials })\n\n// the reported list is hardly useful because standards are for dating i guess,\n// so make sure to fetchIfMissing right afterward using this call\nexport const listUsers = ({ opts, credentials }) =>\n promisedRequest({\n url: USERS_URL_LIST(opts),\n credentials,\n method: 'GET',\n })\n\nexport const resendConfirmationEmail = ({\n screen_names: nicknames,\n credentials,\n}) =>\n promisedRequest({\n url: RESEND_CONFIRMATION_EMAIL_URL,\n credentials,\n method: 'PATCH',\n payload: {\n nicknames,\n },\n })\n\nexport const requirePasswordChange = ({\n screen_names: nicknames,\n credentials,\n}) =>\n promisedRequest({\n url: REQUIRE_PASSWORD_CHANGE_URL,\n credentials,\n method: 'PATCH',\n payload: {\n nicknames,\n },\n })\n\nexport const disableMFA = ({ screen_name: nickname, credentials }) =>\n promisedRequest({\n url: DISABLE_MFA_URL,\n credentials,\n method: 'PUT',\n payload: {\n nickname,\n },\n })\n\nexport const listStatuses = ({ opts, credentials }) =>\n promisedRequest({\n url: LIST_STATUSES_URL(opts),\n credentials,\n method: 'GET',\n })\n\nexport const changeStatusScope = ({\n opts: { id, sensitive, visibility },\n credentials,\n}) => {\n var payload = {}\n if (typeof sensitive !== 'undefined') {\n payload['sensitive'] = sensitive\n }\n if (typeof visibility !== 'undefined') {\n payload['visibility'] = visibility\n }\n\n return promisedRequest({\n url: CHANGE_STATUS_SCOPE_URL(id),\n credentials,\n method: 'PUT',\n payload,\n })\n}\n\nexport const announcementToPayload = ({\n content,\n startsAt,\n endsAt,\n allDay,\n}) => {\n const payload = { content }\n\n if (typeof startsAt !== 'undefined') {\n payload.starts_at = startsAt ? new Date(startsAt).toISOString() : null\n }\n\n if (typeof endsAt !== 'undefined') {\n payload.ends_at = endsAt ? new Date(endsAt).toISOString() : null\n }\n\n if (typeof allDay !== 'undefined') {\n payload.all_day = allDay\n }\n\n return payload\n}\n\nexport const postAnnouncement = ({\n credentials,\n content,\n startsAt,\n endsAt,\n allDay,\n}) =>\n promisedRequest({\n url: ANNOUNCEMENTS_URL(),\n credentials,\n method: 'POST',\n payload: announcementToPayload({ content, startsAt, endsAt, allDay }),\n })\n\nexport const editAnnouncement = ({\n id,\n credentials,\n content,\n startsAt,\n endsAt,\n allDay,\n}) =>\n promisedRequest({\n url: ANNOUNCEMENTS_URL(id),\n credentials,\n method: 'PATCH',\n payload: announcementToPayload({ content, startsAt, endsAt, allDay }),\n })\n\nexport const deleteAnnouncement = ({ id, credentials }) =>\n promisedRequest({\n url: ANNOUNCEMENTS_URL(id),\n credentials,\n method: 'DELETE',\n })\n\nexport const setReportState = ({ id, state, credentials }) => {\n return promisedRequest({\n url: REPORTS,\n credentials,\n method: 'PATCH',\n payload: {\n reports: [\n {\n id,\n state,\n },\n ],\n },\n })\n}\n\nexport const getInstanceDBConfig = ({ credentials }) =>\n promisedRequest({\n url: CONFIG_URL,\n credentials,\n })\n\nexport const getInstanceConfigDescriptions = ({ credentials }) =>\n promisedRequest({\n url: DESCRIPTIONS_URL,\n credentials,\n })\n\nexport const getAvailableFrontends = ({ credentials }) =>\n promisedRequest({\n url: FRONTENDS_URL,\n credentials,\n })\n\nexport const pushInstanceDBConfig = ({ credentials, payload }) =>\n promisedRequest({\n url: CONFIG_URL,\n method: 'POST',\n credentials,\n payload,\n })\n\nexport const installFrontend = ({ credentials, payload }) =>\n promisedRequest({\n url: FRONTENDS_INSTALL_URL,\n credentials,\n method: 'POST',\n payload,\n })\n\n// Emoji packs\nexport const deleteEmojiPack = ({ name }) =>\n promisedRequest({\n url: EMOJI_PACK_URL(name),\n method: 'DELETE',\n })\n\nexport const reloadEmoji = ({ credentials }) =>\n promisedRequest({\n url: EMOJI_RELOAD_URL,\n method: 'POST',\n credentials,\n })\n\nexport const importEmojiFromFS = ({ credentials }) =>\n promisedRequest({\n url: EMOJI_IMPORT_FS_URL,\n credentials,\n })\n\nexport const createEmojiPack = ({ name, credentials }) =>\n promisedRequest({\n url: EMOJI_PACK_URL(name),\n method: 'POST',\n credentials,\n })\n\nexport const listRemoteEmojiPacks = ({\n instance,\n page,\n pageSize,\n credentials,\n}) => {\n if (!instance.startsWith('http')) {\n instance = 'https://' + instance\n }\n\n return promisedRequest({\n url: EMOJI_PACKS_LS_REMOTE_URL(instance, page, pageSize),\n credentials,\n })\n}\n\nexport const downloadRemoteEmojiPack = ({\n instance,\n packName,\n as,\n credentials,\n}) =>\n promisedRequest({\n url: EMOJI_PACKS_DL_REMOTE_URL,\n credentials,\n method: 'POST',\n payload: {\n url: instance,\n name: packName,\n as,\n },\n })\n\nexport const downloadRemoteEmojiPackZIP = ({\n url,\n packName,\n file,\n credentials,\n}) => {\n const data = new FormData()\n if (file) data.set('file', file)\n if (url) data.set('url', url)\n data.set('name', packName)\n\n return promisedRequest({\n url: EMOJI_PACKS_DL_REMOTE_ZIP_URL,\n method: 'POST',\n formData: data,\n })\n}\n\nexport const saveEmojiPackMetadata = ({ name, newData, credentials }) =>\n promisedRequest({\n url: EMOJI_PACK_URL(name),\n credentials,\n method: 'PATCH',\n payload: { metadata: newData },\n })\n\nexport const addNewEmojiFile = ({ packName, file, shortcode, filename }) => {\n const data = new FormData()\n if (filename.trim() !== '') {\n data.set('filename', filename)\n }\n if (shortcode.trim() !== '') {\n data.set('shortcode', shortcode)\n }\n data.set('file', file)\n\n return promisedRequest({\n url: EMOJI_UPDATE_FILE_URL(packName),\n method: 'POST',\n formData: data,\n })\n}\n\nexport const updateEmojiFile = ({\n packName,\n shortcode,\n newShortcode,\n newFilename,\n credentials,\n force,\n}) =>\n promisedRequest({\n url: EMOJI_UPDATE_FILE_URL(packName),\n credentials,\n method: 'PATCH',\n payload: {\n shortcode,\n new_shortcode: newShortcode,\n new_filename: newFilename,\n force,\n },\n })\n\nexport const deleteEmojiFile = ({ packName, shortcode }) =>\n promisedRequest({\n url: `${EMOJI_UPDATE_FILE_URL(packName)}&shortcode=${shortcode}`,\n method: 'DELETE',\n })\n"],"mappings":"w9BAEM,EAAU,gCACV,EAAa,+BACb,EAAmB,4CAEnB,GAAqB,EAAK,KAC9B,uCAAuC,IAEnC,EAAgB,kCAChB,EAAwB,0CAExB,GAAa,EAAW,KAAO,+BAA+B,IAC9D,GAAkB,CACtB,OACA,WACA,UAAU,CAAC,EACX,QAAQ,GACR,OAAO,GACP,QAAQ,MACJ,CACJ,GAAM,CACJ,QAAQ,GACR,WAAW,GACX,SAAS,GACT,eAAe,GACf,cAAc,GACd,cAAc,GACd,UAAU,GACV,cAAc,IACZ,EAaJ,MAAO,oCAAoC,EAAK,aAAa,EAAS,WAZlD,CAClB,GAAS,QACT,GAAY,WACZ,GAAU,SACV,GAAgB,gBAChB,GAAe,cACf,GAAe,cACf,GAAW,WACX,GAAe,cACjB,EACG,OAAQ,GAAM,CAAC,EACf,KAAK,GACmF,EAAE,SAAS,EAAM,QAAQ,EAAK,SAAS,GACpI,EAEM,EAAe,+BAEf,EAAwB,GAC5B,6CAA6C,IACzC,EAAqB,oCACrB,EAAuB,sCACvB,GAAoB,mCACpB,GAAsB,qCACtB,GAAoB,sCACpB,EAAoB,4CACpB,EACJ,wDACI,GAAqB,CAAE,KAAI,OAAM,WAAU,UAAS,iBACxD,+BAA+B,EAAG,sBAAsB,EAAS,QAAQ,EAAK,WAAW,EAAQ,gBAAgB,IAC7G,EAA2B,GAAO,kCAAkC,IACpE,GACJ,mDAEI,GAAkB,0CAClB,GAAmB,kCACnB,GAAsB,kCACtB,EAAkB,GAAS,mCAAmC,IAC9D,GAA4B,uCAC5B,GAAgC,2CAChC,IAA6B,EAAK,EAAM,IAC5C,0CAA0C,EAAI,QAAQ,EAAK,aAAa,IACpE,EAAyB,GAC7B,0CAA0C,IAI/B,GAAgB,CAC3B,OACA,cACA,QACA,aAAc,KAEd,EAAgB,CACd,IAAK,EACL,OAAQ,EAAQ,MAAQ,SACxB,cACA,QAAS,CACP,YACA,MACF,CACF,CAAC,EAEU,GAAiB,CAC5B,QACA,cACA,QACA,aAAc,KAEd,EAAgB,CACd,IAAK,EAAqB,CAAK,EAC/B,OAAQ,EAAQ,OAAS,SACzB,cACA,QAAS,CACP,WACF,CACF,CAAC,EAEU,GAA4B,CACvC,cACA,aAAc,EACd,WAEA,EAAgB,CACd,IAAK,EAAQ,EAAqB,EAClC,OAAQ,QACR,cACA,QAAS,CACP,WACF,CACF,CAAC,EAAE,KAAM,GAAa,EAAS,KAAK,EAEzB,GAA0B,CACrC,cACA,aAAc,KAEd,EAAgB,CACd,IAAK,GACL,OAAQ,QACR,cACA,QAAS,CACP,WACF,CACF,CAAC,EAAE,KAAM,GAAa,EAAS,KAAK,EAEzB,GAA8B,CACzC,cACA,aAAc,KAEd,EAAgB,CACd,IAAK,EACL,OAAQ,QACR,cACA,QAAS,CACP,WACF,CACF,CAAC,EAAE,KAAM,GAAa,EAAS,KAAK,EAEzB,GAA4B,CACvC,cACA,aAAc,EACd,WAEA,EAAgB,CACd,IAAK,EAAQ,GAAoB,GACjC,OAAQ,QACR,cACA,QAAS,CACP,WACF,CACF,CAAC,EAAE,KAAM,GAAa,EAAS,KAAK,EAEzB,GAAe,CAAE,cAAa,YAAa,KACtD,EAAgB,CACd,IAAK,EAAU,CAAQ,EACvB,OAAQ,MACR,aACF,CAAC,EAEU,GAAkB,CAAE,cAAa,aAAc,KAC1D,EAAgB,CACd,IAAK,EAAU,EACf,OAAQ,SACR,cACA,QAAS,CACP,WACF,CACF,CAAC,EAEU,IAAoB,CAAE,KAAI,iBACrC,EAAgB,CAAE,IAAK,EAAkB,CAAE,EAAG,aAAY,CAAC,EAIhD,GAAa,CAAE,OAAM,iBAChC,EAAgB,CACd,IAAK,EAAe,CAAI,EACxB,cACA,OAAQ,KACV,CAAC,EAEU,GAA2B,CACtC,aAAc,EACd,iBAEA,EAAgB,CACd,IAAK,EACL,cACA,OAAQ,QACR,QAAS,CACP,WACF,CACF,CAAC,EAEU,GAAyB,CACpC,aAAc,EACd,iBAEA,EAAgB,CACd,IAAK,GACL,cACA,OAAQ,QACR,QAAS,CACP,WACF,CACF,CAAC,EAEU,GAAc,CAAE,YAAa,EAAU,iBAClD,EAAgB,CACd,IAAK,GACL,cACA,OAAQ,MACR,QAAS,CACP,UACF,CACF,CAAC,EAEU,GAAgB,CAAE,OAAM,iBACnC,EAAgB,CACd,IAAK,EAAkB,CAAI,EAC3B,cACA,OAAQ,KACV,CAAC,EAEU,GAAqB,CAChC,KAAM,CAAE,KAAI,YAAW,cACvB,iBACI,CACJ,IAAI,EAAU,CAAC,EAQf,OAPW,IAAc,SACvB,EAAQ,UAAe,GAEd,IAAe,SACxB,EAAQ,WAAgB,GAGnB,EAAgB,CACrB,IAAK,EAAwB,CAAE,EAC/B,cACA,OAAQ,MACR,SACF,CAAC,CACH,EAEa,GAAyB,CACpC,UACA,WACA,SACA,YACI,CACJ,IAAM,EAAU,CAAE,SAAQ,EAc1B,OAZW,IAAa,SACtB,EAAQ,UAAY,EAAW,IAAI,KAAK,CAAQ,EAAE,YAAY,EAAI,MAGzD,IAAW,SACpB,EAAQ,QAAU,EAAS,IAAI,KAAK,CAAM,EAAE,YAAY,EAAI,MAGnD,IAAW,SACpB,EAAQ,QAAU,GAGb,CACT,EAEa,IAAoB,CAC/B,cACA,UACA,WACA,SACA,YAEA,EAAgB,CACd,IAAK,EAAkB,EACvB,cACA,OAAQ,OACR,QAAS,EAAsB,CAAE,UAAS,WAAU,SAAQ,QAAO,CAAC,CACtE,CAAC,EAEU,GAAoB,CAC/B,KACA,cACA,UACA,WACA,SACA,YAEA,EAAgB,CACd,IAAK,EAAkB,CAAE,EACzB,cACA,OAAQ,QACR,QAAS,EAAsB,CAAE,UAAS,WAAU,SAAQ,QAAO,CAAC,CACtE,CAAC,EAEU,GAAsB,CAAE,KAAI,iBACvC,EAAgB,CACd,IAAK,EAAkB,CAAE,EACzB,cACA,OAAQ,QACV,CAAC,EAEU,GAAkB,CAAE,KAAI,QAAO,iBACnC,EAAgB,CACrB,IAAK,EACL,cACA,OAAQ,QACR,QAAS,CACP,QAAS,CACP,CACE,KACA,OACF,CACF,CACF,CACF,CAAC,EAGU,GAAuB,CAAE,iBACpC,EAAgB,CACd,IAAK,EACL,aACF,CAAC,EAEU,GAAiC,CAAE,iBAC9C,EAAgB,CACd,IAAK,EACL,aACF,CAAC,EAEU,GAAyB,CAAE,iBACtC,EAAgB,CACd,IAAK,EACL,aACF,CAAC,EAEU,GAAwB,CAAE,cAAa,aAClD,EAAgB,CACd,IAAK,EACL,OAAQ,OACR,cACA,SACF,CAAC,EAEU,GAAmB,CAAE,cAAa,aAC7C,EAAgB,CACd,IAAK,EACL,cACA,OAAQ,OACR,SACF,CAAC,EAGU,GAAmB,CAAE,UAChC,EAAgB,CACd,IAAK,EAAe,CAAI,EACxB,OAAQ,QACV,CAAC,EAEU,GAAe,CAAE,iBAC5B,EAAgB,CACd,IAAK,GACL,OAAQ,OACR,aACF,CAAC,EAEU,GAAqB,CAAE,iBAClC,EAAgB,CACd,IAAK,GACL,aACF,CAAC,EAEU,GAAmB,CAAE,OAAM,iBACtC,EAAgB,CACd,IAAK,EAAe,CAAI,EACxB,OAAQ,OACR,aACF,CAAC,EAEU,GAAwB,CACnC,WACA,OACA,WACA,kBAEK,EAAS,WAAW,MAAM,IAC7B,EAAW,WAAa,GAGnB,EAAgB,CACrB,IAAK,GAA0B,EAAU,EAAM,CAAQ,EACvD,aACF,CAAC,GAGU,GAA2B,CACtC,WACA,WACA,KACA,iBAEA,EAAgB,CACd,IAAK,GACL,cACA,OAAQ,OACR,QAAS,CACP,IAAK,EACL,KAAM,EACN,IACF,CACF,CAAC,EAEU,GAA8B,CACzC,MACA,WACA,OACA,iBACI,CACJ,IAAM,EAAO,IAAI,SAKjB,OAJI,GAAM,EAAK,IAAI,OAAQ,CAAI,EAC3B,GAAK,EAAK,IAAI,MAAO,CAAG,EAC5B,EAAK,IAAI,OAAQ,CAAQ,EAElB,EAAgB,CACrB,IAAK,GACL,OAAQ,OACR,SAAU,CACZ,CAAC,CACH,EAEa,IAAyB,CAAE,OAAM,UAAS,iBACrD,EAAgB,CACd,IAAK,EAAe,CAAI,EACxB,cACA,OAAQ,QACR,QAAS,CAAE,SAAU,CAAQ,CAC/B,CAAC,EAEU,GAAmB,CAAE,WAAU,OAAM,YAAW,cAAe,CAC1E,IAAM,EAAO,IAAI,SASjB,OARI,EAAS,KAAK,IAAM,IACtB,EAAK,IAAI,WAAY,CAAQ,EAE3B,EAAU,KAAK,IAAM,IACvB,EAAK,IAAI,YAAa,CAAS,EAEjC,EAAK,IAAI,OAAQ,CAAI,EAEd,EAAgB,CACrB,IAAK,EAAsB,CAAQ,EACnC,OAAQ,OACR,SAAU,CACZ,CAAC,CACH,EAEa,GAAmB,CAC9B,WACA,YACA,eACA,cACA,cACA,WAEA,EAAgB,CACd,IAAK,EAAsB,CAAQ,EACnC,cACA,OAAQ,QACR,QAAS,CACP,YACA,cAAe,EACf,aAAc,EACd,OACF,CACF,CAAC,EAEU,GAAmB,CAAE,WAAU,eAC1C,EAAgB,CACd,IAAK,GAAG,EAAsB,CAAQ,EAAE,aAAa,IACrD,OAAQ,QACV,CAAC"} \ No newline at end of file diff --git a/priv/static/static/js/announcements_page.5InQkWqQ.js b/priv/static/static/js/announcements_page.5InQkWqQ.js new file mode 100644 index 000000000..419be5aa2 --- /dev/null +++ b/priv/static/static/js/announcements_page.5InQkWqQ.js @@ -0,0 +1,2 @@ +import{I as e,M as t,R as n,U as r,W as i,X as a,_ as o,d as s,f as c,g as l,i as u,p as d,q as f,t as p,u as m}from"./_plugin-vue_export-helper.By3-ojQa.js";import{i as h,r as g,s as _}from"./runtime-dom.esm-bundler.DzcUlaDE.js";import{i as v}from"./vuex.esm-bundler.CWMfctgB.js";import{t as y}from"./locale.service.ol8gNUGd.js";import{t as b}from"./checkbox.BfKZDdOO.js";import{W as x}from"./main.CPF6dYCY.js";var S={components:{Checkbox:b},props:{announcement:Object,disabled:Boolean}},C={class:`announcement-editor`},w=[`placeholder`,`disabled`],T={class:`announcement-metadata`},E={for:`announcement-start-time`},D=[`type`,`disabled`],O={class:`announcement-metadata`},k={for:`announcement-end-time`},A=[`type`,`disabled`],j={class:`announcement-metadata`};function M(e,s,c,u,f,p){let _=n(`Checkbox`);return t(),d(`div`,C,[i(m(`textarea`,{ref:`textarea`,"onUpdate:modelValue":s[0]||=t=>e.announcement.content=t,class:`input post-textarea`,rows:`1`,cols:`1`,placeholder:e.$t(`announcements.post_placeholder`),disabled:e.disabled},null,8,w),[[h,e.announcement.content]]),m(`span`,T,[m(`label`,E,a(e.$t(`announcements.start_time_prompt`)),1),i(m(`input`,{id:`announcement-start-time`,"onUpdate:modelValue":s[1]||=t=>e.announcement.startsAt=t,class:`input`,type:e.announcement.allDay?`date`:`datetime-local`,disabled:e.disabled},null,8,D),[[g,e.announcement.startsAt]])]),m(`span`,O,[m(`label`,k,a(e.$t(`announcements.end_time_prompt`)),1),i(m(`input`,{id:`announcement-end-time`,"onUpdate:modelValue":s[2]||=t=>e.announcement.endsAt=t,class:`input`,type:e.announcement.allDay?`date`:`datetime-local`,disabled:e.disabled},null,8,A),[[g,e.announcement.endsAt]])]),m(`span`,j,[o(_,{id:`announcement-all-day`,modelValue:e.announcement.allDay,"onUpdate:modelValue":s[3]||=t=>e.announcement.allDay=t,disabled:e.disabled},{default:r(()=>[l(a(e.$t(`announcements.all_day_prompt`)),1)]),_:1},8,[`modelValue`,`disabled`])])])}var N=p(S,[[`render`,M]]),P={components:{AnnouncementEditor:N},data(){return{editing:!1,editedAnnouncement:{content:``,startsAt:void 0,endsAt:void 0,allDay:void 0},editError:``}},props:{announcement:Object},computed:{...v({currentUser:e=>e.users.currentUser}),canEditAnnouncement(){return this.currentUser&&this.currentUser.privileges.has(`announcements_manage_announcements`)},content(){return this.announcement.content},isRead(){return this.announcement.read},publishedAt(){let e=this.announcement.published_at;if(e)return this.formatTimeOrDate(e,y.internalToBrowserLocale(this.$i18n.locale))},startsAt(){let e=this.announcement.starts_at;if(e)return this.formatTimeOrDate(e,y.internalToBrowserLocale(this.$i18n.locale))},endsAt(){let e=this.announcement.ends_at;if(e)return this.formatTimeOrDate(e,y.internalToBrowserLocale(this.$i18n.locale))},inactive(){return this.announcement.inactive}},methods:{markAsRead(){if(!this.isRead)return x().markAnnouncementAsRead(this.announcement.id)},deleteAnnouncement(){return x().deleteAnnouncement(this.announcement.id)},formatTimeOrDate(e,t){let n=new Date(e);return this.announcement.all_day?n.toLocaleDateString(t):n.toLocaleString(t)},enterEditMode(){this.editedAnnouncement.content=this.announcement.pleroma.raw_content,this.editedAnnouncement.startsAt=this.announcement.starts_at,this.editedAnnouncement.endsAt=this.announcement.ends_at,this.editedAnnouncement.allDay=this.announcement.all_day,this.editing=!0},submitEdit(){x().editAnnouncement({id:this.announcement.id,...this.editedAnnouncement}).then(()=>{this.editing=!1}).catch(e=>{this.editError=e.error})},cancelEdit(){this.editing=!1},clearError(){this.editError=void 0}}},F={class:`announcement`},I={class:`heading`},L={class:`body`},R={class:`footer`},z={key:0,class:`times`},ee={key:0},B={key:1},V={key:2},H={key:1,class:`actions`},U=[`disabled`,`title`],W={key:2,class:`actions`},G={key:0,class:`alert error`};function K(e,r,i,u,p,h){let g=n(`rich-content`),_=n(`announcement-editor`),v=n(`FAIcon`);return t(),d(`div`,F,[m(`div`,I,[m(`h4`,null,a(e.$t(`announcements.title`)),1)]),m(`div`,L,[e.editing?(t(),s(_,{key:1,announcement:e.editedAnnouncement},null,8,[`announcement`])):(t(),s(g,{key:0,html:e.content,emoji:e.announcement.emojis,"handle-links":!0},null,8,[`html`,`emoji`]))]),m(`div`,R,[e.editing?c(``,!0):(t(),d(`div`,z,[e.publishedAt?(t(),d(`span`,ee,a(e.$t(`announcements.published_time_display`,{time:e.publishedAt})),1)):c(``,!0),e.startsAt?(t(),d(`span`,B,a(e.$t(`announcements.start_time_display`,{time:e.startsAt})),1)):c(``,!0),e.endsAt?(t(),d(`span`,V,a(e.$t(`announcements.end_time_display`,{time:e.endsAt})),1)):c(``,!0)])),e.editing?(t(),d(`div`,W,[m(`button`,{class:`btn button-default`,onClick:r[3]||=(...t)=>e.submitEdit&&e.submitEdit(...t)},a(e.$t(`announcements.submit_edit_action`)),1),m(`button`,{class:`btn button-default`,onClick:r[4]||=(...t)=>e.cancelEdit&&e.cancelEdit(...t)},a(e.$t(`announcements.cancel_edit_action`)),1),e.editing&&e.editError?(t(),d(`div`,G,[l(a(e.$t(`announcements.edit_error`,{error:e.error}))+` `,1),m(`button`,{class:`button-unstyled`,onClick:r[5]||=(...t)=>e.clearError&&e.clearError(...t)},[o(v,{class:`fa-scale-110 fa-old-padding`,icon:`times`,title:e.$t(`announcements.close_error`)},null,8,[`title`])])])):c(``,!0)])):(t(),d(`div`,H,[e.currentUser?(t(),d(`button`,{key:0,class:f([`btn button-default`,{toggled:e.isRead}]),disabled:e.inactive,title:e.inactive?e.$t(`announcements.inactive_message`):``,onClick:r[0]||=(...t)=>e.markAsRead&&e.markAsRead(...t)},a(e.$t(`announcements.mark_as_read_action`)),11,U)):c(``,!0),e.canEditAnnouncement?(t(),d(`button`,{key:1,class:`btn button-default`,onClick:r[1]||=(...t)=>e.enterEditMode&&e.enterEditMode(...t)},a(e.$t(`announcements.edit_action`)),1)):c(``,!0),e.canEditAnnouncement?(t(),d(`button`,{key:2,class:`btn button-default`,onClick:r[2]||=(...t)=>e.deleteAnnouncement&&e.deleteAnnouncement(...t)},a(e.$t(`announcements.delete_action`)),1)):c(``,!0)]))])])}var q={components:{Announcement:p(P,[[`render`,K]]),AnnouncementEditor:N},data(){return{newAnnouncement:{content:``,startsAt:void 0,endsAt:void 0,allDay:!1},posting:!1,error:void 0}},mounted(){x().fetchAnnouncements()},computed:{...v({currentUser:e=>e.users.currentUser}),announcements(){return x().announcements},canPostAnnouncement(){return this.currentUser&&this.currentUser.privileges.has(`announcements_manage_announcements`)}},methods:{postAnnouncement(){this.posting=!0,x().postAnnouncement(this.newAnnouncement).then(()=>{this.newAnnouncement.content=``,this.startsAt=void 0,this.endsAt=void 0}).catch(e=>{this.error=e.error}).finally(()=>{this.posting=!1})},clearError(){this.error=void 0}}},J={class:`panel panel-default announcements-page`},Y={class:`panel-heading`},X={class:`title`},Z={class:`panel-body`},Q={key:0},$={class:`post-form`},te={class:`heading`},ne={class:`body`},re={class:`footer`},ie=[`disabled`],ae={key:0,class:`alert error`};function oe(r,i,s,f,p,h){let g=n(`announcement-editor`),v=n(`FAIcon`),y=n(`announcement`);return t(),d(`div`,J,[m(`div`,Y,[m(`h1`,X,a(r.$t(`announcements.page_header`)),1)]),m(`div`,Z,[r.canPostAnnouncement?(t(),d(`section`,Q,[m(`div`,$,[m(`div`,te,[m(`h4`,null,a(r.$t(`announcements.post_form_header`)),1)]),m(`div`,ne,[o(g,{announcement:r.newAnnouncement,disabled:r.posting},null,8,[`announcement`,`disabled`])]),m(`div`,re,[m(`button`,{class:`btn button-default post-button`,disabled:r.posting,onClick:i[0]||=_((...e)=>r.postAnnouncement&&r.postAnnouncement(...e),[`prevent`])},a(r.$t(`announcements.post_action`)),9,ie),r.error?(t(),d(`div`,ae,[l(a(r.$t(`announcements.post_error`,{error:r.error}))+` `,1),m(`button`,{class:`button-unstyled`,onClick:i[1]||=(...e)=>r.clearError&&r.clearError(...e)},[o(v,{class:`fa-scale-110 fa-old-padding`,icon:`times`,title:r.$t(`announcements.close_error`)},null,8,[`title`])])])):c(``,!0)])])])):c(``,!0),(t(!0),d(u,null,e(r.announcements,e=>(t(),d(`section`,{key:e.id},[o(y,{announcement:e},null,8,[`announcement`])]))),128))])])}var se=p(q,[[`render`,oe]]);export{se as default}; +//# sourceMappingURL=announcements_page.5InQkWqQ.js.map \ No newline at end of file diff --git a/priv/static/static/js/announcements_page.5InQkWqQ.js.map b/priv/static/static/js/announcements_page.5InQkWqQ.js.map new file mode 100644 index 000000000..43882b4b2 --- /dev/null +++ b/priv/static/static/js/announcements_page.5InQkWqQ.js.map @@ -0,0 +1 @@ +{"version":3,"file":"announcements_page.5InQkWqQ.js","names":[],"sources":["../../../src/components/announcement_editor/announcement_editor.js?vue&type=script&src=true&lang.js","../../../src/components/announcement_editor/announcement_editor.vue","../../../src/components/announcement/announcement.js?vue&type=script&src=true&lang.js","../../../src/components/announcement/announcement.vue","../../../src/components/announcements_page/announcements_page.js?vue&type=script&src=true&lang.js","../../../src/components/announcements_page/announcements_page.vue"],"sourcesContent":["import Checkbox from 'src/components/checkbox/checkbox.vue'\n\nconst AnnouncementEditor = {\n components: {\n Checkbox,\n },\n props: {\n announcement: Object,\n disabled: Boolean,\n },\n}\n\nexport default AnnouncementEditor\n","\n\n\n\n\n","import { mapState } from 'vuex'\n\nimport AnnouncementEditor from 'src/components/announcement_editor/announcement_editor.vue'\nimport localeService from '../../services/locale/locale.service.js'\n\nimport { useAnnouncementsStore } from 'src/stores/announcements.js'\n\nconst Announcement = {\n components: {\n AnnouncementEditor,\n },\n data() {\n return {\n editing: false,\n editedAnnouncement: {\n content: '',\n startsAt: undefined,\n endsAt: undefined,\n allDay: undefined,\n },\n editError: '',\n }\n },\n props: {\n announcement: Object,\n },\n computed: {\n ...mapState({\n currentUser: (state) => state.users.currentUser,\n }),\n canEditAnnouncement() {\n return (\n this.currentUser &&\n this.currentUser.privileges.has('announcements_manage_announcements')\n )\n },\n content() {\n return this.announcement.content\n },\n isRead() {\n return this.announcement.read\n },\n publishedAt() {\n const time = this.announcement.published_at\n if (!time) {\n return\n }\n\n return this.formatTimeOrDate(\n time,\n localeService.internalToBrowserLocale(this.$i18n.locale),\n )\n },\n startsAt() {\n const time = this.announcement.starts_at\n if (!time) {\n return\n }\n\n return this.formatTimeOrDate(\n time,\n localeService.internalToBrowserLocale(this.$i18n.locale),\n )\n },\n endsAt() {\n const time = this.announcement.ends_at\n if (!time) {\n return\n }\n\n return this.formatTimeOrDate(\n time,\n localeService.internalToBrowserLocale(this.$i18n.locale),\n )\n },\n inactive() {\n return this.announcement.inactive\n },\n },\n methods: {\n markAsRead() {\n if (!this.isRead) {\n return useAnnouncementsStore().markAnnouncementAsRead(\n this.announcement.id,\n )\n }\n },\n deleteAnnouncement() {\n return useAnnouncementsStore().deleteAnnouncement(this.announcement.id)\n },\n formatTimeOrDate(time, locale) {\n const d = new Date(time)\n return this.announcement.all_day\n ? d.toLocaleDateString(locale)\n : d.toLocaleString(locale)\n },\n enterEditMode() {\n this.editedAnnouncement.content = this.announcement.pleroma.raw_content\n this.editedAnnouncement.startsAt = this.announcement.starts_at\n this.editedAnnouncement.endsAt = this.announcement.ends_at\n this.editedAnnouncement.allDay = this.announcement.all_day\n this.editing = true\n },\n submitEdit() {\n useAnnouncementsStore()\n .editAnnouncement({\n id: this.announcement.id,\n ...this.editedAnnouncement,\n })\n .then(() => {\n this.editing = false\n })\n .catch((error) => {\n this.editError = error.error\n })\n },\n cancelEdit() {\n this.editing = false\n },\n clearError() {\n this.editError = undefined\n },\n },\n}\n\nexport default Announcement\n","\n\n\n\n\n","import { mapState } from 'vuex'\n\nimport Announcement from 'src/components/announcement/announcement.vue'\nimport AnnouncementEditor from 'src/components/announcement_editor/announcement_editor.vue'\n\nimport { useAnnouncementsStore } from 'src/stores/announcements.js'\n\nconst AnnouncementsPage = {\n components: {\n Announcement,\n AnnouncementEditor,\n },\n data() {\n return {\n newAnnouncement: {\n content: '',\n startsAt: undefined,\n endsAt: undefined,\n allDay: false,\n },\n posting: false,\n error: undefined,\n }\n },\n mounted() {\n useAnnouncementsStore().fetchAnnouncements()\n },\n computed: {\n ...mapState({\n currentUser: (state) => state.users.currentUser,\n }),\n announcements() {\n return useAnnouncementsStore().announcements\n },\n canPostAnnouncement() {\n return (\n this.currentUser &&\n this.currentUser.privileges.has('announcements_manage_announcements')\n )\n },\n },\n methods: {\n postAnnouncement() {\n this.posting = true\n useAnnouncementsStore()\n .postAnnouncement(this.newAnnouncement)\n .then(() => {\n this.newAnnouncement.content = ''\n this.startsAt = undefined\n this.endsAt = undefined\n })\n .catch((error) => {\n this.error = error.error\n })\n .finally(() => {\n this.posting = false\n })\n },\n clearError() {\n this.error = undefined\n },\n },\n}\n\nexport default AnnouncementsPage\n","\n\n\n\n\n"],"mappings":"4ZAEA,IAAM,EAAqB,CACzB,WAAY,CACV,SAAA,CACF,EACA,MAAO,CACL,aAAc,OACd,SAAU,OACZ,CACF,KCTO,MAAM,qBAAqB,kCAUxB,MAAM,uBAAuB,KAC1B,IAAI,yBAAyB,2BAShC,MAAM,uBAAuB,KAC1B,IAAI,uBAAuB,2BAS9B,MAAM,uBAAuB,yDA9BrC,EAuCM,MAvCN,EAuCM,GAtCJ,EAQE,WAAA,CAPA,IAAI,2CACK,EAAA,aAAa,QAAO,EAC7B,MAAM,sBACN,KAAK,IACL,KAAK,IACJ,YAAa,EAAA,GAAE,gCAAA,EACf,SAAU,EAAA,wBALF,EAAA,aAAa,OAAO,CAAA,CAAA,EAO/B,EASO,OATP,EASO,CARL,EAAwF,QAAxF,EAAwF,EAAhD,EAAA,GAAE,iCAAA,CAAA,EAAA,CAAA,EAAA,EAC1C,EAMC,QAAA,CALC,GAAG,0DACM,EAAA,aAAa,SAAQ,EAC9B,MAAM,QACL,KAAM,EAAA,aAAa,OAAM,OAAA,iBACzB,SAAU,EAAA,wBAHF,EAAA,aAAa,QAAQ,CAAA,CAAA,CAAA,CAAA,EAMlC,EASO,OATP,EASO,CARL,EAAoF,QAApF,EAAoF,EAA9C,EAAA,GAAE,+BAAA,CAAA,EAAA,CAAA,EAAA,EACxC,EAMC,QAAA,CALC,GAAG,wDACM,EAAA,aAAa,OAAM,EAC5B,MAAM,QACL,KAAM,EAAA,aAAa,OAAM,OAAA,iBACzB,SAAU,EAAA,wBAHF,EAAA,aAAa,MAAM,CAAA,CAAA,CAAA,CAAA,EAMhC,EAQO,OARP,EAQO,CAPL,EAMW,EAAA,CALT,GAAG,kCACM,EAAA,aAAa,uCAAb,EAAA,aAAa,OAAM,EAC3B,SAAU,EAAA,yBAE6B,CAAA,EAAA,EAArC,EAAA,GAAE,8BAAA,CAAA,EAAA,CAAA,CAAA,CAAA,kEC9BP,EAAe,CACnB,WAAY,CACV,mBAAA,CACF,EACA,MAAO,CACL,MAAO,CACL,QAAS,GACT,mBAAoB,CAClB,QAAS,GACT,SAAU,IAAA,GACV,OAAQ,IAAA,GACR,OAAQ,IAAA,EACV,EACA,UAAW,EACb,CACF,EACA,MAAO,CACL,aAAc,MAChB,EACA,SAAU,CACR,GAAG,EAAS,CACV,YAAc,GAAU,EAAM,MAAM,WACtC,CAAC,EACD,qBAAsB,CACpB,OACE,KAAK,aACL,KAAK,YAAY,WAAW,IAAI,oCAAoC,CAExE,EACA,SAAU,CACR,OAAO,KAAK,aAAa,OAC3B,EACA,QAAS,CACP,OAAO,KAAK,aAAa,IAC3B,EACA,aAAc,CACZ,IAAM,EAAO,KAAK,aAAa,aAC1B,KAIL,OAAO,KAAK,iBACV,EACA,EAAc,wBAAwB,KAAK,MAAM,MAAM,CACzD,CACF,EACA,UAAW,CACT,IAAM,EAAO,KAAK,aAAa,UAC1B,KAIL,OAAO,KAAK,iBACV,EACA,EAAc,wBAAwB,KAAK,MAAM,MAAM,CACzD,CACF,EACA,QAAS,CACP,IAAM,EAAO,KAAK,aAAa,QAC1B,KAIL,OAAO,KAAK,iBACV,EACA,EAAc,wBAAwB,KAAK,MAAM,MAAM,CACzD,CACF,EACA,UAAW,CACT,OAAO,KAAK,aAAa,QAC3B,CACF,EACA,QAAS,CACP,YAAa,CACX,GAAI,CAAC,KAAK,OACR,OAAO,EAAsB,EAAE,uBAC7B,KAAK,aAAa,EACpB,CAEJ,EACA,oBAAqB,CACnB,OAAO,EAAsB,EAAE,mBAAmB,KAAK,aAAa,EAAE,CACxE,EACA,iBAAiB,EAAM,EAAQ,CAC7B,IAAM,EAAI,IAAI,KAAK,CAAI,EACvB,OAAO,KAAK,aAAa,QACrB,EAAE,mBAAmB,CAAM,EAC3B,EAAE,eAAe,CAAM,CAC7B,EACA,eAAgB,CACd,KAAK,mBAAmB,QAAU,KAAK,aAAa,QAAQ,YAC5D,KAAK,mBAAmB,SAAW,KAAK,aAAa,UACrD,KAAK,mBAAmB,OAAS,KAAK,aAAa,QACnD,KAAK,mBAAmB,OAAS,KAAK,aAAa,QACnD,KAAK,QAAU,EACjB,EACA,YAAa,CACX,EAAsB,EACnB,iBAAiB,CAChB,GAAI,KAAK,aAAa,GACtB,GAAG,KAAK,kBACV,CAAC,EACA,SAAW,CACV,KAAK,QAAU,EACjB,CAAC,EACA,MAAO,GAAU,CAChB,KAAK,UAAY,EAAM,KACzB,CAAC,CACL,EACA,YAAa,CACX,KAAK,QAAU,EACjB,EACA,YAAa,CACX,KAAK,UAAY,IAAA,EACnB,CACF,CACF,KC1HO,MAAM,cAAc,KAClB,MAAM,SAAS,KAGf,MAAM,MAAM,KAYZ,MAAM,QAAQ,WAGf,MAAM,iDAcN,MAAM,2CA6BN,MAAM,oBAgBJ,MAAM,mHA9Ed,EA8FM,MA9FN,EA8FM,CA7FJ,EAEM,MAFN,EAEM,CADJ,EAAwC,KAAA,KAAA,EAAjC,EAAA,GAAE,qBAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAEX,EAWM,MAXN,EAWM,CATK,EAAA,aAKT,EAGE,EAAA,OADC,aAAc,EAAA,+CAPR,EAAA,EADT,EAKE,EAAA,OAHC,KAAM,EAAA,QACN,MAAO,EAAA,aAAa,OACpB,eAAc,gCAOnB,EA6EM,MA7EN,EA6EM,CA3EK,EAAA,kBAAA,EAAA,EADT,EAaM,MAbN,EAaM,CATQ,EAAA,aAAA,EAAA,EAAZ,EAEO,OAAA,GAAA,EADF,EAAA,GAAE,uCAAA,CAAA,KAAiD,EAAA,WAAW,CAAA,CAAA,EAAA,CAAA,GAAA,EAAA,GAAA,EAAA,EAEvD,EAAA,UAAA,EAAA,EAAZ,EAEO,OAAA,EAAA,EADF,EAAA,GAAE,mCAAA,CAAA,KAA6C,EAAA,QAAQ,CAAA,CAAA,EAAA,CAAA,GAAA,EAAA,GAAA,EAAA,EAEhD,EAAA,QAAA,EAAA,EAAZ,EAEO,OAAA,EAAA,EADF,EAAA,GAAE,iCAAA,CAAA,KAA2C,EAAA,MAAM,CAAA,CAAA,EAAA,CAAA,GAAA,EAAA,GAAA,EAAA,KAIjD,EAAA,aA4BT,EAgCM,MAhCN,EAgCM,CA5BJ,EAKS,SAAA,CAJP,MAAM,qBACL,QAAK,AAAA,EAAA,MAAA,GAAA,IAAE,EAAA,YAAA,EAAA,WAAA,GAAA,CAAA,KAEL,EAAA,GAAE,kCAAA,CAAA,EAAA,CAAA,EAEP,EAKS,SAAA,CAJP,MAAM,qBACL,QAAK,AAAA,EAAA,MAAA,GAAA,IAAE,EAAA,YAAA,EAAA,WAAA,GAAA,CAAA,KAEL,EAAA,GAAE,kCAAA,CAAA,EAAA,CAAA,EAGC,EAAA,SAAW,EAAA,WAAA,EAAA,EADnB,EAeM,MAfN,EAeM,CAAA,EAAA,EAXD,EAAA,GAAE,2BAAA,CAAA,MAA+B,EAAA,KAAK,CAAA,CAAA,EAAM,IAC/C,CAAA,EAAA,EASS,SAAA,CARP,MAAM,kBACL,QAAK,AAAA,EAAA,MAAA,GAAA,IAAE,EAAA,YAAA,EAAA,WAAA,GAAA,CAAA,IAER,EAIE,EAAA,CAHA,MAAM,8BACN,KAAK,QACJ,MAAO,EAAA,GAAE,2BAAA,uCAxDT,EAAA,EADT,EA4BM,MA5BN,EA4BM,CAvBI,EAAA,aAAA,EAAA,EADR,EASS,SAAA,OAPP,MAAK,EAAA,CAAC,qBAAoB,CAAA,QACP,EAAA,MAAM,CAAA,CAAA,EACxB,SAAU,EAAA,SACV,MAAO,EAAA,SAAW,EAAA,GAAE,gCAAA,EAAA,GACpB,QAAK,AAAA,EAAA,MAAA,GAAA,IAAE,EAAA,YAAA,EAAA,WAAA,GAAA,CAAA,KAEL,EAAA,GAAE,mCAAA,CAAA,EAAA,GAAA,CAAA,GAAA,EAAA,GAAA,EAAA,EAGC,EAAA,qBAAA,EAAA,EADR,EAMS,SAAA,OAJP,MAAM,qBACL,QAAK,AAAA,EAAA,MAAA,GAAA,IAAE,EAAA,eAAA,EAAA,cAAA,GAAA,CAAA,KAEL,EAAA,GAAE,2BAAA,CAAA,EAAA,CAAA,GAAA,EAAA,GAAA,EAAA,EAGC,EAAA,qBAAA,EAAA,EADR,EAMS,SAAA,OAJP,MAAM,qBACL,QAAK,AAAA,EAAA,MAAA,GAAA,IAAE,EAAA,oBAAA,EAAA,mBAAA,GAAA,CAAA,KAEL,EAAA,GAAE,6BAAA,CAAA,EAAA,CAAA,GAAA,EAAA,GAAA,EAAA,SCnDf,IAAM,EAAoB,CACxB,WAAY,CACV,+BAAA,EACA,mBAAA,CACF,EACA,MAAO,CACL,MAAO,CACL,gBAAiB,CACf,QAAS,GACT,SAAU,IAAA,GACV,OAAQ,IAAA,GACR,OAAQ,EACV,EACA,QAAS,GACT,MAAO,IAAA,EACT,CACF,EACA,SAAU,CACR,EAAsB,EAAE,mBAAmB,CAC7C,EACA,SAAU,CACR,GAAG,EAAS,CACV,YAAc,GAAU,EAAM,MAAM,WACtC,CAAC,EACD,eAAgB,CACd,OAAO,EAAsB,EAAE,aACjC,EACA,qBAAsB,CACpB,OACE,KAAK,aACL,KAAK,YAAY,WAAW,IAAI,oCAAoC,CAExE,CACF,EACA,QAAS,CACP,kBAAmB,CACjB,KAAK,QAAU,GACf,EAAsB,EACnB,iBAAiB,KAAK,eAAe,EACrC,SAAW,CACV,KAAK,gBAAgB,QAAU,GAC/B,KAAK,SAAW,IAAA,GAChB,KAAK,OAAS,IAAA,EAChB,CAAC,EACA,MAAO,GAAU,CAChB,KAAK,MAAQ,EAAM,KACrB,CAAC,EACA,YAAc,CACb,KAAK,QAAU,EACjB,CAAC,CACL,EACA,YAAa,CACX,KAAK,MAAQ,IAAA,EACf,CACF,CACF,KC7DO,MAAM,wCAAwC,KAC5C,MAAM,eAAe,KACpB,MAAM,OAAO,KAId,MAAM,YAAY,eAId,MAAM,WAAW,MACf,MAAM,SAAS,MAGf,MAAM,MAAM,MAMZ,MAAM,QAAQ,4BAUf,MAAM,oHA9BlB,EAwDM,MAxDN,EAwDM,CAvDJ,EAIM,MAJN,EAIM,CAHJ,EAEK,KAFL,EAEK,EADA,EAAA,GAAE,2BAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAGT,EAiDM,MAjDN,EAiDM,CA/CI,EAAA,qBAAA,EAAA,EADR,EAuCU,UAAA,EAAA,CApCR,EAmCM,MAnCN,EAmCM,CAlCJ,EAEM,MAFN,GAEM,CADJ,EAAmD,KAAA,KAAA,EAA5C,EAAA,GAAE,gCAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAEX,EAKM,MALN,GAKM,CAJJ,EAGE,EAAA,CAFC,aAAc,EAAA,gBACd,SAAU,EAAA,+CAGf,EAwBM,MAxBN,GAwBM,CAvBJ,EAMS,SAAA,CALP,MAAM,iCACL,SAAU,EAAA,QACV,QAAK,AAAA,EAAA,KAAA,GAAA,GAAA,IAAU,EAAA,kBAAA,EAAA,iBAAA,GAAA,CAAA,EAAgB,CAAA,SAAA,CAAA,KAE7B,EAAA,GAAE,2BAAA,CAAA,EAAA,EAAA,EAAA,EAGC,EAAA,OAAA,EAAA,EADR,EAeM,MAfN,GAeM,CAAA,EAAA,EAXD,EAAA,GAAE,2BAAA,CAAA,MAA+B,EAAA,KAAK,CAAA,CAAA,EAAM,IAC/C,CAAA,EAAA,EASS,SAAA,CARP,MAAM,kBACL,QAAK,AAAA,EAAA,MAAA,GAAA,IAAE,EAAA,YAAA,EAAA,WAAA,GAAA,CAAA,IAER,EAIE,EAAA,CAHA,MAAM,8BACN,KAAK,QACJ,MAAO,EAAA,GAAE,2BAAA,0DAOtB,EAOU,EAAA,KAAA,EANe,EAAA,cAAhB,QADT,EAOU,UAAA,CALP,IAAK,EAAa,EAAA,EAAA,CAEnB,EAEE,EAAA,CADe,cAAY,EAAA,KAAA,EAAA,CAAA,cAAA,CAAA,CAAA,CAAA"} \ No newline at end of file diff --git a/priv/static/static/js/attributes_helper.service.Ku0p8pb2.js b/priv/static/static/js/attributes_helper.service.Ku0p8pb2.js new file mode 100644 index 000000000..c65d57b12 --- /dev/null +++ b/priv/static/static/js/attributes_helper.service.Ku0p8pb2.js @@ -0,0 +1,3 @@ +import{I as e,L as t,M as n,R as r,U as i,X as a,Y as o,_ as s,d as c,f as l,g as u,i as d,p as f,q as p,t as m,u as h}from"./_plugin-vue_export-helper.By3-ojQa.js";import{s as g}from"./runtime-dom.esm-bundler.DzcUlaDE.js";import{t as _}from"./lodash.daI9UflD.js";import{O as v}from"./oauth.C4JLKGAu.js";import{kn as y}from"./free-solid-svg-icons.vn_kySUQ.js";import{t as b}from"./languages.q6q0orhR.js";import{t as x}from"./unicode_domain_indicator.BnLqD48H.js";import{t as S}from"./popover.94nM-RDc.js";import{t as C}from"./emoji_picker.Ccx2u99H.js";import{r as w}from"./free-regular-svg-icons.BGRGA4e_.js";var T=_(),E={props:{ariaLive:{type:String,default:`assertive`}},data(){return{currentText:``}},methods:{announce(e){this.currentText=e,setTimeout(()=>{this.currentText=``},1e3)}}},D=[`aria-live`];function O(e,t,r,i,o,s){return n(),f(`div`,{class:`visible-for-screenreader-only`,"aria-live":e.ariaLive},a(e.currentText),9,D)}var k=m(E,[[`render`,O]]),A=(e,t,n)=>e.slice(0,t.start)+n+e.slice(t.end),j=(e,t)=>(0,T.find)(M(N(e)),({start:e,end:n})=>e<=t&&n>t),M=e=>(0,T.reduce)(e,(e,t)=>{let n={word:t,start:0,end:t.length};if(e.length>0){let t=e.pop();n.start+=t.end,n.end+=t.end,e.push(t)}return e.push(n),e},[]),N=e=>{let t=[],n=``;for(let r=0;r{let a={top:n+e.offsetTop,left:r+e.offsetLeft};if(!i&&e!==window){let{topPadding:t,leftPadding:n}=I(e);a.top+=i?0:t,a.left+=i?0:n}if(e.offsetParent&&window.getComputedStyle(e.offsetParent).position!==`sticky`&&(t===window||t.contains(e.offsetParent)||t===e.offsetParent))return F(e.offsetParent,t,a,!1);if(t!==window){let{topPadding:e,leftPadding:n}=I(t);a.top+=e,a.left+=n}return a},I=e=>{let t=window.getComputedStyle(e)[`padding-top`],n=Number(t.substring(0,t.length-2)),r=window.getComputedStyle(e)[`padding-left`];return{topPadding:n,leftPadding:Number(r.substring(0,r.length-2))}},L=()=>`${Math.random()}`.replace(`.`,`-`);y.add(w);var R={emits:[`update:modelValue`,`shown`],props:{suggest:{required:!0,type:Function},modelValue:{required:!0,type:String},enableEmojiPicker:{required:!1,type:Boolean,default:!1},hideEmojiButton:{required:!1,type:Boolean,default:!1},enableStickerPicker:{required:!1,type:Boolean,default:!1},placement:{required:!1,type:String,default:`auto`},newlineOnCtrlEnter:{required:!1,type:Boolean,default:!1}},data(){return{randomSeed:L(),input:void 0,caretEl:void 0,highlighted:-1,caret:0,focused:!1,blurTimeout:null,temporarilyHideSuggestions:!1,disableClickOutside:!1,suggestions:[],overlayStyle:{},pickerShown:!1}},components:{Popover:S,EmojiPicker:C,UnicodeDomainIndicator:x,ScreenReaderNotice:k},computed:{padEmoji(){return v().mergedConfig.padEmoji},defaultCandidateIndex(){return v().mergedConfig.autocompleteSelect?0:-1},preText(){return this.modelValue.slice(0,this.caret)},postText(){return this.modelValue.slice(this.caret)},showSuggestions(){return this.focused&&this.suggestions&&this.suggestions.length>0&&!this.pickerShown&&!this.temporarilyHideSuggestions},textAtCaret(){return this.wordAtCaret?.word},wordAtCaret(){if(this.modelValue&&this.caret)return P.wordAtPosition(this.modelValue,this.caret-1)||{}},languages(){return b(v().mergedConfig.interfaceLanguage)},maybeLocalizedEmojiNamesAndKeywords(){return e=>{let t=[e.displayText],n=[];return e.displayTextI18n&&t.push(this.$t(e.displayTextI18n.key,e.displayTextI18n.args)),e.annotations&&this.languages.forEach(r=>{t.push(e.annotations[r]?.name),n.push(...e.annotations[r]?.keywords||[])}),{names:t.filter(e=>e),keywords:n.filter(e=>e)}}},maybeLocalizedEmojiName(){return e=>{if(!e.annotations)return e.displayText;if(e.displayTextI18n)return this.$t(e.displayTextI18n.key,e.displayTextI18n.args);for(let t of this.languages)if(e.annotations[t]?.name)return e.annotations[t].name;return e.displayText}},suggestionListId(){return`suggestions-${this.randomSeed}`},suggestionItemId(){return e=>`suggestion-item-${e}-${this.randomSeed}`}},mounted(){let{root:e,hiddenOverlayCaret:t,suggestorPopover:n}=this.$refs,r=e.querySelector(`.emoji-input > input`)||e.querySelector(`.emoji-input > textarea`);if(!r)return;this.input=r,this.caretEl=t,n.setAnchorEl?(n.setAnchorEl(this.caretEl),this.$refs.picker.setAnchorEl(this.caretEl)):console.warn(`setAnchorEl not found, are we in a unit test?`);let i=getComputedStyle(this.input);this.overlayStyle.padding=i.padding,this.overlayStyle.border=i.border,this.overlayStyle.margin=i.margin,this.overlayStyle.lineHeight=i.lineHeight,this.overlayStyle.fontFamily=i.fontFamily,this.overlayStyle.fontSize=i.fontSize,this.overlayStyle.wordWrap=i.wordWrap,this.overlayStyle.whiteSpace=i.whiteSpace,r.addEventListener(`blur`,this.onBlur),r.addEventListener(`focus`,this.onFocus),r.addEventListener(`paste`,this.onPaste),r.addEventListener(`keyup`,this.onKeyUp),r.addEventListener(`keydown`,this.onKeyDown),r.addEventListener(`click`,this.onClickInput),r.addEventListener(`transitionend`,this.onTransition),r.addEventListener(`input`,this.onInput),r.addEventListener(`scroll`,this.onInputScroll)},unmounted(){let{input:e}=this;e&&(e.removeEventListener(`blur`,this.onBlur),e.removeEventListener(`focus`,this.onFocus),e.removeEventListener(`paste`,this.onPaste),e.removeEventListener(`keyup`,this.onKeyUp),e.removeEventListener(`keydown`,this.onKeyDown),e.removeEventListener(`click`,this.onClickInput),e.removeEventListener(`transitionend`,this.onTransition),e.removeEventListener(`input`,this.onInput),e.removeEventListener(`scroll`,this.onInputScroll))},watch:{showSuggestions:function(e){this.$emit(`shown`,e),e?this.$refs.suggestorPopover.showPopover():this.$refs.suggestorPopover.hidePopover()},textAtCaret:async function(e){if(e===void 0)return;if(e===e.charAt(0)){this.suggestions=[];return}let t=await this.suggest(e,this.maybeLocalizedEmojiNamesAndKeywords);if(this.textAtCaret!==e||t.length<=0){this.suggestions=[];return}this.suggestions=(0,T.take)(t,5).map(({imageUrl:e,...t})=>({...t,img:e||``})),this.highlighted=this.defaultCandidateIndex,this.$refs.screenReaderNotice.announce(this.$t(`tool_tip.autocomplete_available`,{number:this.suggestions.length},this.suggestions.length))}},methods:{onInputScroll(e){this.$refs.hiddenOverlay.scrollTo({top:this.input.scrollTop,left:this.input.scrollLeft}),this.setCaret(e)},triggerShowPicker(){this.$nextTick(()=>{this.$refs.picker.showPicker(),this.scrollIntoView()}),this.disableClickOutside=!0,setTimeout(()=>{this.disableClickOutside=!1},0)},togglePicker(){this.input.focus(),this.pickerShown?this.$refs.picker.hidePicker():(this.scrollIntoView(),this.$refs.picker.showPicker())},replace(e){let t=P.replaceWord(this.modelValue,this.wordAtCaret,e);this.$emit(`update:modelValue`,t),this.caret=0},insert({insertion:e,keepOpen:t,surroundingSpace:n=!0}){let r=this.modelValue.substring(0,this.caret)||``,i=this.modelValue.substring(this.caret)||``,a=/\s/,o=n&&!a.exec(r.slice(-1))&&r.length&&this.padEmoji>0?` `:``,s=n&&!a.exec(i[0])&&this.padEmoji?` `:``,c=[r,o,e,s,i].join(``);this.$emit(`update:modelValue`,c);let l=this.caret+(e+s+o).length;t||this.input.focus(),this.$nextTick(function(){this.input.setSelectionRange(l,l),this.caret=l})},replaceText(e,t){let n=this.suggestions.length||0;if(this.textAtCaret.length!==1&&(n>0||t)){let n=(t||this.suggestions[this.highlighted]).replacement,r=P.replaceWord(this.modelValue,this.wordAtCaret,n);this.$emit(`update:modelValue`,r),this.highlighted=0;let i=this.wordAtCaret.start+n.length;this.$nextTick(function(){this.input.focus(),this.input.setSelectionRange(i,i),this.caret=i}),e.preventDefault()}},cycleBackward(e){let t=this.suggestions.length||0;--this.highlighted,this.highlighted===-1?this.input.focus():this.highlighted<-1&&(this.highlighted=t-1),t>0&&e.preventDefault()},cycleForward(e){let t=this.suggestions.length||0;this.highlighted+=1,this.highlighted>=t&&(this.highlighted=-1,this.input.focus()),t>0&&e.preventDefault()},scrollIntoView(){let e=this.$refs.picker.$el,t=this.$el.closest(`.sidebar-scroller`)||this.$el.closest(`.post-form-modal-view`)||window,n=t===window?t.scrollY:t.scrollTop,r=n+(t===window?t.innerHeight:t.offsetHeight),i=e.offsetHeight+F(e,t).top,a=n+Math.max(0,i-r);t===window?t.scroll(0,a):t.scrollTop=a,this.$nextTick(()=>{let{offsetHeight:e}=this.input,{picker:t}=this.$refs;t.$el.getBoundingClientRect().bottom>window.innerHeight&&(t.$el.style.top=`auto`,t.$el.style.bottom=e+`px`)})},onPickerShown(){this.pickerShown=!0},onPickerClosed(){this.pickerShown=!1},onBlur(e){this.blurTimeout=setTimeout(()=>{this.focused=!1,this.setCaret(e)},200)},onClick(e,t){this.replaceText(e,t)},onFocus(e){this.blurTimeout&&=(clearTimeout(this.blurTimeout),null),this.focused=!0,this.setCaret(e),this.temporarilyHideSuggestions=!1},onKeyUp(e){let{key:t}=e;this.setCaret(e),t===`Escape`?this.temporarilyHideSuggestions=!0:this.temporarilyHideSuggestions=!1},onPaste(e){this.setCaret(e)},onKeyDown(e){let{ctrlKey:t,shiftKey:n,key:r}=e;this.newlineOnCtrlEnter&&t&&r===`Enter`&&(this.insert({insertion:` +`,surroundingSpace:!1}),e.stopPropagation(),e.preventDefault(),this.$nextTick(()=>{this.input.blur(),this.input.focus()})),this.temporarilyHideSuggestions||(r===`Tab`&&(n?this.cycleBackward(e):this.cycleForward(e)),r===`ArrowUp`?this.cycleBackward(e):r===`ArrowDown`&&this.cycleForward(e),r===`Enter`&&(t||this.replaceText(e))),r===`Escape`&&(this.temporarilyHideSuggestions||this.input.focus())},onInput(e){this.setCaret(e),this.$emit(`update:modelValue`,e.target.value)},onStickerUploaded(e){this.$emit(`sticker-uploaded`,e)},onStickerUploadFailed(e){this.$emit(`sticker-upload-Failed`,e)},setCaret({target:{selectionStart:e}}){this.caret=e,this.$nextTick(()=>{this.$refs.suggestorPopover?.updateStyles()})},autoCompleteItemLabel(e){return e.user?e.displayText+` `+e.detailText:this.maybeLocalizedEmojiName(e)}}},z={ref:`hiddenOverlayCaret`,class:`caret`},B=[`title`],V=[`id`],H=[`id`,`aria-label`,`aria-selected`,`onClick`],U={class:`image`},W=[`src`],G={key:1},K={class:`label`},q={key:0,class:`displayText`},J={key:1,class:`displayText`},Y={class:`detailText`};function X(m,_,v,y,b,x){let S=r(`screen-reader-notice`),C=r(`FAIcon`),w=r(`EmojiPicker`),T=r(`UnicodeDomainIndicator`),E=r(`Popover`);return n(),f(`div`,{ref:`root`,class:p([`input emoji-input`,{"-with-picker":!m.hideEmojiButton,"-textarea":m.input?.tagName===`TEXTAREA`}])},[t(m.$slots,`default`,{id:`textbox-`+m.randomSeed,ariaOwns:m.suggestionListId,ariaAutocomplete:`both`,ariaExpanded:m.showSuggestions,ariaActivedescendant:!m.showSuggestions||m.highlighted===-1?``:m.suggestionItemId(m.highlighted)}),h(`div`,{ref:`hiddenOverlay`,class:`hidden-overlay`,style:o(m.overlayStyle),"aria-hidden":!0},[h(`span`,null,a(m.preText),1),h(`span`,z,`x`,512),h(`span`,null,a(m.postText),1)],4),s(S,{ref:`screenReaderNotice`,"aria-live":`assertive`},null,512),m.enableEmojiPicker?(n(),f(d,{key:0},[m.hideEmojiButton?l(``,!0):(n(),f(`button`,{key:0,class:`button-unstyled emoji-picker-icon`,type:`button`,title:m.$t(`emoji.add_emoji`),onClick:_[0]||=g((...e)=>m.togglePicker&&m.togglePicker(...e),[`prevent`])},[s(C,{icon:[`far`,`face-smile-beam`]})],8,B)),m.enableEmojiPicker?(n(),c(w,{key:1,ref:`picker`,"enable-sticker-picker":m.enableStickerPicker,class:`emoji-picker-panel`,onEmoji:m.insert,onStickerUploaded:m.onStickerUploaded,onStickerUploadFailed:m.onStickerUploadFailed,onShow:m.onPickerShown,onClose:m.onPickerClosed},null,8,[`enable-sticker-picker`,`onEmoji`,`onStickerUploaded`,`onStickerUploadFailed`,`onShow`,`onClose`])):l(``,!0)],64)):l(``,!0),s(E,{ref:`suggestorPopover`,class:`autocomplete-panel`,placement:`bottom`,"hide-trigger":!0},{content:i(()=>[h(`div`,{id:m.suggestionListId,ref:`panel-body`,class:`autocomplete-panel-body`,role:`listbox`},[(n(!0),f(d,null,e(m.suggestions,(e,t)=>(n(),f(`div`,{id:m.suggestionItemId(t),key:t,class:p([`menu-item autocomplete-item`,{"-active":t===m.highlighted}]),role:`option`,"aria-label":m.autoCompleteItemLabel(e),"aria-selected":t===m.highlighted,onClick:g(t=>m.onClick(t,e),[`stop`,`prevent`])},[h(`span`,U,[e.img?(n(),f(`img`,{key:0,src:e.img},null,8,W)):(n(),f(`span`,G,a(e.replacement),1))]),h(`div`,K,[e.user?(n(),f(`span`,q,[u(a(e.displayText),1),s(T,{user:e.user,at:!1},null,8,[`user`])])):l(``,!0),e.user?l(``,!0):(n(),f(`span`,J,a(m.maybeLocalizedEmojiName(e)),1)),h(`span`,Y,a(e.detailText),1)])],10,H))),128))],8,V)]),_:1},512)],2)}var Z=m(R,[[`render`,X]]),Q=e=>{let t=$(e.emoji),n=e.store&&ee(e.store);return(r,i)=>{let a=r[0];return a===`:`&&e.emoji?t(r,i):a===`@`&&n?n(r):[]}},$=e=>(t,n)=>{let r=t.toLowerCase().substring(1);return e.map(e=>({...e,...n(e)})).filter(e=>e.names.concat(e.keywords).filter(e=>e.toLowerCase().includes(r)).length).map(e=>{let t=0;return t+=Math.max(...e.names.map(e=>e.toLowerCase()===r?200:0),0),t+=e.imageUrl?100:0,t+=Math.max(...e.names.map(e=>e.toLowerCase().startsWith(r)?10:0),0),t-=e.displayText.length,e.score=t,e}).sort((e,t)=>{let n=e.displayText>t.displayText?.5:-.5;return t.score-e.score+n})},ee=({dispatch:e,state:t})=>{let n=[],r=``,i=null,a=null,o=t=>e(`searchUsers`,{query:t}),s=e=>(a&&a(),new Promise((t,n)=>{i=setTimeout(()=>{o(e).then(t).catch(n)},300),a=()=>{clearTimeout(i),t([])}}));return async e=>{let i=e.toLowerCase().substr(1);return r===i?n:(n=[],r=i,i.includes(`@`)||await s(i),n=t.users.users.filter(e=>e.screen_name&&e.name&&(e.screen_name.toLowerCase().startsWith(i)||e.name.toLowerCase().startsWith(i))).slice(0,20).sort((e,t)=>{let n=0,r=0;n+=e.screen_name.toLowerCase().startsWith(i)?2:0,r+=t.screen_name.toLowerCase().startsWith(i)?2:0,n+=+!!e.name.toLowerCase().startsWith(i),r+=+!!t.name.toLowerCase().startsWith(i);let a=(r-n)*10,o=e.last_status_att.name?1:-1,c=e.screen_name>t.screen_name?1:-1;return a+s+c+o}).map(e=>({user:e,displayText:e.screen_name_ui,detailText:e.name,imageUrl:e.profile_image_url_original,replacement:`@`+e.screen_name+` `}))||[],n)}},te=e=>Object.keys(e).reduce((t,n)=>(t[(0,T.kebabCase)(n)]=e[n],t),{});export{F as a,L as i,Q as n,Z as r,te as t}; +//# sourceMappingURL=attributes_helper.service.Ku0p8pb2.js.map \ No newline at end of file diff --git a/priv/static/static/js/attributes_helper.service.Ku0p8pb2.js.map b/priv/static/static/js/attributes_helper.service.Ku0p8pb2.js.map new file mode 100644 index 000000000..f68865d91 --- /dev/null +++ b/priv/static/static/js/attributes_helper.service.Ku0p8pb2.js.map @@ -0,0 +1 @@ +{"version":3,"file":"attributes_helper.service.Ku0p8pb2.js","names":["library","Completion"],"sources":["../../../src/components/screen_reader_notice/screen_reader_notice.js?vue&type=script&src=true&lang.js","../../../src/components/screen_reader_notice/screen_reader_notice.vue","../../../src/services/completion/completion.js","../../../src/services/offset_finder/offset_finder.service.js","../../../src/services/random_seed/random_seed.service.js","../../../src/components/emoji_input/emoji_input.js?vue&type=script&src=true&lang.js","../../../src/components/emoji_input/emoji_input.vue","../../../src/components/emoji_input/suggestor.js","../../../src/services/attributes_helper/attributes_helper.service.js"],"sourcesContent":["const ScreenReaderNotice = {\n props: {\n ariaLive: {\n type: String,\n default: 'assertive',\n },\n },\n data() {\n return {\n currentText: '',\n }\n },\n methods: {\n announce(text) {\n this.currentText = text\n setTimeout(() => {\n this.currentText = ''\n }, 1000)\n },\n },\n}\n\nexport default ScreenReaderNotice\n","\n\n\n","import { find, reduce } from 'lodash'\n\nexport const replaceWord = (str, toReplace, replacement) => {\n return str.slice(0, toReplace.start) + replacement + str.slice(toReplace.end)\n}\n\nexport const wordAtPosition = (str, pos) => {\n const words = splitByWhitespaceBoundary(str)\n const wordsWithPosition = addPositionToWords(words)\n\n return find(wordsWithPosition, ({ start, end }) => start <= pos && end > pos)\n}\n\nexport const addPositionToWords = (words) => {\n return reduce(\n words,\n (result, word) => {\n const data = {\n word,\n start: 0,\n end: word.length,\n }\n\n if (result.length > 0) {\n const previous = result.pop()\n\n data.start += previous.end\n data.end += previous.end\n\n result.push(previous)\n }\n\n result.push(data)\n\n return result\n },\n [],\n )\n}\n\nexport const splitByWhitespaceBoundary = (str) => {\n const result = []\n let currentWord = ''\n for (let i = 0; i < str.length; i++) {\n const currentChar = str[i]\n // Starting a new word\n if (!currentWord) {\n currentWord = currentChar\n continue\n }\n // current character is whitespace while word isn't, or vice versa:\n // add our current word to results, start over the current word.\n if (!!currentChar.trim() !== !!currentWord.trim()) {\n result.push(currentWord)\n currentWord = currentChar\n continue\n }\n currentWord += currentChar\n }\n // Add the last word we were working on\n if (currentWord) {\n result.push(currentWord)\n }\n return result\n}\n\nconst completion = {\n wordAtPosition,\n addPositionToWords,\n splitByWhitespaceBoundary,\n replaceWord,\n}\n\nexport default completion\n","export const findOffset = (\n child,\n parent,\n { top = 0, left = 0 } = {},\n ignorePadding = true,\n) => {\n const result = {\n top: top + child.offsetTop,\n left: left + child.offsetLeft,\n }\n if (!ignorePadding && child !== window) {\n const { topPadding, leftPadding } = findPadding(child)\n result.top += ignorePadding ? 0 : topPadding\n result.left += ignorePadding ? 0 : leftPadding\n }\n\n if (\n child.offsetParent &&\n window.getComputedStyle(child.offsetParent).position !== 'sticky' &&\n (parent === window ||\n parent.contains(child.offsetParent) ||\n parent === child.offsetParent)\n ) {\n return findOffset(child.offsetParent, parent, result, false)\n } else {\n if (parent !== window) {\n const { topPadding, leftPadding } = findPadding(parent)\n result.top += topPadding\n result.left += leftPadding\n }\n return result\n }\n}\n\nconst findPadding = (el) => {\n const topPaddingStr = window.getComputedStyle(el)['padding-top']\n const topPadding = Number(\n topPaddingStr.substring(0, topPaddingStr.length - 2),\n )\n const leftPaddingStr = window.getComputedStyle(el)['padding-left']\n const leftPadding = Number(\n leftPaddingStr.substring(0, leftPaddingStr.length - 2),\n )\n\n return { topPadding, leftPadding }\n}\n","const genRandomSeed = () => `${Math.random()}`.replace('.', '-')\n\nexport default genRandomSeed\n","import { take } from 'lodash'\n\nimport Popover from 'src/components/popover/popover.vue'\nimport ScreenReaderNotice from 'src/components/screen_reader_notice/screen_reader_notice.vue'\nimport { ensureFinalFallback } from '../../i18n/languages.js'\nimport Completion from '../../services/completion/completion.js'\nimport { findOffset } from '../../services/offset_finder/offset_finder.service.js'\nimport genRandomSeed from '../../services/random_seed/random_seed.service.js'\nimport EmojiPicker from '../emoji_picker/emoji_picker.vue'\nimport UnicodeDomainIndicator from '../unicode_domain_indicator/unicode_domain_indicator.vue'\n\nimport { useMergedConfigStore } from 'src/stores/merged_config.js'\n\nimport { library } from '@fortawesome/fontawesome-svg-core'\nimport { faSmileBeam } from '@fortawesome/free-regular-svg-icons'\n\nlibrary.add(faSmileBeam)\n\n/**\n * EmojiInput - augmented inputs for emoji and autocomplete support in inputs\n * without having to give up the comfort of and