diff --git a/dist/gramm-ai/3rdpartylicenses.txt b/dist/gramm-ai/3rdpartylicenses.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0709b8be49e2276de49636ce278ee0cec4d84796
--- /dev/null
+++ b/dist/gramm-ai/3rdpartylicenses.txt
@@ -0,0 +1,517 @@
+
+--------------------------------------------------------------------------------
+Package: @angular/core
+License: "MIT"
+
+
+--------------------------------------------------------------------------------
+Package: rxjs
+License: "Apache-2.0"
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+--------------------------------------------------------------------------------
+Package: tslib
+License: "0BSD"
+
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+--------------------------------------------------------------------------------
+Package: @angular/common
+License: "MIT"
+
+
+--------------------------------------------------------------------------------
+Package: @angular/platform-browser
+License: "MIT"
+
+
+--------------------------------------------------------------------------------
+Package: @angular/forms
+License: "MIT"
+
+
+--------------------------------------------------------------------------------
+Package: @angular/router
+License: "MIT"
+
+
+--------------------------------------------------------------------------------
+Package: @angular/cdk
+License: "MIT"
+
+The MIT License
+
+Copyright (c) 2024 Google LLC.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+--------------------------------------------------------------------------------
+Package: @angular/material
+License: "MIT"
+
+The MIT License
+
+Copyright (c) 2024 Google LLC.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+--------------------------------------------------------------------------------
+Package: @angular/animations
+License: "MIT"
+
+
+--------------------------------------------------------------------------------
+Package: uuid
+License: "MIT"
+
+The MIT License (MIT)
+
+Copyright (c) 2010-2020 Robert Kieffer and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+--------------------------------------------------------------------------------
+Package: zone.js
+License: "MIT"
+
+The MIT License
+
+Copyright (c) 2010-2024 Google LLC. https://angular.io/license
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+--------------------------------------------------------------------------------
+Package: @fortawesome/fontawesome-free
+License: "(CC-BY-4.0 AND OFL-1.1 AND MIT)"
+
+Fonticons, Inc. (https://fontawesome.com)
+
+--------------------------------------------------------------------------------
+
+Font Awesome Free License
+
+Font Awesome Free is free, open source, and GPL friendly. You can use it for
+commercial projects, open source projects, or really almost whatever you want.
+Full Font Awesome Free license: https://fontawesome.com/license/free.
+
+--------------------------------------------------------------------------------
+
+# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
+
+The Font Awesome Free download is licensed under a Creative Commons
+Attribution 4.0 International License and applies to all icons packaged
+as SVG and JS file types.
+
+--------------------------------------------------------------------------------
+
+# Fonts: SIL OFL 1.1 License
+
+In the Font Awesome Free download, the SIL OFL license applies to all icons
+packaged as web and desktop font files.
+
+Copyright (c) 2024 Fonticons, Inc. (https://fontawesome.com)
+with Reserved Font Name: "Font Awesome".
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+SIL OPEN FONT LICENSE
+Version 1.1 - 26 February 2007
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting — in part or in whole — any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
+
+--------------------------------------------------------------------------------
+
+# Code: MIT License (https://opensource.org/licenses/MIT)
+
+In the Font Awesome Free download, the MIT license applies to all non-font and
+non-icon files.
+
+Copyright 2024 Fonticons, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in the
+Software without restriction, including without limitation the rights to use, copy,
+modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
+and to permit persons to whom the Software is furnished to do so, subject to the
+following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+--------------------------------------------------------------------------------
+
+# Attribution
+
+Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font
+Awesome Free files already contain embedded comments with sufficient
+attribution, so you shouldn't need to do anything additional when using these
+files normally.
+
+We've kept attribution comments terse, so we ask that you do not actively work
+to remove them from files, especially code. They're a great way for folks to
+learn about Font Awesome.
+
+--------------------------------------------------------------------------------
+
+# Brand Icons
+
+All brand icons are trademarks of their respective owners. The use of these
+trademarks does not indicate endorsement of the trademark holder by Font
+Awesome, nor vice versa. **Please do not use brand logos for any purpose except
+to represent the company, product, or service to which they refer.**
+
+--------------------------------------------------------------------------------
diff --git a/dist/gramm-ai/browser/assets/favicon.png b/dist/gramm-ai/browser/assets/favicon.png
new file mode 100644
index 0000000000000000000000000000000000000000..17d374e17b9161140969ccb89c9597eb6244aa99
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/favicon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2391d89651c3aed49cd5dc5f6cf851cf8fafebe4aa3197c878f48d72a310c117
+size 2489
diff --git a/dist/gramm-ai/browser/assets/font/Amonk_Outline.ttf b/dist/gramm-ai/browser/assets/font/Amonk_Outline.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..99bc3494b38bf7640dad65a2e01c3ed2b23b7a1a
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/font/Amonk_Outline.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5571a943a81cc61f13c85608828f4e831dc971999b14cc31d4888b6a5f1c98ba
+size 140868
diff --git a/dist/gramm-ai/browser/assets/font/AzoSans2_Bold.otf b/dist/gramm-ai/browser/assets/font/AzoSans2_Bold.otf
new file mode 100644
index 0000000000000000000000000000000000000000..922133b5f049b1a5d93a54fc2e37189272c882ec
Binary files /dev/null and b/dist/gramm-ai/browser/assets/font/AzoSans2_Bold.otf differ
diff --git a/dist/gramm-ai/browser/assets/font/Extra Beige.jpg b/dist/gramm-ai/browser/assets/font/Extra Beige.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d8cabbcfa7dd3471c81125944a297d2fd24b88fc
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/font/Extra Beige.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c6126485cf8051ce840be5e0dc54b22274cf578ba455e25cb6d0090a9196f86a
+size 259709
diff --git a/dist/gramm-ai/browser/assets/font/Extra Beige.otf b/dist/gramm-ai/browser/assets/font/Extra Beige.otf
new file mode 100644
index 0000000000000000000000000000000000000000..9c93e5520d6f757cf6788c9c2701f82abac3ae70
Binary files /dev/null and b/dist/gramm-ai/browser/assets/font/Extra Beige.otf differ
diff --git a/dist/gramm-ai/browser/assets/font/Extra Beige.ttf b/dist/gramm-ai/browser/assets/font/Extra Beige.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..4a80f84078029e8e15413d5edb3818146a646ec4
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/font/Extra Beige.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9115ed503458351b44bad6beff89db65ee3e11e7f09c2f59aef6fb9338192167
+size 30784
diff --git a/dist/gramm-ai/browser/assets/font/More Info.txt b/dist/gramm-ai/browser/assets/font/More Info.txt
new file mode 100644
index 0000000000000000000000000000000000000000..43fadac9649881b4382fcea86281d286638dfe21
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/font/More Info.txt
@@ -0,0 +1,20 @@
+If you want the full version and license for commercial use,
+you can purchase here :
+
+https://fontkong.com/product/amonk/
+
+File Font Version :
+
+1. Amonk.otf
+2. Amonk.ttf
+3. Amonk.woff
+4. Amonk Blood.otf
+5. Amonk Blood.ttf
+6. Amonk Blood.woff
+7. Amonk Outline.otf
+8. Amonk Outline.ttf
+9. Amonk Outline.woff
+10. Amonk Ice-SVG.otf
+11. Amonk Ice-SVG.ttf
+12. Amonk Ice-SVG.woff
+
diff --git a/dist/gramm-ai/browser/assets/font/Raleway.ttf b/dist/gramm-ai/browser/assets/font/Raleway.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..c931f3f964a404451633c81bb63c22778033ee54
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/font/Raleway.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d92beb04211a805e375a09623508986cb000846ae120c3c8b817480dc0f7e8f1
+size 98472
diff --git a/dist/gramm-ai/browser/assets/font/Raleway.woff2 b/dist/gramm-ai/browser/assets/font/Raleway.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..189015b9e6449d6294b9b8133ca0c2378e3411c5
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/font/Raleway.woff2
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:47d477915fa5912616e2dc5df8c5780f9202671678cf275472bd39f3381c0098
+size 48336
diff --git a/dist/gramm-ai/browser/assets/font/RetroSigned.ttf b/dist/gramm-ai/browser/assets/font/RetroSigned.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..1a68a31a2e08f8e37496401aa0229b60deaf310d
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/font/RetroSigned.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9a98bc74eb06b8c519d11125c601199d60594e51ba148c0c86c5511a4547f123
+size 726760
diff --git a/dist/gramm-ai/browser/assets/font/Super Cartoon.ttf b/dist/gramm-ai/browser/assets/font/Super Cartoon.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..eb802fdb4cd8980c8d0b9b05278c05e663e21e8b
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/font/Super Cartoon.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a7dfd44abf83aa6b91004efe681d5464093fe438d36ef1045741a514b8f53e71
+size 80436
diff --git a/dist/gramm-ai/browser/assets/font/TrueNorthTexturesW01-Rg.ttf b/dist/gramm-ai/browser/assets/font/TrueNorthTexturesW01-Rg.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..ca6e75650ca7e87a93e4a2ee97214652f049284c
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/font/TrueNorthTexturesW01-Rg.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a2a73849017a4d63dd8e6d43ef207c41250ebf641ec953ec5d0226cde42334c8
+size 671984
diff --git a/dist/gramm-ai/browser/assets/font/info.txt b/dist/gramm-ai/browser/assets/font/info.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6e6b3fe2cc777d6bcb066b3c9e94a8a2c537eb79
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/font/info.txt
@@ -0,0 +1,2 @@
+license: Freeware, Non-Commercial
+link: https://www.fontspace.com/retro-signed-font-f113376
\ No newline at end of file
diff --git a/dist/gramm-ai/browser/assets/font/retro-signed-font.zip b/dist/gramm-ai/browser/assets/font/retro-signed-font.zip
new file mode 100644
index 0000000000000000000000000000000000000000..039c97c99125a009c8275875d9d10c8665f647de
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/font/retro-signed-font.zip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ab5345df325959724c3c33bf6c5a249bb411481009b5ce05f7d08dd518454109
+size 199002
diff --git a/dist/gramm-ai/browser/assets/images/back.png b/dist/gramm-ai/browser/assets/images/back.png
new file mode 100644
index 0000000000000000000000000000000000000000..8c31da4c08984b08b8a475b32d473ce9f4b1fb65
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/back.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8749a225d6220db8f5f1c986aa293de98ee58e29eadc55ffbe6715775aa6c7be
+size 1369808
diff --git a/dist/gramm-ai/browser/assets/images/chat/breadcrumbs.png b/dist/gramm-ai/browser/assets/images/chat/breadcrumbs.png
new file mode 100644
index 0000000000000000000000000000000000000000..632acfe323e3ef176e5534fc2041126f1df655bc
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/breadcrumbs.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4a6f8d6f807010d905ec8d48c58d349da74fa1ab6208d26cd13de16a9b8e7956
+size 4739
diff --git a/dist/gramm-ai/browser/assets/images/chat/chatbg.png b/dist/gramm-ai/browser/assets/images/chat/chatbg.png
new file mode 100644
index 0000000000000000000000000000000000000000..6b24d90d14b89e40ac6033743e5d1b081bb8173d
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/chatbg.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9d0d8dcc2946d0203c57342145c90b74a5a7188a30a4d01c191784b2cfe73cff
+size 520542
diff --git a/dist/gramm-ai/browser/assets/images/chat/control.png b/dist/gramm-ai/browser/assets/images/chat/control.png
new file mode 100644
index 0000000000000000000000000000000000000000..40d032a345a53c986d1c2230244cad7de05230ea
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/control.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2d37166a1708f4d6e27babc1b9bc408c505e5b79e27a7a81ef0ef29f1680ac65
+size 5889
diff --git a/dist/gramm-ai/browser/assets/images/chat/copy-white.png b/dist/gramm-ai/browser/assets/images/chat/copy-white.png
new file mode 100644
index 0000000000000000000000000000000000000000..5a9115aa79f4bb7408e29a83a1bc3006804324e0
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/copy-white.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cbd673ef5209ac3475954a0d80ca3596880ce2b0057ae322b5a6b3f66f1ab41c
+size 6957
diff --git a/dist/gramm-ai/browser/assets/images/chat/copy.png b/dist/gramm-ai/browser/assets/images/chat/copy.png
new file mode 100644
index 0000000000000000000000000000000000000000..9318cbce815ed1562ce80f9352908d06e6436bb4
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/copy.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:77fe27a1e952d832e094cde1044070d694963b2540256fbbe2af036ceaa526b6
+size 6500
diff --git a/dist/gramm-ai/browser/assets/images/chat/cross.png b/dist/gramm-ai/browser/assets/images/chat/cross.png
new file mode 100644
index 0000000000000000000000000000000000000000..787bd2cc7ee633e52c8ec1e3d5ceaa902d3515de
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/cross.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:14fe82ba4882f3914c1c27f056184306e9d00b977e41cdc6787358323575d9af
+size 7863
diff --git a/dist/gramm-ai/browser/assets/images/chat/info.png b/dist/gramm-ai/browser/assets/images/chat/info.png
new file mode 100644
index 0000000000000000000000000000000000000000..d6a0f082cb60f62c149e5386ca24753f27245228
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/info.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:188eeae8bcbdd76f6b6228accd608bc675e22ba6d0dbb69d216f9462aa672603
+size 28799
diff --git a/dist/gramm-ai/browser/assets/images/chat/internet.png b/dist/gramm-ai/browser/assets/images/chat/internet.png
new file mode 100644
index 0000000000000000000000000000000000000000..a94629a929ac173cdc121d0da42b7c0f6045e845
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/internet.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2fc57c564528efd124c6655bae9ed601f27d6a09ce651e666ab9c697d77c1f4d
+size 35193
diff --git a/dist/gramm-ai/browser/assets/images/chat/lion.png b/dist/gramm-ai/browser/assets/images/chat/lion.png
new file mode 100644
index 0000000000000000000000000000000000000000..bda3a2bc53bac52bff9f155823be997ec538b04e
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/lion.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dd8aa4627ea6c6b89d20f5ccb87f0431f61ac71faef8ab71a2c17d7e19bffe58
+size 141854
diff --git a/dist/gramm-ai/browser/assets/images/chat/loading-spinner.gif b/dist/gramm-ai/browser/assets/images/chat/loading-spinner.gif
new file mode 100644
index 0000000000000000000000000000000000000000..dc84bbb1e8d937d0ead25b3146f19c512f5824b7
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/loading-spinner.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cdf995f1947cc28fd9d8f86d71d223b9b7e08657cff8b155917e3d31a435a28f
+size 19705
diff --git a/dist/gramm-ai/browser/assets/images/chat/mic.png b/dist/gramm-ai/browser/assets/images/chat/mic.png
new file mode 100644
index 0000000000000000000000000000000000000000..1e2d88b76f33fbab8b06d74b4862e20f6da9767f
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/mic.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9508a2126b6376388877e634f853716ddaa88ec3f5911ca3445a9163ad7ea2e3
+size 34421
diff --git a/dist/gramm-ai/browser/assets/images/chat/microphone-icon.png b/dist/gramm-ai/browser/assets/images/chat/microphone-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..aa5eb93e48c8b79a4453206d352ddbd8f85caf0b
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/microphone-icon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a38d8a8216a3c391fd1bdc983ec0e2bee95d9dc230e7e531262b5f0a95ebd161
+size 21779
diff --git a/dist/gramm-ai/browser/assets/images/chat/natasha.png b/dist/gramm-ai/browser/assets/images/chat/natasha.png
new file mode 100644
index 0000000000000000000000000000000000000000..ffea6a57188dab4680d3022c4ad4fc01bd1248e6
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/natasha.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f5a65b6e8ba0d5914b1d240d2b48018805f39ca7ce65010943fbae775c551c14
+size 1290646
diff --git a/dist/gramm-ai/browser/assets/images/chat/no-video-white.png b/dist/gramm-ai/browser/assets/images/chat/no-video-white.png
new file mode 100644
index 0000000000000000000000000000000000000000..e547d54add8e9736bc8e05a312456b747f662831
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/no-video-white.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aee3178627b652f1e34b01c34249efe1a156cdc5944f88a71e4ff13d6395185d
+size 7841
diff --git a/dist/gramm-ai/browser/assets/images/chat/no-video.png b/dist/gramm-ai/browser/assets/images/chat/no-video.png
new file mode 100644
index 0000000000000000000000000000000000000000..665d6fd32ff2663ab25f9190c05ff3f986722b62
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/no-video.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b6433c0dedb7dee13adf3e3cc08a87c4ba1d7cc0b9406a44c448bdf8dac90cac
+size 7603
diff --git a/dist/gramm-ai/browser/assets/images/chat/pause-icon.png b/dist/gramm-ai/browser/assets/images/chat/pause-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..c94897b4b8bb2be320e7a50e91977fb5cf3dfb94
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/pause-icon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c97de4a30ed36a3e9fe5185cdcf5ffaa02c00effbcaa2c1569432c21e10addfc
+size 4585
diff --git a/dist/gramm-ai/browser/assets/images/chat/rabbit.png b/dist/gramm-ai/browser/assets/images/chat/rabbit.png
new file mode 100644
index 0000000000000000000000000000000000000000..8030dde5cf39fed5e143f98f0fd96a5003fefa07
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/rabbit.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c2f6c2a5907c2fc15e8b807b793d1e6222d2b305c4d7b754933cb923de827da7
+size 188584
diff --git a/dist/gramm-ai/browser/assets/images/chat/resume-icon.png b/dist/gramm-ai/browser/assets/images/chat/resume-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..f9214b2c804abe51dfcd4c4a9bf0bba388ecc36b
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/resume-icon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9d4edfeac774bb9881fd1c02b145465d240a04666ec2fd282a3cee4c889dd730
+size 6372
diff --git a/dist/gramm-ai/browser/assets/images/chat/send-icon.png b/dist/gramm-ai/browser/assets/images/chat/send-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..21c97b19a7c0d5f44e561231e916d14fd189b2e0
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/send-icon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ae307ee408cf741b95f48c3527472fdabab691d932d00da8f7e4f736a4573527
+size 10572
diff --git a/dist/gramm-ai/browser/assets/images/chat/speaker (6).png b/dist/gramm-ai/browser/assets/images/chat/speaker (6).png
new file mode 100644
index 0000000000000000000000000000000000000000..2ec8ba06b1535f2d7f8738228f993080b5072ea6
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/speaker (6).png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1186f27f0381f972bdcd57bfd0c308ebddbaf19dc8540fb6d05a218de61b0242
+size 16094
diff --git a/dist/gramm-ai/browser/assets/images/chat/speaker-white.png b/dist/gramm-ai/browser/assets/images/chat/speaker-white.png
new file mode 100644
index 0000000000000000000000000000000000000000..1022bd71e76b1eb2a70a9d3ae8c45f45561593da
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/speaker-white.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4dfd106d9da5f207e09d6027e1f775984e855803da5979913780b3dd6a439ff0
+size 12424
diff --git a/dist/gramm-ai/browser/assets/images/chat/speaker.png b/dist/gramm-ai/browser/assets/images/chat/speaker.png
new file mode 100644
index 0000000000000000000000000000000000000000..39858352c3b16e10452ac901bcd2c73da697ddc7
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/speaker.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7f92d1a3c1230c6c69cf94c5016d9bd9a4e244eaf351135a3d36abfa39a24cf0
+size 13518
diff --git a/dist/gramm-ai/browser/assets/images/chat/stop-button-white.png b/dist/gramm-ai/browser/assets/images/chat/stop-button-white.png
new file mode 100644
index 0000000000000000000000000000000000000000..d5c87251efbb894b50c8db8684f696507dbaf8e0
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/stop-button-white.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f3d5fd071211a1a44208c9f66bf1c956a61ecb12241e5cf0c3d5828d8e1b6831
+size 4184
diff --git a/dist/gramm-ai/browser/assets/images/chat/stop-button.png b/dist/gramm-ai/browser/assets/images/chat/stop-button.png
new file mode 100644
index 0000000000000000000000000000000000000000..9bd86bc90cfee75fb316b33061d81769495b0dd2
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/stop-button.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a01d5cf4aa76de7da282c98decad20b19a4fe37076ec9f195e850966cdae8389
+size 4083
diff --git a/dist/gramm-ai/browser/assets/images/chat/stop.png b/dist/gramm-ai/browser/assets/images/chat/stop.png
new file mode 100644
index 0000000000000000000000000000000000000000..fd0bc552dea11c212c42166fcedf9c51b06f3886
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/stop.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5c10275efe01a0421881c8a70652110158155578243833c1434472f6cbad805f
+size 31720
diff --git a/dist/gramm-ai/browser/assets/images/chat/syllabus.png b/dist/gramm-ai/browser/assets/images/chat/syllabus.png
new file mode 100644
index 0000000000000000000000000000000000000000..52499b540ba1508a9a0d31ab636e33286fa4f643
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/syllabus.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:63054ff3a070dfa6b6d390f53b2e981cec690ebc400058cb630ccacf20862ddb
+size 22991
diff --git a/dist/gramm-ai/browser/assets/images/chat/teacher.png b/dist/gramm-ai/browser/assets/images/chat/teacher.png
new file mode 100644
index 0000000000000000000000000000000000000000..188a246ad10211fa35e33ac8e3f9c87cb84e7795
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/teacher.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:15980253b89516a136cfee9a11e368dd80d1af34b8001818e87a5a129eef1a04
+size 124392
diff --git a/dist/gramm-ai/browser/assets/images/chat/unmute.png b/dist/gramm-ai/browser/assets/images/chat/unmute.png
new file mode 100644
index 0000000000000000000000000000000000000000..d6da38d1e6491ccf46748d0be64acce989986f57
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/unmute.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c3e506a2dc11e498c62054898fde99ce0f2258a313ec86b874c0154796579e70
+size 11474
diff --git a/dist/gramm-ai/browser/assets/images/chat/video-white.png b/dist/gramm-ai/browser/assets/images/chat/video-white.png
new file mode 100644
index 0000000000000000000000000000000000000000..bffc4fb5ea1c7f31bc711e86f96b753219d3883e
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/video-white.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:12c544b4d9b0dd4216af7cea6c8b7773e8438a911f44f3018e48c26957a903b5
+size 8040
diff --git a/dist/gramm-ai/browser/assets/images/chat/video.png b/dist/gramm-ai/browser/assets/images/chat/video.png
new file mode 100644
index 0000000000000000000000000000000000000000..fc625eec23111aedec045e83c2c709ab600d2bcd
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/video.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fd2bc1a030a6085a75c857576813677021afe5dee9cdb29cb3c65698b47ed188
+size 8830
diff --git a/dist/gramm-ai/browser/assets/images/chat/volume-mute.png b/dist/gramm-ai/browser/assets/images/chat/volume-mute.png
new file mode 100644
index 0000000000000000000000000000000000000000..812883323f81fa401fda74adcf16645b2cd27cd7
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/volume-mute.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:25dbbdfa78820b253560df982379956c330ff93386202d8e8c962ea0e3b35725
+size 7963
diff --git a/dist/gramm-ai/browser/assets/images/chat/volume.png b/dist/gramm-ai/browser/assets/images/chat/volume.png
new file mode 100644
index 0000000000000000000000000000000000000000..fb80bc102d037b4365a2409e7f70cdc5c8416817
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/volume.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:369febb58fa91bc0fdc55504181c6cca3107401216baf73f4a0db53c63ad2c88
+size 11470
diff --git a/dist/gramm-ai/browser/assets/images/chat/y.png b/dist/gramm-ai/browser/assets/images/chat/y.png
new file mode 100644
index 0000000000000000000000000000000000000000..c0dda5965f416e7050c3c927013d2e9e7db2ceb1
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/chat/y.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9f6300a89d2f783f878f877256590ab5f51ed2f7c55d07ff324e7813e4e05006
+size 1962
diff --git a/dist/gramm-ai/browser/assets/images/find_word/1.png b/dist/gramm-ai/browser/assets/images/find_word/1.png
new file mode 100644
index 0000000000000000000000000000000000000000..80565e37308a5e02f2393091ccf878fa299026c3
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/find_word/1.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e728fde29bec82a9c9969bfff37d7e1abae37ceb4178d8e1b0f8bd11901f43c4
+size 2993022
diff --git a/dist/gramm-ai/browser/assets/images/find_word/2.png b/dist/gramm-ai/browser/assets/images/find_word/2.png
new file mode 100644
index 0000000000000000000000000000000000000000..2089baabd49bcdd3111e6ec98fc602873ed748ad
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/find_word/2.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2928906fd2bde793f7106ac8f984ff64ee737b3edd5f36f043a8d411c3896473
+size 1829918
diff --git a/dist/gramm-ai/browser/assets/images/find_word/3.png b/dist/gramm-ai/browser/assets/images/find_word/3.png
new file mode 100644
index 0000000000000000000000000000000000000000..66d6ebb2f9b4c507fb78a68a7f9a605c07f7437d
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/find_word/3.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9b9338d21cf8a97f03e571e8234806a7b19dcd84f1cf650e9b194c42bed0d271
+size 2466898
diff --git a/dist/gramm-ai/browser/assets/images/find_word/4.png b/dist/gramm-ai/browser/assets/images/find_word/4.png
new file mode 100644
index 0000000000000000000000000000000000000000..00458f61a33fc09549be25955c57f004ba5ba80a
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/find_word/4.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:86c9b75cf2642651d7daedcccb53e88aa69338570c717d0db0ea438770a0d80b
+size 2943325
diff --git a/dist/gramm-ai/browser/assets/images/find_word/6.png b/dist/gramm-ai/browser/assets/images/find_word/6.png
new file mode 100644
index 0000000000000000000000000000000000000000..1637af8cddceebdd1df93edb95d4e0f2fb0a8eee
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/find_word/6.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d7a870c46a4fa58a67ce7cb990b49a1b8642798c6e1d2d7f7084afc216fa8f5a
+size 1545686
diff --git a/dist/gramm-ai/browser/assets/images/find_word/ChatGPT Image May 22, 2025, 11_57_21 AM.png b/dist/gramm-ai/browser/assets/images/find_word/ChatGPT Image May 22, 2025, 11_57_21 AM.png
new file mode 100644
index 0000000000000000000000000000000000000000..9d6569f8777b2087acc8d7f9d0cb6f2f0977795d
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/find_word/ChatGPT Image May 22, 2025, 11_57_21 AM.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a592d94a4fad031c912413bcc860b14a8e224b337dd90f931d635b1a4b4c1097
+size 1759975
diff --git a/dist/gramm-ai/browser/assets/images/find_word/audio.png b/dist/gramm-ai/browser/assets/images/find_word/audio.png
new file mode 100644
index 0000000000000000000000000000000000000000..348b6d0a7652e505df7125ab7fe365109c66dbbe
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/find_word/audio.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:018efe018714be2511b6d3d809e2c7e8fdcf6707edc40154469aa6ae2cda9507
+size 167567
diff --git a/dist/gramm-ai/browser/assets/images/find_word/audio_no_bg.png b/dist/gramm-ai/browser/assets/images/find_word/audio_no_bg.png
new file mode 100644
index 0000000000000000000000000000000000000000..b62ee0351ada6a5d4485caea2aaae3950999a27d
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/find_word/audio_no_bg.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:76b488fba19f7f37f203841a3fcf285325d4576b20f39a014553f409500b1b9e
+size 2650092
diff --git a/dist/gramm-ai/browser/assets/images/find_word/back-arrow.png b/dist/gramm-ai/browser/assets/images/find_word/back-arrow.png
new file mode 100644
index 0000000000000000000000000000000000000000..1f301cfe84e291c4be0414835fa2645871ba877f
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/find_word/back-arrow.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3bf85ceebd0a2d7b12f9a63159186aabf850380949ed7d57c8c53e3c3e759e18
+size 418
diff --git a/dist/gramm-ai/browser/assets/images/find_word/back.png b/dist/gramm-ai/browser/assets/images/find_word/back.png
new file mode 100644
index 0000000000000000000000000000000000000000..8c31da4c08984b08b8a475b32d473ce9f4b1fb65
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/find_word/back.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8749a225d6220db8f5f1c986aa293de98ee58e29eadc55ffbe6715775aa6c7be
+size 1369808
diff --git a/dist/gramm-ai/browser/assets/images/find_word/find_word.png b/dist/gramm-ai/browser/assets/images/find_word/find_word.png
new file mode 100644
index 0000000000000000000000000000000000000000..f2f1cfed163b5186ef8676e9303eca6dfd51b488
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/find_word/find_word.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f25de4a84b0b453113f1d8b3adc9cd20f82a81f99aaff9c150af4bdef3b518a4
+size 60898
diff --git a/dist/gramm-ai/browser/assets/images/find_word/listen.png b/dist/gramm-ai/browser/assets/images/find_word/listen.png
new file mode 100644
index 0000000000000000000000000000000000000000..552f3ca423e2fa8e2c0152005eed2f889ad92962
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/find_word/listen.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fc0e66b5b931c104d9f70373348d77a741877c37751ac2b013701caffaac9d63
+size 1988158
diff --git a/dist/gramm-ai/browser/assets/images/google-logo.svg b/dist/gramm-ai/browser/assets/images/google-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d6d0d9f66d798092961fd60d069688092d63ad82
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/google-logo.svg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:92965efec0c4d979aa06400f5789b3b769ff51494a071df0cec68ee4d68da5cf
+size 784
diff --git a/dist/gramm-ai/browser/assets/images/grammar-bg.png b/dist/gramm-ai/browser/assets/images/grammar-bg.png
new file mode 100644
index 0000000000000000000000000000000000000000..341ccc3acbdb1c667323088c0262b64ea2a9fb80
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/grammar-bg.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ebf0a0f8ac6bec6e03b9814cdfc360f27a591c46753b62587474f06767526cb8
+size 665154
diff --git a/dist/gramm-ai/browser/assets/images/home.png b/dist/gramm-ai/browser/assets/images/home.png
new file mode 100644
index 0000000000000000000000000000000000000000..be1538142c4fa5c8efc89877f88bf4c868264f33
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/home.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aeee1e9a7ff006a98e8a27045b6dbf92f58265ec7d7b60aa005b112d61507b5f
+size 1215
diff --git a/dist/gramm-ai/browser/assets/images/home/Grammar_chat.png b/dist/gramm-ai/browser/assets/images/home/Grammar_chat.png
new file mode 100644
index 0000000000000000000000000000000000000000..75b5377870019f7f40a259027fe4a89954b2b84f
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/home/Grammar_chat.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d96eb91f30a33917767f54a4d87a2935959053aba0f3e7bc385d8849aac2ff41
+size 125036
diff --git a/dist/gramm-ai/browser/assets/images/home/Listening.png b/dist/gramm-ai/browser/assets/images/home/Listening.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b274ba5cef6081f15cbd85e4375288cb2bb4687
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/home/Listening.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e185e88afedd89c410aea903b4df2752f28db0191095decd53c27c533fd502f5
+size 479376
diff --git a/dist/gramm-ai/browser/assets/images/home/Reading.png b/dist/gramm-ai/browser/assets/images/home/Reading.png
new file mode 100644
index 0000000000000000000000000000000000000000..e31eaf533b21b96c3f15e132efdadb64ba317fa4
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/home/Reading.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bc1d39e8a7b01de3dfc9f9a1e68f0ca06455b5ed948bc3daeb5b74bca1846b55
+size 690521
diff --git a/dist/gramm-ai/browser/assets/images/home/background.png b/dist/gramm-ai/browser/assets/images/home/background.png
new file mode 100644
index 0000000000000000000000000000000000000000..2722be642fdc9ba65e59e1c303189fa728639cf7
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/home/background.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5cc7e74b375c0a9becd5f0e7fdbfcfac815e2aeb5214986dd3b6496e88feaf29
+size 1001439
diff --git a/dist/gramm-ai/browser/assets/images/home/chat.png b/dist/gramm-ai/browser/assets/images/home/chat.png
new file mode 100644
index 0000000000000000000000000000000000000000..1f9bc00d981b0f08b11e0dc1c235404f8ca09d30
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/home/chat.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c86336a33afad67cae4a2d6f135e05cfeebbbcb7e778559b3f031706f6cab5c8
+size 127018
diff --git a/dist/gramm-ai/browser/assets/images/home/find_word.png b/dist/gramm-ai/browser/assets/images/home/find_word.png
new file mode 100644
index 0000000000000000000000000000000000000000..f2f1cfed163b5186ef8676e9303eca6dfd51b488
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/home/find_word.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f25de4a84b0b453113f1d8b3adc9cd20f82a81f99aaff9c150af4bdef3b518a4
+size 60898
diff --git a/dist/gramm-ai/browser/assets/images/home/linkedin-icon.png b/dist/gramm-ai/browser/assets/images/home/linkedin-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..65a17901d84b043f029ac42da0cc86e05994afe8
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/home/linkedin-icon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7dcbc6147b5ba1f1da63566505a0bee3a7c044fc9c9ab8935f8298eb6b231340
+size 11481
diff --git a/dist/gramm-ai/browser/assets/images/home/quiz.png b/dist/gramm-ai/browser/assets/images/home/quiz.png
new file mode 100644
index 0000000000000000000000000000000000000000..78cdfa7d0060f3f8156f67aff7946b003c04fce0
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/home/quiz.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a33d8f9c687fb7ffb3f78b9dacf6cfbcaab5713474070d6a6f09ade55b637cbb
+size 80955
diff --git a/dist/gramm-ai/browser/assets/images/home/vocabulary.png b/dist/gramm-ai/browser/assets/images/home/vocabulary.png
new file mode 100644
index 0000000000000000000000000000000000000000..a5ffc10f55febb839f36f763db5585131a44a534
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/home/vocabulary.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6d10fdad3807d15949fbe88676ad581242373f9e72c40d45122be18ce27edbfe
+size 93328
diff --git a/dist/gramm-ai/browser/assets/images/home/voice.png b/dist/gramm-ai/browser/assets/images/home/voice.png
new file mode 100644
index 0000000000000000000000000000000000000000..64a87fbec99ddb7e95f7aab0d14b89b96ee9909e
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/home/voice.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b3fdd30f776503a2f218ea129c28d6de61600e6cc8b3e2d82aeefe1610483ed7
+size 59994
diff --git a/dist/gramm-ai/browser/assets/images/home/writting.png b/dist/gramm-ai/browser/assets/images/home/writting.png
new file mode 100644
index 0000000000000000000000000000000000000000..adc2ce412909361771871b62bf4e97729a40ba12
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/home/writting.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ddfe8c7e9afb8a730cc4925f17b8a924d68733da74a7d7057e86853eab50afd5
+size 1608258
diff --git a/dist/gramm-ai/browser/assets/images/home/youtube-icon.png b/dist/gramm-ai/browser/assets/images/home/youtube-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..1d1098e5fdb891652d2e5d77830a19e3b1a340b2
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/home/youtube-icon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:487d295d1b180682f13e25fdbd18c659f76abdda651afc1363fc701400eb7910
+size 16602
diff --git a/dist/gramm-ai/browser/assets/images/listen.png b/dist/gramm-ai/browser/assets/images/listen.png
new file mode 100644
index 0000000000000000000000000000000000000000..29c23841f7cca5dc65ce652c589728ca130c23b0
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:37e9b673090823e9efdbd4d6c4074d6d689acfd12ad02e1bc7937728ddc890e0
+size 813782
diff --git a/dist/gramm-ai/browser/assets/images/listen/1.png b/dist/gramm-ai/browser/assets/images/listen/1.png
new file mode 100644
index 0000000000000000000000000000000000000000..ea91733654594d2b0d7ec36d1ba552928ea0a196
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/1.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e22ab8915b94cf373395b789f6622c42c38ee560d2ecaf4271cb143248ecb9fa
+size 2022880
diff --git a/dist/gramm-ai/browser/assets/images/listen/2.png b/dist/gramm-ai/browser/assets/images/listen/2.png
new file mode 100644
index 0000000000000000000000000000000000000000..c994196dd75c292ed12b10e7fc5cc5d0cb8b098e
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/2.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f7285601a8ff3800ee9720ae60dbfa3125e071debd480ee5ab7162747b4b8877
+size 2599368
diff --git a/dist/gramm-ai/browser/assets/images/listen/3.png b/dist/gramm-ai/browser/assets/images/listen/3.png
new file mode 100644
index 0000000000000000000000000000000000000000..8a6af0d8e6180387b9be9949cf051f7509bb580c
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/3.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1913d5c6fdbc09c59b1d69281ccf774930d1f62576765c44eb1dd5959e54ebbd
+size 2691282
diff --git a/dist/gramm-ai/browser/assets/images/listen/3girl.png b/dist/gramm-ai/browser/assets/images/listen/3girl.png
new file mode 100644
index 0000000000000000000000000000000000000000..cf0789138e23d3027e53476bda7390886f5a605f
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/3girl.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8ab553af72d37463a905d40a894d213ba77894b5e17bb8b9c3acce0ee0ad4219
+size 3263348
diff --git a/dist/gramm-ai/browser/assets/images/listen/Excited.png b/dist/gramm-ai/browser/assets/images/listen/Excited.png
new file mode 100644
index 0000000000000000000000000000000000000000..1bd9d1ca46fc10b3d0f0926a9dd7e7e6f7671fa0
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/Excited.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f97bbb28d9bc31dc6fc18c7600b81a5eeae88ba8869721b89c249f8b744a5e92
+size 2660787
diff --git a/dist/gramm-ai/browser/assets/images/listen/a.png b/dist/gramm-ai/browser/assets/images/listen/a.png
new file mode 100644
index 0000000000000000000000000000000000000000..c5a2a0868acbb350d880795cc54b7c9842fd7f21
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/a.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:525d6174374c4ab0f820dfe72ba8cbc66538f10e91e56da79210fa8c13be623a
+size 2371422
diff --git a/dist/gramm-ai/browser/assets/images/listen/a1.png b/dist/gramm-ai/browser/assets/images/listen/a1.png
new file mode 100644
index 0000000000000000000000000000000000000000..d839ac515d2b2eefba3befbeaf16d61e41bcde87
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/a1.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8c60232f8847eb817f59ee867a924fa911c3caff34b394cd0e257d160ea9a2ba
+size 2187249
diff --git a/dist/gramm-ai/browser/assets/images/listen/back-arrow.png b/dist/gramm-ai/browser/assets/images/listen/back-arrow.png
new file mode 100644
index 0000000000000000000000000000000000000000..1f301cfe84e291c4be0414835fa2645871ba877f
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/back-arrow.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3bf85ceebd0a2d7b12f9a63159186aabf850380949ed7d57c8c53e3c3e759e18
+size 418
diff --git a/dist/gramm-ai/browser/assets/images/listen/confeti.png b/dist/gramm-ai/browser/assets/images/listen/confeti.png
new file mode 100644
index 0000000000000000000000000000000000000000..b3f86b62caa4dcf635dae9a61779dc33b9b09526
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/confeti.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7ec0a297ac3e87d82f0c51b01f22e0e2bd33422b85b776baf471177ede675bf7
+size 3142104
diff --git a/dist/gramm-ai/browser/assets/images/listen/confetti.png b/dist/gramm-ai/browser/assets/images/listen/confetti.png
new file mode 100644
index 0000000000000000000000000000000000000000..6d46d0ff7937f6b2b45d28d69e80376fe1b3ea33
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/confetti.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7da7a9e523a7abb09a409f174013daff44a501050e571f03effe719cd2a2e88e
+size 313562
diff --git a/dist/gramm-ai/browser/assets/images/listen/default.png b/dist/gramm-ai/browser/assets/images/listen/default.png
new file mode 100644
index 0000000000000000000000000000000000000000..eb08723a89b6f5516faa152ebe0e7e4680b98211
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/default.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:06a00d98cf193b34a28a33dba0deaea397c45074be849b71c78b6c2314bf26ac
+size 1890301
diff --git a/dist/gramm-ai/browser/assets/images/listen/group.png b/dist/gramm-ai/browser/assets/images/listen/group.png
new file mode 100644
index 0000000000000000000000000000000000000000..c805be07dd9e4e878e0f2033b63c19db0c3c66ea
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/group.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:323413509f2c904497875ef21f4b02f909e7e3a3e9df66ed790f9480c69a5e51
+size 2951047
diff --git a/dist/gramm-ai/browser/assets/images/listen/happy.png b/dist/gramm-ai/browser/assets/images/listen/happy.png
new file mode 100644
index 0000000000000000000000000000000000000000..9a55f8b324d4494f32daae225729cb03e3bdeae8
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/happy.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9318d1a9967d3f41d1a46081f16ce31acf61bc195b49b9cbb411a0faff6fe421
+size 2679982
diff --git a/dist/gramm-ai/browser/assets/images/listen/j.png b/dist/gramm-ai/browser/assets/images/listen/j.png
new file mode 100644
index 0000000000000000000000000000000000000000..f9df909c05907b7607b93416ec726b299b449cb6
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/j.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f1f2e52e871c52e5bbaadc87ffb95e872d668258c42c019cda733b75b720d7c6
+size 2904069
diff --git a/dist/gramm-ai/browser/assets/images/listen/lamp.png b/dist/gramm-ai/browser/assets/images/listen/lamp.png
new file mode 100644
index 0000000000000000000000000000000000000000..1f1dd83450f484de290d59886539b16e89f5a934
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/lamp.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c3cbc34f5bea1acdbb77198466bdaaf5687e5785ecc02c33cf505c3ac7b51283
+size 2382536
diff --git a/dist/gramm-ai/browser/assets/images/listen/listen.png b/dist/gramm-ai/browser/assets/images/listen/listen.png
new file mode 100644
index 0000000000000000000000000000000000000000..552f3ca423e2fa8e2c0152005eed2f889ad92962
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/listen.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fc0e66b5b931c104d9f70373348d77a741877c37751ac2b013701caffaac9d63
+size 1988158
diff --git a/dist/gramm-ai/browser/assets/images/listen/listen1.png b/dist/gramm-ai/browser/assets/images/listen/listen1.png
new file mode 100644
index 0000000000000000000000000000000000000000..55317c50b42bca10aacbaa079041342aa77b1878
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/listen1.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7563ab7b5ce2e4596e3ef7e969e3635f3e76f249ab087f070bc54dd5357bea6f
+size 2538293
diff --git a/dist/gramm-ai/browser/assets/images/listen/listen2.png b/dist/gramm-ai/browser/assets/images/listen/listen2.png
new file mode 100644
index 0000000000000000000000000000000000000000..a364d71be2b6fcc4bd72076d2285c36490fa3c0c
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/listen2.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c4422d509555bafe424e89a6b38acbf147b5620fd13955ab3e130dc82e2fc0f9
+size 1751903
diff --git a/dist/gramm-ai/browser/assets/images/listen/listen3.png b/dist/gramm-ai/browser/assets/images/listen/listen3.png
new file mode 100644
index 0000000000000000000000000000000000000000..d91fed60704ad45064299c10dc391d9c0a2d23de
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/listen3.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:62c1810d4bb552686aa3035eb21104df346b2f714e33281a39b953bdf98d6100
+size 2572443
diff --git a/dist/gramm-ai/browser/assets/images/listen/s.png b/dist/gramm-ai/browser/assets/images/listen/s.png
new file mode 100644
index 0000000000000000000000000000000000000000..83c12d77f71f4bd75021ebba044f1664bf21cc6f
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/s.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:377335e96c5b0ee1c0dea3853f68ef38d732896c05e83de39723fbd5c48ce596
+size 3197970
diff --git a/dist/gramm-ai/browser/assets/images/listen/sad.png b/dist/gramm-ai/browser/assets/images/listen/sad.png
new file mode 100644
index 0000000000000000000000000000000000000000..7f09e864c1bbe32609310c92d5537473721578aa
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/sad.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0283e601dbce9b53efb8e021ace66a53e8407a01914143ad7821eb157a2c2ba3
+size 2758561
diff --git a/dist/gramm-ai/browser/assets/images/listen/surprised.png b/dist/gramm-ai/browser/assets/images/listen/surprised.png
new file mode 100644
index 0000000000000000000000000000000000000000..cfda5bde886e2192d7c29e523d213d0eece59117
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/surprised.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:57f7e1cd4ef6811262e0ebf83f48dbe56af34fc152776779be4cf7008854980c
+size 3048253
diff --git a/dist/gramm-ai/browser/assets/images/listen/thinking.png b/dist/gramm-ai/browser/assets/images/listen/thinking.png
new file mode 100644
index 0000000000000000000000000000000000000000..9a091ef38fdd6b75fb0f395cc1309bd87b1f2726
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/thinking.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:11202f54fd746aee6eeeae5f49d72c431a6d2cf0d8d975dd1f387ccd68883d53
+size 2777143
diff --git a/dist/gramm-ai/browser/assets/images/listen/thinkingwith book.png b/dist/gramm-ai/browser/assets/images/listen/thinkingwith book.png
new file mode 100644
index 0000000000000000000000000000000000000000..b65ac615496d796a3b76628124ae6f86516f2f3c
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/thinkingwith book.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2bdf5c4b3e47475a83f532fec895db340b93f8ddcd8772cbeb4043a9eff6af81
+size 489
diff --git a/dist/gramm-ai/browser/assets/images/listen/winning .png b/dist/gramm-ai/browser/assets/images/listen/winning .png
new file mode 100644
index 0000000000000000000000000000000000000000..ad4b3cc046953bf68ec16b9c3d46d501aa4a7da7
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/listen/winning .png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:00948b27032ea9ad20363f7fa42f512222363847091dabddd45972ccd8bf8463
+size 489
diff --git a/dist/gramm-ai/browser/assets/images/login/linkedin-icon.png b/dist/gramm-ai/browser/assets/images/login/linkedin-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..65a17901d84b043f029ac42da0cc86e05994afe8
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/login/linkedin-icon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7dcbc6147b5ba1f1da63566505a0bee3a7c044fc9c9ab8935f8298eb6b231340
+size 11481
diff --git a/dist/gramm-ai/browser/assets/images/login/lion.png b/dist/gramm-ai/browser/assets/images/login/lion.png
new file mode 100644
index 0000000000000000000000000000000000000000..138e989fe567199c052affb05eaef7e0a9f1a52c
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/login/lion.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b10cc8bd4e0c9e68158575d2ade0186474235a359c85cf5c8033efd1fbdd9431
+size 335878
diff --git a/dist/gramm-ai/browser/assets/images/login/youtube-icon.png b/dist/gramm-ai/browser/assets/images/login/youtube-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..1d1098e5fdb891652d2e5d77830a19e3b1a340b2
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/login/youtube-icon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:487d295d1b180682f13e25fdbd18c659f76abdda651afc1363fc701400eb7910
+size 16602
diff --git a/dist/gramm-ai/browser/assets/images/majema-logo.png b/dist/gramm-ai/browser/assets/images/majema-logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..d73281e5cbeb29c50a24709f54374e4094441548
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/majema-logo.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:35f2d665d28978a0c24b69454abd7b6dcc633566812df227c70a2242417c5750
+size 1480919
diff --git a/dist/gramm-ai/browser/assets/images/pykara-logo.png b/dist/gramm-ai/browser/assets/images/pykara-logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..d69712677ca0333c5e0a5899bb74e23f943349df
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/pykara-logo.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0c34280718b6c881c750fcd05cd59bdf86d8797df991b3fff0f1d8dd02f24382
+size 30704
diff --git a/dist/gramm-ai/browser/assets/images/reading/back.png b/dist/gramm-ai/browser/assets/images/reading/back.png
new file mode 100644
index 0000000000000000000000000000000000000000..8c31da4c08984b08b8a475b32d473ce9f4b1fb65
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/reading/back.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8749a225d6220db8f5f1c986aa293de98ee58e29eadc55ffbe6715775aa6c7be
+size 1369808
diff --git a/dist/gramm-ai/browser/assets/images/reading/teacher.png b/dist/gramm-ai/browser/assets/images/reading/teacher.png
new file mode 100644
index 0000000000000000000000000000000000000000..4fba36d6203041dddeb7dd0d004fdff7924a7903
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/reading/teacher.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b8b29c808bb73f02a4761764b18a1d6375f96e261826c6dce32c9c4330f9f063
+size 332605
diff --git a/dist/gramm-ai/browser/assets/images/vocabulary/1.png b/dist/gramm-ai/browser/assets/images/vocabulary/1.png
new file mode 100644
index 0000000000000000000000000000000000000000..47e9e75323a96a24c58ca5558afa2d4624c45480
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/vocabulary/1.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:45a91aa3fa7140098dc432a0d9b74f5aab53cb5930f78d25c7e83d604018e0c4
+size 2669105
diff --git a/dist/gramm-ai/browser/assets/images/vocabulary/2.png b/dist/gramm-ai/browser/assets/images/vocabulary/2.png
new file mode 100644
index 0000000000000000000000000000000000000000..2089baabd49bcdd3111e6ec98fc602873ed748ad
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/vocabulary/2.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2928906fd2bde793f7106ac8f984ff64ee737b3edd5f36f043a8d411c3896473
+size 1829918
diff --git a/dist/gramm-ai/browser/assets/images/vocabulary/3.png b/dist/gramm-ai/browser/assets/images/vocabulary/3.png
new file mode 100644
index 0000000000000000000000000000000000000000..604bd06bdad0310c423a7de7871b953a713af8cd
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/vocabulary/3.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:19973fd120a36e2f33386daf12ef171dd2e1533f82d095bc3fd3a1becaae552d
+size 1846354
diff --git a/dist/gramm-ai/browser/assets/images/vocabulary/4.png b/dist/gramm-ai/browser/assets/images/vocabulary/4.png
new file mode 100644
index 0000000000000000000000000000000000000000..4d5b8aa932bed38d26319faa082acf7e399273bf
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/vocabulary/4.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2fe1591678783390fe14c28a1280bd02d663701f2e54cc8ba420417343e6681e
+size 2680769
diff --git a/dist/gramm-ai/browser/assets/images/vocabulary/5.png b/dist/gramm-ai/browser/assets/images/vocabulary/5.png
new file mode 100644
index 0000000000000000000000000000000000000000..ddff48b11b7adef113d0206148ac7b5342007145
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/vocabulary/5.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:160e17f51466cbb76af737852d3e3fbd4ed5b66495012397f8291c81f14a2c9d
+size 1926984
diff --git a/dist/gramm-ai/browser/assets/images/vocabulary/6.png b/dist/gramm-ai/browser/assets/images/vocabulary/6.png
new file mode 100644
index 0000000000000000000000000000000000000000..1637af8cddceebdd1df93edb95d4e0f2fb0a8eee
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/vocabulary/6.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d7a870c46a4fa58a67ce7cb990b49a1b8642798c6e1d2d7f7084afc216fa8f5a
+size 1545686
diff --git a/dist/gramm-ai/browser/assets/images/vocabulary/ChatGPT Image May 21, 2025, 10_51_08 AM.png b/dist/gramm-ai/browser/assets/images/vocabulary/ChatGPT Image May 21, 2025, 10_51_08 AM.png
new file mode 100644
index 0000000000000000000000000000000000000000..581ae37561b8a6c7fdb9da0eb19023a67ebbb156
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/vocabulary/ChatGPT Image May 21, 2025, 10_51_08 AM.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:793a6954c17a5291ab3c59135d204f575084cf8572a3057ab6a67b3293566de4
+size 902259
diff --git a/dist/gramm-ai/browser/assets/images/vocabulary/back.png b/dist/gramm-ai/browser/assets/images/vocabulary/back.png
new file mode 100644
index 0000000000000000000000000000000000000000..8c31da4c08984b08b8a475b32d473ce9f4b1fb65
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/vocabulary/back.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8749a225d6220db8f5f1c986aa293de98ee58e29eadc55ffbe6715775aa6c7be
+size 1369808
diff --git a/dist/gramm-ai/browser/assets/images/vocabulary/learning.png b/dist/gramm-ai/browser/assets/images/vocabulary/learning.png
new file mode 100644
index 0000000000000000000000000000000000000000..2fc0b83a046db14dd6f7399cbad2f39448e10718
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/vocabulary/learning.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8fc46c7b4e457e15c8c8273721777ecb520223e33ae9108b0793176b6ac4cb16
+size 3094855
diff --git a/dist/gramm-ai/browser/assets/images/vocabulary/learning1.png b/dist/gramm-ai/browser/assets/images/vocabulary/learning1.png
new file mode 100644
index 0000000000000000000000000000000000000000..9d63c2f16d927c1380cf112488e93706ecb309a4
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/vocabulary/learning1.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ccdc54d8c9fc7342111ffca808f6e221a46a632d56aa204dfdb01257b77ac727
+size 2880344
diff --git a/dist/gramm-ai/browser/assets/images/vocabulary/next.png b/dist/gramm-ai/browser/assets/images/vocabulary/next.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8b2f9eced51da827d1bab0ccecc30e62ba721fa
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/vocabulary/next.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:30aa3164fb81aead347862ce98d00f78882b4b42368b08e0aa0d185e3e60d99e
+size 1094404
diff --git a/dist/gramm-ai/browser/assets/images/vocabulary/vocabulary.png b/dist/gramm-ai/browser/assets/images/vocabulary/vocabulary.png
new file mode 100644
index 0000000000000000000000000000000000000000..a5ffc10f55febb839f36f763db5585131a44a534
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/vocabulary/vocabulary.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6d10fdad3807d15949fbe88676ad581242373f9e72c40d45122be18ce27edbfe
+size 93328
diff --git a/dist/gramm-ai/browser/assets/images/writing.png b/dist/gramm-ai/browser/assets/images/writing.png
new file mode 100644
index 0000000000000000000000000000000000000000..27005737b8bf8c29c920de75459acd58c123a660
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/writing.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8ff7efe0932d4613f5dceac9750516836e0a30a7ccca40432271863e126f7da0
+size 652558
diff --git a/dist/gramm-ai/browser/assets/images/writing/1.png b/dist/gramm-ai/browser/assets/images/writing/1.png
new file mode 100644
index 0000000000000000000000000000000000000000..1d95b7bf02dbd85f91c965e88e7885e3a4eaac4c
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/writing/1.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e529544696a1de7db78f4fd95c6cbbf1c70721ec2cf0838aae379c88178be137
+size 1426179
diff --git a/dist/gramm-ai/browser/assets/images/writing/2.png b/dist/gramm-ai/browser/assets/images/writing/2.png
new file mode 100644
index 0000000000000000000000000000000000000000..69e6b0bfe321cc2a8eadd1a466c42a9f0df0ed2a
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/writing/2.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:29211b400668074072b42320cbeac6caf40e01b391e686495d026a58275d724a
+size 1898944
diff --git a/dist/gramm-ai/browser/assets/images/writing/3.png b/dist/gramm-ai/browser/assets/images/writing/3.png
new file mode 100644
index 0000000000000000000000000000000000000000..137b1e0c38271360017bb14684205ca6bbe5a173
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/writing/3.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:83569ff3dd9b2ef8604b1845b38a87aea773ea95920a7533ae2e71e074fb7f18
+size 1742800
diff --git a/dist/gramm-ai/browser/assets/images/writing/4.png b/dist/gramm-ai/browser/assets/images/writing/4.png
new file mode 100644
index 0000000000000000000000000000000000000000..bb446b2a76b4515b57833ea504ab9847fb729627
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/writing/4.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c4af2314b3c1a3d45ffcce6a794aedfd473e39564fc96f7e0aba9fbac2904f49
+size 949240
diff --git a/dist/gramm-ai/browser/assets/images/writing/ChatGPT Image Jul 14, 2025, 12_26_53 PM.png b/dist/gramm-ai/browser/assets/images/writing/ChatGPT Image Jul 14, 2025, 12_26_53 PM.png
new file mode 100644
index 0000000000000000000000000000000000000000..5782d29b6b1c8127e8b5fe09ccb8ee77109b8ab8
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/writing/ChatGPT Image Jul 14, 2025, 12_26_53 PM.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ca189374822e22dbef02d5729f79c84d6f5a4ae8c96b2e0f32ed0ee4351e206b
+size 1828221
diff --git a/dist/gramm-ai/browser/assets/images/writing/back-arrow.png b/dist/gramm-ai/browser/assets/images/writing/back-arrow.png
new file mode 100644
index 0000000000000000000000000000000000000000..1f301cfe84e291c4be0414835fa2645871ba877f
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/writing/back-arrow.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3bf85ceebd0a2d7b12f9a63159186aabf850380949ed7d57c8c53e3c3e759e18
+size 418
diff --git a/dist/gramm-ai/browser/assets/images/writing/back.png b/dist/gramm-ai/browser/assets/images/writing/back.png
new file mode 100644
index 0000000000000000000000000000000000000000..8c31da4c08984b08b8a475b32d473ce9f4b1fb65
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/writing/back.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8749a225d6220db8f5f1c986aa293de98ee58e29eadc55ffbe6715775aa6c7be
+size 1369808
diff --git a/dist/gramm-ai/browser/assets/images/writing/border.png b/dist/gramm-ai/browser/assets/images/writing/border.png
new file mode 100644
index 0000000000000000000000000000000000000000..0a1a06de672ba3acd27d7851733830e5fd85938c
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/writing/border.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d86911891f91800b69dbbe991aadba1701599f96f5e93672c28f6360dacfb434
+size 2036
diff --git a/dist/gramm-ai/browser/assets/images/writing/cloud1.png b/dist/gramm-ai/browser/assets/images/writing/cloud1.png
new file mode 100644
index 0000000000000000000000000000000000000000..8c04fca0ffa0f35c481021800389e529fc98b5d3
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/writing/cloud1.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b5409810da008d782ea7996868d398b5754961944328acb00771a2423d0aefed
+size 28116
diff --git a/dist/gramm-ai/browser/assets/images/writing/cloud3.png b/dist/gramm-ai/browser/assets/images/writing/cloud3.png
new file mode 100644
index 0000000000000000000000000000000000000000..5db8e225291473c85557f7c9e228392a9dfd87ff
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/writing/cloud3.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ab711c55b26abfc76cd22a192bb1451be88e87963edc2bdb7bbed14718ed7e85
+size 1466225
diff --git a/dist/gramm-ai/browser/assets/images/writing/feedback.png b/dist/gramm-ai/browser/assets/images/writing/feedback.png
new file mode 100644
index 0000000000000000000000000000000000000000..4fba36d6203041dddeb7dd0d004fdff7924a7903
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/writing/feedback.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b8b29c808bb73f02a4761764b18a1d6375f96e261826c6dce32c9c4330f9f063
+size 332605
diff --git a/dist/gramm-ai/browser/assets/images/writing/group.png b/dist/gramm-ai/browser/assets/images/writing/group.png
new file mode 100644
index 0000000000000000000000000000000000000000..06f97f614027e4eb8732f03ab3998d919c326e82
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/writing/group.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1d3bfe9f7659921aaf81586c653f20bfe4fe62e8802266549cdca120e3b6c315
+size 2433570
diff --git a/dist/gramm-ai/browser/assets/images/writing/pencil-character.jpg b/dist/gramm-ai/browser/assets/images/writing/pencil-character.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..7d18fa5c4829b51a8c8e926c50716c5dfe757492
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/writing/pencil-character.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2da6a8dd47f84f92c7540f91d98a92328d462914ca17f7468594152cef6385b8
+size 44081
diff --git a/dist/gramm-ai/browser/assets/images/writing/pencil-character.png b/dist/gramm-ai/browser/assets/images/writing/pencil-character.png
new file mode 100644
index 0000000000000000000000000000000000000000..a555e68e2dbfc894ff1ddc98a71eea404c739906
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/writing/pencil-character.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8da988ee0a264eace84de9d96c6e74e837330aba23024d65006abaa6d46abb60
+size 214498
diff --git a/dist/gramm-ai/browser/assets/images/writing/pencil.png b/dist/gramm-ai/browser/assets/images/writing/pencil.png
new file mode 100644
index 0000000000000000000000000000000000000000..b93f60e1fdd84ee75432ab2238d30bc74f1d6d6b
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/writing/pencil.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e0eae6dadeae62fb26cdfc312f8ddc6aef202c8b0e8755809a0cb4a34265340d
+size 131624
diff --git a/dist/gramm-ai/browser/assets/images/writing/rabbit.png b/dist/gramm-ai/browser/assets/images/writing/rabbit.png
new file mode 100644
index 0000000000000000000000000000000000000000..06a0e03961c9d8ab373192c7a708a490c6e34c64
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/writing/rabbit.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3f3b34936742d4abc408f519bf4d82f7608c11c229c9efb0f7e36e348e0b1ea8
+size 993708
diff --git a/dist/gramm-ai/browser/assets/images/writing/rabbitwithpencil.png b/dist/gramm-ai/browser/assets/images/writing/rabbitwithpencil.png
new file mode 100644
index 0000000000000000000000000000000000000000..8da5571796d800400a4782ad26045cbdf5f3ae82
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/writing/rabbitwithpencil.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9f05d50d3c56ebbab7e23f585804adb688a2304983f58b973dadfb413db8c274
+size 1126444
diff --git a/dist/gramm-ai/browser/assets/images/writing/sun.png b/dist/gramm-ai/browser/assets/images/writing/sun.png
new file mode 100644
index 0000000000000000000000000000000000000000..d92f0163d152637c37a14ee86a650fbc5fa686b0
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/images/writing/sun.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6263dfbc55ed42705ab865edcd1ee91b927d4c868c9b3d05b3194c272033839e
+size 1038842
diff --git a/dist/gramm-ai/browser/assets/majema-favicon.png b/dist/gramm-ai/browser/assets/majema-favicon.png
new file mode 100644
index 0000000000000000000000000000000000000000..547e93f9cb062e75850b2f944d2276b0b9c64395
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/majema-favicon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b3921d919e2feba4c61910c98303be14c8bc33f4c88a0e6ba6dfbdb4263d854f
+size 3455
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/apple.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/apple.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..accbee83c95016738375f637fd86aa6b881bf712
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/apple.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:158222ad1b07188440d77474f9cdc6002973e5ed9213a234e603ff66adaa37ca
+size 5790714
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/ball.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/ball.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..69c633123ad729bc2b5c0101c7d38418e0eebb63
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/ball.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bbf6c21e57ebb0f34acf11dfc57eca9a6ceb944708b1dd573e0bb4f082efe7d7
+size 5634357
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/cat.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/cat.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..7b56c73ad8da9a0765173f0975a27e0430ed46ae
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/cat.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0a4e400917eb73e7b2481b5e89799f4c877f860b96fef49e61f1a6fee2db718d
+size 5360080
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/dog.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/dog.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..e02de555f77a80fb57348cd6d465a657df2b55b8
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/dog.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aced7cd298f418f1d7ac6952c99df14d6030bd56a22ac17d08352bf283b1e0de
+size 5342277
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/egg.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/egg.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..0923e93428ae270b21614aaeeb6f03aa4cb70c12
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/egg.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ea0b1500966539eee652962355c20c380a903ee79bd79ef57e3c730302525382
+size 4935460
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/fish.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/fish.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..d689fc58aecd0bcab9ea600a33a60d8220b2079d
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/fish.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0c724abc31b32d058b69c2142093c24504fa863dc5f7e7fb78310e6c78295013
+size 4907809
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/grapes.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/grapes.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..682419e2847c82ba6f62fafc5cb3f4ffeeac45dc
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/grapes.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e8e26b650686a72c010852f336982b188f779af5938d554bf86f755a5fcdf9b6
+size 9053666
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/hat.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/hat.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..79c9440a33af6949dd334e4e92343e62b2348a62
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/hat.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9a435204cb5e26fb7dda794b0b1ae482445841bd8643a3bd8eb4dbca2fa69921
+size 7203469
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/icecream.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/icecream.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..540d39188aa90b99359ded3ca6b46dcc5a288709
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/icecream.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:89530e185f406945a71b19300c5a00711ada88641af6dcb6c59ab5dc5c5835c4
+size 6187864
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/jar.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/jar.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..0448e646bc083a3c9a6783d52b52a148b10893aa
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/jar.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:85e954d6f782f5d17da42cf60c2a061d114068396285fd5d14602ca88f975d5d
+size 9213510
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/kite.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/kite.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..8b65ed2c5573345bdbdf65ae22919530f4d27c69
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/kite.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ba84336efc7cb4e687eee64ed861cd753fe99781cc6c5bebe3cefe1b4b5ca4e7
+size 1843752
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/lion.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/lion.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..cd8340605e47f0a1785aac0a2720cb94a8f2db85
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/lion.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eef94bc7cd6806e735254fdd077c3c211ca6cb1b5eefff27e125a7723ca3b305
+size 6097806
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/moon.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/moon.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..74532eb0ac2a9cd0d9310a02269ad8ce565bb44a
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/moon.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:147b9e565116439983091812d786a55752e4e44511d7bf61fa218ac9a0805464
+size 4901274
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/nest.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/nest.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..0e3f953158541c1731303bc4a711e0fa4f1819ec
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/nest.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:820d37c3b5b153753a58532c914e011d5cdbc90df30d1bd3c5788834bfbe6d84
+size 7650498
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/orange.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/orange.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..8465478c61c1e172de62a70b790daae5d84ca73e
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/orange.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e9e3c0daecbcf4c8c26c2ec43a0bc68531922bd621117849624a88f01e1eb5b4
+size 6440257
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/pig.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/pig.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..45dbef2091f161428d583c5e3ebee013b25a5906
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/pig.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b6db18186b1ac3e735eda91d9d73522f900a7414b83985fc063aa7b537be133e
+size 6421810
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/queen.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/queen.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..311c44dee50682e456ab3fe4e10e53286919b048
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/queen.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2595b6a8e69de6b350e81431f23eae6d54e32ab457fc8cf2d7d20a878c322402
+size 7791775
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/rabbit.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/rabbit.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..cf1182245b30d9402db93d62d509f60dd8371a30
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/rabbit.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2bfb9ec3714cc6dcd7cae3be5594e53a2267a26da0eb82770a60ea5c91bba6b8
+size 7266712
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/sun.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/sun.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..6b0361d5f9d21e26c345cc27cf7ab53e763e9609
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/sun.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:85cb830b40c979014ed19ace95229fd8d806db3be52a87a3a387a20a017a6110
+size 1269242
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/tree.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/tree.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..f5596c9f0559ad934145b664a79d40394c873f53
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/tree.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e6a80995e8b2ab65495d769ca18250c2a979d0b0a2865f8ea6bfcb6e70106a70
+size 12132430
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/umbrella.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/umbrella.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..f4db7e548f197fbdc742f6358b66fba26ba29d06
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/umbrella.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6df6d94e25ac51f98d33f3a452a937bb81c8d6000172fd51564bc8b43f925678
+size 2489346
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/van.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/van.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..cd919042a114c061221e5721a991496fe1c4b7f9
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/van.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:86c3bdd636d07bb59384b530c66cc6518ac251a5cdae3c02ca70818c8c69ae04
+size 10097663
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/watch.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/watch.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..a073f0c1cde9719b0d07527595734ccc29c59278
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/watch.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ad5d4841d4668f1d2a992da30c8991778030acea800ec569cba3e3b7638b19dc
+size 5652990
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/xylophone.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/xylophone.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..36e862e849dad94c247e4f40750cc3dcb06f70c4
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/xylophone.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3fa2d40bc1f9f0bc96f147b0696000b33607ad9662ca5dd319b2f429d6bcfaa6
+size 2050298
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/yarn.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/yarn.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..aaef79e3b48d7937da710fd4db0f3ed34fd98b8a
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/yarn.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:742ba761ac8f917629fde9c560598fb2258131bb625d2d5c55f77c8440cf9e08
+size 3490049
diff --git a/dist/gramm-ai/browser/assets/pronunciation/animvideo/zebra.mp4 b/dist/gramm-ai/browser/assets/pronunciation/animvideo/zebra.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..a1e4c4541f9a6837a167165f17b04d6733c0d23b
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/animvideo/zebra.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1144f6b4892b7ed3b31d6895dd692b40428b8e985e41c0f7306087ad4a5a37fc
+size 7161675
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio.png b/dist/gramm-ai/browser/assets/pronunciation/audio.png
new file mode 100644
index 0000000000000000000000000000000000000000..d61fc08ba9444f02a57463640de4517418edbc37
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:21066ffba9cccf98ff08e440f64e16328124c88e428aefc46e4131f4021d2aa5
+size 6159
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/apple.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/apple.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..7e72b04c925e6cbd498d2f102904c3024e7966f1
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/apple.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7c1d3163be11f51b0470574ce5968fdb5d8ff273ae368731198f9c2b5cd44535
+size 18240
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/ball.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/ball.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..ae0c554281a09f469ed061f9eccc9a1476f335a3
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/ball.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0cc36ccec994fa9e357923a781134f4a2575e177e87f9624edda6b2cd4c6c39b
+size 22224
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/cat.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/cat.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..c4ec6843067c1295c5ffd8a4b0613b319b75ca4f
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/cat.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3aeefa4c781d51b864537cd9b4e63b2e68892ed09f31fa11ba59c8fa518d67f8
+size 17922
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/dog.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/dog.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..5c350b65cc0a75d17ad8602161aebb5ff21ddacc
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/dog.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:688953329eb2f70dbe6063acda0dc758cce3780d734bc86b173d8724acc5f04d
+size 11322
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/egg.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/egg.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..3c78239b4575869fcb872868d6c7ec8feacd370b
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/egg.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6c39382b304e68eb69459bf6a4714ceafa403ef1abffd396eaf8547a5ca8cee6
+size 14538
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/fish.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/fish.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..2f7586a5272fb4cf4e791f01b154e571c15953bd
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/fish.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d77120d6d2a2646b6a3972f2b6bf285233b9b0cccd59a978fd2886e1eb63c723
+size 18426
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/grapes.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/grapes.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..76e1dc109cc702c445ec5e12e62175914eba30e0
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/grapes.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ff9d20c82403871f33174c1af8ea4eedc320f4168283684343ac00de35cd7bc8
+size 22026
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/hat.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/hat.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..60123ef0e812693d91448c9bc9da0c734d09f52f
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/hat.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:967549673cc6a68ac811db930b0b2940099daad8bd4398de6b8038fd493b819d
+size 14922
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/icecream.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/icecream.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..ee463f8619b44d63132488e58ca1431b1ac9b660
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/icecream.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b3eaee217d283d2488fd38abb7fe9f4e2e6f31eb86bc5329f3eb18af2fc963dc
+size 36474
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/jar.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/jar.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..85077afad981f4965be9622ca57292a87667a50a
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/jar.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:255223e80f4cf4cec54cb42eb5542070984cbb9031ffcd81451a85f202258973
+size 19962
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/kite.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/kite.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..8afb5d2f567ec23628fd546663940daa53010f0f
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/kite.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d38666f0c4104cd65df0e26de0cd9eb90e9221d26f7cf201a59cd57a95f6cdb7
+size 14658
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/lion.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/lion.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..5fcc940e1223c362d9dfa42410108ba0d1f3690c
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/lion.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:af9e40404c58745a992d679a3a09fcc93f069354dc755c46b53f4dac814cacba
+size 15882
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/moon.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/moon.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..fc1bd629145dc745cce93ae19b8975dd62c8899a
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/moon.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4afc4d6f234abe8801b0bdf1402674cc78768153d214910e3efbf3f8be3652a1
+size 21882
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/nest.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/nest.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..6f8df7db2b5e55ee736d28c0a79df5d31c0a9e1d
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/nest.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:806fc5fd57b736e0ea76afab44524c89cf43fbd094474b7a0d80cb4427c5199e
+size 16986
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/orange.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/orange.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..11584d512bda3befaea535a4102219128af584db
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/orange.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ecc8600600bb0ba305ca2c64d79ae75be083aeffcd3c8fe1d440e2fb4aed8cd2
+size 17274
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/pig.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/pig.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..5ace9d5e655ceb6f36343211454676c126d8efe5
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/pig.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d44c5d751348a1e3dd9dae1894ccd1a982edac00f80843c210509c27079c76f7
+size 14106
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/queen.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/queen.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..04f800abf2f11544b5306243b136ec9dffada23b
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/queen.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6b8768ac68b73dd249ddd4ca487826b19665b88a0b4303cfeed30e34069d0be8
+size 20730
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/rabbit.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/rabbit.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..de92fe90adb877b1ce3f77e1802eecff5bf14214
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/rabbit.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6653d3b0615b1af418e79e9587a3ab2f6dbb1a1e9eff7effe704040cb695118a
+size 16746
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/sun.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/sun.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..e138eae73f6ae65ef0b8ab17180cfcede5e5c7a2
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/sun.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c23dffb8704191f27dc96f73b22cffbb5af59331951fd9e193a7ccb9ed3504f7
+size 18570
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/tree.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/tree.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..82d8763809b6030cfb76c48ef5f8cebbff4907a8
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/tree.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:746273047c2999f96930603ffa2a34e1122b70a42dc870de11bcf06b46ea61cb
+size 20442
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/umbrella.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/umbrella.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..b42b5ca106ee92f008da0922417deba5ff5fb8df
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/umbrella.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:63ff81ad4b808d3b4ab22f672ab2b52c276f08d6d0e7e4be46ef1d22c30d5b6b
+size 27066
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/van.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/van.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..d604319168422c4a33a9183a524da939fac1c6cf
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/van.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:938fdc9b338d5caaf529077cd7a50c6c92f75243e154d80b11c450f672071d94
+size 14634
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/watch.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/watch.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..636da561d2123001bcad353db2c98d09e1bda805
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/watch.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:21513ea16056fc96b20b3ea6b7d34412b3adee31f5946b94e8b5f73649912b24
+size 14874
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/xylophone.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/xylophone.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..d2d30915b69a37bea32e0935acfd20b365052594
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/xylophone.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6e17046727e6cf138b336cd8ff1cba8aee575b5b197e0a0365e945c817ab9ee3
+size 30498
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/yarn.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/yarn.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..f7faa16897d56e5c4223767f4d6bd89e40f034ac
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/yarn.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5cbc464d6f107b335be4d19f6b938db5feb87ce63855508331667221b592b136
+size 21066
diff --git a/dist/gramm-ai/browser/assets/pronunciation/audio/zebra.mp3 b/dist/gramm-ai/browser/assets/pronunciation/audio/zebra.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..db62dd5ac893645c97d23fc3ade2a34282e81be9
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/audio/zebra.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:11b673d59d9fa19b91b60dcd4ff423c6423664805bfe6da9851adb6c075047f4
+size 23874
diff --git a/dist/gramm-ai/browser/assets/pronunciation/board.png b/dist/gramm-ai/browser/assets/pronunciation/board.png
new file mode 100644
index 0000000000000000000000000000000000000000..0caf855dbd26ae53223ae9bc233ad2ff6ba53866
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/board.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:16e6198b8ea0df919325d2c955a9f48d415d562755671c82fa36a7afb5ec52b1
+size 17981
diff --git a/dist/gramm-ai/browser/assets/pronunciation/feedback/consonant.mp4 b/dist/gramm-ai/browser/assets/pronunciation/feedback/consonant.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..2deed8d0182bc71a6da686c083ae194350841c61
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/feedback/consonant.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eae0c82c7556e573bd3d4c0e9b4b885430641885fe4a445e0425f6d90a04589a
+size 5481531
diff --git a/dist/gramm-ai/browser/assets/pronunciation/feedback/ending.mp4 b/dist/gramm-ai/browser/assets/pronunciation/feedback/ending.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..654025470b5aaebf889ad554d2dd19f55831e047
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/feedback/ending.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e1bbfff2a733efd22b952ae4e32f686b06ada31b247208b81c8cb187e818695f
+size 4184262
diff --git a/dist/gramm-ai/browser/assets/pronunciation/feedback/multipleword.mp4 b/dist/gramm-ai/browser/assets/pronunciation/feedback/multipleword.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..ed31f0a02daa43121ff0644cce5bfc0126238a6f
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/feedback/multipleword.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7da6fc60d82f728164d12cb57acae93af3d7092be447f3b884ba262cf5533a1d
+size 2252316
diff --git a/dist/gramm-ai/browser/assets/pronunciation/feedback/silence.mp4 b/dist/gramm-ai/browser/assets/pronunciation/feedback/silence.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..3ab7995c40eb2b1e5d2866aa9d760486c59941d4
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/feedback/silence.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b31c9c9bf22c6ebcf0ab84e23398ae019f613d5cfc494ea3d01c4541e16a56b0
+size 5405291
diff --git a/dist/gramm-ai/browser/assets/pronunciation/feedback/stress.mp4 b/dist/gramm-ai/browser/assets/pronunciation/feedback/stress.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..e74a63ad35124ce3219bc74ced3585d81042fd1c
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/feedback/stress.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:67cbdef5635080cf0d38afbd1e4c5a0c79051363dd6fc138c7f3a1632ce47d7b
+size 5214043
diff --git a/dist/gramm-ai/browser/assets/pronunciation/feedback/success.mp4 b/dist/gramm-ai/browser/assets/pronunciation/feedback/success.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..36b2ecca9751dc34e356ec0ff5a003fb0c071112
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/feedback/success.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7065eb4444fff7033ffae8183901123ce45bca47114d8307652523006ca4b7b9
+size 7149268
diff --git a/dist/gramm-ai/browser/assets/pronunciation/feedback/syllable.mp4 b/dist/gramm-ai/browser/assets/pronunciation/feedback/syllable.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..f6c7cdc2e2390152e9d8bf3313fa1db1baf8cce7
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/feedback/syllable.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:01c7ecb44cc4eee9fb9cb32ec7f363e367c17479c0ae91883d902f428e3db9c9
+size 3955318
diff --git a/dist/gramm-ai/browser/assets/pronunciation/feedback/vowels.mp4 b/dist/gramm-ai/browser/assets/pronunciation/feedback/vowels.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..3bb0cf3ec75077a7c824d073209f4fd1f5300c80
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/feedback/vowels.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cd9a3f4ddfdadb90b0aaadbfa0a00c5aa80342f4b133543836d2b21592eb3443
+size 5837969
diff --git a/dist/gramm-ai/browser/assets/pronunciation/feedback/wrongword.mp4 b/dist/gramm-ai/browser/assets/pronunciation/feedback/wrongword.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..198eb7ab19d9034c2aaa8325a8da3905aa23d25a
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/feedback/wrongword.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b0a32e7b4ed1f4355aa0eca1bd48c5ed4030e3deb7f2e5a412cb6a3fc3d06df1
+size 5194285
diff --git a/dist/gramm-ai/browser/assets/pronunciation/listening.mp4 b/dist/gramm-ai/browser/assets/pronunciation/listening.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..415a5fee2694f8efe711df9014d70305eb1a8781
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/listening.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:26c028bad47e42b3b89e05b2e603d90309b82d53193d7e2be0c88686c5dc57ea
+size 3569866
diff --git a/dist/gramm-ai/browser/assets/pronunciation/pause.png b/dist/gramm-ai/browser/assets/pronunciation/pause.png
new file mode 100644
index 0000000000000000000000000000000000000000..74f6fae2b84605c0e01643fc3645ea1892fba70e
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/pause.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9efce36e388aaccad1b743e590ff1e6ff53e27260c6b48b28f46db0187d6b1db
+size 10788
diff --git a/dist/gramm-ai/browser/assets/pronunciation/play.png b/dist/gramm-ai/browser/assets/pronunciation/play.png
new file mode 100644
index 0000000000000000000000000000000000000000..d8e515f3b886cc860c20f5a62715198cdb9cd54e
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/play.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a5b587892782a79de9117ba4259158866d80f56b97aa764121cff189b135fb4e
+size 3112
diff --git a/dist/gramm-ai/browser/assets/pronunciation/slate.png b/dist/gramm-ai/browser/assets/pronunciation/slate.png
new file mode 100644
index 0000000000000000000000000000000000000000..3024388173d61ed43aaeedc6387a50adc32bbd30
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/slate.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c43b888d1dd64f1d0c93917dbe7813353d454b271eb0ae3315d70a3d24a52b76
+size 21422
diff --git a/dist/gramm-ai/browser/assets/pronunciation/teacher.png b/dist/gramm-ai/browser/assets/pronunciation/teacher.png
new file mode 100644
index 0000000000000000000000000000000000000000..9de44aedc768dbe31b98022cb6fb7d219b781c10
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/teacher.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e5e6f6e2ef93ec59d4b47f41af45bc73a229c4225d2337c506ba7113ec72357c
+size 293505
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/apple-old.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/apple-old.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..b76a10925148eadc912f124b9c18d6bd80c49979
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/apple-old.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2dc1cd633647903a950c33999a221db9444b4ecffa94461344055b6727af6e7f
+size 7134565
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/apple.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/apple.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..d21090e13f540e596bb7699cade6e88db3e7e2ce
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/apple.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e6327060fd09d3b237c201396a6afe0327fe6b77f619f9434366dd689fd7c29c
+size 14651591
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/ball-old.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/ball-old.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..4c25d6602333b68079e9c12ac9489cd5421f3215
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/ball-old.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a508e9d7a8d0efe88d8f4d3633832266090793136f06b2e59c87e8ee694fbeda
+size 7606207
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/ball.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/ball.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..f6eb534a2dce7c6f9e084e6bf66c6d4ae0d4589e
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/ball.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:08432f2a01e9bc4091907ac06adfeec36ece4b4d591a74280d6df9bf4b1977cb
+size 14243005
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/cat-old.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/cat-old.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..a9c85eb3bc54973c77436a94c444a6922ff08578
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/cat-old.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f171b0200d6662ee0cb94fc36c98a65ca1daf8053e98bcd5d4a91eb883cbc294
+size 7805298
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/cat.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/cat.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..de2aeccbfbe83da78feed0ef0f17ff16d33c470f
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/cat.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:acc2bfaae172685d2130e4c6bb77f474bbd26b2d7a9895436966b0e71bdaa188
+size 14446816
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/dog.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/dog.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..e85061401593cc32964cf0006991fba3d4b436cd
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/dog.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:58140b73777fc39ebed3d282f215573b3ffb8f9c05d74b68c938ab2aefddb31e
+size 7150587
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/egg.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/egg.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..043af61e02c4d6e341b4ecb6f48668dc62d85902
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/egg.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:522a425054b0d16f1bb87ace5ed9bddb6f366d0bfc4fdd91907c38db18602035
+size 6383313
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/fish.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/fish.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..772c7e933d9b59da0232e2cb78a6f31e7556d2eb
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/fish.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4d81deb2735fdb7f41c5514f505fb75d050ca769fe308df665a533b42821374e
+size 7276274
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/grapes.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/grapes.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..8daba3b4f407b8c17d26f29cdc52451fe5142602
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/grapes.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6f4542c920fe022d427d69b8fa9bc7668c78c149eb79c42bd96776472f5d94d5
+size 6988222
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/hat.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/hat.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..c3366c1fa65c8d1fe52945aaf6b53c0b324c0a78
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/hat.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a7ad6c5f8ffa23b57e85ae36b4b2c60ac58fcf4a7c5bc086cfd74a22cb2ef92b
+size 7053688
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/ice-cream.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/ice-cream.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..95de063d1a737a7f562cfffcffb000f44504db90
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/ice-cream.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cb339a511694db8051ab8e331f91a6a112b3ce8de939ce6e398204d86c298650
+size 8151667
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/jar.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/jar.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..c292f7c88902e2b11b92cee05e94fb769b6e8f3b
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/jar.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:45b6d886b970282b375031b20c3007443417fa4d7ab4147f624bcde08fef5905
+size 7558106
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/kite.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/kite.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..60bb639caabbd02f3d628df9025a2a21929a1497
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/kite.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:396d670691bc4c714789c3ba4d8a080ffd210e6ca398d3869c04e9eeeda9516c
+size 7384715
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/lion-old.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/lion-old.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..937d9a72f1fbc6094dfc7507dfb199cf3b9acb18
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/lion-old.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ca2d4e211b05380e1152ede6052e0751d29e46da96c78431d7bd22a83f301e94
+size 5431178
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/lion.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/lion.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..7127f16bac9391750a0c05a1fa8f888bd2417389
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/lion.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:952c1a94530ce8e620851326e7d6d368be370b42709a3677aace687e925303f8
+size 5127880
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/moon.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/moon.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..e809ab291db8ed3dcd92c3745e17811e9472f578
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/moon.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:790afab95dd4a4a94d96b7edc525fa37dc8ebb3ae0752df4db4a4e655760f7bb
+size 4255165
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/nest.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/nest.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..cd184c4c01d7ca4f0f3540da9c67dcfc38276194
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/nest.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b0335f6a7ad4bb94dd6ce4bb9efcaade16bac270b7d5d2f43bad8fa8a331a484
+size 4301304
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/orange.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/orange.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..edab062c65348212e3fb4307fbaf4b41c03e7214
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/orange.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e9778f3a81f2d925d552b8b03431468aac03b89f5713ee5b9776d388e58d8fd8
+size 5016720
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/pig.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/pig.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..0cbf865784dc48c0778ef940dfabbb154c8bfaf5
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/pig.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:72d4ae305e0a4db38bf0b794baefb6f81834416de57187549eab3f7ad3c8a561
+size 4072009
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/queen.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/queen.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..ad2328797a2e87b0860bf51d44df796d1af33941
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/queen.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:07256cdf96e4e603a8604688f6d1c42667319128c5874281b8f5e29a83197884
+size 4707339
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/rabbit-old.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/rabbit-old.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..3017062045b1bda7d37a4ac7ae67ee322953471f
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/rabbit-old.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9c3b59991ee348ba0a9117ad5648fbf0ea03fc69298b4d3f8863d45dd94194ee
+size 4932831
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/rabbit.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/rabbit.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..7dbe3b14f3ab083454214eb308c4af084b23ccae
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/rabbit.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cebe3f87a003315b40ef9ceaa62ac7ed47f05b5e37858d891c413b5dd01626a2
+size 4795049
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/sun.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/sun.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..026824bbe5b14945c96e041afd4ede3844ed27ee
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/sun.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ec104e7db0534360ef9eebeae09472b0e19267f3555d0acc5bb66c996cb049a6
+size 4805357
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/tree.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/tree.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..afc883ebef165c27e0b0e1b1f11202ecb522a182
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/tree.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:54073d3b56747c9b34ab2edb7777875f2c63549a212dcd367623921400f15e07
+size 5155482
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/umbrella.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/umbrella.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..8bd529488484ed51144e83df6c46dea06858059b
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/umbrella.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2c4a22ead24864c9a1966147fd0cf6f1e248313841fd98ceb702682825d3073d
+size 5174794
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/van-old.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/van-old.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..dd3da1ea204bff27922c15cb2e04c26842f9d16d
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/van-old.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4724e2cab20be89b9148c699a33c2a433e239611a7787c45487942ba7ef9d981
+size 4462232
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/van.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/van.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..2115947f2a099a518fea4c31eead5f62bde38640
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/van.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:19ef3b0027192a8d08ebd3069d0bbc09a3dbfdf2c10262ba0c756db54517d57b
+size 4232804
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/watch.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/watch.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..2917d8c0cb3c2fe2038cf8d4cd7393deceabab92
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/watch.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1e4f27454697987ebb17c25fb86e88a2196873b040c222d5970da05b568f91db
+size 4960176
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/xylophone-old.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/xylophone-old.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..1076eb925a1913061ed7d9368bff3b9477fc594a
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/xylophone-old.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:93fc9aef9f9419f344a0ba97ff3b5d1c0743ad121956f462e504e31388893164
+size 5199424
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/xylophone.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/xylophone.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..9157201e0c3148518f00d79ead1efa9c105499cc
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/xylophone.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dfc61e0844b3df40b4ec74694fd048c3811ba2dd5fd16b48ac48a2619aa4d3a6
+size 18925813
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/yarn-old.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/yarn-old.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..bb1fc165d47b459bd6edd28f53c3fea9ebbcbd4c
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/yarn-old.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3fc19acd88c47a3f7c33d750ef0f77c2dce6272d51e9e532576c2d00bda52413
+size 5095081
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/yarn.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/yarn.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..d3caf901cd898f92aa95965393209c3116d146ef
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/yarn.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:640cb94a1c14d8b733556a81f765319b3eea544b26022f5eece33530523c2b95
+size 15318745
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/zebra-old.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/zebra-old.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..fad180098b2b4f46357210f27c9e3e8c40cde5e0
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/zebra-old.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:60b31a107a1ea872150219c4f5c5b903ddaab3cf07671e5960494f90f9b20074
+size 4569058
diff --git a/dist/gramm-ai/browser/assets/pronunciation/videos/zebra.mp4 b/dist/gramm-ai/browser/assets/pronunciation/videos/zebra.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..06ff703d98df10033db039b511c74b0b29e70f65
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/pronunciation/videos/zebra.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c4082592d2e554d9cdebb16056facafb732dd97f4c39ed5358dabdf7f671e163
+size 13200307
diff --git a/dist/gramm-ai/browser/assets/sample.mp4 b/dist/gramm-ai/browser/assets/sample.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..c9f43a452a7652f3274c23f8f48a3a31ed99a60d
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/sample.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fbbbb00678ca04a944d57c39391e5671c87db6ee40374032a49c716514bf9c95
+size 3131876
diff --git a/dist/gramm-ai/browser/assets/staticchat/already_asked.mp4 b/dist/gramm-ai/browser/assets/staticchat/already_asked.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..d200efa5a802340d3619c0da8cb18fa3984a282a
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/already_asked.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:96e7f732d9fbc489fc773e415557faec1a377cce25ece61fb51b34b72af8b270
+size 2000683
diff --git a/dist/gramm-ai/browser/assets/staticchat/blink.mp4 b/dist/gramm-ai/browser/assets/staticchat/blink.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..ae419c51ebf786e9ac224fc9c439a7b2f84c7fb3
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/blink.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:31d48851b260cdf2181d542901cffbfc557e71ed66f648516b6a49749ea0b389
+size 1607751
diff --git a/dist/gramm-ai/browser/assets/staticchat/bye.mp4 b/dist/gramm-ai/browser/assets/staticchat/bye.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..ea84a503498b971a8d85fad1c28cc38cdef99d8f
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/bye.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4f2676dfd671a42669e6f554f3ed9d35505a377ae5d2dd496ef7648433adcea7
+size 2712009
diff --git a/dist/gramm-ai/browser/assets/staticchat/intro.mp4 b/dist/gramm-ai/browser/assets/staticchat/intro.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..32116e5fea6fffbb334b5160bc7642715b960a9a
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/intro.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0733634409a49b2a44e3e1639ce638e0259b2a501d2f2363932b810459537a11
+size 2513840
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/1.mp3 b/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/1.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..e4f4ad106bd8996bfe794f8df2d9f45391e46e0d
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/1.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d9058c676d87fdf0fcea11bc5c2eaf0a6e36e8e0c5d9f52ee3201921cf4005b8
+size 417604
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/10.mp3 b/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/10.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..c68e1a944ad90296a69c85a09ad21f3f0d5dc14d
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/10.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:553146579f0d2c5383e06fcab1d1a882d88df67374433f52c6b0869298c45595
+size 330220
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/2.mp3 b/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/2.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..ece7d400475e3c7bf7cf5b4198d1d09ab8a913de
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/2.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:864d59f4a3aeb3158323c4ed8da239fe9c9b2c83dd1ff898c9f6ae9aff837edd
+size 357892
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/3.mp3 b/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/3.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..367505d59d9c1dcdee471a6536d4699d5311a967
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/3.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4c951145efef798c28ee0a0c611b3b61c388b21637e989b370205759fe36a18a
+size 356572
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/4.mp3 b/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/4.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..ff3587374867859262bca57596d774fc720b26fe
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/4.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:64b99358981e9e6f8f522a0fa3329f01b017723be72c3f24d805c4979a3048c7
+size 321964
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/5.mp3 b/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/5.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..d415077faafef9f84d2c6f9a0d16c260e5e417c6
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/5.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bcb223c5290c0bbc2784709a522e49e90ef3647471010b06bfac35b0603d6b72
+size 324484
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/6.mp3 b/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/6.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..e2df1a972156646efce2c2c6725cc3d16b16bcd5
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/6.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:795aab62ddb622d851b230d5112023182c2d416d9d4421806bb7878037cdcc22
+size 312244
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/7.mp3 b/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/7.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..ed000658eca388e2b7adfaf5f637873fc214b641
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/7.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9e35c68bf1dbd7f867f201e57a883385205ecd1576ce6d0c4948d4f500333b47
+size 266404
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/8.mp3 b/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/8.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..6b92bcf2338cb49070cc413cf5f57ba6bdbaddd1
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/8.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1f611e996ec78d1b1c34a6eae05738d7e6727eb43480ea72efd31b2ad2d9b580
+size 284860
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/9.mp3 b/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/9.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..b3615d8242d95734ca85dc06f0ca047a0883bb9f
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsaudios/9.mp3
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ba59e6e26bfeee7f46b8b2020296b1d0ac0f491e46734bf1ef41f7179971ce52
+size 268588
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/1.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/1.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..43c64e5f369de71581d58414e3176fe1001c5075
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/1.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c4f43945fae53bfa912d3c3f5cc7bf2cba8b8b18b50e1cccdc914dd7a18b2193
+size 9107142
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/10.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/10.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..7b44bb19b6033d5bf64fdc5b7d804927c50f22f8
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/10.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:393cfda7c595951a644db98550279c76c66515f78a38eb174c9e742fddb19de6
+size 7578300
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/11.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/11.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..0ff73c3666f1c0803ed9d2297326164b921587d1
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/11.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:36dc8bec97ace8dfa12c36d24360b272c9a70ac7478f959b5f296ba108d22a69
+size 4962293
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/12.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/12.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..a505bcce6809087be7ff32756d61f94596ced611
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/12.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:93ac585c2dc0a46865ae3539603a633869e88de765e88da6eaedb291bc7d929c
+size 6548306
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/13.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/13.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..182cc52ccc45ccc338225b71783f048e496f2f99
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/13.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e7015b37286797d1a787cb1405420934d737fff1f8ce4b9190f53531facd85ba
+size 5514528
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/14.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/14.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..dd8865c9941e8f748a26674f4e9d85bf71bc2d05
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/14.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:42ceeab8089f7361936c916bc583062263dcae22255c1a484b2ed48ede429c2f
+size 5916286
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/14_detail.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/14_detail.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..9db5549c496da638b6876e324326d50d71a7eb4e
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/14_detail.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:22c0887419053dbf63e604898c41fe4f68770809b8949e1bf559dd08a5603cbf
+size 12627713
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/14_story.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/14_story.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..c52fe23f576cad777cb049020fe3fbcf3b70f214
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/14_story.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5894ebe573e94c7c34074a020d8902858cb20b3ba314ea95552c48699cd60643
+size 26210294
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/15.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/15.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..220d2664fc2b03c775b94cadbc28c42f8b26f323
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/15.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f0a0da5286988620a448b301e59e98e67472812b3bc80ea60593845452abf164
+size 5625690
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/16.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/16.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..181e16b955a9717c50a5ceed7e9530d12dfe3c7b
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/16.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b3a63a7544134689110bb5cfe076fd5e67033ac8d6b822a41630fb08c8a6520d
+size 5998006
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/17.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/17.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..daf8164a8bda713e2f91947e039a2c4687f2487a
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/17.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:43fa00f478042da248cd3a95afa84029ae3c1d27cf433745f99cff58be656776
+size 6813540
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/17_detail.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/17_detail.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..2fbc928f3abe5c199343f3e74a896712de7670ea
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/17_detail.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:16b04c944ae5960a3f0bdece5d82a5561f4239f61609726a58706113071afead
+size 16147520
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/17_story.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/17_story.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..8f360576ba8ec93893e52129a18ac78e9b3a1854
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/17_story.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9342d2e3912bcd9bc6617a01c7b3ae5ef4e7c6cb829218d4e63271a477f53d84
+size 24048448
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/18.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/18.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..ab00b7064b609005192e4acd28bc887ea71508c7
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/18.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e4801bb05e9acbad429214b3cf738778fe24f0eb0d3b70d826fa139ee5beec25
+size 5724859
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/19.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/19.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..106344bf2054077faef8d083a2fb9aca06973ab7
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/19.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5d07237e0e7605d7caae643f9c391ed00a6d37d09db3376559bd5b89d06b00eb
+size 6218225
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/2.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/2.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..093480c16dbe079bbe0784d6a7a16d40a01bc0f6
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/2.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d7ee5fd5ef497ca68f86f7b1669bcb18149748a4a962bb1cb9d454389bd507cc
+size 7900389
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/20.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/20.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..d95a6b87d223df0ca55351a13c2d5adeb11981fe
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/20.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f008df6204b2a33fd49234cfca31840a0bad9b988adb466ab8f94c2058125665
+size 5010717
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/21.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/21.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..45c907ae1a5430ca30eb4b72b5924a8ca26680cd
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/21.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:759da997d44ddce5072ee31ca1b16273a6852b6811704fe0eb202c4785f022e7
+size 4583036
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/22.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/22.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..23f5478c40d19173602c4c62853625723f96fa3f
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/22.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a631ccb60afdfede6c1e69adcd693f9835916269cb79e77aab6ec0bbc4606156
+size 4387663
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/23.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/23.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..a8ed539154154306d64a2673de419d8b64e9ce4b
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/23.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a0c8a5a60c017ad41435d91ece72b336d82a5f0574133940c58a211f4ff692dd
+size 4298401
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/24.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/24.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..0cc2b75d769ad94b67123c50abc24bbf0a093db2
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/24.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:11dad2c1dda33d4a6a6e183f7b0bd91e7af5125e9f9cee25a1268e09cb5c6c71
+size 4261388
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/25.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/25.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..75635ab18ef01bf0384de3c39d8cdca7cec51f6a
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/25.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e2a9f9e7326c7857a13b969f6beb0d7fb8ccc47d37343b3f162d5ff24bdcc093
+size 4720058
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/26.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/26.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..6e306f0e433aa9388846aa4beb630296500c60ec
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/26.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:955dea34d33cc47ca3cbc204e3585b0ee6c5357cfb818aa164f6f4cab4be15ef
+size 3673053
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/27.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/27.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..8954a4b8d16cd4e3d5dea2cc468b0d8940247f76
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/27.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3718db93aaed26b9b00ff60aa36644a3a38dd270b1e0aabc6c0b3bd0ac5d497f
+size 3957527
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/28.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/28.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..8a839c417c12c0e9e3b75516b7bb221ff08f9969
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/28.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2481b1c7a3a5af5e1f8fec553f6cae94ed767cd3b501c2a846d192c25f9057fa
+size 4057781
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/29.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/29.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..1b950c8f27c3d90d5db1d8f32d00b27daa4b5b45
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/29.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d46778a56377c181f9a47b4a169475cc1de779fd3347948310c653bc6921e0bd
+size 4228943
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/3.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/3.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..b0d44f6081a9dd98cba7678107bc71877e003e22
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/3.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0fb08f605091abae972c479a348f67f3121eee3f6835995db97debe268456598
+size 8290473
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/30.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/30.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..b6ce077e1551864be689202a8421efe22cc4e401
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/30.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:49b687455dfcf720d314ea8d6a6b47fb809a906e2e7fc285df23c7651cbaa2a1
+size 3976258
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/31.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/31.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..791c11d587441c23891669a40373e5ff54ff7f24
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/31.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:726bd0c771c9dd77f52afde613d371a6a699c78d2104a5e1cf415c6647c499ff
+size 3978612
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/32.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/32.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..864152d93d35e4a162617148a33b1220884e647f
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/32.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:559654f7cfe43fc5c16ede510082f6c4c13898127506736abd16ff36f26f0599
+size 3592763
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/33.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/33.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..a7d0c1a15f168bb48427c2193dd6ca1419b44cf7
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/33.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:43d134031fdc7685d04e2190c6a090b25409974a2c92812792f2b4c1784ef874
+size 4275119
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/34.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/34.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..8f358122dac41533faba78df68d7546f7ef69a90
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/34.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:13f332163e5741350fbf078c7df4b707ca7e19b179659df62c3d88cde4cdca81
+size 4678482
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/35.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/35.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..8e61ae6fd36cb5c1bd6148debba03e1f44bf322d
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/35.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:053372ad9a96db77838ca6762718d49edf8cbf16f3febd0e97b34a140aad1541
+size 4692469
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/36.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/36.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..49b36dbeb0cc45075cad4ebabbbd5d63a0f6c03a
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/36.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6dd0e0e0fa799db8080b96ebbabb73994a287eecd136617492028fd571a3d8bf
+size 3668648
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/37.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/37.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..d36ad214405ad34c34cae1406fb1ae1dc0bf3688
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/37.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:560ac2d855c68b4d1b432ac5429e4b5b8d1ece1dd1a167778f91123e04c09bdf
+size 3639486
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/38.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/38.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..78e31accd3e0fb6b8b82b60c8c98da07333cbb18
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/38.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:26e7b947f2f4e7095347ddd76231ee1f5ed4ef3a76677e470eb1c14f9435ba08
+size 3812982
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/39.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/39.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..6553e1a45198b88a029e49684c29ac2a784ee992
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/39.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4753d07b14408f2778ac7671253587d592bf0470a7a7491c41f0be72ca5466ef
+size 4275042
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/4.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/4.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..4b18173fc0169aa826c4089fdd6aa113020b60c4
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/4.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:624c534001d9ba57beea933c46b798d0f92098c5df9993d6869fc2f872516017
+size 7283063
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/40.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/40.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..30d862ba1b8ad1a63defe0192ccdcf689b30ace2
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/40.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c9a4655d793ce94f74c3b57b649550761d5a7c18de6993599d9f7c11cd628b1f
+size 5459816
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/4_detail.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/4_detail.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..a3864a259bd811170b8c5d6237a58ca2f581a1f3
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/4_detail.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ed75094502d99d75842ef8a87591c48594113b6954e5aecfcc2f32249fe310ca
+size 13887669
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/4_story.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/4_story.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..8fa21ee60321d3e59a4879a7ba52e6f3c5f99717
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/4_story.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fa09b7c64b6fee25fbcdb443758f845769158f46382586aeb3e591a74ce8a0b6
+size 32831427
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/5.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/5.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..fa6beaca5587ce551416430715adbf8ef8d8d73a
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/5.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1b4c140fa27589df210aff07cd47f2bc654e5bbcb91fbc265e144faa11d91b42
+size 7171327
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/6.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/6.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..9894d6c5f164e54b105a2f67c3d35d669f75f9d7
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/6.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:718af5d6c334ec68cdc2ad8d8a96031e85a5c34d5b47f9c70f4e59c9fe9d5320
+size 6859769
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/7.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/7.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..756a29542b214008aaa2c484f10fac876ecb87b5
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/7.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:40fa036fb9baee59654488f7a2fc7eeea4deb0c566806d75cb6e2d680125e7f0
+size 6132263
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/8.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/8.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..6d6ef8dea70ad7c3ee7d91c887fc0e7a610017ca
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/8.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:94f265640ed3976841f34ca16ecf612bc5cadbdabdcde6eeb64a69bf554dcd7c
+size 6304013
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/9.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/9.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..c8d9337d2bc7222e101c6362dad2fd639212c8c0
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/9.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a426989ac25d4468f694a0f5be009683443f1f4044ec136e98a15fe9a0724536
+size 6122455
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/9_detail.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/9_detail.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..1964e40958958406020a5bedfda2558881b69dc8
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/9_detail.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a8f2c08c4df5c4c4361e9c58497a15d1eacddf6fe88e704f56680443c0a2ebbb
+size 14096889
diff --git a/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/9_story.mp4 b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/9_story.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..8c078464785e9a02b5ff21cc86f9cfbe5d12d025
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/lessonsvideos/9_story.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2e36f6e3ac364acc9c5301c199933f3cbe9006dd1ce504de1c8e778f1f9d7f37
+size 26083081
diff --git a/dist/gramm-ai/browser/assets/staticchat/no_db.mp4 b/dist/gramm-ai/browser/assets/staticchat/no_db.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..24513c9d67c595809404ed0b23faf6c4d9a60e31
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/no_db.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0560d774b8f7f6cb584487f67ef9d77d54e0a7a30e6b3c02969c6d883da04522
+size 1556617
diff --git a/dist/gramm-ai/browser/assets/staticchat/not_understand.mp4 b/dist/gramm-ai/browser/assets/staticchat/not_understand.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..e816ea28f017188a835a5e671cc9205b5e24ec2d
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/not_understand.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d3a400aa3d5570e4599322a3ec0dba6e1617a535219a0b412545936d169e8e87
+size 1971573
diff --git a/dist/gramm-ai/browser/assets/staticchat/out_of_topic.mp4 b/dist/gramm-ai/browser/assets/staticchat/out_of_topic.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..08c19c748838eb49190ef0f425d0a53f233b70fa
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/out_of_topic.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c3cbd461bdff984d4243881d523d3d8de01f3a9a84033397a2f356cbfb92850c
+size 1630865
diff --git a/dist/gramm-ai/browser/assets/staticchat/pause.png b/dist/gramm-ai/browser/assets/staticchat/pause.png
new file mode 100644
index 0000000000000000000000000000000000000000..ca251448acdd7978c7240b21adcbb8d4f3320d36
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/pause.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:45890209251f3887c95526467fdeaef223a09caada4e46847de8da3210cc3396
+size 28688
diff --git a/dist/gramm-ai/browser/assets/staticchat/play.png b/dist/gramm-ai/browser/assets/staticchat/play.png
new file mode 100644
index 0000000000000000000000000000000000000000..027454e11a1f30372774647c1410259a84ed7484
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/play.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5f3b5da9ce7c36ce5606b97f12c2338c10ad26e5bb911cbf521965d9ff9a70a0
+size 31496
diff --git a/dist/gramm-ai/browser/assets/staticchat/student.png b/dist/gramm-ai/browser/assets/staticchat/student.png
new file mode 100644
index 0000000000000000000000000000000000000000..12862868d4a93bebc4df4339fa76574dd1c9a53c
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/student.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fe6dfd39bc28f80ba0322e393dc01152705e3f5c53696bdf957e2803ad49af1e
+size 15859
diff --git a/dist/gramm-ai/browser/assets/staticchat/teacher.png b/dist/gramm-ai/browser/assets/staticchat/teacher.png
new file mode 100644
index 0000000000000000000000000000000000000000..1ed578d97f03e3dd5e7bc158d626cd7a924f8424
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/teacher.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:30a95d2af30d7164b4a471c2a0ff227612bd90dbd5a6a2cabf0859b5a870f718
+size 313017
diff --git a/dist/gramm-ai/browser/assets/staticchat/you_are_welcome.mp4 b/dist/gramm-ai/browser/assets/staticchat/you_are_welcome.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..86f5ced2e21a3c6ac67dff2fcbba495d39b96166
--- /dev/null
+++ b/dist/gramm-ai/browser/assets/staticchat/you_are_welcome.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ced3c34037394ebc3cb029e76609872fa1442a0bcc2487fa820c402e81f9a877
+size 867195
diff --git a/dist/gramm-ai/browser/index.html b/dist/gramm-ai/browser/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..15c2393a4916d63923263902ac527f3fca3b2457
--- /dev/null
+++ b/dist/gramm-ai/browser/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+ Py-Learn
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dist/gramm-ai/browser/main-7QMSP564.js b/dist/gramm-ai/browser/main-7QMSP564.js
new file mode 100644
index 0000000000000000000000000000000000000000..b43a830f3a093d7c79f3a7f5001779ff1211c8ab
--- /dev/null
+++ b/dist/gramm-ai/browser/main-7QMSP564.js
@@ -0,0 +1,20 @@
+var pb=Object.defineProperty,mb=Object.defineProperties;var gb=Object.getOwnPropertyDescriptors;var lp=Object.getOwnPropertySymbols;var vb=Object.prototype.hasOwnProperty,_b=Object.prototype.propertyIsEnumerable;var dp=(e,n,t)=>n in e?pb(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,E=(e,n)=>{for(var t in n||={})vb.call(n,t)&&dp(e,t,n[t]);if(lp)for(var t of lp(n))_b.call(n,t)&&dp(e,t,n[t]);return e},ae=(e,n)=>mb(e,gb(n));var tt=(e,n,t)=>new Promise((i,r)=>{var o=c=>{try{a(t.next(c))}catch(h){r(h)}},s=c=>{try{a(t.throw(c))}catch(h){r(h)}},a=c=>c.done?i(c.value):Promise.resolve(c.value).then(o,s);a((t=t.apply(e,n)).next())});var up=null;var Pl=1,Rl=Symbol("SIGNAL");function se(e){let n=up;return up=e,n}var hp={version:0,lastCleanEpoch:0,dirty:!1,producerNode:void 0,producerLastReadVersion:void 0,producerIndexOfThis:void 0,nextProducerIndex:0,liveConsumerNode:void 0,liveConsumerIndexOfThis:void 0,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{}};function yb(e){if(!(Ll(e)&&!e.dirty)&&!(!e.dirty&&e.lastCleanEpoch===Pl)){if(!e.producerMustRecompute(e)&&!Nl(e)){e.dirty=!1,e.lastCleanEpoch=Pl;return}e.producerRecomputeValue(e),e.dirty=!1,e.lastCleanEpoch=Pl}}function fp(e){return e&&(e.nextProducerIndex=0),se(e)}function pp(e,n){if(se(n),!(!e||e.producerNode===void 0||e.producerIndexOfThis===void 0||e.producerLastReadVersion===void 0)){if(Ll(e))for(let t=e.nextProducerIndex;te.nextProducerIndex;)e.producerNode.pop(),e.producerLastReadVersion.pop(),e.producerIndexOfThis.pop()}}function Nl(e){Es(e);for(let n=0;n0}function Es(e){e.producerNode??=[],e.producerIndexOfThis??=[],e.producerLastReadVersion??=[]}function bb(e){e.liveConsumerNode??=[],e.liveConsumerIndexOfThis??=[]}function wb(){throw new Error}var Cb=wb;function gp(e){Cb=e}function L(e){return typeof e=="function"}function ji(e){let t=e(i=>{Error.call(i),i.stack=new Error().stack});return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t}var Is=ji(e=>function(t){e(this),this.message=t?`${t.length} errors occurred during unsubscription:
+${t.map((i,r)=>`${r+1}) ${i.toString()}`).join(`
+ `)}`:"",this.name="UnsubscriptionError",this.errors=t});function si(e,n){if(e){let t=e.indexOf(n);0<=t&&e.splice(t,1)}}var _e=class e{constructor(n){this.initialTeardown=n,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let n;if(!this.closed){this.closed=!0;let{_parentage:t}=this;if(t)if(this._parentage=null,Array.isArray(t))for(let o of t)o.remove(this);else t.remove(this);let{initialTeardown:i}=this;if(L(i))try{i()}catch(o){n=o instanceof Is?o.errors:[o]}let{_finalizers:r}=this;if(r){this._finalizers=null;for(let o of r)try{vp(o)}catch(s){n=n??[],s instanceof Is?n=[...n,...s.errors]:n.push(s)}}if(n)throw new Is(n)}}add(n){var t;if(n&&n!==this)if(this.closed)vp(n);else{if(n instanceof e){if(n.closed||n._hasParent(this))return;n._addParent(this)}(this._finalizers=(t=this._finalizers)!==null&&t!==void 0?t:[]).push(n)}}_hasParent(n){let{_parentage:t}=this;return t===n||Array.isArray(t)&&t.includes(n)}_addParent(n){let{_parentage:t}=this;this._parentage=Array.isArray(t)?(t.push(n),t):t?[t,n]:n}_removeParent(n){let{_parentage:t}=this;t===n?this._parentage=null:Array.isArray(t)&&si(t,n)}remove(n){let{_finalizers:t}=this;t&&si(t,n),n instanceof e&&n._removeParent(this)}};_e.EMPTY=(()=>{let e=new _e;return e.closed=!0,e})();var Vl=_e.EMPTY;function Ss(e){return e instanceof _e||e&&"closed"in e&&L(e.remove)&&L(e.add)&&L(e.unsubscribe)}function vp(e){L(e)?e():e.unsubscribe()}var Nt={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var Bi={setTimeout(e,n,...t){let{delegate:i}=Bi;return i?.setTimeout?i.setTimeout(e,n,...t):setTimeout(e,n,...t)},clearTimeout(e){let{delegate:n}=Bi;return(n?.clearTimeout||clearTimeout)(e)},delegate:void 0};function Ms(e){Bi.setTimeout(()=>{let{onUnhandledError:n}=Nt;if(n)n(e);else throw e})}function Wr(){}var _p=jl("C",void 0,void 0);function yp(e){return jl("E",void 0,e)}function bp(e){return jl("N",e,void 0)}function jl(e,n,t){return{kind:e,value:n,error:t}}var ai=null;function Ui(e){if(Nt.useDeprecatedSynchronousErrorHandling){let n=!ai;if(n&&(ai={errorThrown:!1,error:null}),e(),n){let{errorThrown:t,error:i}=ai;if(ai=null,t)throw i}}else e()}function wp(e){Nt.useDeprecatedSynchronousErrorHandling&&ai&&(ai.errorThrown=!0,ai.error=e)}var ci=class extends _e{constructor(n){super(),this.isStopped=!1,n?(this.destination=n,Ss(n)&&n.add(this)):this.destination=Eb}static create(n,t,i){return new $i(n,t,i)}next(n){this.isStopped?Ul(bp(n),this):this._next(n)}error(n){this.isStopped?Ul(yp(n),this):(this.isStopped=!0,this._error(n))}complete(){this.isStopped?Ul(_p,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(n){this.destination.next(n)}_error(n){try{this.destination.error(n)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}},xb=Function.prototype.bind;function Bl(e,n){return xb.call(e,n)}var $l=class{constructor(n){this.partialObserver=n}next(n){let{partialObserver:t}=this;if(t.next)try{t.next(n)}catch(i){Ts(i)}}error(n){let{partialObserver:t}=this;if(t.error)try{t.error(n)}catch(i){Ts(i)}else Ts(n)}complete(){let{partialObserver:n}=this;if(n.complete)try{n.complete()}catch(t){Ts(t)}}},$i=class extends ci{constructor(n,t,i){super();let r;if(L(n)||!n)r={next:n??void 0,error:t??void 0,complete:i??void 0};else{let o;this&&Nt.useDeprecatedNextContext?(o=Object.create(n),o.unsubscribe=()=>this.unsubscribe(),r={next:n.next&&Bl(n.next,o),error:n.error&&Bl(n.error,o),complete:n.complete&&Bl(n.complete,o)}):r=n}this.destination=new $l(r)}};function Ts(e){Nt.useDeprecatedSynchronousErrorHandling?wp(e):Ms(e)}function Db(e){throw e}function Ul(e,n){let{onStoppedNotification:t}=Nt;t&&Bi.setTimeout(()=>t(e,n))}var Eb={closed:!0,next:Wr,error:Db,complete:Wr};var Hi=typeof Symbol=="function"&&Symbol.observable||"@@observable";function nt(e){return e}function Hl(...e){return zl(e)}function zl(e){return e.length===0?nt:e.length===1?e[0]:function(t){return e.reduce((i,r)=>r(i),t)}}var Z=(()=>{class e{constructor(t){t&&(this._subscribe=t)}lift(t){let i=new e;return i.source=this,i.operator=t,i}subscribe(t,i,r){let o=Sb(t)?t:new $i(t,i,r);return Ui(()=>{let{operator:s,source:a}=this;o.add(s?s.call(o,a):a?this._subscribe(o):this._trySubscribe(o))}),o}_trySubscribe(t){try{return this._subscribe(t)}catch(i){t.error(i)}}forEach(t,i){return i=Cp(i),new i((r,o)=>{let s=new $i({next:a=>{try{t(a)}catch(c){o(c),s.unsubscribe()}},error:o,complete:r});this.subscribe(s)})}_subscribe(t){var i;return(i=this.source)===null||i===void 0?void 0:i.subscribe(t)}[Hi](){return this}pipe(...t){return zl(t)(this)}toPromise(t){return t=Cp(t),new t((i,r)=>{let o;this.subscribe(s=>o=s,s=>r(s),()=>i(o))})}}return e.create=n=>new e(n),e})();function Cp(e){var n;return(n=e??Nt.Promise)!==null&&n!==void 0?n:Promise}function Ib(e){return e&&L(e.next)&&L(e.error)&&L(e.complete)}function Sb(e){return e&&e instanceof ci||Ib(e)&&Ss(e)}function Gl(e){return L(e?.lift)}function J(e){return n=>{if(Gl(n))return n.lift(function(t){try{return e(t,this)}catch(i){this.error(i)}});throw new TypeError("Unable to lift unknown Observable type")}}function q(e,n,t,i,r){return new Wl(e,n,t,i,r)}var Wl=class extends ci{constructor(n,t,i,r,o,s){super(n),this.onFinalize=o,this.shouldUnsubscribe=s,this._next=t?function(a){try{t(a)}catch(c){n.error(c)}}:super._next,this._error=r?function(a){try{r(a)}catch(c){n.error(c)}finally{this.unsubscribe()}}:super._error,this._complete=i?function(){try{i()}catch(a){n.error(a)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var n;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){let{closed:t}=this;super.unsubscribe(),!t&&((n=this.onFinalize)===null||n===void 0||n.call(this))}}};function zi(){return J((e,n)=>{let t=null;e._refCount++;let i=q(n,void 0,void 0,void 0,()=>{if(!e||e._refCount<=0||0<--e._refCount){t=null;return}let r=e._connection,o=t;t=null,r&&(!o||r===o)&&r.unsubscribe(),n.unsubscribe()});e.subscribe(i),i.closed||(t=e.connect())})}var Gi=class extends Z{constructor(n,t){super(),this.source=n,this.subjectFactory=t,this._subject=null,this._refCount=0,this._connection=null,Gl(n)&&(this.lift=n.lift)}_subscribe(n){return this.getSubject().subscribe(n)}getSubject(){let n=this._subject;return(!n||n.isStopped)&&(this._subject=this.subjectFactory()),this._subject}_teardown(){this._refCount=0;let{_connection:n}=this;this._subject=this._connection=null,n?.unsubscribe()}connect(){let n=this._connection;if(!n){n=this._connection=new _e;let t=this.getSubject();n.add(this.source.subscribe(q(t,void 0,()=>{this._teardown(),t.complete()},i=>{this._teardown(),t.error(i)},()=>this._teardown()))),n.closed&&(this._connection=null,n=_e.EMPTY)}return n}refCount(){return zi()(this)}};var xp=ji(e=>function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});var B=(()=>{class e extends Z{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(t){let i=new As(this,this);return i.operator=t,i}_throwIfClosed(){if(this.closed)throw new xp}next(t){Ui(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(let i of this.currentObservers)i.next(t)}})}error(t){Ui(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=t;let{observers:i}=this;for(;i.length;)i.shift().error(t)}})}complete(){Ui(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;let{observers:t}=this;for(;t.length;)t.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var t;return((t=this.observers)===null||t===void 0?void 0:t.length)>0}_trySubscribe(t){return this._throwIfClosed(),super._trySubscribe(t)}_subscribe(t){return this._throwIfClosed(),this._checkFinalizedStatuses(t),this._innerSubscribe(t)}_innerSubscribe(t){let{hasError:i,isStopped:r,observers:o}=this;return i||r?Vl:(this.currentObservers=null,o.push(t),new _e(()=>{this.currentObservers=null,si(o,t)}))}_checkFinalizedStatuses(t){let{hasError:i,thrownError:r,isStopped:o}=this;i?t.error(r):o&&t.complete()}asObservable(){let t=new Z;return t.source=this,t}}return e.create=(n,t)=>new As(n,t),e})(),As=class extends B{constructor(n,t){super(),this.destination=n,this.source=t}next(n){var t,i;(i=(t=this.destination)===null||t===void 0?void 0:t.next)===null||i===void 0||i.call(t,n)}error(n){var t,i;(i=(t=this.destination)===null||t===void 0?void 0:t.error)===null||i===void 0||i.call(t,n)}complete(){var n,t;(t=(n=this.destination)===null||n===void 0?void 0:n.complete)===null||t===void 0||t.call(n)}_subscribe(n){var t,i;return(i=(t=this.source)===null||t===void 0?void 0:t.subscribe(n))!==null&&i!==void 0?i:Vl}};var Ce=class extends B{constructor(n){super(),this._value=n}get value(){return this.getValue()}_subscribe(n){let t=super._subscribe(n);return!t.closed&&n.next(this._value),t}getValue(){let{hasError:n,thrownError:t,_value:i}=this;if(n)throw t;return this._throwIfClosed(),i}next(n){super.next(this._value=n)}};var ql={now(){return(ql.delegate||Date).now()},delegate:void 0};var Os=class extends _e{constructor(n,t){super()}schedule(n,t=0){return this}};var qr={setInterval(e,n,...t){let{delegate:i}=qr;return i?.setInterval?i.setInterval(e,n,...t):setInterval(e,n,...t)},clearInterval(e){let{delegate:n}=qr;return(n?.clearInterval||clearInterval)(e)},delegate:void 0};var ks=class extends Os{constructor(n,t){super(n,t),this.scheduler=n,this.work=t,this.pending=!1}schedule(n,t=0){var i;if(this.closed)return this;this.state=n;let r=this.id,o=this.scheduler;return r!=null&&(this.id=this.recycleAsyncId(o,r,t)),this.pending=!0,this.delay=t,this.id=(i=this.id)!==null&&i!==void 0?i:this.requestAsyncId(o,this.id,t),this}requestAsyncId(n,t,i=0){return qr.setInterval(n.flush.bind(n,this),i)}recycleAsyncId(n,t,i=0){if(i!=null&&this.delay===i&&this.pending===!1)return t;t!=null&&qr.clearInterval(t)}execute(n,t){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;let i=this._execute(n,t);if(i)return i;this.pending===!1&&this.id!=null&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))}_execute(n,t){let i=!1,r;try{this.work(n)}catch(o){i=!0,r=o||new Error("Scheduled action threw falsy error")}if(i)return this.unsubscribe(),r}unsubscribe(){if(!this.closed){let{id:n,scheduler:t}=this,{actions:i}=t;this.work=this.state=this.scheduler=null,this.pending=!1,si(i,this),n!=null&&(this.id=this.recycleAsyncId(t,n,null)),this.delay=null,super.unsubscribe()}}};var Wi=class e{constructor(n,t=e.now){this.schedulerActionCtor=n,this.now=t}schedule(n,t=0,i){return new this.schedulerActionCtor(this,n).schedule(i,t)}};Wi.now=ql.now;var Ps=class extends Wi{constructor(n,t=Wi.now){super(n,t),this.actions=[],this._active=!1}flush(n){let{actions:t}=this;if(this._active){t.push(n);return}let i;this._active=!0;do if(i=n.execute(n.state,n.delay))break;while(n=t.shift());if(this._active=!1,i){for(;n=t.shift();)n.unsubscribe();throw i}}};var Yr=new Ps(ks),Dp=Yr;var it=new Z(e=>e.complete());function Rs(e){return e&&L(e.schedule)}function Yl(e){return e[e.length-1]}function Ns(e){return L(Yl(e))?e.pop():void 0}function Kt(e){return Rs(Yl(e))?e.pop():void 0}function Ep(e,n){return typeof Yl(e)=="number"?e.pop():n}function Sp(e,n,t,i){function r(o){return o instanceof t?o:new t(function(s){s(o)})}return new(t||(t=Promise))(function(o,s){function a(f){try{h(i.next(f))}catch(p){s(p)}}function c(f){try{h(i.throw(f))}catch(p){s(p)}}function h(f){f.done?o(f.value):r(f.value).then(a,c)}h((i=i.apply(e,n||[])).next())})}function Ip(e){var n=typeof Symbol=="function"&&Symbol.iterator,t=n&&e[n],i=0;if(t)return t.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&i>=e.length&&(e=void 0),{value:e&&e[i++],done:!e}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")}function li(e){return this instanceof li?(this.v=e,this):new li(e)}function Mp(e,n,t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i=t.apply(e,n||[]),r,o=[];return r=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),a("next"),a("throw"),a("return",s),r[Symbol.asyncIterator]=function(){return this},r;function s(_){return function(x){return Promise.resolve(x).then(_,p)}}function a(_,x){i[_]&&(r[_]=function(M){return new Promise(function(k,V){o.push([_,M,k,V])>1||c(_,M)})},x&&(r[_]=x(r[_])))}function c(_,x){try{h(i[_](x))}catch(M){b(o[0][3],M)}}function h(_){_.value instanceof li?Promise.resolve(_.value.v).then(f,p):b(o[0][2],_)}function f(_){c("next",_)}function p(_){c("throw",_)}function b(_,x){_(x),o.shift(),o.length&&c(o[0][0],o[0][1])}}function Tp(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=e[Symbol.asyncIterator],t;return n?n.call(e):(e=typeof Ip=="function"?Ip(e):e[Symbol.iterator](),t={},i("next"),i("throw"),i("return"),t[Symbol.asyncIterator]=function(){return this},t);function i(o){t[o]=e[o]&&function(s){return new Promise(function(a,c){s=e[o](s),r(a,c,s.done,s.value)})}}function r(o,s,a,c){Promise.resolve(c).then(function(h){o({value:h,done:a})},s)}}var qi=e=>e&&typeof e.length=="number"&&typeof e!="function";function Fs(e){return L(e?.then)}function Ls(e){return L(e[Hi])}function Vs(e){return Symbol.asyncIterator&&L(e?.[Symbol.asyncIterator])}function js(e){return new TypeError(`You provided ${e!==null&&typeof e=="object"?"an invalid object":`'${e}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}function Mb(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Bs=Mb();function Us(e){return L(e?.[Bs])}function $s(e){return Mp(this,arguments,function*(){let t=e.getReader();try{for(;;){let{value:i,done:r}=yield li(t.read());if(r)return yield li(void 0);yield yield li(i)}}finally{t.releaseLock()}})}function Hs(e){return L(e?.getReader)}function ye(e){if(e instanceof Z)return e;if(e!=null){if(Ls(e))return Tb(e);if(qi(e))return Ab(e);if(Fs(e))return Ob(e);if(Vs(e))return Ap(e);if(Us(e))return kb(e);if(Hs(e))return Pb(e)}throw js(e)}function Tb(e){return new Z(n=>{let t=e[Hi]();if(L(t.subscribe))return t.subscribe(n);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function Ab(e){return new Z(n=>{for(let t=0;t{e.then(t=>{n.closed||(n.next(t),n.complete())},t=>n.error(t)).then(null,Ms)})}function kb(e){return new Z(n=>{for(let t of e)if(n.next(t),n.closed)return;n.complete()})}function Ap(e){return new Z(n=>{Rb(e,n).catch(t=>n.error(t))})}function Pb(e){return Ap($s(e))}function Rb(e,n){var t,i,r,o;return Sp(this,void 0,void 0,function*(){try{for(t=Tp(e);i=yield t.next(),!i.done;){let s=i.value;if(n.next(s),n.closed)return}}catch(s){r={error:s}}finally{try{i&&!i.done&&(o=t.return)&&(yield o.call(t))}finally{if(r)throw r.error}}n.complete()})}function ht(e,n,t,i=0,r=!1){let o=n.schedule(function(){t(),r?e.add(this.schedule(null,i)):this.unsubscribe()},i);if(e.add(o),!r)return o}function zs(e,n=0){return J((t,i)=>{t.subscribe(q(i,r=>ht(i,e,()=>i.next(r),n),()=>ht(i,e,()=>i.complete(),n),r=>ht(i,e,()=>i.error(r),n)))})}function Gs(e,n=0){return J((t,i)=>{i.add(e.schedule(()=>t.subscribe(i),n))})}function Op(e,n){return ye(e).pipe(Gs(n),zs(n))}function kp(e,n){return ye(e).pipe(Gs(n),zs(n))}function Pp(e,n){return new Z(t=>{let i=0;return n.schedule(function(){i===e.length?t.complete():(t.next(e[i++]),t.closed||this.schedule())})})}function Rp(e,n){return new Z(t=>{let i;return ht(t,n,()=>{i=e[Bs](),ht(t,n,()=>{let r,o;try{({value:r,done:o}=i.next())}catch(s){t.error(s);return}o?t.complete():t.next(r)},0,!0)}),()=>L(i?.return)&&i.return()})}function Ws(e,n){if(!e)throw new Error("Iterable cannot be null");return new Z(t=>{ht(t,n,()=>{let i=e[Symbol.asyncIterator]();ht(t,n,()=>{i.next().then(r=>{r.done?t.complete():t.next(r.value)})},0,!0)})})}function Np(e,n){return Ws($s(e),n)}function Fp(e,n){if(e!=null){if(Ls(e))return Op(e,n);if(qi(e))return Pp(e,n);if(Fs(e))return kp(e,n);if(Vs(e))return Ws(e,n);if(Us(e))return Rp(e,n);if(Hs(e))return Np(e,n)}throw js(e)}function me(e,n){return n?Fp(e,n):ye(e)}function N(...e){let n=Kt(e);return me(e,n)}function Xt(e,n){let t=L(e)?e:()=>e,i=r=>r.error(t());return new Z(n?r=>n.schedule(i,0,r):i)}function qs(e){return!!e&&(e instanceof Z||L(e.lift)&&L(e.subscribe))}var Ft=ji(e=>function(){e(this),this.name="EmptyError",this.message="no elements in sequence"});function Ql(e,n){let t=typeof n=="object";return new Promise((i,r)=>{let o=!1,s;e.subscribe({next:a=>{s=a,o=!0},error:r,complete:()=>{o?i(s):t?i(n.defaultValue):r(new Ft)}})})}function Lp(e){return e instanceof Date&&!isNaN(e)}function U(e,n){return J((t,i)=>{let r=0;t.subscribe(q(i,o=>{i.next(e.call(n,o,r++))}))})}var{isArray:Nb}=Array;function Fb(e,n){return Nb(n)?e(...n):e(n)}function Yi(e){return U(n=>Fb(e,n))}var{isArray:Lb}=Array,{getPrototypeOf:Vb,prototype:jb,keys:Bb}=Object;function Ys(e){if(e.length===1){let n=e[0];if(Lb(n))return{args:n,keys:null};if(Ub(n)){let t=Bb(n);return{args:t.map(i=>n[i]),keys:t}}}return{args:e,keys:null}}function Ub(e){return e&&typeof e=="object"&&Vb(e)===jb}function Qs(e,n){return e.reduce((t,i,r)=>(t[i]=n[r],t),{})}function di(...e){let n=Kt(e),t=Ns(e),{args:i,keys:r}=Ys(e);if(i.length===0)return me([],n);let o=new Z($b(i,n,r?s=>Qs(r,s):nt));return t?o.pipe(Yi(t)):o}function $b(e,n,t=nt){return i=>{Vp(n,()=>{let{length:r}=e,o=new Array(r),s=r,a=r;for(let c=0;c{let h=me(e[c],n),f=!1;h.subscribe(q(i,p=>{o[c]=p,f||(f=!0,a--),a||i.next(t(o.slice()))},()=>{--s||i.complete()}))},i)},i)}}function Vp(e,n,t){e?ht(t,e,n):n()}function jp(e,n,t,i,r,o,s,a){let c=[],h=0,f=0,p=!1,b=()=>{p&&!c.length&&!h&&n.complete()},_=M=>h{o&&n.next(M),h++;let k=!1;ye(t(M,f++)).subscribe(q(n,V=>{r?.(V),o?_(V):n.next(V)},()=>{k=!0},void 0,()=>{if(k)try{for(h--;c.length&&hx(V)):x(V)}b()}catch(V){n.error(V)}}))};return e.subscribe(q(n,_,()=>{p=!0,b()})),()=>{a?.()}}function Me(e,n,t=1/0){return L(n)?Me((i,r)=>U((o,s)=>n(i,o,r,s))(ye(e(i,r))),t):(typeof n=="number"&&(t=n),J((i,r)=>jp(i,r,e,t)))}function Jt(e=1/0){return Me(nt,e)}function Bp(){return Jt(1)}function jn(...e){return Bp()(me(e,Kt(e)))}function Bn(e){return new Z(n=>{ye(e()).subscribe(n)})}function Zl(...e){let n=Ns(e),{args:t,keys:i}=Ys(e),r=new Z(o=>{let{length:s}=t;if(!s){o.complete();return}let a=new Array(s),c=s,h=s;for(let f=0;f{p||(p=!0,h--),a[f]=b},()=>c--,void 0,()=>{(!c||!p)&&(h||o.next(i?Qs(i,a):a),o.complete())}))}});return n?r.pipe(Yi(n)):r}var Hb=["addListener","removeListener"],zb=["addEventListener","removeEventListener"],Gb=["on","off"];function Qr(e,n,t,i){if(L(t)&&(i=t,t=void 0),i)return Qr(e,n,t).pipe(Yi(i));let[r,o]=Yb(e)?zb.map(s=>a=>e[s](n,a,t)):Wb(e)?Hb.map(Up(e,n)):qb(e)?Gb.map(Up(e,n)):[];if(!r&&qi(e))return Me(s=>Qr(s,n,t))(ye(e));if(!r)throw new TypeError("Invalid event target");return new Z(s=>{let a=(...c)=>s.next(1o(a)})}function Up(e,n){return t=>i=>e[t](n,i)}function Wb(e){return L(e.addListener)&&L(e.removeListener)}function qb(e){return L(e.on)&&L(e.off)}function Yb(e){return L(e.addEventListener)&&L(e.removeEventListener)}function $p(e=0,n,t=Dp){let i=-1;return n!=null&&(Rs(n)?t=n:i=n),new Z(r=>{let o=Lp(e)?+e-t.now():e;o<0&&(o=0);let s=0;return t.schedule(function(){r.closed||(r.next(s++),0<=i?this.schedule(void 0,i):r.complete())},o)})}function Zr(...e){let n=Kt(e),t=Ep(e,1/0),i=e;return i.length?i.length===1?ye(i[0]):Jt(t)(me(i,n)):it}function be(e,n){return J((t,i)=>{let r=0;t.subscribe(q(i,o=>e.call(n,o,r++)&&i.next(o)))})}function Hp(e){return J((n,t)=>{let i=!1,r=null,o=null,s=!1,a=()=>{if(o?.unsubscribe(),o=null,i){i=!1;let h=r;r=null,t.next(h)}s&&t.complete()},c=()=>{o=null,s&&t.complete()};n.subscribe(q(t,h=>{i=!0,r=h,o||ye(e(h)).subscribe(o=q(t,a,c))},()=>{s=!0,(!i||!o||o.closed)&&t.complete()}))})}function Zs(e,n=Yr){return Hp(()=>$p(e,n))}function ft(e){return J((n,t)=>{let i=null,r=!1,o;i=n.subscribe(q(t,void 0,void 0,s=>{o=ye(e(s,ft(e)(n))),i?(i.unsubscribe(),i=null,o.subscribe(t)):r=!0})),r&&(i.unsubscribe(),i=null,o.subscribe(t))})}function zp(e,n,t,i,r){return(o,s)=>{let a=t,c=n,h=0;o.subscribe(q(s,f=>{let p=h++;c=a?e(c,f,p):(a=!0,f),i&&s.next(c)},r&&(()=>{a&&s.next(c),s.complete()})))}}function mn(e,n){return L(n)?Me(e,n,1):Me(e,1)}function Qi(e,n=Yr){return J((t,i)=>{let r=null,o=null,s=null,a=()=>{if(r){r.unsubscribe(),r=null;let h=o;o=null,i.next(h)}};function c(){let h=s+e,f=n.now();if(f{o=h,s=n.now(),r||(r=n.schedule(c,e),i.add(r))},()=>{a(),i.complete()},void 0,()=>{o=r=null}))})}function Un(e){return J((n,t)=>{let i=!1;n.subscribe(q(t,r=>{i=!0,t.next(r)},()=>{i||t.next(e),t.complete()}))})}function Ue(e){return e<=0?()=>it:J((n,t)=>{let i=0;n.subscribe(q(t,r=>{++i<=e&&(t.next(r),e<=i&&t.complete())}))})}function Kl(e){return U(()=>e)}function Zi(e,n=nt){return e=e??Qb,J((t,i)=>{let r,o=!0;t.subscribe(q(i,s=>{let a=n(s);(o||!e(r,a))&&(o=!1,r=a,i.next(s))}))})}function Qb(e,n){return e===n}function Ks(e=Zb){return J((n,t)=>{let i=!1;n.subscribe(q(t,r=>{i=!0,t.next(r)},()=>i?t.complete():t.error(e())))})}function Zb(){return new Ft}function rt(e){return J((n,t)=>{try{n.subscribe(t)}finally{t.add(e)}})}function en(e,n){let t=arguments.length>=2;return i=>i.pipe(e?be((r,o)=>e(r,o,i)):nt,Ue(1),t?Un(n):Ks(()=>new Ft))}function Ki(e){return e<=0?()=>it:J((n,t)=>{let i=[];n.subscribe(q(t,r=>{i.push(r),e{for(let r of i)t.next(r);t.complete()},void 0,()=>{i=null}))})}function Xl(e,n){let t=arguments.length>=2;return i=>i.pipe(e?be((r,o)=>e(r,o,i)):nt,Ki(1),t?Un(n):Ks(()=>new Ft))}function Jl(e,n){return J(zp(e,n,arguments.length>=2,!0))}function Kr(e){return be((n,t)=>e<=t)}function tn(...e){let n=Kt(e);return J((t,i)=>{(n?jn(e,t,n):jn(e,t)).subscribe(i)})}function $e(e,n){return J((t,i)=>{let r=null,o=0,s=!1,a=()=>s&&!r&&i.complete();t.subscribe(q(i,c=>{r?.unsubscribe();let h=0,f=o++;ye(e(c,f)).subscribe(r=q(i,p=>i.next(n?n(c,p,f,h++):p),()=>{r=null,a()}))},()=>{s=!0,a()}))})}function ot(e){return J((n,t)=>{ye(e).subscribe(q(t,()=>t.complete(),Wr)),!t.closed&&n.subscribe(t)})}function xe(e,n,t){let i=L(e)||n||t?{next:e,error:n,complete:t}:e;return i?J((r,o)=>{var s;(s=i.subscribe)===null||s===void 0||s.call(i);let a=!0;r.subscribe(q(o,c=>{var h;(h=i.next)===null||h===void 0||h.call(i,c),o.next(c)},()=>{var c;a=!1,(c=i.complete)===null||c===void 0||c.call(i),o.complete()},c=>{var h;a=!1,(h=i.error)===null||h===void 0||h.call(i,c),o.error(c)},()=>{var c,h;a&&((c=i.unsubscribe)===null||c===void 0||c.call(i)),(h=i.finalize)===null||h===void 0||h.call(i)}))}):nt}var Om="https://g.co/ng/security#xss",P=class extends Error{constructor(n,t){super(Fa(n,t)),this.code=n}};function Fa(e,n){return`${`NG0${Math.abs(e)}`}${n?": "+n:""}`}function ho(e){return{toString:e}.toString()}var Xs="__parameters__";function Kb(e){return function(...t){if(e){let i=e(...t);for(let r in i)this[r]=i[r]}}}function km(e,n,t){return ho(()=>{let i=Kb(n);function r(...o){if(this instanceof r)return i.apply(this,o),this;let s=new r(...o);return a.annotation=s,a;function a(c,h,f){let p=c.hasOwnProperty(Xs)?c[Xs]:Object.defineProperty(c,Xs,{value:[]})[Xs];for(;p.length<=f;)p.push(null);return(p[f]=p[f]||[]).push(s),c}}return t&&(r.prototype=Object.create(t.prototype)),r.prototype.ngMetadataName=e,r.annotationCls=r,r})}var Pe=globalThis;function ge(e){for(let n in e)if(e[n]===ge)return n;throw Error("Could not find renamed property on target object.")}function Xb(e,n){for(let t in n)n.hasOwnProperty(t)&&!e.hasOwnProperty(t)&&(e[t]=n[t])}function at(e){if(typeof e=="string")return e;if(Array.isArray(e))return"["+e.map(at).join(", ")+"]";if(e==null)return""+e;if(e.overriddenName)return`${e.overriddenName}`;if(e.name)return`${e.name}`;let n=e.toString();if(n==null)return""+n;let t=n.indexOf(`
+`);return t===-1?n:n.substring(0,t)}function md(e,n){return e==null||e===""?n===null?"":n:n==null||n===""?e:e+" "+n}var Jb=ge({__forward_ref__:ge});function cn(e){return e.__forward_ref__=cn,e.toString=function(){return at(this())},e}function st(e){return Pm(e)?e():e}function Pm(e){return typeof e=="function"&&e.hasOwnProperty(Jb)&&e.__forward_ref__===cn}function D(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function z(e){return{providers:e.providers||[],imports:e.imports||[]}}function La(e){return Gp(e,Nm)||Gp(e,Fm)}function Rm(e){return La(e)!==null}function Gp(e,n){return e.hasOwnProperty(n)?e[n]:null}function ew(e){let n=e&&(e[Nm]||e[Fm]);return n||null}function Wp(e){return e&&(e.hasOwnProperty(qp)||e.hasOwnProperty(tw))?e[qp]:null}var Nm=ge({\u0275prov:ge}),qp=ge({\u0275inj:ge}),Fm=ge({ngInjectableDef:ge}),tw=ge({ngInjectorDef:ge}),O=class{constructor(n,t){this._desc=n,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,typeof t=="number"?this.__NG_ELEMENT_ID__=t:t!==void 0&&(this.\u0275prov=D({token:this,providedIn:t.providedIn||"root",factory:t.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}};function Lm(e){return e&&!!e.\u0275providers}var nw=ge({\u0275cmp:ge}),iw=ge({\u0275dir:ge}),rw=ge({\u0275pipe:ge}),ow=ge({\u0275mod:ge}),ua=ge({\u0275fac:ge}),Xr=ge({__NG_ELEMENT_ID__:ge}),Yp=ge({__NG_ENV_ID__:ge});function fo(e){return typeof e=="string"?e:e==null?"":String(e)}function sw(e){return typeof e=="function"?e.name||e.toString():typeof e=="object"&&e!=null&&typeof e.type=="function"?e.type.name||e.type.toString():fo(e)}function aw(e,n){let t=n?`. Dependency path: ${n.join(" > ")} > ${e}`:"";throw new P(-200,e)}function hu(e,n){throw new P(-201,!1)}var te=function(e){return e[e.Default=0]="Default",e[e.Host=1]="Host",e[e.Self=2]="Self",e[e.SkipSelf=4]="SkipSelf",e[e.Optional=8]="Optional",e}(te||{}),gd;function Vm(){return gd}function pt(e){let n=gd;return gd=e,n}function jm(e,n,t){let i=La(e);if(i&&i.providedIn=="root")return i.value===void 0?i.value=i.factory():i.value;if(t&te.Optional)return null;if(n!==void 0)return n;hu(e,"Injector")}var cw={},eo=cw,vd="__NG_DI_FLAG__",ha="ngTempTokenPath",lw="ngTokenPath",dw=/\n/gm,uw="\u0275",Qp="__source",nr;function hw(){return nr}function $n(e){let n=nr;return nr=e,n}function fw(e,n=te.Default){if(nr===void 0)throw new P(-203,!1);return nr===null?jm(e,void 0,n):nr.get(e,n&te.Optional?null:void 0,n)}function v(e,n=te.Default){return(Vm()||fw)(st(e),n)}function S(e,n=te.Default){return v(e,Va(n))}function Va(e){return typeof e>"u"||typeof e=="number"?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function _d(e){let n=[];for(let t=0;t ");else if(typeof n=="object"){let o=[];for(let s in n)if(n.hasOwnProperty(s)){let a=n[s];o.push(s+":"+(typeof a=="string"?JSON.stringify(a):at(a)))}r=`{${o.join(", ")}}`}return`${t}${i?"("+i+")":""}[${r}]: ${e.replace(dw,`
+ `)}`}var ja=Bm(km("Optional"),8);var fu=Bm(km("SkipSelf"),4);function pi(e,n){let t=e.hasOwnProperty(ua);return t?e[ua]:null}function vw(e,n,t){if(e.length!==n.length)return!1;for(let i=0;iArray.isArray(t)?pu(t,n):n(t))}function Um(e,n,t){n>=e.length?e.push(t):e.splice(n,0,t)}function fa(e,n){return n>=e.length-1?e.pop():e.splice(n,1)[0]}function yw(e,n){let t=[];for(let i=0;in;){let o=r-2;e[r]=e[o],r--}e[n]=t,e[n+1]=i}}function mu(e,n,t){let i=po(e,n);return i>=0?e[i|1]=t:(i=~i,bw(e,i,n,t)),i}function ed(e,n){let t=po(e,n);if(t>=0)return e[t|1]}function po(e,n){return ww(e,n,1)}function ww(e,n,t){let i=0,r=e.length>>t;for(;r!==i;){let o=i+(r-i>>1),s=e[o<n?r=o:i=o+1}return~(r<n){s=o-1;break}}}for(;o-1){let o;for(;++ro?p="":p=r[f+1].toLowerCase(),i&2&&h!==p){if(Lt(i))return!1;s=!0}}}}return Lt(i)||s}function Lt(e){return(e&1)===0}function Sw(e,n,t,i){if(n===null)return-1;let r=0;if(i||!t){let o=!1;for(;r-1)for(t++;t0?'="'+a+'"':"")+"]"}else i&8?r+="."+s:i&4&&(r+=" "+s);else r!==""&&!Lt(s)&&(n+=Kp(o,r),r=""),i=s,o=o||!Lt(i);t++}return r!==""&&(n+=Kp(o,r)),n}function Pw(e){return e.map(kw).join(",")}function Rw(e){let n=[],t=[],i=1,r=2;for(;i{let n=Xm(e),t=ae(E({},n),{decls:e.decls,vars:e.vars,template:e.template,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection===zm.OnPush,directiveDefs:null,pipeDefs:null,dependencies:n.standalone&&e.dependencies||null,getStandaloneInjector:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||on.Emulated,styles:e.styles||mt,_:null,schemas:e.schemas||null,tView:null,id:""});Jm(t);let i=e.dependencies;return t.directiveDefs=Jp(i,!1),t.pipeDefs=Jp(i,!0),t.id=Lw(t),t})}function Nw(e){return zn(e)||Ym(e)}function Fw(e){return e!==null}function G(e){return ho(()=>({type:e.type,bootstrap:e.bootstrap||mt,declarations:e.declarations||mt,imports:e.imports||mt,exports:e.exports||mt,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null}))}function Xp(e,n){if(e==null)return rr;let t={};for(let i in e)if(e.hasOwnProperty(i)){let r=e[i],o,s,a=$.None;Array.isArray(r)?(a=r[0],o=r[1],s=r[2]??o):(o=r,s=r),n?(t[o]=a!==$.None?[i,a]:i,n[o]=s):t[o]=i}return t}function ce(e){return ho(()=>{let n=Xm(e);return Jm(n),n})}function vu(e){return{type:e.type,name:e.name,factory:null,pure:e.pure!==!1,standalone:e.standalone===!0,onDestroy:e.type.prototype.ngOnDestroy||null}}function zn(e){return e[nw]||null}function Ym(e){return e[iw]||null}function Qm(e){return e[rw]||null}function Zm(e){let n=zn(e)||Ym(e)||Qm(e);return n!==null?n.standalone:!1}function Km(e,n){let t=e[ow]||null;if(!t&&n===!0)throw new Error(`Type ${at(e)} does not have '\u0275mod' property.`);return t}function Xm(e){let n={};return{type:e.type,providersResolver:null,factory:null,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:n,inputTransforms:null,inputConfig:e.inputs||rr,exportAs:e.exportAs||null,standalone:e.standalone===!0,signals:e.signals===!0,selectors:e.selectors||mt,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,findHostDirectiveDefs:null,hostDirectives:null,inputs:Xp(e.inputs,n),outputs:Xp(e.outputs),debugInfo:null}}function Jm(e){e.features?.forEach(n=>n(e))}function Jp(e,n){if(!e)return null;let t=n?Qm:Nw;return()=>(typeof e=="function"?e():e).map(i=>t(i)).filter(Fw)}function Lw(e){let n=0,t=[e.selectors,e.ngContentSelectors,e.hostVars,e.hostAttrs,e.consts,e.vars,e.decls,e.encapsulation,e.standalone,e.signals,e.exportAs,JSON.stringify(e.inputs),JSON.stringify(e.outputs),Object.getOwnPropertyNames(e.type.prototype),!!e.contentQueries,!!e.viewQuery].join("|");for(let r of t)n=Math.imul(31,n)+r.charCodeAt(0)<<0;return n+=2147483648,"c"+n}function Ba(e){return{\u0275providers:e}}function Vw(...e){return{\u0275providers:eg(!0,e),\u0275fromNgModule:!0}}function eg(e,...n){let t=[],i=new Set,r,o=s=>{t.push(s)};return pu(n,s=>{let a=s;bd(a,o,[],i)&&(r||=[],r.push(a))}),r!==void 0&&tg(r,o),t}function tg(e,n){for(let t=0;t{n(o,i)})}}function bd(e,n,t,i){if(e=st(e),!e)return!1;let r=null,o=Wp(e),s=!o&&zn(e);if(!o&&!s){let c=e.ngModule;if(o=Wp(c),o)r=c;else return!1}else{if(s&&!s.standalone)return!1;r=e}let a=i.has(r);if(s){if(a)return!1;if(i.add(r),s.dependencies){let c=typeof s.dependencies=="function"?s.dependencies():s.dependencies;for(let h of c)bd(h,n,t,i)}}else if(o){if(o.imports!=null&&!a){i.add(r);let h;try{pu(o.imports,f=>{bd(f,n,t,i)&&(h||=[],h.push(f))})}finally{}h!==void 0&&tg(h,n)}if(!a){let h=pi(r)||(()=>new r);n({provide:r,useFactory:h,deps:mt},r),n({provide:Hm,useValue:r,multi:!0},r),n({provide:or,useValue:()=>v(r),multi:!0},r)}let c=o.providers;if(c!=null&&!a){let h=e;_u(c,f=>{n(f,h)})}}else return!1;return r!==e&&e.providers!==void 0}function _u(e,n){for(let t of e)Lm(t)&&(t=t.\u0275providers),Array.isArray(t)?_u(t,n):n(t)}var jw=ge({provide:String,useValue:ge});function ng(e){return e!==null&&typeof e=="object"&&jw in e}function Bw(e){return!!(e&&e.useExisting)}function Uw(e){return!!(e&&e.useFactory)}function sr(e){return typeof e=="function"}function $w(e){return!!e.useClass}var Ua=new O(""),oa={},Hw={},td;function yu(){return td===void 0&&(td=new pa),td}var Ze=class{},no=class extends Ze{get destroyed(){return this._destroyed}constructor(n,t,i,r){super(),this.parent=t,this.source=i,this.scopes=r,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,Cd(n,s=>this.processProvider(s)),this.records.set($m,Xi(void 0,this)),r.has("environment")&&this.records.set(Ze,Xi(void 0,this));let o=this.records.get(Ua);o!=null&&typeof o.value=="string"&&this.scopes.add(o.value),this.injectorDefTypes=new Set(this.get(Hm,mt,te.Self))}destroy(){this.assertNotDestroyed(),this._destroyed=!0;let n=se(null);try{for(let i of this._ngOnDestroyHooks)i.ngOnDestroy();let t=this._onDestroyHooks;this._onDestroyHooks=[];for(let i of t)i()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),se(n)}}onDestroy(n){return this.assertNotDestroyed(),this._onDestroyHooks.push(n),()=>this.removeOnDestroy(n)}runInContext(n){this.assertNotDestroyed();let t=$n(this),i=pt(void 0),r;try{return n()}finally{$n(t),pt(i)}}get(n,t=eo,i=te.Default){if(this.assertNotDestroyed(),n.hasOwnProperty(Yp))return n[Yp](this);i=Va(i);let r,o=$n(this),s=pt(void 0);try{if(!(i&te.SkipSelf)){let c=this.records.get(n);if(c===void 0){let h=Yw(n)&&La(n);h&&this.injectableDefInScope(h)?c=Xi(wd(n),oa):c=null,this.records.set(n,c)}if(c!=null)return this.hydrate(n,c)}let a=i&te.Self?yu():this.parent;return t=i&te.Optional&&t===eo?null:t,a.get(n,t)}catch(a){if(a.name==="NullInjectorError"){if((a[ha]=a[ha]||[]).unshift(at(n)),o)throw a;return mw(a,n,"R3InjectorError",this.source)}else throw a}finally{pt(s),$n(o)}}resolveInjectorInitializers(){let n=se(null),t=$n(this),i=pt(void 0),r;try{let o=this.get(or,mt,te.Self);for(let s of o)s()}finally{$n(t),pt(i),se(n)}}toString(){let n=[],t=this.records;for(let i of t.keys())n.push(at(i));return`R3Injector[${n.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new P(205,!1)}processProvider(n){n=st(n);let t=sr(n)?n:st(n&&n.provide),i=Gw(n);if(!sr(n)&&n.multi===!0){let r=this.records.get(t);r||(r=Xi(void 0,oa,!0),r.factory=()=>_d(r.multi),this.records.set(t,r)),t=n,r.multi.push(n)}this.records.set(t,i)}hydrate(n,t){let i=se(null);try{return t.value===oa&&(t.value=Hw,t.value=t.factory()),typeof t.value=="object"&&t.value&&qw(t.value)&&this._ngOnDestroyHooks.add(t.value),t.value}finally{se(i)}}injectableDefInScope(n){if(!n.providedIn)return!1;let t=st(n.providedIn);return typeof t=="string"?t==="any"||this.scopes.has(t):this.injectorDefTypes.has(t)}removeOnDestroy(n){let t=this._onDestroyHooks.indexOf(n);t!==-1&&this._onDestroyHooks.splice(t,1)}};function wd(e){let n=La(e),t=n!==null?n.factory:pi(e);if(t!==null)return t;if(e instanceof O)throw new P(204,!1);if(e instanceof Function)return zw(e);throw new P(204,!1)}function zw(e){if(e.length>0)throw new P(204,!1);let t=ew(e);return t!==null?()=>t.factory(e):()=>new e}function Gw(e){if(ng(e))return Xi(void 0,e.useValue);{let n=ig(e);return Xi(n,oa)}}function ig(e,n,t){let i;if(sr(e)){let r=st(e);return pi(r)||wd(r)}else if(ng(e))i=()=>st(e.useValue);else if(Uw(e))i=()=>e.useFactory(..._d(e.deps||[]));else if(Bw(e))i=()=>v(st(e.useExisting));else{let r=st(e&&(e.useClass||e.provide));if(Ww(e))i=()=>new r(..._d(e.deps));else return pi(r)||wd(r)}return i}function Xi(e,n,t=!1){return{factory:e,value:n,multi:t?[]:void 0}}function Ww(e){return!!e.deps}function qw(e){return e!==null&&typeof e=="object"&&typeof e.ngOnDestroy=="function"}function Yw(e){return typeof e=="function"||typeof e=="object"&&e instanceof O}function Cd(e,n){for(let t of e)Array.isArray(t)?Cd(t,n):t&&Lm(t)?Cd(t.\u0275providers,n):n(t)}function Ht(e,n){e instanceof no&&e.assertNotDestroyed();let t,i=$n(e),r=pt(void 0);try{return n()}finally{$n(i),pt(r)}}function rg(){return Vm()!==void 0||hw()!=null}function Qw(e){if(!rg())throw new P(-203,!1)}function Zw(e){let n=Pe.ng;if(n&&n.\u0275compilerFacade)return n.\u0275compilerFacade;throw new Error("JIT compiler unavailable")}function Kw(e){return typeof e=="function"}var _n=0,Y=1,j=2,Ge=3,jt=4,wt=5,io=6,ro=7,Mt=8,ar=9,Bt=10,Ee=11,oo=12,em=13,hr=14,Ut=15,mo=16,Ji=17,gn=18,$a=19,og=20,Hn=21,nd=22,mi=23,ct=25,sg=1;var gi=7,ma=8,cr=9,gt=10,bu=function(e){return e[e.None=0]="None",e[e.HasTransplantedViews=2]="HasTransplantedViews",e}(bu||{});function hi(e){return Array.isArray(e)&&typeof e[sg]=="object"}function yn(e){return Array.isArray(e)&&e[sg]===!0}function wu(e){return(e.flags&4)!==0}function Ha(e){return e.componentOffset>-1}function za(e){return(e.flags&1)===1}function Gn(e){return!!e.template}function Xw(e){return(e[j]&512)!==0}var xd=class{constructor(n,t,i){this.previousValue=n,this.currentValue=t,this.firstChange=i}isFirstChange(){return this.firstChange}};function ag(e,n,t,i){n!==null?n.applyValueToInputSignal(n,i):e[t]=i}function Ke(){return cg}function cg(e){return e.type.prototype.ngOnChanges&&(e.setInput=eC),Jw}Ke.ngInherit=!0;function Jw(){let e=dg(this),n=e?.current;if(n){let t=e.previous;if(t===rr)e.previous=n;else for(let i in n)t[i]=n[i];e.current=null,this.ngOnChanges(n)}}function eC(e,n,t,i,r){let o=this.declaredInputs[i],s=dg(e)||tC(e,{previous:rr,current:null}),a=s.current||(s.current={}),c=s.previous,h=c[o];a[o]=new xd(h&&h.currentValue,t,c===rr),ag(e,n,r,t)}var lg="__ngSimpleChanges__";function dg(e){return e[lg]||null}function tC(e,n){return e[lg]=n}var tm=null;var nn=function(e,n,t){tm?.(e,n,t)},ug="svg",nC="math",iC=!1;function rC(){return iC}function sn(e){for(;Array.isArray(e);)e=e[_n];return e}function hg(e,n){return sn(n[e])}function Tt(e,n){return sn(n[e.index])}function Cu(e,n){return e.data[n]}function fg(e,n){return e[n]}function Yn(e,n){let t=n[e];return hi(t)?t:t[_n]}function oC(e){return(e[j]&4)===4}function xu(e){return(e[j]&128)===128}function sC(e){return yn(e[Ge])}function lr(e,n){return n==null?null:e[n]}function pg(e){e[Ji]=0}function aC(e){e[j]&1024||(e[j]|=1024,xu(e)&&so(e))}function cC(e,n){for(;e>0;)n=n[hr],e--;return n}function Du(e){return!!(e[j]&9216||e[mi]?.dirty)}function Dd(e){e[Bt].changeDetectionScheduler?.notify(1),Du(e)?so(e):e[j]&64&&(rC()?(e[j]|=1024,so(e)):e[Bt].changeDetectionScheduler?.notify())}function so(e){e[Bt].changeDetectionScheduler?.notify();let n=ao(e);for(;n!==null&&!(n[j]&8192||(n[j]|=8192,!xu(n)));)n=ao(n)}function mg(e,n){if((e[j]&256)===256)throw new P(911,!1);e[Hn]===null&&(e[Hn]=[]),e[Hn].push(n)}function lC(e,n){if(e[Hn]===null)return;let t=e[Hn].indexOf(n);t!==-1&&e[Hn].splice(t,1)}function ao(e){let n=e[Ge];return yn(n)?n[Ge]:n}var K={lFrame:xg(null),bindingsEnabled:!0,skipHydrationRootTNode:null};function dC(){return K.lFrame.elementDepthCount}function uC(){K.lFrame.elementDepthCount++}function hC(){K.lFrame.elementDepthCount--}function gg(){return K.bindingsEnabled}function vg(){return K.skipHydrationRootTNode!==null}function fC(e){return K.skipHydrationRootTNode===e}function pC(){K.skipHydrationRootTNode=null}function ie(){return K.lFrame.lView}function Te(){return K.lFrame.tView}function T(e){return K.lFrame.contextLView=e,e[Mt]}function A(e){return K.lFrame.contextLView=null,e}function Xe(){let e=_g();for(;e!==null&&e.type===64;)e=e.parent;return e}function _g(){return K.lFrame.currentTNode}function mC(){let e=K.lFrame,n=e.currentTNode;return e.isParent?n:n.parent}function Ci(e,n){let t=K.lFrame;t.currentTNode=e,t.isParent=n}function Eu(){return K.lFrame.isParent}function Iu(){K.lFrame.isParent=!1}function gC(){return K.lFrame.contextLView}function vC(){let e=K.lFrame,n=e.bindingRootIndex;return n===-1&&(n=e.bindingRootIndex=e.tView.bindingStartIndex),n}function _C(e){return K.lFrame.bindingIndex=e}function fr(){return K.lFrame.bindingIndex++}function yg(e){let n=K.lFrame,t=n.bindingIndex;return n.bindingIndex=n.bindingIndex+e,t}function yC(){return K.lFrame.inI18n}function bC(e,n){let t=K.lFrame;t.bindingIndex=t.bindingRootIndex=e,Ed(n)}function wC(){return K.lFrame.currentDirectiveIndex}function Ed(e){K.lFrame.currentDirectiveIndex=e}function CC(e){let n=K.lFrame.currentDirectiveIndex;return n===-1?null:e[n]}function bg(){return K.lFrame.currentQueryIndex}function Su(e){K.lFrame.currentQueryIndex=e}function xC(e){let n=e[Y];return n.type===2?n.declTNode:n.type===1?e[wt]:null}function wg(e,n,t){if(t&te.SkipSelf){let r=n,o=e;for(;r=r.parent,r===null&&!(t&te.Host);)if(r=xC(o),r===null||(o=o[hr],r.type&10))break;if(r===null)return!1;n=r,e=o}let i=K.lFrame=Cg();return i.currentTNode=n,i.lView=e,!0}function Mu(e){let n=Cg(),t=e[Y];K.lFrame=n,n.currentTNode=t.firstChild,n.lView=e,n.tView=t,n.contextLView=e,n.bindingIndex=t.bindingStartIndex,n.inI18n=!1}function Cg(){let e=K.lFrame,n=e===null?null:e.child;return n===null?xg(e):n}function xg(e){let n={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return e!==null&&(e.child=n),n}function Dg(){let e=K.lFrame;return K.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}var Eg=Dg;function Tu(){let e=Dg();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function DC(e){return(K.lFrame.contextLView=cC(e,K.lFrame.contextLView))[Mt]}function xi(){return K.lFrame.selectedIndex}function vi(e){K.lFrame.selectedIndex=e}function Ga(){let e=K.lFrame;return Cu(e.tView,e.selectedIndex)}function Wa(){K.lFrame.currentNamespace=ug}function Ig(){EC()}function EC(){K.lFrame.currentNamespace=null}function IC(){return K.lFrame.currentNamespace}var Sg=!0;function qa(){return Sg}function Ya(e){Sg=e}function SC(e,n,t){let{ngOnChanges:i,ngOnInit:r,ngDoCheck:o}=n.type.prototype;if(i){let s=cg(n);(t.preOrderHooks??=[]).push(e,s),(t.preOrderCheckHooks??=[]).push(e,s)}r&&(t.preOrderHooks??=[]).push(0-e,r),o&&((t.preOrderHooks??=[]).push(e,o),(t.preOrderCheckHooks??=[]).push(e,o))}function Qa(e,n){for(let t=n.directiveStart,i=n.directiveEnd;t=i)break}else n[c]<0&&(e[Ji]+=65536),(a>14>16&&(e[j]&3)===n&&(e[j]+=16384,nm(a,o)):nm(a,o)}var ir=-1,_i=class{constructor(n,t,i){this.factory=n,this.resolving=!1,this.canSeeViewProviders=t,this.injectImpl=i}};function TC(e){return e instanceof _i}function AC(e){return(e.flags&8)!==0}function OC(e){return(e.flags&16)!==0}function Tg(e){return e!==ir}function ga(e){return e&32767}function kC(e){return e>>16}function va(e,n){let t=kC(e),i=n;for(;t>0;)i=i[hr],t--;return i}var Id=!0;function _a(e){let n=Id;return Id=e,n}var PC=256,Ag=PC-1,Og=5,RC=0,rn={};function NC(e,n,t){let i;typeof t=="string"?i=t.charCodeAt(0)||0:t.hasOwnProperty(Xr)&&(i=t[Xr]),i==null&&(i=t[Xr]=RC++);let r=i&Ag,o=1<>Og)]|=o}function ya(e,n){let t=kg(e,n);if(t!==-1)return t;let i=n[Y];i.firstCreatePass&&(e.injectorIndex=n.length,rd(i.data,e),rd(n,null),rd(i.blueprint,null));let r=Au(e,n),o=e.injectorIndex;if(Tg(r)){let s=ga(r),a=va(r,n),c=a[Y].data;for(let h=0;h<8;h++)n[o+h]=a[s+h]|c[s+h]}return n[o+8]=r,o}function rd(e,n){e.push(0,0,0,0,0,0,0,0,n)}function kg(e,n){return e.injectorIndex===-1||e.parent&&e.parent.injectorIndex===e.injectorIndex||n[e.injectorIndex+8]===null?-1:e.injectorIndex}function Au(e,n){if(e.parent&&e.parent.injectorIndex!==-1)return e.parent.injectorIndex;let t=0,i=null,r=n;for(;r!==null;){if(i=Lg(r),i===null)return ir;if(t++,r=r[hr],i.injectorIndex!==-1)return i.injectorIndex|t<<16}return ir}function Sd(e,n,t){NC(e,n,t)}function FC(e,n){if(n==="class")return e.classes;if(n==="style")return e.styles;let t=e.attrs;if(t){let i=t.length,r=0;for(;r>20,p=i?a:a+f,b=r?a+f:h;for(let _=p;_=c&&x.type===t)return _}if(r){let _=s[c];if(_&&Gn(_)&&_.type===t)return c}return null}function yi(e,n,t,i){let r=e[t],o=n.data;if(TC(r)){let s=r;s.resolving&&aw(sw(o[t]));let a=_a(s.canSeeViewProviders);s.resolving=!0;let c,h=s.injectImpl?pt(s.injectImpl):null,f=wg(e,i,te.Default);try{r=e[t]=s.factory(void 0,o,e,i),n.firstCreatePass&&t>=i.directiveStart&&SC(t,o[t],n)}finally{h!==null&&pt(h),_a(a),s.resolving=!1,Eg()}}return r}function VC(e){if(typeof e=="string")return e.charCodeAt(0)||0;let n=e.hasOwnProperty(Xr)?e[Xr]:void 0;return typeof n=="number"?n>=0?n&Ag:jC:n}function im(e,n,t){let i=1<>Og)]&i)}function rm(e,n){return!(e&te.Self)&&!(e&te.Host&&n)}var fi=class{constructor(n,t){this._tNode=n,this._lView=t}get(n,t,i){return Ng(this._tNode,this._lView,n,Va(i),t)}};function jC(){return new fi(Xe(),ie())}function bn(e){return ho(()=>{let n=e.prototype.constructor,t=n[ua]||Md(n),i=Object.prototype,r=Object.getPrototypeOf(e.prototype).constructor;for(;r&&r!==i;){let o=r[ua]||Md(r);if(o&&o!==t)return o;r=Object.getPrototypeOf(r)}return o=>new o})}function Md(e){return Pm(e)?()=>{let n=Md(st(e));return n&&n()}:pi(e)}function BC(e,n,t,i,r){let o=e,s=n;for(;o!==null&&s!==null&&s[j]&2048&&!(s[j]&512);){let a=Fg(o,s,t,i|te.Self,rn);if(a!==rn)return a;let c=o.parent;if(!c){let h=s[og];if(h){let f=h.get(t,rn,i);if(f!==rn)return f}c=Lg(s),s=s[hr]}o=c}return r}function Lg(e){let n=e[Y],t=n.type;return t===2?n.declTNode:t===1?e[wt]:null}function pr(e){return FC(Xe(),e)}function om(e,n=null,t=null,i){let r=Vg(e,n,t,i);return r.resolveInjectorInitializers(),r}function Vg(e,n=null,t=null,i,r=new Set){let o=[t||mt,Vw(e)];return i=i||(typeof e=="object"?void 0:at(e)),new no(o,n||yu(),i||null,r)}var Ae=(()=>{class e{static{this.THROW_IF_NOT_FOUND=eo}static{this.NULL=new pa}static create(t,i){if(Array.isArray(t))return om({name:""},i,t,"");{let r=t.name??"";return om({name:r},t.parent,t.providers,r)}}static{this.\u0275prov=D({token:e,providedIn:"any",factory:()=>v($m)})}static{this.__NG_ELEMENT_ID__=-1}}return e})();var UC="ngOriginalError";function od(e){return e[UC]}var $t=class{constructor(){this._console=console}handleError(n){let t=this._findOriginalError(n);this._console.error("ERROR",n),t&&this._console.error("ORIGINAL ERROR",t)}_findOriginalError(n){let t=n&&od(n);for(;t&&od(t);)t=od(t);return t||null}},jg=new O("",{providedIn:"root",factory:()=>S($t).handleError.bind(void 0)}),Ou=(()=>{class e{static{this.__NG_ELEMENT_ID__=$C}static{this.__NG_ENV_ID__=t=>t}}return e})(),Td=class extends Ou{constructor(n){super(),this._lView=n}onDestroy(n){return mg(this._lView,n),()=>lC(this._lView,n)}};function $C(){return new Td(ie())}function HC(){return mr(Xe(),ie())}function mr(e,n){return new re(Tt(e,n))}var re=(()=>{class e{constructor(t){this.nativeElement=t}static{this.__NG_ELEMENT_ID__=HC}}return e})();function zC(e){return e instanceof re?e.nativeElement:e}var Ad=class extends B{constructor(n=!1){super(),this.destroyRef=void 0,this.__isAsync=n,rg()&&(this.destroyRef=S(Ou,{optional:!0})??void 0)}emit(n){let t=se(null);try{super.next(n)}finally{se(t)}}subscribe(n,t,i){let r=n,o=t||(()=>null),s=i;if(n&&typeof n=="object"){let c=n;r=c.next?.bind(c),o=c.error?.bind(c),s=c.complete?.bind(c)}this.__isAsync&&(o=sd(o),r&&(r=sd(r)),s&&(s=sd(s)));let a=super.subscribe({next:r,error:o,complete:s});return n instanceof _e&&n.add(a),a}};function sd(e){return n=>{setTimeout(e,void 0,n)}}var ne=Ad;function GC(){return this._results[Symbol.iterator]()}var ba=class e{get changes(){return this._changes??=new ne}constructor(n=!1){this._emitDistinctChangesOnly=n,this.dirty=!0,this._onDirty=void 0,this._results=[],this._changesDetected=!1,this._changes=void 0,this.length=0,this.first=void 0,this.last=void 0;let t=e.prototype;t[Symbol.iterator]||(t[Symbol.iterator]=GC)}get(n){return this._results[n]}map(n){return this._results.map(n)}filter(n){return this._results.filter(n)}find(n){return this._results.find(n)}reduce(n,t){return this._results.reduce(n,t)}forEach(n){this._results.forEach(n)}some(n){return this._results.some(n)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(n,t){this.dirty=!1;let i=_w(n);(this._changesDetected=!vw(this._results,i,t))&&(this._results=i,this.length=i.length,this.last=i[this.length-1],this.first=i[0])}notifyOnChanges(){this._changes!==void 0&&(this._changesDetected||!this._emitDistinctChangesOnly)&&this._changes.emit(this)}onDirty(n){this._onDirty=n}setDirty(){this.dirty=!0,this._onDirty?.()}destroy(){this._changes!==void 0&&(this._changes.complete(),this._changes.unsubscribe())}};function Bg(e){return(e.flags&128)===128}var Ug=new Map,WC=0;function qC(){return WC++}function YC(e){Ug.set(e[$a],e)}function QC(e){Ug.delete(e[$a])}var sm="__ngContext__";function Wn(e,n){hi(n)?(e[sm]=n[$a],YC(n)):e[sm]=n}function $g(e){return zg(e[oo])}function Hg(e){return zg(e[jt])}function zg(e){for(;e!==null&&!yn(e);)e=e[jt];return e}var Od;function Gg(e){Od=e}function Wg(){if(Od!==void 0)return Od;if(typeof document<"u")return document;throw new P(210,!1)}var go=new O("",{providedIn:"root",factory:()=>ZC}),ZC="ng",ku=new O(""),Je=new O("",{providedIn:"platform",factory:()=>"unknown"});var wn=new O(""),vo=new O("",{providedIn:"root",factory:()=>Wg().body?.querySelector("[ngCspNonce]")?.getAttribute("ngCspNonce")||null});var KC="h",XC="b";var JC=()=>null;function Pu(e,n,t=!1){return JC(e,n,t)}var qg=!1,ex=new O("",{providedIn:"root",factory:()=>qg});var Js;function tx(){if(Js===void 0&&(Js=null,Pe.trustedTypes))try{Js=Pe.trustedTypes.createPolicy("angular",{createHTML:e=>e,createScript:e=>e,createScriptURL:e=>e})}catch{}return Js}function Za(e){return tx()?.createHTML(e)||e}var ea;function Yg(){if(ea===void 0&&(ea=null,Pe.trustedTypes))try{ea=Pe.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:e=>e,createScript:e=>e,createScriptURL:e=>e})}catch{}return ea}function am(e){return Yg()?.createHTML(e)||e}function cm(e){return Yg()?.createScriptURL(e)||e}var wa=class{constructor(n){this.changingThisBreaksApplicationSecurity=n}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${Om})`}};function Di(e){return e instanceof wa?e.changingThisBreaksApplicationSecurity:e}function Ka(e,n){let t=nx(e);if(t!=null&&t!==n){if(t==="ResourceURL"&&n==="URL")return!0;throw new Error(`Required a safe ${n}, got a ${t} (see ${Om})`)}return t===n}function nx(e){return e instanceof wa&&e.getTypeName()||null}function ix(e){let n=new Pd(e);return rx()?new kd(n):n}var kd=class{constructor(n){this.inertDocumentHelper=n}getInertBodyElement(n){n=""+n;try{let t=new window.DOMParser().parseFromString(Za(n),"text/html").body;return t===null?this.inertDocumentHelper.getInertBodyElement(n):(t.removeChild(t.firstChild),t)}catch{return null}}},Pd=class{constructor(n){this.defaultDoc=n,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert")}getInertBodyElement(n){let t=this.inertDocument.createElement("template");return t.innerHTML=Za(n),t}};function rx(){try{return!!new window.DOMParser().parseFromString(Za(""),"text/html")}catch{return!1}}var ox=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\/?#]*(?:[\/?#]|$))/i;function Ru(e){return e=String(e),e.match(ox)?e:"unsafe:"+e}function Cn(e){let n={};for(let t of e.split(","))n[t]=!0;return n}function _o(...e){let n={};for(let t of e)for(let i in t)t.hasOwnProperty(i)&&(n[i]=!0);return n}var Qg=Cn("area,br,col,hr,img,wbr"),Zg=Cn("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),Kg=Cn("rp,rt"),sx=_o(Kg,Zg),ax=_o(Zg,Cn("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul")),cx=_o(Kg,Cn("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video")),lm=_o(Qg,ax,cx,sx),Xg=Cn("background,cite,href,itemtype,longdesc,poster,src,xlink:href"),lx=Cn("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,srcset,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width"),dx=Cn("aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext"),ux=_o(Xg,lx,dx),hx=Cn("script,style,template"),Rd=class{constructor(){this.sanitizedSomething=!1,this.buf=[]}sanitizeChildren(n){let t=n.firstChild,i=!0,r=[];for(;t;){if(t.nodeType===Node.ELEMENT_NODE?i=this.startElement(t):t.nodeType===Node.TEXT_NODE?this.chars(t.nodeValue):this.sanitizedSomething=!0,i&&t.firstChild){r.push(t),t=mx(t);continue}for(;t;){t.nodeType===Node.ELEMENT_NODE&&this.endElement(t);let o=px(t);if(o){t=o;break}t=r.pop()}}return this.buf.join("")}startElement(n){let t=dm(n).toLowerCase();if(!lm.hasOwnProperty(t))return this.sanitizedSomething=!0,!hx.hasOwnProperty(t);this.buf.push("<"),this.buf.push(t);let i=n.attributes;for(let r=0;r"),!0}endElement(n){let t=dm(n).toLowerCase();lm.hasOwnProperty(t)&&!Qg.hasOwnProperty(t)&&(this.buf.push(""),this.buf.push(t),this.buf.push(">"))}chars(n){this.buf.push(um(n))}};function fx(e,n){return(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_CONTAINED_BY)!==Node.DOCUMENT_POSITION_CONTAINED_BY}function px(e){let n=e.nextSibling;if(n&&e!==n.previousSibling)throw Jg(n);return n}function mx(e){let n=e.firstChild;if(n&&fx(e,n))throw Jg(n);return n}function dm(e){let n=e.nodeName;return typeof n=="string"?n:"FORM"}function Jg(e){return new Error(`Failed to sanitize html because the element is clobbered: ${e.outerHTML}`)}var gx=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,vx=/([^\#-~ |!])/g;function um(e){return e.replace(/&/g,"&").replace(gx,function(n){let t=n.charCodeAt(0),i=n.charCodeAt(1);return""+((t-55296)*1024+(i-56320)+65536)+";"}).replace(vx,function(n){return""+n.charCodeAt(0)+";"}).replace(//g,">")}var ta;function e0(e,n){let t=null;try{ta=ta||ix(e);let i=n?String(n):"";t=ta.getInertBodyElement(i);let r=5,o=i;do{if(r===0)throw new Error("Failed to sanitize html because the input is unstable");r--,i=o,o=t.innerHTML,t=ta.getInertBodyElement(i)}while(i!==o);let a=new Rd().sanitizeChildren(hm(t)||t);return Za(a)}finally{if(t){let i=hm(t)||t;for(;i.firstChild;)i.removeChild(i.firstChild)}}}function hm(e){return"content"in e&&_x(e)?e.content:null}function _x(e){return e.nodeType===Node.ELEMENT_NODE&&e.nodeName==="TEMPLATE"}var yo=function(e){return e[e.NONE=0]="NONE",e[e.HTML=1]="HTML",e[e.STYLE=2]="STYLE",e[e.SCRIPT=3]="SCRIPT",e[e.URL=4]="URL",e[e.RESOURCE_URL=5]="RESOURCE_URL",e}(yo||{});function t0(e){let n=Nu();return n?am(n.sanitize(yo.HTML,e)||""):Ka(e,"HTML")?am(Di(e)):e0(Wg(),fo(e))}function ee(e){let n=Nu();return n?n.sanitize(yo.URL,e)||"":Ka(e,"URL")?Di(e):Ru(fo(e))}function yx(e){let n=Nu();if(n)return cm(n.sanitize(yo.RESOURCE_URL,e)||"");if(Ka(e,"ResourceURL"))return cm(Di(e));throw new P(904,!1)}function bx(e,n){return n==="src"&&(e==="embed"||e==="frame"||e==="iframe"||e==="media"||e==="script")||n==="href"&&(e==="base"||e==="link")?yx:ee}function n0(e,n,t){return bx(n,t)(e)}function Nu(){let e=ie();return e&&e[Bt].sanitizer}var wx=/^>|^->||--!>|)/g,xx="\u200B$1\u200B";function Dx(e){return e.replace(wx,n=>n.replace(Cx,xx))}function Xa(e){return e.ownerDocument}function i0(e){return e instanceof Function?e():e}function Ex(e){return(e??S(Ae)).get(Je)==="browser"}var vn=function(e){return e[e.Important=1]="Important",e[e.DashCase=2]="DashCase",e}(vn||{}),Ix;function Fu(e,n){return Ix(e,n)}function er(e,n,t,i,r){if(i!=null){let o,s=!1;yn(i)?o=i:hi(i)&&(s=!0,i=i[_n]);let a=sn(i);e===0&&t!==null?r==null?c0(n,t,a):xa(n,t,a,r||null,!0):e===1&&t!==null?xa(n,t,a,r||null,!0):e===2?$x(n,a,s):e===3&&n.destroyNode(a),o!=null&&zx(n,e,o,t,r)}}function Sx(e,n){return e.createText(n)}function Mx(e,n,t){e.setValue(n,t)}function Tx(e,n){return e.createComment(Dx(n))}function r0(e,n,t){return e.createElement(n,t)}function Ax(e,n){o0(e,n),n[_n]=null,n[wt]=null}function Ox(e,n,t,i,r,o){i[_n]=r,i[wt]=n,ec(e,i,t,1,r,o)}function o0(e,n){n[Bt].changeDetectionScheduler?.notify(1),ec(e,n,n[Ee],2,null,null)}function kx(e){let n=e[oo];if(!n)return ad(e[Y],e);for(;n;){let t=null;if(hi(n))t=n[oo];else{let i=n[gt];i&&(t=i)}if(!t){for(;n&&!n[jt]&&n!==e;)hi(n)&&ad(n[Y],n),n=n[Ge];n===null&&(n=e),hi(n)&&ad(n[Y],n),t=n&&n[jt]}n=t}}function Px(e,n,t,i){let r=gt+i,o=t.length;i>0&&(t[r-1][jt]=n),i0&&(e[t-1][jt]=i[jt]);let o=fa(e,gt+n);Ax(i[Y],i);let s=o[gn];s!==null&&s.detachView(o[Y]),i[Ge]=null,i[jt]=null,i[j]&=-129}return i}function Lu(e,n){if(!(n[j]&256)){let t=n[Ee];t.destroyNode&&ec(e,n,t,3,null,null),kx(n)}}function ad(e,n){if(n[j]&256)return;let t=se(null);try{n[j]&=-129,n[j]|=256,n[mi]&&mp(n[mi]),Fx(e,n),Nx(e,n),n[Y].type===1&&n[Ee].destroy();let i=n[mo];if(i!==null&&yn(n[Ge])){i!==n[Ge]&&s0(i,n);let r=n[gn];r!==null&&r.detachView(e)}QC(n)}finally{se(t)}}function Nx(e,n){let t=e.cleanup,i=n[ro];if(t!==null)for(let o=0;o=0?i[s]():i[-s].unsubscribe(),o+=2}else{let s=i[t[o+1]];t[o].call(s)}i!==null&&(n[ro]=null);let r=n[Hn];if(r!==null){n[Hn]=null;for(let o=0;o-1){let{encapsulation:o}=e.data[i.directiveStart+r];if(o===on.None||o===on.Emulated)return null}return Tt(i,t)}}function xa(e,n,t,i,r){e.insertBefore(n,t,i,r)}function c0(e,n,t){e.appendChild(n,t)}function fm(e,n,t,i,r){i!==null?xa(e,n,t,i,r):c0(e,n,t)}function Vx(e,n,t,i){e.removeChild(n,t,i)}function Vu(e,n){return e.parentNode(n)}function jx(e,n){return e.nextSibling(n)}function l0(e,n,t){return Ux(e,n,t)}function Bx(e,n,t){return e.type&40?Tt(e,t):null}var Ux=Bx,pm;function Ja(e,n,t,i){let r=a0(e,i,n),o=n[Ee],s=i.parent||n[wt],a=l0(s,i,n);if(r!=null)if(Array.isArray(t))for(let c=0;cct&&p0(e,n,ct,!1),nn(s?2:0,r),t(i,r)}finally{vi(o),nn(s?3:1,r)}}function Bu(e,n,t){if(wu(n)){let i=se(null);try{let r=n.directiveStart,o=n.directiveEnd;for(let s=r;snull;function Jx(e,n,t,i){let r=D0(n);r.push(t),e.firstCreatePass&&E0(e).push(i,r.length-1)}function eD(e,n,t,i,r,o){let s=n?n.injectorIndex:-1,a=0;return vg()&&(a|=128),{type:t,index:i,insertBeforeIndex:null,injectorIndex:s,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,propertyBindings:null,flags:a,providerIndexes:0,value:r,attrs:o,mergedAttrs:null,localNames:null,initialInputs:void 0,inputs:null,outputs:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:n,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}function mm(e,n,t,i,r){for(let o in n){if(!n.hasOwnProperty(o))continue;let s=n[o];if(s===void 0)continue;i??={};let a,c=$.None;Array.isArray(s)?(a=s[0],c=s[1]):a=s;let h=o;if(r!==null){if(!r.hasOwnProperty(o))continue;h=r[o]}e===0?gm(i,t,h,a,c):gm(i,t,h,a)}return i}function gm(e,n,t,i,r){let o;e.hasOwnProperty(t)?(o=e[t]).push(n,i):o=e[t]=[n,i],r!==void 0&&o.push(r)}function tD(e,n,t){let i=n.directiveStart,r=n.directiveEnd,o=e.data,s=n.attrs,a=[],c=null,h=null;for(let f=i;f0;){let t=e[--n];if(typeof t=="number"&&t<0)return t}return 0}function sD(e,n,t,i){let r=t.directiveStart,o=t.directiveEnd;Ha(t)&&fD(n,t,e.data[r+t.componentOffset]),e.firstCreatePass||ya(t,n),Wn(i,n);let s=t.initialInputs;for(let a=r;a{so(e.lView)},consumerOnSignalRead(){this.lView[mi]=this}}),A0=100;function O0(e,n=!0,t=0){let i=e[Bt],r=i.rendererFactory,o=!1;o||r.begin?.();try{TD(e,t)}catch(s){throw n&&I0(e,s),s}finally{o||(r.end?.(),i.inlineEffectRunner?.flush())}}function TD(e,n){jd(e,n);let t=0;for(;Du(e);){if(t===A0)throw new P(103,!1);t++,jd(e,1)}}function AD(e,n,t,i){let r=n[j];if((r&256)===256)return;let o=!1;!o&&n[Bt].inlineEffectRunner?.flush(),Mu(n);let s=null,a=null;!o&&OD(e)&&(a=ED(n),s=fp(a));try{pg(n),_C(e.bindingStartIndex),t!==null&&_0(e,n,t,2,i);let c=(r&3)===3;if(!o)if(c){let p=e.preOrderCheckHooks;p!==null&&sa(n,p,null)}else{let p=e.preOrderHooks;p!==null&&aa(n,p,0,null),id(n,0)}if(kD(n),k0(n,0),e.contentQueries!==null&&x0(e,n),!o)if(c){let p=e.contentCheckHooks;p!==null&&sa(n,p)}else{let p=e.contentHooks;p!==null&&aa(n,p,1),id(n,1)}qx(e,n);let h=e.components;h!==null&&R0(n,h,0);let f=e.viewQuery;if(f!==null&&Ld(2,f,i),!o)if(c){let p=e.viewCheckHooks;p!==null&&sa(n,p)}else{let p=e.viewHooks;p!==null&&aa(n,p,2),id(n,2)}if(e.firstUpdatePass===!0&&(e.firstUpdatePass=!1),n[nd]){for(let p of n[nd])p();n[nd]=null}o||(n[j]&=-73)}catch(c){throw so(n),c}finally{a!==null&&(pp(a,s),SD(a)),Tu()}}function OD(e){return e.type!==2}function k0(e,n){for(let t=$g(e);t!==null;t=Hg(t))for(let i=gt;i-1&&(Ca(n,i),fa(t,i))}this._attachedToViewContainer=!1}Lu(this._lView[Y],this._lView)}onDestroy(n){mg(this._lView,n)}markForCheck(){Yu(this._cdRefInjectingView||this._lView)}detach(){this._lView[j]&=-129}reattach(){Dd(this._lView),this._lView[j]|=128}detectChanges(){this._lView[j]|=1024,O0(this._lView,this.notifyErrorHandler)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new P(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,o0(this._lView[Y],this._lView)}attachToAppRef(n){if(this._attachedToViewContainer)throw new P(902,!1);this._appRef=n,Dd(this._lView)}},bt=(()=>{class e{static{this.__NG_ELEMENT_ID__=FD}}return e})(),RD=bt,ND=class extends RD{constructor(n,t,i){super(),this._declarationLView=n,this._declarationTContainer=t,this.elementRef=i}get ssrId(){return this._declarationTContainer.tView?.ssrId||null}createEmbeddedView(n,t){return this.createEmbeddedViewImpl(n,t)}createEmbeddedViewImpl(n,t,i){let r=S0(this._declarationLView,this._declarationTContainer,n,{embeddedViewInjector:t,dehydratedView:i});return new bi(r)}};function FD(){return ic(Xe(),ie())}function ic(e,n){return e.type&4?new ND(n,e,mr(e,n)):null}var mj=new RegExp(`^(\\d+)*(${XC}|${KC})*(.*)`);var LD=()=>null;function Bd(e,n){return LD(e,n)}var Ea=class{},Ud=class{},Ia=class{};function VD(e){let n=Error(`No component factory found for ${at(e)}.`);return n[jD]=e,n}var jD="ngComponent";var $d=class{resolveComponentFactory(n){throw VD(n)}},Qn=(()=>{class e{static{this.NULL=new $d}}return e})(),co=class{},Zn=(()=>{class e{constructor(){this.destroyNode=null}static{this.__NG_ELEMENT_ID__=()=>BD()}}return e})();function BD(){let e=ie(),n=Xe(),t=Yn(n.index,e);return(hi(t)?t:e)[Ee]}var UD=(()=>{class e{static{this.\u0275prov=D({token:e,providedIn:"root",factory:()=>null})}}return e})(),cd={};var vm=new Set;function bo(e){vm.has(e)||(vm.add(e),performance?.mark?.("mark_feature_usage",{detail:{feature:e}}))}function _m(...e){}function $D(){let e=typeof Pe.requestAnimationFrame=="function",n=Pe[e?"requestAnimationFrame":"setTimeout"],t=Pe[e?"cancelAnimationFrame":"clearTimeout"];if(typeof Zone<"u"&&n&&t){let i=n[Zone.__symbol__("OriginalDelegate")];i&&(n=i);let r=t[Zone.__symbol__("OriginalDelegate")];r&&(t=r)}return{nativeRequestAnimationFrame:n,nativeCancelAnimationFrame:t}}var F=class e{constructor({enableLongStackTrace:n=!1,shouldCoalesceEventChangeDetection:t=!1,shouldCoalesceRunChangeDetection:i=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new ne(!1),this.onMicrotaskEmpty=new ne(!1),this.onStable=new ne(!1),this.onError=new ne(!1),typeof Zone>"u")throw new P(908,!1);Zone.assertZonePatched();let r=this;r._nesting=0,r._outer=r._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(r._inner=r._inner.fork(new Zone.TaskTrackingZoneSpec)),n&&Zone.longStackTraceZoneSpec&&(r._inner=r._inner.fork(Zone.longStackTraceZoneSpec)),r.shouldCoalesceEventChangeDetection=!i&&t,r.shouldCoalesceRunChangeDetection=i,r.lastRequestAnimationFrameId=-1,r.nativeRequestAnimationFrame=$D().nativeRequestAnimationFrame,GD(r)}static isInAngularZone(){return typeof Zone<"u"&&Zone.current.get("isAngularZone")===!0}static assertInAngularZone(){if(!e.isInAngularZone())throw new P(909,!1)}static assertNotInAngularZone(){if(e.isInAngularZone())throw new P(909,!1)}run(n,t,i){return this._inner.run(n,t,i)}runTask(n,t,i,r){let o=this._inner,s=o.scheduleEventTask("NgZoneEvent: "+r,n,HD,_m,_m);try{return o.runTask(s,t,i)}finally{o.cancelTask(s)}}runGuarded(n,t,i){return this._inner.runGuarded(n,t,i)}runOutsideAngular(n){return this._outer.run(n)}},HD={};function Qu(e){if(e._nesting==0&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function zD(e){e.isCheckStableRunning||e.lastRequestAnimationFrameId!==-1||(e.lastRequestAnimationFrameId=e.nativeRequestAnimationFrame.call(Pe,()=>{e.fakeTopEventTask||(e.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{e.lastRequestAnimationFrameId=-1,Hd(e),e.isCheckStableRunning=!0,Qu(e),e.isCheckStableRunning=!1},void 0,()=>{},()=>{})),e.fakeTopEventTask.invoke()}),Hd(e))}function GD(e){let n=()=>{zD(e)};e._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(t,i,r,o,s,a)=>{if(WD(a))return t.invokeTask(r,o,s,a);try{return ym(e),t.invokeTask(r,o,s,a)}finally{(e.shouldCoalesceEventChangeDetection&&o.type==="eventTask"||e.shouldCoalesceRunChangeDetection)&&n(),bm(e)}},onInvoke:(t,i,r,o,s,a,c)=>{try{return ym(e),t.invoke(r,o,s,a,c)}finally{e.shouldCoalesceRunChangeDetection&&n(),bm(e)}},onHasTask:(t,i,r,o)=>{t.hasTask(r,o),i===r&&(o.change=="microTask"?(e._hasPendingMicrotasks=o.microTask,Hd(e),Qu(e)):o.change=="macroTask"&&(e.hasPendingMacrotasks=o.macroTask))},onHandleError:(t,i,r,o)=>(t.handleError(r,o),e.runOutsideAngular(()=>e.onError.emit(o)),!1)})}function Hd(e){e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&e.lastRequestAnimationFrameId!==-1?e.hasPendingMicrotasks=!0:e.hasPendingMicrotasks=!1}function ym(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function bm(e){e._nesting--,Qu(e)}var zd=class{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new ne,this.onMicrotaskEmpty=new ne,this.onStable=new ne,this.onError=new ne}run(n,t,i){return n.apply(t,i)}runGuarded(n,t,i){return n.apply(t,i)}runOutsideAngular(n){return n()}runTask(n,t,i,r){return n.apply(t,i)}};function WD(e){return!Array.isArray(e)||e.length!==1?!1:e[0].data?.__ignore_ng_zone__===!0}function qD(e="zone.js",n){return e==="noop"?new zd:e==="zone.js"?new F(n):e}var tr=function(e){return e[e.EarlyRead=0]="EarlyRead",e[e.Write=1]="Write",e[e.MixedReadWrite=2]="MixedReadWrite",e[e.Read=3]="Read",e}(tr||{}),YD={destroy(){}};function rc(e,n){!n&&Qw(rc);let t=n?.injector??S(Ae);if(!Ex(t))return YD;bo("NgAfterNextRender");let i=t.get(Zu),r=i.handler??=new Wd,o=n?.phase??tr.MixedReadWrite,s=()=>{r.unregister(c),a()},a=t.get(Ou).onDestroy(s),c=Ht(t,()=>new Gd(o,()=>{s(),e()}));return r.register(c),{destroy:s}}var Gd=class{constructor(n,t){this.phase=n,this.callbackFn=t,this.zone=S(F),this.errorHandler=S($t,{optional:!0}),S(Ea,{optional:!0})?.notify(1)}invoke(){try{this.zone.runOutsideAngular(this.callbackFn)}catch(n){this.errorHandler?.handleError(n)}}},Wd=class{constructor(){this.executingCallbacks=!1,this.buckets={[tr.EarlyRead]:new Set,[tr.Write]:new Set,[tr.MixedReadWrite]:new Set,[tr.Read]:new Set},this.deferredCallbacks=new Set}register(n){(this.executingCallbacks?this.deferredCallbacks:this.buckets[n.phase]).add(n)}unregister(n){this.buckets[n.phase].delete(n),this.deferredCallbacks.delete(n)}execute(){this.executingCallbacks=!0;for(let n of Object.values(this.buckets))for(let t of n)t.invoke();this.executingCallbacks=!1;for(let n of this.deferredCallbacks)this.buckets[n.phase].add(n);this.deferredCallbacks.clear()}destroy(){for(let n of Object.values(this.buckets))n.clear();this.deferredCallbacks.clear()}},Zu=(()=>{class e{constructor(){this.handler=null,this.internalCallbacks=[]}execute(){this.executeInternalCallbacks(),this.handler?.execute()}executeInternalCallbacks(){let t=[...this.internalCallbacks];this.internalCallbacks.length=0;for(let i of t)i()}ngOnDestroy(){this.handler?.destroy(),this.handler=null,this.internalCallbacks.length=0}static{this.\u0275prov=D({token:e,providedIn:"root",factory:()=>new e})}}return e})();function Sa(e,n,t){let i=t?e.styles:null,r=t?e.classes:null,o=0;if(n!==null)for(let s=0;s0&&h0(e,t,o.join(" "))}}function tE(e,n,t){let i=e.projection=[];for(let r=0;r{class e{static{this.__NG_ELEMENT_ID__=iE}}return e})();function iE(){let e=Xe();return F0(e,ie())}var rE=Ct,N0=class extends rE{constructor(n,t,i){super(),this._lContainer=n,this._hostTNode=t,this._hostLView=i}get element(){return mr(this._hostTNode,this._hostLView)}get injector(){return new fi(this._hostTNode,this._hostLView)}get parentInjector(){let n=Au(this._hostTNode,this._hostLView);if(Tg(n)){let t=va(n,this._hostLView),i=ga(n),r=t[Y].data[i+8];return new fi(r,t)}else return new fi(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(n){let t=Cm(this._lContainer);return t!==null&&t[n]||null}get length(){return this._lContainer.length-gt}createEmbeddedView(n,t,i){let r,o;typeof i=="number"?r=i:i!=null&&(r=i.index,o=i.injector);let s=Bd(this._lContainer,n.ssrId),a=n.createEmbeddedViewImpl(t||{},o,s);return this.insertImpl(a,r,Vd(this._hostTNode,s)),a}createComponent(n,t,i,r,o){let s=n&&!Kw(n),a;if(s)a=t;else{let x=t||{};a=x.index,i=x.injector,r=x.projectableNodes,o=x.environmentInjector||x.ngModuleRef}let c=s?n:new dr(zn(n)),h=i||this.parentInjector;if(!o&&c.ngModule==null){let M=(s?h:this.parentInjector).get(Ze,null);M&&(o=M)}let f=zn(c.componentType??{}),p=Bd(this._lContainer,f?.id??null),b=p?.firstChild??null,_=c.create(h,r,b,o);return this.insertImpl(_.hostView,a,Vd(this._hostTNode,p)),_}insert(n,t){return this.insertImpl(n,t,!0)}insertImpl(n,t,i){let r=n._lView;if(sC(r)){let a=this.indexOf(n);if(a!==-1)this.detach(a);else{let c=r[Ge],h=new N0(c,c[wt],c[Ge]);h.detach(h.indexOf(n))}}let o=this._adjustIndex(t),s=this._lContainer;return M0(s,r,o,i),n.attachToViewContainerRef(),Um(ld(s),o,n),n}move(n,t){return this.insert(n,t)}indexOf(n){let t=Cm(this._lContainer);return t!==null?t.indexOf(n):-1}remove(n){let t=this._adjustIndex(n,-1),i=Ca(this._lContainer,t);i&&(fa(ld(this._lContainer),t),Lu(i[Y],i))}detach(n){let t=this._adjustIndex(n,-1),i=Ca(this._lContainer,t);return i&&fa(ld(this._lContainer),t)!=null?new bi(i):null}_adjustIndex(n,t=0){return n??this.length+t}};function Cm(e){return e[ma]}function ld(e){return e[ma]||(e[ma]=[])}function F0(e,n){let t,i=n[e.index];return yn(i)?t=i:(t=C0(i,n,null,e),n[e.index]=t,nc(n,t)),sE(t,n,e,i),new N0(t,e,n)}function oE(e,n){let t=e[Ee],i=t.createComment(""),r=Tt(n,e),o=Vu(t,r);return xa(t,o,i,jx(t,r),!1),i}var sE=lE,aE=()=>!1;function cE(e,n,t){return aE(e,n,t)}function lE(e,n,t,i){if(e[gi])return;let r;t.type&8?r=sn(i):r=oE(n,t),e[gi]=r}var Qd=class e{constructor(n){this.queryList=n,this.matches=null}clone(){return new e(this.queryList)}setDirty(){this.queryList.setDirty()}},Zd=class e{constructor(n=[]){this.queries=n}createEmbeddedView(n){let t=n.queries;if(t!==null){let i=n.contentQueries!==null?n.contentQueries[0]:t.length,r=[];for(let o=0;o0)i.push(s[a/2]);else{let h=o[a+1],f=n[-c];for(let p=gt;pn.trim())}function j0(e,n,t){e.queries===null&&(e.queries=new Kd),e.queries.track(new Xd(n,t))}function _E(e,n){let t=e.contentQueries||(e.contentQueries=[]),i=t.length?t[t.length-1]:-1;n!==i&&t.push(e.queries.length-1,n)}function Ku(e,n){return e.queries.getByIndex(n)}function yE(e,n){let t=e[Y],i=Ku(t,n);return i.crossesNgTemplate?Jd(t,e,n,[]):L0(t,e,i,n)}function B0(e){return typeof e=="function"&&e[Rl]!==void 0}function U0(e){return B0(e)&&typeof e.set=="function"}function bE(e){let n=[],t=new Map;function i(r){let o=t.get(r);if(!o){let s=e(r);t.set(r,o=s.then(DE))}return o}return Aa.forEach((r,o)=>{let s=[];r.templateUrl&&s.push(i(r.templateUrl).then(h=>{r.template=h}));let a=typeof r.styles=="string"?[r.styles]:r.styles||[];if(r.styles=a,r.styleUrl&&r.styleUrls?.length)throw new Error("@Component cannot define both `styleUrl` and `styleUrls`. Use `styleUrl` if the component has one stylesheet, or `styleUrls` if it has multiple");if(r.styleUrls?.length){let h=r.styles.length,f=r.styleUrls;r.styleUrls.forEach((p,b)=>{a.push(""),s.push(i(p).then(_=>{a[h+b]=_,f.splice(f.indexOf(p),1),f.length==0&&(r.styleUrls=void 0)}))})}else r.styleUrl&&s.push(i(r.styleUrl).then(h=>{a.push(h),r.styleUrl=void 0}));let c=Promise.all(s).then(()=>EE(o));n.push(c)}),CE(),Promise.all(n).then(()=>{})}var Aa=new Map,wE=new Set;function CE(){let e=Aa;return Aa=new Map,e}function xE(){return Aa.size===0}function DE(e){return typeof e=="string"?e:e.text()}function EE(e){wE.delete(e)}function IE(e){return Object.getPrototypeOf(e.prototype).constructor}function He(e){let n=IE(e.type),t=!0,i=[e];for(;n;){let r;if(Gn(e))r=n.\u0275cmp||n.\u0275dir;else{if(n.\u0275cmp)throw new P(903,!1);r=n.\u0275dir}if(r){if(t){i.push(r);let s=e;s.inputs=na(e.inputs),s.inputTransforms=na(e.inputTransforms),s.declaredInputs=na(e.declaredInputs),s.outputs=na(e.outputs);let a=r.hostBindings;a&&OE(e,a);let c=r.viewQuery,h=r.contentQueries;if(c&&TE(e,c),h&&AE(e,h),SE(e,r),Xb(e.outputs,r.outputs),Gn(r)&&r.data.animation){let f=e.data;f.animation=(f.animation||[]).concat(r.data.animation)}}let o=r.features;if(o)for(let s=0;s=0;i--){let r=e[i];r.hostVars=n+=r.hostVars,r.hostAttrs=to(r.hostAttrs,t=to(t,r.hostAttrs))}}function na(e){return e===rr?{}:e===mt?[]:e}function TE(e,n){let t=e.viewQuery;t?e.viewQuery=(i,r)=>{n(i,r),t(i,r)}:e.viewQuery=n}function AE(e,n){let t=e.contentQueries;t?e.contentQueries=(i,r,o)=>{n(i,r,o),t(i,r,o)}:e.contentQueries=n}function OE(e,n){let t=e.hostBindings;t?e.hostBindings=(i,r)=>{n(i,r),t(i,r)}:e.hostBindings=n}function zt(e){let n=e.inputConfig,t={};for(let i in n)if(n.hasOwnProperty(i)){let r=n[i];Array.isArray(r)&&r[3]&&(t[i]=r[3])}e.inputTransforms=t}var qn=class{},lo=class{};var Oa=class extends qn{constructor(n,t,i){super(),this._parent=t,this._bootstrapComponents=[],this.destroyCbs=[],this.componentFactoryResolver=new Ma(this);let r=Km(n);this._bootstrapComponents=i0(r.bootstrap),this._r3Injector=Vg(n,t,[{provide:qn,useValue:this},{provide:Qn,useValue:this.componentFactoryResolver},...i],at(n),new Set(["environment"])),this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(n)}get injector(){return this._r3Injector}destroy(){let n=this._r3Injector;!n.destroyed&&n.destroy(),this.destroyCbs.forEach(t=>t()),this.destroyCbs=null}onDestroy(n){this.destroyCbs.push(n)}},ka=class extends lo{constructor(n){super(),this.moduleType=n}create(n){return new Oa(this.moduleType,n,[])}};function kE(e,n,t){return new Oa(e,n,t)}var eu=class extends qn{constructor(n){super(),this.componentFactoryResolver=new Ma(this),this.instance=null;let t=new no([...n.providers,{provide:qn,useValue:this},{provide:Qn,useValue:this.componentFactoryResolver}],n.parent||yu(),n.debugName,new Set(["environment"]));this.injector=t,n.runEnvironmentInitializers&&t.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(n){this.injector.onDestroy(n)}};function oc(e,n,t=null){return new eu({providers:e,parent:n,debugName:t,runEnvironmentInitializers:!0}).injector}var Ei=(()=>{class e{constructor(){this.taskId=0,this.pendingTasks=new Set,this.hasPendingTasks=new Ce(!1)}get _hasPendingTasks(){return this.hasPendingTasks.value}add(){this._hasPendingTasks||this.hasPendingTasks.next(!0);let t=this.taskId++;return this.pendingTasks.add(t),t}remove(t){this.pendingTasks.delete(t),this.pendingTasks.size===0&&this._hasPendingTasks&&this.hasPendingTasks.next(!1)}ngOnDestroy(){this.pendingTasks.clear(),this._hasPendingTasks&&this.hasPendingTasks.next(!1)}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function $0(e){return RE(e)?Array.isArray(e)||!(e instanceof Map)&&Symbol.iterator in e:!1}function PE(e,n){if(Array.isArray(e))for(let t=0;t>17&32767}function $E(e){return(e&2)==2}function HE(e,n){return e&131071|n<<17}function tu(e){return e|2}function ur(e){return(e&131068)>>2}function dd(e,n){return e&-131069|n<<2}function zE(e){return(e&1)===1}function nu(e){return e|1}function GE(e,n,t,i,r,o){let s=o?n.classBindings:n.styleBindings,a=wi(s),c=ur(s);e[i]=t;let h=!1,f;if(Array.isArray(t)){let p=t;f=p[1],(f===null||po(p,f)>0)&&(h=!0)}else f=t;if(r)if(c!==0){let b=wi(e[a+1]);e[i+1]=ia(b,a),b!==0&&(e[b+1]=dd(e[b+1],i)),e[a+1]=HE(e[a+1],i)}else e[i+1]=ia(a,0),a!==0&&(e[a+1]=dd(e[a+1],i)),a=i;else e[i+1]=ia(c,0),a===0?a=i:e[c+1]=dd(e[c+1],i),c=i;h&&(e[i+1]=tu(e[i+1])),xm(e,f,i,!0),xm(e,f,i,!1),WE(n,f,e,i,o),s=ia(a,c),o?n.classBindings=s:n.styleBindings=s}function WE(e,n,t,i,r){let o=r?e.residualClasses:e.residualStyles;o!=null&&typeof n=="string"&&po(o,n)>=0&&(t[i+1]=nu(t[i+1]))}function xm(e,n,t,i){let r=e[t+1],o=n===null,s=i?wi(r):ur(r),a=!1;for(;s!==0&&(a===!1||o);){let c=e[s],h=e[s+1];qE(c,n)&&(a=!0,e[s+1]=i?nu(h):tu(h)),s=i?wi(h):ur(h)}a&&(e[t+1]=i?tu(r):nu(r))}function qE(e,n){return e===null||n==null||(Array.isArray(e)?e[1]:e)===n?!0:Array.isArray(e)&&typeof n=="string"?po(e,n)>=0:!1}var Vt={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function YE(e){return e.substring(Vt.key,Vt.keyEnd)}function QE(e){return ZE(e),H0(e,z0(e,0,Vt.textEnd))}function H0(e,n){let t=Vt.textEnd;return t===n?-1:(n=Vt.keyEnd=KE(e,Vt.key=n,t),z0(e,n,t))}function ZE(e){Vt.key=0,Vt.keyEnd=0,Vt.value=0,Vt.valueEnd=0,Vt.textEnd=e.length}function z0(e,n,t){for(;n32;)n++;return n}function y(e,n,t){let i=ie(),r=fr();if(an(i,r,n)){let o=Te(),s=Ga();zu(o,s,i,e,n,i[Ee],t,!1)}return y}function iu(e,n,t,i,r){let o=n.inputs,s=r?"class":"style";Wu(e,t,o[s],s,i)}function wo(e,n,t){return G0(e,n,t,!1),wo}function he(e,n){return G0(e,n,null,!0),he}function Xu(e){JE(oI,XE,e,!0)}function XE(e,n){for(let t=QE(n);t>=0;t=H0(n,t))mu(e,YE(n),!0)}function G0(e,n,t,i){let r=ie(),o=Te(),s=yg(2);if(o.firstUpdatePass&&q0(o,e,s,i),n!==xn&&an(r,s,n)){let a=o.data[xi()];Y0(o,a,r,r[Ee],e,r[s+1]=aI(n,t),i,s)}}function JE(e,n,t,i){let r=Te(),o=yg(2);r.firstUpdatePass&&q0(r,null,o,i);let s=ie();if(t!==xn&&an(s,o,t)){let a=r.data[xi()];if(Q0(a,i)&&!W0(r,o)){let c=i?a.classesWithoutHost:a.stylesWithoutHost;c!==null&&(t=md(c,t||"")),iu(r,a,s,t,i)}else sI(r,a,s,s[Ee],s[o+1],s[o+1]=rI(e,n,t),i,o)}}function W0(e,n){return n>=e.expandoStartIndex}function q0(e,n,t,i){let r=e.data;if(r[t+1]===null){let o=r[xi()],s=W0(e,t);Q0(o,i)&&n===null&&!s&&(n=!1),n=eI(r,o,n,i),GE(r,o,n,t,s,i)}}function eI(e,n,t,i){let r=CC(e),o=i?n.residualClasses:n.residualStyles;if(r===null)(i?n.classBindings:n.styleBindings)===0&&(t=ud(null,e,n,t,i),t=uo(t,n.attrs,i),o=null);else{let s=n.directiveStylingLast;if(s===-1||e[s]!==r)if(t=ud(r,e,n,t,i),o===null){let c=tI(e,n,i);c!==void 0&&Array.isArray(c)&&(c=ud(null,e,n,c[1],i),c=uo(c,n.attrs,i),nI(e,n,i,c))}else o=iI(e,n,i)}return o!==void 0&&(i?n.residualClasses=o:n.residualStyles=o),t}function tI(e,n,t){let i=t?n.classBindings:n.styleBindings;if(ur(i)!==0)return e[wi(i)]}function nI(e,n,t,i){let r=t?n.classBindings:n.styleBindings;e[wi(r)]=i}function iI(e,n,t){let i,r=n.directiveEnd;for(let o=1+n.directiveStylingLast;o0;){let c=e[r],h=Array.isArray(c),f=h?c[1]:c,p=f===null,b=t[r+1];b===xn&&(b=p?mt:void 0);let _=p?ed(b,i):f===i?b:void 0;if(h&&!Pa(_)&&(_=ed(c,i)),Pa(_)&&(a=_,s))return a;let x=e[r+1];r=s?wi(x):ur(x)}if(n!==null){let c=o?n.residualClasses:n.residualStyles;c!=null&&(a=ed(c,i))}return a}function Pa(e){return e!==void 0}function aI(e,n){return e==null||e===""||(typeof n=="string"?e=e+n:typeof e=="object"&&(e=at(Di(e)))),e}function Q0(e,n){return(e.flags&(n?8:16))!==0}function Ju(e,n,t){bo("NgControlFlow");let i=ie(),r=fr(),o=cI(i,ct+e),s=0;if(an(i,r,n)){let a=se(null);try{if(xD(o,s),n!==-1){let c=lI(i[Y],ct+n),h=Bd(o,c.tView.ssrId),f=S0(i,c,t,{dehydratedView:h});M0(o,f,s,Vd(c,h))}}finally{se(a)}}else{let a=CD(o,s);a!==void 0&&(a[Mt]=t)}}function cI(e,n){return e[n]}function lI(e,n){return Cu(e,n)}function dI(e,n,t,i,r,o){let s=n.consts,a=lr(s,r),c=gr(n,e,2,i,a);return Gu(n,t,c,lr(s,o)),c.attrs!==null&&Sa(c,c.attrs,!1),c.mergedAttrs!==null&&Sa(c,c.mergedAttrs,!0),n.queries!==null&&n.queries.elementStart(n,c),c}function d(e,n,t,i){let r=ie(),o=Te(),s=ct+e,a=r[Ee],c=o.firstCreatePass?dI(s,o,r,n,t,i):o.data[s],h=uI(o,r,c,a,n,e);r[s]=h;let f=za(c);return Ci(c,!0),f0(a,h,c),!LE(c)&&qa()&&Ja(o,r,h,c),dC()===0&&Wn(h,r),uC(),f&&(Uu(o,r,c),Bu(o,c,r)),i!==null&&$u(r,c),d}function l(){let e=Xe();Eu()?Iu():(e=e.parent,Ci(e,!1));let n=e;fC(n)&&pC(),hC();let t=Te();return t.firstCreatePass&&(Qa(t,e),wu(e)&&t.queries.elementEnd(e)),n.classesWithoutHost!=null&&AC(n)&&iu(t,n,ie(),n.classesWithoutHost,!0),n.stylesWithoutHost!=null&&OC(n)&&iu(t,n,ie(),n.stylesWithoutHost,!1),l}function g(e,n,t,i){return d(e,n,t,i),l(),g}var uI=(e,n,t,i,r,o)=>(Ya(!0),r0(i,r,IC()));function hI(e,n,t,i,r){let o=n.consts,s=lr(o,i),a=gr(n,e,8,"ng-container",s);s!==null&&Sa(a,s,!0);let c=lr(o,r);return Gu(n,t,a,c),n.queries!==null&&n.queries.elementStart(n,a),a}function Re(e,n,t){let i=ie(),r=Te(),o=e+ct,s=r.firstCreatePass?hI(o,r,i,n,t):r.data[o];Ci(s,!0);let a=fI(r,i,s,e);return i[o]=a,qa()&&Ja(r,i,a,s),Wn(a,i),za(s)&&(Uu(r,i,s),Bu(r,s,i)),t!=null&&$u(i,s),Re}function Ne(){let e=Xe(),n=Te();return Eu()?Iu():(e=e.parent,Ci(e,!1)),n.firstCreatePass&&(Qa(n,e),wu(e)&&n.queries.elementEnd(e)),Ne}function Ii(e,n,t){return Re(e,n,t),Ne(),Ii}var fI=(e,n,t,i)=>(Ya(!0),Tx(n[Ee],""));function H(){return ie()}function vr(e,n,t){let i=ie(),r=fr();if(an(i,r,n)){let o=Te(),s=Ga();zu(o,s,i,e,n,i[Ee],t,!0)}return vr}var ui=void 0;function pI(e){let n=e,t=Math.floor(Math.abs(e)),i=e.toString().replace(/^[^.]*\.?/,"").length;return t===1&&i===0?1:5}var mI=["en",[["a","p"],["AM","PM"],ui],[["AM","PM"],ui,ui],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],ui,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],ui,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",ui,"{1} 'at' {0}",ui],[".",",",";","%","+","-","E","\xD7","\u2030","\u221E","NaN",":"],["#,##0.###","#,##0%","\xA4#,##0.00","#E0"],"USD","$","US Dollar",{},"ltr",pI],hd={};function xt(e){let n=gI(e),t=Em(n);if(t)return t;let i=n.split("-")[0];if(t=Em(i),t)return t;if(i==="en")return mI;throw new P(701,!1)}function Em(e){return e in hd||(hd[e]=Pe.ng&&Pe.ng.common&&Pe.ng.common.locales&&Pe.ng.common.locales[e]),hd[e]}var Oe=function(e){return e[e.LocaleId=0]="LocaleId",e[e.DayPeriodsFormat=1]="DayPeriodsFormat",e[e.DayPeriodsStandalone=2]="DayPeriodsStandalone",e[e.DaysFormat=3]="DaysFormat",e[e.DaysStandalone=4]="DaysStandalone",e[e.MonthsFormat=5]="MonthsFormat",e[e.MonthsStandalone=6]="MonthsStandalone",e[e.Eras=7]="Eras",e[e.FirstDayOfWeek=8]="FirstDayOfWeek",e[e.WeekendRange=9]="WeekendRange",e[e.DateFormat=10]="DateFormat",e[e.TimeFormat=11]="TimeFormat",e[e.DateTimeFormat=12]="DateTimeFormat",e[e.NumberSymbols=13]="NumberSymbols",e[e.NumberFormats=14]="NumberFormats",e[e.CurrencyCode=15]="CurrencyCode",e[e.CurrencySymbol=16]="CurrencySymbol",e[e.CurrencyName=17]="CurrencyName",e[e.Currencies=18]="Currencies",e[e.Directionality=19]="Directionality",e[e.PluralCase=20]="PluralCase",e[e.ExtraData=21]="ExtraData",e}(Oe||{});function gI(e){return e.toLowerCase().replace(/_/g,"-")}var Ra="en-US";var vI=Ra;function _I(e){typeof e=="string"&&(vI=e.toLowerCase().replace(/_/g,"-"))}function I(e,n,t,i){let r=ie(),o=Te(),s=Xe();return Z0(o,r,r[Ee],s,e,n,i),I}function yI(e,n,t,i){let r=e.cleanup;if(r!=null)for(let o=0;oc?a[c]:null}typeof s=="string"&&(o+=2)}return null}function Z0(e,n,t,i,r,o,s){let a=za(i),h=e.firstCreatePass&&E0(e),f=n[Mt],p=D0(n),b=!0;if(i.type&3||s){let M=Tt(i,n),k=s?s(M):M,V=p.length,De=s?ke=>s(sn(ke[i.index])):i.index,Q=null;if(!s&&a&&(Q=yI(e,n,r,i.index)),Q!==null){let ke=Q.__ngLastListenerFn__||Q;ke.__ngNextListenerFn__=o,Q.__ngLastListenerFn__=o,b=!1}else{o=Sm(i,n,f,o,!1);let ke=t.listen(k,r,o);p.push(o,ke),h&&h.push(r,De,V,V+1)}}else o=Sm(i,n,f,o,!1);let _=i.outputs,x;if(b&&_!==null&&(x=_[r])){let M=x.length;if(M)for(let k=0;k-1?Yn(e.index,n):n;Yu(a);let c=Im(n,t,i,s),h=o.__ngNextListenerFn__;for(;h;)c=Im(n,t,h,s)&&c,h=h.__ngNextListenerFn__;return r&&c===!1&&s.preventDefault(),c}}function C(e=1){return DC(e)}function bI(e,n){let t=null,i=Mw(e);for(let r=0;r=e.data.length&&(e.data[t]=null,e.blueprint[t]=null),n[t]=i}function Gt(e){let n=gC();return fg(n,ct+e)}function u(e,n=""){let t=ie(),i=Te(),r=e+ct,o=i.firstCreatePass?gr(i,r,1,n,null):i.data[r],s=CI(i,t,o,n,e);t[r]=s,qa()&&Ja(i,t,s,o),Ci(o,!1)}var CI=(e,n,t,i,r)=>(Ya(!0),Sx(n[Ee],i));function Ie(e){return Se("",e,""),Ie}function Se(e,n,t){let i=ie(),r=UE(i,e,n,t);return r!==xn&&_D(i,xi(),r),Se}function Co(e,n,t){U0(n)&&(n=n());let i=ie(),r=fr();if(an(i,r,n)){let o=Te(),s=Ga();zu(o,s,i,e,n,i[Ee],t,!1)}return Co}function sc(e,n){let t=U0(e);return t&&e.set(n),t}function xo(e,n){let t=ie(),i=Te(),r=Xe();return Z0(i,t,t[Ee],r,e,n),xo}function xI(e,n,t){let i=Te();if(i.firstCreatePass){let r=Gn(e);ru(t,i.data,i.blueprint,r,!0),ru(n,i.data,i.blueprint,r,!1)}}function ru(e,n,t,i,r){if(e=st(e),Array.isArray(e))for(let o=0;o>20;if(sr(e)||!e.multi){let _=new _i(h,r,w),x=pd(c,n,r?f:f+b,p);x===-1?(Sd(ya(a,s),o,c),fd(o,e,n.length),n.push(c),a.directiveStart++,a.directiveEnd++,r&&(a.providerIndexes+=1048576),t.push(_),s.push(_)):(t[x]=_,s[x]=_)}else{let _=pd(c,n,f+b,p),x=pd(c,n,f,f+b),M=_>=0&&t[_],k=x>=0&&t[x];if(r&&!k||!r&&!M){Sd(ya(a,s),o,c);let V=II(r?EI:DI,t.length,r,i,h);!r&&k&&(t[x].providerFactory=V),fd(o,e,n.length,0),n.push(c),a.directiveStart++,a.directiveEnd++,r&&(a.providerIndexes+=1048576),t.push(V),s.push(V)}else{let V=X0(t[r?x:_],h,!r&&i);fd(o,e,_>-1?_:x,V)}!r&&i&&k&&t[x].componentProviders++}}}function fd(e,n,t,i){let r=sr(n),o=$w(n);if(r||o){let c=(o?st(n.useClass):n).prototype.ngOnDestroy;if(c){let h=e.destroyHooks||(e.destroyHooks=[]);if(!r&&n.multi){let f=h.indexOf(t);f===-1?h.push(t,[i,c]):h[f+1].push(i,c)}else h.push(t,c)}}}function X0(e,n,t){return t&&e.componentProviders++,e.multi.push(n)-1}function pd(e,n,t,i){for(let r=t;r{t.providersResolver=(i,r)=>xI(i,r?r(e):e,n)}}var SI=(()=>{class e{constructor(t){this._injector=t,this.cachedInjectors=new Map}getOrCreateStandaloneInjector(t){if(!t.standalone)return null;if(!this.cachedInjectors.has(t)){let i=eg(!1,t.type),r=i.length>0?oc([i],this._injector,`Standalone[${t.type.name}]`):null;this.cachedInjectors.set(t,r)}return this.cachedInjectors.get(t)}ngOnDestroy(){try{for(let t of this.cachedInjectors.values())t!==null&&t.destroy()}finally{this.cachedInjectors.clear()}}static{this.\u0275prov=D({token:e,providedIn:"environment",factory:()=>new e(v(Ze))})}}return e})();function Fe(e){bo("NgStandalone"),e.getStandaloneInjector=n=>n.get(SI).getOrCreateStandaloneInjector(e)}function MI(e,n){let t=e[n];return t===xn?void 0:t}function TI(e,n,t,i,r,o,s){let a=n+t;return FE(e,a,r,o)?NE(e,a+2,s?i.call(s,r,o):i(r,o)):MI(e,a+2)}function Do(e,n){let t=Te(),i,r=e+ct;t.firstCreatePass?(i=AI(n,t.pipeRegistry),t.data[r]=i,i.onDestroy&&(t.destroyHooks??=[]).push(r,i.onDestroy)):i=t.data[r];let o=i.factory||(i.factory=pi(i.type,!0)),s,a=pt(w);try{let c=_a(!1),h=o();return _a(c),wI(t,ie(),r,h),h}finally{pt(a)}}function AI(e,n){if(n)for(let t=n.length-1;t>=0;t--){let i=n[t];if(e===i.name)return i}}function Eo(e,n,t,i){let r=e+ct,o=ie(),s=fg(o,r);return OI(o,r)?TI(o,vC(),n,s.transform,t,i,s):s.transform(t,i)}function OI(e,n){return e[Y].data[n].pure}function In(e,n){return ic(e,n)}var ra=null;function kI(e){ra!==null&&(e.defaultEncapsulation!==ra.defaultEncapsulation||e.preserveWhitespaces!==ra.preserveWhitespaces)||(ra=e)}var ac=(()=>{class e{log(t){console.log(t)}warn(t){console.warn(t)}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"platform"})}}return e})();var eh=new O(""),Io=new O(""),cc=(()=>{class e{constructor(t,i,r){this._ngZone=t,this.registry=i,this._pendingCount=0,this._isZoneStable=!0,this._callbacks=[],this.taskTrackingZone=null,th||(PI(r),r.addToWindow(i)),this._watchAngularEvents(),t.run(()=>{this.taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{F.assertNotInAngularZone(),queueMicrotask(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&this._pendingCount===0&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())queueMicrotask(()=>{for(;this._callbacks.length!==0;){let t=this._callbacks.pop();clearTimeout(t.timeoutId),t.doneCb()}});else{let t=this.getPendingTasks();this._callbacks=this._callbacks.filter(i=>i.updateCb&&i.updateCb(t)?(clearTimeout(i.timeoutId),!1):!0)}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(t=>({source:t.source,creationLocation:t.creationLocation,data:t.data})):[]}addCallback(t,i,r){let o=-1;i&&i>0&&(o=setTimeout(()=>{this._callbacks=this._callbacks.filter(s=>s.timeoutId!==o),t()},i)),this._callbacks.push({doneCb:t,timeoutId:o,updateCb:r})}whenStable(t,i,r){if(r&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(t,i,r),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}registerApplication(t){this.registry.registerApplication(t,this)}unregisterApplication(t){this.registry.unregisterApplication(t)}findProviders(t,i,r){return[]}static{this.\u0275fac=function(i){return new(i||e)(v(F),v(lc),v(Io))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac})}}return e})(),lc=(()=>{class e{constructor(){this._applications=new Map}registerApplication(t,i){this._applications.set(t,i)}unregisterApplication(t){this._applications.delete(t)}unregisterAllApplications(){this._applications.clear()}getTestability(t){return this._applications.get(t)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(t,i=!0){return th?.findTestabilityInTree(this,t,i)??null}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"platform"})}}return e})();function PI(e){th=e}var th;function Si(e){return!!e&&typeof e.then=="function"}function J0(e){return!!e&&typeof e.subscribe=="function"}var dc=new O(""),ev=(()=>{class e{constructor(){this.initialized=!1,this.done=!1,this.donePromise=new Promise((t,i)=>{this.resolve=t,this.reject=i}),this.appInits=S(dc,{optional:!0})??[]}runInitializers(){if(this.initialized)return;let t=[];for(let r of this.appInits){let o=r();if(Si(o))t.push(o);else if(J0(o)){let s=new Promise((a,c)=>{o.subscribe({complete:a,error:c})});t.push(s)}}let i=()=>{this.done=!0,this.resolve()};Promise.all(t).then(()=>{i()}).catch(r=>{this.reject(r)}),t.length===0&&i(),this.initialized=!0}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),uc=new O("");function RI(){gp(()=>{throw new P(600,!1)})}function NI(e){return e.isBoundToModule}function FI(e,n,t){try{let i=t();return Si(i)?i.catch(r=>{throw n.runOutsideAngular(()=>e.handleError(r)),r}):i}catch(i){throw n.runOutsideAngular(()=>e.handleError(i)),i}}function tv(e,n){return Array.isArray(n)?n.reduce(tv,e):E(E({},e),n)}var Sn=(()=>{class e{constructor(){this._bootstrapListeners=[],this._runningTick=!1,this._destroyed=!1,this._destroyListeners=[],this._views=[],this.internalErrorHandler=S(jg),this.afterRenderEffectManager=S(Zu),this.externalTestViews=new Set,this.beforeRender=new B,this.afterTick=new B,this.componentTypes=[],this.components=[],this.isStable=S(Ei).hasPendingTasks.pipe(U(t=>!t)),this._injector=S(Ze)}get destroyed(){return this._destroyed}get injector(){return this._injector}bootstrap(t,i){let r=t instanceof Ia;if(!this._injector.get(ev).done){let b=!r&&Zm(t),_=!1;throw new P(405,_)}let s;r?s=t:s=this._injector.get(Qn).resolveComponentFactory(t),this.componentTypes.push(s.componentType);let a=NI(s)?void 0:this._injector.get(qn),c=i||s.selector,h=s.create(Ae.NULL,[],c,a),f=h.location.nativeElement,p=h.injector.get(eh,null);return p?.registerApplication(f),h.onDestroy(()=>{this.detachView(h.hostView),da(this.components,h),p?.unregisterApplication(f)}),this._loadComponent(h),h}tick(){this._tick(!0)}_tick(t){if(this._runningTick)throw new P(101,!1);let i=se(null);try{this._runningTick=!0,this.detectChangesInAttachedViews(t)}catch(r){this.internalErrorHandler(r)}finally{this.afterTick.next(),this._runningTick=!1,se(i)}}detectChangesInAttachedViews(t){let i=0,r=this.afterRenderEffectManager;for(;;){if(i===A0)throw new P(103,!1);if(t){let o=i===0;this.beforeRender.next(o);for(let{_lView:s,notifyErrorHandler:a}of this._views)LI(s,o,a)}if(i++,r.executeInternalCallbacks(),![...this.externalTestViews.keys(),...this._views].some(({_lView:o})=>su(o))&&(r.execute(),![...this.externalTestViews.keys(),...this._views].some(({_lView:o})=>su(o))))break}}attachView(t){let i=t;this._views.push(i),i.attachToAppRef(this)}detachView(t){let i=t;da(this._views,i),i.detachFromAppRef()}_loadComponent(t){this.attachView(t.hostView),this.tick(),this.components.push(t);let i=this._injector.get(uc,[]);[...this._bootstrapListeners,...i].forEach(r=>r(t))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(t=>t()),this._views.slice().forEach(t=>t.destroy())}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(t){return this._destroyListeners.push(t),()=>da(this._destroyListeners,t)}destroy(){if(this._destroyed)throw new P(406,!1);let t=this._injector;t.destroy&&!t.destroyed&&t.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function da(e,n){let t=e.indexOf(n);t>-1&&e.splice(t,1)}function LI(e,n,t){!n&&!su(e)||VI(e,t,n)}function su(e){return Du(e)}function VI(e,n,t){let i;t?(i=0,e[j]|=1024):e[j]&64?i=0:i=1,O0(e,n,i)}var au=class{constructor(n,t){this.ngModuleFactory=n,this.componentFactories=t}},hc=(()=>{class e{compileModuleSync(t){return new ka(t)}compileModuleAsync(t){return Promise.resolve(this.compileModuleSync(t))}compileModuleAndAllComponentsSync(t){let i=this.compileModuleSync(t),r=Km(t),o=i0(r.declarations).reduce((s,a)=>{let c=zn(a);return c&&s.push(new dr(c)),s},[]);return new au(i,o)}compileModuleAndAllComponentsAsync(t){return Promise.resolve(this.compileModuleAndAllComponentsSync(t))}clearCache(){}clearCacheFor(t){}getModuleId(t){}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),jI=new O("");function BI(e,n,t){let i=new ka(t);return Promise.resolve(i)}function Mm(e){for(let n=e.length-1;n>=0;n--)if(e[n]!==void 0)return e[n]}var UI=(()=>{class e{constructor(){this.zone=S(F),this.applicationRef=S(Sn)}initialize(){this._onMicrotaskEmptySubscription||(this._onMicrotaskEmptySubscription=this.zone.onMicrotaskEmpty.subscribe({next:()=>{this.zone.run(()=>{this.applicationRef.tick()})}}))}ngOnDestroy(){this._onMicrotaskEmptySubscription?.unsubscribe()}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function $I(e){return[{provide:F,useFactory:e},{provide:or,multi:!0,useFactory:()=>{let n=S(UI,{optional:!0});return()=>n.initialize()}},{provide:or,multi:!0,useFactory:()=>{let n=S(GI);return()=>{n.initialize()}}},{provide:jg,useFactory:HI}]}function HI(){let e=S(F),n=S($t);return t=>e.runOutsideAngular(()=>n.handleError(t))}function zI(e){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:e?.eventCoalescing??!1,shouldCoalesceRunChangeDetection:e?.runCoalescing??!1}}var GI=(()=>{class e{constructor(){this.subscription=new _e,this.initialized=!1,this.zone=S(F),this.pendingTasks=S(Ei)}initialize(){if(this.initialized)return;this.initialized=!0;let t=null;!this.zone.isStable&&!this.zone.hasPendingMacrotasks&&!this.zone.hasPendingMicrotasks&&(t=this.pendingTasks.add()),this.zone.runOutsideAngular(()=>{this.subscription.add(this.zone.onStable.subscribe(()=>{F.assertNotInAngularZone(),queueMicrotask(()=>{t!==null&&!this.zone.hasPendingMacrotasks&&!this.zone.hasPendingMicrotasks&&(this.pendingTasks.remove(t),t=null)})}))}),this.subscription.add(this.zone.onUnstable.subscribe(()=>{F.assertInAngularZone(),t??=this.pendingTasks.add()}))}ngOnDestroy(){this.subscription.unsubscribe()}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function WI(){return typeof $localize<"u"&&$localize.locale||Ra}var _r=new O("",{providedIn:"root",factory:()=>S(_r,te.Optional|te.SkipSelf)||WI()});var nv=new O(""),iv=(()=>{class e{constructor(t){this._injector=t,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(t,i){let r=qD(i?.ngZone,zI({eventCoalescing:i?.ngZoneEventCoalescing,runCoalescing:i?.ngZoneRunCoalescing}));return r.run(()=>{let o=kE(t.moduleType,this.injector,$I(()=>r)),s=o.injector.get($t,null);return r.runOutsideAngular(()=>{let a=r.onError.subscribe({next:c=>{s.handleError(c)}});o.onDestroy(()=>{da(this._modules,o),a.unsubscribe()})}),FI(s,r,()=>{let a=o.injector.get(ev);return a.runInitializers(),a.donePromise.then(()=>{let c=o.injector.get(_r,Ra);return _I(c||Ra),this._moduleDoBootstrap(o),o})})})}bootstrapModule(t,i=[]){let r=tv({},i);return BI(this.injector,r,t).then(o=>this.bootstrapModuleFactory(o,r))}_moduleDoBootstrap(t){let i=t.injector.get(Sn);if(t._bootstrapComponents.length>0)t._bootstrapComponents.forEach(r=>i.bootstrap(r));else if(t.instance.ngDoBootstrap)t.instance.ngDoBootstrap(i);else throw new P(-403,!1);this._modules.push(t)}onDestroy(t){this._destroyListeners.push(t)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new P(404,!1);this._modules.slice().forEach(i=>i.destroy()),this._destroyListeners.forEach(i=>i());let t=this._injector.get(nv,null);t&&(t.forEach(i=>i()),t.clear()),this._destroyed=!0}get destroyed(){return this._destroyed}static{this.\u0275fac=function(i){return new(i||e)(v(Ae))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"platform"})}}return e})(),Jr=null,rv=new O("");function qI(e){if(Jr&&!Jr.get(rv,!1))throw new P(400,!1);RI(),Jr=e;let n=e.get(iv);return ZI(e),n}function nh(e,n,t=[]){let i=`Platform: ${n}`,r=new O(i);return(o=[])=>{let s=ov();if(!s||s.injector.get(rv,!1)){let a=[...t,...o,{provide:r,useValue:!0}];e?e(a):qI(YI(a,i))}return QI(r)}}function YI(e=[],n){return Ae.create({name:n,providers:[{provide:Ua,useValue:"platform"},{provide:nv,useValue:new Set([()=>Jr=null])},...e]})}function QI(e){let n=ov();if(!n)throw new P(401,!1);return n}function ov(){return Jr?.get(iv)??null}function ZI(e){e.get(ku,null)?.forEach(t=>t())}var Ve=(()=>{class e{static{this.__NG_ELEMENT_ID__=KI}}return e})();function KI(e){return XI(Xe(),ie(),(e&16)===16)}function XI(e,n,t){if(Ha(e)&&!t){let i=Yn(e.index,n);return new bi(i,i)}else if(e.type&47){let i=n[Ut];return new bi(i,n)}return null}var cu=class{constructor(){}supports(n){return $0(n)}create(n){return new lu(n)}},JI=(e,n)=>n,lu=class{constructor(n){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=n||JI}forEachItem(n){let t;for(t=this._itHead;t!==null;t=t._next)n(t)}forEachOperation(n){let t=this._itHead,i=this._removalsHead,r=0,o=null;for(;t||i;){let s=!i||t&&t.currentIndex{s=this._trackByFn(r,a),t===null||!Object.is(t.trackById,s)?(t=this._mismatch(t,a,s,r),i=!0):(i&&(t=this._verifyReinsertion(t,a,s,r)),Object.is(t.item,a)||this._addIdentityChange(t,a)),t=t._next,r++}),this.length=r;return this._truncate(t),this.collection=n,this.isDirty}get isDirty(){return this._additionsHead!==null||this._movesHead!==null||this._removalsHead!==null||this._identityChangesHead!==null}_reset(){if(this.isDirty){let n;for(n=this._previousItHead=this._itHead;n!==null;n=n._next)n._nextPrevious=n._next;for(n=this._additionsHead;n!==null;n=n._nextAdded)n.previousIndex=n.currentIndex;for(this._additionsHead=this._additionsTail=null,n=this._movesHead;n!==null;n=n._nextMoved)n.previousIndex=n.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(n,t,i,r){let o;return n===null?o=this._itTail:(o=n._prev,this._remove(n)),n=this._unlinkedRecords===null?null:this._unlinkedRecords.get(i,null),n!==null?(Object.is(n.item,t)||this._addIdentityChange(n,t),this._reinsertAfter(n,o,r)):(n=this._linkedRecords===null?null:this._linkedRecords.get(i,r),n!==null?(Object.is(n.item,t)||this._addIdentityChange(n,t),this._moveAfter(n,o,r)):n=this._addAfter(new du(t,i),o,r)),n}_verifyReinsertion(n,t,i,r){let o=this._unlinkedRecords===null?null:this._unlinkedRecords.get(i,null);return o!==null?n=this._reinsertAfter(o,n._prev,r):n.currentIndex!=r&&(n.currentIndex=r,this._addToMoves(n,r)),n}_truncate(n){for(;n!==null;){let t=n._next;this._addToRemovals(this._unlink(n)),n=t}this._unlinkedRecords!==null&&this._unlinkedRecords.clear(),this._additionsTail!==null&&(this._additionsTail._nextAdded=null),this._movesTail!==null&&(this._movesTail._nextMoved=null),this._itTail!==null&&(this._itTail._next=null),this._removalsTail!==null&&(this._removalsTail._nextRemoved=null),this._identityChangesTail!==null&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(n,t,i){this._unlinkedRecords!==null&&this._unlinkedRecords.remove(n);let r=n._prevRemoved,o=n._nextRemoved;return r===null?this._removalsHead=o:r._nextRemoved=o,o===null?this._removalsTail=r:o._prevRemoved=r,this._insertAfter(n,t,i),this._addToMoves(n,i),n}_moveAfter(n,t,i){return this._unlink(n),this._insertAfter(n,t,i),this._addToMoves(n,i),n}_addAfter(n,t,i){return this._insertAfter(n,t,i),this._additionsTail===null?this._additionsTail=this._additionsHead=n:this._additionsTail=this._additionsTail._nextAdded=n,n}_insertAfter(n,t,i){let r=t===null?this._itHead:t._next;return n._next=r,n._prev=t,r===null?this._itTail=n:r._prev=n,t===null?this._itHead=n:t._next=n,this._linkedRecords===null&&(this._linkedRecords=new Na),this._linkedRecords.put(n),n.currentIndex=i,n}_remove(n){return this._addToRemovals(this._unlink(n))}_unlink(n){this._linkedRecords!==null&&this._linkedRecords.remove(n);let t=n._prev,i=n._next;return t===null?this._itHead=i:t._next=i,i===null?this._itTail=t:i._prev=t,n}_addToMoves(n,t){return n.previousIndex===t||(this._movesTail===null?this._movesTail=this._movesHead=n:this._movesTail=this._movesTail._nextMoved=n),n}_addToRemovals(n){return this._unlinkedRecords===null&&(this._unlinkedRecords=new Na),this._unlinkedRecords.put(n),n.currentIndex=null,n._nextRemoved=null,this._removalsTail===null?(this._removalsTail=this._removalsHead=n,n._prevRemoved=null):(n._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=n),n}_addIdentityChange(n,t){return n.item=t,this._identityChangesTail===null?this._identityChangesTail=this._identityChangesHead=n:this._identityChangesTail=this._identityChangesTail._nextIdentityChange=n,n}},du=class{constructor(n,t){this.item=n,this.trackById=t,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}},uu=class{constructor(){this._head=null,this._tail=null}add(n){this._head===null?(this._head=this._tail=n,n._nextDup=null,n._prevDup=null):(this._tail._nextDup=n,n._prevDup=this._tail,n._nextDup=null,this._tail=n)}get(n,t){let i;for(i=this._head;i!==null;i=i._nextDup)if((t===null||t<=i.currentIndex)&&Object.is(i.trackById,n))return i;return null}remove(n){let t=n._prevDup,i=n._nextDup;return t===null?this._head=i:t._nextDup=i,i===null?this._tail=t:i._prevDup=t,this._head===null}},Na=class{constructor(){this.map=new Map}put(n){let t=n.trackById,i=this.map.get(t);i||(i=new uu,this.map.set(t,i)),i.add(n)}get(n,t){let i=n,r=this.map.get(i);return r?r.get(n,t):null}remove(n){let t=n.trackById;return this.map.get(t).remove(n)&&this.map.delete(t),n}get isEmpty(){return this.map.size===0}clear(){this.map.clear()}};function Tm(e,n,t){let i=e.previousIndex;if(i===null)return i;let r=0;return t&&i{class e{static{this.\u0275prov=D({token:e,providedIn:"root",factory:Am})}constructor(t){this.factories=t}static create(t,i){if(i!=null){let r=i.factories.slice();t=t.concat(r)}return new e(t)}static extend(t){return{provide:e,useFactory:i=>e.create(t,i||Am()),deps:[[e,new fu,new ja]]}}find(t){let i=this.factories.find(r=>r.supports(t));if(i!=null)return i;throw new P(901,!1)}}return e})();var sv=nh(null,"core",[]),av=(()=>{class e{constructor(t){}static{this.\u0275fac=function(i){return new(i||e)(v(Sn))}}static{this.\u0275mod=G({type:e})}static{this.\u0275inj=z({})}}return e})();function et(e){return typeof e=="boolean"?e:e!=null&&e!=="false"}function ih(e,n=NaN){return!isNaN(parseFloat(e))&&!isNaN(Number(e))?Number(e):n}function cv(e){let n=zn(e);if(!n)return null;let t=new dr(n);return{get selector(){return t.selector},get type(){return t.componentType},get inputs(){return t.inputs},get outputs(){return t.outputs},get ngContentSelectors(){return t.ngContentSelectors},get isStandalone(){return n.standalone},get isSignal(){return n.signals}}}var mv=null;function ln(){return mv}function gv(e){mv??=e}var Cc=class{};var W=new O(""),ph=(()=>{class e{historyGo(t){throw new Error("")}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:()=>S(eS),providedIn:"platform"})}}return e})(),vv=new O(""),eS=(()=>{class e extends ph{constructor(){super(),this._doc=S(W),this._location=window.location,this._history=window.history}getBaseHrefFromDOM(){return ln().getBaseHref(this._doc)}onPopState(t){let i=ln().getGlobalEventTarget(this._doc,"window");return i.addEventListener("popstate",t,!1),()=>i.removeEventListener("popstate",t)}onHashChange(t){let i=ln().getGlobalEventTarget(this._doc,"window");return i.addEventListener("hashchange",t,!1),()=>i.removeEventListener("hashchange",t)}get href(){return this._location.href}get protocol(){return this._location.protocol}get hostname(){return this._location.hostname}get port(){return this._location.port}get pathname(){return this._location.pathname}get search(){return this._location.search}get hash(){return this._location.hash}set pathname(t){this._location.pathname=t}pushState(t,i,r){this._history.pushState(t,i,r)}replaceState(t,i,r){this._history.replaceState(t,i,r)}forward(){this._history.forward()}back(){this._history.back()}historyGo(t=0){this._history.go(t)}getState(){return this._history.state}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:()=>new e,providedIn:"platform"})}}return e})();function mh(e,n){if(e.length==0)return n;if(n.length==0)return e;let t=0;return e.endsWith("/")&&t++,n.startsWith("/")&&t++,t==2?e+n.substring(1):t==1?e+n:e+"/"+n}function lv(e){let n=e.match(/#|\?|$/),t=n&&n.index||e.length,i=t-(e[t-1]==="/"?1:0);return e.slice(0,i)+e.slice(t)}function Tn(e){return e&&e[0]!=="?"?"?"+e:e}var kn=(()=>{class e{historyGo(t){throw new Error("")}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:()=>S(gh),providedIn:"root"})}}return e})(),_v=new O(""),gh=(()=>{class e extends kn{constructor(t,i){super(),this._platformLocation=t,this._removeListenerFns=[],this._baseHref=i??this._platformLocation.getBaseHrefFromDOM()??S(W).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(t){this._removeListenerFns.push(this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t))}getBaseHref(){return this._baseHref}prepareExternalUrl(t){return mh(this._baseHref,t)}path(t=!1){let i=this._platformLocation.pathname+Tn(this._platformLocation.search),r=this._platformLocation.hash;return r&&t?`${i}${r}`:i}pushState(t,i,r,o){let s=this.prepareExternalUrl(r+Tn(o));this._platformLocation.pushState(t,i,s)}replaceState(t,i,r,o){let s=this.prepareExternalUrl(r+Tn(o));this._platformLocation.replaceState(t,i,s)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(t=0){this._platformLocation.historyGo?.(t)}static{this.\u0275fac=function(i){return new(i||e)(v(ph),v(_v,8))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),yv=(()=>{class e extends kn{constructor(t,i){super(),this._platformLocation=t,this._baseHref="",this._removeListenerFns=[],i!=null&&(this._baseHref=i)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(t){this._removeListenerFns.push(this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t))}getBaseHref(){return this._baseHref}path(t=!1){let i=this._platformLocation.hash??"#";return i.length>0?i.substring(1):i}prepareExternalUrl(t){let i=mh(this._baseHref,t);return i.length>0?"#"+i:i}pushState(t,i,r,o){let s=this.prepareExternalUrl(r+Tn(o));s.length==0&&(s=this._platformLocation.pathname),this._platformLocation.pushState(t,i,s)}replaceState(t,i,r,o){let s=this.prepareExternalUrl(r+Tn(o));s.length==0&&(s=this._platformLocation.pathname),this._platformLocation.replaceState(t,i,s)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(t=0){this._platformLocation.historyGo?.(t)}static{this.\u0275fac=function(i){return new(i||e)(v(ph),v(_v,8))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac})}}return e})(),dn=(()=>{class e{constructor(t){this._subject=new ne,this._urlChangeListeners=[],this._urlChangeSubscription=null,this._locationStrategy=t;let i=this._locationStrategy.getBaseHref();this._basePath=iS(lv(dv(i))),this._locationStrategy.onPopState(r=>{this._subject.emit({url:this.path(!0),pop:!0,state:r.state,type:r.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(t=!1){return this.normalize(this._locationStrategy.path(t))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(t,i=""){return this.path()==this.normalize(t+Tn(i))}normalize(t){return e.stripTrailingSlash(nS(this._basePath,dv(t)))}prepareExternalUrl(t){return t&&t[0]!=="/"&&(t="/"+t),this._locationStrategy.prepareExternalUrl(t)}go(t,i="",r=null){this._locationStrategy.pushState(r,"",t,i),this._notifyUrlChangeListeners(this.prepareExternalUrl(t+Tn(i)),r)}replaceState(t,i="",r=null){this._locationStrategy.replaceState(r,"",t,i),this._notifyUrlChangeListeners(this.prepareExternalUrl(t+Tn(i)),r)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(t=0){this._locationStrategy.historyGo?.(t)}onUrlChange(t){return this._urlChangeListeners.push(t),this._urlChangeSubscription??=this.subscribe(i=>{this._notifyUrlChangeListeners(i.url,i.state)}),()=>{let i=this._urlChangeListeners.indexOf(t);this._urlChangeListeners.splice(i,1),this._urlChangeListeners.length===0&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(t="",i){this._urlChangeListeners.forEach(r=>r(t,i))}subscribe(t,i,r){return this._subject.subscribe({next:t,error:i,complete:r})}static{this.normalizeQueryParams=Tn}static{this.joinWithSlash=mh}static{this.stripTrailingSlash=lv}static{this.\u0275fac=function(i){return new(i||e)(v(kn))}}static{this.\u0275prov=D({token:e,factory:()=>tS(),providedIn:"root"})}}return e})();function tS(){return new dn(v(kn))}function nS(e,n){if(!e||!n.startsWith(e))return n;let t=n.substring(e.length);return t===""||["/",";","?","#"].includes(t[0])?t:n}function dv(e){return e.replace(/\/index.html$/,"")}function iS(e){if(new RegExp("^(https?:)?//").test(e)){let[,t]=e.split(/\/\/[^\/]+/);return t}return e}var bv=function(e){return e[e.Decimal=0]="Decimal",e[e.Percent=1]="Percent",e[e.Currency=2]="Currency",e[e.Scientific=3]="Scientific",e}(bv||{});var dt=function(e){return e[e.Format=0]="Format",e[e.Standalone=1]="Standalone",e}(dt||{}),ve=function(e){return e[e.Narrow=0]="Narrow",e[e.Abbreviated=1]="Abbreviated",e[e.Wide=2]="Wide",e[e.Short=3]="Short",e}(ve||{}),Dt=function(e){return e[e.Short=0]="Short",e[e.Medium=1]="Medium",e[e.Long=2]="Long",e[e.Full=3]="Full",e}(Dt||{}),Et={Decimal:0,Group:1,List:2,PercentSign:3,PlusSign:4,MinusSign:5,Exponential:6,SuperscriptingExponent:7,PerMille:8,Infinity:9,NaN:10,TimeSeparator:11,CurrencyDecimal:12,CurrencyGroup:13};function rS(e){return xt(e)[Oe.LocaleId]}function oS(e,n,t){let i=xt(e),r=[i[Oe.DayPeriodsFormat],i[Oe.DayPeriodsStandalone]],o=Ot(r,n);return Ot(o,t)}function sS(e,n,t){let i=xt(e),r=[i[Oe.DaysFormat],i[Oe.DaysStandalone]],o=Ot(r,n);return Ot(o,t)}function aS(e,n,t){let i=xt(e),r=[i[Oe.MonthsFormat],i[Oe.MonthsStandalone]],o=Ot(r,n);return Ot(o,t)}function cS(e,n){let i=xt(e)[Oe.Eras];return Ot(i,n)}function pc(e,n){let t=xt(e);return Ot(t[Oe.DateFormat],n)}function mc(e,n){let t=xt(e);return Ot(t[Oe.TimeFormat],n)}function gc(e,n){let i=xt(e)[Oe.DateTimeFormat];return Ot(i,n)}function An(e,n){let t=xt(e),i=t[Oe.NumberSymbols][n];if(typeof i>"u"){if(n===Et.CurrencyDecimal)return t[Oe.NumberSymbols][Et.Decimal];if(n===Et.CurrencyGroup)return t[Oe.NumberSymbols][Et.Group]}return i}function lS(e,n){return xt(e)[Oe.NumberFormats][n]}function wv(e){if(!e[Oe.ExtraData])throw new Error(`Missing extra locale data for the locale "${e[Oe.LocaleId]}". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.`)}function dS(e){let n=xt(e);return wv(n),(n[Oe.ExtraData][2]||[]).map(i=>typeof i=="string"?rh(i):[rh(i[0]),rh(i[1])])}function uS(e,n,t){let i=xt(e);wv(i);let r=[i[Oe.ExtraData][0],i[Oe.ExtraData][1]],o=Ot(r,n)||[];return Ot(o,t)||[]}function Ot(e,n){for(let t=n;t>-1;t--)if(typeof e[t]<"u")return e[t];throw new Error("Locale data API: locale data undefined")}function rh(e){let[n,t]=e.split(":");return{hours:+n,minutes:+t}}var hS=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,vc={},fS=/((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/,On=function(e){return e[e.Short=0]="Short",e[e.ShortGMT=1]="ShortGMT",e[e.Long=2]="Long",e[e.Extended=3]="Extended",e}(On||{}),ue=function(e){return e[e.FullYear=0]="FullYear",e[e.Month=1]="Month",e[e.Date=2]="Date",e[e.Hours=3]="Hours",e[e.Minutes=4]="Minutes",e[e.Seconds=5]="Seconds",e[e.FractionalSeconds=6]="FractionalSeconds",e[e.Day=7]="Day",e}(ue||{}),de=function(e){return e[e.DayPeriods=0]="DayPeriods",e[e.Days=1]="Days",e[e.Months=2]="Months",e[e.Eras=3]="Eras",e}(de||{});function pS(e,n,t,i){let r=xS(e);n=Mn(t,n)||n;let s=[],a;for(;n;)if(a=fS.exec(n),a){s=s.concat(a.slice(1));let f=s.pop();if(!f)break;n=f}else{s.push(n);break}let c=r.getTimezoneOffset();i&&(c=xv(i,c),r=CS(r,i,!0));let h="";return s.forEach(f=>{let p=bS(f);h+=p?p(r,t,c):f==="''"?"'":f.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),h}function xc(e,n,t){let i=new Date(0);return i.setFullYear(e,n,t),i.setHours(0,0,0),i}function Mn(e,n){let t=rS(e);if(vc[t]??={},vc[t][n])return vc[t][n];let i="";switch(n){case"shortDate":i=pc(e,Dt.Short);break;case"mediumDate":i=pc(e,Dt.Medium);break;case"longDate":i=pc(e,Dt.Long);break;case"fullDate":i=pc(e,Dt.Full);break;case"shortTime":i=mc(e,Dt.Short);break;case"mediumTime":i=mc(e,Dt.Medium);break;case"longTime":i=mc(e,Dt.Long);break;case"fullTime":i=mc(e,Dt.Full);break;case"short":let r=Mn(e,"shortTime"),o=Mn(e,"shortDate");i=_c(gc(e,Dt.Short),[r,o]);break;case"medium":let s=Mn(e,"mediumTime"),a=Mn(e,"mediumDate");i=_c(gc(e,Dt.Medium),[s,a]);break;case"long":let c=Mn(e,"longTime"),h=Mn(e,"longDate");i=_c(gc(e,Dt.Long),[c,h]);break;case"full":let f=Mn(e,"fullTime"),p=Mn(e,"fullDate");i=_c(gc(e,Dt.Full),[f,p]);break}return i&&(vc[t][n]=i),i}function _c(e,n){return n&&(e=e.replace(/\{([^}]+)}/g,function(t,i){return n!=null&&i in n?n[i]:t})),e}function Wt(e,n,t="-",i,r){let o="";(e<0||r&&e<=0)&&(r?e=-e+1:(e=-e,o=t));let s=String(e);for(;s.length0||a>-t)&&(a+=t),e===ue.Hours)a===0&&t===-12&&(a=12);else if(e===ue.FractionalSeconds)return mS(a,n);let c=An(s,Et.MinusSign);return Wt(a,n,c,i,r)}}function gS(e,n){switch(e){case ue.FullYear:return n.getFullYear();case ue.Month:return n.getMonth();case ue.Date:return n.getDate();case ue.Hours:return n.getHours();case ue.Minutes:return n.getMinutes();case ue.Seconds:return n.getSeconds();case ue.FractionalSeconds:return n.getMilliseconds();case ue.Day:return n.getDay();default:throw new Error(`Unknown DateType value "${e}".`)}}function we(e,n,t=dt.Format,i=!1){return function(r,o){return vS(r,o,e,n,t,i)}}function vS(e,n,t,i,r,o){switch(t){case de.Months:return aS(n,r,i)[e.getMonth()];case de.Days:return sS(n,r,i)[e.getDay()];case de.DayPeriods:let s=e.getHours(),a=e.getMinutes();if(o){let h=dS(n),f=uS(n,r,i),p=h.findIndex(b=>{if(Array.isArray(b)){let[_,x]=b,M=s>=_.hours&&a>=_.minutes,k=s0?Math.floor(r/60):Math.ceil(r/60);switch(e){case On.Short:return(r>=0?"+":"")+Wt(s,2,o)+Wt(Math.abs(r%60),2,o);case On.ShortGMT:return"GMT"+(r>=0?"+":"")+Wt(s,1,o);case On.Long:return"GMT"+(r>=0?"+":"")+Wt(s,2,o)+":"+Wt(Math.abs(r%60),2,o);case On.Extended:return i===0?"Z":(r>=0?"+":"")+Wt(s,2,o)+":"+Wt(Math.abs(r%60),2,o);default:throw new Error(`Unknown zone width "${e}"`)}}}var _S=0,wc=4;function yS(e){let n=xc(e,_S,1).getDay();return xc(e,0,1+(n<=wc?wc:wc+7)-n)}function Cv(e){let n=e.getDay(),t=n===0?-3:wc-n;return xc(e.getFullYear(),e.getMonth(),e.getDate()+t)}function oh(e,n=!1){return function(t,i){let r;if(n){let o=new Date(t.getFullYear(),t.getMonth(),1).getDay()-1,s=t.getDate();r=1+Math.floor((s+o)/7)}else{let o=Cv(t),s=yS(o.getFullYear()),a=o.getTime()-s.getTime();r=1+Math.round(a/6048e5)}return Wt(r,e,An(i,Et.MinusSign))}}function bc(e,n=!1){return function(t,i){let o=Cv(t).getFullYear();return Wt(o,e,An(i,Et.MinusSign),n)}}var sh={};function bS(e){if(sh[e])return sh[e];let n;switch(e){case"G":case"GG":case"GGG":n=we(de.Eras,ve.Abbreviated);break;case"GGGG":n=we(de.Eras,ve.Wide);break;case"GGGGG":n=we(de.Eras,ve.Narrow);break;case"y":n=je(ue.FullYear,1,0,!1,!0);break;case"yy":n=je(ue.FullYear,2,0,!0,!0);break;case"yyy":n=je(ue.FullYear,3,0,!1,!0);break;case"yyyy":n=je(ue.FullYear,4,0,!1,!0);break;case"Y":n=bc(1);break;case"YY":n=bc(2,!0);break;case"YYY":n=bc(3);break;case"YYYY":n=bc(4);break;case"M":case"L":n=je(ue.Month,1,1);break;case"MM":case"LL":n=je(ue.Month,2,1);break;case"MMM":n=we(de.Months,ve.Abbreviated);break;case"MMMM":n=we(de.Months,ve.Wide);break;case"MMMMM":n=we(de.Months,ve.Narrow);break;case"LLL":n=we(de.Months,ve.Abbreviated,dt.Standalone);break;case"LLLL":n=we(de.Months,ve.Wide,dt.Standalone);break;case"LLLLL":n=we(de.Months,ve.Narrow,dt.Standalone);break;case"w":n=oh(1);break;case"ww":n=oh(2);break;case"W":n=oh(1,!0);break;case"d":n=je(ue.Date,1);break;case"dd":n=je(ue.Date,2);break;case"c":case"cc":n=je(ue.Day,1);break;case"ccc":n=we(de.Days,ve.Abbreviated,dt.Standalone);break;case"cccc":n=we(de.Days,ve.Wide,dt.Standalone);break;case"ccccc":n=we(de.Days,ve.Narrow,dt.Standalone);break;case"cccccc":n=we(de.Days,ve.Short,dt.Standalone);break;case"E":case"EE":case"EEE":n=we(de.Days,ve.Abbreviated);break;case"EEEE":n=we(de.Days,ve.Wide);break;case"EEEEE":n=we(de.Days,ve.Narrow);break;case"EEEEEE":n=we(de.Days,ve.Short);break;case"a":case"aa":case"aaa":n=we(de.DayPeriods,ve.Abbreviated);break;case"aaaa":n=we(de.DayPeriods,ve.Wide);break;case"aaaaa":n=we(de.DayPeriods,ve.Narrow);break;case"b":case"bb":case"bbb":n=we(de.DayPeriods,ve.Abbreviated,dt.Standalone,!0);break;case"bbbb":n=we(de.DayPeriods,ve.Wide,dt.Standalone,!0);break;case"bbbbb":n=we(de.DayPeriods,ve.Narrow,dt.Standalone,!0);break;case"B":case"BB":case"BBB":n=we(de.DayPeriods,ve.Abbreviated,dt.Format,!0);break;case"BBBB":n=we(de.DayPeriods,ve.Wide,dt.Format,!0);break;case"BBBBB":n=we(de.DayPeriods,ve.Narrow,dt.Format,!0);break;case"h":n=je(ue.Hours,1,-12);break;case"hh":n=je(ue.Hours,2,-12);break;case"H":n=je(ue.Hours,1);break;case"HH":n=je(ue.Hours,2);break;case"m":n=je(ue.Minutes,1);break;case"mm":n=je(ue.Minutes,2);break;case"s":n=je(ue.Seconds,1);break;case"ss":n=je(ue.Seconds,2);break;case"S":n=je(ue.FractionalSeconds,1);break;case"SS":n=je(ue.FractionalSeconds,2);break;case"SSS":n=je(ue.FractionalSeconds,3);break;case"Z":case"ZZ":case"ZZZ":n=yc(On.Short);break;case"ZZZZZ":n=yc(On.Extended);break;case"O":case"OO":case"OOO":case"z":case"zz":case"zzz":n=yc(On.ShortGMT);break;case"OOOO":case"ZZZZ":case"zzzz":n=yc(On.Long);break;default:return null}return sh[e]=n,n}function xv(e,n){e=e.replace(/:/g,"");let t=Date.parse("Jan 01, 1970 00:00:00 "+e)/6e4;return isNaN(t)?n:t}function wS(e,n){return e=new Date(e.getTime()),e.setMinutes(e.getMinutes()+n),e}function CS(e,n,t){let i=t?-1:1,r=e.getTimezoneOffset(),o=xv(n,r);return wS(e,i*(o-r))}function xS(e){if(uv(e))return e;if(typeof e=="number"&&!isNaN(e))return new Date(e);if(typeof e=="string"){if(e=e.trim(),/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(e)){let[r,o=1,s=1]=e.split("-").map(a=>+a);return xc(r,o-1,s)}let t=parseFloat(e);if(!isNaN(e-t))return new Date(t);let i;if(i=e.match(hS))return DS(i)}let n=new Date(e);if(!uv(n))throw new Error(`Unable to convert "${e}" into a date`);return n}function DS(e){let n=new Date(0),t=0,i=0,r=e[8]?n.setUTCFullYear:n.setFullYear,o=e[8]?n.setUTCHours:n.setHours;e[9]&&(t=Number(e[9]+e[10]),i=Number(e[9]+e[11])),r.call(n,Number(e[1]),Number(e[2])-1,Number(e[3]));let s=Number(e[4]||0)-t,a=Number(e[5]||0)-i,c=Number(e[6]||0),h=Math.floor(parseFloat("0."+(e[7]||0))*1e3);return o.call(n,s,a,c,h),n}function uv(e){return e instanceof Date&&!isNaN(e.valueOf())}var ES=/^(\d+)?\.((\d+)(-(\d+))?)?$/,hv=22,Dc=".",So="0",IS=";",SS=",",ah="#";function MS(e,n,t,i,r,o,s=!1){let a="",c=!1;if(!isFinite(e))a=An(t,Et.Infinity);else{let h=kS(e);s&&(h=OS(h));let f=n.minInt,p=n.minFrac,b=n.maxFrac;if(o){let De=o.match(ES);if(De===null)throw new Error(`${o} is not a valid digit info`);let Q=De[1],ke=De[3],yt=De[5];Q!=null&&(f=ch(Q)),ke!=null&&(p=ch(ke)),yt!=null?b=ch(yt):ke!=null&&p>b&&(b=p)}PS(h,p,b);let _=h.digits,x=h.integerLen,M=h.exponent,k=[];for(c=_.every(De=>!De);x0?k=_.splice(x,_.length):(k=_,_=[0]);let V=[];for(_.length>=n.lgSize&&V.unshift(_.splice(-n.lgSize,_.length).join(""));_.length>n.gSize;)V.unshift(_.splice(-n.gSize,_.length).join(""));_.length&&V.unshift(_.join("")),a=V.join(An(t,i)),k.length&&(a+=An(t,r)+k.join("")),M&&(a+=An(t,Et.Exponential)+"+"+M)}return e<0&&!c?a=n.negPre+a+n.negSuf:a=n.posPre+a+n.posSuf,a}function TS(e,n,t){let i=lS(n,bv.Decimal),r=AS(i,An(n,Et.MinusSign));return MS(e,r,n,Et.Group,Et.Decimal,t)}function AS(e,n="-"){let t={minInt:1,minFrac:0,maxFrac:0,posPre:"",posSuf:"",negPre:"",negSuf:"",gSize:0,lgSize:0},i=e.split(IS),r=i[0],o=i[1],s=r.indexOf(Dc)!==-1?r.split(Dc):[r.substring(0,r.lastIndexOf(So)+1),r.substring(r.lastIndexOf(So)+1)],a=s[0],c=s[1]||"";t.posPre=a.substring(0,a.indexOf(ah));for(let f=0;f-1&&(n=n.replace(Dc,"")),(o=n.search(/e/i))>0?(r<0&&(r=o),r+=+n.slice(o+1),n=n.substring(0,o)):r<0&&(r=n.length),o=0;n.charAt(o)===So;o++);if(o===(a=n.length))i=[0],r=1;else{for(a--;n.charAt(a)===So;)a--;for(r-=o,i=[],s=0;o<=a;o++,s++)i[s]=Number(n.charAt(o))}return r>hv&&(i=i.splice(0,hv-1),t=r-1,r=1),{digits:i,exponent:t,integerLen:r}}function PS(e,n,t){if(n>t)throw new Error(`The minimum number of digits after fraction (${n}) is higher than the maximum (${t}).`);let i=e.digits,r=i.length-e.integerLen,o=Math.min(Math.max(n,r),t),s=o+e.integerLen,a=i[s];if(s>0){i.splice(Math.max(e.integerLen,s));for(let p=s;p=5)if(s-1<0){for(let p=0;p>s;p--)i.unshift(0),e.integerLen++;i.unshift(1),e.integerLen++}else i[s-1]++;for(;r=h?x.pop():c=!1),b>=10?1:0},0);f&&(i.unshift(f),e.integerLen++)}function ch(e){let n=parseInt(e);if(isNaN(n))throw new Error("Invalid integer literal when parsing "+e);return n}function Ic(e,n){n=encodeURIComponent(n);for(let t of e.split(";")){let i=t.indexOf("="),[r,o]=i==-1?[t,""]:[t.slice(0,i),t.slice(i+1)];if(r.trim()===n)return decodeURIComponent(o)}return null}var lh=class{constructor(n,t,i,r){this.$implicit=n,this.ngForOf=t,this.index=i,this.count=r}get first(){return this.index===0}get last(){return this.index===this.count-1}get even(){return this.index%2===0}get odd(){return!this.even}},br=(()=>{class e{set ngForOf(t){this._ngForOf=t,this._ngForOfDirty=!0}set ngForTrackBy(t){this._trackByFn=t}get ngForTrackBy(){return this._trackByFn}constructor(t,i,r){this._viewContainer=t,this._template=i,this._differs=r,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}set ngForTemplate(t){t&&(this._template=t)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;let t=this._ngForOf;if(!this._differ&&t)if(0)try{}catch{}else this._differ=this._differs.find(t).create(this.ngForTrackBy)}if(this._differ){let t=this._differ.diff(this._ngForOf);t&&this._applyChanges(t)}}_applyChanges(t){let i=this._viewContainer;t.forEachOperation((r,o,s)=>{if(r.previousIndex==null)i.createEmbeddedView(this._template,new lh(r.item,this._ngForOf,-1,-1),s===null?void 0:s);else if(s==null)i.remove(o===null?void 0:o);else if(o!==null){let a=i.get(o);i.move(a,s),fv(a,r)}});for(let r=0,o=i.length;r{let o=i.get(r.currentIndex);fv(o,r)})}static ngTemplateContextGuard(t,i){return!0}static{this.\u0275fac=function(i){return new(i||e)(w(Ct),w(bt),w(fc))}}static{this.\u0275dir=ce({type:e,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"},standalone:!0})}}return e})();function fv(e,n){e.context.$implicit=n.item}var vt=(()=>{class e{constructor(t,i){this._viewContainer=t,this._context=new dh,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=i}set ngIf(t){this._context.$implicit=this._context.ngIf=t,this._updateView()}set ngIfThen(t){pv("ngIfThen",t),this._thenTemplateRef=t,this._thenViewRef=null,this._updateView()}set ngIfElse(t){pv("ngIfElse",t),this._elseTemplateRef=t,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(t,i){return!0}static{this.\u0275fac=function(i){return new(i||e)(w(Ct),w(bt))}}static{this.\u0275dir=ce({type:e,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"},standalone:!0})}}return e})(),dh=class{constructor(){this.$implicit=null,this.ngIf=null}};function pv(e,n){if(!!!(!n||n.createEmbeddedView))throw new Error(`${e} must be a TemplateRef, but received '${at(n)}'.`)}var RS=!0,uh=class{constructor(n,t){this._viewContainerRef=n,this._templateRef=t,this._created=!1}create(){this._created=!0,this._viewContainerRef.createEmbeddedView(this._templateRef)}destroy(){this._created=!1,this._viewContainerRef.clear()}enforceState(n){n&&!this._created?this.create():!n&&this._created&&this.destroy()}},Mo=(()=>{class e{constructor(){this._defaultViews=[],this._defaultUsed=!1,this._caseCount=0,this._lastCaseCheckIndex=0,this._lastCasesMatched=!1}set ngSwitch(t){this._ngSwitch=t,this._caseCount===0&&this._updateDefaultCases(!0)}_addCase(){return this._caseCount++}_addDefault(t){this._defaultViews.push(t)}_matchCase(t){let i=RS?t===this._ngSwitch:t==this._ngSwitch;return this._lastCasesMatched||=i,this._lastCaseCheckIndex++,this._lastCaseCheckIndex===this._caseCount&&(this._updateDefaultCases(!this._lastCasesMatched),this._lastCaseCheckIndex=0,this._lastCasesMatched=!1),i}_updateDefaultCases(t){if(this._defaultViews.length>0&&t!==this._defaultUsed){this._defaultUsed=t;for(let i of this._defaultViews)i.enforceState(t)}}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275dir=ce({type:e,selectors:[["","ngSwitch",""]],inputs:{ngSwitch:"ngSwitch"},standalone:!0})}}return e})(),Sc=(()=>{class e{constructor(t,i,r){this.ngSwitch=r,r._addCase(),this._view=new uh(t,i)}ngDoCheck(){this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase))}static{this.\u0275fac=function(i){return new(i||e)(w(Ct),w(bt),w(Mo,9))}}static{this.\u0275dir=ce({type:e,selectors:[["","ngSwitchCase",""]],inputs:{ngSwitchCase:"ngSwitchCase"},standalone:!0})}}return e})();function Dv(e,n){return new P(2100,!1)}var NS="mediumDate",FS=new O(""),LS=new O(""),Ev=(()=>{class e{constructor(t,i,r){this.locale=t,this.defaultTimezone=i,this.defaultOptions=r}transform(t,i,r,o){if(t==null||t===""||t!==t)return null;try{let s=i??this.defaultOptions?.dateFormat??NS,a=r??this.defaultOptions?.timezone??this.defaultTimezone??void 0;return pS(t,s,o||this.locale,a)}catch(s){throw Dv(e,s.message)}}static{this.\u0275fac=function(i){return new(i||e)(w(_r,16),w(FS,24),w(LS,24))}}static{this.\u0275pipe=vu({name:"date",type:e,pure:!0,standalone:!0})}}return e})();var Iv=(()=>{class e{constructor(t){this._locale=t}transform(t,i,r){if(!VS(t))return null;r||=this._locale;try{let o=jS(t);return TS(o,r,i)}catch(o){throw Dv(e,o.message)}}static{this.\u0275fac=function(i){return new(i||e)(w(_r,16))}}static{this.\u0275pipe=vu({name:"number",type:e,pure:!0,standalone:!0})}}return e})();function VS(e){return!(e==null||e===""||e!==e)}function jS(e){if(typeof e=="string"&&!isNaN(Number(e)-parseFloat(e)))return Number(e);if(typeof e!="number")throw new Error(`${e} is not a number`);return e}var _t=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=G({type:e})}static{this.\u0275inj=z({})}}return e})(),vh="browser",BS="server";function un(e){return e===vh}function Mc(e){return e===BS}var Sv=(()=>{class e{static{this.\u0275prov=D({token:e,providedIn:"root",factory:()=>un(S(Je))?new hh(S(W),window):new fh})}}return e})(),hh=class{constructor(n,t){this.document=n,this.window=t,this.offset=()=>[0,0]}setOffset(n){Array.isArray(n)?this.offset=()=>n:this.offset=n}getScrollPosition(){return[this.window.scrollX,this.window.scrollY]}scrollToPosition(n){this.window.scrollTo(n[0],n[1])}scrollToAnchor(n){let t=US(this.document,n);t&&(this.scrollToElement(t),t.focus())}setHistoryScrollRestoration(n){this.window.history.scrollRestoration=n}scrollToElement(n){let t=n.getBoundingClientRect(),i=t.left+this.window.pageXOffset,r=t.top+this.window.pageYOffset,o=this.offset();this.window.scrollTo(i-o[0],r-o[1])}};function US(e,n){let t=e.getElementById(n)||e.getElementsByName(n)[0];if(t)return t;if(typeof e.createTreeWalker=="function"&&e.body&&typeof e.body.attachShadow=="function"){let i=e.createTreeWalker(e.body,NodeFilter.SHOW_ELEMENT),r=i.currentNode;for(;r;){let o=r.shadowRoot;if(o){let s=o.getElementById(n)||o.querySelector(`[name="${n}"]`);if(s)return s}r=i.nextNode()}}return null}var fh=class{setOffset(n){}getScrollPosition(){return[0,0]}scrollToPosition(n){}scrollToAnchor(n){}setHistoryScrollRestoration(n){}},yr=class{};var Ao=class{},Ac=class{},Pn=class e{constructor(n){this.normalizedNames=new Map,this.lazyUpdate=null,n?typeof n=="string"?this.lazyInit=()=>{this.headers=new Map,n.split(`
+`).forEach(t=>{let i=t.indexOf(":");if(i>0){let r=t.slice(0,i),o=r.toLowerCase(),s=t.slice(i+1).trim();this.maybeSetNormalizedName(r,o),this.headers.has(o)?this.headers.get(o).push(s):this.headers.set(o,[s])}})}:typeof Headers<"u"&&n instanceof Headers?(this.headers=new Map,n.forEach((t,i)=>{this.setHeaderEntries(i,t)})):this.lazyInit=()=>{this.headers=new Map,Object.entries(n).forEach(([t,i])=>{this.setHeaderEntries(t,i)})}:this.headers=new Map}has(n){return this.init(),this.headers.has(n.toLowerCase())}get(n){this.init();let t=this.headers.get(n.toLowerCase());return t&&t.length>0?t[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(n){return this.init(),this.headers.get(n.toLowerCase())||null}append(n,t){return this.clone({name:n,value:t,op:"a"})}set(n,t){return this.clone({name:n,value:t,op:"s"})}delete(n,t){return this.clone({name:n,value:t,op:"d"})}maybeSetNormalizedName(n,t){this.normalizedNames.has(t)||this.normalizedNames.set(t,n)}init(){this.lazyInit&&(this.lazyInit instanceof e?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(n=>this.applyUpdate(n)),this.lazyUpdate=null))}copyFrom(n){n.init(),Array.from(n.headers.keys()).forEach(t=>{this.headers.set(t,n.headers.get(t)),this.normalizedNames.set(t,n.normalizedNames.get(t))})}clone(n){let t=new e;return t.lazyInit=this.lazyInit&&this.lazyInit instanceof e?this.lazyInit:this,t.lazyUpdate=(this.lazyUpdate||[]).concat([n]),t}applyUpdate(n){let t=n.name.toLowerCase();switch(n.op){case"a":case"s":let i=n.value;if(typeof i=="string"&&(i=[i]),i.length===0)return;this.maybeSetNormalizedName(n.name,t);let r=(n.op==="a"?this.headers.get(t):void 0)||[];r.push(...i),this.headers.set(t,r);break;case"d":let o=n.value;if(!o)this.headers.delete(t),this.normalizedNames.delete(t);else{let s=this.headers.get(t);if(!s)return;s=s.filter(a=>o.indexOf(a)===-1),s.length===0?(this.headers.delete(t),this.normalizedNames.delete(t)):this.headers.set(t,s)}break}}setHeaderEntries(n,t){let i=(Array.isArray(t)?t:[t]).map(o=>o.toString()),r=n.toLowerCase();this.headers.set(r,i),this.maybeSetNormalizedName(n,r)}forEach(n){this.init(),Array.from(this.normalizedNames.keys()).forEach(t=>n(this.normalizedNames.get(t),this.headers.get(t)))}};var yh=class{encodeKey(n){return Mv(n)}encodeValue(n){return Mv(n)}decodeKey(n){return decodeURIComponent(n)}decodeValue(n){return decodeURIComponent(n)}};function zS(e,n){let t=new Map;return e.length>0&&e.replace(/^\?/,"").split("&").forEach(r=>{let o=r.indexOf("="),[s,a]=o==-1?[n.decodeKey(r),""]:[n.decodeKey(r.slice(0,o)),n.decodeValue(r.slice(o+1))],c=t.get(s)||[];c.push(a),t.set(s,c)}),t}var GS=/%(\d[a-f0-9])/gi,WS={40:"@","3A":":",24:"$","2C":",","3B":";","3D":"=","3F":"?","2F":"/"};function Mv(e){return encodeURIComponent(e).replace(GS,(n,t)=>WS[t]??n)}function Tc(e){return`${e}`}var Kn=class e{constructor(n={}){if(this.updates=null,this.cloneFrom=null,this.encoder=n.encoder||new yh,n.fromString){if(n.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=zS(n.fromString,this.encoder)}else n.fromObject?(this.map=new Map,Object.keys(n.fromObject).forEach(t=>{let i=n.fromObject[t],r=Array.isArray(i)?i.map(Tc):[Tc(i)];this.map.set(t,r)})):this.map=null}has(n){return this.init(),this.map.has(n)}get(n){this.init();let t=this.map.get(n);return t?t[0]:null}getAll(n){return this.init(),this.map.get(n)||null}keys(){return this.init(),Array.from(this.map.keys())}append(n,t){return this.clone({param:n,value:t,op:"a"})}appendAll(n){let t=[];return Object.keys(n).forEach(i=>{let r=n[i];Array.isArray(r)?r.forEach(o=>{t.push({param:i,value:o,op:"a"})}):t.push({param:i,value:r,op:"a"})}),this.clone(t)}set(n,t){return this.clone({param:n,value:t,op:"s"})}delete(n,t){return this.clone({param:n,value:t,op:"d"})}toString(){return this.init(),this.keys().map(n=>{let t=this.encoder.encodeKey(n);return this.map.get(n).map(i=>t+"="+this.encoder.encodeValue(i)).join("&")}).filter(n=>n!=="").join("&")}clone(n){let t=new e({encoder:this.encoder});return t.cloneFrom=this.cloneFrom||this,t.updates=(this.updates||[]).concat(n),t}init(){this.map===null&&(this.map=new Map),this.cloneFrom!==null&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(n=>this.map.set(n,this.cloneFrom.map.get(n))),this.updates.forEach(n=>{switch(n.op){case"a":case"s":let t=(n.op==="a"?this.map.get(n.param):void 0)||[];t.push(Tc(n.value)),this.map.set(n.param,t);break;case"d":if(n.value!==void 0){let i=this.map.get(n.param)||[],r=i.indexOf(Tc(n.value));r!==-1&&i.splice(r,1),i.length>0?this.map.set(n.param,i):this.map.delete(n.param)}else{this.map.delete(n.param);break}}}),this.cloneFrom=this.updates=null)}};var bh=class{constructor(){this.map=new Map}set(n,t){return this.map.set(n,t),this}get(n){return this.map.has(n)||this.map.set(n,n.defaultValue()),this.map.get(n)}delete(n){return this.map.delete(n),this}has(n){return this.map.has(n)}keys(){return this.map.keys()}};function qS(e){switch(e){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}function Tv(e){return typeof ArrayBuffer<"u"&&e instanceof ArrayBuffer}function Av(e){return typeof Blob<"u"&&e instanceof Blob}function Ov(e){return typeof FormData<"u"&&e instanceof FormData}function YS(e){return typeof URLSearchParams<"u"&&e instanceof URLSearchParams}var To=class e{constructor(n,t,i,r){this.url=t,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=n.toUpperCase();let o;if(qS(this.method)||r?(this.body=i!==void 0?i:null,o=r):o=i,o&&(this.reportProgress=!!o.reportProgress,this.withCredentials=!!o.withCredentials,o.responseType&&(this.responseType=o.responseType),o.headers&&(this.headers=o.headers),o.context&&(this.context=o.context),o.params&&(this.params=o.params),this.transferCache=o.transferCache),this.headers??=new Pn,this.context??=new bh,!this.params)this.params=new Kn,this.urlWithParams=t;else{let s=this.params.toString();if(s.length===0)this.urlWithParams=t;else{let a=t.indexOf("?"),c=a===-1?"?":ab.set(_,n.setHeaders[_]),h)),n.setParams&&(f=Object.keys(n.setParams).reduce((b,_)=>b.set(_,n.setParams[_]),f)),new e(t,i,s,{params:f,headers:h,context:p,reportProgress:c,responseType:r,withCredentials:a,transferCache:o})}},wr=function(e){return e[e.Sent=0]="Sent",e[e.UploadProgress=1]="UploadProgress",e[e.ResponseHeader=2]="ResponseHeader",e[e.DownloadProgress=3]="DownloadProgress",e[e.Response=4]="Response",e[e.User=5]="User",e}(wr||{}),Oo=class{constructor(n,t=Pc.Ok,i="OK"){this.headers=n.headers||new Pn,this.status=n.status!==void 0?n.status:t,this.statusText=n.statusText||i,this.url=n.url||null,this.ok=this.status>=200&&this.status<300}},wh=class e extends Oo{constructor(n={}){super(n),this.type=wr.ResponseHeader}clone(n={}){return new e({headers:n.headers||this.headers,status:n.status!==void 0?n.status:this.status,statusText:n.statusText||this.statusText,url:n.url||this.url||void 0})}},Oc=class e extends Oo{constructor(n={}){super(n),this.type=wr.Response,this.body=n.body!==void 0?n.body:null}clone(n={}){return new e({body:n.body!==void 0?n.body:this.body,headers:n.headers||this.headers,status:n.status!==void 0?n.status:this.status,statusText:n.statusText||this.statusText,url:n.url||this.url||void 0})}},kc=class extends Oo{constructor(n){super(n,0,"Unknown Error"),this.name="HttpErrorResponse",this.ok=!1,this.status>=200&&this.status<300?this.message=`Http failure during parsing for ${n.url||"(unknown url)"}`:this.message=`Http failure response for ${n.url||"(unknown url)"}: ${n.status} ${n.statusText}`,this.error=n.error||null}},Pc=function(e){return e[e.Continue=100]="Continue",e[e.SwitchingProtocols=101]="SwitchingProtocols",e[e.Processing=102]="Processing",e[e.EarlyHints=103]="EarlyHints",e[e.Ok=200]="Ok",e[e.Created=201]="Created",e[e.Accepted=202]="Accepted",e[e.NonAuthoritativeInformation=203]="NonAuthoritativeInformation",e[e.NoContent=204]="NoContent",e[e.ResetContent=205]="ResetContent",e[e.PartialContent=206]="PartialContent",e[e.MultiStatus=207]="MultiStatus",e[e.AlreadyReported=208]="AlreadyReported",e[e.ImUsed=226]="ImUsed",e[e.MultipleChoices=300]="MultipleChoices",e[e.MovedPermanently=301]="MovedPermanently",e[e.Found=302]="Found",e[e.SeeOther=303]="SeeOther",e[e.NotModified=304]="NotModified",e[e.UseProxy=305]="UseProxy",e[e.Unused=306]="Unused",e[e.TemporaryRedirect=307]="TemporaryRedirect",e[e.PermanentRedirect=308]="PermanentRedirect",e[e.BadRequest=400]="BadRequest",e[e.Unauthorized=401]="Unauthorized",e[e.PaymentRequired=402]="PaymentRequired",e[e.Forbidden=403]="Forbidden",e[e.NotFound=404]="NotFound",e[e.MethodNotAllowed=405]="MethodNotAllowed",e[e.NotAcceptable=406]="NotAcceptable",e[e.ProxyAuthenticationRequired=407]="ProxyAuthenticationRequired",e[e.RequestTimeout=408]="RequestTimeout",e[e.Conflict=409]="Conflict",e[e.Gone=410]="Gone",e[e.LengthRequired=411]="LengthRequired",e[e.PreconditionFailed=412]="PreconditionFailed",e[e.PayloadTooLarge=413]="PayloadTooLarge",e[e.UriTooLong=414]="UriTooLong",e[e.UnsupportedMediaType=415]="UnsupportedMediaType",e[e.RangeNotSatisfiable=416]="RangeNotSatisfiable",e[e.ExpectationFailed=417]="ExpectationFailed",e[e.ImATeapot=418]="ImATeapot",e[e.MisdirectedRequest=421]="MisdirectedRequest",e[e.UnprocessableEntity=422]="UnprocessableEntity",e[e.Locked=423]="Locked",e[e.FailedDependency=424]="FailedDependency",e[e.TooEarly=425]="TooEarly",e[e.UpgradeRequired=426]="UpgradeRequired",e[e.PreconditionRequired=428]="PreconditionRequired",e[e.TooManyRequests=429]="TooManyRequests",e[e.RequestHeaderFieldsTooLarge=431]="RequestHeaderFieldsTooLarge",e[e.UnavailableForLegalReasons=451]="UnavailableForLegalReasons",e[e.InternalServerError=500]="InternalServerError",e[e.NotImplemented=501]="NotImplemented",e[e.BadGateway=502]="BadGateway",e[e.ServiceUnavailable=503]="ServiceUnavailable",e[e.GatewayTimeout=504]="GatewayTimeout",e[e.HttpVersionNotSupported=505]="HttpVersionNotSupported",e[e.VariantAlsoNegotiates=506]="VariantAlsoNegotiates",e[e.InsufficientStorage=507]="InsufficientStorage",e[e.LoopDetected=508]="LoopDetected",e[e.NotExtended=510]="NotExtended",e[e.NetworkAuthenticationRequired=511]="NetworkAuthenticationRequired",e}(Pc||{});function _h(e,n){return{body:n,headers:e.headers,context:e.context,observe:e.observe,params:e.params,reportProgress:e.reportProgress,responseType:e.responseType,withCredentials:e.withCredentials,transferCache:e.transferCache}}var Rn=(()=>{class e{constructor(t){this.handler=t}request(t,i,r={}){let o;if(t instanceof To)o=t;else{let c;r.headers instanceof Pn?c=r.headers:c=new Pn(r.headers);let h;r.params&&(r.params instanceof Kn?h=r.params:h=new Kn({fromObject:r.params})),o=new To(t,i,r.body!==void 0?r.body:null,{headers:c,context:r.context,params:h,reportProgress:r.reportProgress,responseType:r.responseType||"json",withCredentials:r.withCredentials,transferCache:r.transferCache})}let s=N(o).pipe(mn(c=>this.handler.handle(c)));if(t instanceof To||r.observe==="events")return s;let a=s.pipe(be(c=>c instanceof Oc));switch(r.observe||"body"){case"body":switch(o.responseType){case"arraybuffer":return a.pipe(U(c=>{if(c.body!==null&&!(c.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return c.body}));case"blob":return a.pipe(U(c=>{if(c.body!==null&&!(c.body instanceof Blob))throw new Error("Response is not a Blob.");return c.body}));case"text":return a.pipe(U(c=>{if(c.body!==null&&typeof c.body!="string")throw new Error("Response is not a string.");return c.body}));case"json":default:return a.pipe(U(c=>c.body))}case"response":return a;default:throw new Error(`Unreachable: unhandled observe type ${r.observe}}`)}}delete(t,i={}){return this.request("DELETE",t,i)}get(t,i={}){return this.request("GET",t,i)}head(t,i={}){return this.request("HEAD",t,i)}jsonp(t,i){return this.request("JSONP",t,{params:new Kn().append(i,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(t,i={}){return this.request("OPTIONS",t,i)}patch(t,i,r={}){return this.request("PATCH",t,_h(r,i))}post(t,i,r={}){return this.request("POST",t,_h(r,i))}put(t,i,r={}){return this.request("PUT",t,_h(r,i))}static{this.\u0275fac=function(i){return new(i||e)(v(Ao))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac})}}return e})();function Nv(e,n){return n(e)}function QS(e,n){return(t,i)=>n.intercept(t,{handle:r=>e(r,i)})}function ZS(e,n,t){return(i,r)=>Ht(t,()=>n(i,o=>e(o,r)))}var KS=new O(""),Ch=new O(""),XS=new O(""),JS=new O("");function eM(){let e=null;return(n,t)=>{e===null&&(e=(S(KS,{optional:!0})??[]).reduceRight(QS,Nv));let i=S(Ei),r=i.add();return e(n,t).pipe(rt(()=>i.remove(r)))}}var kv=(()=>{class e extends Ao{constructor(t,i){super(),this.backend=t,this.injector=i,this.chain=null,this.pendingTasks=S(Ei);let r=S(JS,{optional:!0});this.backend=r??t}handle(t){if(this.chain===null){let r=Array.from(new Set([...this.injector.get(Ch),...this.injector.get(XS,[])]));this.chain=r.reduceRight((o,s)=>ZS(o,s,this.injector),Nv)}let i=this.pendingTasks.add();return this.chain(t,r=>this.backend.handle(r)).pipe(rt(()=>this.pendingTasks.remove(i)))}static{this.\u0275fac=function(i){return new(i||e)(v(Ac),v(Ze))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac})}}return e})();var tM=/^\)\]\}',?\n/;function nM(e){return"responseURL"in e&&e.responseURL?e.responseURL:/^X-Request-URL:/m.test(e.getAllResponseHeaders())?e.getResponseHeader("X-Request-URL"):null}var Pv=(()=>{class e{constructor(t){this.xhrFactory=t}handle(t){if(t.method==="JSONP")throw new P(-2800,!1);let i=this.xhrFactory;return(i.\u0275loadImpl?me(i.\u0275loadImpl()):N(null)).pipe($e(()=>new Z(o=>{let s=i.build();if(s.open(t.method,t.urlWithParams),t.withCredentials&&(s.withCredentials=!0),t.headers.forEach((M,k)=>s.setRequestHeader(M,k.join(","))),t.headers.has("Accept")||s.setRequestHeader("Accept","application/json, text/plain, */*"),!t.headers.has("Content-Type")){let M=t.detectContentTypeHeader();M!==null&&s.setRequestHeader("Content-Type",M)}if(t.responseType){let M=t.responseType.toLowerCase();s.responseType=M!=="json"?M:"text"}let a=t.serializeBody(),c=null,h=()=>{if(c!==null)return c;let M=s.statusText||"OK",k=new Pn(s.getAllResponseHeaders()),V=nM(s)||t.url;return c=new wh({headers:k,status:s.status,statusText:M,url:V}),c},f=()=>{let{headers:M,status:k,statusText:V,url:De}=h(),Q=null;k!==Pc.NoContent&&(Q=typeof s.response>"u"?s.responseText:s.response),k===0&&(k=Q?Pc.Ok:0);let ke=k>=200&&k<300;if(t.responseType==="json"&&typeof Q=="string"){let yt=Q;Q=Q.replace(tM,"");try{Q=Q!==""?JSON.parse(Q):null}catch(Qe){Q=yt,ke&&(ke=!1,Q={error:Qe,text:Q})}}ke?(o.next(new Oc({body:Q,headers:M,status:k,statusText:V,url:De||void 0})),o.complete()):o.error(new kc({error:Q,headers:M,status:k,statusText:V,url:De||void 0}))},p=M=>{let{url:k}=h(),V=new kc({error:M,status:s.status||0,statusText:s.statusText||"Unknown Error",url:k||void 0});o.error(V)},b=!1,_=M=>{b||(o.next(h()),b=!0);let k={type:wr.DownloadProgress,loaded:M.loaded};M.lengthComputable&&(k.total=M.total),t.responseType==="text"&&s.responseText&&(k.partialText=s.responseText),o.next(k)},x=M=>{let k={type:wr.UploadProgress,loaded:M.loaded};M.lengthComputable&&(k.total=M.total),o.next(k)};return s.addEventListener("load",f),s.addEventListener("error",p),s.addEventListener("timeout",p),s.addEventListener("abort",p),t.reportProgress&&(s.addEventListener("progress",_),a!==null&&s.upload&&s.upload.addEventListener("progress",x)),s.send(a),o.next({type:wr.Sent}),()=>{s.removeEventListener("error",p),s.removeEventListener("abort",p),s.removeEventListener("load",f),s.removeEventListener("timeout",p),t.reportProgress&&(s.removeEventListener("progress",_),a!==null&&s.upload&&s.upload.removeEventListener("progress",x)),s.readyState!==s.DONE&&s.abort()}})))}static{this.\u0275fac=function(i){return new(i||e)(v(yr))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac})}}return e})(),Fv=new O(""),iM="XSRF-TOKEN",rM=new O("",{providedIn:"root",factory:()=>iM}),oM="X-XSRF-TOKEN",sM=new O("",{providedIn:"root",factory:()=>oM}),Rc=class{},aM=(()=>{class e{constructor(t,i,r){this.doc=t,this.platform=i,this.cookieName=r,this.lastCookieString="",this.lastToken=null,this.parseCount=0}getToken(){if(this.platform==="server")return null;let t=this.doc.cookie||"";return t!==this.lastCookieString&&(this.parseCount++,this.lastToken=Ic(t,this.cookieName),this.lastCookieString=t),this.lastToken}static{this.\u0275fac=function(i){return new(i||e)(v(W),v(Je),v(rM))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac})}}return e})();function cM(e,n){let t=e.url.toLowerCase();if(!S(Fv)||e.method==="GET"||e.method==="HEAD"||t.startsWith("http://")||t.startsWith("https://"))return n(e);let i=S(Rc).getToken(),r=S(sM);return i!=null&&!e.headers.has(r)&&(e=e.clone({headers:e.headers.set(r,i)})),n(e)}var Lv=function(e){return e[e.Interceptors=0]="Interceptors",e[e.LegacyInterceptors=1]="LegacyInterceptors",e[e.CustomXsrfConfiguration=2]="CustomXsrfConfiguration",e[e.NoXsrfProtection=3]="NoXsrfProtection",e[e.JsonpSupport=4]="JsonpSupport",e[e.RequestsMadeViaParent=5]="RequestsMadeViaParent",e[e.Fetch=6]="Fetch",e}(Lv||{});function lM(e,n){return{\u0275kind:e,\u0275providers:n}}function dM(...e){let n=[Rn,Pv,kv,{provide:Ao,useExisting:kv},{provide:Ac,useExisting:Pv},{provide:Ch,useValue:cM,multi:!0},{provide:Fv,useValue:!0},{provide:Rc,useClass:aM}];for(let t of e)n.push(...t.\u0275providers);return Ba(n)}var Rv=new O("");function uM(){return lM(Lv.LegacyInterceptors,[{provide:Rv,useFactory:eM},{provide:Ch,useExisting:Rv,multi:!0}])}var Vv=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=G({type:e})}static{this.\u0275inj=z({providers:[dM(uM())]})}}return e})();var Eh=class extends Cc{constructor(){super(...arguments),this.supportsDOMEvents=!0}},Ih=class e extends Eh{static makeCurrent(){gv(new e)}onAndCancel(n,t,i){return n.addEventListener(t,i),()=>{n.removeEventListener(t,i)}}dispatchEvent(n,t){n.dispatchEvent(t)}remove(n){n.parentNode&&n.parentNode.removeChild(n)}createElement(n,t){return t=t||this.getDefaultDocument(),t.createElement(n)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(n){return n.nodeType===Node.ELEMENT_NODE}isShadowRoot(n){return n instanceof DocumentFragment}getGlobalEventTarget(n,t){return t==="window"?window:t==="document"?n:t==="body"?n.body:null}getBaseHref(n){let t=hM();return t==null?null:fM(t)}resetBaseElement(){ko=null}getUserAgent(){return window.navigator.userAgent}getCookie(n){return Ic(document.cookie,n)}},ko=null;function hM(){return ko=ko||document.querySelector("base"),ko?ko.getAttribute("href"):null}function fM(e){return new URL(e,document.baseURI).pathname}var Sh=class{addToWindow(n){Pe.getAngularTestability=(i,r=!0)=>{let o=n.findTestabilityInTree(i,r);if(o==null)throw new P(5103,!1);return o},Pe.getAllAngularTestabilities=()=>n.getAllTestabilities(),Pe.getAllAngularRootElements=()=>n.getAllRootElements();let t=i=>{let r=Pe.getAllAngularTestabilities(),o=r.length,s=function(){o--,o==0&&i()};r.forEach(a=>{a.whenStable(s)})};Pe.frameworkStabilizers||(Pe.frameworkStabilizers=[]),Pe.frameworkStabilizers.push(t)}findTestabilityInTree(n,t,i){if(t==null)return null;let r=n.getTestability(t);return r??(i?ln().isShadowRoot(t)?this.findTestabilityInTree(n,t.host,!0):this.findTestabilityInTree(n,t.parentElement,!0):null)}},pM=(()=>{class e{build(){return new XMLHttpRequest}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac})}}return e})(),Mh=new O(""),$v=(()=>{class e{constructor(t,i){this._zone=i,this._eventNameToPlugin=new Map,t.forEach(r=>{r.manager=this}),this._plugins=t.slice().reverse()}addEventListener(t,i,r){return this._findPluginFor(i).addEventListener(t,i,r)}getZone(){return this._zone}_findPluginFor(t){let i=this._eventNameToPlugin.get(t);if(i)return i;if(i=this._plugins.find(o=>o.supports(t)),!i)throw new P(5101,!1);return this._eventNameToPlugin.set(t,i),i}static{this.\u0275fac=function(i){return new(i||e)(v(Mh),v(F))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac})}}return e})(),Fc=class{constructor(n){this._doc=n}},xh="ng-app-id",Hv=(()=>{class e{constructor(t,i,r,o={}){this.doc=t,this.appId=i,this.nonce=r,this.platformId=o,this.styleRef=new Map,this.hostNodes=new Set,this.styleNodesInDOM=this.collectServerRenderedStyles(),this.platformIsServer=Mc(o),this.resetHostNodes()}addStyles(t){for(let i of t)this.changeUsageCount(i,1)===1&&this.onStyleAdded(i)}removeStyles(t){for(let i of t)this.changeUsageCount(i,-1)<=0&&this.onStyleRemoved(i)}ngOnDestroy(){let t=this.styleNodesInDOM;t&&(t.forEach(i=>i.remove()),t.clear());for(let i of this.getAllStyles())this.onStyleRemoved(i);this.resetHostNodes()}addHost(t){this.hostNodes.add(t);for(let i of this.getAllStyles())this.addStyleToHost(t,i)}removeHost(t){this.hostNodes.delete(t)}getAllStyles(){return this.styleRef.keys()}onStyleAdded(t){for(let i of this.hostNodes)this.addStyleToHost(i,t)}onStyleRemoved(t){let i=this.styleRef;i.get(t)?.elements?.forEach(r=>r.remove()),i.delete(t)}collectServerRenderedStyles(){let t=this.doc.head?.querySelectorAll(`style[${xh}="${this.appId}"]`);if(t?.length){let i=new Map;return t.forEach(r=>{r.textContent!=null&&i.set(r.textContent,r)}),i}return null}changeUsageCount(t,i){let r=this.styleRef;if(r.has(t)){let o=r.get(t);return o.usage+=i,o.usage}return r.set(t,{usage:i,elements:[]}),i}getStyleElement(t,i){let r=this.styleNodesInDOM,o=r?.get(i);if(o?.parentNode===t)return r.delete(i),o.removeAttribute(xh),o;{let s=this.doc.createElement("style");return this.nonce&&s.setAttribute("nonce",this.nonce),s.textContent=i,this.platformIsServer&&s.setAttribute(xh,this.appId),t.appendChild(s),s}}addStyleToHost(t,i){let r=this.getStyleElement(t,i),o=this.styleRef,s=o.get(i)?.elements;s?s.push(r):o.set(i,{elements:[r],usage:1})}resetHostNodes(){let t=this.hostNodes;t.clear(),t.add(this.doc.head)}static{this.\u0275fac=function(i){return new(i||e)(v(W),v(go),v(vo,8),v(Je))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac})}}return e})(),Dh={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/MathML/"},Ah=/%COMP%/g,zv="%COMP%",mM=`_nghost-${zv}`,gM=`_ngcontent-${zv}`,vM=!0,_M=new O("",{providedIn:"root",factory:()=>vM});function yM(e){return gM.replace(Ah,e)}function bM(e){return mM.replace(Ah,e)}function Gv(e,n){return n.map(t=>t.replace(Ah,e))}var jv=(()=>{class e{constructor(t,i,r,o,s,a,c,h=null){this.eventManager=t,this.sharedStylesHost=i,this.appId=r,this.removeStylesOnCompDestroy=o,this.doc=s,this.platformId=a,this.ngZone=c,this.nonce=h,this.rendererByCompId=new Map,this.platformIsServer=Mc(a),this.defaultRenderer=new Po(t,s,c,this.platformIsServer)}createRenderer(t,i){if(!t||!i)return this.defaultRenderer;this.platformIsServer&&i.encapsulation===on.ShadowDom&&(i=ae(E({},i),{encapsulation:on.Emulated}));let r=this.getOrCreateRenderer(t,i);return r instanceof Lc?r.applyToHost(t):r instanceof Ro&&r.applyStyles(),r}getOrCreateRenderer(t,i){let r=this.rendererByCompId,o=r.get(i.id);if(!o){let s=this.doc,a=this.ngZone,c=this.eventManager,h=this.sharedStylesHost,f=this.removeStylesOnCompDestroy,p=this.platformIsServer;switch(i.encapsulation){case on.Emulated:o=new Lc(c,h,i,this.appId,f,s,a,p);break;case on.ShadowDom:return new Th(c,h,t,i,s,a,this.nonce,p);default:o=new Ro(c,h,i,f,s,a,p);break}r.set(i.id,o)}return o}ngOnDestroy(){this.rendererByCompId.clear()}static{this.\u0275fac=function(i){return new(i||e)(v($v),v(Hv),v(go),v(_M),v(W),v(Je),v(F),v(vo))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac})}}return e})(),Po=class{constructor(n,t,i,r){this.eventManager=n,this.doc=t,this.ngZone=i,this.platformIsServer=r,this.data=Object.create(null),this.throwOnSyntheticProps=!0,this.destroyNode=null}destroy(){}createElement(n,t){return t?this.doc.createElementNS(Dh[t]||t,n):this.doc.createElement(n)}createComment(n){return this.doc.createComment(n)}createText(n){return this.doc.createTextNode(n)}appendChild(n,t){(Bv(n)?n.content:n).appendChild(t)}insertBefore(n,t,i){n&&(Bv(n)?n.content:n).insertBefore(t,i)}removeChild(n,t){n&&n.removeChild(t)}selectRootElement(n,t){let i=typeof n=="string"?this.doc.querySelector(n):n;if(!i)throw new P(-5104,!1);return t||(i.textContent=""),i}parentNode(n){return n.parentNode}nextSibling(n){return n.nextSibling}setAttribute(n,t,i,r){if(r){t=r+":"+t;let o=Dh[r];o?n.setAttributeNS(o,t,i):n.setAttribute(t,i)}else n.setAttribute(t,i)}removeAttribute(n,t,i){if(i){let r=Dh[i];r?n.removeAttributeNS(r,t):n.removeAttribute(`${i}:${t}`)}else n.removeAttribute(t)}addClass(n,t){n.classList.add(t)}removeClass(n,t){n.classList.remove(t)}setStyle(n,t,i,r){r&(vn.DashCase|vn.Important)?n.style.setProperty(t,i,r&vn.Important?"important":""):n.style[t]=i}removeStyle(n,t,i){i&vn.DashCase?n.style.removeProperty(t):n.style[t]=""}setProperty(n,t,i){n!=null&&(n[t]=i)}setValue(n,t){n.nodeValue=t}listen(n,t,i){if(typeof n=="string"&&(n=ln().getGlobalEventTarget(this.doc,n),!n))throw new Error(`Unsupported event target ${n} for event ${t}`);return this.eventManager.addEventListener(n,t,this.decoratePreventDefault(i))}decoratePreventDefault(n){return t=>{if(t==="__ngUnwrap__")return n;(this.platformIsServer?this.ngZone.runGuarded(()=>n(t)):n(t))===!1&&t.preventDefault()}}};function Bv(e){return e.tagName==="TEMPLATE"&&e.content!==void 0}var Th=class extends Po{constructor(n,t,i,r,o,s,a,c){super(n,o,s,c),this.sharedStylesHost=t,this.hostEl=i,this.shadowRoot=i.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);let h=Gv(r.id,r.styles);for(let f of h){let p=document.createElement("style");a&&p.setAttribute("nonce",a),p.textContent=f,this.shadowRoot.appendChild(p)}}nodeOrShadowRoot(n){return n===this.hostEl?this.shadowRoot:n}appendChild(n,t){return super.appendChild(this.nodeOrShadowRoot(n),t)}insertBefore(n,t,i){return super.insertBefore(this.nodeOrShadowRoot(n),t,i)}removeChild(n,t){return super.removeChild(this.nodeOrShadowRoot(n),t)}parentNode(n){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(n)))}destroy(){this.sharedStylesHost.removeHost(this.shadowRoot)}},Ro=class extends Po{constructor(n,t,i,r,o,s,a,c){super(n,o,s,a),this.sharedStylesHost=t,this.removeStylesOnCompDestroy=r,this.styles=c?Gv(c,i.styles):i.styles}applyStyles(){this.sharedStylesHost.addStyles(this.styles)}destroy(){this.removeStylesOnCompDestroy&&this.sharedStylesHost.removeStyles(this.styles)}},Lc=class extends Ro{constructor(n,t,i,r,o,s,a,c){let h=r+"-"+i.id;super(n,t,i,o,s,a,c,h),this.contentAttr=yM(h),this.hostAttr=bM(h)}applyToHost(n){this.applyStyles(),this.setAttribute(n,this.hostAttr,"")}createElement(n,t){let i=super.createElement(n,t);return super.setAttribute(i,this.contentAttr,""),i}},wM=(()=>{class e extends Fc{constructor(t){super(t)}supports(t){return!0}addEventListener(t,i,r){return t.addEventListener(i,r,!1),()=>this.removeEventListener(t,i,r)}removeEventListener(t,i,r){return t.removeEventListener(i,r)}static{this.\u0275fac=function(i){return new(i||e)(v(W))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac})}}return e})(),Uv=["alt","control","meta","shift"],CM={"\b":"Backspace"," ":"Tab","\x7F":"Delete","\x1B":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},xM={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey},DM=(()=>{class e extends Fc{constructor(t){super(t)}supports(t){return e.parseEventName(t)!=null}addEventListener(t,i,r){let o=e.parseEventName(i),s=e.eventCallback(o.fullKey,r,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>ln().onAndCancel(t,o.domEventName,s))}static parseEventName(t){let i=t.toLowerCase().split("."),r=i.shift();if(i.length===0||!(r==="keydown"||r==="keyup"))return null;let o=e._normalizeKey(i.pop()),s="",a=i.indexOf("code");if(a>-1&&(i.splice(a,1),s="code."),Uv.forEach(h=>{let f=i.indexOf(h);f>-1&&(i.splice(f,1),s+=h+".")}),s+=o,i.length!=0||o.length===0)return null;let c={};return c.domEventName=r,c.fullKey=s,c}static matchEventFullKeyCode(t,i){let r=CM[t.key]||t.key,o="";return i.indexOf("code.")>-1&&(r=t.code,o="code."),r==null||!r?!1:(r=r.toLowerCase(),r===" "?r="space":r==="."&&(r="dot"),Uv.forEach(s=>{if(s!==r){let a=xM[s];a(t)&&(o+=s+".")}}),o+=r,o===i)}static eventCallback(t,i,r){return o=>{e.matchEventFullKeyCode(o,t)&&r.runGuarded(()=>i(o))}}static _normalizeKey(t){return t==="esc"?"escape":t}static{this.\u0275fac=function(i){return new(i||e)(v(W))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac})}}return e})();function EM(){Ih.makeCurrent()}function IM(){return new $t}function SM(){return Gg(document),document}var MM=[{provide:Je,useValue:vh},{provide:ku,useValue:EM,multi:!0},{provide:W,useFactory:SM,deps:[]}],Wv=nh(sv,"browser",MM),TM=new O(""),AM=[{provide:Io,useClass:Sh,deps:[]},{provide:eh,useClass:cc,deps:[F,lc,Io]},{provide:cc,useClass:cc,deps:[F,lc,Io]}],OM=[{provide:Ua,useValue:"root"},{provide:$t,useFactory:IM,deps:[]},{provide:Mh,useClass:wM,multi:!0,deps:[W,F,Je]},{provide:Mh,useClass:DM,multi:!0,deps:[W]},jv,Hv,$v,{provide:co,useExisting:jv},{provide:yr,useClass:pM,deps:[]},[]],qv=(()=>{class e{constructor(t){}static withServerTransition(t){return{ngModule:e,providers:[{provide:go,useValue:t.appId}]}}static{this.\u0275fac=function(i){return new(i||e)(v(TM,12))}}static{this.\u0275mod=G({type:e})}static{this.\u0275inj=z({providers:[...OM,...AM],imports:[_t,av]})}}return e})();var Vc=(()=>{class e{constructor(t){this._doc=t}getTitle(){return this._doc.title}setTitle(t){this._doc.title=t||""}static{this.\u0275fac=function(i){return new(i||e)(v(W))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();var n_=(()=>{class e{constructor(t,i){this._renderer=t,this._elementRef=i,this.onChange=r=>{},this.onTouched=()=>{}}setProperty(t,i){this._renderer.setProperty(this._elementRef.nativeElement,t,i)}registerOnTouched(t){this.onTouched=t}registerOnChange(t){this.onChange=t}setDisabledState(t){this.setProperty("disabled",t)}static{this.\u0275fac=function(i){return new(i||e)(w(Zn),w(re))}}static{this.\u0275dir=ce({type:e})}}return e})(),i_=(()=>{class e extends n_{static{this.\u0275fac=(()=>{let t;return function(r){return(t||(t=bn(e)))(r||e)}})()}static{this.\u0275dir=ce({type:e,features:[He]})}}return e})(),Dr=new O(""),kM={provide:Dr,useExisting:cn(()=>Fh),multi:!0},Fh=(()=>{class e extends i_{writeValue(t){this.setProperty("checked",t)}static{this.\u0275fac=(()=>{let t;return function(r){return(t||(t=bn(e)))(r||e)}})()}static{this.\u0275dir=ce({type:e,selectors:[["input","type","checkbox","formControlName",""],["input","type","checkbox","formControl",""],["input","type","checkbox","ngModel",""]],hostBindings:function(i,r){i&1&&I("change",function(s){return r.onChange(s.target.checked)})("blur",function(){return r.onTouched()})},features:[At([kM]),He]})}}return e})(),PM={provide:Dr,useExisting:cn(()=>Jn),multi:!0};function RM(){let e=ln()?ln().getUserAgent():"";return/android (\d+)/.test(e.toLowerCase())}var NM=new O(""),Jn=(()=>{class e extends n_{constructor(t,i,r){super(t,i),this._compositionMode=r,this._composing=!1,this._compositionMode==null&&(this._compositionMode=!RM())}writeValue(t){let i=t??"";this.setProperty("value",i)}_handleInput(t){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(t)}_compositionStart(){this._composing=!0}_compositionEnd(t){this._composing=!1,this._compositionMode&&this.onChange(t)}static{this.\u0275fac=function(i){return new(i||e)(w(Zn),w(re),w(NM,8))}}static{this.\u0275dir=ce({type:e,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(i,r){i&1&&I("input",function(s){return r._handleInput(s.target.value)})("blur",function(){return r.onTouched()})("compositionstart",function(){return r._compositionStart()})("compositionend",function(s){return r._compositionEnd(s.target.value)})},features:[At([PM]),He]})}}return e})();function Xn(e){return e==null||(typeof e=="string"||Array.isArray(e))&&e.length===0}function r_(e){return e!=null&&typeof e.length=="number"}var Vo=new O(""),Lh=new O(""),FM=/^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,Nn=class{static min(n){return LM(n)}static max(n){return VM(n)}static required(n){return jM(n)}static requiredTrue(n){return BM(n)}static email(n){return UM(n)}static minLength(n){return $M(n)}static maxLength(n){return HM(n)}static pattern(n){return zM(n)}static nullValidator(n){return o_(n)}static compose(n){return u_(n)}static composeAsync(n){return f_(n)}};function LM(e){return n=>{if(Xn(n.value)||Xn(e))return null;let t=parseFloat(n.value);return!isNaN(t)&&t{if(Xn(n.value)||Xn(e))return null;let t=parseFloat(n.value);return!isNaN(t)&&t>e?{max:{max:e,actual:n.value}}:null}}function jM(e){return Xn(e.value)?{required:!0}:null}function BM(e){return e.value===!0?null:{required:!0}}function UM(e){return Xn(e.value)||FM.test(e.value)?null:{email:!0}}function $M(e){return n=>Xn(n.value)||!r_(n.value)?null:n.value.lengthr_(n.value)&&n.value.length>e?{maxlength:{requiredLength:e,actualLength:n.value.length}}:null}function zM(e){if(!e)return o_;let n,t;return typeof e=="string"?(t="",e.charAt(0)!=="^"&&(t+="^"),t+=e,e.charAt(e.length-1)!=="$"&&(t+="$"),n=new RegExp(t)):(t=e.toString(),n=e),i=>{if(Xn(i.value))return null;let r=i.value;return n.test(r)?null:{pattern:{requiredPattern:t,actualValue:r}}}}function o_(e){return null}function s_(e){return e!=null}function a_(e){return Si(e)?me(e):e}function c_(e){let n={};return e.forEach(t=>{n=t!=null?E(E({},n),t):n}),Object.keys(n).length===0?null:n}function l_(e,n){return n.map(t=>t(e))}function GM(e){return!e.validate}function d_(e){return e.map(n=>GM(n)?n:t=>n.validate(t))}function u_(e){if(!e)return null;let n=e.filter(s_);return n.length==0?null:function(t){return c_(l_(t,n))}}function h_(e){return e!=null?u_(d_(e)):null}function f_(e){if(!e)return null;let n=e.filter(s_);return n.length==0?null:function(t){let i=l_(t,n).map(a_);return Zl(i).pipe(U(c_))}}function p_(e){return e!=null?f_(d_(e)):null}function Yv(e,n){return e===null?[n]:Array.isArray(e)?[...e,n]:[e,n]}function m_(e){return e._rawValidators}function g_(e){return e._rawAsyncValidators}function kh(e){return e?Array.isArray(e)?e:[e]:[]}function Bc(e,n){return Array.isArray(e)?e.includes(n):e===n}function Qv(e,n){let t=kh(n);return kh(e).forEach(r=>{Bc(t,r)||t.push(r)}),t}function Zv(e,n){return kh(n).filter(t=>!Bc(e,t))}var Uc=class{constructor(){this._rawValidators=[],this._rawAsyncValidators=[],this._onDestroyCallbacks=[]}get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_setValidators(n){this._rawValidators=n||[],this._composedValidatorFn=h_(this._rawValidators)}_setAsyncValidators(n){this._rawAsyncValidators=n||[],this._composedAsyncValidatorFn=p_(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_registerOnDestroy(n){this._onDestroyCallbacks.push(n)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(n=>n()),this._onDestroyCallbacks=[]}reset(n=void 0){this.control&&this.control.reset(n)}hasError(n,t){return this.control?this.control.hasError(n,t):!1}getError(n,t){return this.control?this.control.getError(n,t):null}},Mi=class extends Uc{get formDirective(){return null}get path(){return null}},Ti=class extends Uc{constructor(){super(...arguments),this._parent=null,this.name=null,this.valueAccessor=null}},$c=class{constructor(n){this._cd=n}get isTouched(){return!!this._cd?.control?.touched}get isUntouched(){return!!this._cd?.control?.untouched}get isPristine(){return!!this._cd?.control?.pristine}get isDirty(){return!!this._cd?.control?.dirty}get isValid(){return!!this._cd?.control?.valid}get isInvalid(){return!!this._cd?.control?.invalid}get isPending(){return!!this._cd?.control?.pending}get isSubmitted(){return!!this._cd?.submitted}},WM={"[class.ng-untouched]":"isUntouched","[class.ng-touched]":"isTouched","[class.ng-pristine]":"isPristine","[class.ng-dirty]":"isDirty","[class.ng-valid]":"isValid","[class.ng-invalid]":"isInvalid","[class.ng-pending]":"isPending"},S3=ae(E({},WM),{"[class.ng-submitted]":"isSubmitted"}),Er=(()=>{class e extends $c{constructor(t){super(t)}static{this.\u0275fac=function(i){return new(i||e)(w(Ti,2))}}static{this.\u0275dir=ce({type:e,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(i,r){i&2&&he("ng-untouched",r.isUntouched)("ng-touched",r.isTouched)("ng-pristine",r.isPristine)("ng-dirty",r.isDirty)("ng-valid",r.isValid)("ng-invalid",r.isInvalid)("ng-pending",r.isPending)},features:[He]})}}return e})(),Wc=(()=>{class e extends $c{constructor(t){super(t)}static{this.\u0275fac=function(i){return new(i||e)(w(Mi,10))}}static{this.\u0275dir=ce({type:e,selectors:[["","formGroupName",""],["","formArrayName",""],["","ngModelGroup",""],["","formGroup",""],["form",3,"ngNoForm",""],["","ngForm",""]],hostVars:16,hostBindings:function(i,r){i&2&&he("ng-untouched",r.isUntouched)("ng-touched",r.isTouched)("ng-pristine",r.isPristine)("ng-dirty",r.isDirty)("ng-valid",r.isValid)("ng-invalid",r.isInvalid)("ng-pending",r.isPending)("ng-submitted",r.isSubmitted)},features:[He]})}}return e})();var No="VALID",jc="INVALID",Cr="PENDING",Fo="DISABLED";function Vh(e){return(qc(e)?e.validators:e)||null}function qM(e){return Array.isArray(e)?h_(e):e||null}function jh(e,n){return(qc(n)?n.asyncValidators:e)||null}function YM(e){return Array.isArray(e)?p_(e):e||null}function qc(e){return e!=null&&!Array.isArray(e)&&typeof e=="object"}function v_(e,n,t){let i=e.controls;if(!(n?Object.keys(i):i).length)throw new P(1e3,"");if(!i[t])throw new P(1001,"")}function __(e,n,t){e._forEachChild((i,r)=>{if(t[r]===void 0)throw new P(1002,"")})}var xr=class{constructor(n,t){this._pendingDirty=!1,this._hasOwnPendingAsyncValidator=!1,this._pendingTouched=!1,this._onCollectionChange=()=>{},this._parent=null,this.pristine=!0,this.touched=!1,this._onDisabledChange=[],this._assignValidators(n),this._assignAsyncValidators(t)}get validator(){return this._composedValidatorFn}set validator(n){this._rawValidators=this._composedValidatorFn=n}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(n){this._rawAsyncValidators=this._composedAsyncValidatorFn=n}get parent(){return this._parent}get valid(){return this.status===No}get invalid(){return this.status===jc}get pending(){return this.status==Cr}get disabled(){return this.status===Fo}get enabled(){return this.status!==Fo}get dirty(){return!this.pristine}get untouched(){return!this.touched}get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(n){this._assignValidators(n)}setAsyncValidators(n){this._assignAsyncValidators(n)}addValidators(n){this.setValidators(Qv(n,this._rawValidators))}addAsyncValidators(n){this.setAsyncValidators(Qv(n,this._rawAsyncValidators))}removeValidators(n){this.setValidators(Zv(n,this._rawValidators))}removeAsyncValidators(n){this.setAsyncValidators(Zv(n,this._rawAsyncValidators))}hasValidator(n){return Bc(this._rawValidators,n)}hasAsyncValidator(n){return Bc(this._rawAsyncValidators,n)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(n={}){this.touched=!0,this._parent&&!n.onlySelf&&this._parent.markAsTouched(n)}markAllAsTouched(){this.markAsTouched({onlySelf:!0}),this._forEachChild(n=>n.markAllAsTouched())}markAsUntouched(n={}){this.touched=!1,this._pendingTouched=!1,this._forEachChild(t=>{t.markAsUntouched({onlySelf:!0})}),this._parent&&!n.onlySelf&&this._parent._updateTouched(n)}markAsDirty(n={}){this.pristine=!1,this._parent&&!n.onlySelf&&this._parent.markAsDirty(n)}markAsPristine(n={}){this.pristine=!0,this._pendingDirty=!1,this._forEachChild(t=>{t.markAsPristine({onlySelf:!0})}),this._parent&&!n.onlySelf&&this._parent._updatePristine(n)}markAsPending(n={}){this.status=Cr,n.emitEvent!==!1&&this.statusChanges.emit(this.status),this._parent&&!n.onlySelf&&this._parent.markAsPending(n)}disable(n={}){let t=this._parentMarkedDirty(n.onlySelf);this.status=Fo,this.errors=null,this._forEachChild(i=>{i.disable(ae(E({},n),{onlySelf:!0}))}),this._updateValue(),n.emitEvent!==!1&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(ae(E({},n),{skipPristineCheck:t})),this._onDisabledChange.forEach(i=>i(!0))}enable(n={}){let t=this._parentMarkedDirty(n.onlySelf);this.status=No,this._forEachChild(i=>{i.enable(ae(E({},n),{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:n.emitEvent}),this._updateAncestors(ae(E({},n),{skipPristineCheck:t})),this._onDisabledChange.forEach(i=>i(!1))}_updateAncestors(n){this._parent&&!n.onlySelf&&(this._parent.updateValueAndValidity(n),n.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())}setParent(n){this._parent=n}getRawValue(){return this.value}updateValueAndValidity(n={}){this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===No||this.status===Cr)&&this._runAsyncValidator(n.emitEvent)),n.emitEvent!==!1&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!n.onlySelf&&this._parent.updateValueAndValidity(n)}_updateTreeValidity(n={emitEvent:!0}){this._forEachChild(t=>t._updateTreeValidity(n)),this.updateValueAndValidity({onlySelf:!0,emitEvent:n.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?Fo:No}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(n){if(this.asyncValidator){this.status=Cr,this._hasOwnPendingAsyncValidator=!0;let t=a_(this.asyncValidator(this));this._asyncValidationSubscription=t.subscribe(i=>{this._hasOwnPendingAsyncValidator=!1,this.setErrors(i,{emitEvent:n})})}}_cancelExistingSubscription(){this._asyncValidationSubscription&&(this._asyncValidationSubscription.unsubscribe(),this._hasOwnPendingAsyncValidator=!1)}setErrors(n,t={}){this.errors=n,this._updateControlsErrors(t.emitEvent!==!1)}get(n){let t=n;return t==null||(Array.isArray(t)||(t=t.split(".")),t.length===0)?null:t.reduce((i,r)=>i&&i._find(r),this)}getError(n,t){let i=t?this.get(t):this;return i&&i.errors?i.errors[n]:null}hasError(n,t){return!!this.getError(n,t)}get root(){let n=this;for(;n._parent;)n=n._parent;return n}_updateControlsErrors(n){this.status=this._calculateStatus(),n&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(n)}_initObservables(){this.valueChanges=new ne,this.statusChanges=new ne}_calculateStatus(){return this._allControlsDisabled()?Fo:this.errors?jc:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(Cr)?Cr:this._anyControlsHaveStatus(jc)?jc:No}_anyControlsHaveStatus(n){return this._anyControls(t=>t.status===n)}_anyControlsDirty(){return this._anyControls(n=>n.dirty)}_anyControlsTouched(){return this._anyControls(n=>n.touched)}_updatePristine(n={}){this.pristine=!this._anyControlsDirty(),this._parent&&!n.onlySelf&&this._parent._updatePristine(n)}_updateTouched(n={}){this.touched=this._anyControlsTouched(),this._parent&&!n.onlySelf&&this._parent._updateTouched(n)}_registerOnCollectionChange(n){this._onCollectionChange=n}_setUpdateStrategy(n){qc(n)&&n.updateOn!=null&&(this._updateOn=n.updateOn)}_parentMarkedDirty(n){let t=this._parent&&this._parent.dirty;return!n&&!!t&&!this._parent._anyControlsDirty()}_find(n){return null}_assignValidators(n){this._rawValidators=Array.isArray(n)?n.slice():n,this._composedValidatorFn=qM(this._rawValidators)}_assignAsyncValidators(n){this._rawAsyncValidators=Array.isArray(n)?n.slice():n,this._composedAsyncValidatorFn=YM(this._rawAsyncValidators)}},Hc=class extends xr{constructor(n,t,i){super(Vh(t),jh(i,t)),this.controls=n,this._initObservables(),this._setUpdateStrategy(t),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}registerControl(n,t){return this.controls[n]?this.controls[n]:(this.controls[n]=t,t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange),t)}addControl(n,t,i={}){this.registerControl(n,t),this.updateValueAndValidity({emitEvent:i.emitEvent}),this._onCollectionChange()}removeControl(n,t={}){this.controls[n]&&this.controls[n]._registerOnCollectionChange(()=>{}),delete this.controls[n],this.updateValueAndValidity({emitEvent:t.emitEvent}),this._onCollectionChange()}setControl(n,t,i={}){this.controls[n]&&this.controls[n]._registerOnCollectionChange(()=>{}),delete this.controls[n],t&&this.registerControl(n,t),this.updateValueAndValidity({emitEvent:i.emitEvent}),this._onCollectionChange()}contains(n){return this.controls.hasOwnProperty(n)&&this.controls[n].enabled}setValue(n,t={}){__(this,!0,n),Object.keys(n).forEach(i=>{v_(this,!0,i),this.controls[i].setValue(n[i],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)}patchValue(n,t={}){n!=null&&(Object.keys(n).forEach(i=>{let r=this.controls[i];r&&r.patchValue(n[i],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t))}reset(n={},t={}){this._forEachChild((i,r)=>{i.reset(n?n[r]:null,{onlySelf:!0,emitEvent:t.emitEvent})}),this._updatePristine(t),this._updateTouched(t),this.updateValueAndValidity(t)}getRawValue(){return this._reduceChildren({},(n,t,i)=>(n[i]=t.getRawValue(),n))}_syncPendingControls(){let n=this._reduceChildren(!1,(t,i)=>i._syncPendingControls()?!0:t);return n&&this.updateValueAndValidity({onlySelf:!0}),n}_forEachChild(n){Object.keys(this.controls).forEach(t=>{let i=this.controls[t];i&&n(i,t)})}_setUpControls(){this._forEachChild(n=>{n.setParent(this),n._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(n){for(let[t,i]of Object.entries(this.controls))if(this.contains(t)&&n(i))return!0;return!1}_reduceValue(){let n={};return this._reduceChildren(n,(t,i,r)=>((i.enabled||this.disabled)&&(t[r]=i.value),t))}_reduceChildren(n,t){let i=n;return this._forEachChild((r,o)=>{i=t(i,r,o)}),i}_allControlsDisabled(){for(let n of Object.keys(this.controls))if(this.controls[n].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_find(n){return this.controls.hasOwnProperty(n)?this.controls[n]:null}};var Ph=class extends Hc{};var Yc=new O("CallSetDisabledState",{providedIn:"root",factory:()=>Qc}),Qc="always";function y_(e,n){return[...n.path,e]}function Rh(e,n,t=Qc){Bh(e,n),n.valueAccessor.writeValue(e.value),(e.disabled||t==="always")&&n.valueAccessor.setDisabledState?.(e.disabled),ZM(e,n),XM(e,n),KM(e,n),QM(e,n)}function Kv(e,n,t=!0){let i=()=>{};n.valueAccessor&&(n.valueAccessor.registerOnChange(i),n.valueAccessor.registerOnTouched(i)),Gc(e,n),e&&(n._invokeOnDestroyCallbacks(),e._registerOnCollectionChange(()=>{}))}function zc(e,n){e.forEach(t=>{t.registerOnValidatorChange&&t.registerOnValidatorChange(n)})}function QM(e,n){if(n.valueAccessor.setDisabledState){let t=i=>{n.valueAccessor.setDisabledState(i)};e.registerOnDisabledChange(t),n._registerOnDestroy(()=>{e._unregisterOnDisabledChange(t)})}}function Bh(e,n){let t=m_(e);n.validator!==null?e.setValidators(Yv(t,n.validator)):typeof t=="function"&&e.setValidators([t]);let i=g_(e);n.asyncValidator!==null?e.setAsyncValidators(Yv(i,n.asyncValidator)):typeof i=="function"&&e.setAsyncValidators([i]);let r=()=>e.updateValueAndValidity();zc(n._rawValidators,r),zc(n._rawAsyncValidators,r)}function Gc(e,n){let t=!1;if(e!==null){if(n.validator!==null){let r=m_(e);if(Array.isArray(r)&&r.length>0){let o=r.filter(s=>s!==n.validator);o.length!==r.length&&(t=!0,e.setValidators(o))}}if(n.asyncValidator!==null){let r=g_(e);if(Array.isArray(r)&&r.length>0){let o=r.filter(s=>s!==n.asyncValidator);o.length!==r.length&&(t=!0,e.setAsyncValidators(o))}}}let i=()=>{};return zc(n._rawValidators,i),zc(n._rawAsyncValidators,i),t}function ZM(e,n){n.valueAccessor.registerOnChange(t=>{e._pendingValue=t,e._pendingChange=!0,e._pendingDirty=!0,e.updateOn==="change"&&b_(e,n)})}function KM(e,n){n.valueAccessor.registerOnTouched(()=>{e._pendingTouched=!0,e.updateOn==="blur"&&e._pendingChange&&b_(e,n),e.updateOn!=="submit"&&e.markAsTouched()})}function b_(e,n){e._pendingDirty&&e.markAsDirty(),e.setValue(e._pendingValue,{emitModelToViewChange:!1}),n.viewToModelUpdate(e._pendingValue),e._pendingChange=!1}function XM(e,n){let t=(i,r)=>{n.valueAccessor.writeValue(i),r&&n.viewToModelUpdate(i)};e.registerOnChange(t),n._registerOnDestroy(()=>{e._unregisterOnChange(t)})}function JM(e,n){e==null,Bh(e,n)}function e1(e,n){return Gc(e,n)}function w_(e,n){if(!e.hasOwnProperty("model"))return!1;let t=e.model;return t.isFirstChange()?!0:!Object.is(n,t.currentValue)}function t1(e){return Object.getPrototypeOf(e.constructor)===i_}function n1(e,n){e._syncPendingControls(),n.forEach(t=>{let i=t.control;i.updateOn==="submit"&&i._pendingChange&&(t.viewToModelUpdate(i._pendingValue),i._pendingChange=!1)})}function C_(e,n){if(!n)return null;Array.isArray(n);let t,i,r;return n.forEach(o=>{o.constructor===Jn?t=o:t1(o)?i=o:r=o}),r||i||t||null}function i1(e,n){let t=e.indexOf(n);t>-1&&e.splice(t,1)}function Xv(e,n){let t=e.indexOf(n);t>-1&&e.splice(t,1)}function Jv(e){return typeof e=="object"&&e!==null&&Object.keys(e).length===2&&"value"in e&&"disabled"in e}var Lo=class extends xr{constructor(n=null,t,i){super(Vh(t),jh(i,t)),this.defaultValue=null,this._onChange=[],this._pendingChange=!1,this._applyFormState(n),this._setUpdateStrategy(t),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),qc(t)&&(t.nonNullable||t.initialValueIsDefault)&&(Jv(n)?this.defaultValue=n.value:this.defaultValue=n)}setValue(n,t={}){this.value=this._pendingValue=n,this._onChange.length&&t.emitModelToViewChange!==!1&&this._onChange.forEach(i=>i(this.value,t.emitViewToModelChange!==!1)),this.updateValueAndValidity(t)}patchValue(n,t={}){this.setValue(n,t)}reset(n=this.defaultValue,t={}){this._applyFormState(n),this.markAsPristine(t),this.markAsUntouched(t),this.setValue(this.value,t),this._pendingChange=!1}_updateValue(){}_anyControls(n){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(n){this._onChange.push(n)}_unregisterOnChange(n){Xv(this._onChange,n)}registerOnDisabledChange(n){this._onDisabledChange.push(n)}_unregisterOnDisabledChange(n){Xv(this._onDisabledChange,n)}_forEachChild(n){}_syncPendingControls(){return this.updateOn==="submit"&&(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),this._pendingChange)?(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),!0):!1}_applyFormState(n){Jv(n)?(this.value=this._pendingValue=n.value,n.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=n}};var r1=e=>e instanceof Lo;var o1={provide:Ti,useExisting:cn(()=>jo)},e_=Promise.resolve(),jo=(()=>{class e extends Ti{constructor(t,i,r,o,s,a){super(),this._changeDetectorRef=s,this.callSetDisabledState=a,this.control=new Lo,this._registered=!1,this.name="",this.update=new ne,this._parent=t,this._setValidators(i),this._setAsyncValidators(r),this.valueAccessor=C_(this,o)}ngOnChanges(t){if(this._checkForErrors(),!this._registered||"name"in t){if(this._registered&&(this._checkName(),this.formDirective)){let i=t.name.previousValue;this.formDirective.removeControl({name:i,path:this._getPath(i)})}this._setUpControl()}"isDisabled"in t&&this._updateDisabled(t),w_(t,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(t){this.viewModel=t,this.update.emit(t)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&this.options.updateOn!=null&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!!(this.options&&this.options.standalone)}_setUpStandalone(){Rh(this.control,this,this.callSetDisabledState),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._isStandalone()||this._checkParentType(),this._checkName()}_checkParentType(){}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),!this._isStandalone()&&this.name}_updateValue(t){e_.then(()=>{this.control.setValue(t,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(t){let i=t.isDisabled.currentValue,r=i!==0&&et(i);e_.then(()=>{r&&!this.control.disabled?this.control.disable():!r&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(t){return this._parent?y_(t,this._parent):[t]}static{this.\u0275fac=function(i){return new(i||e)(w(Mi,9),w(Vo,10),w(Lh,10),w(Dr,10),w(Ve,8),w(Yc,8))}}static{this.\u0275dir=ce({type:e,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:[$.None,"disabled","isDisabled"],model:[$.None,"ngModel","model"],options:[$.None,"ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],features:[At([o1]),He,Ke]})}}return e})(),Zc=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275dir=ce({type:e,selectors:[["form",3,"ngNoForm","",3,"ngNativeValidate",""]],hostAttrs:["novalidate",""]})}}return e})();var x_=new O("");var s1={provide:Mi,useExisting:cn(()=>Bo)},Bo=(()=>{class e extends Mi{constructor(t,i,r){super(),this.callSetDisabledState=r,this.submitted=!1,this._onCollectionChange=()=>this._updateDomValue(),this.directives=[],this.form=null,this.ngSubmit=new ne,this._setValidators(t),this._setAsyncValidators(i)}ngOnChanges(t){this._checkFormPresent(),t.hasOwnProperty("form")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations(),this._oldForm=this.form)}ngOnDestroy(){this.form&&(Gc(this.form,this),this.form._onCollectionChange===this._onCollectionChange&&this.form._registerOnCollectionChange(()=>{}))}get formDirective(){return this}get control(){return this.form}get path(){return[]}addControl(t){let i=this.form.get(t.path);return Rh(i,t,this.callSetDisabledState),i.updateValueAndValidity({emitEvent:!1}),this.directives.push(t),i}getControl(t){return this.form.get(t.path)}removeControl(t){Kv(t.control||null,t,!1),i1(this.directives,t)}addFormGroup(t){this._setUpFormContainer(t)}removeFormGroup(t){this._cleanUpFormContainer(t)}getFormGroup(t){return this.form.get(t.path)}addFormArray(t){this._setUpFormContainer(t)}removeFormArray(t){this._cleanUpFormContainer(t)}getFormArray(t){return this.form.get(t.path)}updateModel(t,i){this.form.get(t.path).setValue(i)}onSubmit(t){return this.submitted=!0,n1(this.form,this.directives),this.ngSubmit.emit(t),t?.target?.method==="dialog"}onReset(){this.resetForm()}resetForm(t=void 0){this.form.reset(t),this.submitted=!1}_updateDomValue(){this.directives.forEach(t=>{let i=t.control,r=this.form.get(t.path);i!==r&&(Kv(i||null,t),r1(r)&&(Rh(r,t,this.callSetDisabledState),t.control=r))}),this.form._updateTreeValidity({emitEvent:!1})}_setUpFormContainer(t){let i=this.form.get(t.path);JM(i,t),i.updateValueAndValidity({emitEvent:!1})}_cleanUpFormContainer(t){if(this.form){let i=this.form.get(t.path);i&&e1(i,t)&&i.updateValueAndValidity({emitEvent:!1})}}_updateRegistrations(){this.form._registerOnCollectionChange(this._onCollectionChange),this._oldForm&&this._oldForm._registerOnCollectionChange(()=>{})}_updateValidators(){Bh(this.form,this),this._oldForm&&Gc(this._oldForm,this)}_checkFormPresent(){this.form}static{this.\u0275fac=function(i){return new(i||e)(w(Vo,10),w(Lh,10),w(Yc,8))}}static{this.\u0275dir=ce({type:e,selectors:[["","formGroup",""]],hostBindings:function(i,r){i&1&&I("submit",function(s){return r.onSubmit(s)})("reset",function(){return r.onReset()})},inputs:{form:[$.None,"formGroup","form"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],features:[At([s1]),He,Ke]})}}return e})();var a1={provide:Ti,useExisting:cn(()=>Uo)},Uo=(()=>{class e extends Ti{set isDisabled(t){}static{this._ngModelWarningSentOnce=!1}constructor(t,i,r,o,s){super(),this._ngModelWarningConfig=s,this._added=!1,this.name=null,this.update=new ne,this._ngModelWarningSent=!1,this._parent=t,this._setValidators(i),this._setAsyncValidators(r),this.valueAccessor=C_(this,o)}ngOnChanges(t){this._added||this._setUpControl(),w_(t,this.viewModel)&&(this.viewModel=this.model,this.formDirective.updateModel(this,this.model))}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}viewToModelUpdate(t){this.viewModel=t,this.update.emit(t)}get path(){return y_(this.name==null?this.name:this.name.toString(),this._parent)}get formDirective(){return this._parent?this._parent.formDirective:null}_checkParentType(){}_setUpControl(){this._checkParentType(),this.control=this.formDirective.addControl(this),this._added=!0}static{this.\u0275fac=function(i){return new(i||e)(w(Mi,13),w(Vo,10),w(Lh,10),w(Dr,10),w(x_,8))}}static{this.\u0275dir=ce({type:e,selectors:[["","formControlName",""]],inputs:{name:[$.None,"formControlName","name"],isDisabled:[$.None,"disabled","isDisabled"],model:[$.None,"ngModel","model"]},outputs:{update:"ngModelChange"},features:[At([a1]),He,Ke]})}}return e})();var D_=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=G({type:e})}static{this.\u0275inj=z({})}}return e})(),Nh=class extends xr{constructor(n,t,i){super(Vh(t),jh(i,t)),this.controls=n,this._initObservables(),this._setUpdateStrategy(t),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}at(n){return this.controls[this._adjustIndex(n)]}push(n,t={}){this.controls.push(n),this._registerControl(n),this.updateValueAndValidity({emitEvent:t.emitEvent}),this._onCollectionChange()}insert(n,t,i={}){this.controls.splice(n,0,t),this._registerControl(t),this.updateValueAndValidity({emitEvent:i.emitEvent})}removeAt(n,t={}){let i=this._adjustIndex(n);i<0&&(i=0),this.controls[i]&&this.controls[i]._registerOnCollectionChange(()=>{}),this.controls.splice(i,1),this.updateValueAndValidity({emitEvent:t.emitEvent})}setControl(n,t,i={}){let r=this._adjustIndex(n);r<0&&(r=0),this.controls[r]&&this.controls[r]._registerOnCollectionChange(()=>{}),this.controls.splice(r,1),t&&(this.controls.splice(r,0,t),this._registerControl(t)),this.updateValueAndValidity({emitEvent:i.emitEvent}),this._onCollectionChange()}get length(){return this.controls.length}setValue(n,t={}){__(this,!1,n),n.forEach((i,r)=>{v_(this,!1,r),this.at(r).setValue(i,{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)}patchValue(n,t={}){n!=null&&(n.forEach((i,r)=>{this.at(r)&&this.at(r).patchValue(i,{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t))}reset(n=[],t={}){this._forEachChild((i,r)=>{i.reset(n[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this._updatePristine(t),this._updateTouched(t),this.updateValueAndValidity(t)}getRawValue(){return this.controls.map(n=>n.getRawValue())}clear(n={}){this.controls.length<1||(this._forEachChild(t=>t._registerOnCollectionChange(()=>{})),this.controls.splice(0),this.updateValueAndValidity({emitEvent:n.emitEvent}))}_adjustIndex(n){return n<0?n+this.length:n}_syncPendingControls(){let n=this.controls.reduce((t,i)=>i._syncPendingControls()?!0:t,!1);return n&&this.updateValueAndValidity({onlySelf:!0}),n}_forEachChild(n){this.controls.forEach((t,i)=>{n(t,i)})}_updateValue(){this.value=this.controls.filter(n=>n.enabled||this.disabled).map(n=>n.value)}_anyControls(n){return this.controls.some(t=>t.enabled&&n(t))}_setUpControls(){this._forEachChild(n=>this._registerControl(n))}_allControlsDisabled(){for(let n of this.controls)if(n.enabled)return!1;return this.controls.length>0||this.disabled}_registerControl(n){n.setParent(this),n._registerOnCollectionChange(this._onCollectionChange)}_find(n){return this.at(n)??null}};function t_(e){return!!e&&(e.asyncValidators!==void 0||e.validators!==void 0||e.updateOn!==void 0)}var Kc=(()=>{class e{constructor(){this.useNonNullable=!1}get nonNullable(){let t=new e;return t.useNonNullable=!0,t}group(t,i=null){let r=this._reduceControls(t),o={};return t_(i)?o=i:i!==null&&(o.validators=i.validator,o.asyncValidators=i.asyncValidator),new Hc(r,o)}record(t,i=null){let r=this._reduceControls(t);return new Ph(r,i)}control(t,i,r){let o={};return this.useNonNullable?(t_(i)?o=i:(o.validators=i,o.asyncValidators=r),new Lo(t,ae(E({},o),{nonNullable:!0}))):new Lo(t,i,r)}array(t,i,r){let o=t.map(s=>this._createControl(s));return new Nh(o,i,r)}_reduceControls(t){let i={};return Object.keys(t).forEach(r=>{i[r]=this._createControl(t[r])}),i}_createControl(t){if(t instanceof Lo)return t;if(t instanceof xr)return t;if(Array.isArray(t)){let i=t[0],r=t.length>1?t[1]:null,o=t.length>2?t[2]:null;return this.control(i,r,o)}else return this.control(t)}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();var Ir=(()=>{class e{static withConfig(t){return{ngModule:e,providers:[{provide:Yc,useValue:t.callSetDisabledState??Qc}]}}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=G({type:e})}static{this.\u0275inj=z({imports:[D_]})}}return e})(),Xc=(()=>{class e{static withConfig(t){return{ngModule:e,providers:[{provide:x_,useValue:t.warnOnNgModelWithFormControl??"always"},{provide:Yc,useValue:t.callSetDisabledState??Qc}]}}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=G({type:e})}static{this.\u0275inj=z({imports:[D_]})}}return e})();var X="primary",ns=Symbol("RouteTitle"),Wh=class{constructor(n){this.params=n||{}}has(n){return Object.prototype.hasOwnProperty.call(this.params,n)}get(n){if(this.has(n)){let t=this.params[n];return Array.isArray(t)?t[0]:t}return null}getAll(n){if(this.has(n)){let t=this.params[n];return Array.isArray(t)?t:[t]}return[]}get keys(){return Object.keys(this.params)}};function Or(e){return new Wh(e)}function c1(e,n,t){let i=t.path.split("/");if(i.length>e.length||t.pathMatch==="full"&&(n.hasChildren()||i.lengthi[o]===r)}else return e===n}function R_(e){return e.length>0?e[e.length-1]:null}function ri(e){return qs(e)?e:Si(e)?me(Promise.resolve(e)):N(e)}var d1={exact:F_,subset:L_},N_={exact:u1,subset:h1,ignored:()=>!0};function E_(e,n,t){return d1[t.paths](e.root,n.root,t.matrixParams)&&N_[t.queryParams](e.queryParams,n.queryParams)&&!(t.fragment==="exact"&&e.fragment!==n.fragment)}function u1(e,n){return hn(e,n)}function F_(e,n,t){if(!Oi(e.segments,n.segments)||!tl(e.segments,n.segments,t)||e.numberOfChildren!==n.numberOfChildren)return!1;for(let i in n.children)if(!e.children[i]||!F_(e.children[i],n.children[i],t))return!1;return!0}function h1(e,n){return Object.keys(n).length<=Object.keys(e).length&&Object.keys(n).every(t=>P_(e[t],n[t]))}function L_(e,n,t){return V_(e,n,n.segments,t)}function V_(e,n,t,i){if(e.segments.length>t.length){let r=e.segments.slice(0,t.length);return!(!Oi(r,t)||n.hasChildren()||!tl(r,t,i))}else if(e.segments.length===t.length){if(!Oi(e.segments,t)||!tl(e.segments,t,i))return!1;for(let r in n.children)if(!e.children[r]||!L_(e.children[r],n.children[r],i))return!1;return!0}else{let r=t.slice(0,e.segments.length),o=t.slice(e.segments.length);return!Oi(e.segments,r)||!tl(e.segments,r,i)||!e.children[X]?!1:V_(e.children[X],n,o,i)}}function tl(e,n,t){return n.every((i,r)=>N_[t](e[r].parameters,i.parameters))}var ei=class{constructor(n=new fe([],{}),t={},i=null){this.root=n,this.queryParams=t,this.fragment=i}get queryParamMap(){return this._queryParamMap??=Or(this.queryParams),this._queryParamMap}toString(){return m1.serialize(this)}},fe=class{constructor(n,t){this.segments=n,this.children=t,this.parent=null,Object.values(t).forEach(i=>i.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return nl(this)}},Ai=class{constructor(n,t){this.path=n,this.parameters=t}get parameterMap(){return this._parameterMap??=Or(this.parameters),this._parameterMap}toString(){return B_(this)}};function f1(e,n){return Oi(e,n)&&e.every((t,i)=>hn(t.parameters,n[i].parameters))}function Oi(e,n){return e.length!==n.length?!1:e.every((t,i)=>t.path===n[i].path)}function p1(e,n){let t=[];return Object.entries(e.children).forEach(([i,r])=>{i===X&&(t=t.concat(n(r,i)))}),Object.entries(e.children).forEach(([i,r])=>{i!==X&&(t=t.concat(n(r,i)))}),t}var is=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:()=>new Yo,providedIn:"root"})}}return e})(),Yo=class{parse(n){let t=new Qh(n);return new ei(t.parseRootSegment(),t.parseQueryParams(),t.parseFragment())}serialize(n){let t=`/${$o(n.root,!0)}`,i=_1(n.queryParams),r=typeof n.fragment=="string"?`#${g1(n.fragment)}`:"";return`${t}${i}${r}`}},m1=new Yo;function nl(e){return e.segments.map(n=>B_(n)).join("/")}function $o(e,n){if(!e.hasChildren())return nl(e);if(n){let t=e.children[X]?$o(e.children[X],!1):"",i=[];return Object.entries(e.children).forEach(([r,o])=>{r!==X&&i.push(`${r}:${$o(o,!1)}`)}),i.length>0?`${t}(${i.join("//")})`:t}else{let t=p1(e,(i,r)=>r===X?[$o(e.children[X],!1)]:[`${r}:${$o(i,!1)}`]);return Object.keys(e.children).length===1&&e.children[X]!=null?`${nl(e)}/${t[0]}`:`${nl(e)}/(${t.join("//")})`}}function j_(e){return encodeURIComponent(e).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function Jc(e){return j_(e).replace(/%3B/gi,";")}function g1(e){return encodeURI(e)}function Yh(e){return j_(e).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function il(e){return decodeURIComponent(e)}function I_(e){return il(e.replace(/\+/g,"%20"))}function B_(e){return`${Yh(e.path)}${v1(e.parameters)}`}function v1(e){return Object.entries(e).map(([n,t])=>`;${Yh(n)}=${Yh(t)}`).join("")}function _1(e){let n=Object.entries(e).map(([t,i])=>Array.isArray(i)?i.map(r=>`${Jc(t)}=${Jc(r)}`).join("&"):`${Jc(t)}=${Jc(i)}`).filter(t=>t);return n.length?`?${n.join("&")}`:""}var y1=/^[^\/()?;#]+/;function $h(e){let n=e.match(y1);return n?n[0]:""}var b1=/^[^\/()?;=#]+/;function w1(e){let n=e.match(b1);return n?n[0]:""}var C1=/^[^=?]+/;function x1(e){let n=e.match(C1);return n?n[0]:""}var D1=/^[^]+/;function E1(e){let n=e.match(D1);return n?n[0]:""}var Qh=class{constructor(n){this.url=n,this.remaining=n}parseRootSegment(){return this.consumeOptional("/"),this.remaining===""||this.peekStartsWith("?")||this.peekStartsWith("#")?new fe([],{}):new fe([],this.parseChildren())}parseQueryParams(){let n={};if(this.consumeOptional("?"))do this.parseQueryParam(n);while(this.consumeOptional("&"));return n}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(this.remaining==="")return{};this.consumeOptional("/");let n=[];for(this.peekStartsWith("(")||n.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),n.push(this.parseSegment());let t={};this.peekStartsWith("/(")&&(this.capture("/"),t=this.parseParens(!0));let i={};return this.peekStartsWith("(")&&(i=this.parseParens(!1)),(n.length>0||Object.keys(t).length>0)&&(i[X]=new fe(n,t)),i}parseSegment(){let n=$h(this.remaining);if(n===""&&this.peekStartsWith(";"))throw new P(4009,!1);return this.capture(n),new Ai(il(n),this.parseMatrixParams())}parseMatrixParams(){let n={};for(;this.consumeOptional(";");)this.parseParam(n);return n}parseParam(n){let t=w1(this.remaining);if(!t)return;this.capture(t);let i="";if(this.consumeOptional("=")){let r=$h(this.remaining);r&&(i=r,this.capture(i))}n[il(t)]=il(i)}parseQueryParam(n){let t=x1(this.remaining);if(!t)return;this.capture(t);let i="";if(this.consumeOptional("=")){let s=E1(this.remaining);s&&(i=s,this.capture(i))}let r=I_(t),o=I_(i);if(n.hasOwnProperty(r)){let s=n[r];Array.isArray(s)||(s=[s],n[r]=s),s.push(o)}else n[r]=o}parseParens(n){let t={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){let i=$h(this.remaining),r=this.remaining[i.length];if(r!=="/"&&r!==")"&&r!==";")throw new P(4010,!1);let o;i.indexOf(":")>-1?(o=i.slice(0,i.indexOf(":")),this.capture(o),this.capture(":")):n&&(o=X);let s=this.parseChildren();t[o]=Object.keys(s).length===1?s[X]:new fe([],s),this.consumeOptional("//")}return t}peekStartsWith(n){return this.remaining.startsWith(n)}consumeOptional(n){return this.peekStartsWith(n)?(this.remaining=this.remaining.substring(n.length),!0):!1}capture(n){if(!this.consumeOptional(n))throw new P(4011,!1)}};function U_(e){return e.segments.length>0?new fe([],{[X]:e}):e}function $_(e){let n={};for(let[i,r]of Object.entries(e.children)){let o=$_(r);if(i===X&&o.segments.length===0&&o.hasChildren())for(let[s,a]of Object.entries(o.children))n[s]=a;else(o.segments.length>0||o.hasChildren())&&(n[i]=o)}let t=new fe(e.segments,n);return I1(t)}function I1(e){if(e.numberOfChildren===1&&e.children[X]){let n=e.children[X];return new fe(e.segments.concat(n.segments),n.children)}return e}function kr(e){return e instanceof ei}function S1(e,n,t=null,i=null){let r=H_(e);return z_(r,n,t,i)}function H_(e){let n;function t(o){let s={};for(let c of o.children){let h=t(c);s[c.outlet]=h}let a=new fe(o.url,s);return o===e&&(n=a),a}let i=t(e.root),r=U_(i);return n??r}function z_(e,n,t,i){let r=e;for(;r.parent;)r=r.parent;if(n.length===0)return Hh(r,r,r,t,i);let o=M1(n);if(o.toRoot())return Hh(r,r,new fe([],{}),t,i);let s=T1(o,r,e),a=s.processChildren?Go(s.segmentGroup,s.index,o.commands):W_(s.segmentGroup,s.index,o.commands);return Hh(r,s.segmentGroup,a,t,i)}function rl(e){return typeof e=="object"&&e!=null&&!e.outlets&&!e.segmentPath}function Qo(e){return typeof e=="object"&&e!=null&&e.outlets}function Hh(e,n,t,i,r){let o={};i&&Object.entries(i).forEach(([c,h])=>{o[c]=Array.isArray(h)?h.map(f=>`${f}`):`${h}`});let s;e===n?s=t:s=G_(e,n,t);let a=U_($_(s));return new ei(a,o,r)}function G_(e,n,t){let i={};return Object.entries(e.children).forEach(([r,o])=>{o===n?i[r]=t:i[r]=G_(o,n,t)}),new fe(e.segments,i)}var ol=class{constructor(n,t,i){if(this.isAbsolute=n,this.numberOfDoubleDots=t,this.commands=i,n&&i.length>0&&rl(i[0]))throw new P(4003,!1);let r=i.find(Qo);if(r&&r!==R_(i))throw new P(4004,!1)}toRoot(){return this.isAbsolute&&this.commands.length===1&&this.commands[0]=="/"}};function M1(e){if(typeof e[0]=="string"&&e.length===1&&e[0]==="/")return new ol(!0,0,e);let n=0,t=!1,i=e.reduce((r,o,s)=>{if(typeof o=="object"&&o!=null){if(o.outlets){let a={};return Object.entries(o.outlets).forEach(([c,h])=>{a[c]=typeof h=="string"?h.split("/"):h}),[...r,{outlets:a}]}if(o.segmentPath)return[...r,o.segmentPath]}return typeof o!="string"?[...r,o]:s===0?(o.split("/").forEach((a,c)=>{c==0&&a==="."||(c==0&&a===""?t=!0:a===".."?n++:a!=""&&r.push(a))}),r):[...r,o]},[]);return new ol(t,n,i)}var Tr=class{constructor(n,t,i){this.segmentGroup=n,this.processChildren=t,this.index=i}};function T1(e,n,t){if(e.isAbsolute)return new Tr(n,!0,0);if(!t)return new Tr(n,!1,NaN);if(t.parent===null)return new Tr(t,!0,0);let i=rl(e.commands[0])?0:1,r=t.segments.length-1+i;return A1(t,r,e.numberOfDoubleDots)}function A1(e,n,t){let i=e,r=n,o=t;for(;o>r;){if(o-=r,i=i.parent,!i)throw new P(4005,!1);r=i.segments.length}return new Tr(i,!1,r-o)}function O1(e){return Qo(e[0])?e[0].outlets:{[X]:e}}function W_(e,n,t){if(e??=new fe([],{}),e.segments.length===0&&e.hasChildren())return Go(e,n,t);let i=k1(e,n,t),r=t.slice(i.commandIndex);if(i.match&&i.pathIndexo!==X)&&e.children[X]&&e.numberOfChildren===1&&e.children[X].segments.length===0){let o=Go(e.children[X],n,t);return new fe(e.segments,o.children)}return Object.entries(i).forEach(([o,s])=>{typeof s=="string"&&(s=[s]),s!==null&&(r[o]=W_(e.children[o],n,s))}),Object.entries(e.children).forEach(([o,s])=>{i[o]===void 0&&(r[o]=s)}),new fe(e.segments,r)}}function k1(e,n,t){let i=0,r=n,o={match:!1,pathIndex:0,commandIndex:0};for(;r=t.length)return o;let s=e.segments[r],a=t[i];if(Qo(a))break;let c=`${a}`,h=i0&&c===void 0)break;if(c&&h&&typeof h=="object"&&h.outlets===void 0){if(!M_(c,h,s))return o;i+=2}else{if(!M_(c,{},s))return o;i++}r++}return{match:!0,pathIndex:r,commandIndex:i}}function Zh(e,n,t){let i=e.segments.slice(0,n),r=0;for(;r{typeof i=="string"&&(i=[i]),i!==null&&(n[t]=Zh(new fe([],{}),0,i))}),n}function S_(e){let n={};return Object.entries(e).forEach(([t,i])=>n[t]=`${i}`),n}function M_(e,n,t){return e==t.path&&hn(n,t.parameters)}var Wo="imperative",ze=function(e){return e[e.NavigationStart=0]="NavigationStart",e[e.NavigationEnd=1]="NavigationEnd",e[e.NavigationCancel=2]="NavigationCancel",e[e.NavigationError=3]="NavigationError",e[e.RoutesRecognized=4]="RoutesRecognized",e[e.ResolveStart=5]="ResolveStart",e[e.ResolveEnd=6]="ResolveEnd",e[e.GuardsCheckStart=7]="GuardsCheckStart",e[e.GuardsCheckEnd=8]="GuardsCheckEnd",e[e.RouteConfigLoadStart=9]="RouteConfigLoadStart",e[e.RouteConfigLoadEnd=10]="RouteConfigLoadEnd",e[e.ChildActivationStart=11]="ChildActivationStart",e[e.ChildActivationEnd=12]="ChildActivationEnd",e[e.ActivationStart=13]="ActivationStart",e[e.ActivationEnd=14]="ActivationEnd",e[e.Scroll=15]="Scroll",e[e.NavigationSkipped=16]="NavigationSkipped",e}(ze||{}),kt=class{constructor(n,t){this.id=n,this.url=t}},Pr=class extends kt{constructor(n,t,i="imperative",r=null){super(n,t),this.type=ze.NavigationStart,this.navigationTrigger=i,this.restoredState=r}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}},Yt=class extends kt{constructor(n,t,i){super(n,t),this.urlAfterRedirects=i,this.type=ze.NavigationEnd}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}},St=function(e){return e[e.Redirect=0]="Redirect",e[e.SupersededByNewNavigation=1]="SupersededByNewNavigation",e[e.NoDataFromResolver=2]="NoDataFromResolver",e[e.GuardRejected=3]="GuardRejected",e}(St||{}),sl=function(e){return e[e.IgnoredSameUrlNavigation=0]="IgnoredSameUrlNavigation",e[e.IgnoredByUrlHandlingStrategy=1]="IgnoredByUrlHandlingStrategy",e}(sl||{}),ti=class extends kt{constructor(n,t,i,r){super(n,t),this.reason=i,this.code=r,this.type=ze.NavigationCancel}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}},ni=class extends kt{constructor(n,t,i,r){super(n,t),this.reason=i,this.code=r,this.type=ze.NavigationSkipped}},Zo=class extends kt{constructor(n,t,i,r){super(n,t),this.error=i,this.target=r,this.type=ze.NavigationError}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}},al=class extends kt{constructor(n,t,i,r){super(n,t),this.urlAfterRedirects=i,this.state=r,this.type=ze.RoutesRecognized}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},Kh=class extends kt{constructor(n,t,i,r){super(n,t),this.urlAfterRedirects=i,this.state=r,this.type=ze.GuardsCheckStart}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},Xh=class extends kt{constructor(n,t,i,r,o){super(n,t),this.urlAfterRedirects=i,this.state=r,this.shouldActivate=o,this.type=ze.GuardsCheckEnd}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}},Jh=class extends kt{constructor(n,t,i,r){super(n,t),this.urlAfterRedirects=i,this.state=r,this.type=ze.ResolveStart}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},ef=class extends kt{constructor(n,t,i,r){super(n,t),this.urlAfterRedirects=i,this.state=r,this.type=ze.ResolveEnd}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},tf=class{constructor(n){this.route=n,this.type=ze.RouteConfigLoadStart}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}},nf=class{constructor(n){this.route=n,this.type=ze.RouteConfigLoadEnd}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}},rf=class{constructor(n){this.snapshot=n,this.type=ze.ChildActivationStart}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},of=class{constructor(n){this.snapshot=n,this.type=ze.ChildActivationEnd}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},sf=class{constructor(n){this.snapshot=n,this.type=ze.ActivationStart}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},af=class{constructor(n){this.snapshot=n,this.type=ze.ActivationEnd}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},cl=class{constructor(n,t,i){this.routerEvent=n,this.position=t,this.anchor=i,this.type=ze.Scroll}toString(){let n=this.position?`${this.position[0]}, ${this.position[1]}`:null;return`Scroll(anchor: '${this.anchor}', position: '${n}')`}},Ko=class{},Xo=class{constructor(n){this.url=n}};var cf=class{constructor(){this.outlet=null,this.route=null,this.injector=null,this.children=new rs,this.attachRef=null}},rs=(()=>{class e{constructor(){this.contexts=new Map}onChildOutletCreated(t,i){let r=this.getOrCreateContext(t);r.outlet=i,this.contexts.set(t,r)}onChildOutletDestroyed(t){let i=this.getContext(t);i&&(i.outlet=null,i.attachRef=null)}onOutletDeactivated(){let t=this.contexts;return this.contexts=new Map,t}onOutletReAttached(t){this.contexts=t}getOrCreateContext(t){let i=this.getContext(t);return i||(i=new cf,this.contexts.set(t,i)),i}getContext(t){return this.contexts.get(t)||null}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),ll=class{constructor(n){this._root=n}get root(){return this._root.value}parent(n){let t=this.pathFromRoot(n);return t.length>1?t[t.length-2]:null}children(n){let t=lf(n,this._root);return t?t.children.map(i=>i.value):[]}firstChild(n){let t=lf(n,this._root);return t&&t.children.length>0?t.children[0].value:null}siblings(n){let t=df(n,this._root);return t.length<2?[]:t[t.length-2].children.map(r=>r.value).filter(r=>r!==n)}pathFromRoot(n){return df(n,this._root).map(t=>t.value)}};function lf(e,n){if(e===n.value)return n;for(let t of n.children){let i=lf(e,t);if(i)return i}return null}function df(e,n){if(e===n.value)return[n];for(let t of n.children){let i=df(e,t);if(i.length)return i.unshift(n),i}return[]}var It=class{constructor(n,t){this.value=n,this.children=t}toString(){return`TreeNode(${this.value})`}};function Mr(e){let n={};return e&&e.children.forEach(t=>n[t.value.outlet]=t),n}var dl=class extends ll{constructor(n,t){super(n),this.snapshot=t,bf(this,n)}toString(){return this.snapshot.toString()}};function q_(e){let n=R1(e),t=new Ce([new Ai("",{})]),i=new Ce({}),r=new Ce({}),o=new Ce({}),s=new Ce(""),a=new Fn(t,i,o,s,r,X,e,n.root);return a.snapshot=n.root,new dl(new It(a,[]),n)}function R1(e){let n={},t={},i={},r="",o=new Jo([],n,i,r,t,X,e,null,{});return new ul("",new It(o,[]))}var Fn=class{constructor(n,t,i,r,o,s,a,c){this.urlSubject=n,this.paramsSubject=t,this.queryParamsSubject=i,this.fragmentSubject=r,this.dataSubject=o,this.outlet=s,this.component=a,this._futureSnapshot=c,this.title=this.dataSubject?.pipe(U(h=>h[ns]))??N(void 0),this.url=n,this.params=t,this.queryParams=i,this.fragment=r,this.data=o}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap??=this.params.pipe(U(n=>Or(n))),this._paramMap}get queryParamMap(){return this._queryParamMap??=this.queryParams.pipe(U(n=>Or(n))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}};function yf(e,n,t="emptyOnly"){let i,{routeConfig:r}=e;return n!==null&&(t==="always"||r?.path===""||!n.component&&!n.routeConfig?.loadComponent)?i={params:E(E({},n.params),e.params),data:E(E({},n.data),e.data),resolve:E(E(E(E({},e.data),n.data),r?.data),e._resolvedData)}:i={params:E({},e.params),data:E({},e.data),resolve:E(E({},e.data),e._resolvedData??{})},r&&Q_(r)&&(i.resolve[ns]=r.title),i}var Jo=class{get title(){return this.data?.[ns]}constructor(n,t,i,r,o,s,a,c,h){this.url=n,this.params=t,this.queryParams=i,this.fragment=r,this.data=o,this.outlet=s,this.component=a,this.routeConfig=c,this._resolve=h}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap??=Or(this.params),this._paramMap}get queryParamMap(){return this._queryParamMap??=Or(this.queryParams),this._queryParamMap}toString(){let n=this.url.map(i=>i.toString()).join("/"),t=this.routeConfig?this.routeConfig.path:"";return`Route(url:'${n}', path:'${t}')`}},ul=class extends ll{constructor(n,t){super(t),this.url=n,bf(this,t)}toString(){return Y_(this._root)}};function bf(e,n){n.value._routerState=e,n.children.forEach(t=>bf(e,t))}function Y_(e){let n=e.children.length>0?` { ${e.children.map(Y_).join(", ")} } `:"";return`${e.value}${n}`}function zh(e){if(e.snapshot){let n=e.snapshot,t=e._futureSnapshot;e.snapshot=t,hn(n.queryParams,t.queryParams)||e.queryParamsSubject.next(t.queryParams),n.fragment!==t.fragment&&e.fragmentSubject.next(t.fragment),hn(n.params,t.params)||e.paramsSubject.next(t.params),l1(n.url,t.url)||e.urlSubject.next(t.url),hn(n.data,t.data)||e.dataSubject.next(t.data)}else e.snapshot=e._futureSnapshot,e.dataSubject.next(e._futureSnapshot.data)}function uf(e,n){let t=hn(e.params,n.params)&&f1(e.url,n.url),i=!e.parent!=!n.parent;return t&&!i&&(!e.parent||uf(e.parent,n.parent))}function Q_(e){return typeof e.title=="string"||e.title===null}var wf=(()=>{class e{constructor(){this.activated=null,this._activatedRoute=null,this.name=X,this.activateEvents=new ne,this.deactivateEvents=new ne,this.attachEvents=new ne,this.detachEvents=new ne,this.parentContexts=S(rs),this.location=S(Ct),this.changeDetector=S(Ve),this.environmentInjector=S(Ze),this.inputBinder=S(gl,{optional:!0}),this.supportsBindingToComponentInputs=!0}get activatedComponentRef(){return this.activated}ngOnChanges(t){if(t.name){let{firstChange:i,previousValue:r}=t.name;if(i)return;this.isTrackedInParentContexts(r)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(r)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name),this.inputBinder?.unsubscribeFromRouteData(this)}isTrackedInParentContexts(t){return this.parentContexts.getContext(t)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;let t=this.parentContexts.getContext(this.name);t?.route&&(t.attachRef?this.attach(t.attachRef,t.route):this.activateWith(t.route,t.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new P(4012,!1);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new P(4012,!1);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new P(4012,!1);this.location.detach();let t=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(t.instance),t}attach(t,i){this.activated=t,this._activatedRoute=i,this.location.insert(t.hostView),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.attachEvents.emit(t.instance)}deactivate(){if(this.activated){let t=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(t)}}activateWith(t,i){if(this.isActivated)throw new P(4013,!1);this._activatedRoute=t;let r=this.location,s=t.snapshot.component,a=this.parentContexts.getOrCreateContext(this.name).children,c=new hf(t,a,r.injector);this.activated=r.createComponent(s,{index:r.length,injector:c,environmentInjector:i??this.environmentInjector}),this.changeDetector.markForCheck(),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.activateEvents.emit(this.activated.instance)}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275dir=ce({type:e,selectors:[["router-outlet"]],inputs:{name:"name"},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],standalone:!0,features:[Ke]})}}return e})(),hf=class e{__ngOutletInjector(n){return new e(this.route,this.childContexts,n)}constructor(n,t,i){this.route=n,this.childContexts=t,this.parent=i}get(n,t){return n===Fn?this.route:n===rs?this.childContexts:this.parent.get(n,t)}},gl=new O(""),T_=(()=>{class e{constructor(){this.outletDataSubscriptions=new Map}bindActivatedRouteToOutletComponent(t){this.unsubscribeFromRouteData(t),this.subscribeToRouteData(t)}unsubscribeFromRouteData(t){this.outletDataSubscriptions.get(t)?.unsubscribe(),this.outletDataSubscriptions.delete(t)}subscribeToRouteData(t){let{activatedRoute:i}=t,r=di([i.queryParams,i.params,i.data]).pipe($e(([o,s,a],c)=>(a=E(E(E({},o),s),a),c===0?N(a):Promise.resolve(a)))).subscribe(o=>{if(!t.isActivated||!t.activatedComponentRef||t.activatedRoute!==i||i.component===null){this.unsubscribeFromRouteData(t);return}let s=cv(i.component);if(!s){this.unsubscribeFromRouteData(t);return}for(let{templateName:a}of s.inputs)t.activatedComponentRef.setInput(a,o[a])});this.outletDataSubscriptions.set(t,r)}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac})}}return e})();function N1(e,n,t){let i=es(e,n._root,t?t._root:void 0);return new dl(i,n)}function es(e,n,t){if(t&&e.shouldReuseRoute(n.value,t.value.snapshot)){let i=t.value;i._futureSnapshot=n.value;let r=F1(e,n,t);return new It(i,r)}else{if(e.shouldAttach(n.value)){let o=e.retrieve(n.value);if(o!==null){let s=o.route;return s.value._futureSnapshot=n.value,s.children=n.children.map(a=>es(e,a)),s}}let i=L1(n.value),r=n.children.map(o=>es(e,o));return new It(i,r)}}function F1(e,n,t){return n.children.map(i=>{for(let r of t.children)if(e.shouldReuseRoute(i.value,r.value.snapshot))return es(e,i,r);return es(e,i)})}function L1(e){return new Fn(new Ce(e.url),new Ce(e.params),new Ce(e.queryParams),new Ce(e.fragment),new Ce(e.data),e.outlet,e.component,e)}var Z_="ngNavigationCancelingError";function K_(e,n){let{redirectTo:t,navigationBehaviorOptions:i}=kr(n)?{redirectTo:n,navigationBehaviorOptions:void 0}:n,r=X_(!1,St.Redirect);return r.url=t,r.navigationBehaviorOptions=i,r}function X_(e,n){let t=new Error(`NavigationCancelingError: ${e||""}`);return t[Z_]=!0,t.cancellationCode=n,t}function V1(e){return J_(e)&&kr(e.url)}function J_(e){return!!e&&e[Z_]}var j1=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=pe({type:e,selectors:[["ng-component"]],standalone:!0,features:[Fe],decls:1,vars:0,template:function(i,r){i&1&&g(0,"router-outlet")},dependencies:[wf],encapsulation:2})}}return e})();function B1(e,n){return e.providers&&!e._injector&&(e._injector=oc(e.providers,n,`Route: ${e.path}`)),e._injector??n}function Cf(e){let n=e.children&&e.children.map(Cf),t=n?ae(E({},e),{children:n}):E({},e);return!t.component&&!t.loadComponent&&(n||t.loadChildren)&&t.outlet&&t.outlet!==X&&(t.component=j1),t}function fn(e){return e.outlet||X}function U1(e,n){let t=e.filter(i=>fn(i)===n);return t.push(...e.filter(i=>fn(i)!==n)),t}function os(e){if(!e)return null;if(e.routeConfig?._injector)return e.routeConfig._injector;for(let n=e.parent;n;n=n.parent){let t=n.routeConfig;if(t?._loadedInjector)return t._loadedInjector;if(t?._injector)return t._injector}return null}var $1=(e,n,t,i)=>U(r=>(new ff(n,r.targetRouterState,r.currentRouterState,t,i).activate(e),r)),ff=class{constructor(n,t,i,r,o){this.routeReuseStrategy=n,this.futureState=t,this.currState=i,this.forwardEvent=r,this.inputBindingEnabled=o}activate(n){let t=this.futureState._root,i=this.currState?this.currState._root:null;this.deactivateChildRoutes(t,i,n),zh(this.futureState.root),this.activateChildRoutes(t,i,n)}deactivateChildRoutes(n,t,i){let r=Mr(t);n.children.forEach(o=>{let s=o.value.outlet;this.deactivateRoutes(o,r[s],i),delete r[s]}),Object.values(r).forEach(o=>{this.deactivateRouteAndItsChildren(o,i)})}deactivateRoutes(n,t,i){let r=n.value,o=t?t.value:null;if(r===o)if(r.component){let s=i.getContext(r.outlet);s&&this.deactivateChildRoutes(n,t,s.children)}else this.deactivateChildRoutes(n,t,i);else o&&this.deactivateRouteAndItsChildren(t,i)}deactivateRouteAndItsChildren(n,t){n.value.component&&this.routeReuseStrategy.shouldDetach(n.value.snapshot)?this.detachAndStoreRouteSubtree(n,t):this.deactivateRouteAndOutlet(n,t)}detachAndStoreRouteSubtree(n,t){let i=t.getContext(n.value.outlet),r=i&&n.value.component?i.children:t,o=Mr(n);for(let s of Object.values(o))this.deactivateRouteAndItsChildren(s,r);if(i&&i.outlet){let s=i.outlet.detach(),a=i.children.onOutletDeactivated();this.routeReuseStrategy.store(n.value.snapshot,{componentRef:s,route:n,contexts:a})}}deactivateRouteAndOutlet(n,t){let i=t.getContext(n.value.outlet),r=i&&n.value.component?i.children:t,o=Mr(n);for(let s of Object.values(o))this.deactivateRouteAndItsChildren(s,r);i&&(i.outlet&&(i.outlet.deactivate(),i.children.onOutletDeactivated()),i.attachRef=null,i.route=null)}activateChildRoutes(n,t,i){let r=Mr(t);n.children.forEach(o=>{this.activateRoutes(o,r[o.value.outlet],i),this.forwardEvent(new af(o.value.snapshot))}),n.children.length&&this.forwardEvent(new of(n.value.snapshot))}activateRoutes(n,t,i){let r=n.value,o=t?t.value:null;if(zh(r),r===o)if(r.component){let s=i.getOrCreateContext(r.outlet);this.activateChildRoutes(n,t,s.children)}else this.activateChildRoutes(n,t,i);else if(r.component){let s=i.getOrCreateContext(r.outlet);if(this.routeReuseStrategy.shouldAttach(r.snapshot)){let a=this.routeReuseStrategy.retrieve(r.snapshot);this.routeReuseStrategy.store(r.snapshot,null),s.children.onOutletReAttached(a.contexts),s.attachRef=a.componentRef,s.route=a.route.value,s.outlet&&s.outlet.attach(a.componentRef,a.route.value),zh(a.route.value),this.activateChildRoutes(n,null,s.children)}else{let a=os(r.snapshot);s.attachRef=null,s.route=r,s.injector=a,s.outlet&&s.outlet.activateWith(r,s.injector),this.activateChildRoutes(n,null,s.children)}}else this.activateChildRoutes(n,null,i)}},hl=class{constructor(n){this.path=n,this.route=this.path[this.path.length-1]}},Ar=class{constructor(n,t){this.component=n,this.route=t}};function H1(e,n,t){let i=e._root,r=n?n._root:null;return Ho(i,r,t,[i.value])}function z1(e){let n=e.routeConfig?e.routeConfig.canActivateChild:null;return!n||n.length===0?null:{node:e,guards:n}}function Nr(e,n){let t=Symbol(),i=n.get(e,t);return i===t?typeof e=="function"&&!Rm(e)?e:n.get(e):i}function Ho(e,n,t,i,r={canDeactivateChecks:[],canActivateChecks:[]}){let o=Mr(n);return e.children.forEach(s=>{G1(s,o[s.value.outlet],t,i.concat([s.value]),r),delete o[s.value.outlet]}),Object.entries(o).forEach(([s,a])=>qo(a,t.getContext(s),r)),r}function G1(e,n,t,i,r={canDeactivateChecks:[],canActivateChecks:[]}){let o=e.value,s=n?n.value:null,a=t?t.getContext(e.value.outlet):null;if(s&&o.routeConfig===s.routeConfig){let c=W1(s,o,o.routeConfig.runGuardsAndResolvers);c?r.canActivateChecks.push(new hl(i)):(o.data=s.data,o._resolvedData=s._resolvedData),o.component?Ho(e,n,a?a.children:null,i,r):Ho(e,n,t,i,r),c&&a&&a.outlet&&a.outlet.isActivated&&r.canDeactivateChecks.push(new Ar(a.outlet.component,s))}else s&&qo(n,a,r),r.canActivateChecks.push(new hl(i)),o.component?Ho(e,null,a?a.children:null,i,r):Ho(e,null,t,i,r);return r}function W1(e,n,t){if(typeof t=="function")return t(e,n);switch(t){case"pathParamsChange":return!Oi(e.url,n.url);case"pathParamsOrQueryParamsChange":return!Oi(e.url,n.url)||!hn(e.queryParams,n.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!uf(e,n)||!hn(e.queryParams,n.queryParams);case"paramsChange":default:return!uf(e,n)}}function qo(e,n,t){let i=Mr(e),r=e.value;Object.entries(i).forEach(([o,s])=>{r.component?n?qo(s,n.children.getContext(o),t):qo(s,null,t):qo(s,n,t)}),r.component?n&&n.outlet&&n.outlet.isActivated?t.canDeactivateChecks.push(new Ar(n.outlet.component,r)):t.canDeactivateChecks.push(new Ar(null,r)):t.canDeactivateChecks.push(new Ar(null,r))}function ss(e){return typeof e=="function"}function q1(e){return typeof e=="boolean"}function Y1(e){return e&&ss(e.canLoad)}function Q1(e){return e&&ss(e.canActivate)}function Z1(e){return e&&ss(e.canActivateChild)}function K1(e){return e&&ss(e.canDeactivate)}function X1(e){return e&&ss(e.canMatch)}function ey(e){return e instanceof Ft||e?.name==="EmptyError"}var el=Symbol("INITIAL_VALUE");function Rr(){return $e(e=>di(e.map(n=>n.pipe(Ue(1),tn(el)))).pipe(U(n=>{for(let t of n)if(t!==!0){if(t===el)return el;if(t===!1||t instanceof ei)return t}return!0}),be(n=>n!==el),Ue(1)))}function J1(e,n){return Me(t=>{let{targetSnapshot:i,currentSnapshot:r,guards:{canActivateChecks:o,canDeactivateChecks:s}}=t;return s.length===0&&o.length===0?N(ae(E({},t),{guardsResult:!0})):eT(s,i,r,e).pipe(Me(a=>a&&q1(a)?tT(i,o,e,n):N(a)),U(a=>ae(E({},t),{guardsResult:a})))})}function eT(e,n,t,i){return me(e).pipe(Me(r=>sT(r.component,r.route,t,n,i)),en(r=>r!==!0,!0))}function tT(e,n,t,i){return me(n).pipe(mn(r=>jn(iT(r.route.parent,i),nT(r.route,i),oT(e,r.path,t),rT(e,r.route,t))),en(r=>r!==!0,!0))}function nT(e,n){return e!==null&&n&&n(new sf(e)),N(!0)}function iT(e,n){return e!==null&&n&&n(new rf(e)),N(!0)}function rT(e,n,t){let i=n.routeConfig?n.routeConfig.canActivate:null;if(!i||i.length===0)return N(!0);let r=i.map(o=>Bn(()=>{let s=os(n)??t,a=Nr(o,s),c=Q1(a)?a.canActivate(n,e):Ht(s,()=>a(n,e));return ri(c).pipe(en())}));return N(r).pipe(Rr())}function oT(e,n,t){let i=n[n.length-1],o=n.slice(0,n.length-1).reverse().map(s=>z1(s)).filter(s=>s!==null).map(s=>Bn(()=>{let a=s.guards.map(c=>{let h=os(s.node)??t,f=Nr(c,h),p=Z1(f)?f.canActivateChild(i,e):Ht(h,()=>f(i,e));return ri(p).pipe(en())});return N(a).pipe(Rr())}));return N(o).pipe(Rr())}function sT(e,n,t,i,r){let o=n&&n.routeConfig?n.routeConfig.canDeactivate:null;if(!o||o.length===0)return N(!0);let s=o.map(a=>{let c=os(n)??r,h=Nr(a,c),f=K1(h)?h.canDeactivate(e,n,t,i):Ht(c,()=>h(e,n,t,i));return ri(f).pipe(en())});return N(s).pipe(Rr())}function aT(e,n,t,i){let r=n.canLoad;if(r===void 0||r.length===0)return N(!0);let o=r.map(s=>{let a=Nr(s,e),c=Y1(a)?a.canLoad(n,t):Ht(e,()=>a(n,t));return ri(c)});return N(o).pipe(Rr(),ty(i))}function ty(e){return Hl(xe(n=>{if(kr(n))throw K_(e,n)}),U(n=>n===!0))}function cT(e,n,t,i){let r=n.canMatch;if(!r||r.length===0)return N(!0);let o=r.map(s=>{let a=Nr(s,e),c=X1(a)?a.canMatch(n,t):Ht(e,()=>a(n,t));return ri(c)});return N(o).pipe(Rr(),ty(i))}var ts=class{constructor(n){this.segmentGroup=n||null}},fl=class extends Error{constructor(n){super(),this.urlTree=n}};function Sr(e){return Xt(new ts(e))}function lT(e){return Xt(new P(4e3,!1))}function dT(e){return Xt(X_(!1,St.GuardRejected))}var pf=class{constructor(n,t){this.urlSerializer=n,this.urlTree=t}lineralizeSegments(n,t){let i=[],r=t.root;for(;;){if(i=i.concat(r.segments),r.numberOfChildren===0)return N(i);if(r.numberOfChildren>1||!r.children[X])return lT(n.redirectTo);r=r.children[X]}}applyRedirectCommands(n,t,i){let r=this.applyRedirectCreateUrlTree(t,this.urlSerializer.parse(t),n,i);if(t.startsWith("/"))throw new fl(r);return r}applyRedirectCreateUrlTree(n,t,i,r){let o=this.createSegmentGroup(n,t.root,i,r);return new ei(o,this.createQueryParams(t.queryParams,this.urlTree.queryParams),t.fragment)}createQueryParams(n,t){let i={};return Object.entries(n).forEach(([r,o])=>{if(typeof o=="string"&&o.startsWith(":")){let a=o.substring(1);i[r]=t[a]}else i[r]=o}),i}createSegmentGroup(n,t,i,r){let o=this.createSegments(n,t.segments,i,r),s={};return Object.entries(t.children).forEach(([a,c])=>{s[a]=this.createSegmentGroup(n,c,i,r)}),new fe(o,s)}createSegments(n,t,i,r){return t.map(o=>o.path.startsWith(":")?this.findPosParam(n,o,r):this.findOrReturn(o,i))}findPosParam(n,t,i){let r=i[t.path.substring(1)];if(!r)throw new P(4001,!1);return r}findOrReturn(n,t){let i=0;for(let r of t){if(r.path===n.path)return t.splice(i),r;i++}return n}},mf={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function uT(e,n,t,i,r){let o=xf(e,n,t);return o.matched?(i=B1(n,i),cT(i,n,t,r).pipe(U(s=>s===!0?o:E({},mf)))):N(o)}function xf(e,n,t){if(n.path==="**")return hT(t);if(n.path==="")return n.pathMatch==="full"&&(e.hasChildren()||t.length>0)?E({},mf):{matched:!0,consumedSegments:[],remainingSegments:t,parameters:{},positionalParamSegments:{}};let r=(n.matcher||c1)(t,e,n);if(!r)return E({},mf);let o={};Object.entries(r.posParams??{}).forEach(([a,c])=>{o[a]=c.path});let s=r.consumed.length>0?E(E({},o),r.consumed[r.consumed.length-1].parameters):o;return{matched:!0,consumedSegments:r.consumed,remainingSegments:t.slice(r.consumed.length),parameters:s,positionalParamSegments:r.posParams??{}}}function hT(e){return{matched:!0,parameters:e.length>0?R_(e).parameters:{},consumedSegments:e,remainingSegments:[],positionalParamSegments:{}}}function A_(e,n,t,i){return t.length>0&&mT(e,t,i)?{segmentGroup:new fe(n,pT(i,new fe(t,e.children))),slicedSegments:[]}:t.length===0&&gT(e,t,i)?{segmentGroup:new fe(e.segments,fT(e,t,i,e.children)),slicedSegments:t}:{segmentGroup:new fe(e.segments,e.children),slicedSegments:t}}function fT(e,n,t,i){let r={};for(let o of t)if(vl(e,n,o)&&!i[fn(o)]){let s=new fe([],{});r[fn(o)]=s}return E(E({},i),r)}function pT(e,n){let t={};t[X]=n;for(let i of e)if(i.path===""&&fn(i)!==X){let r=new fe([],{});t[fn(i)]=r}return t}function mT(e,n,t){return t.some(i=>vl(e,n,i)&&fn(i)!==X)}function gT(e,n,t){return t.some(i=>vl(e,n,i))}function vl(e,n,t){return(e.hasChildren()||n.length>0)&&t.pathMatch==="full"?!1:t.path===""}function vT(e,n,t,i){return fn(e)!==i&&(i===X||!vl(n,t,e))?!1:xf(n,e,t).matched}function _T(e,n,t){return n.length===0&&!e.children[t]}var gf=class{};function yT(e,n,t,i,r,o,s="emptyOnly"){return new vf(e,n,t,i,r,s,o).recognize()}var bT=31,vf=class{constructor(n,t,i,r,o,s,a){this.injector=n,this.configLoader=t,this.rootComponentType=i,this.config=r,this.urlTree=o,this.paramsInheritanceStrategy=s,this.urlSerializer=a,this.applyRedirects=new pf(this.urlSerializer,this.urlTree),this.absoluteRedirectCount=0,this.allowRedirects=!0}noMatchError(n){return new P(4002,`'${n.segmentGroup}'`)}recognize(){let n=A_(this.urlTree.root,[],[],this.config).segmentGroup;return this.match(n).pipe(U(t=>{let i=new Jo([],Object.freeze({}),Object.freeze(E({},this.urlTree.queryParams)),this.urlTree.fragment,{},X,this.rootComponentType,null,{}),r=new It(i,t),o=new ul("",r),s=S1(i,[],this.urlTree.queryParams,this.urlTree.fragment);return s.queryParams=this.urlTree.queryParams,o.url=this.urlSerializer.serialize(s),this.inheritParamsAndData(o._root,null),{state:o,tree:s}}))}match(n){return this.processSegmentGroup(this.injector,this.config,n,X).pipe(ft(i=>{if(i instanceof fl)return this.urlTree=i.urlTree,this.match(i.urlTree.root);throw i instanceof ts?this.noMatchError(i):i}))}inheritParamsAndData(n,t){let i=n.value,r=yf(i,t,this.paramsInheritanceStrategy);i.params=Object.freeze(r.params),i.data=Object.freeze(r.data),n.children.forEach(o=>this.inheritParamsAndData(o,i))}processSegmentGroup(n,t,i,r){return i.segments.length===0&&i.hasChildren()?this.processChildren(n,t,i):this.processSegment(n,t,i,i.segments,r,!0).pipe(U(o=>o instanceof It?[o]:[]))}processChildren(n,t,i){let r=[];for(let o of Object.keys(i.children))o==="primary"?r.unshift(o):r.push(o);return me(r).pipe(mn(o=>{let s=i.children[o],a=U1(t,o);return this.processSegmentGroup(n,a,s,o)}),Jl((o,s)=>(o.push(...s),o)),Un(null),Xl(),Me(o=>{if(o===null)return Sr(i);let s=ny(o);return wT(s),N(s)}))}processSegment(n,t,i,r,o,s){return me(t).pipe(mn(a=>this.processSegmentAgainstRoute(a._injector??n,t,a,i,r,o,s).pipe(ft(c=>{if(c instanceof ts)return N(null);throw c}))),en(a=>!!a),ft(a=>{if(ey(a))return _T(i,r,o)?N(new gf):Sr(i);throw a}))}processSegmentAgainstRoute(n,t,i,r,o,s,a){return vT(i,r,o,s)?i.redirectTo===void 0?this.matchSegmentAgainstRoute(n,r,i,o,s):this.allowRedirects&&a?this.expandSegmentAgainstRouteUsingRedirect(n,r,t,i,o,s):Sr(r):Sr(r)}expandSegmentAgainstRouteUsingRedirect(n,t,i,r,o,s){let{matched:a,consumedSegments:c,positionalParamSegments:h,remainingSegments:f}=xf(t,r,o);if(!a)return Sr(t);r.redirectTo.startsWith("/")&&(this.absoluteRedirectCount++,this.absoluteRedirectCount>bT&&(this.allowRedirects=!1));let p=this.applyRedirects.applyRedirectCommands(c,r.redirectTo,h);return this.applyRedirects.lineralizeSegments(r,p).pipe(Me(b=>this.processSegment(n,i,t,b.concat(f),s,!1)))}matchSegmentAgainstRoute(n,t,i,r,o){let s=uT(t,i,r,n,this.urlSerializer);return i.path==="**"&&(t.children={}),s.pipe($e(a=>a.matched?(n=i._injector??n,this.getChildConfig(n,i,r).pipe($e(({routes:c})=>{let h=i._loadedInjector??n,{consumedSegments:f,remainingSegments:p,parameters:b}=a,_=new Jo(f,b,Object.freeze(E({},this.urlTree.queryParams)),this.urlTree.fragment,xT(i),fn(i),i.component??i._loadedComponent??null,i,DT(i)),{segmentGroup:x,slicedSegments:M}=A_(t,f,p,c);if(M.length===0&&x.hasChildren())return this.processChildren(h,c,x).pipe(U(V=>V===null?null:new It(_,V)));if(c.length===0&&M.length===0)return N(new It(_,[]));let k=fn(i)===o;return this.processSegment(h,c,x,M,k?X:o,!0).pipe(U(V=>new It(_,V instanceof It?[V]:[])))}))):Sr(t)))}getChildConfig(n,t,i){return t.children?N({routes:t.children,injector:n}):t.loadChildren?t._loadedRoutes!==void 0?N({routes:t._loadedRoutes,injector:t._loadedInjector}):aT(n,t,i,this.urlSerializer).pipe(Me(r=>r?this.configLoader.loadChildren(n,t).pipe(xe(o=>{t._loadedRoutes=o.routes,t._loadedInjector=o.injector})):dT(t))):N({routes:[],injector:n})}};function wT(e){e.sort((n,t)=>n.value.outlet===X?-1:t.value.outlet===X?1:n.value.outlet.localeCompare(t.value.outlet))}function CT(e){let n=e.value.routeConfig;return n&&n.path===""}function ny(e){let n=[],t=new Set;for(let i of e){if(!CT(i)){n.push(i);continue}let r=n.find(o=>i.value.routeConfig===o.value.routeConfig);r!==void 0?(r.children.push(...i.children),t.add(r)):n.push(i)}for(let i of t){let r=ny(i.children);n.push(new It(i.value,r))}return n.filter(i=>!t.has(i))}function xT(e){return e.data||{}}function DT(e){return e.resolve||{}}function ET(e,n,t,i,r,o){return Me(s=>yT(e,n,t,i,s.extractedUrl,r,o).pipe(U(({state:a,tree:c})=>ae(E({},s),{targetSnapshot:a,urlAfterRedirects:c}))))}function IT(e,n){return Me(t=>{let{targetSnapshot:i,guards:{canActivateChecks:r}}=t;if(!r.length)return N(t);let o=new Set(r.map(c=>c.route)),s=new Set;for(let c of o)if(!s.has(c))for(let h of iy(c))s.add(h);let a=0;return me(s).pipe(mn(c=>o.has(c)?ST(c,i,e,n):(c.data=yf(c,c.parent,e).resolve,N(void 0))),xe(()=>a++),Ki(1),Me(c=>a===s.size?N(t):it))})}function iy(e){let n=e.children.map(t=>iy(t)).flat();return[e,...n]}function ST(e,n,t,i){let r=e.routeConfig,o=e._resolve;return r?.title!==void 0&&!Q_(r)&&(o[ns]=r.title),MT(o,e,n,i).pipe(U(s=>(e._resolvedData=s,e.data=yf(e,e.parent,t).resolve,null)))}function MT(e,n,t,i){let r=qh(e);if(r.length===0)return N({});let o={};return me(r).pipe(Me(s=>TT(e[s],n,t,i).pipe(en(),xe(a=>{o[s]=a}))),Ki(1),Kl(o),ft(s=>ey(s)?it:Xt(s)))}function TT(e,n,t,i){let r=os(n)??i,o=Nr(e,r),s=o.resolve?o.resolve(n,t):Ht(r,()=>o(n,t));return ri(s)}function Gh(e){return $e(n=>{let t=e(n);return t?me(t).pipe(U(()=>n)):N(n)})}var ry=(()=>{class e{buildTitle(t){let i,r=t.root;for(;r!==void 0;)i=this.getResolvedTitleForRoute(r)??i,r=r.children.find(o=>o.outlet===X);return i}getResolvedTitleForRoute(t){return t.data[ns]}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:()=>S(AT),providedIn:"root"})}}return e})(),AT=(()=>{class e extends ry{constructor(t){super(),this.title=t}updateTitle(t){let i=this.buildTitle(t);i!==void 0&&this.title.setTitle(i)}static{this.\u0275fac=function(i){return new(i||e)(v(Vc))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),as=new O("",{providedIn:"root",factory:()=>({})}),pl=new O(""),Df=(()=>{class e{constructor(){this.componentLoaders=new WeakMap,this.childrenLoaders=new WeakMap,this.compiler=S(hc)}loadComponent(t){if(this.componentLoaders.get(t))return this.componentLoaders.get(t);if(t._loadedComponent)return N(t._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(t);let i=ri(t.loadComponent()).pipe(U(oy),xe(o=>{this.onLoadEndListener&&this.onLoadEndListener(t),t._loadedComponent=o}),rt(()=>{this.componentLoaders.delete(t)})),r=new Gi(i,()=>new B).pipe(zi());return this.componentLoaders.set(t,r),r}loadChildren(t,i){if(this.childrenLoaders.get(i))return this.childrenLoaders.get(i);if(i._loadedRoutes)return N({routes:i._loadedRoutes,injector:i._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(i);let o=OT(i,this.compiler,t,this.onLoadEndListener).pipe(rt(()=>{this.childrenLoaders.delete(i)})),s=new Gi(o,()=>new B).pipe(zi());return this.childrenLoaders.set(i,s),s}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function OT(e,n,t,i){return ri(e.loadChildren()).pipe(U(oy),Me(r=>r instanceof lo||Array.isArray(r)?N(r):me(n.compileModuleAsync(r))),U(r=>{i&&i(e);let o,s,a=!1;return Array.isArray(r)?(s=r,a=!0):(o=r.create(t).injector,s=o.get(pl,[],{optional:!0,self:!0}).flat()),{routes:s.map(Cf),injector:o}}))}function kT(e){return e&&typeof e=="object"&&"default"in e}function oy(e){return kT(e)?e.default:e}var Ef=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:()=>S(PT),providedIn:"root"})}}return e})(),PT=(()=>{class e{shouldProcessUrl(t){return!0}extract(t){return t}merge(t,i){return t}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),sy=new O(""),ay=new O("");function RT(e,n,t){let i=e.get(ay),r=e.get(W);return e.get(F).runOutsideAngular(()=>{if(!r.startViewTransition||i.skipNextTransition)return i.skipNextTransition=!1,new Promise(h=>setTimeout(h));let o,s=new Promise(h=>{o=h}),a=r.startViewTransition(()=>(o(),NT(e))),{onViewTransitionCreated:c}=i;return c&&Ht(e,()=>c({transition:a,from:n,to:t})),s})}function NT(e){return new Promise(n=>{rc(n,{injector:e})})}var If=(()=>{class e{get hasRequestedNavigation(){return this.navigationId!==0}constructor(){this.currentNavigation=null,this.currentTransition=null,this.lastSuccessfulNavigation=null,this.events=new B,this.transitionAbortSubject=new B,this.configLoader=S(Df),this.environmentInjector=S(Ze),this.urlSerializer=S(is),this.rootContexts=S(rs),this.location=S(dn),this.inputBindingEnabled=S(gl,{optional:!0})!==null,this.titleStrategy=S(ry),this.options=S(as,{optional:!0})||{},this.paramsInheritanceStrategy=this.options.paramsInheritanceStrategy||"emptyOnly",this.urlHandlingStrategy=S(Ef),this.createViewTransition=S(sy,{optional:!0}),this.navigationId=0,this.afterPreactivation=()=>N(void 0),this.rootComponentType=null;let t=r=>this.events.next(new tf(r)),i=r=>this.events.next(new nf(r));this.configLoader.onLoadEndListener=i,this.configLoader.onLoadStartListener=t}complete(){this.transitions?.complete()}handleNavigationRequest(t){let i=++this.navigationId;this.transitions?.next(ae(E(E({},this.transitions.value),t),{id:i}))}setupNavigations(t,i,r){return this.transitions=new Ce({id:0,currentUrlTree:i,currentRawUrl:i,extractedUrl:this.urlHandlingStrategy.extract(i),urlAfterRedirects:this.urlHandlingStrategy.extract(i),rawUrl:i,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:Wo,restoredState:null,currentSnapshot:r.snapshot,targetSnapshot:null,currentRouterState:r,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.transitions.pipe(be(o=>o.id!==0),U(o=>ae(E({},o),{extractedUrl:this.urlHandlingStrategy.extract(o.rawUrl)})),$e(o=>{let s=!1,a=!1;return N(o).pipe($e(c=>{if(this.navigationId>o.id)return this.cancelNavigationTransition(o,"",St.SupersededByNewNavigation),it;this.currentTransition=o,this.currentNavigation={id:c.id,initialUrl:c.rawUrl,extractedUrl:c.extractedUrl,trigger:c.source,extras:c.extras,previousNavigation:this.lastSuccessfulNavigation?ae(E({},this.lastSuccessfulNavigation),{previousNavigation:null}):null};let h=!t.navigated||this.isUpdatingInternalState()||this.isUpdatedBrowserUrl(),f=c.extras.onSameUrlNavigation??t.onSameUrlNavigation;if(!h&&f!=="reload"){let p="";return this.events.next(new ni(c.id,this.urlSerializer.serialize(c.rawUrl),p,sl.IgnoredSameUrlNavigation)),c.resolve(null),it}if(this.urlHandlingStrategy.shouldProcessUrl(c.rawUrl))return N(c).pipe($e(p=>{let b=this.transitions?.getValue();return this.events.next(new Pr(p.id,this.urlSerializer.serialize(p.extractedUrl),p.source,p.restoredState)),b!==this.transitions?.getValue()?it:Promise.resolve(p)}),ET(this.environmentInjector,this.configLoader,this.rootComponentType,t.config,this.urlSerializer,this.paramsInheritanceStrategy),xe(p=>{o.targetSnapshot=p.targetSnapshot,o.urlAfterRedirects=p.urlAfterRedirects,this.currentNavigation=ae(E({},this.currentNavigation),{finalUrl:p.urlAfterRedirects});let b=new al(p.id,this.urlSerializer.serialize(p.extractedUrl),this.urlSerializer.serialize(p.urlAfterRedirects),p.targetSnapshot);this.events.next(b)}));if(h&&this.urlHandlingStrategy.shouldProcessUrl(c.currentRawUrl)){let{id:p,extractedUrl:b,source:_,restoredState:x,extras:M}=c,k=new Pr(p,this.urlSerializer.serialize(b),_,x);this.events.next(k);let V=q_(this.rootComponentType).snapshot;return this.currentTransition=o=ae(E({},c),{targetSnapshot:V,urlAfterRedirects:b,extras:ae(E({},M),{skipLocationChange:!1,replaceUrl:!1})}),this.currentNavigation.finalUrl=b,N(o)}else{let p="";return this.events.next(new ni(c.id,this.urlSerializer.serialize(c.extractedUrl),p,sl.IgnoredByUrlHandlingStrategy)),c.resolve(null),it}}),xe(c=>{let h=new Kh(c.id,this.urlSerializer.serialize(c.extractedUrl),this.urlSerializer.serialize(c.urlAfterRedirects),c.targetSnapshot);this.events.next(h)}),U(c=>(this.currentTransition=o=ae(E({},c),{guards:H1(c.targetSnapshot,c.currentSnapshot,this.rootContexts)}),o)),J1(this.environmentInjector,c=>this.events.next(c)),xe(c=>{if(o.guardsResult=c.guardsResult,kr(c.guardsResult))throw K_(this.urlSerializer,c.guardsResult);let h=new Xh(c.id,this.urlSerializer.serialize(c.extractedUrl),this.urlSerializer.serialize(c.urlAfterRedirects),c.targetSnapshot,!!c.guardsResult);this.events.next(h)}),be(c=>c.guardsResult?!0:(this.cancelNavigationTransition(c,"",St.GuardRejected),!1)),Gh(c=>{if(c.guards.canActivateChecks.length)return N(c).pipe(xe(h=>{let f=new Jh(h.id,this.urlSerializer.serialize(h.extractedUrl),this.urlSerializer.serialize(h.urlAfterRedirects),h.targetSnapshot);this.events.next(f)}),$e(h=>{let f=!1;return N(h).pipe(IT(this.paramsInheritanceStrategy,this.environmentInjector),xe({next:()=>f=!0,complete:()=>{f||this.cancelNavigationTransition(h,"",St.NoDataFromResolver)}}))}),xe(h=>{let f=new ef(h.id,this.urlSerializer.serialize(h.extractedUrl),this.urlSerializer.serialize(h.urlAfterRedirects),h.targetSnapshot);this.events.next(f)}))}),Gh(c=>{let h=f=>{let p=[];f.routeConfig?.loadComponent&&!f.routeConfig._loadedComponent&&p.push(this.configLoader.loadComponent(f.routeConfig).pipe(xe(b=>{f.component=b}),U(()=>{})));for(let b of f.children)p.push(...h(b));return p};return di(h(c.targetSnapshot.root)).pipe(Un(null),Ue(1))}),Gh(()=>this.afterPreactivation()),$e(()=>{let{currentSnapshot:c,targetSnapshot:h}=o,f=this.createViewTransition?.(this.environmentInjector,c.root,h.root);return f?me(f).pipe(U(()=>o)):N(o)}),U(c=>{let h=N1(t.routeReuseStrategy,c.targetSnapshot,c.currentRouterState);return this.currentTransition=o=ae(E({},c),{targetRouterState:h}),this.currentNavigation.targetRouterState=h,o}),xe(()=>{this.events.next(new Ko)}),$1(this.rootContexts,t.routeReuseStrategy,c=>this.events.next(c),this.inputBindingEnabled),Ue(1),xe({next:c=>{s=!0,this.lastSuccessfulNavigation=this.currentNavigation,this.events.next(new Yt(c.id,this.urlSerializer.serialize(c.extractedUrl),this.urlSerializer.serialize(c.urlAfterRedirects))),this.titleStrategy?.updateTitle(c.targetRouterState.snapshot),c.resolve(!0)},complete:()=>{s=!0}}),ot(this.transitionAbortSubject.pipe(xe(c=>{throw c}))),rt(()=>{!s&&!a&&this.cancelNavigationTransition(o,"",St.SupersededByNewNavigation),this.currentTransition?.id===o.id&&(this.currentNavigation=null,this.currentTransition=null)}),ft(c=>{if(a=!0,J_(c))this.events.next(new ti(o.id,this.urlSerializer.serialize(o.extractedUrl),c.message,c.cancellationCode)),V1(c)?this.events.next(new Xo(c.url)):o.resolve(!1);else{this.events.next(new Zo(o.id,this.urlSerializer.serialize(o.extractedUrl),c,o.targetSnapshot??void 0));try{o.resolve(t.errorHandler(c))}catch(h){this.options.resolveNavigationPromiseOnError?o.resolve(!1):o.reject(h)}}return it}))}))}cancelNavigationTransition(t,i,r){let o=new ti(t.id,this.urlSerializer.serialize(t.extractedUrl),i,r);this.events.next(o),t.resolve(!1)}isUpdatingInternalState(){return this.currentTransition?.extractedUrl.toString()!==this.currentTransition?.currentUrlTree.toString()}isUpdatedBrowserUrl(){return this.urlHandlingStrategy.extract(this.urlSerializer.parse(this.location.path(!0))).toString()!==this.currentTransition?.extractedUrl.toString()&&!this.currentTransition?.extras.skipLocationChange}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function FT(e){return e!==Wo}var LT=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:()=>S(VT),providedIn:"root"})}}return e})(),_f=class{shouldDetach(n){return!1}store(n,t){}shouldAttach(n){return!1}retrieve(n){return null}shouldReuseRoute(n,t){return n.routeConfig===t.routeConfig}},VT=(()=>{class e extends _f{static{this.\u0275fac=(()=>{let t;return function(r){return(t||(t=bn(e)))(r||e)}})()}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),cy=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:()=>S(jT),providedIn:"root"})}}return e})(),jT=(()=>{class e extends cy{constructor(){super(...arguments),this.location=S(dn),this.urlSerializer=S(is),this.options=S(as,{optional:!0})||{},this.canceledNavigationResolution=this.options.canceledNavigationResolution||"replace",this.urlHandlingStrategy=S(Ef),this.urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred",this.currentUrlTree=new ei,this.rawUrlTree=this.currentUrlTree,this.currentPageId=0,this.lastSuccessfulId=-1,this.routerState=q_(null),this.stateMemento=this.createStateMemento()}getCurrentUrlTree(){return this.currentUrlTree}getRawUrlTree(){return this.rawUrlTree}restoredState(){return this.location.getState()}get browserPageId(){return this.canceledNavigationResolution!=="computed"?this.currentPageId:this.restoredState()?.\u0275routerPageId??this.currentPageId}getRouterState(){return this.routerState}createStateMemento(){return{rawUrlTree:this.rawUrlTree,currentUrlTree:this.currentUrlTree,routerState:this.routerState}}registerNonRouterCurrentEntryChangeListener(t){return this.location.subscribe(i=>{i.type==="popstate"&&t(i.url,i.state)})}handleRouterEvent(t,i){if(t instanceof Pr)this.stateMemento=this.createStateMemento();else if(t instanceof ni)this.rawUrlTree=i.initialUrl;else if(t instanceof al){if(this.urlUpdateStrategy==="eager"&&!i.extras.skipLocationChange){let r=this.urlHandlingStrategy.merge(i.finalUrl,i.initialUrl);this.setBrowserUrl(r,i)}}else t instanceof Ko?(this.currentUrlTree=i.finalUrl,this.rawUrlTree=this.urlHandlingStrategy.merge(i.finalUrl,i.initialUrl),this.routerState=i.targetRouterState,this.urlUpdateStrategy==="deferred"&&(i.extras.skipLocationChange||this.setBrowserUrl(this.rawUrlTree,i))):t instanceof ti&&(t.code===St.GuardRejected||t.code===St.NoDataFromResolver)?this.restoreHistory(i):t instanceof Zo?this.restoreHistory(i,!0):t instanceof Yt&&(this.lastSuccessfulId=t.id,this.currentPageId=this.browserPageId)}setBrowserUrl(t,i){let r=this.urlSerializer.serialize(t);if(this.location.isCurrentPathEqualTo(r)||i.extras.replaceUrl){let o=this.browserPageId,s=E(E({},i.extras.state),this.generateNgRouterState(i.id,o));this.location.replaceState(r,"",s)}else{let o=E(E({},i.extras.state),this.generateNgRouterState(i.id,this.browserPageId+1));this.location.go(r,"",o)}}restoreHistory(t,i=!1){if(this.canceledNavigationResolution==="computed"){let r=this.browserPageId,o=this.currentPageId-r;o!==0?this.location.historyGo(o):this.currentUrlTree===t.finalUrl&&o===0&&(this.resetState(t),this.resetUrlToCurrentUrlTree())}else this.canceledNavigationResolution==="replace"&&(i&&this.resetState(t),this.resetUrlToCurrentUrlTree())}resetState(t){this.routerState=this.stateMemento.routerState,this.currentUrlTree=this.stateMemento.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,t.finalUrl??this.rawUrlTree)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}generateNgRouterState(t,i){return this.canceledNavigationResolution==="computed"?{navigationId:t,\u0275routerPageId:i}:{navigationId:t}}static{this.\u0275fac=(()=>{let t;return function(r){return(t||(t=bn(e)))(r||e)}})()}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),zo=function(e){return e[e.COMPLETE=0]="COMPLETE",e[e.FAILED=1]="FAILED",e[e.REDIRECTING=2]="REDIRECTING",e}(zo||{});function ly(e,n){e.events.pipe(be(t=>t instanceof Yt||t instanceof ti||t instanceof Zo||t instanceof ni),U(t=>t instanceof Yt||t instanceof ni?zo.COMPLETE:(t instanceof ti?t.code===St.Redirect||t.code===St.SupersededByNewNavigation:!1)?zo.REDIRECTING:zo.FAILED),be(t=>t!==zo.REDIRECTING),Ue(1)).subscribe(()=>{n()})}function BT(e){throw e}var UT={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},$T={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"},ut=(()=>{class e{get currentUrlTree(){return this.stateManager.getCurrentUrlTree()}get rawUrlTree(){return this.stateManager.getRawUrlTree()}get events(){return this._events}get routerState(){return this.stateManager.getRouterState()}constructor(){this.disposed=!1,this.isNgZoneEnabled=!1,this.console=S(ac),this.stateManager=S(cy),this.options=S(as,{optional:!0})||{},this.pendingTasks=S(Ei),this.urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred",this.navigationTransitions=S(If),this.urlSerializer=S(is),this.location=S(dn),this.urlHandlingStrategy=S(Ef),this._events=new B,this.errorHandler=this.options.errorHandler||BT,this.navigated=!1,this.routeReuseStrategy=S(LT),this.onSameUrlNavigation=this.options.onSameUrlNavigation||"ignore",this.config=S(pl,{optional:!0})?.flat()??[],this.componentInputBindingEnabled=!!S(gl,{optional:!0}),this.eventsSubscription=new _e,this.isNgZoneEnabled=S(F)instanceof F&&F.isInAngularZone(),this.resetConfig(this.config),this.navigationTransitions.setupNavigations(this,this.currentUrlTree,this.routerState).subscribe({error:t=>{this.console.warn(t)}}),this.subscribeToNavigationEvents()}subscribeToNavigationEvents(){let t=this.navigationTransitions.events.subscribe(i=>{try{let r=this.navigationTransitions.currentTransition,o=this.navigationTransitions.currentNavigation;if(r!==null&&o!==null){if(this.stateManager.handleRouterEvent(i,o),i instanceof ti&&i.code!==St.Redirect&&i.code!==St.SupersededByNewNavigation)this.navigated=!0;else if(i instanceof Yt)this.navigated=!0;else if(i instanceof Xo){let s=this.urlHandlingStrategy.merge(i.url,r.currentRawUrl),a={info:r.extras.info,skipLocationChange:r.extras.skipLocationChange,replaceUrl:this.urlUpdateStrategy==="eager"||FT(r.source)};this.scheduleNavigation(s,Wo,null,a,{resolve:r.resolve,reject:r.reject,promise:r.promise})}}zT(i)&&this._events.next(i)}catch(r){this.navigationTransitions.transitionAbortSubject.next(r)}});this.eventsSubscription.add(t)}resetRootComponentType(t){this.routerState.root.component=t,this.navigationTransitions.rootComponentType=t}initialNavigation(){this.setUpLocationChangeListener(),this.navigationTransitions.hasRequestedNavigation||this.navigateToSyncWithBrowser(this.location.path(!0),Wo,this.stateManager.restoredState())}setUpLocationChangeListener(){this.nonRouterCurrentEntryChangeSubscription??=this.stateManager.registerNonRouterCurrentEntryChangeListener((t,i)=>{setTimeout(()=>{this.navigateToSyncWithBrowser(t,"popstate",i)},0)})}navigateToSyncWithBrowser(t,i,r){let o={replaceUrl:!0},s=r?.navigationId?r:null;if(r){let c=E({},r);delete c.navigationId,delete c.\u0275routerPageId,Object.keys(c).length!==0&&(o.state=c)}let a=this.parseUrl(t);this.scheduleNavigation(a,i,s,o)}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.navigationTransitions.currentNavigation}get lastSuccessfulNavigation(){return this.navigationTransitions.lastSuccessfulNavigation}resetConfig(t){this.config=t.map(Cf),this.navigated=!1}ngOnDestroy(){this.dispose()}dispose(){this.navigationTransitions.complete(),this.nonRouterCurrentEntryChangeSubscription&&(this.nonRouterCurrentEntryChangeSubscription.unsubscribe(),this.nonRouterCurrentEntryChangeSubscription=void 0),this.disposed=!0,this.eventsSubscription.unsubscribe()}createUrlTree(t,i={}){let{relativeTo:r,queryParams:o,fragment:s,queryParamsHandling:a,preserveFragment:c}=i,h=c?this.currentUrlTree.fragment:s,f=null;switch(a){case"merge":f=E(E({},this.currentUrlTree.queryParams),o);break;case"preserve":f=this.currentUrlTree.queryParams;break;default:f=o||null}f!==null&&(f=this.removeEmptyProps(f));let p;try{let b=r?r.snapshot:this.routerState.snapshot.root;p=H_(b)}catch{(typeof t[0]!="string"||!t[0].startsWith("/"))&&(t=[]),p=this.currentUrlTree.root}return z_(p,t,f,h??null)}navigateByUrl(t,i={skipLocationChange:!1}){let r=kr(t)?t:this.parseUrl(t),o=this.urlHandlingStrategy.merge(r,this.rawUrlTree);return this.scheduleNavigation(o,Wo,null,i)}navigate(t,i={skipLocationChange:!1}){return HT(t),this.navigateByUrl(this.createUrlTree(t,i),i)}serializeUrl(t){return this.urlSerializer.serialize(t)}parseUrl(t){try{return this.urlSerializer.parse(t)}catch{return this.urlSerializer.parse("/")}}isActive(t,i){let r;if(i===!0?r=E({},UT):i===!1?r=E({},$T):r=i,kr(t))return E_(this.currentUrlTree,t,r);let o=this.parseUrl(t);return E_(this.currentUrlTree,o,r)}removeEmptyProps(t){return Object.entries(t).reduce((i,[r,o])=>(o!=null&&(i[r]=o),i),{})}scheduleNavigation(t,i,r,o,s){if(this.disposed)return Promise.resolve(!1);let a,c,h;s?(a=s.resolve,c=s.reject,h=s.promise):h=new Promise((p,b)=>{a=p,c=b});let f=this.pendingTasks.add();return ly(this,()=>{queueMicrotask(()=>this.pendingTasks.remove(f))}),this.navigationTransitions.handleNavigationRequest({source:i,restoredState:r,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,rawUrl:t,extras:o,resolve:a,reject:c,promise:h,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),h.catch(p=>Promise.reject(p))}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function HT(e){for(let n=0;n{class e{constructor(t,i,r,o,s,a){this.router=t,this.route=i,this.tabIndexAttribute=r,this.renderer=o,this.el=s,this.locationStrategy=a,this.href=null,this.commands=null,this.onChanges=new B,this.preserveFragment=!1,this.skipLocationChange=!1,this.replaceUrl=!1;let c=s.nativeElement.tagName?.toLowerCase();this.isAnchorElement=c==="a"||c==="area",this.isAnchorElement?this.subscription=t.events.subscribe(h=>{h instanceof Yt&&this.updateHref()}):this.setTabIndexIfNotOnNativeEl("0")}setTabIndexIfNotOnNativeEl(t){this.tabIndexAttribute!=null||this.isAnchorElement||this.applyAttributeValue("tabindex",t)}ngOnChanges(t){this.isAnchorElement&&this.updateHref(),this.onChanges.next(this)}set routerLink(t){t!=null?(this.commands=Array.isArray(t)?t:[t],this.setTabIndexIfNotOnNativeEl("0")):(this.commands=null,this.setTabIndexIfNotOnNativeEl(null))}onClick(t,i,r,o,s){let a=this.urlTree;if(a===null||this.isAnchorElement&&(t!==0||i||r||o||s||typeof this.target=="string"&&this.target!="_self"))return!0;let c={skipLocationChange:this.skipLocationChange,replaceUrl:this.replaceUrl,state:this.state,info:this.info};return this.router.navigateByUrl(a,c),!this.isAnchorElement}ngOnDestroy(){this.subscription?.unsubscribe()}updateHref(){let t=this.urlTree;this.href=t!==null&&this.locationStrategy?this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(t)):null;let i=this.href===null?null:n0(this.href,this.el.nativeElement.tagName.toLowerCase(),"href");this.applyAttributeValue("href",i)}applyAttributeValue(t,i){let r=this.renderer,o=this.el.nativeElement;i!==null?r.setAttribute(o,t,i):r.removeAttribute(o,t)}get urlTree(){return this.commands===null?null:this.router.createUrlTree(this.commands,{relativeTo:this.relativeTo!==void 0?this.relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,queryParamsHandling:this.queryParamsHandling,preserveFragment:this.preserveFragment})}static{this.\u0275fac=function(i){return new(i||e)(w(ut),w(Fn),pr("tabindex"),w(Zn),w(re),w(kn))}}static{this.\u0275dir=ce({type:e,selectors:[["","routerLink",""]],hostVars:1,hostBindings:function(i,r){i&1&&I("click",function(s){return r.onClick(s.button,s.ctrlKey,s.shiftKey,s.altKey,s.metaKey)}),i&2&&le("target",r.target)},inputs:{target:"target",queryParams:"queryParams",fragment:"fragment",queryParamsHandling:"queryParamsHandling",state:"state",info:"info",relativeTo:"relativeTo",preserveFragment:[$.HasDecoratorInputTransform,"preserveFragment","preserveFragment",et],skipLocationChange:[$.HasDecoratorInputTransform,"skipLocationChange","skipLocationChange",et],replaceUrl:[$.HasDecoratorInputTransform,"replaceUrl","replaceUrl",et],routerLink:"routerLink"},standalone:!0,features:[zt,Ke]})}}return e})(),dy=(()=>{class e{get isActive(){return this._isActive}constructor(t,i,r,o,s){this.router=t,this.element=i,this.renderer=r,this.cdr=o,this.link=s,this.classes=[],this._isActive=!1,this.routerLinkActiveOptions={exact:!1},this.isActiveChange=new ne,this.routerEventsSubscription=t.events.subscribe(a=>{a instanceof Yt&&this.update()})}ngAfterContentInit(){N(this.links.changes,N(null)).pipe(Jt()).subscribe(t=>{this.update(),this.subscribeToEachLinkOnChanges()})}subscribeToEachLinkOnChanges(){this.linkInputChangesSubscription?.unsubscribe();let t=[...this.links.toArray(),this.link].filter(i=>!!i).map(i=>i.onChanges);this.linkInputChangesSubscription=me(t).pipe(Jt()).subscribe(i=>{this._isActive!==this.isLinkActive(this.router)(i)&&this.update()})}set routerLinkActive(t){let i=Array.isArray(t)?t:t.split(" ");this.classes=i.filter(r=>!!r)}ngOnChanges(t){this.update()}ngOnDestroy(){this.routerEventsSubscription.unsubscribe(),this.linkInputChangesSubscription?.unsubscribe()}update(){!this.links||!this.router.navigated||queueMicrotask(()=>{let t=this.hasActiveLinks();this.classes.forEach(i=>{t?this.renderer.addClass(this.element.nativeElement,i):this.renderer.removeClass(this.element.nativeElement,i)}),t&&this.ariaCurrentWhenActive!==void 0?this.renderer.setAttribute(this.element.nativeElement,"aria-current",this.ariaCurrentWhenActive.toString()):this.renderer.removeAttribute(this.element.nativeElement,"aria-current"),this._isActive!==t&&(this._isActive=t,this.cdr.markForCheck(),this.isActiveChange.emit(t))})}isLinkActive(t){let i=GT(this.routerLinkActiveOptions)?this.routerLinkActiveOptions:this.routerLinkActiveOptions.exact||!1;return r=>{let o=r.urlTree;return o?t.isActive(o,i):!1}}hasActiveLinks(){let t=this.isLinkActive(this.router);return this.link&&t(this.link)||this.links.some(t)}static{this.\u0275fac=function(i){return new(i||e)(w(ut),w(re),w(Zn),w(Ve),w(ii,8))}}static{this.\u0275dir=ce({type:e,selectors:[["","routerLinkActive",""]],contentQueries:function(i,r,o){if(i&1&&K0(o,ii,5),i&2){let s;We(s=qe())&&(r.links=s)}},inputs:{routerLinkActiveOptions:"routerLinkActiveOptions",ariaCurrentWhenActive:"ariaCurrentWhenActive",routerLinkActive:"routerLinkActive"},outputs:{isActiveChange:"isActiveChange"},exportAs:["routerLinkActive"],standalone:!0,features:[Ke]})}}return e})();function GT(e){return!!e.paths}var ml=class{};var WT=(()=>{class e{constructor(t,i,r,o,s){this.router=t,this.injector=r,this.preloadingStrategy=o,this.loader=s}setUpPreloading(){this.subscription=this.router.events.pipe(be(t=>t instanceof Yt),mn(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}processRoutes(t,i){let r=[];for(let o of i){o.providers&&!o._injector&&(o._injector=oc(o.providers,t,`Route: ${o.path}`));let s=o._injector??t,a=o._loadedInjector??s;(o.loadChildren&&!o._loadedRoutes&&o.canLoad===void 0||o.loadComponent&&!o._loadedComponent)&&r.push(this.preloadConfig(s,o)),(o.children||o._loadedRoutes)&&r.push(this.processRoutes(a,o.children??o._loadedRoutes))}return me(r).pipe(Jt())}preloadConfig(t,i){return this.preloadingStrategy.preload(i,()=>{let r;i.loadChildren&&i.canLoad===void 0?r=this.loader.loadChildren(t,i):r=N(null);let o=r.pipe(Me(s=>s===null?N(void 0):(i._loadedRoutes=s.routes,i._loadedInjector=s.injector,this.processRoutes(s.injector??t,s.routes))));if(i.loadComponent&&!i._loadedComponent){let s=this.loader.loadComponent(i);return me([o,s]).pipe(Jt())}else return o})}static{this.\u0275fac=function(i){return new(i||e)(v(ut),v(hc),v(Ze),v(ml),v(Df))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),uy=new O(""),qT=(()=>{class e{constructor(t,i,r,o,s={}){this.urlSerializer=t,this.transitions=i,this.viewportScroller=r,this.zone=o,this.options=s,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},this.environmentInjector=S(Ze),s.scrollPositionRestoration||="disabled",s.anchorScrolling||="disabled"}init(){this.options.scrollPositionRestoration!=="disabled"&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.transitions.events.subscribe(t=>{t instanceof Pr?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=t.navigationTrigger,this.restoredId=t.restoredState?t.restoredState.navigationId:0):t instanceof Yt?(this.lastId=t.id,this.scheduleScrollEvent(t,this.urlSerializer.parse(t.urlAfterRedirects).fragment)):t instanceof ni&&t.code===sl.IgnoredSameUrlNavigation&&(this.lastSource=void 0,this.restoredId=0,this.scheduleScrollEvent(t,this.urlSerializer.parse(t.url).fragment))})}consumeScrollEvents(){return this.transitions.events.subscribe(t=>{t instanceof cl&&(t.position?this.options.scrollPositionRestoration==="top"?this.viewportScroller.scrollToPosition([0,0]):this.options.scrollPositionRestoration==="enabled"&&this.viewportScroller.scrollToPosition(t.position):t.anchor&&this.options.anchorScrolling==="enabled"?this.viewportScroller.scrollToAnchor(t.anchor):this.options.scrollPositionRestoration!=="disabled"&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(t,i){this.zone.runOutsideAngular(()=>tt(this,null,function*(){yield new Promise(r=>{setTimeout(()=>{r()}),rc(()=>{r()},{injector:this.environmentInjector})}),this.zone.run(()=>{this.transitions.events.next(new cl(t,this.lastSource==="popstate"?this.store[this.restoredId]:null,i))})}))}ngOnDestroy(){this.routerEventsSubscription?.unsubscribe(),this.scrollEventsSubscription?.unsubscribe()}static{this.\u0275fac=function(i){m0()}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac})}}return e})();function YT(e){return e.routerState.root}function cs(e,n){return{\u0275kind:e,\u0275providers:n}}function QT(){let e=S(Ae);return n=>{let t=e.get(Sn);if(n!==t.components[0])return;let i=e.get(ut),r=e.get(hy);e.get(Sf)===1&&i.initialNavigation(),e.get(fy,null,te.Optional)?.setUpPreloading(),e.get(uy,null,te.Optional)?.init(),i.resetRootComponentType(t.componentTypes[0]),r.closed||(r.next(),r.complete(),r.unsubscribe())}}var hy=new O("",{factory:()=>new B}),Sf=new O("",{providedIn:"root",factory:()=>1});function ZT(){return cs(2,[{provide:Sf,useValue:0},{provide:dc,multi:!0,deps:[Ae],useFactory:n=>{let t=n.get(vv,Promise.resolve());return()=>t.then(()=>new Promise(i=>{let r=n.get(ut),o=n.get(hy);ly(r,()=>{i(!0)}),n.get(If).afterPreactivation=()=>(i(!0),o.closed?N(void 0):o),r.initialNavigation()}))}}])}function KT(){return cs(3,[{provide:dc,multi:!0,useFactory:()=>{let n=S(ut);return()=>{n.setUpLocationChangeListener()}}},{provide:Sf,useValue:2}])}var fy=new O("");function XT(e){return cs(0,[{provide:fy,useExisting:WT},{provide:ml,useExisting:e}])}function JT(){return cs(8,[T_,{provide:gl,useExisting:T_}])}function eA(e){let n=[{provide:sy,useValue:RT},{provide:ay,useValue:E({skipNextTransition:!!e?.skipInitialTransition},e)}];return cs(9,n)}var O_=new O("ROUTER_FORROOT_GUARD"),tA=[dn,{provide:is,useClass:Yo},ut,rs,{provide:Fn,useFactory:YT,deps:[ut]},Df,[]],ls=(()=>{class e{constructor(t){}static forRoot(t,i){return{ngModule:e,providers:[tA,[],{provide:pl,multi:!0,useValue:t},{provide:O_,useFactory:oA,deps:[[ut,new ja,new fu]]},{provide:as,useValue:i||{}},i?.useHash?iA():rA(),nA(),i?.preloadingStrategy?XT(i.preloadingStrategy).\u0275providers:[],i?.initialNavigation?sA(i):[],i?.bindToComponentInputs?JT().\u0275providers:[],i?.enableViewTransitions?eA().\u0275providers:[],aA()]}}static forChild(t){return{ngModule:e,providers:[{provide:pl,multi:!0,useValue:t}]}}static{this.\u0275fac=function(i){return new(i||e)(v(O_,8))}}static{this.\u0275mod=G({type:e})}static{this.\u0275inj=z({})}}return e})();function nA(){return{provide:uy,useFactory:()=>{let e=S(Sv),n=S(F),t=S(as),i=S(If),r=S(is);return t.scrollOffset&&e.setOffset(t.scrollOffset),new qT(r,i,e,n,t)}}}function iA(){return{provide:kn,useClass:yv}}function rA(){return{provide:kn,useClass:gh}}function oA(e){return"guarded"}function sA(e){return[e.initialNavigation==="disabled"?KT().\u0275providers:[],e.initialNavigation==="enabledBlocking"?ZT().\u0275providers:[]]}var k_=new O("");function aA(){return[{provide:k_,useFactory:QT},{provide:uc,multi:!0,useExisting:k_}]}var pn=(()=>{class e{constructor(){this.showFooter=!0,this.socialLinks={"Py-Learn":{website:"https://pykara.ai",linkedin:"https://www.linkedin.com/in/pykara-technologies",youtube:"https://www.youtube.com/@PykaraTechnologies",facebook:"https://www.facebook.com/people/Pykara/100087653675803",instagram:"https://www.instagram.com/pykaratechnologie"},"MJ-Learn":{website:"https://www.majema.se",linkedin:"https://www.linkedin.com/company/majemaforlaget",youtube:"https://www.youtube.com/@majemaforlaget3014",facebook:"https://www.facebook.com/majemaforlaget",instagram:"https://www.instagram.com/majemaforlaget"}};let t=window.location.href,i="Py-Learn",r="assets/images/pykara-logo.png";t.includes("pykara-py-learn")?(i="Py-Learn",r="assets/images/pykara-logo.png",this.showFooter=!0):t.includes("majemaai-mj-learn")&&(i="MJ-Learn",r="assets/images/majema-logo.png",this.showFooter=!0),this.nameSubject=new Ce(i),this.logoSubject=new Ce(r),this.name$=this.nameSubject.asObservable(),this.logo$=this.logoSubject.asObservable()}get name(){return this.nameSubject.value}get logo(){return this.logoSubject.value}setName(t){this.nameSubject.next(t)}setLogo(t){this.logoSubject.next(t)}get socialLinksCurrent(){return this.socialLinks[this.name]}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();var cA=[[["","header-right",""]]],lA=["[header-right]"];function dA(e,n){if(e&1&&(d(0,"div",8)(1,"h1"),u(2),l()()),e&2){let t=C();m(2),Ie(t.title)}}function uA(e,n){e&1&&(d(0,"div",9)(1,"a",10),g(2,"img",11),l()())}var _l=(()=>{class e{constructor(t){this.brand=t,this.title=null,this.showHome=!0}static{this.\u0275fac=function(i){return new(i||e)(w(pn))}}static{this.\u0275cmp=pe({type:e,selectors:[["app-header"]],inputs:{title:"title",showHome:"showHome",logoSrc:"logoSrc",productName:"productName"},standalone:!0,features:[Fe],ngContentSelectors:lA,decls:10,vars:5,consts:[[1,"header-container"],[1,"logo"],["routerLink","/home",1,"brand-link"],[3,"src","alt"],[1,"product-name"],["class","header-title",4,"ngIf"],[1,"toggle-buttons-container","modern-toggle"],["class","home-btn",4,"ngIf"],[1,"header-title"],[1,"home-btn"],["routerLink","/home"],["src","assets/images/home.png","alt","Home",1,"home-icon"]],template:function(i,r){i&1&&(Dn(cA),d(0,"div",0)(1,"div",1)(2,"a",2),g(3,"img",3),l(),d(4,"span",4),u(5),l()(),R(6,dA,3,1,"div",5),d(7,"div",6),En(8),l(),R(9,uA,3,0,"div",7),l()),i&2&&(m(3),y("src",r.logoSrc||r.brand.logo,ee)("alt",(r.productName||r.brand.name)+" Logo"),m(2),Ie(r.productName||r.brand.name),m(),y("ngIf",r.title),m(3),y("ngIf",r.showHome))},dependencies:[_t,vt,ls,ii],styles:["[_nghost-%COMP%]{display:block}.header-container[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem;justify-content:space-between;padding:0 2vw;background-color:#009688;box-shadow:0 4px 8px #0003;width:100%;position:sticky;top:0;z-index:1000;overflow-x:clip}.header-container[_ngcontent-%COMP%] .logo[_ngcontent-%COMP%], .header-container[_ngcontent-%COMP%] .home-btn[_ngcontent-%COMP%], .header-container[_ngcontent-%COMP%] .toggle-buttons-container[_ngcontent-%COMP%]{flex:0 0 auto}.header-title[_ngcontent-%COMP%]{flex:1 1 auto;min-width:0;text-align:center}.header-title[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-size:3vw;color:#fff;margin:0;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.header-container[_ngcontent-%COMP%] .logo[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{max-width:5vw;height:auto;background:#fff;border-radius:1vw;margin:.5vw}.home-btn[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:5vw;transition:transform .2s ease}.home-btn[_ngcontent-%COMP%] img[_ngcontent-%COMP%]:hover{transform:scale(1.08)}.logo[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1vw}.brand-link[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.6vw;text-decoration:none}.product-name[_ngcontent-%COMP%]{color:#fff;font-size:2vw;letter-spacing:.5px;font-family:Amonk_Outline;line-height:1}.brand-link[_ngcontent-%COMP%]:hover .product-name[_ngcontent-%COMP%]{opacity:.9}.header-title[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-family:Super Cartoon,cursive}"]})}}return e})();function hA(){return location.hostname.endsWith("hf.space")?"https://pykara-py-learn-backend.hf.space/rag":location.hostname==="localhost"||location.hostname==="127.0.0.1"?"http://localhost:5000/rag":"/rag"}var py=(()=>{class e{constructor(t){this.http=t,this.baseUrl=hA(),this.defaultModel="gpt-4o-mini"}getGrade(){let t=(localStorage.getItem("gradeLevel")||"highergrade").toLowerCase();return t==="lowergrade"||t==="midgrade"||t==="highergrade"?t:"highergrade"}toDbLevel(t){return t==="lowergrade"?"low":t==="midgrade"?"mid":"high"}makeHeaders(t){return new Pn({"Content-Type":"application/json","X-User":t})}generateOpenQuestions(t){let i=this.getGrade(),r=this.makeHeaders(i),o={qtype:"OPEN",n:t.n??5,topic:t.topic??"",model:this.defaultModel,db_level:this.toDbLevel(i)};return this.http.post(`${this.baseUrl}/generate-questions`,o,{headers:r})}explainGrammar(t){let i=this.getGrade(),r=this.makeHeaders(i),o=typeof t=="string"?{question:t}:E({},t);return"db_level"in o||(o.db_level=this.toDbLevel(i)),"model"in o||(o.model=this.defaultModel),this.http.post(`${this.baseUrl}/explain-grammar`,o,{headers:r})}suggestFollowups(t){let i=this.getGrade(),r=this.makeHeaders(i),o={last_question:t.last_question,last_answer:t.last_answer,n:t.n??5,model:this.defaultModel,db_level:this.toDbLevel(i),source_ids:t.source_ids??[]};return this.http.post(`${this.baseUrl}/suggest-followups`,o,{headers:r})}synthesizeAudio(t,i="en",r){let o=this.getGrade(),s=this.makeHeaders(o),a={text:t,language:i,db_level:this.toDbLevel(o),model:this.defaultModel};return r?.length&&(a.reference_files=r),this.http.post(`${this.baseUrl}/synthesize-audio`,a,{headers:s})}synthesizeVideo(t,i="en"){let r=this.getGrade(),o=this.makeHeaders(r),s={text:t,language:i,db_level:this.toDbLevel(r),model:this.defaultModel};return this.http.post(`${this.baseUrl}/synthesize-video`,s,{headers:o})}generateVideoFromText(t,i="en"){let r=this.getGrade(),o=this.makeHeaders(r);return this.http.post(`${this.baseUrl}/generate-video-from-text`,{text:t,language:i,db_level:this.toDbLevel(r),model:this.defaultModel},{headers:o})}punctuate(t){let i=this.getGrade(),r=this.makeHeaders(i);return this.http.post(`${this.baseUrl}/punctuate`,{text:t},{headers:r})}static{this.\u0275fac=function(i){return new(i||e)(v(Rn))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();var pA=["waveformCanvas"],mA=["chatContent"];function gA(e,n){if(e&1&&(d(0,"div",37)(1,"div",38),g(2,"img",39),l(),d(3,"div",40),u(4),d(5,"div",41),u(6),l()()()),e&2){let t=C().$implicit;m(4),Se(" ",t.text," "),m(2),Ie(t.timestamp)}}function vA(e,n){if(e&1){let t=H();d(0,"button",60),I("click",function(){let r=T(t).$implicit,o=C(4);return A(o.selectHardcodedQuestion(r))}),u(1),l()}if(e&2){let t=n.$implicit;m(),Se(" ",t," ")}}function _A(e,n){if(e&1&&(d(0,"div",57)(1,"div",58),u(2,"Follow-up suggestions"),l(),R(3,vA,2,1,"button",59),l()),e&2){let t=C(2).$implicit;m(3),y("ngForOf",t.suggestions)}}function yA(e,n){e&1&&(Re(0),d(1,"span",61),u(2,"\u2713"),l(),Ne())}function bA(e,n){e&1&&g(0,"img",62)}function wA(e,n){if(e&1){let t=H();d(0,"button",63),I("click",function(){T(t);let r=C(2).index,o=C();return A(o.playServerAudioForMessage(r))}),g(1,"img",64),l()}}function CA(e,n){if(e&1){let t=H();d(0,"button",65),I("click",function(){T(t);let r=C(3);return A(r.stopReadAloud())}),g(1,"img",66),l()}}function xA(e,n){e&1&&(Re(0),g(1,"img",68),Ne())}function DA(e,n){e&1&&g(0,"img",69)}function EA(e,n){if(e&1){let t=H();d(0,"button",67),I("click",function(){T(t);let r=C(2).index,o=C();return A(o.synthesizeAudioAndPlay(r))}),R(1,xA,2,0,"ng-container",48)(2,DA,1,0,"ng-template",null,2,In),l()}if(e&2){let t=Gt(3),i=C(2).$implicit;y("disabled",i.isSynthesizing),m(),y("ngIf",!i.isSynthesizing)("ngIfElse",t)}}function IA(e,n){if(e&1){let t=H();d(0,"button",70),I("click",function(){T(t);let r=C(2).index,o=C();return A(o.chatId=="2"?o.generateTutorVideoFromText(r):o.synthesizeVideoAndPlay(r))}),g(1,"img",71),l()}}function SA(e,n){e&1&&(d(0,"button",72),g(1,"img",73),l())}function MA(e,n){if(e&1){let t=H();d(0,"button",74),I("click",function(){T(t);let r=C(2).index,o=C();return A(o.toggleMessageVideo(r))}),g(1,"img",75),l()}if(e&2){let t=C(2).index,i=C();he("active",i.isVideoEnabledIndex[t]),m(),y("src",i.isVideoEnabledIndex[t]?"assets/images/chat/no-video.png":"assets/images/chat/video.png",ee)}}function TA(e,n){if(e&1){let t=H();d(0,"video",76),I("ended",function(){T(t);let r=C(2).index,o=C();return A(o.onMessageVideoEnded(r))}),l()}if(e&2){let t=C(2).$implicit;y("src",t.playingVideoUrl,ee)}}function AA(e,n){if(e&1){let t=H();d(0,"div",42)(1,"div",38),g(2,"img",43),l(),d(3,"div",44),g(4,"div",45),R(5,_A,4,1,"div",46),d(6,"div",41),u(7),d(8,"button",47),I("click",function(){T(t);let r=C(),o=r.$implicit,s=r.index,a=C();return A(a.copyToClipboard(o.text,s))}),R(9,yA,3,0,"ng-container",48)(10,bA,1,0,"ng-template",null,1,In),l(),R(12,wA,2,0,"button",49)(13,CA,2,0,"button",50)(14,EA,4,3,"button",51)(15,IA,2,0,"button",52)(16,SA,2,0,"button",53)(17,MA,2,3,"button",54),l(),d(18,"div",55),R(19,TA,1,1,"video",56),l()()()}if(e&2){let t=Gt(11),i=C(),r=i.$implicit,o=i.index,s=C();m(4),y("innerHTML",s.formatStructuredResponse(r.text),t0),m(),y("ngIf",r.suggestions==null?null:r.suggestions.length),m(2),Se(" ",r.timestamp," "),m(),le("aria-label",s.copySuccessIndex===o?"Copied":"Copy message"),m(),y("ngIf",s.copySuccessIndex===o)("ngIfElse",t),m(3),y("ngIf",r.audioUrl&&s.isReadingIndex!==o),m(),y("ngIf",r.audioUrl&&s.isReadingIndex===o),m(),y("ngIf",!r.audioUrl),m(),y("ngIf",!r.videoUrl&&!r.isVideoSynthesizing),m(),y("ngIf",!r.videoUrl&&r.isVideoSynthesizing),m(),y("ngIf",r.videoUrl),m(2),y("ngIf",s.isVideoEnabledIndex[o]&&r.playingVideoUrl)}}function OA(e,n){if(e&1&&(d(0,"div"),R(1,gA,7,2,"div",35)(2,AA,20,13,"div",36),l()),e&2){let t=n.$implicit;m(),y("ngIf",t.from==="user"),m(),y("ngIf",t.from==="ai")}}function kA(e,n){e&1&&(d(0,"div",77),u(1," Tutor's Response "),g(2,"span")(3,"span")(4,"span"),l())}function PA(e,n){e&1&&(d(0,"div",81),u(1,"Loading\u2026"),l())}function RA(e,n){if(e&1){let t=H();d(0,"button",84),I("mousedown",function(){let r=T(t).$implicit,o=C(4);return A(o.selectHardcodedQuestion(r))}),u(1),l()}if(e&2){let t=n.$implicit,i=C(4);y("disabled",i.isAiResponding),m(),Se(" ",t," ")}}function NA(e,n){if(e&1&&(Re(0),d(1,"div",82),u(2,"Follow-up suggestions"),l(),R(3,RA,2,2,"button",83),Ne()),e&2){let t=C(3);m(3),y("ngForOf",t.currentFollowups)}}function FA(e,n){if(e&1){let t=H();d(0,"button",84),I("mousedown",function(){let r=T(t).$implicit,o=C(5);return A(o.selectHardcodedQuestion(r))}),u(1),l()}if(e&2){let t=n.$implicit,i=C(5);y("disabled",i.isAiResponding),m(),Se(" ",t," ")}}function LA(e,n){if(e&1&&(Re(0),R(1,FA,2,2,"button",83),Ne()),e&2){let t=C(4);m(),y("ngForOf",t.pdfQuestions)}}function VA(e,n){e&1&&(d(0,"div",85),u(1,"No grammar questions available."),l())}function jA(e,n){if(e&1&&(d(0,"div",82),u(1,"Questions from your textbook"),l(),R(2,LA,2,1,"ng-container",48)(3,VA,2,0,"ng-template",null,4,In)),e&2){let t=Gt(4),i=C(3);m(2),y("ngIf",i.pdfQuestions==null?null:i.pdfQuestions.length)("ngIfElse",t)}}function BA(e,n){if(e&1&&(Re(0),R(1,NA,4,1,"ng-container",48)(2,jA,5,2,"ng-template",null,3,In),Ne()),e&2){let t=Gt(3),i=C(2);m(),y("ngIf",i.currentFollowups.length)("ngIfElse",t)}}function UA(e,n){if(e&1&&(d(0,"div",78),R(1,PA,2,0,"div",79)(2,BA,4,2,"ng-container",80),l()),e&2){let t=C();m(),y("ngIf",t.pdfLoading),m(),y("ngIf",!t.pdfLoading)}}function $A(e,n){e&1&&(d(0,"div",101),u(1,"Processing\u2026 please wait"),l())}function HA(e,n){if(e&1&&(d(0,"pre"),u(1),l()),e&2){let t=C(2);m(),Ie(t.popupTranscript)}}function zA(e,n){e&1&&(d(0,"div",102),u(1,"Speak and click Done when finished"),l())}function GA(e,n){if(e&1&&(d(0,"div",103),u(1),l()),e&2){let t=C(2);m(),Ie(t.errorMessage)}}function WA(e,n){if(e&1){let t=H();d(0,"div",86)(1,"div",87)(2,"strong"),u(3,"Microphone"),l(),d(4,"button",88),I("click",function(){T(t);let r=C();return A(r.closeMicrophonePopup())}),u(5,"\u2715"),l()(),d(6,"div",89),g(7,"canvas",90,5),d(9,"div",91)(10,"div",92),g(11,"span",93),d(12,"span"),u(13),l()(),d(14,"div",94),R(15,$A,2,0,"div",95)(16,HA,2,1,"pre",80)(17,zA,2,0,"div",96),l(),R(18,GA,2,1,"div",97),l(),d(19,"div",98)(20,"button",99),I("click",function(){T(t);let r=C();return A(r.stopRecording())}),u(21,"Done"),l(),d(22,"button",99),I("click",function(){T(t);let r=C();return A(r.confirmAndSendTranscript())}),u(23,"Send"),l(),d(24,"button",100),I("click",function(){T(t);let r=C();return A(r.closeMicrophonePopup())}),u(25,"Cancel"),l()()()()}if(e&2){let t=C();m(11),he("recording",t.isRecording),m(2),Ie(t.isRecording?"Recording\u2026":"Ready"),m(2),y("ngIf",t.popupTranscript==="Processing\u2026"),m(),y("ngIf",t.popupTranscript&&t.popupTranscript!=="Processing\u2026"),m(),y("ngIf",!t.popupTranscript),m(),y("ngIf",t.errorMessage),m(2),y("disabled",!t.isRecording),m(2),y("disabled",!t.popupTranscript||t.popupTranscript==="Processing\u2026")}}function qA(e,n){if(e&1){let t=H();d(0,"div",104),I("click",function(){T(t);let r=C();return A(r.closeUserGuide())}),d(1,"div",105),I("click",function(r){return T(t),A(r.stopPropagation())}),d(2,"button",106),I("click",function(){T(t);let r=C();return A(r.closeUserGuide())}),u(3,"\xD7"),l(),d(4,"div",107)(5,"ol",108)(6,"li")(7,"b"),u(8,"Introduction"),l(),g(9,"br"),d(10,"ul",109)(11,"li"),u(12,"The Chat Module is an interactive learning environment designed to assist learners through text and voice-based communication."),l(),d(13,"li"),u(14,"Users can type their question or select from follow-up suggestions, using either the text input or the microphone."),l(),d(15,"li"),u(16,"Predefined questions appear above the input field for quick access."),l(),d(17,"li"),u(18,"This creates an engaging and personalised learning experience similar to interacting with a real tutor."),l()()(),d(19,"li")(20,"b"),u(21,"Starting the Chat"),l(),g(22,"br"),d(23,"ul",109)(24,"li"),u(25,"When learners open the module, they will see a text input box and a microphone icon. They can type a question or activate the microphone to speak."),l(),d(26,"li"),u(27,"While the microphone is active, a listening popup appears with options to mute or stop recording. Once the learner finishes speaking or typing, their question is displayed in the chat area along with a timestamp."),l(),d(28,"li"),u(29,"This simple interface ensures that both typing and speaking interactions are smooth and user-friendly."),l()()(),d(30,"li")(31,"b"),u(32,"Accessing the Syllabus"),l(),g(33,"br"),d(34,"ul",109)(35,"li"),u(36,"Before learners begin, an administrator uploads the syllabus or textbook in digital format."),l(),d(37,"li"),u(38,"The system analyses the document and automatically generates a list of predefined questions based on the uploaded syllabus."),l(),d(39,"li"),u(40,"These predefined questions are displayed above the input field, allowing learners to choose any topic without needing to type."),l(),d(41,"li"),u(42,"When a learner selects a question, the system locates the relevant section from the syllabus and prepares an answer. The response appears instantly in the chat area in a clear and readable format."),l()()(),d(43,"li")(44,"b"),u(45,"Receiving the Response"),l(),g(46,"br"),d(47,"ul",109)(48,"li"),u(49," After a question is sent, the system generates an immediate response that includes: "),d(50,"ul")(51,"li"),u(52,"A text-based explanation"),l(),d(53,"li"),u(54,"An audio narration in the tutor\u2019s real voice"),l(),d(55,"li"),u(56,"A derived video explanation, when applicable"),l()()(),d(57,"li"),u(58,"The response is first produced as text. If the learner chooses to listen, the system plays an audio narration that has been synthetically generated using the real voice of the teacher."),l(),d(59,"li"),u(60,"The voice is not a generic computer voice; it has been trained and modelled on the actual tutor\u2019s speech patterns, ensuring that the tone, pronunciation, and expression closely resemble the teacher\u2019s natural way of speaking."),l(),d(61,"li"),u(62,"Similarly, when a video explanation is requested, the system displays a derived video of the teacher. This video is not a pre-recorded clip or animation, but is generated to resemble the real teacher\u2019s voice and reactions."),l(),d(63,"li"),u(64,"All audio and video responses are created dynamically for each question, providing unique, real-time explanations. Learners can replay or stop the narration at any time, copy text responses, and follow the conversation naturally with the speaking indicator showing when the tutor\u2019s voice is active."),l(),d(65,"li"),u(66,"By default, audio is muted; you can enable it as needed."),l()()(),d(67,"li")(68,"b"),u(69,"Handling Out-of-Syllabus Questions"),l(),g(70,"br"),d(71,"ul",109)(72,"li"),u(73,"If a learner asks a question that is not part of the uploaded syllabus or textbook, the system responds with the message: \u201CThis topic is out of syllabus.\u201D"),l(),d(74,"li"),u(75,"Only administrators can configure whether such questions can be answered using external information sources."),l(),d(76,"li"),u(77,"This ensures that all discussions remain within the approved syllabus unless authorised otherwise."),l()()(),d(78,"li")(79,"b"),u(80,"Follow-Up and Progressive Learning"),l(),g(81,"br"),d(82,"ul",109)(83,"li"),u(84,"After each response, the system displays related or next-level questions below the chat. This feature helps learners progress through topics in a logical sequence."),l(),d(85,"li"),u(86,"A breadcrumb trail is also displayed, showing the topic flow and subtopics covered during the conversation."),l(),d(87,"li"),u(88,"Learners can easily revisit previous points and continue from where they left off."),l()()(),d(89,"li")(90,"b"),u(91,"Audio, Video, and Mode Controls"),l(),g(92,"br"),d(93,"ul",109)(94,"li"),u(95," At the top of the chat interface, four control buttons provide flexibility and accessibility: "),d(96,"ul")(97,"li"),u(98,"Audio Control \u2013 Enable or disable narration."),l(),d(99,"li"),u(100,"Video Control \u2013 Show or hide derived video explanations."),l(),d(101,"li"),u(102,"Syllabus Mode Control \u2013 Keep learning limited to syllabus topics."),l(),d(103,"li"),u(104,"Breadcrumb Control \u2013 Display or hide the topic trail."),l()()(),d(105,"li"),u(106,"Only administrators can modify the syllabus mode to include out-of-syllabus responses."),l()()(),d(107,"li")(108,"b"),u(109,"Interface and Usability"),l(),g(110,"br"),d(111,"ul",109)(112,"li"),u(113,"The chat interface presents a clear, conversational layout between the learner and the tutor. Each message includes a profile icon and timestamp for a natural reading flow."),l(),d(114,"li"),u(115,"Typing indicators appear while the system prepares responses, and a scroll button allows quick access to the most recent messages."),l(),d(116,"li"),u(117,"The design is responsive and adapts to different devices such as desktops, tablets, etc."),l()()(),d(118,"li")(119,"b"),u(120,"Summary"),l(),g(121,"br"),d(122,"ul",109)(123,"li"),u(124,"The Chat Module provides an engaging, syllabus-focused learning experience where learners can type or speak their questions and receive immediate answers through text, real teacher voice, and derived video."),l(),d(125,"li"),u(126,"With predefined questions, real-time explanations, structured progression, and easy-to-use controls, this module offers a complete and intelligent conversational learning environment\u2014all within a single platform."),l(),d(127,"li"),u(128,"Use this feature for summary-guided training."),l()()()()()()()}}function YA(e,n){if(e&1){let t=H();d(0,"video",110),I("ended",function(){T(t);let r=C();return A(r.clearVideoUrl())})("error",function(){T(t);let r=C();return A(r.clearVideoUrl())}),l()}if(e&2){let t=C();y("src",t.videoUrl,ee)}}var Mf=(()=>{class e{constructor(t,i,r,o){if(this.apiService=t,this.cdr=i,this.route=r,this.platformId=o,this.isRecording=!1,this.showMicPopup=!1,this.popupTranscript="",this.errorMessage="",this._recordingFinalBuffer="",this._recordingInterimBuffer="",this.audioContext=null,this.analyser=null,this.dataArray=null,this.mediaStream=null,this.animationFrameId=null,this._recognitionActive=!1,this._restartTimer=null,this._restartAttempts=0,this._maxRestartDelay=1500,this.showQuestions=!1,this.pdfQuestions=[],this.pdfLoading=!1,this.userInput="",this.messages=[],this.isTyping=!1,this.isListening=!1,this.isSpeaking=!1,this.isAudioPaused=!1,this.currentFollowups=[],this.videoUrl="",this.aiResponseInterval=null,this.isAiResponding=!1,this.isVideoEnabledIndex=[],this.serverAudio=null,this.serverAudioMessageIndex=null,this.isReadingIndex=null,this.isVideoPlayingIndex=null,this.copySuccessIndex=null,this.isVoiceEnabled=!1,this.isTutorEnabled=!1,this.isSyllabusEnabled=!0,this.isBreadcrumbEnabled=!1,this.shouldAutoScroll=!0,this.lastQuestion=null,this.lastAnswer=null,this.lastSourceIds=[],this.lastAnswerHasContext=!1,this.chatId=null,this.showUserGuide=!1,!un(this.platformId))return;let s=window.SpeechRecognition??window.webkitSpeechRecognition;if(s){this.recognition=new s,this.recognition.continuous=!0,this.recognition.interimResults=!0,this.recognition.lang="en-US";try{this.recognition.maxAlternatives=1}catch{}this.recognition.onstart=()=>{this._recognitionActive=!0,this._restartAttempts=0},this.recognition.onspeechstart=()=>{this._recognitionActive=!0},this.recognition.onspeechend=()=>{this._recognitionActive=!1},this.recognition.onresult=a=>{if(!this.isRecording)return;let c="",h="";for(let f=a.resultIndex;f{if(a?.error==="not-allowed")this.errorMessage="Microphone access denied",this.isRecording=!1;else{let h=a?.error??"unknown";this.errorMessage=`Error: ${h}`}let c=a?.error;if(this.isRecording&&(c==="no-speech"||c==="aborted"||c==="network")){this._restartTimer&&clearTimeout(this._restartTimer);let h=Math.min(400*(this._restartAttempts+1),this._maxRestartDelay);this._restartTimer=setTimeout(()=>{try{this.recognition&&!this._recognitionActive&&this.recognition.start()}catch{this._restartAttempts++}},h)}else c!=="not-allowed"&&(this._recognitionActive=!1);this.cdr.detectChanges()},this.recognition.onend=()=>{if(this._recognitionActive=!1,this.isRecording&&this.showMicPopup){this._restartTimer&&clearTimeout(this._restartTimer);let a=Math.min(250+this._restartAttempts*200,this._maxRestartDelay);this._restartTimer=setTimeout(()=>{try{this.recognition&&!this._recognitionActive&&this.recognition.start()}catch{this._restartAttempts++}},a)}},this.recognition.onnomatch=()=>{}}}ngOnInit(){let t=this.route.snapshot.paramMap.get("id");t&&(this.chatId=t,this.cdr.detectChanges())}ngOnDestroy(){if(un(this.platformId))try{window.speechSynthesis?.cancel()}catch{}this.stopServerAudio();try{window.speechSynthesis?.cancel()}catch{}}ngAfterViewInit(){this.chatBox.nativeElement.addEventListener("scroll",()=>{let t=this.chatBox.nativeElement,i=t.scrollHeight-t.clientHeight-t.scrollTop<50;this.shouldAutoScroll=i})}scrollToBottom(t=!1){if(!(!t&&!this.shouldAutoScroll)){try{let i=this.chatBox&&this.chatBox.nativeElement;if(i&&typeof i.scrollTo=="function"){requestAnimationFrame(()=>{try{i.scrollTo({top:i.scrollHeight,behavior:"smooth"})}catch{try{i.scrollTop=i.scrollHeight}catch{}}});return}}catch{}try{let i=document.querySelector('[id^="message-"]:last-of-type, .chat-message:last-child');i&&i.scrollIntoView({behavior:"smooth",block:"end"})}catch{}}}selectHardcodedQuestion(t){this.showQuestions=!1,this.sendMessage(t),this.userInput=""}showHardcodedQuestions(){setTimeout(()=>{this.showQuestions=!0,this.lastAnswer&&this.lastAnswerHasContext?this.fetchFollowupQuestions():this.fetchInitialQuestions()},100)}hideHardcodedQuestions(){setTimeout(()=>{this.showQuestions=!1},200)}fetchInitialQuestions(t=5){this.pdfLoading=!0,this.pdfQuestions=[],this.apiService.generateOpenQuestions({qtype:"OPEN",n:t,topic:""}).subscribe({next:i=>{let r=Array.isArray(i?.questions)?i.questions:[];this.pdfQuestions=r.map(o=>typeof o=="string"?o:o?.question||"").filter(Boolean),this.pdfLoading=!1,this.cdr.detectChanges()},error:()=>{this.pdfLoading=!1,this.pdfQuestions=[],this.cdr.detectChanges()}})}fetchFollowupQuestions(t=5){if(!this.lastQuestion||!this.lastAnswer||!this.lastAnswerHasContext||!this.lastSourceIds.length){this.fetchInitialQuestions(t);return}this.pdfLoading=!0,this.pdfQuestions=[],this.apiService.suggestFollowups({last_question:this.lastQuestion,last_answer:this.lastAnswer,n:t,source_ids:this.lastSourceIds}).subscribe({next:i=>{let r=Array.isArray(i?.suggestions)?i.suggestions:[];this.pdfQuestions=r.filter(o=>typeof o=="string"&&o.length>0),this.pdfLoading=!1,this.cdr.detectChanges()},error:()=>{this.pdfLoading=!1,this.pdfQuestions=[],this.cdr.detectChanges()}})}sendMessage(t){let i=t?t.trim():this.userInput.trim();if(!i)return;let r=new Date().toLocaleTimeString();this.messages.push({from:"user",text:i,timestamp:r}),this.userInput="",this.isTyping=!0,this.cdr.detectChanges(),this.shouldAutoScroll=!0,this.scrollToBottom(),this.apiService.explainGrammar({question:i,synthesize_audio:!!this.isVoiceEnabled,synthesize_video:!!this.isTutorEnabled,kdtalker:this.chatId==="2"}).subscribe({next:o=>{this.isTyping=!1;let s=(o?.answer||o?.response||o?.text||"No explanation available.").trim(),a=Array.isArray(o?.source_ids)?o.source_ids.filter(b=>typeof b=="string"&&b.trim().length>0):[],c=typeof o?.audio_url=="string"?o.audio_url:typeof o?.audioUrl=="string"?o.audioUrl:"",h=typeof o?.video_url=="string"?o.video_url:typeof o?.videoUrl=="string"?o.videoUrl:"";this.lastQuestion=i,this.lastSourceIds=a;let f=/No information available in the provided textbook content/i.test(s),p=a.length>0&&!f;this.streamAiAnswer(s,a,p,c||void 0,h||void 0)},error:()=>{this.isTyping=!1,this.streamAiAnswer("Error: Could not get a response from the server.",[],!1)}})}streamAiAnswer(t,i,r,o,s){let a=(t||"").trim()||"No explanation available.",c=new Date().toLocaleTimeString(),h=this.messages.push({from:"ai",text:"",timestamp:c,source_ids:i,pending:!0,audioUrl:o||"",videoUrl:s||"",playingVideoUrl:""})-1;this.isVideoEnabledIndex.length<=h&&(this.isVideoEnabledIndex[h]=!1),this.isAiResponding=!0,this.shouldAutoScroll=!0,this.cdr.detectChanges(),this.animateAiResponse(a,h,()=>{this.lastAnswer=a,this.lastAnswerHasContext=r,this.autoPlayMediaForMessage(h)}),!o&&this.isVoiceEnabled&&this.speakResponse(a)}autoPlayMediaForMessage(t){let i=this.messages[t];if(!i)return;let r=!!(i.videoUrl&&i.videoUrl.trim()),o=!!(i.audioUrl&&i.audioUrl.trim());if(r&&this.isTutorEnabled){try{this.stopServerAudio()}catch{}try{window.speechSynthesis?.cancel()}catch{}this.openMessageVideo(t,!0);return}if(o&&this.isVoiceEnabled){try{this.stopAllVideo()}catch{}this.playServerAudioForMessage(t)}}formatStructuredResponse(t){return t.replace(/\n/g," ").replace(/(\d+)\.\s/g,"$1. ").replace(/\•\s/g,"\u2714\uFE0F ").replace(/\-\s/g,"\u{1F539} ").replace(/(\*\*)(.*?)\1/g,"$2")}animateAiResponse(t,i,r){if(!t){this.isAiResponding=!1;return}let o=null;if(typeof i=="number"&&this.messages[i]?.from==="ai")o=i;else for(let f=this.messages.length-1;f>=0;f--)if(this.messages[f].from==="ai"){o=f;break}(o===null||o<0||!this.messages[o])&&(this.messages.push({from:"ai",text:"",timestamp:new Date().toLocaleTimeString()}),o=this.messages.length-1,this.isVideoEnabledIndex.push(!1));let s=this.messages[o];this.aiResponseInterval&&(clearInterval(this.aiResponseInterval),this.aiResponseInterval=null),s.text="",s.pending=!0,this.isAiResponding=!0,this.cdr.detectChanges();let a=t.split(/\s+/).filter(f=>f.length),c=0,h=200;this.aiResponseInterval=setInterval(()=>{ci.from==="ai");if(t!==-1){let i=this.messages.length-1-t,r=this.messages[i];r.text="Response cancelled.",r.timestamp=new Date().toLocaleTimeString(),r.suggestions=[],r.audioUrl="",r.videoUrl="",r.playingVideoUrl="",r.pending=!1,this.isVideoEnabledIndex.length>i&&(this.isVideoEnabledIndex[i]=!1)}else this.messages.push({from:"ai",text:"Response cancelled.",timestamp:new Date().toLocaleTimeString()}),this.isVideoEnabledIndex.push(!1);this.isAiResponding=!1,this.isTyping=!1,this.isSpeaking=!1,this.isReadingIndex=null,this.cdr.detectChanges()}speakResponse(t){if(!t||!this.isVoiceEnabled)return;this.stopAllVideo();let i=new SpeechSynthesisUtterance;i.text=t,i.lang="en-US",i.pitch=1,i.rate=1,this.isSpeaking=!0;let r=window.speechSynthesis.getVoices(),o=["Google UK English Female","Google US English Female","Microsoft Zira - English (United States)","Microsoft Hazel - English (United Kingdom)","Google en-GB Female","Google en-US Female"];for(let s of o){let a=r.find(c=>c.name===s);if(a){i.voice=a;break}}!i.voice&&r.length&&(i.voice=r[0]),i.onend=()=>{this.isSpeaking=!1,this.cdr.detectChanges()};try{window.speechSynthesis.speak(i)}catch{this.isSpeaking=!1}}resumeAudio(){if(this.serverAudio&&this.serverAudio.paused){this.serverAudio.play().catch(()=>{}),this.isAudioPaused=!1,this.serverAudioMessageIndex!==null&&(this.messages[this.serverAudioMessageIndex].isPlaying=!0),this.cdr.detectChanges();return}window.speechSynthesis&&window.speechSynthesis.paused&&(window.speechSynthesis.resume(),this.isAudioPaused=!1,this.cdr.detectChanges())}pauseAudio(){window.speechSynthesis.speaking&&!window.speechSynthesis.paused&&(window.speechSynthesis.pause(),this.isAudioPaused=!0,this.cdr.detectChanges())}playServerAudioForMessage(t){let i=this.messages[t];if(!(!i||!i.audioUrl)){if(this.serverAudio&&this.serverAudioMessageIndex===t){this.serverAudio.paused?(this.serverAudio.play().catch(()=>{}),this.isAudioPaused=!1,i.isPlaying=!0):(this.serverAudio.pause(),this.isAudioPaused=!0,i.isPlaying=!1),this.cdr.detectChanges();return}this.stopAllVideo(),this.stopServerAudio();try{window.speechSynthesis?.cancel()}catch{}this.serverAudio=new Audio(i.audioUrl),this.serverAudioMessageIndex=t;try{this.serverAudio.volume=1}catch{}this.isReadingIndex=t,this.isAudioPaused=!1,i.isPlaying=!0,this.isSpeaking=!0,this.cdr.detectChanges(),this.serverAudio.onended=()=>{try{i.isPlaying=!1}catch{}this.isReadingIndex=null,this.serverAudio=null,this.serverAudioMessageIndex=null,this.isSpeaking=!1,this.cdr.detectChanges()},this.serverAudio.onerror=()=>{try{i.isPlaying=!1}catch{}this.isReadingIndex=null,this.serverAudio=null,this.serverAudioMessageIndex=null,this.isSpeaking=!1,this.cdr.detectChanges()},this.serverAudio.play().catch(()=>{try{i.isPlaying=!1}catch{}this.isReadingIndex=null,this.serverAudio=null,this.serverAudioMessageIndex=null,this.isSpeaking=!1,this.cdr.detectChanges()})}}stopServerAudio(){if(this.serverAudio){try{this.serverAudio.pause(),this.serverAudio.currentTime=0}catch{}this.serverAudio=null,this.serverAudioMessageIndex!==null&&this.messages[this.serverAudioMessageIndex]&&(this.messages[this.serverAudioMessageIndex].isPlaying=!1),this.serverAudioMessageIndex=null}this.isReadingIndex=null}synthesizeAudioAndPlay(t){let i=this.messages[t];if(!(!i||!i.text)){if(i.audioUrl){this.playServerAudioForMessage(t);return}i.isSynthesizing||(i.isSynthesizing=!0,this.cdr.detectChanges(),this.apiService.synthesizeAudio(i.text).subscribe({next:r=>{i.isSynthesizing=!1,r?.audio_url?(i.audioUrl=r.audio_url,this.playServerAudioForMessage(t)):this.errorMessage="Audio generation failed.",this.cdr.detectChanges()},error:()=>{i.isSynthesizing=!1,this.errorMessage="Audio generation failed.",this.cdr.detectChanges()}}))}}synthesizeVideoAndPlay(t){let i=this.messages[t];if(!(!i||!i.text)){if(i.videoUrl){this.openMessageVideo(t);return}i.isVideoSynthesizing||(i.isVideoSynthesizing=!0,this.cdr.detectChanges(),this.apiService.synthesizeVideo(i.text).subscribe({next:r=>{i.isVideoSynthesizing=!1,r?.video_url?(i.videoUrl=r.video_url,this.openMessageVideo(t)):this.errorMessage="Video generation failed.",this.cdr.detectChanges()},error:()=>{i.isVideoSynthesizing=!1,this.errorMessage="Video generation failed. Try again.",this.cdr.detectChanges()}}))}}generateTutorVideoFromText(t,i){let r=this.messages[t];if(!r)return;if(r.videoUrl){this.openMessageVideo(t);return}if(r.isVideoSynthesizing)return;let o=r.text&&r.text.trim()||i&&i.trim()||"";if(!o){this.errorMessage="No text available to generate a video.",this.cdr.detectChanges();return}r.isVideoSynthesizing=!0,this.cdr.detectChanges(),this.apiService.generateVideoFromText(o).subscribe({next:s=>{r.isVideoSynthesizing=!1,s?.video_url?(r.videoUrl=s.video_url,this.openMessageVideo(t)):this.errorMessage="Video URL not returned from server.",this.cdr.detectChanges()},error:()=>{r.isVideoSynthesizing=!1,this.errorMessage="Could not generate video.",this.cdr.detectChanges()}})}openMessageVideo(t,i=!1){let r=this.messages[t];if(r?.videoUrl){if(this.isVideoPlayingIndex===t){this.stopInlineVideo(t);return}this.stopServerAudio();try{window.speechSynthesis?.cancel()}catch{}this.stopAllVideo(),r.playingVideoUrl=r.videoUrl,this.isVideoEnabledIndex[t]=!0,this.cdr.detectChanges(),setTimeout(()=>{let o=document.getElementById(`inline-video-${t}`);if(!o){this.isVideoPlayingIndex=null,this.cdr.detectChanges();return}if(i)try{o.muted=!0}catch{}else try{o.muted=!1}catch{}o.onplay=()=>{this.isVideoPlayingIndex=t,this.cdr.detectChanges()},o.onpause=()=>{this.cdr.detectChanges()},o.onended=()=>{this.onMessageVideoEnded(t)},o.play().catch(()=>{this.isVideoPlayingIndex=null,r.playingVideoUrl="",this.isVideoEnabledIndex[t]=!1,this.cdr.detectChanges()})},50)}}toggleMessageVideo(t){let i=this.messages[t];!i||!i.videoUrl||(this.isVideoEnabledIndex[t]?this.stopInlineVideo(t):this.openMessageVideo(t))}stopInlineVideo(t){let i=document.getElementById(`inline-video-${t}`);if(i)try{i.pause(),i.currentTime=0}catch{}let r=this.messages[t];r&&(r.playingVideoUrl=""),this.isVideoEnabledIndex[t]=!1,this.isVideoPlayingIndex===t&&(this.isVideoPlayingIndex=null),this.cdr.detectChanges()}onMessageVideoEnded(t){let i=this.messages[t];i&&(i.playingVideoUrl=""),this.isVideoEnabledIndex[t]=!1,this.isVideoPlayingIndex===t&&(this.isVideoPlayingIndex=null),this.cdr.detectChanges()}toggleVoice(){this.isVoiceEnabled=!this.isVoiceEnabled}toggleTutor(){this.isTutorEnabled=!this.isTutorEnabled}toggleSyllabus(){this.isSyllabusEnabled=!this.isSyllabusEnabled,this.saveToggleStates()}toggleBreadcrumb(){this.isBreadcrumbEnabled=!this.isBreadcrumbEnabled,this.saveToggleStates()}saveToggleStates(){un(this.platformId)&&(localStorage.setItem("voiceEnabled",String(this.isVoiceEnabled)),localStorage.setItem("tutorEnabled",String(this.isTutorEnabled)),localStorage.setItem("syllabusEnabled",String(this.isSyllabusEnabled)),localStorage.setItem("breadcrumbEnabled",String(this.isBreadcrumbEnabled)))}clearVideoUrl(){this.videoUrl="",this.isTutorEnabled&&(this.isTutorEnabled=!1,this.saveToggleStates()),this.cdr.detectChanges()}stopAllVideo(){this.videoUrl="";try{Array.from(document.querySelectorAll('[id^="inline-video-"]')).forEach(i=>{try{i.pause(),i.currentTime=0}catch{}})}catch{}this.messages.forEach((t,i)=>{t.playingVideoUrl="",this.isVideoEnabledIndex[i]=!1}),this.cdr.detectChanges()}getButtonIcon(){return this.isAiResponding?"assets/images/chat/stop.png":this.serverAudio&&!this.serverAudio.paused?"assets/images/chat/microphone-icon.png":this.userInput.trim().length>0?"assets/images/chat/send-icon.png":this.isSpeaking&&!this.serverAudio?"assets/images/chat/pause-icon.png":this.isAudioPaused?"assets/images/chat/resume-icon.png":"assets/images/chat/microphone-icon.png"}openUserGuide(){this.showUserGuide=!0}closeUserGuide(){this.showUserGuide=!1}stopReadAloud(){try{this.stopServerAudio()}catch{}this.isReadingIndex=null,this.isSpeaking=!1,this.cdr.detectChanges()}openMicrophonePopup(){this._recordingFinalBuffer="",this._recordingInterimBuffer="",this.popupTranscript="",this.errorMessage="",this.showMicPopup=!0,setTimeout(()=>this.startRecording(),200)}closeMicrophonePopup(){this.stopRecording(),this.showMicPopup=!1,this.popupTranscript="",this._recordingFinalBuffer="",this._recordingInterimBuffer="",this.errorMessage="",this.cdr.detectChanges()}startRecording(){return tt(this,null,function*(){if(!this.recognition){this.errorMessage="Speech recognition not supported.";return}this._recordingFinalBuffer="",this._recordingInterimBuffer="",this.popupTranscript="",this.errorMessage="",this.isRecording=!0;try{this.recognition.interimResults=!0}catch{}try{this.recognition.start()}catch{this._recognitionActive||setTimeout(()=>{try{this.recognition?.start()}catch{}},300)}try{yield this.startAnalyzer()}catch{}this.cdr.detectChanges()})}stopRecording(){return tt(this,null,function*(){if(this._restartTimer&&(clearTimeout(this._restartTimer),this._restartTimer=null),this.recognition&&this.isRecording)try{this.recognition.stop()}catch{}try{this.stopAnalyzer()}catch{}this.isRecording=!1;let t=(this._recordingFinalBuffer||"").trim(),i=(this._recordingInterimBuffer||"").trim(),r=(t+" "+i).trim();if(!r){this.popupTranscript="",this.cdr.detectChanges();return}this.popupTranscript="Processing\u2026",this.cdr.detectChanges();let o=r;try{let h=this.apiService.punctuate(r),f=yield Ql(h);if(f&&typeof f.punctuated=="string"&&f.punctuated.trim().length){let p=f.punctuated.trim();o=this.extractAssistantContent(p)||p}}catch{o=r}let s=this.normalizeTranscript(o);!/[.?!]$/.test(s)&&/^(who|what|when|where|why|how|which|whom|whose|is|are|am|was|were|do|does|did|can|could|would|will|shall|should|have|has|had)\b/i.test(r)&&(s=s+"?"),this.popupTranscript=s,this.cdr.detectChanges()})}extractAssistantContent(t){if(!t)return t;try{let i=/message=ChatCompletionMessage\(\s*content=(['"])((?:\\.|(?!\1).)*)\1/,r=t.match(i);if(r&&r[2])return r[2].replace(/\\'/g,"'").replace(/\\"/g,'"').trim();let o=/ChatCompletionMessage\(\s*content=(['"])((?:\\.|(?!\1).)*)\1/,s=t.match(o);if(s&&s[2])return s[2].replace(/\\'/g,"'").replace(/\\"/g,'"').trim();let a=/content=(['"])((?:\\.|(?!\1).)*)\1/,c=t.match(a);if(c&&c[2])return c[2].replace(/\\'/g,"'").replace(/\\"/g,'"').trim()}catch{}return t.trim()}confirmAndSendTranscript(){let t=(this.popupTranscript||"").trim();if(!t){this.errorMessage="No speech captured";return}t=this.normalizeTranscript(t);try{this.sendMessage(t)}catch{}this._recordingFinalBuffer="",this._recordingInterimBuffer="",this.showMicPopup=!1,this.isRecording=!1,this._restartTimer&&(clearTimeout(this._restartTimer),this._restartTimer=null),this.popupTranscript="",this.cdr.detectChanges()}copyToClipboard(t,i){navigator.clipboard.writeText(t).then(()=>{this.copySuccessIndex=i,setTimeout(()=>{this.copySuccessIndex=null},2e3)}).catch(()=>{})}adjustTextareaHeight(t){let i=t.target;i.style.height="auto",i.style.height=`${i.scrollHeight}px`}handleEnterPress(t){if(this.isSpeaking&&!this.serverAudio){t.preventDefault();return}t.key==="Enter"&&(t.shiftKey?(t.preventDefault(),this.userInput+=`
+`):(t.preventDefault(),this.handleButtonClick()))}handleButtonClick(){if(this.isAiResponding){this.stopAiResponse();return}if(this.userInput.trim().length>0){this.showQuestions=!1;let t=this.userInput;this.userInput="",this.sendMessage(t)}else this.isSpeaking&&!this.serverAudio?this.pauseAudio():this.isAudioPaused?this.resumeAudio():this.openMicrophonePopup()}normalizeTranscript(t){if(!t)return t;let i=t.trim(),r=[[/\b(full stop|period|dot)\b/gi,"."],[/\b(question mark|question)\b/gi,"?"],[/\b(exclamation mark|exclamation|exclaim)\b/gi,"!"],[/\b(comma)\b/gi,","],[/\b(colon)\b/gi,":"],[/\b(semicolon)\b/gi,";"],[/\b(ellipsis|dot dot dot|three dots)\b/gi,"..."],[/\b(new line|newline|new paragraph|line break)\b/gi,`
+`],[/\b(open parenthesis|open bracket)\b/gi,"("],[/\b(close parenthesis|close bracket)\b/gi,")"],[/\b(double quote|quote|quotation)\b/gi,'"'],[/\b(single quote|apostrophe)\b/gi,"'"],[/\b(dash|hyphen)\b/gi,"-"],[/\b(percent|percent sign)\b/gi,"%"],[/\b(and sign|ampersand)\b/gi,"&"],[/\b(at sign)\b/gi,"@"],[/\b(forward slash|slash)\b/gi,"/"],[/\b(backslash)\b/gi,"\\\\"]];for(let[o,s]of r)i=i.replace(o,s);return i=i.replace(/\s+([,.:;?!%'\)\]\}])/g,"$1"),i=i.replace(/\s+([\(\[\{"'`])/g,"$1"),i=i.replace(/([.?!:;,%\)\]'"-]{1,3})(?!\s|\n|$)/g,"$1 "),i=i.replace(/[ \t]{2,}/g," "),i=i.split(`
+`).map(o=>o.trim()).join(`
+`),i=i.replace(/(^|[\n\.!\?]\s+)([a-z])/g,(o,s,a)=>s+a.toUpperCase()),i.trim()}startAnalyzer(){return tt(this,null,function*(){if(un(this.platformId)&&!((!this.waveformCanvas||!this.waveformCanvas.nativeElement)&&(yield new Promise(t=>setTimeout(t,80)),!this.waveformCanvas||!this.waveformCanvas.nativeElement)))try{let t=window.AudioContext??window.webkitAudioContext;if(!this.audioContext||this.audioContext&&this.audioContext.state==="closed")this.audioContext=new t;else if(this.audioContext.state==="suspended")try{yield this.audioContext.resume()}catch{}if(this.mediaStream){try{this.mediaStream.getTracks().forEach(a=>a.stop())}catch{}this.mediaStream=null}let i=yield navigator.mediaDevices.getUserMedia({audio:!0});this.mediaStream=i;let r=this.audioContext.createMediaStreamSource(i);try{if(this.analyser)try{this.analyser.disconnect()}catch{}}catch{}let o=this.audioContext.createAnalyser();o.fftSize=2048,o.smoothingTimeConstant=.85,r.connect(o),this.analyser=o;let s=o.fftSize;this.dataArray=new Uint8Array(s),this.drawWaveform()}catch(t){try{this.mediaStream&&(this.mediaStream.getTracks().forEach(i=>i.stop()),this.mediaStream=null)}catch{}try{this.analyser&&(this.analyser.disconnect(),this.analyser=null)}catch{}throw this.dataArray=null,t}})}stopAnalyzer(){try{if(this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.analyser){try{this.analyser.disconnect()}catch{}this.analyser=null}if(this.mediaStream){try{this.mediaStream.getTracks().forEach(t=>t.stop())}catch{}this.mediaStream=null}try{this.audioContext&&typeof this.audioContext.close=="function"?this.audioContext.close().catch(()=>{}).finally(()=>{this.audioContext=null}):this.audioContext=null}catch{this.audioContext=null}if(this.dataArray=null,this.waveformCanvas&&this.waveformCanvas.nativeElement){let t=this.waveformCanvas.nativeElement,i=t.getContext("2d");i&&i.clearRect(0,0,t.width,t.height)}}catch{}}drawWaveform(){if(!this.waveformCanvas||!this.waveformCanvas.nativeElement||!this.analyser||!this.dataArray)return;let t=this.waveformCanvas.nativeElement,i=t.getContext("2d");if(!i)return;let r=window.devicePixelRatio||1,o=()=>{let a=t.getBoundingClientRect(),c=Math.max(1,Math.floor(a.width*r)),h=Math.max(1,Math.floor(a.height*r));(t.width!==c||t.height!==h)&&(t.width=c,t.height=h)},s=()=>{if(!this.waveformCanvas||!this.waveformCanvas.nativeElement||!this.analyser||!this.dataArray){this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null);return}let a=t.getBoundingClientRect();if(a.width===0||a.height===0||!t.offsetParent){this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null);return}o();try{this.analyser.getByteTimeDomainData(this.dataArray)}catch{this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null);return}let c=0;for(let Q=0;Q{class e{constructor(t){this._platformId=t,this.isBrowser=this._platformId?un(this._platformId):typeof document=="object"&&!!document,this.EDGE=this.isBrowser&&/(edge)/i.test(navigator.userAgent),this.TRIDENT=this.isBrowser&&/(msie|trident)/i.test(navigator.userAgent),this.BLINK=this.isBrowser&&!!(window.chrome||Af)&&typeof CSS<"u"&&!this.EDGE&&!this.TRIDENT,this.WEBKIT=this.isBrowser&&/AppleWebKit/i.test(navigator.userAgent)&&!this.BLINK&&!this.EDGE&&!this.TRIDENT,this.IOS=this.isBrowser&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!("MSStream"in window),this.FIREFOX=this.isBrowser&&/(firefox|minefield)/i.test(navigator.userAgent),this.ANDROID=this.isBrowser&&/android/i.test(navigator.userAgent)&&!this.TRIDENT,this.SAFARI=this.isBrowser&&/safari/i.test(navigator.userAgent)&&this.WEBKIT}static{this.\u0275fac=function(i){return new(i||e)(v(Je))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();var hs;function ZA(){if(hs==null&&typeof window<"u")try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:()=>hs=!0}))}finally{hs=hs||!1}return hs}function Vr(e){return ZA()?e:!!e.capture}var ki;function my(){if(ki==null){if(typeof document!="object"||!document||typeof Element!="function"||!Element)return ki=!1,ki;if("scrollBehavior"in document.documentElement.style)ki=!0;else{let e=Element.prototype.scrollTo;e?ki=!/\{\s*\[native code\]\s*\}/.test(e.toString()):ki=!1}}return ki}var Tf;function KA(){if(Tf==null){let e=typeof document<"u"?document.head:null;Tf=!!(e&&(e.createShadowRoot||e.attachShadow))}return Tf}function gy(e){if(KA()){let n=e.getRootNode?e.getRootNode():null;if(typeof ShadowRoot<"u"&&ShadowRoot&&n instanceof ShadowRoot)return n}return null}function fs(){let e=typeof document<"u"&&document?document.activeElement:null;for(;e&&e.shadowRoot;){let n=e.shadowRoot.activeElement;if(n===e)break;e=n}return e}function Qt(e){return e.composedPath?e.composedPath()[0]:e.target}function ps(){return typeof __karma__<"u"&&!!__karma__||typeof jasmine<"u"&&!!jasmine||typeof jest<"u"&&!!jest||typeof Mocha<"u"&&!!Mocha}var XA=new O("cdk-dir-doc",{providedIn:"root",factory:JA});function JA(){return S(W)}var eO=/^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;function tO(e){let n=e?.toLowerCase()||"";return n==="auto"&&typeof navigator<"u"&&navigator?.language?eO.test(navigator.language)?"rtl":"ltr":n==="rtl"?"rtl":"ltr"}var gs=(()=>{class e{constructor(t){if(this.value="ltr",this.change=new ne,t){let i=t.body?t.body.dir:null,r=t.documentElement?t.documentElement.dir:null;this.value=tO(i||r||"ltr")}}ngOnDestroy(){this.change.complete()}static{this.\u0275fac=function(i){return new(i||e)(v(XA,8))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();var oi=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=G({type:e})}static{this.\u0275inj=z({})}}return e})();var iO=20,_y=(()=>{class e{constructor(t,i,r){this._ngZone=t,this._platform=i,this._scrolled=new B,this._globalSubscription=null,this._scrolledCount=0,this.scrollContainers=new Map,this._document=r}register(t){this.scrollContainers.has(t)||this.scrollContainers.set(t,t.elementScrolled().subscribe(()=>this._scrolled.next(t)))}deregister(t){let i=this.scrollContainers.get(t);i&&(i.unsubscribe(),this.scrollContainers.delete(t))}scrolled(t=iO){return this._platform.isBrowser?new Z(i=>{this._globalSubscription||this._addGlobalListener();let r=t>0?this._scrolled.pipe(Zs(t)).subscribe(i):this._scrolled.subscribe(i);return this._scrolledCount++,()=>{r.unsubscribe(),this._scrolledCount--,this._scrolledCount||this._removeGlobalListener()}}):N()}ngOnDestroy(){this._removeGlobalListener(),this.scrollContainers.forEach((t,i)=>this.deregister(i)),this._scrolled.complete()}ancestorScrolled(t,i){let r=this.getAncestorScrollContainers(t);return this.scrolled(i).pipe(be(o=>!o||r.indexOf(o)>-1))}getAncestorScrollContainers(t){let i=[];return this.scrollContainers.forEach((r,o)=>{this._scrollableContainsElement(o,t)&&i.push(o)}),i}_getWindow(){return this._document.defaultView||window}_scrollableContainsElement(t,i){let r=Ln(i),o=t.getElementRef().nativeElement;do if(r==o)return!0;while(r=r.parentElement);return!1}_addGlobalListener(){this._globalSubscription=this._ngZone.runOutsideAngular(()=>{let t=this._getWindow();return Qr(t.document,"scroll").subscribe(()=>this._scrolled.next())})}_removeGlobalListener(){this._globalSubscription&&(this._globalSubscription.unsubscribe(),this._globalSubscription=null)}static{this.\u0275fac=function(i){return new(i||e)(v(F),v(Be),v(W,8))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();var rO=20,Of=(()=>{class e{constructor(t,i,r){this._platform=t,this._change=new B,this._changeListener=o=>{this._change.next(o)},this._document=r,i.runOutsideAngular(()=>{if(t.isBrowser){let o=this._getWindow();o.addEventListener("resize",this._changeListener),o.addEventListener("orientationchange",this._changeListener)}this.change().subscribe(()=>this._viewportSize=null)})}ngOnDestroy(){if(this._platform.isBrowser){let t=this._getWindow();t.removeEventListener("resize",this._changeListener),t.removeEventListener("orientationchange",this._changeListener)}this._change.complete()}getViewportSize(){this._viewportSize||this._updateViewportSize();let t={width:this._viewportSize.width,height:this._viewportSize.height};return this._platform.isBrowser||(this._viewportSize=null),t}getViewportRect(){let t=this.getViewportScrollPosition(),{width:i,height:r}=this.getViewportSize();return{top:t.top,left:t.left,bottom:t.top+r,right:t.left+i,height:r,width:i}}getViewportScrollPosition(){if(!this._platform.isBrowser)return{top:0,left:0};let t=this._document,i=this._getWindow(),r=t.documentElement,o=r.getBoundingClientRect(),s=-o.top||t.body.scrollTop||i.scrollY||r.scrollTop||0,a=-o.left||t.body.scrollLeft||i.scrollX||r.scrollLeft||0;return{top:s,left:a}}change(t=rO){return t>0?this._change.pipe(Zs(t)):this._change}_getWindow(){return this._document.defaultView||window}_updateViewportSize(){let t=this._getWindow();this._viewportSize=this._platform.isBrowser?{width:t.innerWidth,height:t.innerHeight}:{width:0,height:0}}static{this.\u0275fac=function(i){return new(i||e)(v(Be),v(F),v(W,8))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();var vy=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=G({type:e})}static{this.\u0275inj=z({})}}return e})(),kf=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=G({type:e})}static{this.\u0275inj=z({imports:[oi,vy,oi,vy]})}}return e})();var vs=class{attach(n){return this._attachedHost=n,n.attach(this)}detach(){let n=this._attachedHost;n!=null&&(this._attachedHost=null,n.detach())}get isAttached(){return this._attachedHost!=null}setAttachedHost(n){this._attachedHost=n}},jr=class extends vs{constructor(n,t,i,r,o){super(),this.component=n,this.viewContainerRef=t,this.injector=i,this.componentFactoryResolver=r,this.projectableNodes=o}},Br=class extends vs{constructor(n,t,i,r){super(),this.templateRef=n,this.viewContainerRef=t,this.context=i,this.injector=r}get origin(){return this.templateRef.elementRef}attach(n,t=this.context){return this.context=t,super.attach(n)}detach(){return this.context=void 0,super.detach()}},Pf=class extends vs{constructor(n){super(),this.element=n instanceof re?n.nativeElement:n}},Ur=class{constructor(){this._isDisposed=!1,this.attachDomPortal=null}hasAttached(){return!!this._attachedPortal}attach(n){if(n instanceof jr)return this._attachedPortal=n,this.attachComponentPortal(n);if(n instanceof Br)return this._attachedPortal=n,this.attachTemplatePortal(n);if(this.attachDomPortal&&n instanceof Pf)return this._attachedPortal=n,this.attachDomPortal(n)}detach(){this._attachedPortal&&(this._attachedPortal.setAttachedHost(null),this._attachedPortal=null),this._invokeDisposeFn()}dispose(){this.hasAttached()&&this.detach(),this._invokeDisposeFn(),this._isDisposed=!0}setDisposeFn(n){this._disposeFn=n}_invokeDisposeFn(){this._disposeFn&&(this._disposeFn(),this._disposeFn=null)}};var yl=class extends Ur{constructor(n,t,i,r,o){super(),this.outletElement=n,this._componentFactoryResolver=t,this._appRef=i,this._defaultInjector=r,this.attachDomPortal=s=>{this._document;let a=s.element;a.parentNode;let c=this._document.createComment("dom-portal");a.parentNode.insertBefore(c,a),this.outletElement.appendChild(a),this._attachedPortal=s,super.setDisposeFn(()=>{c.parentNode&&c.parentNode.replaceChild(a,c)})},this._document=o}attachComponentPortal(n){let i=(n.componentFactoryResolver||this._componentFactoryResolver).resolveComponentFactory(n.component),r;return n.viewContainerRef?(r=n.viewContainerRef.createComponent(i,n.viewContainerRef.length,n.injector||n.viewContainerRef.injector,n.projectableNodes||void 0),this.setDisposeFn(()=>r.destroy())):(r=i.create(n.injector||this._defaultInjector||Ae.NULL),this._appRef.attachView(r.hostView),this.setDisposeFn(()=>{this._appRef.viewCount>0&&this._appRef.detachView(r.hostView),r.destroy()})),this.outletElement.appendChild(this._getComponentRootNode(r)),this._attachedPortal=n,r}attachTemplatePortal(n){let t=n.viewContainerRef,i=t.createEmbeddedView(n.templateRef,n.context,{injector:n.injector});return i.rootNodes.forEach(r=>this.outletElement.appendChild(r)),i.detectChanges(),this.setDisposeFn(()=>{let r=t.indexOf(i);r!==-1&&t.remove(r)}),this._attachedPortal=n,i}dispose(){super.dispose(),this.outletElement.remove()}_getComponentRootNode(n){return n.hostView.rootNodes[0]}};var _s=(()=>{class e extends Ur{constructor(t,i,r){super(),this._componentFactoryResolver=t,this._viewContainerRef=i,this._isInitialized=!1,this.attached=new ne,this.attachDomPortal=o=>{this._document;let s=o.element;s.parentNode;let a=this._document.createComment("dom-portal");o.setAttachedHost(this),s.parentNode.insertBefore(a,s),this._getRootNode().appendChild(s),this._attachedPortal=o,super.setDisposeFn(()=>{a.parentNode&&a.parentNode.replaceChild(s,a)})},this._document=r}get portal(){return this._attachedPortal}set portal(t){this.hasAttached()&&!t&&!this._isInitialized||(this.hasAttached()&&super.detach(),t&&super.attach(t),this._attachedPortal=t||null)}get attachedRef(){return this._attachedRef}ngOnInit(){this._isInitialized=!0}ngOnDestroy(){super.dispose(),this._attachedRef=this._attachedPortal=null}attachComponentPortal(t){t.setAttachedHost(this);let i=t.viewContainerRef!=null?t.viewContainerRef:this._viewContainerRef,o=(t.componentFactoryResolver||this._componentFactoryResolver).resolveComponentFactory(t.component),s=i.createComponent(o,i.length,t.injector||i.injector,t.projectableNodes||void 0);return i!==this._viewContainerRef&&this._getRootNode().appendChild(s.hostView.rootNodes[0]),super.setDisposeFn(()=>s.destroy()),this._attachedPortal=t,this._attachedRef=s,this.attached.emit(s),s}attachTemplatePortal(t){t.setAttachedHost(this);let i=this._viewContainerRef.createEmbeddedView(t.templateRef,t.context,{injector:t.injector});return super.setDisposeFn(()=>this._viewContainerRef.clear()),this._attachedPortal=t,this._attachedRef=i,this.attached.emit(i),i}_getRootNode(){let t=this._viewContainerRef.element.nativeElement;return t.nodeType===t.ELEMENT_NODE?t:t.parentNode}static{this.\u0275fac=function(i){return new(i||e)(w(Qn),w(Ct),w(W))}}static{this.\u0275dir=ce({type:e,selectors:[["","cdkPortalOutlet",""]],inputs:{portal:[$.None,"cdkPortalOutlet","portal"]},outputs:{attached:"attached"},exportAs:["cdkPortalOutlet"],standalone:!0,features:[He]})}}return e})();var Pi=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=G({type:e})}static{this.\u0275inj=z({})}}return e})();function bl(e,...n){return n.length?n.some(t=>e[t]):e.altKey||e.shiftKey||e.ctrlKey||e.metaKey}var yy=my(),Rf=class{constructor(n,t){this._viewportRuler=n,this._previousHTMLStyles={top:"",left:""},this._isEnabled=!1,this._document=t}attach(){}enable(){if(this._canBeEnabled()){let n=this._document.documentElement;this._previousScrollPosition=this._viewportRuler.getViewportScrollPosition(),this._previousHTMLStyles.left=n.style.left||"",this._previousHTMLStyles.top=n.style.top||"",n.style.left=Le(-this._previousScrollPosition.left),n.style.top=Le(-this._previousScrollPosition.top),n.classList.add("cdk-global-scrollblock"),this._isEnabled=!0}}disable(){if(this._isEnabled){let n=this._document.documentElement,t=this._document.body,i=n.style,r=t.style,o=i.scrollBehavior||"",s=r.scrollBehavior||"";this._isEnabled=!1,i.left=this._previousHTMLStyles.left,i.top=this._previousHTMLStyles.top,n.classList.remove("cdk-global-scrollblock"),yy&&(i.scrollBehavior=r.scrollBehavior="auto"),window.scroll(this._previousScrollPosition.left,this._previousScrollPosition.top),yy&&(i.scrollBehavior=o,r.scrollBehavior=s)}}_canBeEnabled(){if(this._document.documentElement.classList.contains("cdk-global-scrollblock")||this._isEnabled)return!1;let t=this._document.body,i=this._viewportRuler.getViewportSize();return t.scrollHeight>i.height||t.scrollWidth>i.width}};var Nf=class{constructor(n,t,i,r){this._scrollDispatcher=n,this._ngZone=t,this._viewportRuler=i,this._config=r,this._scrollSubscription=null,this._detach=()=>{this.disable(),this._overlayRef.hasAttached()&&this._ngZone.run(()=>this._overlayRef.detach())}}attach(n){this._overlayRef,this._overlayRef=n}enable(){if(this._scrollSubscription)return;let n=this._scrollDispatcher.scrolled(0).pipe(be(t=>!t||!this._overlayRef.overlayElement.contains(t.getElementRef().nativeElement)));this._config&&this._config.threshold&&this._config.threshold>1?(this._initialScrollPosition=this._viewportRuler.getViewportScrollPosition().top,this._scrollSubscription=n.subscribe(()=>{let t=this._viewportRuler.getViewportScrollPosition().top;Math.abs(t-this._initialScrollPosition)>this._config.threshold?this._detach():this._overlayRef.updatePosition()})):this._scrollSubscription=n.subscribe(this._detach)}disable(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)}detach(){this.disable(),this._overlayRef=null}},wl=class{enable(){}disable(){}attach(){}};function Ff(e,n){return n.some(t=>{let i=e.bottomt.bottom,o=e.rightt.right;return i||r||o||s})}function by(e,n){return n.some(t=>{let i=e.topt.bottom,o=e.leftt.right;return i||r||o||s})}var Lf=class{constructor(n,t,i,r){this._scrollDispatcher=n,this._viewportRuler=t,this._ngZone=i,this._config=r,this._scrollSubscription=null}attach(n){this._overlayRef,this._overlayRef=n}enable(){if(!this._scrollSubscription){let n=this._config?this._config.scrollThrottle:0;this._scrollSubscription=this._scrollDispatcher.scrolled(n).subscribe(()=>{if(this._overlayRef.updatePosition(),this._config&&this._config.autoClose){let t=this._overlayRef.overlayElement.getBoundingClientRect(),{width:i,height:r}=this._viewportRuler.getViewportSize();Ff(t,[{width:i,height:r,bottom:r,right:i,top:0,left:0}])&&(this.disable(),this._ngZone.run(()=>this._overlayRef.detach()))}})}}disable(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)}detach(){this.disable(),this._overlayRef=null}},sO=(()=>{class e{constructor(t,i,r,o){this._scrollDispatcher=t,this._viewportRuler=i,this._ngZone=r,this.noop=()=>new wl,this.close=s=>new Nf(this._scrollDispatcher,this._ngZone,this._viewportRuler,s),this.block=()=>new Rf(this._viewportRuler,this._document),this.reposition=s=>new Lf(this._scrollDispatcher,this._viewportRuler,this._ngZone,s),this._document=o}static{this.\u0275fac=function(i){return new(i||e)(v(_y),v(Of),v(F),v(W))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),ys=class{constructor(n){if(this.scrollStrategy=new wl,this.panelClass="",this.hasBackdrop=!1,this.backdropClass="cdk-overlay-dark-backdrop",this.disposeOnNavigation=!1,n){let t=Object.keys(n);for(let i of t)n[i]!==void 0&&(this[i]=n[i])}}};var Vf=class{constructor(n,t){this.connectionPair=n,this.scrollableViewProperties=t}};var Ey=(()=>{class e{constructor(t){this._attachedOverlays=[],this._document=t}ngOnDestroy(){this.detach()}add(t){this.remove(t),this._attachedOverlays.push(t)}remove(t){let i=this._attachedOverlays.indexOf(t);i>-1&&this._attachedOverlays.splice(i,1),this._attachedOverlays.length===0&&this.detach()}static{this.\u0275fac=function(i){return new(i||e)(v(W))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),aO=(()=>{class e extends Ey{constructor(t,i){super(t),this._ngZone=i,this._keydownListener=r=>{let o=this._attachedOverlays;for(let s=o.length-1;s>-1;s--)if(o[s]._keydownEvents.observers.length>0){let a=o[s]._keydownEvents;this._ngZone?this._ngZone.run(()=>a.next(r)):a.next(r);break}}}add(t){super.add(t),this._isAttached||(this._ngZone?this._ngZone.runOutsideAngular(()=>this._document.body.addEventListener("keydown",this._keydownListener)):this._document.body.addEventListener("keydown",this._keydownListener),this._isAttached=!0)}detach(){this._isAttached&&(this._document.body.removeEventListener("keydown",this._keydownListener),this._isAttached=!1)}static{this.\u0275fac=function(i){return new(i||e)(v(W),v(F,8))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),cO=(()=>{class e extends Ey{constructor(t,i,r){super(t),this._platform=i,this._ngZone=r,this._cursorStyleIsSet=!1,this._pointerDownListener=o=>{this._pointerDownEventTarget=Qt(o)},this._clickListener=o=>{let s=Qt(o),a=o.type==="click"&&this._pointerDownEventTarget?this._pointerDownEventTarget:s;this._pointerDownEventTarget=null;let c=this._attachedOverlays.slice();for(let h=c.length-1;h>-1;h--){let f=c[h];if(f._outsidePointerEvents.observers.length<1||!f.hasAttached())continue;if(f.overlayElement.contains(s)||f.overlayElement.contains(a))break;let p=f._outsidePointerEvents;this._ngZone?this._ngZone.run(()=>p.next(o)):p.next(o)}}}add(t){if(super.add(t),!this._isAttached){let i=this._document.body;this._ngZone?this._ngZone.runOutsideAngular(()=>this._addEventListeners(i)):this._addEventListeners(i),this._platform.IOS&&!this._cursorStyleIsSet&&(this._cursorOriginalValue=i.style.cursor,i.style.cursor="pointer",this._cursorStyleIsSet=!0),this._isAttached=!0}}detach(){if(this._isAttached){let t=this._document.body;t.removeEventListener("pointerdown",this._pointerDownListener,!0),t.removeEventListener("click",this._clickListener,!0),t.removeEventListener("auxclick",this._clickListener,!0),t.removeEventListener("contextmenu",this._clickListener,!0),this._platform.IOS&&this._cursorStyleIsSet&&(t.style.cursor=this._cursorOriginalValue,this._cursorStyleIsSet=!1),this._isAttached=!1}}_addEventListeners(t){t.addEventListener("pointerdown",this._pointerDownListener,!0),t.addEventListener("click",this._clickListener,!0),t.addEventListener("auxclick",this._clickListener,!0),t.addEventListener("contextmenu",this._clickListener,!0)}static{this.\u0275fac=function(i){return new(i||e)(v(W),v(Be),v(F,8))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),$r=(()=>{class e{constructor(t,i){this._platform=i,this._document=t}ngOnDestroy(){this._containerElement?.remove()}getContainerElement(){return this._containerElement||this._createContainer(),this._containerElement}_createContainer(){let t="cdk-overlay-container";if(this._platform.isBrowser||ps()){let r=this._document.querySelectorAll(`.${t}[platform="server"], .${t}[platform="test"]`);for(let o=0;othis._backdropClick.next(p),this._backdropTransitionendHandler=p=>{this._disposeBackdrop(p.target)},this._keydownEvents=new B,this._outsidePointerEvents=new B,r.scrollStrategy&&(this._scrollStrategy=r.scrollStrategy,this._scrollStrategy.attach(this)),this._positionStrategy=r.positionStrategy}get overlayElement(){return this._pane}get backdropElement(){return this._backdropElement}get hostElement(){return this._host}attach(n){!this._host.parentElement&&this._previousHostParent&&this._previousHostParent.appendChild(this._host);let t=this._portalOutlet.attach(n);return this._positionStrategy&&this._positionStrategy.attach(this),this._updateStackingOrder(),this._updateElementSize(),this._updateElementDirection(),this._scrollStrategy&&this._scrollStrategy.enable(),this._ngZone.onStable.pipe(Ue(1)).subscribe(()=>{this.hasAttached()&&this.updatePosition()}),this._togglePointerEvents(!0),this._config.hasBackdrop&&this._attachBackdrop(),this._config.panelClass&&this._toggleClasses(this._pane,this._config.panelClass,!0),this._attachments.next(),this._keyboardDispatcher.add(this),this._config.disposeOnNavigation&&(this._locationChanges=this._location.subscribe(()=>this.dispose())),this._outsideClickDispatcher.add(this),typeof t?.onDestroy=="function"&&t.onDestroy(()=>{this.hasAttached()&&this._ngZone.runOutsideAngular(()=>Promise.resolve().then(()=>this.detach()))}),t}detach(){if(!this.hasAttached())return;this.detachBackdrop(),this._togglePointerEvents(!1),this._positionStrategy&&this._positionStrategy.detach&&this._positionStrategy.detach(),this._scrollStrategy&&this._scrollStrategy.disable();let n=this._portalOutlet.detach();return this._detachments.next(),this._keyboardDispatcher.remove(this),this._detachContentWhenStable(),this._locationChanges.unsubscribe(),this._outsideClickDispatcher.remove(this),n}dispose(){let n=this.hasAttached();this._positionStrategy&&this._positionStrategy.dispose(),this._disposeScrollStrategy(),this._disposeBackdrop(this._backdropElement),this._locationChanges.unsubscribe(),this._keyboardDispatcher.remove(this),this._portalOutlet.dispose(),this._attachments.complete(),this._backdropClick.complete(),this._keydownEvents.complete(),this._outsidePointerEvents.complete(),this._outsideClickDispatcher.remove(this),this._host?.remove(),this._previousHostParent=this._pane=this._host=null,n&&this._detachments.next(),this._detachments.complete()}hasAttached(){return this._portalOutlet.hasAttached()}backdropClick(){return this._backdropClick}attachments(){return this._attachments}detachments(){return this._detachments}keydownEvents(){return this._keydownEvents}outsidePointerEvents(){return this._outsidePointerEvents}getConfig(){return this._config}updatePosition(){this._positionStrategy&&this._positionStrategy.apply()}updatePositionStrategy(n){n!==this._positionStrategy&&(this._positionStrategy&&this._positionStrategy.dispose(),this._positionStrategy=n,this.hasAttached()&&(n.attach(this),this.updatePosition()))}updateSize(n){this._config=E(E({},this._config),n),this._updateElementSize()}setDirection(n){this._config=ae(E({},this._config),{direction:n}),this._updateElementDirection()}addPanelClass(n){this._pane&&this._toggleClasses(this._pane,n,!0)}removePanelClass(n){this._pane&&this._toggleClasses(this._pane,n,!1)}getDirection(){let n=this._config.direction;return n?typeof n=="string"?n:n.value:"ltr"}updateScrollStrategy(n){n!==this._scrollStrategy&&(this._disposeScrollStrategy(),this._scrollStrategy=n,this.hasAttached()&&(n.attach(this),n.enable()))}_updateElementDirection(){this._host.setAttribute("dir",this.getDirection())}_updateElementSize(){if(!this._pane)return;let n=this._pane.style;n.width=Le(this._config.width),n.height=Le(this._config.height),n.minWidth=Le(this._config.minWidth),n.minHeight=Le(this._config.minHeight),n.maxWidth=Le(this._config.maxWidth),n.maxHeight=Le(this._config.maxHeight)}_togglePointerEvents(n){this._pane.style.pointerEvents=n?"":"none"}_attachBackdrop(){let n="cdk-overlay-backdrop-showing";this._backdropElement=this._document.createElement("div"),this._backdropElement.classList.add("cdk-overlay-backdrop"),this._animationsDisabled&&this._backdropElement.classList.add("cdk-overlay-backdrop-noop-animation"),this._config.backdropClass&&this._toggleClasses(this._backdropElement,this._config.backdropClass,!0),this._host.parentElement.insertBefore(this._backdropElement,this._host),this._backdropElement.addEventListener("click",this._backdropClickHandler),!this._animationsDisabled&&typeof requestAnimationFrame<"u"?this._ngZone.runOutsideAngular(()=>{requestAnimationFrame(()=>{this._backdropElement&&this._backdropElement.classList.add(n)})}):this._backdropElement.classList.add(n)}_updateStackingOrder(){this._host.nextSibling&&this._host.parentNode.appendChild(this._host)}detachBackdrop(){let n=this._backdropElement;if(n){if(this._animationsDisabled){this._disposeBackdrop(n);return}n.classList.remove("cdk-overlay-backdrop-showing"),this._ngZone.runOutsideAngular(()=>{n.addEventListener("transitionend",this._backdropTransitionendHandler)}),n.style.pointerEvents="none",this._backdropTimeout=this._ngZone.runOutsideAngular(()=>setTimeout(()=>{this._disposeBackdrop(n)},500))}}_toggleClasses(n,t,i){let r=Lr(t||[]).filter(o=>!!o);r.length&&(i?n.classList.add(...r):n.classList.remove(...r))}_detachContentWhenStable(){this._ngZone.runOutsideAngular(()=>{let n=this._ngZone.onStable.pipe(ot(Zr(this._attachments,this._detachments))).subscribe(()=>{(!this._pane||!this._host||this._pane.children.length===0)&&(this._pane&&this._config.panelClass&&this._toggleClasses(this._pane,this._config.panelClass,!1),this._host&&this._host.parentElement&&(this._previousHostParent=this._host.parentElement,this._host.remove()),n.unsubscribe())})})}_disposeScrollStrategy(){let n=this._scrollStrategy;n&&(n.disable(),n.detach&&n.detach())}_disposeBackdrop(n){n&&(n.removeEventListener("click",this._backdropClickHandler),n.removeEventListener("transitionend",this._backdropTransitionendHandler),n.remove(),this._backdropElement===n&&(this._backdropElement=null)),this._backdropTimeout&&(clearTimeout(this._backdropTimeout),this._backdropTimeout=void 0)}},wy="cdk-overlay-connected-position-bounding-box",lO=/([A-Za-z%]+)$/,jf=class{get positions(){return this._preferredPositions}constructor(n,t,i,r,o){this._viewportRuler=t,this._document=i,this._platform=r,this._overlayContainer=o,this._lastBoundingBoxSize={width:0,height:0},this._isPushed=!1,this._canPush=!0,this._growAfterOpen=!1,this._hasFlexibleDimensions=!0,this._positionLocked=!1,this._viewportMargin=0,this._scrollables=[],this._preferredPositions=[],this._positionChanges=new B,this._resizeSubscription=_e.EMPTY,this._offsetX=0,this._offsetY=0,this._appliedPanelClasses=[],this.positionChanges=this._positionChanges,this.setOrigin(n)}attach(n){this._overlayRef&&this._overlayRef,this._validatePositions(),n.hostElement.classList.add(wy),this._overlayRef=n,this._boundingBox=n.hostElement,this._pane=n.overlayElement,this._isDisposed=!1,this._isInitialRender=!0,this._lastPosition=null,this._resizeSubscription.unsubscribe(),this._resizeSubscription=this._viewportRuler.change().subscribe(()=>{this._isInitialRender=!0,this.apply()})}apply(){if(this._isDisposed||!this._platform.isBrowser)return;if(!this._isInitialRender&&this._positionLocked&&this._lastPosition){this.reapplyLastPosition();return}this._clearPanelClasses(),this._resetOverlayElementStyles(),this._resetBoundingBoxStyles(),this._viewportRect=this._getNarrowedViewportRect(),this._originRect=this._getOriginRect(),this._overlayRect=this._pane.getBoundingClientRect(),this._containerRect=this._overlayContainer.getContainerElement().getBoundingClientRect();let n=this._originRect,t=this._overlayRect,i=this._viewportRect,r=this._containerRect,o=[],s;for(let a of this._preferredPositions){let c=this._getOriginPoint(n,r,a),h=this._getOverlayPoint(c,t,a),f=this._getOverlayFit(h,t,i,a);if(f.isCompletelyWithinViewport){this._isPushed=!1,this._applyPosition(a,c);return}if(this._canFitWithFlexibleDimensions(f,h,i)){o.push({position:a,origin:c,overlayRect:t,boundingBoxRect:this._calculateBoundingBoxRect(c,a)});continue}(!s||s.overlayFit.visibleAreac&&(c=f,a=h)}this._isPushed=!1,this._applyPosition(a.position,a.origin);return}if(this._canPush){this._isPushed=!0,this._applyPosition(s.position,s.originPoint);return}this._applyPosition(s.position,s.originPoint)}detach(){this._clearPanelClasses(),this._lastPosition=null,this._previousPushAmount=null,this._resizeSubscription.unsubscribe()}dispose(){this._isDisposed||(this._boundingBox&&Ri(this._boundingBox.style,{top:"",left:"",right:"",bottom:"",height:"",width:"",alignItems:"",justifyContent:""}),this._pane&&this._resetOverlayElementStyles(),this._overlayRef&&this._overlayRef.hostElement.classList.remove(wy),this.detach(),this._positionChanges.complete(),this._overlayRef=this._boundingBox=null,this._isDisposed=!0)}reapplyLastPosition(){if(this._isDisposed||!this._platform.isBrowser)return;let n=this._lastPosition;if(n){this._originRect=this._getOriginRect(),this._overlayRect=this._pane.getBoundingClientRect(),this._viewportRect=this._getNarrowedViewportRect(),this._containerRect=this._overlayContainer.getContainerElement().getBoundingClientRect();let t=this._getOriginPoint(this._originRect,this._containerRect,n);this._applyPosition(n,t)}else this.apply()}withScrollableContainers(n){return this._scrollables=n,this}withPositions(n){return this._preferredPositions=n,n.indexOf(this._lastPosition)===-1&&(this._lastPosition=null),this._validatePositions(),this}withViewportMargin(n){return this._viewportMargin=n,this}withFlexibleDimensions(n=!0){return this._hasFlexibleDimensions=n,this}withGrowAfterOpen(n=!0){return this._growAfterOpen=n,this}withPush(n=!0){return this._canPush=n,this}withLockedPosition(n=!0){return this._positionLocked=n,this}setOrigin(n){return this._origin=n,this}withDefaultOffsetX(n){return this._offsetX=n,this}withDefaultOffsetY(n){return this._offsetY=n,this}withTransformOriginOn(n){return this._transformOriginSelector=n,this}_getOriginPoint(n,t,i){let r;if(i.originX=="center")r=n.left+n.width/2;else{let s=this._isRtl()?n.right:n.left,a=this._isRtl()?n.left:n.right;r=i.originX=="start"?s:a}t.left<0&&(r-=t.left);let o;return i.originY=="center"?o=n.top+n.height/2:o=i.originY=="top"?n.top:n.bottom,t.top<0&&(o-=t.top),{x:r,y:o}}_getOverlayPoint(n,t,i){let r;i.overlayX=="center"?r=-t.width/2:i.overlayX==="start"?r=this._isRtl()?-t.width:0:r=this._isRtl()?0:-t.width;let o;return i.overlayY=="center"?o=-t.height/2:o=i.overlayY=="top"?0:-t.height,{x:n.x+r,y:n.y+o}}_getOverlayFit(n,t,i,r){let o=xy(t),{x:s,y:a}=n,c=this._getOffset(r,"x"),h=this._getOffset(r,"y");c&&(s+=c),h&&(a+=h);let f=0-s,p=s+o.width-i.width,b=0-a,_=a+o.height-i.height,x=this._subtractOverflows(o.width,f,p),M=this._subtractOverflows(o.height,b,_),k=x*M;return{visibleArea:k,isCompletelyWithinViewport:o.width*o.height===k,fitsInViewportVertically:M===o.height,fitsInViewportHorizontally:x==o.width}}_canFitWithFlexibleDimensions(n,t,i){if(this._hasFlexibleDimensions){let r=i.bottom-t.y,o=i.right-t.x,s=Cy(this._overlayRef.getConfig().minHeight),a=Cy(this._overlayRef.getConfig().minWidth),c=n.fitsInViewportVertically||s!=null&&s<=r,h=n.fitsInViewportHorizontally||a!=null&&a<=o;return c&&h}return!1}_pushOverlayOnScreen(n,t,i){if(this._previousPushAmount&&this._positionLocked)return{x:n.x+this._previousPushAmount.x,y:n.y+this._previousPushAmount.y};let r=xy(t),o=this._viewportRect,s=Math.max(n.x+r.width-o.width,0),a=Math.max(n.y+r.height-o.height,0),c=Math.max(o.top-i.top-n.y,0),h=Math.max(o.left-i.left-n.x,0),f=0,p=0;return r.width<=o.width?f=h||-s:f=n.xx&&!this._isInitialRender&&!this._growAfterOpen&&(s=n.y-x/2)}let c=t.overlayX==="start"&&!r||t.overlayX==="end"&&r,h=t.overlayX==="end"&&!r||t.overlayX==="start"&&r,f,p,b;if(h)b=i.width-n.x+this._viewportMargin*2,f=n.x-this._viewportMargin;else if(c)p=n.x,f=i.right-n.x;else{let _=Math.min(i.right-n.x+i.left,n.x),x=this._lastBoundingBoxSize.width;f=_*2,p=n.x-_,f>x&&!this._isInitialRender&&!this._growAfterOpen&&(p=n.x-x/2)}return{top:s,left:p,bottom:a,right:b,width:f,height:o}}_setBoundingBoxStyles(n,t){let i=this._calculateBoundingBoxRect(n,t);!this._isInitialRender&&!this._growAfterOpen&&(i.height=Math.min(i.height,this._lastBoundingBoxSize.height),i.width=Math.min(i.width,this._lastBoundingBoxSize.width));let r={};if(this._hasExactPosition())r.top=r.left="0",r.bottom=r.right=r.maxHeight=r.maxWidth="",r.width=r.height="100%";else{let o=this._overlayRef.getConfig().maxHeight,s=this._overlayRef.getConfig().maxWidth;r.height=Le(i.height),r.top=Le(i.top),r.bottom=Le(i.bottom),r.width=Le(i.width),r.left=Le(i.left),r.right=Le(i.right),t.overlayX==="center"?r.alignItems="center":r.alignItems=t.overlayX==="end"?"flex-end":"flex-start",t.overlayY==="center"?r.justifyContent="center":r.justifyContent=t.overlayY==="bottom"?"flex-end":"flex-start",o&&(r.maxHeight=Le(o)),s&&(r.maxWidth=Le(s))}this._lastBoundingBoxSize=i,Ri(this._boundingBox.style,r)}_resetBoundingBoxStyles(){Ri(this._boundingBox.style,{top:"0",left:"0",right:"0",bottom:"0",height:"",width:"",alignItems:"",justifyContent:""})}_resetOverlayElementStyles(){Ri(this._pane.style,{top:"",left:"",bottom:"",right:"",position:"",transform:""})}_setOverlayElementStyles(n,t){let i={},r=this._hasExactPosition(),o=this._hasFlexibleDimensions,s=this._overlayRef.getConfig();if(r){let f=this._viewportRuler.getViewportScrollPosition();Ri(i,this._getExactOverlayY(t,n,f)),Ri(i,this._getExactOverlayX(t,n,f))}else i.position="static";let a="",c=this._getOffset(t,"x"),h=this._getOffset(t,"y");c&&(a+=`translateX(${c}px) `),h&&(a+=`translateY(${h}px)`),i.transform=a.trim(),s.maxHeight&&(r?i.maxHeight=Le(s.maxHeight):o&&(i.maxHeight="")),s.maxWidth&&(r?i.maxWidth=Le(s.maxWidth):o&&(i.maxWidth="")),Ri(this._pane.style,i)}_getExactOverlayY(n,t,i){let r={top:"",bottom:""},o=this._getOverlayPoint(t,this._overlayRect,n);if(this._isPushed&&(o=this._pushOverlayOnScreen(o,this._overlayRect,i)),n.overlayY==="bottom"){let s=this._document.documentElement.clientHeight;r.bottom=`${s-(o.y+this._overlayRect.height)}px`}else r.top=Le(o.y);return r}_getExactOverlayX(n,t,i){let r={left:"",right:""},o=this._getOverlayPoint(t,this._overlayRect,n);this._isPushed&&(o=this._pushOverlayOnScreen(o,this._overlayRect,i));let s;if(this._isRtl()?s=n.overlayX==="end"?"left":"right":s=n.overlayX==="end"?"right":"left",s==="right"){let a=this._document.documentElement.clientWidth;r.right=`${a-(o.x+this._overlayRect.width)}px`}else r.left=Le(o.x);return r}_getScrollVisibility(){let n=this._getOriginRect(),t=this._pane.getBoundingClientRect(),i=this._scrollables.map(r=>r.getElementRef().nativeElement.getBoundingClientRect());return{isOriginClipped:by(n,i),isOriginOutsideView:Ff(n,i),isOverlayClipped:by(t,i),isOverlayOutsideView:Ff(t,i)}}_subtractOverflows(n,...t){return t.reduce((i,r)=>i-Math.max(r,0),n)}_getNarrowedViewportRect(){let n=this._document.documentElement.clientWidth,t=this._document.documentElement.clientHeight,i=this._viewportRuler.getViewportScrollPosition();return{top:i.top+this._viewportMargin,left:i.left+this._viewportMargin,right:i.left+n-this._viewportMargin,bottom:i.top+t-this._viewportMargin,width:n-2*this._viewportMargin,height:t-2*this._viewportMargin}}_isRtl(){return this._overlayRef.getDirection()==="rtl"}_hasExactPosition(){return!this._hasFlexibleDimensions||this._isPushed}_getOffset(n,t){return t==="x"?n.offsetX==null?this._offsetX:n.offsetX:n.offsetY==null?this._offsetY:n.offsetY}_validatePositions(){}_addPanelClasses(n){this._pane&&Lr(n).forEach(t=>{t!==""&&this._appliedPanelClasses.indexOf(t)===-1&&(this._appliedPanelClasses.push(t),this._pane.classList.add(t))})}_clearPanelClasses(){this._pane&&(this._appliedPanelClasses.forEach(n=>{this._pane.classList.remove(n)}),this._appliedPanelClasses=[])}_getOriginRect(){let n=this._origin;if(n instanceof re)return n.nativeElement.getBoundingClientRect();if(n instanceof Element)return n.getBoundingClientRect();let t=n.width||0,i=n.height||0;return{top:n.y,bottom:n.y+i,left:n.x,right:n.x+t,height:i,width:t}}};function Ri(e,n){for(let t in n)n.hasOwnProperty(t)&&(e[t]=n[t]);return e}function Cy(e){if(typeof e!="number"&&e!=null){let[n,t]=e.split(lO);return!t||t==="px"?parseFloat(n):null}return e||null}function xy(e){return{top:Math.floor(e.top),right:Math.floor(e.right),bottom:Math.floor(e.bottom),left:Math.floor(e.left),width:Math.floor(e.width),height:Math.floor(e.height)}}function dO(e,n){return e===n?!0:e.isOriginClipped===n.isOriginClipped&&e.isOriginOutsideView===n.isOriginOutsideView&&e.isOverlayClipped===n.isOverlayClipped&&e.isOverlayOutsideView===n.isOverlayOutsideView}var Dy="cdk-global-overlay-wrapper",Bf=class{constructor(){this._cssPosition="static",this._topOffset="",this._bottomOffset="",this._alignItems="",this._xPosition="",this._xOffset="",this._width="",this._height="",this._isDisposed=!1}attach(n){let t=n.getConfig();this._overlayRef=n,this._width&&!t.width&&n.updateSize({width:this._width}),this._height&&!t.height&&n.updateSize({height:this._height}),n.hostElement.classList.add(Dy),this._isDisposed=!1}top(n=""){return this._bottomOffset="",this._topOffset=n,this._alignItems="flex-start",this}left(n=""){return this._xOffset=n,this._xPosition="left",this}bottom(n=""){return this._topOffset="",this._bottomOffset=n,this._alignItems="flex-end",this}right(n=""){return this._xOffset=n,this._xPosition="right",this}start(n=""){return this._xOffset=n,this._xPosition="start",this}end(n=""){return this._xOffset=n,this._xPosition="end",this}width(n=""){return this._overlayRef?this._overlayRef.updateSize({width:n}):this._width=n,this}height(n=""){return this._overlayRef?this._overlayRef.updateSize({height:n}):this._height=n,this}centerHorizontally(n=""){return this.left(n),this._xPosition="center",this}centerVertically(n=""){return this.top(n),this._alignItems="center",this}apply(){if(!this._overlayRef||!this._overlayRef.hasAttached())return;let n=this._overlayRef.overlayElement.style,t=this._overlayRef.hostElement.style,i=this._overlayRef.getConfig(),{width:r,height:o,maxWidth:s,maxHeight:a}=i,c=(r==="100%"||r==="100vw")&&(!s||s==="100%"||s==="100vw"),h=(o==="100%"||o==="100vh")&&(!a||a==="100%"||a==="100vh"),f=this._xPosition,p=this._xOffset,b=this._overlayRef.getConfig().direction==="rtl",_="",x="",M="";c?M="flex-start":f==="center"?(M="center",b?x=p:_=p):b?f==="left"||f==="end"?(M="flex-end",_=p):(f==="right"||f==="start")&&(M="flex-start",x=p):f==="left"||f==="start"?(M="flex-start",_=p):(f==="right"||f==="end")&&(M="flex-end",x=p),n.position=this._cssPosition,n.marginLeft=c?"0":_,n.marginTop=h?"0":this._topOffset,n.marginBottom=this._bottomOffset,n.marginRight=c?"0":x,t.justifyContent=M,t.alignItems=h?"flex-start":this._alignItems}dispose(){if(this._isDisposed||!this._overlayRef)return;let n=this._overlayRef.overlayElement.style,t=this._overlayRef.hostElement,i=t.style;t.classList.remove(Dy),i.justifyContent=i.alignItems=n.marginTop=n.marginBottom=n.marginLeft=n.marginRight=n.position="",this._overlayRef=null,this._isDisposed=!0}},uO=(()=>{class e{constructor(t,i,r,o){this._viewportRuler=t,this._document=i,this._platform=r,this._overlayContainer=o}global(){return new Bf}flexibleConnectedTo(t){return new jf(t,this._viewportRuler,this._document,this._platform,this._overlayContainer)}static{this.\u0275fac=function(i){return new(i||e)(v(Of),v(W),v(Be),v($r))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),hO=0,Zt=(()=>{class e{constructor(t,i,r,o,s,a,c,h,f,p,b,_){this.scrollStrategies=t,this._overlayContainer=i,this._componentFactoryResolver=r,this._positionBuilder=o,this._keyboardDispatcher=s,this._injector=a,this._ngZone=c,this._document=h,this._directionality=f,this._location=p,this._outsideClickDispatcher=b,this._animationsModuleType=_}create(t){let i=this._createHostElement(),r=this._createPaneElement(i),o=this._createPortalOutlet(r),s=new ys(t);return s.direction=s.direction||this._directionality.value,new Vn(o,i,r,s,this._ngZone,this._keyboardDispatcher,this._document,this._location,this._outsideClickDispatcher,this._animationsModuleType==="NoopAnimations")}position(){return this._positionBuilder}_createPaneElement(t){let i=this._document.createElement("div");return i.id=`cdk-overlay-${hO++}`,i.classList.add("cdk-overlay-pane"),t.appendChild(i),i}_createHostElement(){let t=this._document.createElement("div");return this._overlayContainer.getContainerElement().appendChild(t),t}_createPortalOutlet(t){return this._appRef||(this._appRef=this._injector.get(Sn)),new yl(t,this._componentFactoryResolver,this._appRef,this._injector,this._document)}static{this.\u0275fac=function(i){return new(i||e)(v(sO),v($r),v(Qn),v(uO),v(aO),v(Ae),v(F),v(W),v(gs),v(dn),v(cO),v(wn,8))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();var fO=new O("cdk-connected-overlay-scroll-strategy",{providedIn:"root",factory:()=>{let e=S(Zt);return()=>e.scrollStrategies.reposition()}});function pO(e){return()=>e.scrollStrategies.reposition()}var mO={provide:fO,deps:[Zt],useFactory:pO},Cl=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=G({type:e})}static{this.\u0275inj=z({providers:[Zt,mO],imports:[oi,Pi,kf,kf]})}}return e})();var gO=(()=>{class e{create(t){return typeof MutationObserver>"u"?null:new MutationObserver(t)}static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();var Sy=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=G({type:e})}static{this.\u0275inj=z({providers:[gO]})}}return e})();var My=new Set,Ni,vO=(()=>{class e{constructor(t,i){this._platform=t,this._nonce=i,this._matchMedia=this._platform.isBrowser&&window.matchMedia?window.matchMedia.bind(window):yO}matchMedia(t){return(this._platform.WEBKIT||this._platform.BLINK)&&_O(t,this._nonce),this._matchMedia(t)}static{this.\u0275fac=function(i){return new(i||e)(v(Be),v(vo,8))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function _O(e,n){if(!My.has(e))try{Ni||(Ni=document.createElement("style"),n&&Ni.setAttribute("nonce",n),Ni.setAttribute("type","text/css"),document.head.appendChild(Ni)),Ni.sheet&&(Ni.sheet.insertRule(`@media ${e} {body{ }}`,0),My.add(e))}catch(t){console.error(t)}}function yO(e){return{matches:e==="all"||e==="",media:e,addListener:()=>{},removeListener:()=>{}}}var Ay=(()=>{class e{constructor(t,i){this._mediaMatcher=t,this._zone=i,this._queries=new Map,this._destroySubject=new B}ngOnDestroy(){this._destroySubject.next(),this._destroySubject.complete()}isMatched(t){return Ty(Lr(t)).some(r=>this._registerQuery(r).mql.matches)}observe(t){let r=Ty(Lr(t)).map(s=>this._registerQuery(s).observable),o=di(r);return o=jn(o.pipe(Ue(1)),o.pipe(Kr(1),Qi(0))),o.pipe(U(s=>{let a={matches:!1,breakpoints:{}};return s.forEach(({matches:c,query:h})=>{a.matches=a.matches||c,a.breakpoints[h]=c}),a}))}_registerQuery(t){if(this._queries.has(t))return this._queries.get(t);let i=this._mediaMatcher.matchMedia(t),o={observable:new Z(s=>{let a=c=>this._zone.run(()=>s.next(c));return i.addListener(a),()=>{i.removeListener(a)}}).pipe(tn(i),U(({matches:s})=>({query:t,matches:s})),ot(this._destroySubject)),mql:i};return this._queries.set(t,o),o}static{this.\u0275fac=function(i){return new(i||e)(v(vO),v(F))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function Ty(e){return e.map(n=>n.split(",")).reduce((n,t)=>n.concat(t)).map(n=>n.trim())}var bs=(()=>{class e{constructor(t){this._platform=t}isDisabled(t){return t.hasAttribute("disabled")}isVisible(t){return wO(t)&&getComputedStyle(t).visibility==="visible"}isTabbable(t){if(!this._platform.isBrowser)return!1;let i=bO(TO(t));if(i&&(Oy(i)===-1||!this.isVisible(i)))return!1;let r=t.nodeName.toLowerCase(),o=Oy(t);return t.hasAttribute("contenteditable")?o!==-1:r==="iframe"||r==="object"||this._platform.WEBKIT&&this._platform.IOS&&!SO(t)?!1:r==="audio"?t.hasAttribute("controls")?o!==-1:!1:r==="video"?o===-1?!1:o!==null?!0:this._platform.FIREFOX||t.hasAttribute("controls"):t.tabIndex>=0}isFocusable(t,i){return MO(t)&&!this.isDisabled(t)&&(i?.ignoreVisibility||this.isVisible(t))}static{this.\u0275fac=function(i){return new(i||e)(v(Be))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function bO(e){try{return e.frameElement}catch{return null}}function wO(e){return!!(e.offsetWidth||e.offsetHeight||typeof e.getClientRects=="function"&&e.getClientRects().length)}function CO(e){let n=e.nodeName.toLowerCase();return n==="input"||n==="select"||n==="button"||n==="textarea"}function xO(e){return EO(e)&&e.type=="hidden"}function DO(e){return IO(e)&&e.hasAttribute("href")}function EO(e){return e.nodeName.toLowerCase()=="input"}function IO(e){return e.nodeName.toLowerCase()=="a"}function Ry(e){if(!e.hasAttribute("tabindex")||e.tabIndex===void 0)return!1;let n=e.getAttribute("tabindex");return!!(n&&!isNaN(parseInt(n,10)))}function Oy(e){if(!Ry(e))return null;let n=parseInt(e.getAttribute("tabindex")||"",10);return isNaN(n)?-1:n}function SO(e){let n=e.nodeName.toLowerCase(),t=n==="input"&&e.type;return t==="text"||t==="password"||n==="select"||n==="textarea"}function MO(e){return xO(e)?!1:CO(e)||DO(e)||e.hasAttribute("contenteditable")||Ry(e)}function TO(e){return e.ownerDocument&&e.ownerDocument.defaultView||window}var $f=class{get enabled(){return this._enabled}set enabled(n){this._enabled=n,this._startAnchor&&this._endAnchor&&(this._toggleAnchorTabIndex(n,this._startAnchor),this._toggleAnchorTabIndex(n,this._endAnchor))}constructor(n,t,i,r,o=!1){this._element=n,this._checker=t,this._ngZone=i,this._document=r,this._hasAttached=!1,this.startAnchorListener=()=>this.focusLastTabbableElement(),this.endAnchorListener=()=>this.focusFirstTabbableElement(),this._enabled=!0,o||this.attachAnchors()}destroy(){let n=this._startAnchor,t=this._endAnchor;n&&(n.removeEventListener("focus",this.startAnchorListener),n.remove()),t&&(t.removeEventListener("focus",this.endAnchorListener),t.remove()),this._startAnchor=this._endAnchor=null,this._hasAttached=!1}attachAnchors(){return this._hasAttached?!0:(this._ngZone.runOutsideAngular(()=>{this._startAnchor||(this._startAnchor=this._createAnchor(),this._startAnchor.addEventListener("focus",this.startAnchorListener)),this._endAnchor||(this._endAnchor=this._createAnchor(),this._endAnchor.addEventListener("focus",this.endAnchorListener))}),this._element.parentNode&&(this._element.parentNode.insertBefore(this._startAnchor,this._element),this._element.parentNode.insertBefore(this._endAnchor,this._element.nextSibling),this._hasAttached=!0),this._hasAttached)}focusInitialElementWhenReady(n){return new Promise(t=>{this._executeOnStable(()=>t(this.focusInitialElement(n)))})}focusFirstTabbableElementWhenReady(n){return new Promise(t=>{this._executeOnStable(()=>t(this.focusFirstTabbableElement(n)))})}focusLastTabbableElementWhenReady(n){return new Promise(t=>{this._executeOnStable(()=>t(this.focusLastTabbableElement(n)))})}_getRegionBoundary(n){let t=this._element.querySelectorAll(`[cdk-focus-region-${n}], [cdkFocusRegion${n}], [cdk-focus-${n}]`);return n=="start"?t.length?t[0]:this._getFirstTabbableElement(this._element):t.length?t[t.length-1]:this._getLastTabbableElement(this._element)}focusInitialElement(n){let t=this._element.querySelector("[cdk-focus-initial], [cdkFocusInitial]");if(t){if(!this._checker.isFocusable(t)){let i=this._getFirstTabbableElement(t);return i?.focus(n),!!i}return t.focus(n),!0}return this.focusFirstTabbableElement(n)}focusFirstTabbableElement(n){let t=this._getRegionBoundary("start");return t&&t.focus(n),!!t}focusLastTabbableElement(n){let t=this._getRegionBoundary("end");return t&&t.focus(n),!!t}hasAttached(){return this._hasAttached}_getFirstTabbableElement(n){if(this._checker.isFocusable(n)&&this._checker.isTabbable(n))return n;let t=n.children;for(let i=0;i=0;i--){let r=t[i].nodeType===this._document.ELEMENT_NODE?this._getLastTabbableElement(t[i]):null;if(r)return r}return null}_createAnchor(){let n=this._document.createElement("div");return this._toggleAnchorTabIndex(this._enabled,n),n.classList.add("cdk-visually-hidden"),n.classList.add("cdk-focus-trap-anchor"),n.setAttribute("aria-hidden","true"),n}_toggleAnchorTabIndex(n,t){n?t.setAttribute("tabindex","0"):t.removeAttribute("tabindex")}toggleAnchors(n){this._startAnchor&&this._endAnchor&&(this._toggleAnchorTabIndex(n,this._startAnchor),this._toggleAnchorTabIndex(n,this._endAnchor))}_executeOnStable(n){this._ngZone.isStable?n():this._ngZone.onStable.pipe(Ue(1)).subscribe(n)}},El=(()=>{class e{constructor(t,i,r){this._checker=t,this._ngZone=i,this._document=r}create(t,i=!1){return new $f(t,this._checker,this._ngZone,this._document,i)}static{this.\u0275fac=function(i){return new(i||e)(v(bs),v(F),v(W))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function Hf(e){return e.buttons===0||e.detail===0}function zf(e){let n=e.touches&&e.touches[0]||e.changedTouches&&e.changedTouches[0];return!!n&&n.identifier===-1&&(n.radiusX==null||n.radiusX===1)&&(n.radiusY==null||n.radiusY===1)}var AO=new O("cdk-input-modality-detector-options"),OO={ignoreKeys:[18,17,224,91,16]},Ny=650,Hr=Vr({passive:!0,capture:!0}),kO=(()=>{class e{get mostRecentModality(){return this._modality.value}constructor(t,i,r,o){this._platform=t,this._mostRecentTarget=null,this._modality=new Ce(null),this._lastTouchMs=0,this._onKeydown=s=>{this._options?.ignoreKeys?.some(a=>a===s.keyCode)||(this._modality.next("keyboard"),this._mostRecentTarget=Qt(s))},this._onMousedown=s=>{Date.now()-this._lastTouchMs{if(zf(s)){this._modality.next("keyboard");return}this._lastTouchMs=Date.now(),this._modality.next("touch"),this._mostRecentTarget=Qt(s)},this._options=E(E({},OO),o),this.modalityDetected=this._modality.pipe(Kr(1)),this.modalityChanged=this.modalityDetected.pipe(Zi()),t.isBrowser&&i.runOutsideAngular(()=>{r.addEventListener("keydown",this._onKeydown,Hr),r.addEventListener("mousedown",this._onMousedown,Hr),r.addEventListener("touchstart",this._onTouchstart,Hr)})}ngOnDestroy(){this._modality.complete(),this._platform.isBrowser&&(document.removeEventListener("keydown",this._onKeydown,Hr),document.removeEventListener("mousedown",this._onMousedown,Hr),document.removeEventListener("touchstart",this._onTouchstart,Hr))}static{this.\u0275fac=function(i){return new(i||e)(v(Be),v(F),v(W),v(AO,8))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();var Dl=function(e){return e[e.IMMEDIATE=0]="IMMEDIATE",e[e.EVENTUAL=1]="EVENTUAL",e}(Dl||{}),PO=new O("cdk-focus-monitor-default-options"),xl=Vr({passive:!0,capture:!0}),zr=(()=>{class e{constructor(t,i,r,o,s){this._ngZone=t,this._platform=i,this._inputModalityDetector=r,this._origin=null,this._windowFocused=!1,this._originFromTouchInteraction=!1,this._elementInfo=new Map,this._monitoredElementCount=0,this._rootNodeFocusListenerCount=new Map,this._windowFocusListener=()=>{this._windowFocused=!0,this._windowFocusTimeoutId=window.setTimeout(()=>this._windowFocused=!1)},this._stopInputModalityDetector=new B,this._rootNodeFocusAndBlurListener=a=>{let c=Qt(a);for(let h=c;h;h=h.parentElement)a.type==="focus"?this._onFocus(a,h):this._onBlur(a,h)},this._document=o,this._detectionMode=s?.detectionMode||Dl.IMMEDIATE}monitor(t,i=!1){let r=Ln(t);if(!this._platform.isBrowser||r.nodeType!==1)return N();let o=gy(r)||this._getDocument(),s=this._elementInfo.get(r);if(s)return i&&(s.checkChildren=!0),s.subject;let a={checkChildren:i,subject:new B,rootNode:o};return this._elementInfo.set(r,a),this._registerGlobalListeners(a),a.subject}stopMonitoring(t){let i=Ln(t),r=this._elementInfo.get(i);r&&(r.subject.complete(),this._setClasses(i),this._elementInfo.delete(i),this._removeGlobalListeners(r))}focusVia(t,i,r){let o=Ln(t),s=this._getDocument().activeElement;o===s?this._getClosestElementsInfo(o).forEach(([a,c])=>this._originChanged(a,i,c)):(this._setOrigin(i),typeof o.focus=="function"&&o.focus(r))}ngOnDestroy(){this._elementInfo.forEach((t,i)=>this.stopMonitoring(i))}_getDocument(){return this._document||document}_getWindow(){return this._getDocument().defaultView||window}_getFocusOrigin(t){return this._origin?this._originFromTouchInteraction?this._shouldBeAttributedToTouch(t)?"touch":"program":this._origin:this._windowFocused&&this._lastFocusOrigin?this._lastFocusOrigin:t&&this._isLastInteractionFromInputLabel(t)?"mouse":"program"}_shouldBeAttributedToTouch(t){return this._detectionMode===Dl.EVENTUAL||!!t?.contains(this._inputModalityDetector._mostRecentTarget)}_setClasses(t,i){t.classList.toggle("cdk-focused",!!i),t.classList.toggle("cdk-touch-focused",i==="touch"),t.classList.toggle("cdk-keyboard-focused",i==="keyboard"),t.classList.toggle("cdk-mouse-focused",i==="mouse"),t.classList.toggle("cdk-program-focused",i==="program")}_setOrigin(t,i=!1){this._ngZone.runOutsideAngular(()=>{if(this._origin=t,this._originFromTouchInteraction=t==="touch"&&i,this._detectionMode===Dl.IMMEDIATE){clearTimeout(this._originTimeoutId);let r=this._originFromTouchInteraction?Ny:1;this._originTimeoutId=setTimeout(()=>this._origin=null,r)}})}_onFocus(t,i){let r=this._elementInfo.get(i),o=Qt(t);!r||!r.checkChildren&&i!==o||this._originChanged(i,this._getFocusOrigin(o),r)}_onBlur(t,i){let r=this._elementInfo.get(i);!r||r.checkChildren&&t.relatedTarget instanceof Node&&i.contains(t.relatedTarget)||(this._setClasses(i),this._emitOrigin(r,null))}_emitOrigin(t,i){t.subject.observers.length&&this._ngZone.run(()=>t.subject.next(i))}_registerGlobalListeners(t){if(!this._platform.isBrowser)return;let i=t.rootNode,r=this._rootNodeFocusListenerCount.get(i)||0;r||this._ngZone.runOutsideAngular(()=>{i.addEventListener("focus",this._rootNodeFocusAndBlurListener,xl),i.addEventListener("blur",this._rootNodeFocusAndBlurListener,xl)}),this._rootNodeFocusListenerCount.set(i,r+1),++this._monitoredElementCount===1&&(this._ngZone.runOutsideAngular(()=>{this._getWindow().addEventListener("focus",this._windowFocusListener)}),this._inputModalityDetector.modalityDetected.pipe(ot(this._stopInputModalityDetector)).subscribe(o=>{this._setOrigin(o,!0)}))}_removeGlobalListeners(t){let i=t.rootNode;if(this._rootNodeFocusListenerCount.has(i)){let r=this._rootNodeFocusListenerCount.get(i);r>1?this._rootNodeFocusListenerCount.set(i,r-1):(i.removeEventListener("focus",this._rootNodeFocusAndBlurListener,xl),i.removeEventListener("blur",this._rootNodeFocusAndBlurListener,xl),this._rootNodeFocusListenerCount.delete(i))}--this._monitoredElementCount||(this._getWindow().removeEventListener("focus",this._windowFocusListener),this._stopInputModalityDetector.next(),clearTimeout(this._windowFocusTimeoutId),clearTimeout(this._originTimeoutId))}_originChanged(t,i,r){this._setClasses(t,i),this._emitOrigin(r,i),this._lastFocusOrigin=i}_getClosestElementsInfo(t){let i=[];return this._elementInfo.forEach((r,o)=>{(o===t||r.checkChildren&&o.contains(t))&&i.push([o,r])}),i}_isLastInteractionFromInputLabel(t){let{_mostRecentTarget:i,mostRecentModality:r}=this._inputModalityDetector;if(r!=="mouse"||!i||i===t||t.nodeName!=="INPUT"&&t.nodeName!=="TEXTAREA"||t.disabled)return!1;let o=t.labels;if(o){for(let s=0;s{class e{constructor(t,i){this._platform=t,this._document=i,this._breakpointSubscription=S(Ay).observe("(forced-colors: active)").subscribe(()=>{this._hasCheckedHighContrastMode&&(this._hasCheckedHighContrastMode=!1,this._applyBodyHighContrastModeCssClasses())})}getHighContrastMode(){if(!this._platform.isBrowser)return Fi.NONE;let t=this._document.createElement("div");t.style.backgroundColor="rgb(1,2,3)",t.style.position="absolute",this._document.body.appendChild(t);let i=this._document.defaultView||window,r=i&&i.getComputedStyle?i.getComputedStyle(t):null,o=(r&&r.backgroundColor||"").replace(/ /g,"");switch(t.remove(),o){case"rgb(0,0,0)":case"rgb(45,50,54)":case"rgb(32,32,32)":return Fi.WHITE_ON_BLACK;case"rgb(255,255,255)":case"rgb(255,250,239)":return Fi.BLACK_ON_WHITE}return Fi.NONE}ngOnDestroy(){this._breakpointSubscription.unsubscribe()}_applyBodyHighContrastModeCssClasses(){if(!this._hasCheckedHighContrastMode&&this._platform.isBrowser&&this._document.body){let t=this._document.body.classList;t.remove(Uf,ky,Py),this._hasCheckedHighContrastMode=!0;let i=this.getHighContrastMode();i===Fi.BLACK_ON_WHITE?t.add(Uf,ky):i===Fi.WHITE_ON_BLACK&&t.add(Uf,Py)}}static{this.\u0275fac=function(i){return new(i||e)(v(Be),v(W))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})(),Fy=(()=>{class e{constructor(t){t._applyBodyHighContrastModeCssClasses()}static{this.\u0275fac=function(i){return new(i||e)(v(Gf))}}static{this.\u0275mod=G({type:e})}static{this.\u0275inj=z({imports:[Sy]})}}return e})();function RO(e,n){}var Li=class{constructor(){this.role="dialog",this.panelClass="",this.hasBackdrop=!0,this.backdropClass="",this.disableClose=!1,this.width="",this.height="",this.data=null,this.ariaDescribedBy=null,this.ariaLabelledBy=null,this.ariaLabel=null,this.ariaModal=!0,this.autoFocus="first-tabbable",this.restoreFocus=!0,this.closeOnNavigation=!0,this.closeOnDestroy=!0,this.closeOnOverlayDetachments=!0}};var Yf=(()=>{class e extends Ur{constructor(t,i,r,o,s,a,c,h){super(),this._elementRef=t,this._focusTrapFactory=i,this._config=o,this._interactivityChecker=s,this._ngZone=a,this._overlayRef=c,this._focusMonitor=h,this._platform=S(Be),this._focusTrap=null,this._elementFocusedBeforeDialogWasOpened=null,this._closeInteractionType=null,this._ariaLabelledByQueue=[],this._changeDetectorRef=S(Ve),this.attachDomPortal=f=>{this._portalOutlet.hasAttached();let p=this._portalOutlet.attachDomPortal(f);return this._contentAttached(),p},this._document=r,this._config.ariaLabelledBy&&this._ariaLabelledByQueue.push(this._config.ariaLabelledBy)}_addAriaLabelledBy(t){this._ariaLabelledByQueue.push(t),this._changeDetectorRef.markForCheck()}_removeAriaLabelledBy(t){let i=this._ariaLabelledByQueue.indexOf(t);i>-1&&(this._ariaLabelledByQueue.splice(i,1),this._changeDetectorRef.markForCheck())}_contentAttached(){this._initializeFocusTrap(),this._handleBackdropClicks(),this._captureInitialFocus()}_captureInitialFocus(){this._trapFocus()}ngOnDestroy(){this._restoreFocus()}attachComponentPortal(t){this._portalOutlet.hasAttached();let i=this._portalOutlet.attachComponentPortal(t);return this._contentAttached(),i}attachTemplatePortal(t){this._portalOutlet.hasAttached();let i=this._portalOutlet.attachTemplatePortal(t);return this._contentAttached(),i}_recaptureFocus(){this._containsFocus()||this._trapFocus()}_forceFocus(t,i){this._interactivityChecker.isFocusable(t)||(t.tabIndex=-1,this._ngZone.runOutsideAngular(()=>{let r=()=>{t.removeEventListener("blur",r),t.removeEventListener("mousedown",r),t.removeAttribute("tabindex")};t.addEventListener("blur",r),t.addEventListener("mousedown",r)})),t.focus(i)}_focusByCssSelector(t,i){let r=this._elementRef.nativeElement.querySelector(t);r&&this._forceFocus(r,i)}_trapFocus(){let t=this._elementRef.nativeElement;switch(this._config.autoFocus){case!1:case"dialog":this._containsFocus()||t.focus();break;case!0:case"first-tabbable":this._focusTrap?.focusInitialElementWhenReady().then(i=>{i||this._focusDialogContainer()});break;case"first-heading":this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role="heading"]');break;default:this._focusByCssSelector(this._config.autoFocus);break}}_restoreFocus(){let t=this._config.restoreFocus,i=null;if(typeof t=="string"?i=this._document.querySelector(t):typeof t=="boolean"?i=t?this._elementFocusedBeforeDialogWasOpened:null:t&&(i=t),this._config.restoreFocus&&i&&typeof i.focus=="function"){let r=fs(),o=this._elementRef.nativeElement;(!r||r===this._document.body||r===o||o.contains(r))&&(this._focusMonitor?(this._focusMonitor.focusVia(i,this._closeInteractionType),this._closeInteractionType=null):i.focus())}this._focusTrap&&this._focusTrap.destroy()}_focusDialogContainer(){this._elementRef.nativeElement.focus&&this._elementRef.nativeElement.focus()}_containsFocus(){let t=this._elementRef.nativeElement,i=fs();return t===i||t.contains(i)}_initializeFocusTrap(){this._platform.isBrowser&&(this._focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement),this._document&&(this._elementFocusedBeforeDialogWasOpened=fs()))}_handleBackdropClicks(){this._overlayRef.backdropClick().subscribe(()=>{this._config.disableClose&&this._recaptureFocus()})}static{this.\u0275fac=function(i){return new(i||e)(w(re),w(El),w(W,8),w(Li),w(bs),w(F),w(Vn),w(zr))}}static{this.\u0275cmp=pe({type:e,selectors:[["cdk-dialog-container"]],viewQuery:function(i,r){if(i&1&<(_s,7),i&2){let o;We(o=qe())&&(r._portalOutlet=o.first)}},hostAttrs:["tabindex","-1",1,"cdk-dialog-container"],hostVars:6,hostBindings:function(i,r){i&2&&le("id",r._config.id||null)("role",r._config.role)("aria-modal",r._config.ariaModal)("aria-labelledby",r._config.ariaLabel?null:r._ariaLabelledByQueue[0])("aria-label",r._config.ariaLabel)("aria-describedby",r._config.ariaDescribedBy||null)},standalone:!0,features:[He,Fe],decls:1,vars:0,consts:[["cdkPortalOutlet",""]],template:function(i,r){i&1&&R(0,RO,0,0,"ng-template",0)},dependencies:[_s],styles:[".cdk-dialog-container{display:block;width:100%;height:100%;min-height:inherit;max-height:inherit}"],encapsulation:2})}}return e})(),ws=class{constructor(n,t){this.overlayRef=n,this.config=t,this.closed=new B,this.disableClose=t.disableClose,this.backdropClick=n.backdropClick(),this.keydownEvents=n.keydownEvents(),this.outsidePointerEvents=n.outsidePointerEvents(),this.id=t.id,this.keydownEvents.subscribe(i=>{i.keyCode===27&&!this.disableClose&&!bl(i)&&(i.preventDefault(),this.close(void 0,{focusOrigin:"keyboard"}))}),this.backdropClick.subscribe(()=>{this.disableClose||this.close(void 0,{focusOrigin:"mouse"})}),this._detachSubscription=n.detachments().subscribe(()=>{t.closeOnOverlayDetachments!==!1&&this.close()})}close(n,t){if(this.containerInstance){let i=this.closed;this.containerInstance._closeInteractionType=t?.focusOrigin||"program",this._detachSubscription.unsubscribe(),this.overlayRef.dispose(),i.next(n),i.complete(),this.componentInstance=this.containerInstance=null}}updatePosition(){return this.overlayRef.updatePosition(),this}updateSize(n="",t=""){return this.overlayRef.updateSize({width:n,height:t}),this}addPanelClass(n){return this.overlayRef.addPanelClass(n),this}removePanelClass(n){return this.overlayRef.removePanelClass(n),this}},NO=new O("DialogScrollStrategy",{providedIn:"root",factory:()=>{let e=S(Zt);return()=>e.scrollStrategies.block()}}),FO=new O("DialogData"),LO=new O("DefaultDialogConfig");var VO=0,Qf=(()=>{class e{get openDialogs(){return this._parentDialog?this._parentDialog.openDialogs:this._openDialogsAtThisLevel}get afterOpened(){return this._parentDialog?this._parentDialog.afterOpened:this._afterOpenedAtThisLevel}constructor(t,i,r,o,s,a){this._overlay=t,this._injector=i,this._defaultOptions=r,this._parentDialog=o,this._overlayContainer=s,this._openDialogsAtThisLevel=[],this._afterAllClosedAtThisLevel=new B,this._afterOpenedAtThisLevel=new B,this._ariaHiddenElements=new Map,this.afterAllClosed=Bn(()=>this.openDialogs.length?this._getAfterAllClosed():this._getAfterAllClosed().pipe(tn(void 0))),this._scrollStrategy=a}open(t,i){let r=this._defaultOptions||new Li;i=E(E({},r),i),i.id=i.id||`cdk-dialog-${VO++}`,i.id&&this.getDialogById(i.id);let o=this._getOverlayConfig(i),s=this._overlay.create(o),a=new ws(s,i),c=this._attachContainer(s,a,i);return a.containerInstance=c,this._attachDialogContent(t,a,c,i),this.openDialogs.length||this._hideNonDialogContentFromAssistiveTechnology(),this.openDialogs.push(a),a.closed.subscribe(()=>this._removeOpenDialog(a,!0)),this.afterOpened.next(a),a}closeAll(){Wf(this.openDialogs,t=>t.close())}getDialogById(t){return this.openDialogs.find(i=>i.id===t)}ngOnDestroy(){Wf(this._openDialogsAtThisLevel,t=>{t.config.closeOnDestroy===!1&&this._removeOpenDialog(t,!1)}),Wf(this._openDialogsAtThisLevel,t=>t.close()),this._afterAllClosedAtThisLevel.complete(),this._afterOpenedAtThisLevel.complete(),this._openDialogsAtThisLevel=[]}_getOverlayConfig(t){let i=new ys({positionStrategy:t.positionStrategy||this._overlay.position().global().centerHorizontally().centerVertically(),scrollStrategy:t.scrollStrategy||this._scrollStrategy(),panelClass:t.panelClass,hasBackdrop:t.hasBackdrop,direction:t.direction,minWidth:t.minWidth,minHeight:t.minHeight,maxWidth:t.maxWidth,maxHeight:t.maxHeight,width:t.width,height:t.height,disposeOnNavigation:t.closeOnNavigation});return t.backdropClass&&(i.backdropClass=t.backdropClass),i}_attachContainer(t,i,r){let o=r.injector||r.viewContainerRef?.injector,s=[{provide:Li,useValue:r},{provide:ws,useValue:i},{provide:Vn,useValue:t}],a;r.container?typeof r.container=="function"?a=r.container:(a=r.container.type,s.push(...r.container.providers(r))):a=Yf;let c=new jr(a,r.viewContainerRef,Ae.create({parent:o||this._injector,providers:s}),r.componentFactoryResolver);return t.attach(c).instance}_attachDialogContent(t,i,r,o){if(t instanceof bt){let s=this._createInjector(o,i,r,void 0),a={$implicit:o.data,dialogRef:i};o.templateContext&&(a=E(E({},a),typeof o.templateContext=="function"?o.templateContext():o.templateContext)),r.attachTemplatePortal(new Br(t,null,a,s))}else{let s=this._createInjector(o,i,r,this._injector),a=r.attachComponentPortal(new jr(t,o.viewContainerRef,s,o.componentFactoryResolver));i.componentRef=a,i.componentInstance=a.instance}}_createInjector(t,i,r,o){let s=t.injector||t.viewContainerRef?.injector,a=[{provide:FO,useValue:t.data},{provide:ws,useValue:i}];return t.providers&&(typeof t.providers=="function"?a.push(...t.providers(i,t,r)):a.push(...t.providers)),t.direction&&(!s||!s.get(gs,null,{optional:!0}))&&a.push({provide:gs,useValue:{value:t.direction,change:N()}}),Ae.create({parent:s||o,providers:a})}_removeOpenDialog(t,i){let r=this.openDialogs.indexOf(t);r>-1&&(this.openDialogs.splice(r,1),this.openDialogs.length||(this._ariaHiddenElements.forEach((o,s)=>{o?s.setAttribute("aria-hidden",o):s.removeAttribute("aria-hidden")}),this._ariaHiddenElements.clear(),i&&this._getAfterAllClosed().next()))}_hideNonDialogContentFromAssistiveTechnology(){let t=this._overlayContainer.getContainerElement();if(t.parentElement){let i=t.parentElement.children;for(let r=i.length-1;r>-1;r--){let o=i[r];o!==t&&o.nodeName!=="SCRIPT"&&o.nodeName!=="STYLE"&&!o.hasAttribute("aria-live")&&(this._ariaHiddenElements.set(o,o.getAttribute("aria-hidden")),o.setAttribute("aria-hidden","true"))}}}_getAfterAllClosed(){let t=this._parentDialog;return t?t._getAfterAllClosed():this._afterAllClosedAtThisLevel}static{this.\u0275fac=function(i){return new(i||e)(v(Zt),v(Ae),v(LO,8),v(e,12),v($r),v(NO))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function Wf(e,n){let t=e.length;for(;t--;)n(e[t])}var Ly=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=G({type:e})}static{this.\u0275inj=z({providers:[Qf],imports:[Cl,Pi,Fy,Pi]})}}return e})();var jO=["mat-internal-form-field",""],BO=["*"];function UO(){return!0}var $O=new O("mat-sanity-checks",{providedIn:"root",factory:UO}),Rt=(()=>{class e{constructor(t,i,r){this._sanityChecks=i,this._document=r,this._hasDoneGlobalChecks=!1,t._applyBodyHighContrastModeCssClasses(),this._hasDoneGlobalChecks||(this._hasDoneGlobalChecks=!0)}_checkIsEnabled(t){return ps()?!1:typeof this._sanityChecks=="boolean"?this._sanityChecks:!!this._sanityChecks[t]}static{this.\u0275fac=function(i){return new(i||e)(v(Gf),v($O,8),v(W))}}static{this.\u0275mod=G({type:e})}static{this.\u0275inj=z({imports:[oi,oi]})}}return e})();var Pt=function(e){return e[e.FADING_IN=0]="FADING_IN",e[e.VISIBLE=1]="VISIBLE",e[e.FADING_OUT=2]="FADING_OUT",e[e.HIDDEN=3]="HIDDEN",e}(Pt||{}),Zf=class{constructor(n,t,i,r=!1){this._renderer=n,this.element=t,this.config=i,this._animationForciblyDisabledThroughCss=r,this.state=Pt.HIDDEN}fadeOut(){this._renderer.fadeOutRipple(this)}},Vy=Vr({passive:!0,capture:!0}),Kf=class{constructor(){this._events=new Map,this._delegateEventHandler=n=>{let t=Qt(n);t&&this._events.get(n.type)?.forEach((i,r)=>{(r===t||r.contains(t))&&i.forEach(o=>o.handleEvent(n))})}}addHandler(n,t,i,r){let o=this._events.get(t);if(o){let s=o.get(i);s?s.add(r):o.set(i,new Set([r]))}else this._events.set(t,new Map([[i,new Set([r])]])),n.runOutsideAngular(()=>{document.addEventListener(t,this._delegateEventHandler,Vy)})}removeHandler(n,t,i){let r=this._events.get(n);if(!r)return;let o=r.get(t);o&&(o.delete(i),o.size===0&&r.delete(t),r.size===0&&(this._events.delete(n),document.removeEventListener(n,this._delegateEventHandler,Vy)))}},jy={enterDuration:225,exitDuration:150},HO=800,By=Vr({passive:!0,capture:!0}),Uy=["mousedown","touchstart"],$y=["mouseup","mouseleave","touchend","touchcancel"],Xf=class e{static{this._eventManager=new Kf}constructor(n,t,i,r){this._target=n,this._ngZone=t,this._platform=r,this._isPointerDown=!1,this._activeRipples=new Map,this._pointerUpEventsRegistered=!1,r.isBrowser&&(this._containerElement=Ln(i))}fadeInRipple(n,t,i={}){let r=this._containerRect=this._containerRect||this._containerElement.getBoundingClientRect(),o=E(E({},jy),i.animation);i.centered&&(n=r.left+r.width/2,t=r.top+r.height/2);let s=i.radius||zO(n,t,r),a=n-r.left,c=t-r.top,h=o.enterDuration,f=document.createElement("div");f.classList.add("mat-ripple-element"),f.style.left=`${a-s}px`,f.style.top=`${c-s}px`,f.style.height=`${s*2}px`,f.style.width=`${s*2}px`,i.color!=null&&(f.style.backgroundColor=i.color),f.style.transitionDuration=`${h}ms`,this._containerElement.appendChild(f);let p=window.getComputedStyle(f),b=p.transitionProperty,_=p.transitionDuration,x=b==="none"||_==="0s"||_==="0s, 0s"||r.width===0&&r.height===0,M=new Zf(this,f,i,x);f.style.transform="scale3d(1, 1, 1)",M.state=Pt.FADING_IN,i.persistent||(this._mostRecentTransientRipple=M);let k=null;return!x&&(h||o.exitDuration)&&this._ngZone.runOutsideAngular(()=>{let V=()=>this._finishRippleTransition(M),De=()=>this._destroyRipple(M);f.addEventListener("transitionend",V),f.addEventListener("transitioncancel",De),k={onTransitionEnd:V,onTransitionCancel:De}}),this._activeRipples.set(M,k),(x||!h)&&this._finishRippleTransition(M),M}fadeOutRipple(n){if(n.state===Pt.FADING_OUT||n.state===Pt.HIDDEN)return;let t=n.element,i=E(E({},jy),n.config.animation);t.style.transitionDuration=`${i.exitDuration}ms`,t.style.opacity="0",n.state=Pt.FADING_OUT,(n._animationForciblyDisabledThroughCss||!i.exitDuration)&&this._finishRippleTransition(n)}fadeOutAll(){this._getActiveRipples().forEach(n=>n.fadeOut())}fadeOutAllNonPersistent(){this._getActiveRipples().forEach(n=>{n.config.persistent||n.fadeOut()})}setupTriggerEvents(n){let t=Ln(n);!this._platform.isBrowser||!t||t===this._triggerElement||(this._removeTriggerEvents(),this._triggerElement=t,Uy.forEach(i=>{e._eventManager.addHandler(this._ngZone,i,t,this)}))}handleEvent(n){n.type==="mousedown"?this._onMousedown(n):n.type==="touchstart"?this._onTouchStart(n):this._onPointerUp(),this._pointerUpEventsRegistered||(this._ngZone.runOutsideAngular(()=>{$y.forEach(t=>{this._triggerElement.addEventListener(t,this,By)})}),this._pointerUpEventsRegistered=!0)}_finishRippleTransition(n){n.state===Pt.FADING_IN?this._startFadeOutTransition(n):n.state===Pt.FADING_OUT&&this._destroyRipple(n)}_startFadeOutTransition(n){let t=n===this._mostRecentTransientRipple,{persistent:i}=n.config;n.state=Pt.VISIBLE,!i&&(!t||!this._isPointerDown)&&n.fadeOut()}_destroyRipple(n){let t=this._activeRipples.get(n)??null;this._activeRipples.delete(n),this._activeRipples.size||(this._containerRect=null),n===this._mostRecentTransientRipple&&(this._mostRecentTransientRipple=null),n.state=Pt.HIDDEN,t!==null&&(n.element.removeEventListener("transitionend",t.onTransitionEnd),n.element.removeEventListener("transitioncancel",t.onTransitionCancel)),n.element.remove()}_onMousedown(n){let t=Hf(n),i=this._lastTouchStartEvent&&Date.now(){let t=n.state===Pt.VISIBLE||n.config.terminateOnPointerUp&&n.state===Pt.FADING_IN;!n.config.persistent&&t&&n.fadeOut()}))}_getActiveRipples(){return Array.from(this._activeRipples.keys())}_removeTriggerEvents(){let n=this._triggerElement;n&&(Uy.forEach(t=>e._eventManager.removeHandler(t,n,this)),this._pointerUpEventsRegistered&&($y.forEach(t=>n.removeEventListener(t,this,By)),this._pointerUpEventsRegistered=!1))}};function zO(e,n,t){let i=Math.max(Math.abs(e-t.left),Math.abs(e-t.right)),r=Math.max(Math.abs(n-t.top),Math.abs(n-t.bottom));return Math.sqrt(i*i+r*r)}var GO=new O("mat-ripple-global-options"),Hy=(()=>{class e{get disabled(){return this._disabled}set disabled(t){t&&this.fadeOutAllNonPersistent(),this._disabled=t,this._setupTriggerEventsIfEnabled()}get trigger(){return this._trigger||this._elementRef.nativeElement}set trigger(t){this._trigger=t,this._setupTriggerEventsIfEnabled()}constructor(t,i,r,o,s){this._elementRef=t,this._animationMode=s,this.radius=0,this._disabled=!1,this._isInitialized=!1,this._globalOptions=o||{},this._rippleRenderer=new Xf(this,i,t,r)}ngOnInit(){this._isInitialized=!0,this._setupTriggerEventsIfEnabled()}ngOnDestroy(){this._rippleRenderer._removeTriggerEvents()}fadeOutAll(){this._rippleRenderer.fadeOutAll()}fadeOutAllNonPersistent(){this._rippleRenderer.fadeOutAllNonPersistent()}get rippleConfig(){return{centered:this.centered,radius:this.radius,color:this.color,animation:E(E(E({},this._globalOptions.animation),this._animationMode==="NoopAnimations"?{enterDuration:0,exitDuration:0}:{}),this.animation),terminateOnPointerUp:this._globalOptions.terminateOnPointerUp}}get rippleDisabled(){return this.disabled||!!this._globalOptions.disabled}_setupTriggerEventsIfEnabled(){!this.disabled&&this._isInitialized&&this._rippleRenderer.setupTriggerEvents(this.trigger)}launch(t,i=0,r){return typeof t=="number"?this._rippleRenderer.fadeInRipple(t,i,E(E({},this.rippleConfig),r)):this._rippleRenderer.fadeInRipple(0,0,E(E({},this.rippleConfig),t))}static{this.\u0275fac=function(i){return new(i||e)(w(re),w(F),w(Be),w(GO,8),w(wn,8))}}static{this.\u0275dir=ce({type:e,selectors:[["","mat-ripple",""],["","matRipple",""]],hostAttrs:[1,"mat-ripple"],hostVars:2,hostBindings:function(i,r){i&2&&he("mat-ripple-unbounded",r.unbounded)},inputs:{color:[$.None,"matRippleColor","color"],unbounded:[$.None,"matRippleUnbounded","unbounded"],centered:[$.None,"matRippleCentered","centered"],radius:[$.None,"matRippleRadius","radius"],animation:[$.None,"matRippleAnimation","animation"],disabled:[$.None,"matRippleDisabled","disabled"],trigger:[$.None,"matRippleTrigger","trigger"]},exportAs:["matRipple"],standalone:!0})}}return e})();var zy=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275cmp=pe({type:e,selectors:[["div","mat-internal-form-field",""]],hostAttrs:[1,"mdc-form-field","mat-internal-form-field"],hostVars:2,hostBindings:function(i,r){i&2&&he("mdc-form-field--align-end",r.labelPosition==="before")},inputs:{labelPosition:"labelPosition"},standalone:!0,features:[Fe],attrs:jO,ngContentSelectors:BO,decls:1,vars:0,template:function(i,r){i&1&&(Dn(),En(0))},styles:[".mdc-form-field{display:inline-flex;align-items:center;vertical-align:middle}.mdc-form-field[hidden]{display:none}.mdc-form-field>label{margin-left:0;margin-right:auto;padding-left:4px;padding-right:0;order:0}[dir=rtl] .mdc-form-field>label,.mdc-form-field>label[dir=rtl]{margin-left:auto;margin-right:0}[dir=rtl] .mdc-form-field>label,.mdc-form-field>label[dir=rtl]{padding-left:0;padding-right:4px}.mdc-form-field--nowrap>label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.mdc-form-field--align-end>label{margin-left:auto;margin-right:0;padding-left:0;padding-right:4px;order:-1}[dir=rtl] .mdc-form-field--align-end>label,.mdc-form-field--align-end>label[dir=rtl]{margin-left:0;margin-right:auto}[dir=rtl] .mdc-form-field--align-end>label,.mdc-form-field--align-end>label[dir=rtl]{padding-left:4px;padding-right:0}.mdc-form-field--space-between{justify-content:space-between}.mdc-form-field--space-between>label{margin:0}[dir=rtl] .mdc-form-field--space-between>label,.mdc-form-field--space-between>label[dir=rtl]{margin:0}.mdc-form-field{font-family:var(--mdc-form-field-label-text-font);line-height:var(--mdc-form-field-label-text-line-height);font-size:var(--mdc-form-field-label-text-size);font-weight:var(--mdc-form-field-label-text-weight);letter-spacing:var(--mdc-form-field-label-text-tracking);color:var(--mdc-form-field-label-text-color)}.mat-internal-form-field{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}"],encapsulation:2,changeDetection:0})}}return e})();var Cs=function(e){return e[e.State=0]="State",e[e.Transition=1]="Transition",e[e.Sequence=2]="Sequence",e[e.Group=3]="Group",e[e.Animate=4]="Animate",e[e.Keyframes=5]="Keyframes",e[e.Style=6]="Style",e[e.Trigger=7]="Trigger",e[e.Reference=8]="Reference",e[e.AnimateChild=9]="AnimateChild",e[e.AnimateRef=10]="AnimateRef",e[e.Query=11]="Query",e[e.Stagger=12]="Stagger",e}(Cs||{});function Gy(e,n){return{type:Cs.Trigger,name:e,definitions:n,options:{}}}function Jf(e,n=null){return{type:Cs.Animate,styles:n,timings:e}}function Sl(e){return{type:Cs.Style,styles:e,offset:null}}function ep(e,n,t=null){return{type:Cs.Transition,expr:e,animation:n,options:t}}function WO(e,n){}var xs=class{constructor(){this.role="dialog",this.panelClass="",this.hasBackdrop=!0,this.backdropClass="",this.disableClose=!1,this.width="",this.height="",this.data=null,this.ariaDescribedBy=null,this.ariaLabelledBy=null,this.ariaLabel=null,this.ariaModal=!0,this.autoFocus="first-tabbable",this.restoreFocus=!0,this.delayFocusTrap=!0,this.closeOnNavigation=!0}},tp="mdc-dialog--open",Wy="mdc-dialog--opening",qy="mdc-dialog--closing",qO=150,YO=75,QO=(()=>{class e extends Yf{constructor(t,i,r,o,s,a,c,h,f){super(t,i,r,o,s,a,c,f),this._animationMode=h,this._animationStateChanged=new ne,this._animationsEnabled=this._animationMode!=="NoopAnimations",this._actionSectionCount=0,this._hostElement=this._elementRef.nativeElement,this._enterAnimationDuration=this._animationsEnabled?Qy(this._config.enterAnimationDuration)??qO:0,this._exitAnimationDuration=this._animationsEnabled?Qy(this._config.exitAnimationDuration)??YO:0,this._animationTimer=null,this._finishDialogOpen=()=>{this._clearAnimationClasses(),this._openAnimationDone(this._enterAnimationDuration)},this._finishDialogClose=()=>{this._clearAnimationClasses(),this._animationStateChanged.emit({state:"closed",totalTime:this._exitAnimationDuration})}}_contentAttached(){super._contentAttached(),this._startOpenAnimation()}_startOpenAnimation(){this._animationStateChanged.emit({state:"opening",totalTime:this._enterAnimationDuration}),this._animationsEnabled?(this._hostElement.style.setProperty(Yy,`${this._enterAnimationDuration}ms`),this._requestAnimationFrame(()=>this._hostElement.classList.add(Wy,tp)),this._waitForAnimationToComplete(this._enterAnimationDuration,this._finishDialogOpen)):(this._hostElement.classList.add(tp),Promise.resolve().then(()=>this._finishDialogOpen()))}_startExitAnimation(){this._animationStateChanged.emit({state:"closing",totalTime:this._exitAnimationDuration}),this._hostElement.classList.remove(tp),this._animationsEnabled?(this._hostElement.style.setProperty(Yy,`${this._exitAnimationDuration}ms`),this._requestAnimationFrame(()=>this._hostElement.classList.add(qy)),this._waitForAnimationToComplete(this._exitAnimationDuration,this._finishDialogClose)):Promise.resolve().then(()=>this._finishDialogClose())}_updateActionSectionCount(t){this._actionSectionCount+=t,this._changeDetectorRef.markForCheck()}_clearAnimationClasses(){this._hostElement.classList.remove(Wy,qy)}_waitForAnimationToComplete(t,i){this._animationTimer!==null&&clearTimeout(this._animationTimer),this._animationTimer=setTimeout(i,t)}_requestAnimationFrame(t){this._ngZone.runOutsideAngular(()=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(t):t()})}_captureInitialFocus(){this._config.delayFocusTrap||this._trapFocus()}_openAnimationDone(t){this._config.delayFocusTrap&&this._trapFocus(),this._animationStateChanged.next({state:"opened",totalTime:t})}ngOnDestroy(){super.ngOnDestroy(),this._animationTimer!==null&&clearTimeout(this._animationTimer)}attachComponentPortal(t){let i=super.attachComponentPortal(t);return i.location.nativeElement.classList.add("mat-mdc-dialog-component-host"),i}static{this.\u0275fac=function(i){return new(i||e)(w(re),w(El),w(W,8),w(xs),w(bs),w(F),w(Vn),w(wn,8),w(zr))}}static{this.\u0275cmp=pe({type:e,selectors:[["mat-dialog-container"]],hostAttrs:["tabindex","-1",1,"mat-mdc-dialog-container","mdc-dialog"],hostVars:10,hostBindings:function(i,r){i&2&&(vr("id",r._config.id),le("aria-modal",r._config.ariaModal)("role",r._config.role)("aria-labelledby",r._config.ariaLabel?null:r._ariaLabelledByQueue[0])("aria-label",r._config.ariaLabel)("aria-describedby",r._config.ariaDescribedBy||null),he("_mat-animation-noopable",!r._animationsEnabled)("mat-mdc-dialog-container-with-actions",r._actionSectionCount>0))},standalone:!0,features:[He,Fe],decls:3,vars:0,consts:[[1,"mdc-dialog__container"],[1,"mat-mdc-dialog-surface","mdc-dialog__surface"],["cdkPortalOutlet",""]],template:function(i,r){i&1&&(d(0,"div",0)(1,"div",1),R(2,WO,0,0,"ng-template",2),l()())},dependencies:[_s],styles:['.mdc-elevation-overlay{position:absolute;border-radius:inherit;pointer-events:none;opacity:var(--mdc-elevation-overlay-opacity, 0);transition:opacity 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-dialog,.mdc-dialog__scrim{position:fixed;top:0;left:0;align-items:center;justify-content:center;box-sizing:border-box;width:100%;height:100%}.mdc-dialog{display:none;z-index:var(--mdc-dialog-z-index, 7)}.mdc-dialog .mdc-dialog__content{padding:20px 24px 20px 24px}.mdc-dialog .mdc-dialog__surface{min-width:280px}@media(max-width: 592px){.mdc-dialog .mdc-dialog__surface{max-width:calc(100vw - 32px)}}@media(min-width: 592px){.mdc-dialog .mdc-dialog__surface{max-width:560px}}.mdc-dialog .mdc-dialog__surface{max-height:calc(100% - 32px)}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-width:none}@media(max-width: 960px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-height:560px;width:560px}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{right:-12px}}@media(max-width: 720px)and (max-width: 672px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{width:calc(100vw - 112px)}}@media(max-width: 720px)and (min-width: 672px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{width:560px}}@media(max-width: 720px)and (max-height: 720px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-height:calc(100vh - 160px)}}@media(max-width: 720px)and (min-height: 720px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-height:560px}}@media(max-width: 720px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{right:-12px}}@media(max-width: 720px)and (max-height: 400px),(max-width: 600px),(min-width: 720px)and (max-height: 400px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{height:100%;max-height:100vh;max-width:100vw;width:100vw;border-radius:0}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{order:-1;left:-12px}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__header{padding:0 16px 9px;justify-content:flex-start}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__title{margin-left:calc(16px - 2 * 12px)}}@media(min-width: 960px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{width:calc(100vw - 400px)}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{right:-12px}}.mdc-dialog.mdc-dialog__scrim--hidden .mdc-dialog__scrim{opacity:0}.mdc-dialog__scrim{opacity:0;z-index:-1}.mdc-dialog__container{display:flex;flex-direction:row;align-items:center;justify-content:space-around;box-sizing:border-box;height:100%;opacity:0;pointer-events:none}.mdc-dialog__surface{position:relative;display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;box-sizing:border-box;max-width:100%;max-height:100%;pointer-events:auto;overflow-y:auto;outline:0;transform:scale(0.8)}.mdc-dialog__surface .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}[dir=rtl] .mdc-dialog__surface,.mdc-dialog__surface[dir=rtl]{text-align:right}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-dialog__surface{outline:2px solid windowText}}.mdc-dialog__surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:2px solid rgba(0,0,0,0);border-radius:inherit;content:"";pointer-events:none}@media screen and (forced-colors: active){.mdc-dialog__surface::before{border-color:CanvasText}}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.mdc-dialog__surface::before{content:none}}.mdc-dialog__title{display:block;margin-top:0;position:relative;flex-shrink:0;box-sizing:border-box;margin:0 0 1px;padding:0 24px 9px}.mdc-dialog__title::before{display:inline-block;width:0;height:40px;content:"";vertical-align:0}[dir=rtl] .mdc-dialog__title,.mdc-dialog__title[dir=rtl]{text-align:right}.mdc-dialog--scrollable .mdc-dialog__title{margin-bottom:1px;padding-bottom:15px}.mdc-dialog--fullscreen .mdc-dialog__header{align-items:baseline;border-bottom:1px solid rgba(0,0,0,0);display:inline-flex;justify-content:space-between;padding:0 24px 9px;z-index:1}@media screen and (forced-colors: active){.mdc-dialog--fullscreen .mdc-dialog__header{border-bottom-color:CanvasText}}.mdc-dialog--fullscreen .mdc-dialog__header .mdc-dialog__close{right:-12px}.mdc-dialog--fullscreen .mdc-dialog__title{margin-bottom:0;padding:0;border-bottom:0}.mdc-dialog--fullscreen.mdc-dialog--scrollable .mdc-dialog__title{border-bottom:0;margin-bottom:0}.mdc-dialog--fullscreen .mdc-dialog__close{top:5px}.mdc-dialog--fullscreen.mdc-dialog--scrollable .mdc-dialog__actions{border-top:1px solid rgba(0,0,0,0)}@media screen and (forced-colors: active){.mdc-dialog--fullscreen.mdc-dialog--scrollable .mdc-dialog__actions{border-top-color:CanvasText}}.mdc-dialog--fullscreen--titleless .mdc-dialog__close{margin-top:4px}.mdc-dialog--fullscreen--titleless.mdc-dialog--scrollable .mdc-dialog__close{margin-top:0}.mdc-dialog__content{flex-grow:1;box-sizing:border-box;margin:0;overflow:auto}.mdc-dialog__content>:first-child{margin-top:0}.mdc-dialog__content>:last-child{margin-bottom:0}.mdc-dialog__title+.mdc-dialog__content,.mdc-dialog__header+.mdc-dialog__content{padding-top:0}.mdc-dialog--scrollable .mdc-dialog__title+.mdc-dialog__content{padding-top:8px;padding-bottom:8px}.mdc-dialog__content .mdc-deprecated-list:first-child:last-child{padding:6px 0 0}.mdc-dialog--scrollable .mdc-dialog__content .mdc-deprecated-list:first-child:last-child{padding:0}.mdc-dialog__actions{display:flex;position:relative;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;box-sizing:border-box;min-height:52px;margin:0;padding:8px;border-top:1px solid rgba(0,0,0,0)}@media screen and (forced-colors: active){.mdc-dialog__actions{border-top-color:CanvasText}}.mdc-dialog--stacked .mdc-dialog__actions{flex-direction:column;align-items:flex-end}.mdc-dialog__button{margin-left:8px;margin-right:0;max-width:100%;text-align:right}[dir=rtl] .mdc-dialog__button,.mdc-dialog__button[dir=rtl]{margin-left:0;margin-right:8px}.mdc-dialog__button:first-child{margin-left:0;margin-right:0}[dir=rtl] .mdc-dialog__button:first-child,.mdc-dialog__button:first-child[dir=rtl]{margin-left:0;margin-right:0}[dir=rtl] .mdc-dialog__button,.mdc-dialog__button[dir=rtl]{text-align:left}.mdc-dialog--stacked .mdc-dialog__button:not(:first-child){margin-top:12px}.mdc-dialog--open,.mdc-dialog--opening,.mdc-dialog--closing{display:flex}.mdc-dialog--opening .mdc-dialog__scrim{transition:opacity 150ms linear}.mdc-dialog--opening .mdc-dialog__container{transition:opacity 75ms linear,transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-dialog--closing .mdc-dialog__scrim,.mdc-dialog--closing .mdc-dialog__container{transition:opacity 75ms linear}.mdc-dialog--closing .mdc-dialog__container{transform:none}.mdc-dialog--closing .mdc-dialog__surface{transform:none}.mdc-dialog--open .mdc-dialog__scrim{opacity:1}.mdc-dialog--open .mdc-dialog__container{opacity:1}.mdc-dialog--open .mdc-dialog__surface{transform:none}.mdc-dialog--open.mdc-dialog__surface-scrim--shown .mdc-dialog__surface-scrim{opacity:1}.mdc-dialog--open.mdc-dialog__surface-scrim--hiding .mdc-dialog__surface-scrim{transition:opacity 75ms linear}.mdc-dialog--open.mdc-dialog__surface-scrim--showing .mdc-dialog__surface-scrim{transition:opacity 150ms linear}.mdc-dialog__surface-scrim{display:none;opacity:0;position:absolute;width:100%;height:100%;z-index:1}.mdc-dialog__surface-scrim--shown .mdc-dialog__surface-scrim,.mdc-dialog__surface-scrim--showing .mdc-dialog__surface-scrim,.mdc-dialog__surface-scrim--hiding .mdc-dialog__surface-scrim{display:block}.mdc-dialog-scroll-lock{overflow:hidden}.mdc-dialog--no-content-padding .mdc-dialog__content{padding:0}.mdc-dialog--sheet .mdc-dialog__container .mdc-dialog__close{right:12px;top:9px;position:absolute;z-index:1}.mdc-dialog__scrim--removed{pointer-events:none}.mdc-dialog__scrim--removed .mdc-dialog__scrim,.mdc-dialog__scrim--removed .mdc-dialog__surface-scrim{display:none}.mat-mdc-dialog-content{max-height:65vh}.mat-mdc-dialog-container{position:static;display:block}.mat-mdc-dialog-container,.mat-mdc-dialog-container .mdc-dialog__container,.mat-mdc-dialog-container .mdc-dialog__surface{max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit}.mat-mdc-dialog-container .mdc-dialog__surface{width:100%;height:100%}.mat-mdc-dialog-component-host{display:contents}.mat-mdc-dialog-container{--mdc-dialog-container-elevation: var(--mdc-dialog-container-elevation-shadow);outline:0}.mat-mdc-dialog-container .mdc-dialog__surface{background-color:var(--mdc-dialog-container-color, white)}.mat-mdc-dialog-container .mdc-dialog__surface{box-shadow:var(--mdc-dialog-container-elevation, 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12))}.mat-mdc-dialog-container .mdc-dialog__surface{border-radius:var(--mdc-dialog-container-shape, 4px)}.mat-mdc-dialog-container .mdc-dialog__title{font-family:var(--mdc-dialog-subhead-font, Roboto, sans-serif);line-height:var(--mdc-dialog-subhead-line-height, 1.5rem);font-size:var(--mdc-dialog-subhead-size, 1rem);font-weight:var(--mdc-dialog-subhead-weight, 400);letter-spacing:var(--mdc-dialog-subhead-tracking, 0.03125em)}.mat-mdc-dialog-container .mdc-dialog__title{color:var(--mdc-dialog-subhead-color, rgba(0, 0, 0, 0.87))}.mat-mdc-dialog-container .mdc-dialog__content{font-family:var(--mdc-dialog-supporting-text-font, Roboto, sans-serif);line-height:var(--mdc-dialog-supporting-text-line-height, 1.5rem);font-size:var(--mdc-dialog-supporting-text-size, 1rem);font-weight:var(--mdc-dialog-supporting-text-weight, 400);letter-spacing:var(--mdc-dialog-supporting-text-tracking, 0.03125em)}.mat-mdc-dialog-container .mdc-dialog__content{color:var(--mdc-dialog-supporting-text-color, rgba(0, 0, 0, 0.6))}.mat-mdc-dialog-container .mdc-dialog__container{transition:opacity linear var(--mat-dialog-transition-duration, 0ms)}.mat-mdc-dialog-container .mdc-dialog__surface{transition:transform var(--mat-dialog-transition-duration, 0ms) 0ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-dialog-container._mat-animation-noopable .mdc-dialog__container,.mat-mdc-dialog-container._mat-animation-noopable .mdc-dialog__surface{transition:none}.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-max-width, 80vw);min-width:var(--mat-dialog-container-min-width, 0)}@media(max-width: 599px){.cdk-overlay-pane.mat-mdc-dialog-panel{max-width:var(--mat-dialog-container-small-max-width, 80vw)}}.mat-mdc-dialog-title{padding:var(--mat-dialog-headline-padding, 0 24px 9px)}.mat-mdc-dialog-content{display:block}.mat-mdc-dialog-container .mat-mdc-dialog-content{padding:var(--mat-dialog-content-padding, 20px 24px)}.mat-mdc-dialog-container-with-actions .mat-mdc-dialog-content{padding:var(--mat-dialog-with-actions-content-padding, 20px 24px)}.mat-mdc-dialog-container .mat-mdc-dialog-title+.mat-mdc-dialog-content{padding-top:0}.mat-mdc-dialog-actions{padding:var(--mat-dialog-actions-padding, 8px);justify-content:var(--mat-dialog-actions-alignment, start)}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-start,.mat-mdc-dialog-actions[align=start]{justify-content:start}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-center,.mat-mdc-dialog-actions[align=center]{justify-content:center}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-end,.mat-mdc-dialog-actions[align=end]{justify-content:flex-end}.mat-mdc-dialog-actions .mat-button-base+.mat-button-base,.mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-mdc-dialog-actions .mat-button-base+.mat-button-base,[dir=rtl] .mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}'],encapsulation:2})}}return e})(),Yy="--mat-dialog-transition-duration";function Qy(e){return e==null?null:typeof e=="number"?e:e.endsWith("ms")?us(e.substring(0,e.length-2)):e.endsWith("s")?us(e.substring(0,e.length-1))*1e3:e==="0"?0:null}var Ml=function(e){return e[e.OPEN=0]="OPEN",e[e.CLOSING=1]="CLOSING",e[e.CLOSED=2]="CLOSED",e}(Ml||{}),Ds=class{constructor(n,t,i){this._ref=n,this._containerInstance=i,this._afterOpened=new B,this._beforeClosed=new B,this._state=Ml.OPEN,this.disableClose=t.disableClose,this.id=n.id,n.addPanelClass("mat-mdc-dialog-panel"),i._animationStateChanged.pipe(be(r=>r.state==="opened"),Ue(1)).subscribe(()=>{this._afterOpened.next(),this._afterOpened.complete()}),i._animationStateChanged.pipe(be(r=>r.state==="closed"),Ue(1)).subscribe(()=>{clearTimeout(this._closeFallbackTimeout),this._finishDialogClose()}),n.overlayRef.detachments().subscribe(()=>{this._beforeClosed.next(this._result),this._beforeClosed.complete(),this._finishDialogClose()}),Zr(this.backdropClick(),this.keydownEvents().pipe(be(r=>r.keyCode===27&&!this.disableClose&&!bl(r)))).subscribe(r=>{this.disableClose||(r.preventDefault(),ZO(this,r.type==="keydown"?"keyboard":"mouse"))})}close(n){this._result=n,this._containerInstance._animationStateChanged.pipe(be(t=>t.state==="closing"),Ue(1)).subscribe(t=>{this._beforeClosed.next(n),this._beforeClosed.complete(),this._ref.overlayRef.detachBackdrop(),this._closeFallbackTimeout=setTimeout(()=>this._finishDialogClose(),t.totalTime+100)}),this._state=Ml.CLOSING,this._containerInstance._startExitAnimation()}afterOpened(){return this._afterOpened}afterClosed(){return this._ref.closed}beforeClosed(){return this._beforeClosed}backdropClick(){return this._ref.backdropClick}keydownEvents(){return this._ref.keydownEvents}updatePosition(n){let t=this._ref.config.positionStrategy;return n&&(n.left||n.right)?n.left?t.left(n.left):t.right(n.right):t.centerHorizontally(),n&&(n.top||n.bottom)?n.top?t.top(n.top):t.bottom(n.bottom):t.centerVertically(),this._ref.updatePosition(),this}updateSize(n="",t=""){return this._ref.updateSize(n,t),this}addPanelClass(n){return this._ref.addPanelClass(n),this}removePanelClass(n){return this._ref.removePanelClass(n),this}getState(){return this._state}_finishDialogClose(){this._state=Ml.CLOSED,this._ref.close(this._result,{focusOrigin:this._closeInteractionType}),this.componentInstance=null}};function ZO(e,n,t){return e._closeInteractionType=n,e.close(t)}var np=new O("MatMdcDialogData"),KO=new O("mat-mdc-dialog-default-options"),XO=new O("mat-mdc-dialog-scroll-strategy",{providedIn:"root",factory:()=>{let e=S(Zt);return()=>e.scrollStrategies.block()}});var JO=0,ip=(()=>{class e{get openDialogs(){return this._parentDialog?this._parentDialog.openDialogs:this._openDialogsAtThisLevel}get afterOpened(){return this._parentDialog?this._parentDialog.afterOpened:this._afterOpenedAtThisLevel}_getAfterAllClosed(){let t=this._parentDialog;return t?t._getAfterAllClosed():this._afterAllClosedAtThisLevel}constructor(t,i,r,o,s,a,c,h){this._overlay=t,this._defaultOptions=o,this._scrollStrategy=s,this._parentDialog=a,this._openDialogsAtThisLevel=[],this._afterAllClosedAtThisLevel=new B,this._afterOpenedAtThisLevel=new B,this.dialogConfigClass=xs,this.afterAllClosed=Bn(()=>this.openDialogs.length?this._getAfterAllClosed():this._getAfterAllClosed().pipe(tn(void 0))),this._dialog=i.get(Qf),this._dialogRefConstructor=Ds,this._dialogContainerType=QO,this._dialogDataToken=np}open(t,i){let r;i=E(E({},this._defaultOptions||new xs),i),i.id=i.id||`mat-mdc-dialog-${JO++}`,i.scrollStrategy=i.scrollStrategy||this._scrollStrategy();let o=this._dialog.open(t,ae(E({},i),{positionStrategy:this._overlay.position().global().centerHorizontally().centerVertically(),disableClose:!0,closeOnDestroy:!1,closeOnOverlayDetachments:!1,container:{type:this._dialogContainerType,providers:()=>[{provide:this.dialogConfigClass,useValue:i},{provide:Li,useValue:i}]},templateContext:()=>({dialogRef:r}),providers:(s,a,c)=>(r=new this._dialogRefConstructor(s,i,c),r.updatePosition(i?.position),[{provide:this._dialogContainerType,useValue:c},{provide:this._dialogDataToken,useValue:a.data},{provide:this._dialogRefConstructor,useValue:r}])}));return r.componentRef=o.componentRef,r.componentInstance=o.componentInstance,this.openDialogs.push(r),this.afterOpened.next(r),r.afterClosed().subscribe(()=>{let s=this.openDialogs.indexOf(r);s>-1&&(this.openDialogs.splice(s,1),this.openDialogs.length||this._getAfterAllClosed().next())}),r}closeAll(){this._closeDialogs(this.openDialogs)}getDialogById(t){return this.openDialogs.find(i=>i.id===t)}ngOnDestroy(){this._closeDialogs(this._openDialogsAtThisLevel),this._afterAllClosedAtThisLevel.complete(),this._afterOpenedAtThisLevel.complete()}_closeDialogs(t){let i=t.length;for(;i--;)t[i].close()}static{this.\u0275fac=function(i){return new(i||e)(v(Zt),v(Ae),v(dn,8),v(KO,8),v(XO),v(e,12),v($r),v(wn,8))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();var Zy=(()=>{class e{static{this.\u0275fac=function(i){return new(i||e)}}static{this.\u0275mod=G({type:e})}static{this.\u0275inj=z({providers:[ip],imports:[Ly,Cl,Pi,Rt,Rt]})}}return e})();var Xy=(()=>{class e{scorePronunciation(t,i){let r=new FormData;return r.append("audio",t,"student.webm"),r.append("word",i.toLowerCase()),this.http.post(this.scoreEndpoint,r)}constructor(t){this.http=t,this.apiBase=location.hostname.endsWith("hf.space")?"https://pykara-py-learn-backend.hf.space":"http://localhost:5000",this.scoreEndpoint=`${this.apiBase}/pronunciation/score`}static{this.\u0275fac=function(i){return new(i||e)(v(Rn))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();var tk=["videoEl"];function nk(e,n){if(e&1){let t=H();d(0,"video",42),I("ended",function(){T(t);let r=C();return A(r.onVideoEnded())}),u(1," Your browser does not support the video tag. "),l()}}function ik(e,n){if(e&1){let t=H();d(0,"video",43,0),I("play",function(){T(t);let r=C();return A(r.onVideoPlay())})("pause",function(){T(t);let r=C();return A(r.onVideoPause())})("ended",function(){T(t);let r=C();return A(r.onVideoEnded())}),u(2," Your browser does not support the video tag. "),l()}if(e&2){let t=C();y("src",t.videoSrc,ee)}}function rk(e,n){e&1&&(d(0,"span",44),u(1,"\u{1F399}\uFE0F"),l())}function ok(e,n){e&1&&(d(0,"span",44),u(1,"\u{1F3A4}"),l())}function sk(e,n){if(e&1&&(d(0,"span",45),u(1),Do(2,"number"),l()),e&2){let t=C();m(),Ie(Eo(2,1,t.timeLeft,"1.0-0"))}}var Jy=(()=>{class e{get current(){return this.items[this.index]}constructor(t,i,r,o){this.api=t,this.dialogRef=i,this.data=r,this.cdr=o,this.showVideo=!1,this.videoSrc="",this.isPlayingVideo=!1,this.playIconDataUrl="assets/pronunciation/play.png",this.pauseIconDataUrl="assets/pronunciation/pause.png",this.items=[{letter:"A",word:"Apple",phonetics:"/\u02C8\xE6p\u0259l/",imgSrc:"assets/pronunciation/animvideo/apple.mp4",audioSrc:"assets/pronunciation/audio/apple.mp3"},{letter:"B",word:"Ball",phonetics:"/b\u0254\u02D0l/",imgSrc:"assets/pronunciation/animvideo/ball.mp4",audioSrc:"assets/pronunciation/audio/ball.mp3"},{letter:"C",word:"Cat",phonetics:"/k\xE6t/",imgSrc:"assets/pronunciation/animvideo/cat.mp4",audioSrc:"assets/pronunciation/audio/cat.mp3"},{letter:"D",word:"Dog",phonetics:"/d\u0252\u0261/",imgSrc:"assets/pronunciation/animvideo/dog.mp4",audioSrc:"assets/pronunciation/audio/dog.mp3"},{letter:"E",word:"Egg",phonetics:"/e\u0261/",imgSrc:"assets/pronunciation/animvideo/egg.mp4",audioSrc:"assets/pronunciation/audio/egg.mp3"},{letter:"F",word:"Fish",phonetics:"/f\u026A\u0283/",imgSrc:"assets/pronunciation/animvideo/fish.mp4",audioSrc:"assets/pronunciation/audio/fish.mp3"},{letter:"G",word:"Grapes",phonetics:"/\u0261re\u026Aps/",imgSrc:"assets/pronunciation/animvideo/grapes.mp4",audioSrc:"assets/pronunciation/audio/grapes.mp3"},{letter:"H",word:"Hat",phonetics:"/h\xE6t/",imgSrc:"assets/pronunciation/animvideo/hat.mp4",audioSrc:"assets/pronunciation/audio/hat.mp3"},{letter:"I",word:"Ice cream",phonetics:"/\u02C8a\u026As \u02CCkri\u02D0m/",imgSrc:"assets/pronunciation/animvideo/icecream.mp4",audioSrc:"assets/pronunciation/audio/icecream.mp3"},{letter:"J",word:"Jar",phonetics:"/d\u0292\u0251\u02D0r/",imgSrc:"assets/pronunciation/animvideo/jar.mp4",audioSrc:"assets/pronunciation/audio/jar.mp3"},{letter:"K",word:"Kite",phonetics:"/ka\u026At/",imgSrc:"assets/pronunciation/animvideo/kite.mp4",audioSrc:"assets/pronunciation/audio/kite.mp3"},{letter:"L",word:"Lion",phonetics:"/\u02C8la\u026A\u0259n/",imgSrc:"assets/pronunciation/animvideo/lion.mp4",audioSrc:"assets/pronunciation/audio/lion.mp3"},{letter:"M",word:"Moon",phonetics:"/mu\u02D0n/",imgSrc:"assets/pronunciation/animvideo/moon.mp4",audioSrc:"assets/pronunciation/audio/moon.mp3"},{letter:"N",word:"Nest",phonetics:"/nest/",imgSrc:"assets/pronunciation/animvideo/nest.mp4",audioSrc:"assets/pronunciation/audio/nest.mp3"},{letter:"O",word:"Orange",phonetics:"/\u02C8\u0252r\u026And\u0292/",imgSrc:"assets/pronunciation/animvideo/orange.mp4",audioSrc:"assets/pronunciation/audio/orange.mp3"},{letter:"P",word:"Pig",phonetics:"/p\u026A\u0261/",imgSrc:"assets/pronunciation/animvideo/pig.mp4",audioSrc:"assets/pronunciation/audio/pig.mp3"},{letter:"Q",word:"Queen",phonetics:"/kwi\u02D0n/",imgSrc:"assets/pronunciation/animvideo/queen.mp4",audioSrc:"assets/pronunciation/audio/queen.mp3"},{letter:"R",word:"Rabbit",phonetics:"/\u02C8r\xE6b\u026At/",imgSrc:"assets/pronunciation/animvideo/rabbit.mp4",audioSrc:"assets/pronunciation/audio/rabbit.mp3"},{letter:"S",word:"Sun",phonetics:"/s\u028Cn/",imgSrc:"assets/pronunciation/animvideo/sun.mp4",audioSrc:"assets/pronunciation/audio/sun.mp3"},{letter:"T",word:"Tree",phonetics:"/tri\u02D0/",imgSrc:"assets/pronunciation/animvideo/tree.mp4",audioSrc:"assets/pronunciation/audio/tree.mp3"},{letter:"U",word:"Umbrella",phonetics:"/\u028Cm\u02C8brel\u0259/",imgSrc:"assets/pronunciation/animvideo/umbrella.mp4",audioSrc:"assets/pronunciation/audio/umbrella.mp3"},{letter:"V",word:"Van",phonetics:"/v\xE6n/",imgSrc:"assets/pronunciation/animvideo/van.mp4",audioSrc:"assets/pronunciation/audio/van.mp3"},{letter:"W",word:"Watch",phonetics:"/w\u0252t\u0283/",imgSrc:"assets/pronunciation/animvideo/watch.mp4",audioSrc:"assets/pronunciation/audio/watch.mp3"},{letter:"X",word:"Xylophone",phonetics:"/\u02C8za\u026Al\u0259f\u0259\u028An/",imgSrc:"assets/pronunciation/animvideo/xylophone.mp4",audioSrc:"assets/pronunciation/audio/xylophone.mp3"},{letter:"Y",word:"Yarn",phonetics:"/j\u0251\u02D0n/",imgSrc:"assets/pronunciation/animvideo/yarn.mp4",audioSrc:"assets/pronunciation/audio/yarn.mp3"},{letter:"Z",word:"Zebra",phonetics:"/\u02C8zebr\u0259/",imgSrc:"assets/pronunciation/animvideo/zebra.mp4",audioSrc:"assets/pronunciation/audio/zebra.mp3"}],this.index=0,this.isRecording=!1,this.isScoring=!1,this.isOscillating=!1,this.chunks=[],this.currentMimeType="audio/webm",this.recordedAudioUrl=null,this.lastRecordedBlob=null,this.lastSpeechAt=0,this.recordingStartedAt=0,this.hasSpoken=!1,this.silenceMs=3e3,this.startSilenceMs=3e3,this.silenceThreshold=.01,this.duration=3,this.isCountingDown=!1,this.timeLeft=this.duration,this.radius=38,this.circumference=2*Math.PI*this.radius,this.strokeDashoffset=this.circumference,this.showResult=!1,this.score=0,this.videoUrl="",this.lastVideoBlobUrl=null,this.shortfeedback="",this.cancelScoring$=new B,this.recordRunId=0}ngOnInit(){this.setupBestMimeType(),this.resetResult()}ngOnDestroy(){if(this.cancelScoring$.next(),this.cancelScoring$.complete(),this.stopTracks(),this.safeStopRecorder(),this.teardownAudioGraph(),this.lastVideoBlobUrl){try{URL.revokeObjectURL(this.lastVideoBlobUrl)}catch{}this.lastVideoBlobUrl=null}}toggleRecording(){return tt(this,null,function*(){if(this.isRecording){this.stopRecording(!1);return}this.startPreRecordCountdown()})}startPreRecordCountdown(){if(this.score=0,this.shortfeedback="",this.isCountingDown||this.isRecording)return;this.cancelScoring$.next(),this.isScoring=!1,this.isOscillating=!1,this.isCountingDown=!0,this.timeLeft=this.duration;let t=this.duration*1e3,i=performance.now();this.strokeDashoffset=this.circumference,this.preRecordIntervalId=window.setInterval(()=>{let r=performance.now()-i,o=Math.min(1,r/t);if(this.strokeDashoffset=this.circumference*(1-o),this.timeLeft=Math.ceil((t-r)/1e3),r>=t){if(this.preRecordIntervalId){try{clearInterval(this.preRecordIntervalId)}catch{}this.preRecordIntervalId=void 0}this.startRecordingInternal()}try{this.cdr.detectChanges()}catch{}},100)}startRecordingInternal(){return tt(this,null,function*(){this.isCountingDown=!1;let t=++this.recordRunId;this.mediaStream=yield navigator.mediaDevices.getUserMedia({audio:!0}),this.mediaRecorder=new MediaRecorder(this.mediaStream,{mimeType:this.currentMimeType}),this.chunks=[],this.mediaRecorder.ondataavailable=i=>i.data.size&&this.chunks.push(i.data),this.mediaRecorder.onstop=()=>{t===this.recordRunId&&this.onRecordingStopped(t)},this.isRecording=!0,this.setupSilenceDetection(this.mediaStream),this.mediaRecorder.start();try{this.cdr.detectChanges()}catch{}})}stopRecording(t=!1){if(this.isRecording){if(this.preRecordIntervalId){try{clearInterval(this.preRecordIntervalId)}catch{}this.preRecordIntervalId=void 0}this.isCountingDown=!1,this.isRecording=!1,this.safeStopRecorder(),this.stopTracks(),this.teardownAudioGraph();try{this.cdr.detectChanges()}catch{}}}safeStopRecorder(){try{this.mediaRecorder&&this.mediaRecorder.state!=="inactive"&&this.mediaRecorder.stop()}catch{}}onRecordingStopped(t){if(t!==this.recordRunId)return;let i=new Blob(this.chunks,{type:this.currentMimeType});if(this.chunks=[],!i||i.size<2e3){this.isOscillating=!1,this.isScoring=!1,this.shortfeedback="No voice detected. Please try again.",this.showResult=!0;try{this.cdr.detectChanges()}catch{}return}this.lastRecordedBlob=i,this.isOscillating=!0;try{this.cdr.detectChanges()}catch{}this.sendForScoring(i,this.current.word,t)}setupSilenceDetection(t){this.teardownAudioGraph(),this.audioCtx=new AudioContext,this.analyser=this.audioCtx.createAnalyser(),this.analyser.fftSize=2048,this.micSource=this.audioCtx.createMediaStreamSource(t),this.micSource.connect(this.analyser),this.recordingStartedAt=performance.now(),this.lastSpeechAt=this.recordingStartedAt,this.hasSpoken=!1;let i=()=>{if(!this.analyser||!this.isRecording)return;let r=new Float32Array(this.analyser.fftSize);this.analyser.getFloatTimeDomainData(r);let o=0;for(let c=0;cthis.silenceThreshold&&(this.lastSpeechAt=a,this.hasSpoken=!0),!this.hasSpoken&&a-this.recordingStartedAt>this.startSilenceMs){this.stopRecording(!0);return}if(this.hasSpoken&&a-this.lastSpeechAt>this.silenceMs){this.stopRecording(!0);return}this.silenceCheckId=window.setTimeout(i,100)};i()}teardownAudioGraph(){if(this.silenceCheckId){try{clearTimeout(this.silenceCheckId)}catch{}this.silenceCheckId=void 0}try{this.micSource?.disconnect()}catch{}try{this.analyser?.disconnect()}catch{}try{this.audioCtx?.close()}catch{}this.micSource=void 0,this.analyser=void 0,this.audioCtx=void 0}stopTracks(){this.mediaStream?.getTracks().forEach(t=>t.stop()),this.mediaStream=void 0}sendForScoring(t,i,r){r===this.recordRunId&&(this.isScoring=!0,this.api.scorePronunciation(t,i).pipe(ot(this.cancelScoring$),rt(()=>{this.isScoring=!1,this.isOscillating=!1;try{this.cdr.detectChanges()}catch{}})).subscribe(o=>{if(r===this.recordRunId){if(this.score=this.normalizeScore(o.score),this.shortfeedback=o.feedback,this.showResult=!0,o.videoBlobBase64){let s=Uint8Array.from(atob(o.videoBlobBase64),c=>c.charCodeAt(0)),a=new Blob([s],{type:"video/mp4"});if(this.lastVideoBlobUrl)try{URL.revokeObjectURL(this.lastVideoBlobUrl)}catch{}this.videoUrl=URL.createObjectURL(a),this.lastVideoBlobUrl=this.videoUrl,this.tryPlayFeedbackVideo(this.videoUrl)}try{this.cdr.detectChanges()}catch{}}},o=>{if(r===this.recordRunId){this.shortfeedback="Error while scoring. Please try again.",this.showResult=!0;try{this.cdr.detectChanges()}catch{}}}))}cancelAllRunningProcesses(){if(this.recordRunId++,this.cancelScoring$.next(),this.isScoring=!1,this.isOscillating=!1,this.preRecordIntervalId){try{clearInterval(this.preRecordIntervalId)}catch{}this.preRecordIntervalId=void 0}this.isCountingDown=!1,this.timeLeft=this.duration,this.strokeDashoffset=this.circumference,this.isRecording=!1,this.safeStopRecorder(),this.stopTracks(),this.teardownAudioGraph(),this.chunks=[],this.resetVideoPlayerState();try{this.cdr.detectChanges()}catch{}}resetVideoPlayerState(){try{let t=this.videoElRef?.nativeElement;t&&(t.pause(),t.currentTime=0,t.removeAttribute("src"),t.load())}catch{}this.showVideo=!1,this.videoSrc="",this.isPlayingVideo=!1}normalizeScore(t){let i=Number(t);return isNaN(i)?0:Math.min(100,Math.max(0,Math.round(i)))}tryPlayFeedbackVideo(t){this.showVideo=!0,this.videoSrc=t,setTimeout(()=>{let i=this.videoElRef?.nativeElement;i&&(i.src=t,i.load(),i.play().then(()=>{this.isPlayingVideo=!0;try{this.cdr.detectChanges()}catch{}}).catch(()=>{this.isPlayingVideo=!1;try{this.cdr.detectChanges()}catch{}}))},0)}setupBestMimeType(){let t=["audio/webm;codecs=opus","audio/webm","audio/ogg;codecs=opus","audio/ogg"];for(let i of t)try{if(typeof MediaRecorder<"u"&&typeof MediaRecorder.isTypeSupported=="function"&&MediaRecorder.isTypeSupported(i)){this.currentMimeType=i;return}}catch{}}resetResult(){this.showResult=!1,this.score=0,this.showVideo=!1,this.videoSrc="",this.shortfeedback=""}playWordAudio(){let t=this.current?.audioSrc||this.getAudioSrcFromWord(this.current.word);if(t)try{let i=new Audio(t);i.currentTime=0,i.play().catch(()=>{})}catch{}}getAudioSrcFromWord(t){return t?`assets/pronunciation/audio/${t.trim().toLowerCase().replace(/\s+/g,"-")}.mp3`:""}onVideoEnded(){this.resetVideoPlayerState(),this.isOscillating=!1;try{this.cdr.detectChanges()}catch{}}onVideoPlay(){this.isPlayingVideo=!0;try{this.cdr.detectChanges()}catch{}}onVideoPause(){this.isPlayingVideo=!1;try{this.cdr.detectChanges()}catch{}}toggleVideoPlay(){try{let t=this.videoElRef?.nativeElement;if(!this.showVideo){this.videoSrc=this.getVideoSrcFromWord(this.current.word),this.showVideo=!0,setTimeout(()=>{let i=this.videoElRef?.nativeElement;i&&(i.src=this.videoSrc,i.load(),i.play().then(()=>{this.isPlayingVideo=!0;try{this.cdr.detectChanges()}catch{}}).catch(()=>{this.isPlayingVideo=!1;try{this.cdr.detectChanges()}catch{}}))},0);return}if(!t)return;if(t.paused)t.play().then(()=>{this.isPlayingVideo=!0;try{this.cdr.detectChanges()}catch{}}).catch(()=>{this.isPlayingVideo=!1;try{this.cdr.detectChanges()}catch{}});else{t.pause(),this.isPlayingVideo=!1;try{this.cdr.detectChanges()}catch{}}}catch{}}getVideoSrcFromWord(t){return t?`assets/pronunciation/videos/${t.trim().toLowerCase().replace(/\s+/g,"-")}.mp4`:""}get needleAngle(){return-90+Math.max(0,Math.min(100,Number(this.score||0)))*1.8}prev(){this.index<=0||(this.cancelAllRunningProcesses(),this.index--,this.resetAfterNavigation())}next(){this.index>=this.items.length-1||(this.cancelAllRunningProcesses(),this.index++,this.resetAfterNavigation())}resetAfterNavigation(){if(this.cancelAllRunningProcesses(),this.score=0,this.showResult=!1,this.shortfeedback="",this.lastRecordedBlob=null,this.recordedAudioUrl){try{URL.revokeObjectURL(this.recordedAudioUrl)}catch{}this.recordedAudioUrl=null}try{this.cdr.detectChanges()}catch{}}closePopup(){this.cancelAllRunningProcesses(),this.dialogRef.close()}static{this.\u0275fac=function(i){return new(i||e)(w(Xy),w(Ds),w(np),w(Ve))}}static{this.\u0275cmp=pe({type:e,selectors:[["app-pronunciation"]],viewQuery:function(i,r){if(i&1&<(tk,5),i&2){let o;We(o=qe())&&(r.videoElRef=o.first)}},decls:53,vars:26,consts:[["videoEl",""],[1,"pp-page"],[1,"pp-header"],[1,"pp-main"],[1,"pp-left"],[1,"word-card"],[1,"word-img-wrap"],[1,"video-frame","square"],["autoplay","","loop","","muted","","preload","auto","playsinline","",3,"src"],[1,"word-text"],[1,"phonetic-pill"],[1,"image-container"],["src","assets/pronunciation/audio.png","alt","Play audio",1,"round-image",3,"click"],[1,"pp-center"],[1,"word-card","center-card"],[1,"center-media"],["src","assets/pronunciation/listening.mp4","class","media-rounded","autoplay","","loop","","muted","","height","469","width","521",3,"ended",4,"ngIf"],["class","media-rounded","autoplay","","muted","","height","469","width","521",3,"src","play","pause","ended",4,"ngIf"],[1,"controls-row"],["role","button","tabindex","0",1,"listen-img",3,"click","keydown.enter","keydown.space","src"],["type","button",1,"progress-btn",3,"click"],["width","85","height","85","viewBox","0 0 90 90","aria-hidden","true",1,"progress-ring"],["stroke","#3aaea8","stroke-width","6","fill","transparent","r","38","cx","45","cy","45",1,"progress-ring__background"],["stroke","#3aaea8","stroke-linecap","round","stroke-width","6","fill","transparent","r","38","cx","45","cy","45",1,"progress-ring__bar"],["aria-hidden","true",1,"label"],["class","action-text",4,"ngIf"],["class","seconds",4,"ngIf"],[1,"pp-right"],[1,"gauge-wrapper"],[1,"gauge"],[1,"gauge-arc"],[1,"needle"],[1,"mic-badge"],[1,"score-span"],[1,"fb-board"],["src","assets/pronunciation/board.png","alt","Slate"],[1,"center-text1"],[1,"container"],[1,"arrow","left",3,"click","disabled"],[1,"center-text"],[1,"arrow","right",3,"click","disabled"],["aria-label","Close",1,"user-guide-close-icon",3,"click"],["src","assets/pronunciation/listening.mp4","autoplay","","loop","","muted","","height","469","width","521",1,"media-rounded",3,"ended"],["autoplay","","muted","","height","469","width","521",1,"media-rounded",3,"play","pause","ended","src"],[1,"action-text"],[1,"seconds"]],template:function(i,r){i&1&&(d(0,"div",1)(1,"div",2)(2,"h1"),u(3,"Pronunciation Practice"),l()(),d(4,"div",3)(5,"div",4)(6,"div",5)(7,"div",6)(8,"div",7)(9,"video",8),u(10," Your browser does not support the video tag. "),l()()(),d(11,"div",9),u(12),l(),d(13,"div",10),u(14),l(),d(15,"div",11)(16,"img",12),I("click",function(){return r.playWordAudio()}),l()()()(),d(17,"div",13)(18,"div",14)(19,"div",15),R(20,nk,2,0,"video",16)(21,ik,3,1,"video",17),l(),d(22,"div",18)(23,"img",19),I("click",function(){return r.toggleVideoPlay()})("keydown.enter",function(){return r.toggleVideoPlay()})("keydown.space",function(s){return r.toggleVideoPlay(),s.preventDefault()}),l(),d(24,"button",20),I("click",function(){return r.toggleRecording()}),Wa(),d(25,"svg",21),g(26,"circle",22)(27,"circle",23),l(),Ig(),d(28,"div",24),R(29,rk,2,0,"span",25)(30,ok,2,0,"span",25)(31,sk,3,4,"span",26),l()()()()(),d(32,"div",27)(33,"div",28)(34,"div",29),g(35,"div",30)(36,"div",31),l(),d(37,"div",32)(38,"span",33),u(39),l()()(),d(40,"div",34),g(41,"img",35),d(42,"div",36),u(43),l()(),d(44,"div",37)(45,"button",38),I("click",function(){return r.prev()}),u(46,"\u2039"),l(),d(47,"span",39),u(48),l(),d(49,"button",40),I("click",function(){return r.next()}),u(50,"\u203A"),l()()()()(),d(51,"button",41),I("click",function(){return r.closePopup()}),u(52,"\xD7"),l()),i&2&&(m(9),y("src",r.current.imgSrc,ee),m(3),Ie(r.current.word),m(2),Se(" ",r.current.phonetics," "),m(6),y("ngIf",!r.showVideo),m(),y("ngIf",r.showVideo),m(2),y("src",r.isPlayingVideo?r.pauseIconDataUrl:r.playIconDataUrl,ee),le("alt",r.isPlayingVideo?"Pause pronunciation":"Play pronunciation")("aria-label",r.isPlayingVideo?"Pause pronunciation":"Play pronunciation")("aria-pressed",r.isPlayingVideo),m(),he("recording",r.isRecording),le("aria-pressed",r.isRecording),m(3),le("stroke-dasharray",r.circumference)("stroke-dashoffset",r.strokeDashoffset),m(2),y("ngIf",r.isRecording),m(),y("ngIf",!r.isCountingDown&&!r.isRecording),m(),y("ngIf",r.isCountingDown),m(5),wo("--angle",r.needleAngle+"deg"),he("oscillate",r.isOscillating),m(3),Se("",r.score,"%"),m(4),Se(" ",r.shortfeedback?r.shortfeedback:"Speak to get feedback"," "),m(2),y("disabled",r.index===0),m(3),Ie(r.current.letter),m(),y("disabled",r.index===r.items.length-1))},dependencies:[vt,Iv],styles:["[_nghost-%COMP%]{display:block;font-family:Raleway,Roboto,Helvetica Neue,sans-serif}.pp-page[_ngcontent-%COMP%]{height:85vh;padding:28px 24px 18px;box-sizing:border-box;border:7px solid #3aaea8;border-radius:1vw}.pp-header[_ngcontent-%COMP%]{text-align:center;margin-bottom:18px}.pp-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{margin:0;font-size:42px;font-weight:800;color:#3aaea8;letter-spacing:.3px}.pp-main[_ngcontent-%COMP%]{display:flex;gap:1vw;align-items:start;justify-content:space-around}.pp-left[_ngcontent-%COMP%]{display:flex;justify-content:center}.word-card[_ngcontent-%COMP%]{width:22vw;height:34vw;background:#e9f7f6;border-radius:18px;padding:22px 18px 26px;text-align:center;box-shadow:0 12px 26px #00000014;border:3px dashed #3aaea8;gap:.5vw;display:flex;flex-direction:column;align-items:center;justify-content:space-between}.word-img-wrap[_ngcontent-%COMP%]{width:20vw;height:20vw;display:flex;align-items:center;justify-content:center}.word-text[_ngcontent-%COMP%]{font-size:3vw;font-weight:800;color:#1f2b2a}.phonetic-pill[_ngcontent-%COMP%]{color:#3aaea8;font-size:1.5vw;font-weight:600}.pp-center[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:14px;position:relative}.center-card[_ngcontent-%COMP%]{width:30vw}.center-media[_ngcontent-%COMP%]{width:29vw;height:26vw;background-color:#e9f7f6}.center-media[_ngcontent-%COMP%] > video[_ngcontent-%COMP%]{object-fit:cover;border-radius:1vw}.controls-row[_ngcontent-%COMP%]{display:flex;margin-top:1.8vw;gap:2vw}.gauge-wrapper[_ngcontent-%COMP%]{position:relative;width:20vw;height:10vw}.gauge[_ngcontent-%COMP%]{position:absolute;left:50%;top:0;transform:translate(-50%);width:100%;height:100%;border-radius:260px 260px 0 0;overflow:hidden;background:#f3f3f3;box-shadow:0 4px 10px #00000040 inset}.gauge-arc[_ngcontent-%COMP%]{position:absolute;inset:0;border-radius:50%;background:conic-gradient(from 270deg,#e53935 0deg 45deg,#fb8c00 45deg 90deg,#fbc02d 90deg 135deg,#43a047 135deg 180deg,transparent 180deg 360deg);height:20vw}.needle[_ngcontent-%COMP%]{position:absolute;bottom:0vw;left:50%;width:.7vw;height:8vw;background:#333;transform:translate(-50%) rotate(var(--angle, -90deg));transform-origin:50% 100%;transition:transform .7s cubic-bezier(.2,.9,.2,1);border-radius:10px;box-shadow:0 2px 6px #00000080}@keyframes _ngcontent-%COMP%_needleOscillate{0%{transform:translate(-50%) rotate(-70deg)}25%{transform:translate(-50%) rotate(-20deg)}50%{transform:translate(-50%) rotate(60deg)}75%{transform:translate(-50%) rotate(-10deg)}to{transform:translate(-50%) rotate(-70deg)}}.needle.oscillate[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_needleOscillate 1.2s ease-in-out infinite;transition:none}.mic-badge[_ngcontent-%COMP%]{position:absolute;bottom:-.3vw;left:50%;transform:translate(-50%,35%);width:3vw;height:3vw;border-radius:50%;background:#000;box-shadow:0 8px 18px #0006;display:flex;align-items:center;justify-content:center}.score-span[_ngcontent-%COMP%]{color:#fff;font-size:1vw;font-weight:700}.fb-board[_ngcontent-%COMP%]{position:relative;top:-1vw;left:2vw;width:17vw}.fb-board[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:100%;display:block}.center-text1[_ngcontent-%COMP%]{position:absolute;top:60%;left:50%;transform:translate(-50%,-50%);color:#fff;font-size:1.2vw;font-weight:700;text-align:center;width:14vw}.video-frame[_ngcontent-%COMP%]{width:100%;aspect-ratio:16 / 9;border-radius:1vw;overflow:hidden;box-shadow:0 2px 6px #0000002e,0 12px 24px #00000029,0 24px 48px #0000001f}.video-frame.square[_ngcontent-%COMP%]{aspect-ratio:1 / 1}.video-frame[_ngcontent-%COMP%] > video[_ngcontent-%COMP%]{width:100%;height:100%;display:block;object-fit:cover}.listen-img[_ngcontent-%COMP%]{width:4.8vw;height:4.8vw;border-radius:50%;display:inline-block;object-fit:contain;cursor:pointer;-webkit-user-select:none;user-select:none;margin-right:1vw;box-shadow:0 10px 30px #0006;transition:all .3s ease;border:none}.listen-img[_ngcontent-%COMP%]:active{transform:scale(.98)}.listen-img.playing[_ngcontent-%COMP%], .listen-img[aria-pressed=true][_ngcontent-%COMP%]{filter:brightness(.95);box-shadow:0 18px 30px #00000029}.listen-img[_ngcontent-%COMP%]:focus{outline:3px solid rgba(58,174,168,.18);outline-offset:3px}.progress-btn[_ngcontent-%COMP%]{width:4.8vw;height:4.8vw;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;padding:0;border:none;background:#f07b48;position:relative;cursor:pointer;box-shadow:0 10px 30px #0006;transition:transform .12s ease,box-shadow .12s ease}.progress-btn[_ngcontent-%COMP%]:active{transform:scale(.98)}.progress-btn.recording[_ngcontent-%COMP%]{filter:brightness(.95);animation:_ngcontent-%COMP%_recPulse 1s infinite}@keyframes _ngcontent-%COMP%_recPulse{0%{box-shadow:0 0 #f07b48}70%{box-shadow:0 0 0 18px #f07b4800}to{box-shadow:0 0 #f07b4800}}.progress-ring[_ngcontent-%COMP%]{width:100%;height:100%;transform:rotate(-90deg);display:block}.progress-ring__background[_ngcontent-%COMP%]{stroke:#eee;opacity:1}.progress-ring__bar[_ngcontent-%COMP%]{stroke:#3aaea8;transition:stroke-dashoffset .12s linear}.label[_ngcontent-%COMP%]{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;pointer-events:none;font-weight:700;color:#222;font-size:2.5rem}.seconds[_ngcontent-%COMP%]{color:#fff;padding:4px 8px;border-radius:6px}.container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;gap:40px}.arrow[_ngcontent-%COMP%]{font-size:3.3vw;background-color:#e0f7fa;border:none;width:4.8vw;height:4.8vw;border-radius:50%;display:flex;justify-content:center;align-items:center;cursor:pointer;box-shadow:4px 4px 15px #0003;color:#00796b;transition:background-color .3s,color .3s}.arrow[_ngcontent-%COMP%]:disabled{background-color:#cfd8dc;color:#90a4ae;cursor:not-allowed;box-shadow:none}.center-text[_ngcontent-%COMP%]{font-size:5rem;font-weight:700;color:#00796b;width:4vw;text-align:center}.image-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center}.round-image[_ngcontent-%COMP%]{width:4.8vw;height:4.8vw;border-radius:50%;box-shadow:0 10px 30px #0006;transition:all .3s ease;cursor:pointer}.round-image[_ngcontent-%COMP%]:active{transform:scale(1.1)}.user-guide-close-icon[_ngcontent-%COMP%]{position:fixed;top:3vw;right:4vw;background:#009688;border:none;width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:2vw;color:#000;cursor:pointer;z-index:2010;box-shadow:0 2px 8px #5d91c32e;transition:background .2s,color .2s}@media (max-width: 980px){.listen-img[_ngcontent-%COMP%]{width:72px;height:72px;padding:14px}}.pp-right[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.5vw}"]})}}return e})();var eb={production:!0,apiBaseUrl:"https://pykara-py-learn-backend.hf.space",appName:"Py-Learn",version:"1.0.0"};var Gr=(()=>{class e{constructor(t,i){this.http=t,this.router=i,this.API_BASE_URL=eb.apiBaseUrl,this.TOKEN_REFRESH_INTERVAL=12*60*1e3,this.LOGIN_ENDPOINT="/auth/login",this.LOGOUT_ENDPOINT="/auth/logout",this.REFRESH_ENDPOINT="/auth/refresh",this.CHECK_AUTH_ENDPOINT="/auth/check-auth",this.loggedInSubject=new Ce(!1),this.refreshIntervalId=null,this.isLoggedIn$=this.loggedInSubject.asObservable(),this.initializeAuthState()}initializeAuthState(){let t=this.hasValidSession();this.loggedInSubject.next(t)}hasValidSession(){return typeof localStorage<"u"&&!!localStorage.getItem("username")}isLoggedIn(){return this.loggedInSubject.value}setLoggedIn(t){this.loggedInSubject.next(t)}login(t){let i={username:t.username,password:t.password};return this.http.post(`${this.API_BASE_URL}${this.LOGIN_ENDPOINT}`,i,{withCredentials:!0}).pipe(xe(()=>{this.setLoggedIn(!0),this.startAutoRefresh(),localStorage.setItem("username",t.username)}),ft(this.handleAuthError.bind(this)))}logout(){return this.http.post(`${this.API_BASE_URL}${this.LOGOUT_ENDPOINT}`,{},{withCredentials:!0}).pipe(xe(()=>this.handleLogoutSuccess()),ft(t=>(this.handleLogoutSuccess(),Xt(()=>t))),rt(()=>this.handleLogoutSuccess()))}checkSession(){return this.http.get(`${this.API_BASE_URL}${this.CHECK_AUTH_ENDPOINT}`,{withCredentials:!0}).pipe(xe(()=>{this.setLoggedIn(!0),this.startAutoRefresh()}),$e(()=>[!0]),ft(t=>t.status===401?this.attemptTokenRefresh():(this.setLoggedIn(!1),[!1])))}startAutoRefresh(){this.refreshIntervalId||(this.refreshIntervalId=window.setInterval(()=>{this.refreshAccessToken().subscribe({error:()=>this.handleRefreshError()})},this.TOKEN_REFRESH_INTERVAL))}clearAutoRefresh(){this.refreshIntervalId&&(clearInterval(this.refreshIntervalId),this.refreshIntervalId=null)}refreshAccessToken(){return this.http.post(`${this.API_BASE_URL}${this.REFRESH_ENDPOINT}`,{},{withCredentials:!0}).pipe(ft(this.handleRefreshError.bind(this)))}attemptTokenRefresh(){return this.http.post(`${this.API_BASE_URL}${this.REFRESH_ENDPOINT}`,{},{withCredentials:!0}).pipe(xe(()=>{this.setLoggedIn(!0),this.startAutoRefresh()}),$e(()=>[!0]),ft(()=>(this.setLoggedIn(!1),[!1])))}handleAuthError(t){let i="Authentication failed";return t.error?.message?i=t.error.message:t.status===401?i="Invalid credentials":t.status===0&&(i="Network error - please check your connection"),Xt(()=>({message:i,status:t.status}))}handleRefreshError(){return this.clearTokens(),this.setLoggedIn(!1),this.router.navigate(["/login"]),Xt(()=>new Error("Session expired"))}handleLogoutSuccess(){this.clearTokens(),this.clearAutoRefresh(),this.setLoggedIn(!1),localStorage.removeItem("username")}clearTokens(){document.cookie="access_token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; secure; samesite=strict",document.cookie="refresh_token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; secure; samesite=strict"}getAccessToken(){if(typeof document>"u")return null;let i=document.cookie.split("; ").find(r=>r.startsWith("access_token="));return i?i.split("=")[1]:null}ngOnDestroy(){this.clearAutoRefresh()}static{this.\u0275fac=function(i){return new(i||e)(v(Rn),v(ut))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();function ak(e,n){if(e&1){let t=H();d(0,"div")(1,"div",18),I("click",function(){T(t);let r=C(3);return A(r.closePrivacyPopup())}),l(),d(2,"div",19)(3,"button",20),I("click",function(){T(t);let r=C(3);return A(r.closePrivacyPopup())}),u(4,"\xD7"),l(),d(5,"ul",21)(6,"li",22)(7,"b"),u(8,"Privacy Policy \u2014 Py-learn"),l(),g(9,"br"),d(10,"ul",23)(11,"li")(12,"b"),u(13,"Last Updated:"),l(),u(14," November 2025"),l(),d(15,"li")(16,"b"),u(17,"Who we are:"),l(),u(18," Py-learn is operated by "),d(19,"b"),u(20,"Pykara Technologies Private Limited"),l(),u(21," (\u201Cwe\u201D, \u201Cus\u201D, \u201Cour\u201D), the data controller for personal data processed through the platform."),l(),d(22,"li")(23,"b"),u(24,"Contact:"),l(),d(25,"a",24),u(26,"info@pykara.ai"),l()()()(),d(27,"li")(28,"b"),u(29,"Overview"),l(),g(30,"br"),d(31,"ul",23)(32,"li"),u(33,"We collect limited personal data to deliver an AI-powered e-learning experience (chatbots, video lessons, quizzes) and to improve learning outcomes."),l(),d(34,"li"),u(35,"We comply with applicable laws, including GDPR where relevant to users in the EEA/UK."),l()()(),d(36,"li")(37,"b"),u(38,"Information We Collect"),l(),g(39,"br"),d(40,"ul",23)(41,"li")(42,"b"),u(43,"Account Data:"),l(),u(44," name, email, password (hashed), profile details."),l(),d(45,"li")(46,"b"),u(47,"Learning Data:"),l(),u(48," enrolled courses, lessons viewed, quiz results, progress analytics, feedback."),l(),d(49,"li")(50,"b"),u(51,"Technical Data:"),l(),u(52," device/browser info, IP address, timestamps, logs, approximate location from IP."),l(),d(53,"li")(54,"b"),u(55,"Cookies & Similar Tech:"),l(),u(56," preferences, session management, analytics (see \u201CCookies\u201D)."),l()()(),d(57,"li")(58,"b"),u(59,"Purposes of Processing"),l(),g(60,"br"),d(61,"ul",23)(62,"li"),u(63,"Provide and secure the service; authenticate users; maintain accounts."),l(),d(64,"li"),u(65,"Personalise content, recommendations, and difficulty levels."),l(),d(66,"li"),u(67,"Measure performance, improve features, and fix issues."),l(),d(68,"li"),u(69,"Send essential service communications (policy changes, security notices)."),l(),d(70,"li"),u(71,"Comply with legal obligations and enforce Terms."),l()()(),d(72,"li")(73,"b"),u(74,"Legal Bases (GDPR)"),l(),g(75,"br"),d(76,"ul",23)(77,"li")(78,"b"),u(79,"Contract necessity:"),l(),u(80," to deliver core features you request."),l(),d(81,"li")(82,"b"),u(83,"Legitimate interests:"),l(),u(84," service improvement, security, fraud prevention (balanced against your rights)."),l(),d(85,"li")(86,"b"),u(87,"Consent:"),l(),u(88," non-essential cookies, optional marketing (you can withdraw at any time)."),l(),d(89,"li")(90,"b"),u(91,"Legal obligation:"),l(),u(92," records, compliance, and requests from authorities where required by law."),l()()(),d(93,"li")(94,"b"),u(95,"Automated Processing & AI"),l(),g(96,"br"),d(97,"ul",23)(98,"li"),u(99,"AI is used to generate explanations, hints, and recommendations. We do not make decisions with legal or similarly significant effects solely by automated means."),l()()(),d(100,"li")(101,"b"),u(102,"Third-Party Processors & Transfers"),l(),g(103,"br"),d(104,"ul",23)(105,"li"),u(106,"We use reputable vendors for AI inference, hosting, analytics, email delivery, and content streaming. They act under contracts and process data only on our instructions."),l(),d(107,"li"),u(108,"Where data is transferred outside your country (including outside the EEA/UK), appropriate safeguards are applied (e.g., Standard Contractual Clauses)."),l()()(),d(109,"li")(110,"b"),u(111,"Data Sharing"),l(),g(112,"br"),d(113,"ul",23)(114,"li"),u(115,"With service providers under confidentiality and security obligations."),l(),d(116,"li"),u(117,"For legal reasons (court orders, to protect users and our rights, prevent fraud or abuse)."),l(),d(118,"li"),u(119,"Business changes (merger, acquisition); we will ensure comparable protections or notify you of material changes."),l()()(),d(120,"li")(121,"b"),u(122,"Data Security & Retention"),l(),g(123,"br"),d(124,"ul",23)(125,"li"),u(126,"We apply technical and organisational measures (encryption at rest/in transit, access controls, monitoring)."),l(),d(127,"li"),u(128,"We retain personal data only as long as needed for the purposes above or as required by law. "),d(129,"b"),u(130,"Inactive accounts may be deleted after 24 months."),l()()()(),d(131,"li")(132,"b"),u(133,"Cookies & Similar Technologies"),l(),g(134,"br"),d(135,"ul",23)(136,"li")(137,"b"),u(138,"Essential:"),l(),u(139," login/session, security, load balancing."),l(),d(140,"li")(141,"b"),u(142,"Preferences:"),l(),u(143," UI settings, language, playback choices."),l(),d(144,"li")(145,"b"),u(146,"Analytics:"),l(),u(147," usage statistics to improve features."),l(),d(148,"li"),u(149,"You may control cookies via your browser. Disabling some cookies may affect functionality."),l()()(),d(150,"li")(151,"b"),u(152,"Children\u2019s Privacy"),l(),g(153,"br"),d(154,"ul",23)(155,"li"),u(156,"The service is intended for users aged 13+. If we learn that data from a child under 13 was collected without appropriate consent, we will delete it."),l()()(),d(157,"li")(158,"b"),u(159,"Your Rights (EEA/UK where applicable)"),l(),g(160,"br"),d(161,"ul",23)(162,"li"),u(163,"Access, rectify, erase, restrict processing, object, and data portability."),l(),d(164,"li"),u(165,"Withdraw consent (for consent-based processing) without affecting prior lawful processing."),l(),d(166,"li"),u(167,"Lodge a complaint with a supervisory authority. We encourage contacting us first at "),d(168,"a",24),u(169,"info@pykara.ai"),l(),u(170,"."),l()()(),d(171,"li")(172,"b"),u(173,"Data Breach Notification"),l(),g(174,"br"),d(175,"ul",23)(176,"li"),u(177,"We will notify affected users and relevant authorities when legally required."),l()()(),d(178,"li")(179,"b"),u(180,"Changes to this Policy"),l(),g(181,"br"),d(182,"ul",23)(183,"li"),u(184,"We may update this policy. The \u201CLast Updated\u201D date reflects the latest version; material changes may be additionally notified in-app or by email."),l()()(),d(185,"li")(186,"b"),u(187,"Contact"),l(),g(188,"br"),d(189,"ul",23)(190,"li"),u(191,"Email: "),d(192,"a",24),u(193,"info@pykara.ai"),l()(),d(194,"li"),u(195,"Registered Office: Pykara Technologies Private Limited, Chennai, Tamil Nadu, India"),l()()()()()()}}function ck(e,n){if(e&1){let t=H();d(0,"div")(1,"div",18),I("click",function(){T(t);let r=C(3);return A(r.closeTermsPopup())}),l(),d(2,"div",25)(3,"button",20),I("click",function(){T(t);let r=C(3);return A(r.closeTermsPopup())}),u(4,"\xD7"),l(),d(5,"ul",21)(6,"li",26)(7,"b"),u(8,"Terms & Conditions \u2014 Py-learn"),l(),g(9,"br"),d(10,"ul",23)(11,"li")(12,"b"),u(13,"Last Updated:"),l(),u(14," November 2025"),l(),d(15,"li"),u(16,"By using Py-learn, you agree to these Terms and our Privacy Policy."),l()()(),d(17,"li")(18,"b"),u(19,"Eligibility & Accounts"),l(),g(20,"br"),d(21,"ul",23)(22,"li"),u(23,"You must be 13+ (or the age of digital consent in your region). Users under 18 require parental/guardian consent."),l(),d(24,"li"),u(25,"You are responsible for the accuracy of your information and for safeguarding your credentials."),l()()(),d(26,"li")(27,"b"),u(28,"Permitted Use & Prohibited Conduct"),l(),g(29,"br"),d(30,"ul",23)(31,"li"),u(32,"Use the service for lawful, educational purposes only."),l(),d(33,"li"),u(34,"Do not attempt unauthorised access, disrupt the service, reverse engineer components, or misuse AI features."),l(),d(35,"li"),u(36,"International users must comply with local laws."),l()()(),d(37,"li")(38,"b"),u(39,"Content & Intellectual Property"),l(),g(40,"br"),d(41,"ul",23)(42,"li"),u(43,"All software, UI, designs, text, graphics, videos, and datasets are owned by Pykara Technologies or its licensors."),l(),d(44,"li"),u(45,"Copying, redistribution, or commercial use requires prior written consent."),l(),d(46,"li"),u(47,"When you submit content (e.g., answers, uploads), you grant us a non-exclusive, royalty-free licence to host and process it to operate and improve the service (including for AI model quality and safety, where allowed by law and your settings)."),l()()(),d(48,"li")(49,"b"),u(50,"AI Outputs & Educational Disclaimer"),l(),g(51,"br"),d(52,"ul",23)(53,"li"),u(54,"AI responses support learning but may contain errors. Verify outputs before relying on them; they are not professional advice."),l()()(),d(55,"li")(56,"b"),u(57,"Fees, Trials & Refunds"),l(),g(58,"br"),d(59,"ul",23)(60,"li"),u(61,"Some features may be paid (subscriptions or one-off fees). Prices and taxes are shown at checkout."),l(),d(62,"li"),u(63,"Payments are processed securely by third-party providers. Unless required by law, payments are non-refundable."),l()()(),d(64,"li")(65,"b"),u(66,"Third-Party Links & Services"),l(),g(67,"br"),d(68,"ul",23)(69,"li"),u(70,"We may link to third-party content or integrate with providers (hosting, analytics, AI). We are not responsible for third-party terms or policies."),l()()(),d(71,"li")(72,"b"),u(73,"Termination & Suspension"),l(),g(74,"br"),d(75,"ul",23)(76,"li"),u(77,"We may suspend or terminate access for violations, fraud, or security risks. You may request account closure at any time."),l()()(),d(78,"li")(79,"b"),u(80,"Warranties & Liability"),l(),g(81,"br"),d(82,"ul",23)(83,"li"),u(84,"The service is provided \u201Cas is\u201D and \u201Cas available\u201D without warranties of any kind."),l(),d(85,"li"),u(86,"To the fullest extent permitted by law, we are not liable for indirect, incidental, special, consequential, or punitive damages."),l()()(),d(87,"li")(88,"b"),u(89,"Indemnity"),l(),g(90,"br"),d(91,"ul",23)(92,"li"),u(93,"You agree to indemnify and hold us harmless from claims arising from your misuse of the service or breach of these Terms."),l()()(),d(94,"li")(95,"b"),u(96,"Changes to the Service or Terms"),l(),g(97,"br"),d(98,"ul",23)(99,"li"),u(100,"We may modify features or these Terms. Continued use after changes indicates acceptance; material updates may be additionally notified in-app or by email."),l()()(),d(101,"li")(102,"b"),u(103,"Governing Law & Disputes"),l(),g(104,"br"),d(105,"ul",23)(106,"li"),u(107,"Governing law: India. Exclusive jurisdiction: courts in Chennai, Tamil Nadu, India."),l()()(),d(108,"li")(109,"b"),u(110,"Contact"),l(),g(111,"br"),d(112,"ul",23)(113,"li"),u(114,"Support & legal queries: "),d(115,"a",24),u(116,"info@pykara.ai"),l()(),d(117,"li"),u(118,"Registered Office: Pykara Technologies Private Limited, Chennai, Tamil Nadu, India"),l()()()()()()}}function lk(e,n){if(e&1){let t=H();Re(0),d(1,"p"),u(2,"\xA9 2025 Pykara Technologies Pvt. Ltd. All rights reserved."),l(),d(3,"a",3),u(4,"Contact Us"),l(),u(5," | "),d(6,"a",4),I("click",function(r){T(t);let o=C(2);return A(o.openPrivacyPopup(r))}),u(7,"Privacy Policy"),l(),u(8," | "),d(9,"a",4),I("click",function(r){T(t);let o=C(2);return A(o.openTermsPopup(r))}),u(10,"Terms & Conditions"),l(),d(11,"div",5)(12,"a",6),g(13,"i",7),l(),d(14,"a",8),g(15,"i",9),l(),d(16,"a",10),g(17,"i",11),l(),d(18,"a",12),g(19,"i",13),l(),d(20,"a",14),g(21,"i",15),l()(),R(22,ak,196,0,"div",0)(23,ck,119,0,"div",0),d(24,"div",16)(25,"a",17),u(26,"www.pykara.ai"),l()(),Ne()}if(e&2){let t=C(2);m(12),y("href",t.brandService.socialLinksCurrent.linkedin,ee),m(2),y("href",t.brandService.socialLinksCurrent.youtube,ee),m(2),y("href",t.brandService.socialLinksCurrent.facebook,ee),m(2),y("href",t.brandService.socialLinksCurrent.instagram,ee),m(2),y("href",t.brandService.socialLinksCurrent.website,ee),m(2),y("ngIf",t.showPrivacyPopup),m(),y("ngIf",t.showTermsPopup)}}function dk(e,n){if(e&1){let t=H();d(0,"div")(1,"div",18),I("click",function(){T(t);let r=C(3);return A(r.closePrivacyPopup())}),l(),d(2,"div",19)(3,"button",20),I("click",function(){T(t);let r=C(3);return A(r.closePrivacyPopup())}),u(4,"\xD7"),l(),d(5,"ul",21)(6,"li",22)(7,"b"),u(8,"Privacy Policy \u2014 Majema"),l(),g(9,"br"),d(10,"ul",23)(11,"li")(12,"b"),u(13,"What personal data is collected?"),l(),g(14,"br"),u(15,"Majemaf\xF6rlaget AB processes personal data that you provide to us. Personal data that will be processed includes, for example, name, social security number, school affiliation, role, interests related to teaching, address, e-mail address and telephone number. You provide the personal data yourself in connection with ordering, expressions of interest, by telephone or when visiting teaching material exhibitions, school visits and teacher meetings. On our website we use cookies and save your IP address."),l(),d(16,"li"),u(17,"It is voluntary to provide your personal data, but in some cases we cannot provide you with the service and/or product you have ordered if you do not provide your personal data."),l(),d(18,"li"),u(19,"We do not collect any personal information from third-party companies. Advertising may occur on external websites and then we can obtain statistics that are not personal through cookies."),l(),d(20,"li")(21,"b"),u(22,"Purposes of personal data processing"),l(),g(23,"br"),u(24,"Your personal data will be processed in order for us to fulfill our commitments to you. We may also process your data for the purposes below as well as for our market and customer analyses and statistics in order to provide you with a better offer and better service. We may, unless you have objected to direct marketing in writing, also use your personal data to provide various offers of services and/or products from us. You may unsubscribe from receiving such offers at any time with each marketing message. If we process data for other purposes, we will inform you of this."),l(),d(25,"li")(26,"b"),u(27,"Storage of personal data"),l(),g(28,"br"),u(29,"We may transfer your data to IT service providers and other service providers who then process the data on our behalf. If we transfer your data outside the EU, we ensure that we have a legal basis for such transfer. This can be done through the EU Commission's standard contractual clauses. Majema takes the greatest possible security measures to protect your personal data. All identifiable personal data is subject to access restrictions to prevent unauthorized access, alteration or misuse. We will store your data for as long as necessary to fulfill our obligations to you."),l(),d(30,"li")(31,"b"),u(32,"Our legal basis"),l(),g(33,"br"),u(34,"We process your data based on our legitimate interest or to enable us to fulfill our obligations to you."),l(),d(35,"li")(36,"b"),u(37,"Cookies \u2013 Information collected via www.majema.se"),l(),g(38,"br"),u(39,"www.majema.se is managed by Majemaf\xF6rlaget AB. Majema's website uses cookies to give you access to additional functions, such as previous orders and to simplify logging into your account. You can refuse the use of cookies through your browser settings. Majema uses analysis tools to get a picture of how visitors use our websites, in order to improve the content, navigation and structure of the websites. The analysis tools use JavaScript and cookies and the information generated by these through your use of the website (including your IP address) will be forwarded to the analysis tools' service providers and may be stored on servers outside the EU. The service providers may also transfer this information to third parties if required by law or in cases where a third party processes the information on their behalf. By using Majema's websites without declining third-party cookies, you agree that the service providers process your data in the manner and for the purposes described above. If you do not want your visits to Majema's website to be included in the service providers' statistics, there is an add-on that you can install in your browser."),l(),d(40,"li")(41,"b"),u(42,"Your rights"),l(),g(43,"br"),u(44,'According to applicable data protection legislation, you have the right to request that incorrect personal data be corrected, blocked, restricted or deleted. In addition, you can also object to processing or request that your data be transferred to another data controller, so-called data portability. You also have the right to request written information, a so-called register extract, about the personal data we process about you once a year, free of charge, by sending a written signed application to our address below. Mark the application with "Request for register extract". If you are dissatisfied with our processing, you have the right to file a complaint with the Swedish Data Protection Authority.'),l(),d(45,"li")(46,"b"),u(47,"Contact information"),l(),g(48,"br"),u(49,"Majemaf\xF6rlaget AB, 556414-9135, is the data controller for the processing of your personal data that you provide when filling out contact forms on the website. Address: Majemaf\xF6rlaget AB, Box 4016, 131 04 Nacka"),l()()()()()()}}function uk(e,n){if(e&1){let t=H();d(0,"div")(1,"div",18),I("click",function(){T(t);let r=C(3);return A(r.closeTermsPopup())}),l(),d(2,"div",25)(3,"button",20),I("click",function(){T(t);let r=C(3);return A(r.closeTermsPopup())}),u(4,"\xD7"),l(),d(5,"ul",21)(6,"li",26)(7,"b"),u(8,"Terms & Conditions \u2014 Majema"),l(),g(9,"br"),d(10,"ul",23)(11,"li"),u(12,"By using Majema, you agree to these Terms and our Privacy Policy."),l()()(),d(13,"li")(14,"b"),u(15,"System requirements"),l(),g(16,"br"),d(17,"ul",23)(18,"li"),u(19,"Majema's digital learning materials work on computers, tablets and interactive whiteboards. Our digital learning materials are based on HTML5 and JavaScript. This means that older versions of browsers are not always fully supported. We recommend using an updated version of the Chrome browser to best experience our digital learning materials."),l(),d(20,"li"),u(21,"Here you can download "),d(22,"a",29),u(23,"Google Chrome for free"),l(),u(24,"."),l(),d(25,"li"),u(26," For the best user experience, you should make sure these four points are met: "),d(27,"ol",30)(28,"li"),u(29,"Make sure your browser is set to 100% zoom. This is important for the content to look correct on the screen."),l(),d(30,"li"),u(31,"Update your browser."),l(),d(32,"li"),u(33,"Clear your cache. Select: settings, privacy and security, clear browsing data. (If clearing the cache isn't enough, you can open a new incognito window in Chrome and log in from there.)"),l(),d(34,"li"),u(35,"If you are using a tablet \u2013 update your operating system. This is done under settings."),l()()(),d(36,"li")(37,"b"),u(38,"Web browser"),l(),g(39,"br"),u(40," We recommend that you always update your browser to the latest version."),g(41,"br"),u(42," We test our digital learning materials against the following browsers: Chrome, Edge, Safari and Firefox. "),l(),d(43,"li")(44,"b"),u(45,"License management"),l(),g(46,"br"),u(47," All of our websites are licensed to apply to one teacher and class for one year from the date of activation."),g(48,"br"),u(49," If there is a student website, it is activated at the same time as you activate the teacher website."),g(50,"br"),u(51," To extend a license, you need to make a new purchase, in the webshop, through a retailer or with our customer service."),g(52,"br"),u(53," Should a license need to be transferred from one teacher to another, please contact our customer service and we will help you with this."),g(54,"br"),u(55," You can change your account details yourself under the My Account tab when you are logged in. "),l(),d(56,"li")(57,"b"),u(58,"Operating system"),l(),g(59,"br"),u(60," We recommend that you always update your operating system to the latest version."),g(61,"br"),d(62,"ul",31)(63,"li"),u(64,"Windows 7, 8, 10, 11"),l(),d(65,"li"),u(66,"Chrome OS (Chromebook)"),l(),d(67,"li"),u(68,"Mac OS (11 and later)"),l(),d(69,"li"),u(70,"Android tablet 11 or later (with Chrome browser)"),l(),d(71,"li"),u(72,"iOS 14 and later (iPad operating system)"),l()(),u(73," Majema does not guarantee support for devices and operating systems that are no longer updated by the manufacturer. "),l()()()()()()}}function hk(e,n){if(e&1){let t=H();Re(0),d(1,"p"),u(2,"\xA9 2025 Majemaf\xF6rlaget. All rights reserved."),l(),d(3,"a",27),u(4,"Contact Us"),l(),u(5," | "),d(6,"a",4),I("click",function(r){T(t);let o=C(2);return A(o.openPrivacyPopup(r))}),u(7,"Privacy Policy"),l(),u(8," | "),d(9,"a",4),I("click",function(r){T(t);let o=C(2);return A(o.openTermsPopup(r))}),u(10,"Terms & Conditions"),l(),d(11,"div",5)(12,"a",6),g(13,"i",7),l(),d(14,"a",8),g(15,"i",9),l(),d(16,"a",10),g(17,"i",11),l(),d(18,"a",12),g(19,"i",13),l(),d(20,"a",14),g(21,"i",15),l()(),R(22,dk,50,0,"div",0)(23,uk,74,0,"div",0),d(24,"div",16)(25,"a",28),u(26,"www.majema.se"),l()(),Ne()}if(e&2){let t=C(2);m(12),y("href",t.brandService.socialLinksCurrent.linkedin,ee),m(2),y("href",t.brandService.socialLinksCurrent.youtube,ee),m(2),y("href",t.brandService.socialLinksCurrent.facebook,ee),m(2),y("href",t.brandService.socialLinksCurrent.instagram,ee),m(2),y("href",t.brandService.socialLinksCurrent.website,ee),m(2),y("ngIf",t.showPrivacyPopup),m(),y("ngIf",t.showTermsPopup)}}function fk(e,n){if(e&1&&(d(0,"footer"),Re(1,1),R(2,lk,27,7,"ng-container",2)(3,hk,27,7,"ng-container",2),Ne(),l()),e&2){let t=C();m(),y("ngSwitch",t.brandService.name),m(),y("ngSwitchCase","Py-Learn"),m(),y("ngSwitchCase","MJ-Learn")}}var Tl=(()=>{class e{constructor(t){this.brandService=t,this.showPrivacyPopup=!1,this.showTermsPopup=!1}openPrivacyPopup(t){t.preventDefault(),this.showPrivacyPopup=!0}closePrivacyPopup(){this.showPrivacyPopup=!1}openTermsPopup(t){t.preventDefault(),this.showTermsPopup=!0}closeTermsPopup(){this.showTermsPopup=!1}static{this.\u0275fac=function(i){return new(i||e)(w(pn))}}static{this.\u0275cmp=pe({type:e,selectors:[["app-footer"]],standalone:!0,features:[Fe],decls:1,vars:1,consts:[[4,"ngIf"],[3,"ngSwitch"],[4,"ngSwitchCase"],["href","https://pykara.ai/contact-us/","target","blank"],["href","#",3,"click"],[1,"social-icons"],["target","_blank","aria-label","LinkedIn",1,"social-icon","linkedin",3,"href"],[1,"fab","fa-linkedin-in"],["target","_blank","aria-label","YouTube",1,"social-icon","youtube",3,"href"],[1,"fab","fa-youtube"],["target","_blank","aria-label","Facebook",1,"social-icon","facebook",3,"href"],[1,"fab","fa-facebook-f"],["target","_blank","aria-label","Instagram",1,"social-icon","instagram",3,"href"],[1,"fab","fa-instagram"],["target","_blank","aria-label","Website",1,"social-icon","website",3,"href"],[1,"fas","fa-globe"],[1,"footer-watermark-row"],["href","https://www.pykara.ai","target","_blank",1,"footer-watermark"],[1,"user-guide-overlay",3,"click"],["role","dialog","aria-modal","true","aria-labelledby","privacyTitle",1,"user-guide-modal"],["aria-label","Close",1,"user-guide-close-icon",3,"click"],[2,"text-align","justify","font-size","15px"],["id","privacyTitle"],[2,"list-style","unset","margin-left","1.25rem"],["href","mailto:info@pykara.ai"],["role","dialog","aria-modal","true","aria-labelledby","termsTitle",1,"user-guide-modal"],["id","termsTitle"],["href","https://www.majema.se/pages/kontakta-kundtjanst","target","_blank"],["href","https://www.majema.se","target","_blank",1,"footer-watermark"],["href","https://www.google.com/chrome/","target","_blank"],[2,"margin-left","1.5rem"],[2,"list-style","disc","margin-left","1.5rem"]],template:function(i,r){i&1&&R(0,fk,4,3,"footer",0),i&2&&y("ngIf",r.brandService.showFooter)},dependencies:[_t,vt,Mo,Sc],styles:[".user-guide-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background:#00000059;z-index:2000}.user-guide-modal[_ngcontent-%COMP%]{position:fixed;top:52%;left:50%;transform:translate(-50%,-50%);height:38vw;width:50vw;background:linear-gradient(135deg,#fff 80%,#e3fcec);color:#222;box-shadow:0 12px 40px #5d91c338;border-radius:18px;padding:1vw;z-index:2001;overflow:visible;border:10px solid var(--main-accent-color);box-sizing:border-box;font-weight:lighter}.user-guide-modal[_ngcontent-%COMP%] > ul[_ngcontent-%COMP%], .user-guide-modal[_ngcontent-%COMP%] > ol[_ngcontent-%COMP%]{max-height:34.6vw;overflow-y:auto;padding-right:.5vw;margin:0}.user-guide-close-icon[_ngcontent-%COMP%]{top:-22px;right:-22px}.user-guide-modal[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{line-height:1.7;font-size:1.1vw;background:#5d91c312;padding:.5vw;box-shadow:0 2px 8px #5d91c30f}.user-guide-modal[_ngcontent-%COMP%] li[_ngcontent-%COMP%] b[_ngcontent-%COMP%]{color:#2b6296;font-size:1.15vw}.user-guide-modal[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:#137ec4;text-decoration:underline;font-weight:600}.user-guide-modal[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{color:#009688;text-decoration:underline}footer[_ngcontent-%COMP%]{background:linear-gradient(to right,#011022,#01030a);color:#fff;padding:15px 10px;text-align:center;width:100%;position:relative;font-size:18px;font-weight:700;font-family:Inter,Segoe UI,-apple-system,BlinkMacSystemFont,sans-serif}p.footer[_ngcontent-%COMP%]{line-height:1;margin-top:1vw}footer[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:#fff;text-decoration:none;margin:0 5px;margin-bottom:.5vw;display:inline-block}footer[_ngcontent-%COMP%] .social-icons[_ngcontent-%COMP%]{margin-top:.5vw;display:flex;justify-content:center;gap:28px;flex-wrap:wrap}footer[_ngcontent-%COMP%] .social-icons[_ngcontent-%COMP%] .social-icon[_ngcontent-%COMP%]{width:42px;height:42px;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;background-color:#fff;color:#38bdf8;font-size:18px;box-shadow:0 0 0 1px #214055,0 4px 14px #0006;transition:background-color .25s,color .25s,transform .25s,box-shadow .25s;text-decoration:none}footer[_ngcontent-%COMP%] .social-icons[_ngcontent-%COMP%] .social-icon[_ngcontent-%COMP%]:hover{background-color:#38bdf8;color:#fff;transform:translateY(-4px);box-shadow:0 6px 20px #38bdf8aa,0 0 0 2px #38bdf8 inset}footer[_ngcontent-%COMP%] .social-icons[_ngcontent-%COMP%] .social-icon.facebook[_ngcontent-%COMP%]{color:#1877f2}footer[_ngcontent-%COMP%] .social-icons[_ngcontent-%COMP%] .social-icon.youtube[_ngcontent-%COMP%]{color:red}footer[_ngcontent-%COMP%] .social-icons[_ngcontent-%COMP%] .social-icon.linkedin[_ngcontent-%COMP%]{color:#0a66c2}footer[_ngcontent-%COMP%] .social-icons[_ngcontent-%COMP%] .social-icon.instagram[_ngcontent-%COMP%]{color:#fd5949}footer[_ngcontent-%COMP%] .social-icons[_ngcontent-%COMP%] .social-icon.facebook[_ngcontent-%COMP%]:hover{background-color:#1877f2;color:#fff}footer[_ngcontent-%COMP%] .social-icons[_ngcontent-%COMP%] .social-icon.youtube[_ngcontent-%COMP%]:hover{background-color:red;color:#fff}footer[_ngcontent-%COMP%] .social-icons[_ngcontent-%COMP%] .social-icon.linkedin[_ngcontent-%COMP%]:hover{background-color:#0a66c2;color:#fff}footer[_ngcontent-%COMP%] .social-icons[_ngcontent-%COMP%] .social-icon.instagram[_ngcontent-%COMP%]:hover{background:radial-gradient(circle at 30% 110%,#fdf497,#fd5949 45%,#d6249f 60%,#285aeb 90%);color:#fff;filter:brightness(1.15);box-shadow:0 6px 22px #fd594999}.footer-watermark-row[_ngcontent-%COMP%]{width:100%;text-align:right;margin-top:-40px}.footer-watermark[_ngcontent-%COMP%]{color:#38bdf8;font-weight:700;text-decoration:underline;font-size:1.1em;transition:color .2s}.footer-watermark[_ngcontent-%COMP%]:hover{color:#137ec4}@media (max-width: 600px){.user-guide-modal[_ngcontent-%COMP%]{width:90vw;height:60vw;border-radius:12px;padding:4vw 2vw 2vw}.user-guide-modal[_ngcontent-%COMP%] > ul[_ngcontent-%COMP%], .user-guide-modal[_ngcontent-%COMP%] > ol[_ngcontent-%COMP%]{max-height:52vw;overflow-y:auto;padding-right:1.5vw}.user-guide-close-icon[_ngcontent-%COMP%]{font-size:6vw;top:2vw;right:2vw;width:6vw;height:6vw;display:flex;align-items:center;justify-content:center;line-height:1}.footer-watermark-row[_ngcontent-%COMP%]{text-align:center;margin-top:8px}}"]})}}return e})();function mk(e,n){if(e&1){let t=H();d(0,"div",35),I("mouseleave",function(){T(t);let r=C(2);return A(r.closeAccountMenu())}),d(1,"div",36)(2,"div",37),u(3),l(),d(4,"div",38)(5,"div",39),u(6),l(),d(7,"div",40),u(8),l()()(),d(9,"div",41),I("click",function(){T(t);let r=C(2);return A(r.goToAccount())}),u(10,"My account"),l(),g(11,"hr"),d(12,"div",41),I("click",function(){T(t);let r=C(2);return A(r.logout())}),u(13,"Logout"),l()()}if(e&2){let t=C(2);m(3),Ie(t.usernameInitial),m(3),Ie(t.displayName),m(2),Ie(t.displayEmail)}}function gk(e,n){if(e&1){let t=H();Re(0),d(1,"div",33),I("click",function(){T(t);let r=C();return A(r.toggleAccountMenu())}),u(2),l(),R(3,mk,14,3,"div",34),Ne()}if(e&2){let t=C();m(),le("title",t.usernameInitial),m(),Se(" ",t.usernameInitial," "),m(),y("ngIf",t.showAccountMenu)}}function vk(e,n){e&1&&(d(0,"a",42),g(1,"i",43),l()),e&2&&le("title","Login")}function _k(e,n){if(e&1){let t=H();d(0,"div",44),I("click",function(){let r=T(t).$implicit,o=C();return A(o.handleCardAction(r))})("keydown.enter",function(){let r=T(t).$implicit,o=C();return A(o.handleCardAction(r))})("keydown.space",function(){let r=T(t).$implicit,o=C();return A(o.handleCardAction(r))}),d(1,"div",45),g(2,"img",46),l(),d(3,"div",47)(4,"div",48)(5,"button",49),I("click",function(r){let o=T(t).$implicit,s=C();return r.stopPropagation(),A(s.openGuidePopup(o.title))}),u(6,"Know More"),l()()()()}if(e&2){let t=n.$implicit;he("card--disabled",t.disabled),y("tabindex",t.disabled?-1:0),m(2),y("src",t.image,ee)("alt",t.title),m(3),y("disabled",t.disabled)}}function yk(e,n){e&1&&(Re(0),d(1,"ul",55)(2,"li")(3,"b"),u(4,"Introduction"),l(),g(5,"br"),d(6,"ul",56)(7,"li"),u(8,"The Chat Module is an interactive learning environment designed to assist learners through text and voice-based communication."),l(),d(9,"li"),u(10,"Users can type their question or select from follow-up suggestions, using either the text input or the microphone."),l(),d(11,"li"),u(12,"Predefined questions appear above the input field for quick access."),l(),d(13,"li"),u(14,"This creates an engaging and personalised learning experience similar to interacting with a real tutor."),l()()(),d(15,"li")(16,"b"),u(17,"Starting the Chat"),l(),g(18,"br"),d(19,"ul",56)(20,"li"),u(21,"When learners open the module, they will see a text input box and a microphone icon. They can type a question or activate the microphone to speak."),l(),d(22,"li"),u(23,"While the microphone is active, a listening popup appears with options to mute or stop recording. Once the learner finishes speaking or typing, their question is displayed in the chat area along with a timestamp."),l(),d(24,"li"),u(25,"This simple interface ensures that both typing and speaking interactions are smooth and user-friendly."),l()()(),d(26,"li")(27,"b"),u(28,"Accessing the Syllabus"),l(),g(29,"br"),d(30,"ul",56)(31,"li"),u(32,"Before learners begin, an administrator uploads the syllabus or textbook in digital format."),l(),d(33,"li"),u(34,"The system analyses the document and automatically generates a list of predefined questions based on the uploaded syllabus."),l(),d(35,"li"),u(36,"These predefined questions are displayed above the input field, allowing learners to choose any topic without needing to type."),l(),d(37,"li"),u(38,"When a learner selects a question, the system locates the relevant section from the syllabus and prepares an answer. The response appears instantly in the chat area in a clear and readable format."),l()()(),d(39,"li")(40,"b"),u(41,"Receiving the Response"),l(),g(42,"br"),d(43,"ul",56)(44,"li"),u(45," After a question is sent, the system generates an immediate response that includes: "),d(46,"ul")(47,"li"),u(48,"A text-based explanation"),l(),d(49,"li"),u(50,"An audio narration in the tutor's real voice"),l(),d(51,"li"),u(52,"A derived video explanation, when applicable"),l()()(),d(53,"li"),u(54,"The response is first produced as text. If the learner chooses to listen, the system plays an audio narration that has been synthetically generated using the real voice of the teacher."),l(),d(55,"li"),u(56,"The voice is not a generic computer voice; it has been trained and modelled on the actual tutor's speech patterns, ensuring that the tone, pronunciation, and expression closely resemble the teacher's natural way of speaking."),l(),d(57,"li"),u(58,"Similarly, when a video explanation is requested, the system displays a derived video of the teacher. This video is not a pre-recorded clip or animation, but is generated to resemble the real teacher's voice and reactions."),l(),d(59,"li"),u(60,"All audio and video responses are created dynamically for each question, providing unique, real-time explanations. Learners can replay or stop the narration at any time, copy text responses, and follow the conversation naturally with the speaking indicator showing when the tutor's voice is active."),l(),d(61,"li"),u(62,"By default, audio is muted; you can enable it as needed."),l()()(),d(63,"li")(64,"b"),u(65,"Handling Out-of-Syllabus Questions"),l(),g(66,"br"),d(67,"ul",56)(68,"li"),u(69,'If a learner asks a question that is not part of the uploaded syllabus or textbook, the system responds with the message: "This topic is out of syllabus."'),l(),d(70,"li"),u(71,"Only administrators can configure whether such questions can be answered using external information sources."),l(),d(72,"li"),u(73,"This ensures that all discussions remain within the approved syllabus unless authorised otherwise."),l()()(),d(74,"li")(75,"b"),u(76,"Follow-Up and Progressive Learning"),l(),g(77,"br"),d(78,"ul",56)(79,"li"),u(80,"After each response, the system displays related or next-level questions below the chat. This feature helps learners progress through topics in a logical sequence."),l(),d(81,"li"),u(82,"A breadcrumb trail is also displayed, showing the topic flow and subtopics covered during the conversation."),l(),d(83,"li"),u(84,"Learners can easily revisit previous points and continue from where they left off."),l()()(),d(85,"li")(86,"b"),u(87,"Audio, Video, and Mode Controls"),l(),g(88,"br"),d(89,"ul",56)(90,"li"),u(91," At the top of the chat interface, four control buttons provide flexibility and accessibility: "),d(92,"ul")(93,"li"),u(94,"Audio Control \u2013 Enable or disable narration."),l(),d(95,"li"),u(96,"Video Control \u2013 Show or hide derived video explanations."),l(),d(97,"li"),u(98,"Syllabus Mode Control \u2013 Keep learning limited to syllabus topics."),l(),d(99,"li"),u(100,"Breadcrumb Control \u2013 Display or hide the topic trail."),l()()(),d(101,"li"),u(102,"Only administrators can modify the syllabus mode to include out-of-syllabus responses."),l()()(),d(103,"li")(104,"b"),u(105,"Interface and Usability"),l(),g(106,"br"),d(107,"ul",56)(108,"li"),u(109,"The chat interface presents a clear, conversational layout between the learner and the tutor. Each message includes a profile icon and timestamp for a natural reading flow."),l(),d(110,"li"),u(111,"Typing indicators appear while the system prepares responses, and a scroll button allows quick access to the most recent messages."),l(),d(112,"li"),u(113,"The design is responsive and adapts to different devices such as desktops, tablets, etc."),l()()(),d(114,"li")(115,"b"),u(116,"Summary"),l(),g(117,"br"),d(118,"ul",56)(119,"li"),u(120,"The Chat Module provides an engaging, syllabus-focused learning experience where learners can type or speak their questions and receive immediate answers through text, real teacher voice, and derived video."),l(),d(121,"li"),u(122,"With predefined questions, real-time explanations, structured progression, and easy-to-use controls, this module offers a complete and intelligent conversational learning environment\u2014all within a single platform."),l(),d(123,"li"),u(124,"Use this feature for summary-guided training."),l()()()(),Ne())}function bk(e,n){e&1&&(Re(0),d(1,"ul",55)(2,"li")(3,"b"),u(4,"Introduction"),l(),g(5,"br"),d(6,"ul",56)(7,"li"),u(8,"The "),d(9,"b"),u(10,"Generate Questions"),l(),u(11," module helps children practise English grammar with step-by-step questions, instant feedback, and level-based progression."),l(),d(12,"li"),u(13,"All questions, hints, and follow-ups are drawn from a "),d(14,"b"),u(15,"predefined syllabus"),l(),u(16," prepared by your school or administrator."),l(),d(17,"li"),u(18,"The layout is simple and child-friendly, with clear buttons and readable text."),l()()(),d(19,"li")(20,"b"),u(21,"Syllabus Source"),l(),g(22,"br"),d(23,"ul",56)(24,"li"),u(25,"The module uses a "),d(26,"b"),u(27,"predefined syllabus"),l(),u(28," that includes topics, chapters, sections, and pages."),l(),d(29,"li"),u(30,"Predefined content ensures that practice stays aligned with the lessons taught in class."),l(),d(31,"li"),u(32,"If a topic is not found in the syllabus, the system displays a clear message (see \u201COut-of-Syllabus Control\u201D)."),l()()(),d(33,"li")(34,"b"),u(35,"Choose a Topic"),l(),g(36,"br"),d(37,"ul",56)(38,"li"),u(39,"Type a grammar topic (e.g., "),d(40,"i"),u(41,"verbs"),l(),u(42,", "),d(43,"i"),u(44,"nouns"),l(),u(45,", "),d(46,"i"),u(47,"tenses"),l(),u(48,", "),d(49,"i"),u(50,"subject\u2013verb agreement"),l(),u(51,") or select from the suggestion list."),l(),d(52,"li"),u(53,"Use specific terms (e.g., "),d(54,"i"),u(55,"simple past tense"),l(),u(56,") for better results."),l(),d(57,"li"),u(58,"If the topic is unclear or unrelated to grammar, the system may show: \u201CPlease enter a valid "),d(59,"b"),u(60,"grammar topic"),l(),u(61,", not a general word or unrelated question.\u201D"),l()()(),d(62,"li")(63,"b"),u(64,"Generate Questions"),l(),g(65,"br"),d(66,"ul",56)(67,"li"),u(68,"Click "),d(69,"b"),u(70,"Generate"),l(),u(71," to create a set of questions based on the chosen topic from the predefined syllabus."),l(),d(72,"li"),u(73,"A brief loading screen appears while the questions are prepared."),l(),d(74,"li"),u(75,"To keep the practice consistent, the topic may be locked after generation until you reset the session."),l()()(),d(76,"li")(77,"b"),u(78,"Answer the Questions"),l(),g(79,"br"),d(80,"ul",56)(81,"li"),u(82,"Each "),d(83,"b"),u(84,"question"),l(),u(85," presents a sentence with a "),d(86,"b"),u(87,"blank"),l(),u(88,". The learner may type any suitable "),d(89,"b"),u(90,"answer"),l(),u(91," in the blank."),l(),d(92,"li"),u(93,"All blanks must be filled before you can check answers. The "),d(94,"b"),u(95,"Validate/Check Answers"),l(),u(96," button enables automatically."),l(),d(97,"li"),u(98,"The input fields are designed for easy typing and clear visibility."),l()()(),d(99,"li")(100,"b"),u(101,"Check Your Answers"),l(),g(102,"br"),d(103,"ul",56)(104,"li"),u(105,"Click "),d(106,"b"),u(107,"Check Answers"),l(),u(108," to validate all responses together."),l(),d(109,"li")(110,"b"),u(111,"Color guidance:"),l(),u(112," correct answers are shown in green with the label "),d(113,"b"),u(114,"Correct"),l(),u(115,"; incorrect answers are shown in red with the label "),d(116,"b"),u(117,"Wrong"),l(),u(118,"."),l(),d(119,"li"),u(120,"During validation or timed messages, inputs may be temporarily read-only to prevent accidental edits."),l()()(),d(121,"li")(122,"b"),u(123,"Try Again (First Wrong Attempt)"),l(),g(124,"br"),d(125,"ul",56)(126,"li"),u(127,"For each incorrect "),d(128,"b"),u(129,"answer"),l(),u(130,", a "),d(131,"b"),u(132,"\u201CTry Again\u201D"),l(),u(133," message appears with a short countdown."),l(),d(134,"li"),u(135,"After the countdown, the wrong entry is cleared so the learner can attempt again."),l(),d(136,"li"),u(137,"This encourages self-correction with gentle guidance."),l()()(),d(138,"li")(139,"b"),u(140,"Show Correct Answer (Second Wrong Attempt)"),l(),g(141,"br"),d(142,"ul",56)(143,"li"),u(144,"If a "),d(145,"b"),u(146,"question"),l(),u(147," remains incorrect after the second attempt, another countdown appears."),l(),d(148,"li"),u(149,"When the countdown ends, the "),d(150,"b"),u(151,"correct answer"),l(),u(152," is shown and filled automatically."),l(),d(153,"li"),u(154,"This provides closure and allows the learner to continue smoothly."),l()()(),d(155,"li")(156,"b"),u(157,"Hints and Teacher Coaching"),l(),g(158,"br"),d(159,"ul",56)(160,"li"),u(161,"Click the "),d(162,"b"),u(163,"Hint"),l(),u(164," icon to open helpful hints based on the same syllabus section as the questions."),l(),d(165,"li"),u(166,"When a hint is displayed or when an answer is incorrect, the module can also present the teacher\u2019s voice and a short teacher video that explains the idea in simple words."),l(),d(167,"li"),u(168,"Audio is muted by default; you may enable it. You can play, pause, or close the video at any time."),l()()(),d(169,"li")(170,"b"),u(171,"Breadcrumb and Follow-Up Questions"),l(),g(172,"br"),d(173,"ul",56)(174,"li"),u(175,"The "),d(176,"b"),u(177,"breadcrumb"),l(),u(178," shows the learning path (Topic ? Chapter ? Section ? Page). Clicking a level focuses the practice on that part."),l(),d(179,"li")(180,"b"),u(181,"Predefined follow-up questions"),l(),u(182," appear below the main set. They come from the same syllabus section and guide the next step (e.g., identification, transformation, short explanation)."),l(),d(183,"li"),u(184,"As answers are submitted, the follow-ups adjust to reinforce areas that need more practice."),l()()(),d(185,"li")(186,"b"),u(187,"Out-of-Syllabus Control"),l(),g(188,"br"),d(189,"ul",56)(190,"li"),u(191,"If a learner asks about a topic that is not part of the predefined syllabus, the system shows: \u201CThis topic is out of syllabus.\u201D"),l(),d(192,"li"),u(193,"Only administrators can decide whether such questions may be answered using other sources."),l(),d(194,"li"),u(195,"This keeps practice within approved lessons unless specific permission is given."),l()()(),d(196,"li")(197,"b"),u(198,"Level Progress and Progress Bar"),l(),g(199,"br"),d(200,"ul",56)(201,"li"),u(202,"The module uses three levels: "),d(203,"b"),u(204,"Basic ? Intermediate ? Expert"),l(),u(205,"."),l(),d(206,"li"),u(207,"A "),d(208,"b"),u(209,"progress bar"),l(),u(210," with level markers shows the current level and the remaining path."),l(),d(211,"li"),u(212,"Clear labels and gentle animations help children track progress."),l()()(),d(213,"li")(214,"b"),u(215,"Moving to the Next Level"),l(),g(216,"br"),d(217,"ul",56)(218,"li"),u(219,"When all "),d(220,"b"),u(221,"questions"),l(),u(222," in a level are correct, a message and a short countdown appear."),l(),d(223,"li"),u(224,"The module then advances to the next level and updates the progress bar."),l(),d(225,"li"),u(226,"Difficulty increases gradually to build mastery step by step."),l()()(),d(227,"li")(228,"b"),u(229,"Celebrate Success"),l(),g(230,"br"),d(231,"ul",56)(232,"li"),u(233,"After completing all three levels, a "),d(234,"b"),u(235,"celebration"),l(),u(236," screen appears."),l(),d(237,"li"),u(238,"Learners can click "),d(239,"b"),u(240,"Start Over"),l(),u(241," to practise the same topic again or choose a new topic."),l()()(),d(242,"li")(243,"b"),u(244,"Reset or Change Topic"),l(),g(245,"br"),d(246,"ul",56)(247,"li"),u(248,"Use "),d(249,"b"),u(250,"Reset"),l(),u(251," to clear the current session and unlock the topic field."),l(),d(252,"li"),u(253,"Enter a new topic or select another suggestion to begin a new practice set."),l()()(),d(254,"li")(255,"b"),u(256,"Accessibility and Layout"),l(),g(257,"br"),d(258,"ul",56)(259,"li"),u(260,"Countdowns and status messages are written clearly so learners understand what is happening."),l(),d(261,"li"),u(262,"The layout adapts to different screens. Buttons and inputs are sized for comfortable tapping and clicking."),l()()(),d(263,"li")(264,"b"),u(265,"Troubleshooting"),l(),g(266,"br"),d(267,"ul",56)(268,"li")(269,"b"),u(270,"Invalid topic message:"),l(),u(271," Enter a clear grammar term (e.g., "),d(272,"i"),u(273,"articles"),l(),u(274,", "),d(275,"i"),u(276,"comparatives"),l(),u(277,", "),d(278,"i"),u(279,"passive voice"),l(),u(280,")."),l(),d(281,"li")(282,"b"),u(283,"Out of syllabus:"),l(),u(284," Choose a topic that appears in the syllabus list or ask an administrator about permission for extra topics."),l(),d(285,"li")(286,"b"),u(287,"Buttons disabled:"),l(),u(288," The "),d(289,"i"),u(290,"Generate"),l(),u(291," button appears after entering a valid topic; the "),d(292,"i"),u(293,"Validate"),l(),u(294," button appears after all blanks are filled."),l()()(),d(295,"li")(296,"b"),u(297,"Benefits for Children"),l(),g(298,"br"),d(299,"ul",56)(300,"li")(301,"b"),u(302,"Guided practice"),l(),u(303," with clear feedback builds confidence and accuracy."),l(),d(304,"li")(305,"b"),u(306,"Level-based progression"),l(),u(307," supports steady growth from basic understanding to higher skills."),l(),d(308,"li")(309,"b"),u(310,"Hints and teacher coaching"),l(),u(311," help learners correct mistakes and understand rules in simple language."),l(),d(312,"li")(313,"b"),u(314,"Predefined syllabus alignment"),l(),u(315," keeps practice consistent with classroom lessons."),l()()()(),Ne())}function wk(e,n){e&1&&(Re(0),d(1,"ul",55)(2,"li")(3,"b"),u(4,"Feature Currently Disabled"),l(),g(5,"br"),d(6,"ul",56)(7,"li"),u(8,"The Voice feature is currently under development and will be available soon."),l(),d(9,"li"),u(10,"Please check back later or contact support for more information."),l()()()(),Ne())}function Ck(e,n){e&1&&(Re(0),d(1,"ul",55)(2,"li")(3,"b"),u(4,"Feature Currently Disabled"),l(),g(5,"br"),d(6,"ul",56)(7,"li"),u(8,"The Find Word feature is currently under development and will be available soon."),l(),d(9,"li"),u(10,"Please check back later or contact support for more information."),l()()()(),Ne())}function xk(e,n){e&1&&Ii(0)}function Dk(e,n){e&1&&Ii(0)}function Ek(e,n){e&1&&Ii(0)}function Ik(e,n){e&1&&Ii(0)}function Sk(e,n){e&1&&Ii(0)}function Mk(e,n){if(e&1){let t=H();d(0,"div")(1,"div",50),I("click",function(){T(t);let r=C();return A(r.closeGuidePopup())}),l(),d(2,"div",51)(3,"button",52),I("click",function(){T(t);let r=C();return A(r.closeGuidePopup())}),u(4,"\xD7"),l(),Re(5,53),R(6,yk,125,0,"ng-container",54)(7,bk,316,0,"ng-container",54)(8,wk,11,0,"ng-container",54)(9,Ck,11,0,"ng-container",54)(10,xk,1,0,"ng-container",54)(11,Dk,1,0,"ng-container",54)(12,Ek,1,0,"ng-container",54)(13,Ik,1,0,"ng-container",54)(14,Sk,1,0,"ng-container",54),Ne(),l()()}if(e&2){let t=C();m(5),y("ngSwitch",t.selectedCardTitle),m(),y("ngSwitchCase","Grammar Chat"),m(),y("ngSwitchCase","Grammar Quiz"),m(),y("ngSwitchCase","Voice"),m(),y("ngSwitchCase","Find Word"),m(),y("ngSwitchCase","Grammar Quiz"),m(),y("ngSwitchCase","Listening"),m(),y("ngSwitchCase","Reading"),m(),y("ngSwitchCase","Writing"),m(),y("ngSwitchCase","Vocabulary Builder")}}var op=(()=>{class e{constructor(t,i,r,o,s){this.router=t,this.authService=i,this.host=r,this.brand=o,this.dialog=s,this.menuOpen=!1,this.showGuidePopup=!1,this.selectedCardTitle=null,this.showAccountMenu=!1,this.showPrivacyPopup=!1,this.showTermsPopup=!1,this.isAuthenticated=!1,this.username=null,this.cards=[{title:"Grammar Chat",image:"assets/images/home/Grammar_chat.png",action:()=>this.goToChat(),disabled:!1},{title:"Voice",image:"assets/images/home/voice.png",action:()=>this.goToVoice(),disabled:!0},{title:"Find Word",image:"assets/images/home/find_word.png",action:()=>this.goToFindword(),disabled:!0}]}ngOnInit(){this.isAuthenticated=this.authService.isLoggedIn(),this.username=localStorage.getItem("username"),this.authSub=this.authService.isLoggedIn$.subscribe(t=>{this.isAuthenticated=t,this.username=t?localStorage.getItem("username"):null,t||(this.showAccountMenu=!1)})}ngAfterViewInit(){}ngOnDestroy(){this.authSub?.unsubscribe()}get usernameInitial(){return(this.username||"").trim().charAt(0).toUpperCase()||"U"}get displayName(){let t=this.username||"";return t?(t.includes("@")?t.split("@")[0]:t).replace(/\b\w/g,r=>r.toUpperCase()):""}get displayEmail(){return this.username||""}toggleAccountMenu(){this.showAccountMenu=!this.showAccountMenu}openAccountMenu(){this.showAccountMenu=!0}closeAccountMenu(){this.showAccountMenu=!1}onDocClick(t){this.host.nativeElement.contains(t.target)||(this.showAccountMenu=!1)}toggleMenu(){this.menuOpen=!this.menuOpen}reloadPage(){window.location.href="/"}goToChat(){this.router.navigate(["/chat"])}goToVoice(){console.log("Voice feature is currently disabled")}goToFindword(){console.log("Find Word feature is currently disabled")}goToDetails(t){this.router.navigate(["/details"],{queryParams:{topic:t}})}handleCardAction(t){t.disabled||t.action()}openGuidePopup(t){this.selectedCardTitle=t,this.showGuidePopup=!0}closeGuidePopup(){this.showGuidePopup=!1,this.selectedCardTitle=null}goToAccount(){this.router.navigate(["/home"]),this.showAccountMenu=!1}logout(){this.authService.logout().subscribe({next:()=>{localStorage.removeItem("username"),this.showAccountMenu=!1,this.router.navigate(["/login"])},error:()=>{localStorage.removeItem("username"),this.showAccountMenu=!1,this.router.navigate(["/login"])}})}openPrivacyPopup(t){t.preventDefault(),this.showPrivacyPopup=!0}closePrivacyPopup(){this.showPrivacyPopup=!1}openTermsPopup(t){t.preventDefault(),this.showTermsPopup=!0}closeTermsPopup(){this.showTermsPopup=!1}openPronunciation(){let t=this.dialog.open(Jy,{width:"90vw",maxWidth:"95vw",height:"85vh",disableClose:!0})}static{this.\u0275fac=function(i){return new(i||e)(w(ut),w(Gr),w(re),w(pn),w(ip))}}static{this.\u0275cmp=pe({type:e,selectors:[["app-home"]],hostBindings:function(i,r){i&1&&I("click",function(s){return r.onDocClick(s)},!1,Xa)},decls:80,vars:7,consts:[["loginIcon",""],[1,"hero"],[1,"navbar"],[1,"navbar-container"],[1,"logo"],[3,"click","src","alt"],[1,"nav-links"],[1,"main-menu-dropdown"],["href","#","aria-haspopup","true","aria-expanded","false",1,"nav-link",3,"click"],[1,"fas","fa-caret-down"],[1,"submenu"],["routerLink","/chat/1","role","button","aria-pressed","false"],["routerLink","/chat/2","role","button","aria-pressed","false"],["routerLink","/mj-chat","role","button","aria-pressed","false"],["routerLink","/generate-questions","routerLinkActive","active-link",1,"nav-link--disabled"],["routerLink","/voice","routerLinkActive","active-link",1,"nav-link--disabled"],["routerLink","/listen","routerLinkActive","active-link",1,"nav-link--disabled"],["routerLink","/reading","routerLinkActive","active-link",1,"nav-link--disabled"],["routerLink","/writing","routerLinkActive","active-link",1,"nav-link--disabled"],["routerLink","/vocabulary-builder","routerLinkActive","active-link",1,"nav-link--disabled"],["routerLink","/findword","routerLinkActive","active-link",1,"nav-link--disabled"],["href","#","role","button","aria-pressed","false",3,"click"],["routerLink","/personality-improvement","routerLinkActive","active-link",1,"nav-link--disabled"],["routerLink","/body-language-improvement","routerLinkActive","active-link",1,"nav-link--disabled"],[1,"nav-actions"],[4,"ngIf","ngIfElse"],[1,"hero-text"],[1,"cards-section"],[1,"section-title"],[1,"highlight"],[1,"cards-container"],["class","card","role","button",3,"card--disabled","tabindex","click","keydown.enter","keydown.space",4,"ngFor","ngForOf"],[4,"ngIf"],[1,"avatar",3,"click"],["class","account-menu",3,"mouseleave",4,"ngIf"],[1,"account-menu",3,"mouseleave"],[1,"account-header"],[1,"avatar","avatar-lg"],[1,"account-meta"],[1,"account-name"],[1,"account-email"],[1,"account-item",3,"click"],["routerLink","/login","aria-label","Login",1,"login-button"],[1,"fas","fa-user"],["role","button",1,"card",3,"click","keydown.enter","keydown.space","tabindex"],[1,"card-image"],[3,"src","alt"],[1,"card-content"],[1,"card-buttons"],[1,"know-more-btn",3,"click","disabled"],[1,"user-guide-overlay",3,"click"],["role","dialog","aria-modal","true",1,"user-guide-modal"],["aria-label","Close",1,"user-guide-close-icon",3,"click"],[3,"ngSwitch"],[4,"ngSwitchCase"],[2,"text-align","justify","font-size","15px"],[2,"list-style","unset","margin-left","1.25rem"]],template:function(i,r){if(i&1){let o=H();d(0,"div",1)(1,"nav",2)(2,"div",3)(3,"div",4)(4,"img",5),I("click",function(){return T(o),A(r.reloadPage())}),l()(),d(5,"ul",6)(6,"li",7)(7,"a",8),I("click",function(a){return T(o),A(a.preventDefault())}),u(8," Chat "),g(9,"i",9),l(),d(10,"ul",10)(11,"li")(12,"a",11),u(13," Chat D-ID "),l()(),d(14,"li")(15,"a",12),u(16," Chat KD Talker "),l()(),d(17,"li")(18,"a",13),u(19," Chat "),l()()()(),d(20,"li")(21,"a",14),u(22,"Grammar"),l()(),d(23,"li")(24,"a",15),u(25,"Voice"),l()(),d(26,"li")(27,"a",16),u(28,"Listening"),l()(),d(29,"li")(30,"a",17),u(31,"Reading"),l()(),d(32,"li")(33,"a",18),u(34,"Writing"),l()(),d(35,"li")(36,"a",19),u(37,"Vocabulary-Builder"),l()(),d(38,"li")(39,"a",20),u(40,"Find Word"),l()(),d(41,"li",7)(42,"a",8),I("click",function(a){return T(o),A(a.preventDefault())}),u(43," General "),g(44,"i",9),l(),d(45,"ul",10)(46,"li")(47,"a",21),I("click",function(a){return T(o),r.openPronunciation(),A(a.preventDefault())}),u(48," Pronunciation Trainer "),l()(),d(49,"li")(50,"a",22),u(51,"Personality Improvement"),l()(),d(52,"li")(53,"a",23),u(54,"Body Language Improvement"),l()()()()(),d(55,"div",24),R(56,gk,4,3,"ng-container",25)(57,vk,2,1,"ng-template",null,0,In),l()()(),d(59,"div",26)(60,"h1"),u(61),l(),d(62,"h2"),u(63,"A Self-Learning System"),l(),d(64,"p"),u(65," It is a personalized self-learning system helps students to improve their language skills through interactive"),g(66,"br"),u(67,"and customized exercises. With engaging activities and instant feedback,"),g(68,"br"),u(69,"learning becomes easy and enjoyable! "),l()(),d(70,"section",27)(71,"h2",28),u(72," What would you like to "),d(73,"span",29),u(74,"learn"),l(),u(75," today? "),l(),d(76,"div",30),R(77,_k,7,6,"div",31),l()(),R(78,Mk,15,10,"div",32),l(),g(79,"app-footer")}if(i&2){let o=Gt(58);m(4),y("src",r.brand.logo,ee)("alt",r.brand.name+" Logo"),m(52),y("ngIf",r.isAuthenticated&&r.username)("ngIfElse",o),m(5),Ie(r.brand.name),m(16),y("ngForOf",r.cards),m(),y("ngIf",r.showGuidePopup)}},dependencies:[br,vt,Mo,Sc,ii,dy,Tl],styles:[".hero[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;position:relative}.hero-text[_ngcontent-%COMP%]{color:#fff;text-align:left;height:100vh;display:flex;flex-direction:column;justify-content:center;padding-left:1vw;background-image:url(/assets/images/home/background.png);background-repeat:no-repeat;background-position:center center;background-size:cover;position:relative;top:5vw;padding-bottom:5vw}h1[_ngcontent-%COMP%]{font-size:7vw;font-family:Amonk_Outline;margin-bottom:3vw}.hero-text[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:1.5vw;font-weight:600;color:#0f0}.hero-text[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{font-size:1vw;line-height:1.5vw}.navbar[_ngcontent-%COMP%]{background-color:#fff;box-shadow:0 2px 4px #0000001a;position:fixed;font-size:1vw;width:100%;z-index:1000}.navbar-container[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:0vw 1vw}.logo[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1vw}.logo[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{height:5vw;width:auto;cursor:pointer}.logo[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:1.5vw;font-weight:700;color:#007bff}.nav-links[_ngcontent-%COMP%]{display:flex;gap:2vw;list-style:none;margin:0;padding:0;flex:1;justify-content:center}.nav-links[_ngcontent-%COMP%] li[_ngcontent-%COMP%] a[_ngcontent-%COMP%], .nav-links[_ngcontent-%COMP%] li[_ngcontent-%COMP%] .nav-link[_ngcontent-%COMP%]{text-decoration:none;color:#333;font-size:1.5vw;font-weight:700}.nav-links[_ngcontent-%COMP%] li[_ngcontent-%COMP%] .nav-link[_ngcontent-%COMP%]:hover, .nav-links[_ngcontent-%COMP%] li[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{color:#007bff}.nav-link--disabled[_ngcontent-%COMP%]{opacity:.6;cursor:not-allowed;pointer-events:none}.login-button[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:2.4vw;height:2.4vw;border-radius:50%;border:2px solid #006780;color:#006780;background:#fff;font-size:1.2vw;text-decoration:none;transition:background .2s,color .2s,transform .2s,box-shadow .2s;box-shadow:0 2px 8px #5d91c31f}.login-button[_ngcontent-%COMP%]:hover{background:#006780;color:#fff;transform:translateY(-1px) scale(1.05);box-shadow:0 4px 16px #5d91c32e}.nav-actions[_ngcontent-%COMP%]{position:relative;padding-right:1.5vw}.avatar[_ngcontent-%COMP%]{width:2.4vw;height:2.4vw;min-width:32px;min-height:32px;border-radius:50%;background:#e6f2ff;border:2px solid #137ec4;color:#137ec4;display:inline-flex;align-items:center;justify-content:center;font-weight:800;cursor:pointer;box-shadow:0 2px 8px #5d91c31f}.avatar-lg[_ngcontent-%COMP%]{width:44px;height:44px;border-radius:50%;background:#e6f2ff;border:2px solid #137ec4;color:#137ec4;display:inline-flex;align-items:center;justify-content:center;font-weight:800}.account-menu[_ngcontent-%COMP%]{position:absolute;top:3.2vw;right:0;min-width:260px;background:#fff;border-radius:12px;box-shadow:0 12px 24px #0000001f;padding:12px;z-index:1200}.account-header[_ngcontent-%COMP%]{display:flex;gap:12px;align-items:center;padding:6px 6px 10px}.account-meta[_ngcontent-%COMP%]{display:flex;flex-direction:column}.account-name[_ngcontent-%COMP%]{font-weight:800;color:#111827}.account-email[_ngcontent-%COMP%]{color:#6b7280;font-size:.9rem}.account-item[_ngcontent-%COMP%]{padding:10px;border-radius:8px;cursor:pointer;color:#111827}.account-item[_ngcontent-%COMP%]:hover{background:#f3f4f6}.account-menu[_ngcontent-%COMP%] hr[_ngcontent-%COMP%]{margin:8px 0;border:none;border-top:1px solid #e5e7eb}.card[_ngcontent-%COMP%]{background-color:#fff;border-radius:10px;box-shadow:0 4px 8px #0000001a;overflow:hidden;transition:transform .3s ease;width:100%;max-width:460px;margin:auto;cursor:pointer}.card[_ngcontent-%COMP%]:hover{transform:translateY(-10px)}.card--disabled[_ngcontent-%COMP%]{opacity:.6;cursor:not-allowed;pointer-events:none}.card--disabled[_ngcontent-%COMP%]:hover{transform:none}.card--disabled[_ngcontent-%COMP%] .card-image[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{filter:grayscale(100%)}.card--disabled[_ngcontent-%COMP%] .know-more-btn[_ngcontent-%COMP%]{opacity:.5;cursor:not-allowed;background-color:#ccc;border-color:#ccc;color:#666}.card--disabled[_ngcontent-%COMP%] .know-more-btn[_ngcontent-%COMP%]:hover{background-color:#ccc;border-color:#ccc;color:#666;transform:none;box-shadow:none}.card-image[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:100%;height:auto;display:block}.card-content[_ngcontent-%COMP%]{padding:1.5vw;text-align:left}.cards-section[_ngcontent-%COMP%]{text-align:center;padding:3vw 2vw;background-color:#f9f9f9;position:relative}.section-title[_ngcontent-%COMP%]{font-size:2.5vw;font-weight:700;margin-bottom:2vw}.cards-container[_ngcontent-%COMP%]{gap:3vw;justify-content:center;display:grid;grid-template-columns:repeat(3,1fr);margin:0 auto;width:80%}.card-buttons[_ngcontent-%COMP%]{display:flex;gap:1vw;margin-top:1vw;flex-wrap:nowrap;justify-content:center}.card-button[_ngcontent-%COMP%]{white-space:nowrap;padding:.5vw;font-size:1vw;font-weight:700;color:#007bff;background-color:transparent;border:2px solid #007bff;border-radius:5px;cursor:pointer;transition:all .3s ease}.card-button[_ngcontent-%COMP%]:hover{background-color:#007bff;color:#fff}.user-guide-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background:#00000059;z-index:2000}.user-guide-modal[_ngcontent-%COMP%]{position:fixed;top:52%;left:50%;transform:translate(-50%,-50%);height:38vw;width:50vw;background:linear-gradient(135deg,#fff 80%,#e3fcec);color:#222;box-shadow:0 12px 40px #5d91c338;border-radius:18px;padding:1vw;z-index:2001;overflow:visible;border:10px solid var(--main-accent-color);box-sizing:border-box}.user-guide-modal[_ngcontent-%COMP%] > ul[_ngcontent-%COMP%], .user-guide-modal[_ngcontent-%COMP%] > ol[_ngcontent-%COMP%]{max-height:34.6vw;overflow-y:auto;padding-right:.5vw;margin:0}.user-guide-close-icon[_ngcontent-%COMP%]{top:-22px;right:-22px}.user-guide-modal[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{line-height:1.7;font-size:1.1vw;background:#5d91c312;padding:.5vw;box-shadow:0 2px 8px #5d91c30f}.user-guide-modal[_ngcontent-%COMP%] li[_ngcontent-%COMP%] b[_ngcontent-%COMP%]{color:#2b6296;font-size:1.15vw}@media (max-width: 600px){.user-guide-modal[_ngcontent-%COMP%]{width:90vw;height:60vw;border-radius:12px;padding:4vw 2vw 2vw}.user-guide-modal[_ngcontent-%COMP%] > ul[_ngcontent-%COMP%], .user-guide-modal[_ngcontent-%COMP%] > ol[_ngcontent-%COMP%]{max-height:52vw;overflow-y:auto;padding-right:1.5vw}.user-guide-close-icon[_ngcontent-%COMP%]{font-size:6vw;top:2vw;right:2vw;width:6vw;height:6vw;display:flex;align-items:center;justify-content:center;line-height:1}.card-button[_ngcontent-%COMP%], .know-more-btn[_ngcontent-%COMP%]{font-size:2.8vw;padding:8px 12px}}.card-button[_ngcontent-%COMP%], .know-more-btn[_ngcontent-%COMP%]{padding:10px 18px;background:#006780;color:#fff;border:2px solid #006780;border-radius:8px;font-size:1vw;font-weight:700;cursor:pointer;margin:0 6px 6px 0;box-shadow:0 2px 8px #5d91c31f;transition:background .2s,box-shadow .2s,transform .2s,color .2s}.card-button[_ngcontent-%COMP%]:hover, .know-more-btn[_ngcontent-%COMP%]:hover{background:#fff;color:#006780;box-shadow:0 4px 16px #5d91c32e;transform:scale(1.05)}.privacy-popup-content[_ngcontent-%COMP%]{max-height:60vh;overflow-y:auto;padding-right:1vw}.main-menu-dropdown[_ngcontent-%COMP%]{position:relative}.main-menu-dropdown[_ngcontent-%COMP%] > .nav-link[_ngcontent-%COMP%]{display:flex;align-items:center;cursor:pointer}.main-menu-dropdown[_ngcontent-%COMP%] .fas.fa-caret-down[_ngcontent-%COMP%]{margin-left:.5vw;font-size:1vw;transition:transform .2s}.main-menu-dropdown[_ngcontent-%COMP%]:hover .fas.fa-caret-down[_ngcontent-%COMP%], .main-menu-dropdown[_ngcontent-%COMP%]:focus-within .fas.fa-caret-down[_ngcontent-%COMP%]{transform:rotate(180deg)}.submenu[_ngcontent-%COMP%]{display:none;position:absolute;top:100%;left:50%;transform:translate(-50%);min-width:220px;background:#fff;box-shadow:0 8px 24px #0000001f;border-radius:8px;padding:.5vw 0;z-index:1100;list-style:none;white-space:nowrap}.main-menu-dropdown[_ngcontent-%COMP%]:hover .submenu[_ngcontent-%COMP%], .main-menu-dropdown[_ngcontent-%COMP%]:focus-within .submenu[_ngcontent-%COMP%]{display:block}.submenu[_ngcontent-%COMP%] li[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{display:block;padding:.7vw 1vw;color:#333;font-size:1.2vw;font-weight:600;text-decoration:none;border-radius:6px;transition:background .2s,color .2s}.submenu[_ngcontent-%COMP%] li[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover, .submenu[_ngcontent-%COMP%] li[_ngcontent-%COMP%] a.active-link[_ngcontent-%COMP%]{background:#e6f2ff;color:#137ec4}"]})}}return e})();function Tk(e,n){if(e&1&&(d(0,"div",56),u(1),l()),e&2){let t=C();y("@fadeInOut",void 0),m(),Se(" ",t.errorMessage," ")}}function Ak(e,n){e&1&&(d(0,"small",57),u(1," Email or Username is required. "),l())}function Ok(e,n){e&1&&(d(0,"small",57),u(1," Password is required. "),l())}function kk(e,n){e&1&&(Re(0),u(1," Login "),Ne())}function Pk(e,n){e&1&&(g(0,"span",58),u(1," Logging in... "))}function Rk(e,n){if(e&1){let t=H();d(0,"div",59)(1,"div",60)(2,"h3"),u(3,"Forgot Password"),l(),d(4,"p"),u(5,"Enter your email to receive password reset instructions."),l(),d(6,"input",61),xo("ngModelChange",function(r){T(t);let o=C();return sc(o.forgotEmail,r)||(o.forgotEmail=r),A(r)}),l(),d(7,"button",62),I("click",function(){T(t);let r=C();return A(r.sendPasswordReset())}),u(8,"Send Reset Link"),l(),d(9,"button",63),I("click",function(){T(t);let r=C();return A(r.closeForgotPasswordModal())}),u(10,"Close"),l()()()}if(e&2){let t=C();y("@fadeInOut",void 0),m(6),Co("ngModel",t.forgotEmail)}}var tb=(()=>{class e{constructor(t,i,r,o,s){this.formBuilder=t,this.router=i,this.authService=r,this.changeDetectorRef=o,this.brandService=s,this.close=new ne,this.isLoading=!1,this.isSubmitted=!1,this.showPassword=!1,this.errorMessage="",this.showForgotModal=!1,this.forgotEmail="",this.destroy$=new B,this.REDIRECT_URL_KEY="redirectAfterLogin",this.DEFAULT_REDIRECT="/home",this.learningFacts=["Master grammar with adaptive quizzes","Improve reading with AI-generated passages","Train listening and pronunciation effectively"],this.signInForm=this.createSignInForm()}ngOnInit(){this.initializeComponent()}ngOnDestroy(){this.cleanup()}onSubmit(){if(this.isSubmitted=!0,this.signInForm.markAllAsTouched(),this.signInForm.invalid){this.focusFirstInvalidField();return}this.performSignIn()}togglePasswordVisibility(){this.showPassword=!this.showPassword}openForgotPasswordModal(t){t.preventDefault(),this.showForgotModal=!0}closeForgotPasswordModal(){this.showForgotModal=!1,this.forgotEmail=""}sendPasswordReset(){!this.forgotEmail||!this.isValidEmail(this.forgotEmail)||(this.showSuccessMessage("Password reset link sent to your email"),this.closeForgotPasswordModal())}closeComponent(){this.router.navigate([this.DEFAULT_REDIRECT]),this.close.emit()}get emailControl(){return this.signInForm.get("email")}get passwordControl(){return this.signInForm.get("password")}get isFormValid(){return this.signInForm.valid}get socialLinks(){return this.brandService.socialLinksCurrent}get websiteDisplay(){return"www."+this.socialLinks.website.replace(/^https?:\/\/(www\.)?/,"")}createSignInForm(){return this.formBuilder.group({email:["",[Nn.required,Nn.minLength(3)]],password:["",[Nn.required,Nn.minLength(6)]],rememberMe:[!1]})}initializeComponent(){this.clearErrorMessage(),this.authService.isLoggedIn()&&this.navigateToRedirectUrl()}performSignIn(){let t={username:this.emailControl?.value?.trim()||"",password:this.passwordControl?.value||""};this.setLoadingState(!0),this.clearErrorMessage(),this.authService.login(t).pipe(ot(this.destroy$),rt(()=>this.setLoadingState(!1))).subscribe({next:()=>this.handleSignInSuccess(t.username),error:i=>this.handleSignInError(i)})}handleSignInSuccess(t){this.showSuccessMessage("Sign in successful"),this.navigateToRedirectUrl()}handleSignInError(t){this.errorMessage=t.message||"Sign in failed. Please try again.",this.changeDetectorRef.markForCheck(),setTimeout(()=>{this.clearErrorMessage()},5e3)}navigateToRedirectUrl(){let t=localStorage.getItem(this.REDIRECT_URL_KEY);this.isValidRedirectUrl(t)||(t=this.DEFAULT_REDIRECT),localStorage.removeItem(this.REDIRECT_URL_KEY),this.router.navigate([t])}isValidRedirectUrl(t){return!(!t||t.trim()===""||!t.startsWith("/")||t.includes("..")||t.startsWith("//"))}setLoadingState(t){this.isLoading=t,this.changeDetectorRef.markForCheck()}clearErrorMessage(){this.errorMessage="",this.changeDetectorRef.markForCheck()}showSuccessMessage(t){console.log(t)}focusFirstInvalidField(){setTimeout(()=>{document.querySelector(".ng-invalid")?.focus()},0)}isValidEmail(t){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)}cleanup(){this.destroy$.next(),this.destroy$.complete()}triggerSignIn(){this.onSubmit()}get authStatus$(){return this.authService.isLoggedIn$}get isAuthenticated(){return this.authService.isLoggedIn()}static{this.\u0275fac=function(i){return new(i||e)(w(Kc),w(ut),w(Gr),w(Ve),w(pn))}}static{this.\u0275cmp=pe({type:e,selectors:[["app-sign-in"]],outputs:{close:"close"},standalone:!0,features:[Fe],decls:73,vars:29,consts:[["loggingIn",""],[1,"signin-popup","ai-bg-animate"],["aria-hidden","true",1,"ai-particle-bg"],["role","banner",1,"signin-brand-logo"],["routerLink","/",1,"brand-link"],[1,"brand-logo-img",3,"src","alt"],[1,"social-icons","signin-social-icons"],["target","_blank","rel","noopener noreferrer","aria-label","LinkedIn",1,"social-icon","linkedin",3,"href"],["aria-hidden","true",1,"fab","fa-linkedin-in"],["target","_blank","rel","noopener noreferrer","aria-label","YouTube",1,"social-icon","youtube",3,"href"],["aria-hidden","true",1,"fab","fa-youtube"],["target","_blank","rel","noopener noreferrer","aria-label","Facebook",1,"social-icon","facebook",3,"href"],["aria-hidden","true",1,"fab","fa-facebook-f"],["target","_blank","rel","noopener noreferrer","aria-label","Instagram",1,"social-icon","instagram",3,"href"],["aria-hidden","true",1,"fab","fa-instagram"],["target","_blank","rel","noopener noreferrer","aria-label","Website",1,"social-icon","website",3,"href"],["aria-hidden","true",1,"fas","fa-globe"],[1,"signin-header"],[1,"auth-card"],[1,"card-inner"],[1,"card-front"],[1,"card-content"],[1,"side-panel","side-left"],["src","assets/images/login/lion.png","alt","Lion",1,"side-img"],[1,"side-welcome-overlay"],[1,"welcome-back-title"],[1,"welcome-back-desc"],[1,"main-panel"],[1,"logo-header"],[1,"py-learn-text"],[1,"self-learning-system"],["type","button","aria-label","Close",1,"signin-close",3,"click"],[1,"signin-title"],[1,"login-text"],["class","signin-error-toast","role","alert",4,"ngIf"],["novalidate","",3,"ngSubmit","formGroup"],[1,"signin-row"],[1,"signin-field"],["for","email"],["id","email","type","email","placeholder","you@example.com","formControlName","email"],["class","error",4,"ngIf"],["for","password"],[1,"input-with-icon"],["id","password","placeholder","\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022","formControlName","password",3,"type"],["type","button",1,"eye-toggle",3,"click"],[1,"signin-row","signin-options-row"],[1,"remember-me"],[1,"switch"],["id","rememberMe","type","checkbox","formControlName","rememberMe"],[1,"slider"],[1,"forgot-password"],["href","#",1,"forgot-link",3,"click"],["type","submit",1,"signin-btn","ai-pulse",3,"disabled"],[4,"ngIf","ngIfElse"],["class","forgot-modal-bg",4,"ngIf"],["target","_blank","rel","noopener noreferrer",1,"signin-watermark",3,"href"],["role","alert",1,"signin-error-toast"],[1,"error"],[1,"spinner"],[1,"forgot-modal-bg"],[1,"forgot-modal"],["type","email","placeholder","Your email",3,"ngModelChange","ngModel"],[1,"signin-btn",3,"click"],[1,"modal-close",3,"click"]],template:function(i,r){if(i&1){let o=H();d(0,"section",1),g(1,"div",2),d(2,"div",3)(3,"a",4),g(4,"img",5),l()(),d(5,"div",6)(6,"a",7),g(7,"i",8),l(),d(8,"a",9),g(9,"i",10),l(),d(10,"a",11),g(11,"i",12),l(),d(12,"a",13),g(13,"i",14),l(),d(14,"a",15),g(15,"i",16),l()(),g(16,"div",17),d(17,"div",18)(18,"div",19)(19,"div",20)(20,"div",21)(21,"div",22),g(22,"img",23),d(23,"div",24)(24,"div",25),u(25,"Welcome Back!"),l(),d(26,"div",26),u(27,"Sign in to continue your learning journey."),l()()(),d(28,"div",27)(29,"div",28)(30,"span",29),u(31),l(),d(32,"div",30),u(33,"(A Self-Learning System)"),l()(),d(34,"button",31),I("click",function(){return T(o),A(r.closeComponent())}),u(35,"\xD7"),l(),d(36,"h2",32)(37,"span",33),u(38,"Login"),l()(),R(39,Tk,2,2,"div",34),d(40,"form",35),I("ngSubmit",function(){return T(o),A(r.onSubmit())}),d(41,"div",36)(42,"div",37)(43,"label",38),u(44,"Email or Username"),l(),g(45,"input",39),R(46,Ak,2,0,"small",40),l()(),d(47,"div",36)(48,"div",37)(49,"label",41),u(50,"Password"),l(),d(51,"div",42),g(52,"input",43),d(53,"button",44),I("click",function(){return T(o),A(r.togglePasswordVisibility())}),u(54),l()(),R(55,Ok,2,0,"small",40),l()(),d(56,"div",45)(57,"div",46)(58,"label",47),g(59,"input",48)(60,"span",49),l(),d(61,"span"),u(62,"Remember me"),l()(),d(63,"div",50)(64,"a",51),I("click",function(a){return T(o),A(r.openForgotPasswordModal(a))}),u(65,"Forgot password?"),l()()(),d(66,"button",52),R(67,kk,2,0,"ng-container",53)(68,Pk,2,0,"ng-template",null,0,In),l()()()()()()(),R(70,Rk,11,2,"div",54),d(71,"a",55),u(72),l()()}if(i&2){let o=Gt(69);m(3),le("aria-label",r.brandService.name+" Home"),m(),y("src",r.brandService.logo,ee)("alt",r.brandService.name+" Logo"),m(2),y("href",r.socialLinks.linkedin,ee),m(2),y("href",r.socialLinks.youtube,ee),m(2),y("href",r.socialLinks.facebook,ee),m(2),y("href",r.socialLinks.instagram,ee),m(2),y("href",r.socialLinks.website,ee),m(17),Ie(r.brandService.name),m(8),y("ngIf",r.errorMessage),m(),y("formGroup",r.signInForm),m(5),he("invalid",r.isSubmitted&&(r.emailControl==null?null:r.emailControl.invalid)),le("aria-invalid",r.isSubmitted&&(r.emailControl==null?null:r.emailControl.invalid)),m(),y("ngIf",r.isSubmitted&&(r.emailControl==null||r.emailControl.errors==null?null:r.emailControl.errors.required)),m(6),he("invalid",r.isSubmitted&&(r.passwordControl==null?null:r.passwordControl.invalid)),y("type",r.showPassword?"text":"password"),le("aria-invalid",r.isSubmitted&&(r.passwordControl==null?null:r.passwordControl.invalid)),m(),le("aria-label",r.showPassword?"Hide password":"Show password")("aria-pressed",r.showPassword),m(),Se(" ",r.showPassword?"\u{1F648}":"\u{1F441}\uFE0F"," "),m(),y("ngIf",r.isSubmitted&&(r.passwordControl==null||r.passwordControl.errors==null?null:r.passwordControl.errors.required)),m(11),y("disabled",r.isLoading),m(),y("ngIf",!r.isLoading)("ngIfElse",o),m(3),y("ngIf",r.showForgotModal),m(),y("href",r.socialLinks.website,ee),m(),Se(" ",r.websiteDisplay," ")}},dependencies:[_t,vt,Xc,Zc,Jn,Fh,Er,Wc,Bo,Uo,Ir,jo,ii],styles:['.signin-popup[_ngcontent-%COMP%]{position:fixed;top:0;left:0;width:100vw;height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:1000;background:#05234b;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.ai-bg-animate[_ngcontent-%COMP%]{background:linear-gradient(135deg,#05234b,#0f3460,#1a4b7a,#05234b,#0a2d54);background-size:400% 400%;animation:_ngcontent-%COMP%_aiGradientShift 8s ease-in-out infinite}@keyframes _ngcontent-%COMP%_aiGradientShift{0%{background-position:0% 50%}50%{background-position:100% 50%}to{background-position:0% 50%}}.ai-particle-bg[_ngcontent-%COMP%]{position:absolute;inset:0;overflow:hidden;pointer-events:none}.ai-particle-bg[_ngcontent-%COMP%]:before{content:"";position:absolute;width:100%;height:100%;background-image:radial-gradient(2px 2px at 20px 30px,rgba(255,255,255,.1),transparent),radial-gradient(2px 2px at 40px 70px,rgba(56,189,248,.1),transparent),radial-gradient(1px 1px at 90px 40px,rgba(255,255,255,.1),transparent);background-size:100px 80px,120px 90px,110px 100px;animation:_ngcontent-%COMP%_aiParticles 20s linear infinite}@keyframes _ngcontent-%COMP%_aiParticles{0%{transform:translate(0)}to{transform:translate(-100px,-100px)}}.ai-pulse[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_aiPulse 2s ease-in-out infinite}@keyframes _ngcontent-%COMP%_aiPulse{0%{box-shadow:0 0 #38bdf866}70%{box-shadow:0 0 0 10px #38bdf800}to{box-shadow:0 0 #38bdf800}}.signin-title[_ngcontent-%COMP%]{color:#38bdf8;font-size:2.1rem;font-weight:800;margin-bottom:12px;text-align:center;letter-spacing:1px;text-shadow:0 2px 8px #0008}form[_ngcontent-%COMP%]{width:100%}.signin-row[_ngcontent-%COMP%]{display:flex;gap:24px;margin-bottom:18px}.signin-field[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column}.signin-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{color:#fff;font-weight:600;margin-bottom:6px;font-size:1rem;letter-spacing:.5px}.signin-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{background:#fff;color:#18314a;border:none;border-radius:8px;padding:12px 14px;font-size:1rem;margin-bottom:2px;box-shadow:0 1px 4px #0002;transition:border .2s,box-shadow .2s}.signin-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus{outline:2px solid #1de9b6;border-color:#1de9b6;box-shadow:0 0 0 2px #1de9b688}.signin-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder{color:#b0b8c1;opacity:1}.signin-field[_ngcontent-%COMP%] small.error[_ngcontent-%COMP%]{color:#ff5252;font-size:.85rem;margin-top:4px}.signin-options-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:2vw;margin-top:-8px}.remember-me[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;font-size:1rem;color:#b0b8c1}.remember-me[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{accent-color:#38bdf8;width:16px;height:16px}.switch[_ngcontent-%COMP%]{position:relative;display:inline-block;width:48px;height:24px}.switch[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{opacity:0;width:0;height:0}.slider[_ngcontent-%COMP%]{position:absolute;cursor:pointer;inset:0;background-color:#ccc;transition:.4s;border-radius:24px}.slider[_ngcontent-%COMP%]:before{position:absolute;content:"";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;transition:.4s;border-radius:50%}input[_ngcontent-%COMP%]:checked + .slider[_ngcontent-%COMP%]{background-color:#38bdf8}input[_ngcontent-%COMP%]:checked + .slider[_ngcontent-%COMP%]:before{transform:translate(24px)}.forgot-password[_ngcontent-%COMP%]{font-size:1rem}.forgot-link[_ngcontent-%COMP%]{color:#38bdf8;text-decoration:underline;font-weight:500;cursor:pointer}.signin-btn[_ngcontent-%COMP%]{width:100%;background:#18314a;color:#fff;border:none;border-radius:8px;padding:14px 0;font-size:1.1rem;font-weight:700;margin-bottom:18px;cursor:pointer;transition:background .2s,color .2s}.signin-btn[_ngcontent-%COMP%]:hover{background:#38bdf8}.signin-footer[_ngcontent-%COMP%]{color:#b0b8c1;font-size:.95rem;text-align:center;margin-top:8px}.signin-footer[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:#38bdf8;text-decoration:underline;margin-left:4px;font-weight:600;cursor:pointer}.signin-close[_ngcontent-%COMP%]{position:absolute;top:18px;right:18px;width:38px;height:38px;border:none;background:#14263c;color:#fff;border-radius:50%;font-size:2rem;font-weight:700;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;transition:background .2s,color .2s;box-shadow:0 2px 8px #0005}.signin-close[_ngcontent-%COMP%]:hover{background:#38bdf8;color:#18314a}.spinner[_ngcontent-%COMP%]{display:inline-block;width:18px;height:18px;border:3px solid #fff;border-top:3px solid #38bdf8;border-radius:50%;animation:_ngcontent-%COMP%_spin .7s linear infinite;vertical-align:middle;margin-right:8px}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.signin-error-toast[_ngcontent-%COMP%]{background:transparent;color:#ff5252;font-weight:700;border-radius:8px;border:1px solid #ff5252;padding:8px 18px;margin:12px 0;text-align:center;animation:_ngcontent-%COMP%_shakeError .3s cubic-bezier(.39,.58,.57,1)}@keyframes _ngcontent-%COMP%_shakeError{0%{transform:translate(0)}20%{transform:translate(-8px)}40%{transform:translate(8px)}60%{transform:translate(-8px)}80%{transform:translate(8px)}to{transform:translate(0)}}.forgot-modal-bg[_ngcontent-%COMP%]{position:fixed;inset:0;background:#1e293be6;z-index:2000;display:flex;align-items:center;justify-content:center;animation:_ngcontent-%COMP%_fadeInModalBg .4s}@keyframes _ngcontent-%COMP%_fadeInModalBg{0%{opacity:0}to{opacity:1}}.forgot-modal[_ngcontent-%COMP%]{background:#fff;border-radius:18px;box-shadow:0 8px 32px #38bdf844,0 0 24px #1e293b88;padding:32px 36px 28px;min-width:320px;max-width:90vw;text-align:center;z-index:2001;display:flex;flex-direction:column;align-items:center;animation:_ngcontent-%COMP%_fadeInModal .4s}@keyframes _ngcontent-%COMP%_fadeInModal{0%{opacity:0;transform:scale(.98)}to{opacity:1;transform:scale(1)}}.forgot-modal[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{color:#38bdf8;margin:12px 0 8px;font-size:1.4em;font-weight:700}.forgot-modal[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:#23272b;font-size:1.08em;margin-bottom:18px}.forgot-modal[_ngcontent-%COMP%] input[type=email][_ngcontent-%COMP%]{background:#f4f6fa;color:#18314a;border:none;border-radius:8px;padding:12px 14px;font-size:1rem;margin-bottom:12px;box-shadow:0 1px 4px #0002;width:100%}.modal-close[_ngcontent-%COMP%]{width:23%;background:#18314a;color:#fff;border:none;border-radius:8px;padding:14px 0;font-size:1.1rem;font-weight:700;margin-bottom:0;cursor:pointer;transition:background .2s,color .2s;display:block}.modal-close[_ngcontent-%COMP%]:hover{background:#38bdf8;color:#18314a}.eye-toggle[_ngcontent-%COMP%]{position:absolute;right:12px;top:50%;transform:translateY(-50%);background:none;border:none;font-size:1.3em;color:#888;cursor:pointer;z-index:2;padding:0;line-height:1;opacity:.7;transition:color .2s,opacity .2s}#password[_ngcontent-%COMP%]{padding-right:40px}.auth-card[_ngcontent-%COMP%]{width:1140px;height:700px;perspective:none;overflow:hidden;border-radius:12px;box-shadow:0 8px 24px #0000001f,#fff 1px 1px 51px;margin:0 auto}.card-inner[_ngcontent-%COMP%]{width:200%;height:100%;display:flex;transition:transform .7s cubic-bezier(.22,.9,.32,1);will-change:transform}.auth-card.flipped[_ngcontent-%COMP%] .card-inner[_ngcontent-%COMP%]{transform:translate3d(-50%,0,0)}.auth-card[_ngcontent-%COMP%]:not(.flipped) .card-inner[_ngcontent-%COMP%]{transform:translateZ(0)}.card-front[_ngcontent-%COMP%] .main-panel[_ngcontent-%COMP%], .card-back[_ngcontent-%COMP%] .main-panel[_ngcontent-%COMP%]{transition:opacity 1s ease .15s}.card-front[aria-hidden=true][_ngcontent-%COMP%] .main-panel[_ngcontent-%COMP%], .card-back[aria-hidden=true][_ngcontent-%COMP%] .main-panel[_ngcontent-%COMP%]{opacity:0}.card-front[aria-hidden=false][_ngcontent-%COMP%] .main-panel[_ngcontent-%COMP%], .card-back[aria-hidden=false][_ngcontent-%COMP%] .main-panel[_ngcontent-%COMP%]{opacity:1}.card-front[_ngcontent-%COMP%], .card-back[_ngcontent-%COMP%]{width:50%;height:100%;flex:0 0 50%;box-sizing:border-box;position:relative;overflow:hidden}.card-content[_ngcontent-%COMP%]{display:flex;height:100%;flex-direction:row-reverse}.side-panel[_ngcontent-%COMP%]{width:48%;display:flex;align-items:center;justify-content:center}.main-panel[_ngcontent-%COMP%]{width:55%;padding:48px;box-sizing:border-box;background:#fff;overflow:visible;display:flex;flex-direction:column;align-items:center}.logo-header[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;margin-bottom:8px}.py-learn-text[_ngcontent-%COMP%]{font-size:3vw;font-weight:600;color:#073879;font-family:Amonk_Outline;margin-bottom:1vw}.self-learning-system[_ngcontent-%COMP%]{font-size:1.2vw;font-weight:bolder;color:#073879;margin-top:-.8vw}.card-front[_ngcontent-%COMP%] .main-panel[_ngcontent-%COMP%] .signin-title[_ngcontent-%COMP%], .card-back[_ngcontent-%COMP%] .main-panel[_ngcontent-%COMP%] .signup-title[_ngcontent-%COMP%]{color:#222}@media (max-width: 900px){.auth-card[_ngcontent-%COMP%]{width:92vw;height:auto}.card-inner[_ngcontent-%COMP%]{width:200%}.card-content[_ngcontent-%COMP%]{flex-direction:column}.side-panel[_ngcontent-%COMP%]{width:100%;height:200px}.main-panel[_ngcontent-%COMP%]{width:100%;overflow:visible}}.card-front[aria-hidden=true][_ngcontent-%COMP%], .card-back[aria-hidden=true][_ngcontent-%COMP%]{pointer-events:none}.side-panel.side-right[_ngcontent-%COMP%]{background:linear-gradient(135deg,#1d608b 0% 100%)}.side-info-box[_ngcontent-%COMP%]{position:absolute;top:164px;left:0;width:88%;padding:0 32px;z-index:2;text-align:left}.side-panel[_ngcontent-%COMP%]{position:relative}.card-front[_ngcontent-%COMP%] .main-panel[_ngcontent-%COMP%], .card-front[_ngcontent-%COMP%] .main-panel[_ngcontent-%COMP%] .signin-title[_ngcontent-%COMP%], .card-front[_ngcontent-%COMP%] .main-panel[_ngcontent-%COMP%] .signin-footer[_ngcontent-%COMP%], .card-front[_ngcontent-%COMP%] .main-panel[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .card-front[_ngcontent-%COMP%] .main-panel[_ngcontent-%COMP%] .signin-field[_ngcontent-%COMP%] small[_ngcontent-%COMP%], .card-front[_ngcontent-%COMP%] .main-panel[_ngcontent-%COMP%] .signin-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{color:#23395d!important}.card-front[_ngcontent-%COMP%] .main-panel[_ngcontent-%COMP%] .signin-field[_ngcontent-%COMP%] small.error[_ngcontent-%COMP%]{color:#ff5252!important}.card-front[_ngcontent-%COMP%] .main-panel[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:#0b57a4!important}.signin-divider-row[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:100%;margin:12px 0 18px}.divider[_ngcontent-%COMP%]{flex:1;height:1px;background:#b0b8c1;margin:0 8px}.divider-or[_ngcontent-%COMP%]{color:#23395d;font-size:1.08em;font-weight:600;margin:0 8px}.google-btn[_ngcontent-%COMP%]{width:100%;height:45px;background:#18314a;color:#fff;border:none;border-radius:8px;padding:14px 0;font-size:1.1rem;font-weight:700;margin-bottom:18px;cursor:pointer;box-shadow:0 2px 8px #0003;display:flex;align-items:center;justify-content:center;gap:12px;transition:background .2s,color .2s}.google-btn[_ngcontent-%COMP%]:hover{background:#38bdf8}.google-logo[_ngcontent-%COMP%]{width:24px;height:24px}.side-panel.side-left[_ngcontent-%COMP%]{position:relative;overflow:hidden;background:#1d608b;min-height:400px}.side-img[_ngcontent-%COMP%]{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;z-index:0}.side-welcome-overlay[_ngcontent-%COMP%]{position:absolute;top:30%;left:50px;width:93%;text-align:start;z-index:2;padding:0 24px;pointer-events:auto}.welcome-back-title[_ngcontent-%COMP%]{font-size:2.1rem;font-weight:800;color:#fff;margin-bottom:8px}.welcome-back-desc[_ngcontent-%COMP%]{font-size:1rem;color:#e0f7fa;margin-bottom:18px}.action-btn[_ngcontent-%COMP%]{width:21%;background:#18314a;color:#fff;border:none;border-radius:8px;padding:14px 0;font-size:1.1rem;font-weight:700;margin-top:18px;margin-bottom:0;display:inline-block;letter-spacing:.5px;box-shadow:0 2px 8px #0003;cursor:pointer;transition:background .2s,color .2s}.action-btn[_ngcontent-%COMP%]:hover{background:#38bdf8;color:#18314a}.input-with-icon[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center}.input-with-icon[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{width:100%;padding-right:42px}.input-with-icon[_ngcontent-%COMP%] .eye-toggle[_ngcontent-%COMP%]{position:absolute;right:12px;top:50%;transform:translateY(-50%);background:none;border:none;font-size:1.2em;color:#888;cursor:pointer;line-height:1;padding:0;opacity:.8}.input-with-icon[_ngcontent-%COMP%] .eye-toggle[_ngcontent-%COMP%]:hover{opacity:1;color:#555}.signin-field[_ngcontent-%COMP%] input.invalid[_ngcontent-%COMP%]{border:1px solid #ff5252}.side-panel.side-left[_ngcontent-%COMP%]{position:relative}.side-panel.side-left[_ngcontent-%COMP%]:before{content:"";position:absolute;inset:0;background:linear-gradient(205deg,#05192ed9 8%,#05192eb3 40%,#05192e59 75%);z-index:1;pointer-events:none}.side-panel.side-left[_ngcontent-%COMP%] .side-welcome-overlay[_ngcontent-%COMP%]{position:absolute;top:44%;left:10%;z-index:2;background:#0f28468c;backdrop-filter:blur(6px) saturate(140%);-webkit-backdrop-filter:blur(6px) saturate(140%);padding:20px 24px 24px;border-radius:18px;border:1px solid rgba(255,255,255,.15);box-shadow:0 4px 20px -4px #0000008c,0 0 0 1px #ffffff0d;max-width:429px;width:auto;text-align:center}.side-panel.side-left[_ngcontent-%COMP%] .welcome-back-desc[_ngcontent-%COMP%], .side-panel.side-left[_ngcontent-%COMP%] .welcome-back-title[_ngcontent-%COMP%]{text-shadow:0 2px 6px rgba(0,0,0,.6)}.side-panel.side-left[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%]{background:#38bdf8;color:#082a47;border:1px solid #4fd3ff;box-shadow:0 0 0 1px #ffffff0f,0 6px 18px -4px #0000008c;padding:10px 28px;width:auto;margin-top:4px;letter-spacing:.6px;transition:background .25s,box-shadow .25s,transform .25s}.side-panel.side-left[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%]:hover{background:#4fd3ff;box-shadow:0 0 0 1px #ffffff14,0 8px 22px -6px #0009;transform:translateY(-2px)}.side-panel.side-left[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%]:active{transform:translateY(0)}.side-panel.side-left[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%]:focus-visible{outline:2px solid #fff;outline-offset:3px}@media (max-width: 900px){.side-panel.side-left[_ngcontent-%COMP%] .side-welcome-overlay[_ngcontent-%COMP%]{left:50%;top:auto;bottom:20px;transform:translate(-50%);max-width:92%;padding:18px 20px 22px}}.side-panel.side-right[_ngcontent-%COMP%]{position:relative;overflow:hidden}.side-panel.side-right[_ngcontent-%COMP%]:before{content:"";position:absolute;inset:0;background:linear-gradient(205deg,#05192ed9 10%,#05192eb3 45%,#05192e52 78%);z-index:1;pointer-events:none}.side-panel.side-right[_ngcontent-%COMP%] .side-info-box[_ngcontent-%COMP%]{position:absolute;top:38%;left:7%;z-index:2;background:#0f28468c;backdrop-filter:blur(6px) saturate(140%);-webkit-backdrop-filter:blur(6px) saturate(140%);padding:20px 24px 24px;border-radius:18px;border:1px solid rgba(255,255,255,.15);box-shadow:0 4px 20px -4px #0000008c,0 0 0 1px #ffffff0d;max-width:469px;text-align:center}.side-panel.side-right[_ngcontent-%COMP%] .welcome-back-title[_ngcontent-%COMP%], .side-panel.side-right[_ngcontent-%COMP%] .welcome-back-desc[_ngcontent-%COMP%]{text-shadow:0 2px 6px rgba(0,0,0,.6)}.side-panel.side-right[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%]{background:#38bdf8;color:#082a47;border:1px solid #4fd3ff;box-shadow:0 0 0 1px #ffffff0f,0 6px 18px -4px #0000008c;padding:10px 28px;width:auto;margin-top:4px;letter-spacing:.6px;transition:background .25s,box-shadow .25s,transform .25s}.side-panel.side-right[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%]:hover{background:#4fd3ff;box-shadow:0 0 0 1px #ffffff14,0 8px 22px -6px #0009;transform:translateY(-2px)}.side-panel.side-right[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%]:active{transform:translateY(0)}.side-panel.side-right[_ngcontent-%COMP%] .action-btn[_ngcontent-%COMP%]:focus-visible{outline:2px solid #fff;outline-offset:3px}@media (max-width: 900px){.side-panel.side-right[_ngcontent-%COMP%] .side-info-box[_ngcontent-%COMP%]{left:50%;top:auto;bottom:20px;transform:translate(-50%);max-width:92%;padding:18px 20px 22px}}.signin-brand-logo[_ngcontent-%COMP%]{position:absolute;top:18px;left:24px;z-index:1200}.signin-brand-logo[_ngcontent-%COMP%] .brand-link[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;text-decoration:none}.brand-logo-img[_ngcontent-%COMP%]{height:42px;display:block;filter:drop-shadow(0 2px 6px rgba(0,0,0,.4));max-width:5vw;height:auto;background:#fff;border-radius:1vw;margin:.5vw}.brand-text[_ngcontent-%COMP%]{font-size:1.05rem;font-weight:700;letter-spacing:.6px;color:#fff;text-shadow:0 2px 6px rgba(0,0,0,.6);font-family:inherit}.signin-brand-logo[_ngcontent-%COMP%]:hover .brand-text[_ngcontent-%COMP%]{color:#4fd3ff}@media (max-width:700px){.signin-brand-logo[_ngcontent-%COMP%]{top:10px;left:10px;padding:6px 12px 6px 8px}.brand-logo-img[_ngcontent-%COMP%]{width:34px;height:34px}.brand-text[_ngcontent-%COMP%]{font-size:.9rem}}.signin-watermark[_ngcontent-%COMP%]{text-decoration:none;position:absolute;bottom:14px;right:22px;font-size:1vw;font-weight:600;letter-spacing:.5px;color:#fff;text-shadow:0 1px 4px rgba(0,0,0,.4)}@media (max-width:700px){.signin-watermark[_ngcontent-%COMP%]{bottom:8px;right:12px;font-size:.65rem}}.social-icons.signin-social-icons[_ngcontent-%COMP%]{position:absolute;top:18px;right:24px;z-index:1200;display:flex;gap:18px}.social-icons.signin-social-icons[_ngcontent-%COMP%] .social-icon[_ngcontent-%COMP%]{width:42px;height:42px;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;background-color:#fff;color:#38bdf8;font-size:18px;box-shadow:0 0 0 1px #214055,0 4px 14px #0006;transition:background-color .25s,color .25s,transform .25s,box-shadow .25s;text-decoration:none}.social-icons.signin-social-icons[_ngcontent-%COMP%] .social-icon.facebook[_ngcontent-%COMP%]{color:#1877f2}.social-icons.signin-social-icons[_ngcontent-%COMP%] .social-icon.youtube[_ngcontent-%COMP%]{color:red}.social-icons.signin-social-icons[_ngcontent-%COMP%] .social-icon.linkedin[_ngcontent-%COMP%]{color:#0a66c2}.social-icons.signin-social-icons[_ngcontent-%COMP%] .social-icon.instagram[_ngcontent-%COMP%]{color:#fd5949}.social-icons.signin-social-icons[_ngcontent-%COMP%] .social-icon.facebook[_ngcontent-%COMP%]:hover{background-color:#1877f2;color:#fff}.social-icons.signin-social-icons[_ngcontent-%COMP%] .social-icon.youtube[_ngcontent-%COMP%]:hover{background-color:red;color:#fff}.social-icons.signin-social-icons[_ngcontent-%COMP%] .social-icon.linkedin[_ngcontent-%COMP%]:hover{background-color:#0a66c2;color:#fff}.social-icons.signin-social-icons[_ngcontent-%COMP%] .social-icon.instagram[_ngcontent-%COMP%]:hover{background:radial-gradient(circle at 30% 110%,#fdf497,#fd5949 45%,#d6249f 60%,#285aeb 90%);color:#fff;filter:brightness(1.15);box-shadow:0 6px 22px #fd594999}.social-icons.signin-social-icons[_ngcontent-%COMP%] .social-icon.website[_ngcontent-%COMP%]:hover{background-color:#009688;color:#fff;transform:translateY(-4px);box-shadow:0 6px 20px #00968888,0 0 0 2px #009688 inset}@media (max-width:700px){.social-icons.signin-social-icons[_ngcontent-%COMP%]{top:10px;right:10px;gap:10px}.social-icons.signin-social-icons[_ngcontent-%COMP%] .social-icon[_ngcontent-%COMP%]{width:28px;height:28px;font-size:1em}}'],data:{animation:[Gy("fadeInOut",[ep(":enter",[Sl({opacity:0}),Jf("300ms ease-in",Sl({opacity:1}))]),ep(":leave",[Jf("300ms ease-out",Sl({opacity:0}))])])]},changeDetection:0})}}return e})();var Ye=[];for(let e=0;e<256;++e)Ye.push((e+256).toString(16).slice(1));function nb(e,n=0){return(Ye[e[n+0]]+Ye[e[n+1]]+Ye[e[n+2]]+Ye[e[n+3]]+"-"+Ye[e[n+4]]+Ye[e[n+5]]+"-"+Ye[e[n+6]]+Ye[e[n+7]]+"-"+Ye[e[n+8]]+Ye[e[n+9]]+"-"+Ye[e[n+10]]+Ye[e[n+11]]+Ye[e[n+12]]+Ye[e[n+13]]+Ye[e[n+14]]+Ye[e[n+15]]).toLowerCase()}var sp,Nk=new Uint8Array(16);function ap(){if(!sp){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");sp=crypto.getRandomValues.bind(crypto)}return sp(Nk)}var Fk=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),cp={randomUUID:Fk};function Lk(e,n,t){e=e||{};let i=e.random??e.rng?.()??ap();if(i.length<16)throw new Error("Random bytes length must be >= 16");if(i[6]=i[6]&15|64,i[8]=i[8]&63|128,n){if(t=t||0,t<0||t+16>n.length)throw new RangeError(`UUID byte range ${t}:${t+15} is out of buffer bounds`);for(let r=0;r<16;++r)n[t+r]=i[r];return n}return nb(i)}function Vk(e,n,t){return cp.randomUUID&&!n&&!e?cp.randomUUID():Lk(e,n,t)}var Al=Vk;var ib=(()=>{class e{constructor(t){this.http=t,this.apiBase=location.hostname.endsWith("hf.space")?"https://pykara-py-learn-backend.hf.space":"http://localhost:5000/staticchat";let i=sessionStorage.getItem("chat_user_id");i?this.userId=i:(this.userId=Al(),sessionStorage.setItem("chat_user_id",this.userId)),console.log("Chat session user_id:",this.userId)}getUserId(){return this.userId}resetSession(){let t=this.userId;return this.userId=Al(),sessionStorage.setItem("chat_user_id",this.userId),console.log("Session reset. New user_id:",this.userId),this.http.post(`${this.apiBase}/context/${t}/clear`,{})}searchQuestion(t){return this.http.post(`${this.apiBase}/search`,{question:t,user_id:this.userId})}getAllQuestions(){return this.http.get(`${this.apiBase}/questions`)}getRandomSuggestions(t=5){return this.http.get(`${this.apiBase}/suggestions`,{params:{count:t.toString()}})}getContextSuggestions(){return this.http.get(`${this.apiBase}/context/suggestions/${this.userId}`)}getContext(){return this.http.get(`${this.apiBase}/context/${this.userId}`)}static{this.\u0275fac=function(i){return new(i||e)(v(Rn))}}static{this.\u0275prov=D({token:e,factory:e.\u0275fac,providedIn:"root"})}}return e})();var Bk=["chatContainer"],Uk=["messageInput"],$k=["videoPlayer"];function Hk(e,n){if(e&1&&(d(0,"div",22)(1,"div",23)(2,"span",24),u(3),l(),d(4,"div",25),u(5),Do(6,"date"),l()(),g(7,"img",26),l()),e&2){let t=C().$implicit;m(3),Ie(t.user.text),m(2),Se(" ",Eo(6,2,t.user.timestamp,"shortTime")," ")}}function zk(e,n){if(e&1){let t=H();d(0,"button",33),I("click",function(){T(t);let r=C(3).$implicit,o=C();return A(o.playAudio(r.bot.rawData==null?null:r.bot.rawData.audio_url))}),u(1," \u{1F50A} Audio "),l()}}function Gk(e,n){if(e&1){let t=H();d(0,"button",33),I("click",function(){T(t);let r=C(3).$implicit,o=C();return A(o.playResponseVideo(r.bot.rawData==null?null:r.bot.rawData.video_url))}),u(1," \u{1F3AC} Video "),l()}}function Wk(e,n){if(e&1){let t=H();d(0,"button",33),I("click",function(){T(t);let r=C(3).$implicit,o=C();return A(o.playResponseVideo(r.bot.rawData==null?null:r.bot.rawData.detail_url))}),u(1," \u{1F4A1} Detail "),l()}}function qk(e,n){if(e&1){let t=H();d(0,"button",33),I("click",function(){T(t);let r=C(3).$implicit,o=C();return A(o.playResponseVideo(r.bot.rawData==null?null:r.bot.rawData.story_url))}),u(1," \u{1F4D6} Story "),l()}}function Yk(e,n){if(e&1){let t=H();d(0,"button",33),I("click",function(){T(t);let r=C(3).$implicit,o=C();return A(o.playResponseVideo(r.bot.rawData==null?null:r.bot.rawData.example_url))}),u(1," \u{1F9EA} Example "),l()}}function Qk(e,n){if(e&1&&(d(0,"div",31),R(1,zk,2,0,"button",32)(2,Gk,2,0,"button",32)(3,Wk,2,0,"button",32)(4,qk,2,0,"button",32)(5,Yk,2,0,"button",32),l()),e&2){let t=C(2).$implicit;m(),y("ngIf",t.bot.rawData==null?null:t.bot.rawData.audio_url),m(),y("ngIf",t.bot.rawData==null?null:t.bot.rawData.video_url),m(),y("ngIf",t.bot.rawData==null?null:t.bot.rawData.detail_url),m(),y("ngIf",t.bot.rawData==null?null:t.bot.rawData.story_url),m(),y("ngIf",t.bot.rawData==null?null:t.bot.rawData.example_url)}}function Zk(e,n){if(e&1&&(d(0,"div",27),g(1,"img",28),d(2,"div",29)(3,"span",24),u(4),l(),R(5,Qk,6,5,"div",30),d(6,"div",25),u(7),Do(8,"date"),l()()()),e&2){let t=C().$implicit;m(4),Ie(t.bot.text),m(),y("ngIf",t.bot.rawData&&((t.bot.rawData==null?null:t.bot.rawData.audio_url)||(t.bot.rawData==null?null:t.bot.rawData.video_url))),m(2),Se(" ",Eo(8,3,t.bot.timestamp,"shortTime")," ")}}function Kk(e,n){if(e&1&&(d(0,"div",19),R(1,Hk,8,5,"div",20)(2,Zk,9,6,"div",21),l()),e&2){let t=n.$implicit,i=n.index;le("data-index",i),m(),y("ngIf",t.user),m(),y("ngIf",t.bot)}}function Xk(e,n){e&1&&(d(0,"div",34),g(1,"div",35)(2,"div",35)(3,"div",35),l())}function Jk(e,n){if(e&1){let t=H();d(0,"div",38),I("click",function(){let r=T(t).$implicit,o=C(2);return A(o.selectQuestion(r))}),u(1),l()}if(e&2){let t=n.$implicit;m(),Se(" ",t," ")}}function eP(e,n){if(e&1&&(d(0,"div",36),R(1,Jk,2,1,"div",37),l()),e&2){let t=C();m(),y("ngForOf",t.suggestedQuestions)}}function tP(e,n){if(e&1){let t=H();d(0,"div",39)(1,"button",40),I("click",function(){T(t);let r=C();return A(r.reject())}),u(2,"\u274C"),l(),d(3,"button",41),I("click",function(){T(t);let r=C();return A(r.accept())}),u(4,"\u2705"),l()()}}var rb=(()=>{class e{constructor(t,i,r,o){this.fb=t,this.chatService=i,this.zone=o,this.messages=[],this.isTyping=!1,this.suggestedQuestions=[],this.showSuggestions=!1,this.allQuestions=[],this.searchQuery=new B,this.selectedQuestions=new Set,this.currentPairIndex=0,this.blinkVideoSrc="assets/staticchat/blink.mp4",this.introVideoSrc="assets/staticchat/intro.mp4",this.currentVideoType="blink",this.currentResponseVideoUrl=null,this.isVideoPlaying=!1,this.audioPlayer=null,this.hasChatStarted=!1,this.lastResponseVideoUrl=null,this.supported=!1,this.isListening=!1,this.showActions=!1,this.isBrowser=!1,this.mediaStream=null,this.recorder=null,this.chunks=[],this.uploadInProgress=!1,this.isSpeechProcessing=!1,this.chatForm=this.fb.group({message:["",Nn.required]}),this.searchQuery.pipe(Qi(300),Zi()).subscribe(s=>{this.searchQuestions(s)}),this.isBrowser=un(r)}ngOnInit(){if(this.messages.push({id:1,text:"Hello children! Today we will learn tenses in a simple and fun way.",sender:"bot",timestamp:new Date}),!this.isBrowser)return;let t=!!navigator.mediaDevices?.getUserMedia,i=typeof window.MediaRecorder<"u";this.supported=t&&i,this.loadAllQuestions(),setTimeout(()=>this.scrollToLastPair(),0)}ngAfterViewInit(){this.playBlinkVideo()}safeVideo(){try{return this.videoRef.nativeElement}catch{return null}}playBlinkVideo(){let t=this.safeVideo();t&&(t.onended=null,t.src=this.blinkVideoSrc,t.loop=!0,t.muted=!0,t.currentTime=0,t.play().catch(()=>{}),this.currentVideoType="blink",this.currentResponseVideoUrl=null,this.isVideoPlaying=!1)}playIntroVideo(){let t=this.safeVideo();t&&(this.audioPlayer&&!this.audioPlayer.paused&&this.audioPlayer.pause(),t.onended=()=>{this.playBlinkVideo()},t.src=this.introVideoSrc,t.loop=!1,t.muted=!1,t.currentTime=0,t.play().catch(()=>{t.muted=!0,t.play().catch(()=>{})}),this.currentVideoType="intro",this.currentResponseVideoUrl=null,this.isVideoPlaying=!0)}playResponseVideo(t){if(!t)return;let i=this.safeVideo();i&&(this.audioPlayer&&!this.audioPlayer.paused&&this.audioPlayer.pause(),i.onended=()=>{this.playBlinkVideo()},this.currentResponseVideoUrl=t,this.currentVideoType="response",i.src=t,i.loop=!1,i.muted=!1,i.currentTime=0,i.play().then(()=>{this.isVideoPlaying=!0}).catch(()=>{i.muted=!0,i.play().catch(()=>{}),this.isVideoPlaying=!i.paused}))}togglePlayPause(){let t=this.safeVideo();if(t){if(this.currentVideoType==="blink"){if(!this.hasChatStarted){this.playIntroVideo();return}this.lastResponseVideoUrl&&this.playResponseVideo(this.lastResponseVideoUrl);return}t.paused?(this.audioPlayer&&!this.audioPlayer.paused&&this.audioPlayer.pause(),t.play().catch(()=>{}),this.isVideoPlaying=!0):(t.pause(),this.isVideoPlaying=!1)}}loadAllQuestions(){this.chatService.getAllQuestions().subscribe({next:t=>{t.success&&(this.allQuestions=t.questions)},error:t=>console.error("Error loading questions:",t)})}onInputFocus(){this.showQuestionSuggestions()}onInputClick(){this.showQuestionSuggestions()}showQuestionSuggestions(){if(this.allQuestions.length===0){this.loadAllQuestions();return}if(this.messages.length<=1){this.suggestedQuestions=this.allQuestions.slice(0,5).map(i=>i.question),this.showSuggestions=!0;return}let t=this.allQuestions.filter(i=>!this.selectedQuestions.has(i.question));if(t.length===0){let i=[...this.allQuestions].sort(()=>.5-Math.random());this.suggestedQuestions=i.slice(0,5).map(r=>r.question)}else this.suggestedQuestions=t.slice(0,5).map(i=>i.question);this.showSuggestions=!0}searchQuestions(t){if(t.length>0){let i=this.allQuestions.filter(r=>r.question.toLowerCase().includes(t.toLowerCase())).slice(0,5);this.suggestedQuestions=i.map(r=>r.question),this.showSuggestions=this.suggestedQuestions.length>0}else this.showQuestionSuggestions()}onInputChange(){let t=this.chatForm.get("message")?.value;t?this.searchQuery.next(t):this.showQuestionSuggestions()}selectQuestion(t){this.selectedQuestions.add(t),this.chatForm.get("message")?.setValue(t),this.showSuggestions=!1,this.suggestedQuestions=this.suggestedQuestions.filter(i=>i!==t),this.sendMessage()}sendMessage(){let t=this.chatForm.get("message")?.value.trim();t&&(this.messages.push({id:this.messages.length+1,text:t,sender:"user",timestamp:new Date}),this.hasChatStarted=!0,this.chatForm.reset(),this.showSuggestions=!1,this.isTyping=!0,setTimeout(()=>this.scrollToLastPair(),50),this.chatService.searchQuestion(t).subscribe({next:i=>{this.isTyping=!1;let r=i.answer?i.answer.replace(/\n/g," "):i.message||"Sorry, I could not find an answer.";this.messages.push({id:this.messages.length+1,text:r,sender:"bot",timestamp:new Date,rawData:i}),setTimeout(()=>this.scrollToLastPair(),50),i.audio_url&&this.playAudio(i.audio_url),i.video_url&&(this.lastResponseVideoUrl=i.video_url,this.playResponseVideo(i.video_url))},error:()=>{this.isTyping=!1,this.messages.push({id:this.messages.length+1,text:"Sorry, I encountered an error. Please try again.",sender:"bot",timestamp:new Date}),setTimeout(()=>this.scrollToLastPair(),50)}}))}playAudio(t){if(t)try{let i=this.safeVideo();i&&this.currentVideoType!=="blink"&&!i.paused&&(i.pause(),this.isVideoPlaying=!1),this.audioPlayer?this.audioPlayer.pause():this.audioPlayer=new Audio,this.audioPlayer.src=t,this.audioPlayer.currentTime=0,this.audioPlayer.play().catch(()=>{})}catch(i){console.error("Audio play failed",i)}}playVideoFromChat(t){t&&this.playResponseVideo(t)}formatAnswer(t){let i="",r=t.answer?.replace(/\n/g," ")??"No answer available.";return i+=`