web: Snap Store badge, served from here
CodeQL Analysis / Analyze CodeQL (push) Canceled after 0s
Deploy Application / deploy (push) Canceled after 0s
Mirror to Codeberg / mirror (push) Canceled after 0s
Mirror to PrivacyGuides / mirror (push) Canceled after 0s

The badge image is vendored rather than hotlinked from snapcraft.io. The CSP
is img-src 'self' data: and would block it anyway, but the reason to leave the
CSP alone is the page's own claim: fetching a badge from someone else's server
hands them the address of every visitor to a page that says no servers are
involved.

The README badge stays dynamic — it reports the published version, and GitHub
proxies images, so no reader is exposed by it.
This commit is contained in:
SecureBitChatVolodymyr
2026-09-02 19:12:15 -04:00
parent 30e335f9e9
commit 0691ce618c
21 changed files with 392 additions and 323 deletions
+3
View File
@@ -21,3 +21,6 @@ assets/screenshots
# full-size marketing captures stay out of the image, which is what the rule # full-size marketing captures stay out of the image, which is what the rule
# above was for. # above was for.
!assets/screenshots/desktop-*.png !assets/screenshots/desktop-*.png
# The Snap Store badge is served from this origin so the page makes no
# third-party request; it has to actually ship for that to be true.
!assets/badges/*.svg
+1
View File
@@ -10,6 +10,7 @@ No accounts. No servers storing your messages. No installation required.
[![License: MIT](https://img.shields.io/badge/License-MIT-f0892a.svg)](LICENSE) [![License: MIT](https://img.shields.io/badge/License-MIT-f0892a.svg)](LICENSE)
[![Version](https://img.shields.io/badge/version-6.7.2-3ecf8e.svg)](CHANGELOG.md) [![Version](https://img.shields.io/badge/version-6.7.2-3ecf8e.svg)](CHANGELOG.md)
[![Get it from the Snap Store](https://snapcraft.io/securebit-chat/badge.svg)](https://snapcraft.io/securebit-chat)
[![PWA](https://img.shields.io/badge/PWA-installable-3ecf8e.svg)](#install-as-an-app) [![PWA](https://img.shields.io/badge/PWA-installable-3ecf8e.svg)](#install-as-an-app)
[![Encryption](https://img.shields.io/badge/crypto-ECDH%20P--384%20%C2%B7%20AES--256--GCM-blue.svg)](#security-model) [![Encryption](https://img.shields.io/badge/crypto-ECDH%20P--384%20%C2%B7%20AES--256--GCM-blue.svg)](#security-model)
[![Forward secrecy](https://img.shields.io/badge/forward%20secrecy-Double%20Ratchet-3ecf8e.svg)](#forward-secrecy) [![Forward secrecy](https://img.shields.io/badge/forward%20secrecy-Double%20Ratchet-3ecf8e.svg)](#forward-secrecy)
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/ar/manifest.json"> <link rel="manifest" href="/ar/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788390440675">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788390440675">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788382788139"></script> <script defer src="/config/ice-servers.js?v=1788390440675"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788382788139"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788390440675">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/main.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/components.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/components.css?v=1788390440675">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788390440675">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788390440675">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788382788139"></script> <script defer src="/src/scripts/load-async-css.js?v=1788390440675"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788382788139"></script> <script defer src="/src/scripts/fa-check.js?v=1788390440675"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788382788139"></script> <script defer src="/src/utils/updateManager.js?v=1788390440675"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788382788139"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788390440675"></script>
<script type="module" src="/dist/qr-local.js?v=1788382788139"></script> <script type="module" src="/dist/qr-local.js?v=1788390440675"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788382788139"></script> <script type="module" src="/src/components/QRScanner.js?v=1788390440675"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788382788139"></script> <script type="module" src="/dist/app-boot.js?v=1788390440675"></script>
<script type="module" src="/dist/app.js?v=1788382788139"></script> <script type="module" src="/dist/app.js?v=1788390440675"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-register.js?v=1788390440675"></script>
<script src="/src/pwa/install-prompt.js?v=1788382788139" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788390440675" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788382788139" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788390440675" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788390440675"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788390440675">
</body> </body>
</html> </html>
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.4 KiB

+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/de/manifest.json"> <link rel="manifest" href="/de/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788390440675">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788390440675">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788382788139"></script> <script defer src="/config/ice-servers.js?v=1788390440675"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788382788139"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788390440675">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/main.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/components.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/components.css?v=1788390440675">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788390440675">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788390440675">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788382788139"></script> <script defer src="/src/scripts/load-async-css.js?v=1788390440675"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788382788139"></script> <script defer src="/src/scripts/fa-check.js?v=1788390440675"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788382788139"></script> <script defer src="/src/utils/updateManager.js?v=1788390440675"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788382788139"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788390440675"></script>
<script type="module" src="/dist/qr-local.js?v=1788382788139"></script> <script type="module" src="/dist/qr-local.js?v=1788390440675"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788382788139"></script> <script type="module" src="/src/components/QRScanner.js?v=1788390440675"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788382788139"></script> <script type="module" src="/dist/app-boot.js?v=1788390440675"></script>
<script type="module" src="/dist/app.js?v=1788382788139"></script> <script type="module" src="/dist/app.js?v=1788390440675"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-register.js?v=1788390440675"></script>
<script src="/src/pwa/install-prompt.js?v=1788382788139" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788390440675" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788382788139" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788390440675" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788390440675"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788390440675">
</body> </body>
</html> </html>
+35 -1
View File
@@ -34078,7 +34078,41 @@ var CommunityCTA = () => {
React.createElement("div", { React.createElement("div", {
key: "btns", key: "btns",
style: { display: "flex", gap: "14px", justifyContent: "center", flexWrap: "wrap" } style: { display: "flex", gap: "14px", justifyContent: "center", flexWrap: "wrap" }
}, [githubBtn, feedbackBtn]) }, [githubBtn, feedbackBtn]),
// Snap Store, bottom right.
//
// Served from this origin, not snapcraft.io. The site's CSP is
// `img-src 'self' data:` and would block a hotlink anyway, but the
// reason to keep it that way is the product's own claim: fetching a
// badge from someone else's server hands them the address of every
// visitor to a page that promises no servers are involved.
React.createElement("div", {
key: "snap",
style: {
display: "flex",
justifyContent: isMobile ? "center" : "flex-end",
marginTop: "28px"
}
}, React.createElement("a", {
href: "https://snapcraft.io/securebit-chat",
target: "_blank",
rel: "noopener noreferrer",
"aria-label": "Get it from the Snap Store",
style: { display: "inline-flex", opacity: 0.9, transition: "opacity .2s" },
onMouseEnter: (e) => {
e.currentTarget.style.opacity = 1;
},
onMouseLeave: (e) => {
e.currentTarget.style.opacity = 0.9;
}
}, React.createElement("img", {
src: "/assets/badges/snap-store.svg",
alt: "Get it from the Snap Store",
width: 182,
height: 56,
loading: "lazy",
style: { display: "block" }
})))
]); ]);
return React.createElement("section", { return React.createElement("section", {
style: { style: {
+2 -2
View File
File diff suppressed because one or more lines are too long
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/es/manifest.json"> <link rel="manifest" href="/es/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788390440675">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788390440675">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788382788139"></script> <script defer src="/config/ice-servers.js?v=1788390440675"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788382788139"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788390440675">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/main.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/components.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/components.css?v=1788390440675">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788390440675">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788390440675">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788382788139"></script> <script defer src="/src/scripts/load-async-css.js?v=1788390440675"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788382788139"></script> <script defer src="/src/scripts/fa-check.js?v=1788390440675"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788382788139"></script> <script defer src="/src/utils/updateManager.js?v=1788390440675"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788382788139"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788390440675"></script>
<script type="module" src="/dist/qr-local.js?v=1788382788139"></script> <script type="module" src="/dist/qr-local.js?v=1788390440675"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788382788139"></script> <script type="module" src="/src/components/QRScanner.js?v=1788390440675"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788382788139"></script> <script type="module" src="/dist/app-boot.js?v=1788390440675"></script>
<script type="module" src="/dist/app.js?v=1788382788139"></script> <script type="module" src="/dist/app.js?v=1788390440675"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-register.js?v=1788390440675"></script>
<script src="/src/pwa/install-prompt.js?v=1788382788139" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788390440675" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788382788139" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788390440675" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788390440675"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788390440675">
</body> </body>
</html> </html>
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/fa/manifest.json"> <link rel="manifest" href="/fa/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788390440675">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788390440675">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788382788139"></script> <script defer src="/config/ice-servers.js?v=1788390440675"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788382788139"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788390440675">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/main.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/components.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/components.css?v=1788390440675">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788390440675">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788390440675">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788382788139"></script> <script defer src="/src/scripts/load-async-css.js?v=1788390440675"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788382788139"></script> <script defer src="/src/scripts/fa-check.js?v=1788390440675"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788382788139"></script> <script defer src="/src/utils/updateManager.js?v=1788390440675"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788382788139"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788390440675"></script>
<script type="module" src="/dist/qr-local.js?v=1788382788139"></script> <script type="module" src="/dist/qr-local.js?v=1788390440675"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788382788139"></script> <script type="module" src="/src/components/QRScanner.js?v=1788390440675"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788382788139"></script> <script type="module" src="/dist/app-boot.js?v=1788390440675"></script>
<script type="module" src="/dist/app.js?v=1788382788139"></script> <script type="module" src="/dist/app.js?v=1788390440675"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-register.js?v=1788390440675"></script>
<script src="/src/pwa/install-prompt.js?v=1788382788139" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788390440675" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788382788139" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788390440675" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788390440675"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788390440675">
</body> </body>
</html> </html>
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/fr/manifest.json"> <link rel="manifest" href="/fr/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788390440675">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788390440675">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788382788139"></script> <script defer src="/config/ice-servers.js?v=1788390440675"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788382788139"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788390440675">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/main.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/components.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/components.css?v=1788390440675">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788390440675">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788390440675">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788382788139"></script> <script defer src="/src/scripts/load-async-css.js?v=1788390440675"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788382788139"></script> <script defer src="/src/scripts/fa-check.js?v=1788390440675"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788382788139"></script> <script defer src="/src/utils/updateManager.js?v=1788390440675"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788382788139"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788390440675"></script>
<script type="module" src="/dist/qr-local.js?v=1788382788139"></script> <script type="module" src="/dist/qr-local.js?v=1788390440675"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788382788139"></script> <script type="module" src="/src/components/QRScanner.js?v=1788390440675"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788382788139"></script> <script type="module" src="/dist/app-boot.js?v=1788390440675"></script>
<script type="module" src="/dist/app.js?v=1788382788139"></script> <script type="module" src="/dist/app.js?v=1788390440675"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-register.js?v=1788390440675"></script>
<script src="/src/pwa/install-prompt.js?v=1788382788139" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788390440675" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788382788139" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788390440675" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788390440675"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788390440675">
</body> </body>
</html> </html>
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/he/manifest.json"> <link rel="manifest" href="/he/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788390440675">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788390440675">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788382788139"></script> <script defer src="/config/ice-servers.js?v=1788390440675"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788382788139"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788390440675">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/main.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/components.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/components.css?v=1788390440675">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788390440675">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788390440675">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788382788139"></script> <script defer src="/src/scripts/load-async-css.js?v=1788390440675"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788382788139"></script> <script defer src="/src/scripts/fa-check.js?v=1788390440675"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788382788139"></script> <script defer src="/src/utils/updateManager.js?v=1788390440675"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788382788139"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788390440675"></script>
<script type="module" src="/dist/qr-local.js?v=1788382788139"></script> <script type="module" src="/dist/qr-local.js?v=1788390440675"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788382788139"></script> <script type="module" src="/src/components/QRScanner.js?v=1788390440675"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788382788139"></script> <script type="module" src="/dist/app-boot.js?v=1788390440675"></script>
<script type="module" src="/dist/app.js?v=1788382788139"></script> <script type="module" src="/dist/app.js?v=1788390440675"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-register.js?v=1788390440675"></script>
<script src="/src/pwa/install-prompt.js?v=1788382788139" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788390440675" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788382788139" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788390440675" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788390440675"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788390440675">
</body> </body>
</html> </html>
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/hi/manifest.json"> <link rel="manifest" href="/hi/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788390440675">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788390440675">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788382788139"></script> <script defer src="/config/ice-servers.js?v=1788390440675"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788382788139"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788390440675">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/main.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/components.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/components.css?v=1788390440675">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788390440675">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788390440675">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788382788139"></script> <script defer src="/src/scripts/load-async-css.js?v=1788390440675"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788382788139"></script> <script defer src="/src/scripts/fa-check.js?v=1788390440675"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788382788139"></script> <script defer src="/src/utils/updateManager.js?v=1788390440675"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788382788139"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788390440675"></script>
<script type="module" src="/dist/qr-local.js?v=1788382788139"></script> <script type="module" src="/dist/qr-local.js?v=1788390440675"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788382788139"></script> <script type="module" src="/src/components/QRScanner.js?v=1788390440675"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788382788139"></script> <script type="module" src="/dist/app-boot.js?v=1788390440675"></script>
<script type="module" src="/dist/app.js?v=1788382788139"></script> <script type="module" src="/dist/app.js?v=1788390440675"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-register.js?v=1788390440675"></script>
<script src="/src/pwa/install-prompt.js?v=1788382788139" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788390440675" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788382788139" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788390440675" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788390440675"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788390440675">
</body> </body>
</html> </html>
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/manifest.json"> <link rel="manifest" href="/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788390440675">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788390440675">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788382788139"></script> <script defer src="/config/ice-servers.js?v=1788390440675"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788382788139"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788390440675">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/main.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/components.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/components.css?v=1788390440675">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788390440675">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788390440675">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788382788139"></script> <script defer src="/src/scripts/load-async-css.js?v=1788390440675"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788382788139"></script> <script defer src="/src/scripts/fa-check.js?v=1788390440675"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788382788139"></script> <script defer src="/src/utils/updateManager.js?v=1788390440675"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788382788139"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788390440675"></script>
<script type="module" src="/dist/qr-local.js?v=1788382788139"></script> <script type="module" src="/dist/qr-local.js?v=1788390440675"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788382788139"></script> <script type="module" src="/src/components/QRScanner.js?v=1788390440675"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788382788139"></script> <script type="module" src="/dist/app-boot.js?v=1788390440675"></script>
<script type="module" src="/dist/app.js?v=1788382788139"></script> <script type="module" src="/dist/app.js?v=1788390440675"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-register.js?v=1788390440675"></script>
<script src="/src/pwa/install-prompt.js?v=1788382788139" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788390440675" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788382788139" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788390440675" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788390440675"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788390440675">
</body> </body>
</html> </html>
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/ko/manifest.json"> <link rel="manifest" href="/ko/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788390440675">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788390440675">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788382788139"></script> <script defer src="/config/ice-servers.js?v=1788390440675"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788382788139"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788390440675">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/main.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/components.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/components.css?v=1788390440675">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788390440675">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788390440675">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788382788139"></script> <script defer src="/src/scripts/load-async-css.js?v=1788390440675"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788382788139"></script> <script defer src="/src/scripts/fa-check.js?v=1788390440675"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788382788139"></script> <script defer src="/src/utils/updateManager.js?v=1788390440675"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788382788139"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788390440675"></script>
<script type="module" src="/dist/qr-local.js?v=1788382788139"></script> <script type="module" src="/dist/qr-local.js?v=1788390440675"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788382788139"></script> <script type="module" src="/src/components/QRScanner.js?v=1788390440675"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788382788139"></script> <script type="module" src="/dist/app-boot.js?v=1788390440675"></script>
<script type="module" src="/dist/app.js?v=1788382788139"></script> <script type="module" src="/dist/app.js?v=1788390440675"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-register.js?v=1788390440675"></script>
<script src="/src/pwa/install-prompt.js?v=1788382788139" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788390440675" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788382788139" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788390440675" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788390440675"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788390440675">
</body> </body>
</html> </html>
+6 -6
View File
@@ -1,10 +1,10 @@
{ {
"version": "1788382788139", "version": "1788390440675",
"buildVersion": "1788382788139", "buildVersion": "1788390440675",
"appVersion": "6.7.2", "appVersion": "6.7.2",
"buildTime": "2026-09-02T20:59:48.213Z", "buildTime": "2026-09-02T23:07:20.764Z",
"buildId": "1788382788139-2294e38", "buildId": "1788390440675-30e335f",
"gitHash": "2294e38", "gitHash": "30e335f",
"generated": true, "generated": true,
"generatedAt": "2026-09-02T20:59:48.215Z" "generatedAt": "2026-09-02T23:07:20.766Z"
} }
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/ru/manifest.json"> <link rel="manifest" href="/ru/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788390440675">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788390440675">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788382788139"></script> <script defer src="/config/ice-servers.js?v=1788390440675"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788382788139"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788390440675">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/main.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/components.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/components.css?v=1788390440675">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788390440675">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788390440675">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788382788139"></script> <script defer src="/src/scripts/load-async-css.js?v=1788390440675"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788382788139"></script> <script defer src="/src/scripts/fa-check.js?v=1788390440675"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788382788139"></script> <script defer src="/src/utils/updateManager.js?v=1788390440675"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788382788139"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788390440675"></script>
<script type="module" src="/dist/qr-local.js?v=1788382788139"></script> <script type="module" src="/dist/qr-local.js?v=1788390440675"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788382788139"></script> <script type="module" src="/src/components/QRScanner.js?v=1788390440675"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788382788139"></script> <script type="module" src="/dist/app-boot.js?v=1788390440675"></script>
<script type="module" src="/dist/app.js?v=1788382788139"></script> <script type="module" src="/dist/app.js?v=1788390440675"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-register.js?v=1788390440675"></script>
<script src="/src/pwa/install-prompt.js?v=1788382788139" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788390440675" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788382788139" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788390440675" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788390440675"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788390440675">
</body> </body>
</html> </html>
+31 -1
View File
@@ -104,7 +104,37 @@ const CommunityCTA = () => {
React.createElement('div', { React.createElement('div', {
key: 'btns', key: 'btns',
style: { display: 'flex', gap: '14px', justifyContent: 'center', flexWrap: 'wrap' } style: { display: 'flex', gap: '14px', justifyContent: 'center', flexWrap: 'wrap' }
}, [githubBtn, feedbackBtn]) }, [githubBtn, feedbackBtn]),
// Snap Store, bottom right.
//
// Served from this origin, not snapcraft.io. The site's CSP is
// `img-src 'self' data:` and would block a hotlink anyway, but the
// reason to keep it that way is the product's own claim: fetching a
// badge from someone else's server hands them the address of every
// visitor to a page that promises no servers are involved.
React.createElement('div', {
key: 'snap',
style: {
display: 'flex',
justifyContent: isMobile ? 'center' : 'flex-end',
marginTop: '28px'
}
}, React.createElement('a', {
href: 'https://snapcraft.io/securebit-chat',
target: '_blank',
rel: 'noopener noreferrer',
'aria-label': 'Get it from the Snap Store',
style: { display: 'inline-flex', opacity: 0.9, transition: 'opacity .2s' },
onMouseEnter: (e) => { e.currentTarget.style.opacity = 1; },
onMouseLeave: (e) => { e.currentTarget.style.opacity = 0.9; }
}, React.createElement('img', {
src: '/assets/badges/snap-store.svg',
alt: 'Get it from the Snap Store',
width: 182,
height: 56,
loading: 'lazy',
style: { display: 'block' }
})))
]); ]);
return React.createElement('section', { return React.createElement('section', {
+1 -1
View File
@@ -11,7 +11,7 @@ let DYNAMIC_CACHE = 'securebit-pwa-dynamic-v4.7.56';
// Build stamp — rewritten by scripts/post-build.js on every release so this file's // Build stamp — rewritten by scripts/post-build.js on every release so this file's
// bytes change each deploy. That is what makes the browser detect a new Service Worker, // bytes change each deploy. That is what makes the browser detect a new Service Worker,
// reinstall it, drop stale caches and (via controllerchange) prompt the page to update. // reinstall it, drop stale caches and (via controllerchange) prompt the page to update.
const SW_BUILD_VERSION = '1788382788139'; const SW_BUILD_VERSION = '1788390440675';
// Locale subdirectories, rewritten by scripts/build-i18n.js. Each localized page is a // Locale subdirectories, rewritten by scripts/build-i18n.js. Each localized page is a
// separate document at its own URL, so the shell has to be cached and served per // separate document at its own URL, so the shell has to be cached and served per
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/uk/manifest.json"> <link rel="manifest" href="/uk/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788390440675">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788390440675">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788382788139"></script> <script defer src="/config/ice-servers.js?v=1788390440675"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788382788139"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788390440675">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/main.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/components.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/components.css?v=1788390440675">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788390440675">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788390440675">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788382788139"></script> <script defer src="/src/scripts/load-async-css.js?v=1788390440675"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788382788139"></script> <script defer src="/src/scripts/fa-check.js?v=1788390440675"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788382788139"></script> <script defer src="/src/utils/updateManager.js?v=1788390440675"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788382788139"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788390440675"></script>
<script type="module" src="/dist/qr-local.js?v=1788382788139"></script> <script type="module" src="/dist/qr-local.js?v=1788390440675"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788382788139"></script> <script type="module" src="/src/components/QRScanner.js?v=1788390440675"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788382788139"></script> <script type="module" src="/dist/app-boot.js?v=1788390440675"></script>
<script type="module" src="/dist/app.js?v=1788382788139"></script> <script type="module" src="/dist/app.js?v=1788390440675"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-register.js?v=1788390440675"></script>
<script src="/src/pwa/install-prompt.js?v=1788382788139" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788390440675" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788382788139" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788390440675" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788390440675"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788390440675">
</body> </body>
</html> </html>
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/ur/manifest.json"> <link rel="manifest" href="/ur/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788390440675">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788390440675">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788382788139"></script> <script defer src="/config/ice-servers.js?v=1788390440675"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788382788139"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788390440675">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/main.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/components.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/components.css?v=1788390440675">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788390440675">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788390440675">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788382788139"></script> <script defer src="/src/scripts/load-async-css.js?v=1788390440675"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788382788139"></script> <script defer src="/src/scripts/fa-check.js?v=1788390440675"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788382788139"></script> <script defer src="/src/utils/updateManager.js?v=1788390440675"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788382788139"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788390440675"></script>
<script type="module" src="/dist/qr-local.js?v=1788382788139"></script> <script type="module" src="/dist/qr-local.js?v=1788390440675"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788382788139"></script> <script type="module" src="/src/components/QRScanner.js?v=1788390440675"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788382788139"></script> <script type="module" src="/dist/app-boot.js?v=1788390440675"></script>
<script type="module" src="/dist/app.js?v=1788382788139"></script> <script type="module" src="/dist/app.js?v=1788390440675"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-register.js?v=1788390440675"></script>
<script src="/src/pwa/install-prompt.js?v=1788382788139" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788390440675" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788382788139" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788390440675" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788390440675"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788390440675">
</body> </body>
</html> </html>
+24 -24
View File
@@ -30,7 +30,7 @@
<!-- PWA Manifest --> <!-- PWA Manifest -->
<link rel="manifest" href="/zh/manifest.json"> <link rel="manifest" href="/zh/manifest.json">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- PWA Meta Tags --> <!-- PWA Meta Tags -->
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
@@ -96,7 +96,7 @@
<link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png"> <link rel="apple-touch-startup-image" media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)" href="/logo/splash/splash_screens/8.3__iPad_Mini_portrait.png">
<!-- Apple Touch Icons --> <!-- Apple Touch Icons -->
<link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" href="/logo/icon-180x180.png?v=1788390440675">
<link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png"> <link rel="apple-touch-icon" sizes="57x57" href="/logo/icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png"> <link rel="apple-touch-icon" sizes="60x60" href="/logo/icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png"> <link rel="apple-touch-icon" sizes="72x72" href="/logo/icon-72x72.png">
@@ -105,7 +105,7 @@
<link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png"> <link rel="apple-touch-icon" sizes="120x120" href="/logo/icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png"> <link rel="apple-touch-icon" sizes="144x144" href="/logo/icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png"> <link rel="apple-touch-icon" sizes="152x152" href="/logo/icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788382788139"> <link rel="apple-touch-icon" sizes="180x180" href="/logo/icon-180x180.png?v=1788390440675">
<!-- Microsoft Tiles --> <!-- Microsoft Tiles -->
<meta name="msapplication-TileColor" content="#ff6b35"> <meta name="msapplication-TileColor" content="#ff6b35">
@@ -222,7 +222,7 @@
<!-- Render-blocking JS is deferred: classic deferred scripts and module scripts <!-- Render-blocking JS is deferred: classic deferred scripts and module scripts
both execute in document order after parsing, so React still runs before the both execute in document order after parsing, so React still runs before the
app modules below, but the parser / first paint is no longer blocked. --> app modules below, but the parser / first paint is no longer blocked. -->
<script defer src="/config/ice-servers.js?v=1788382788139"></script> <script defer src="/config/ice-servers.js?v=1788390440675"></script>
<script defer src="/libs/react/react.production.min.js"></script> <script defer src="/libs/react/react.production.min.js"></script>
<script defer src="/libs/react-dom/react-dom.production.min.js"></script> <script defer src="/libs/react-dom/react-dom.production.min.js"></script>
<!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only — <!-- Prism syntax highlighting (vendored, offline). Tokenizes code as TEXT only —
@@ -230,8 +230,8 @@
Its CSS is loaded async via load-async-css.js (not paint-critical). --> Its CSS is loaded async via load-async-css.js (not paint-critical). -->
<script defer src="/libs/prism/prism.js"></script> <script defer src="/libs/prism/prism.js"></script>
<!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). --> <!-- Critical, paint-defining CSS stays render-blocking (avoids FOUC / layout shift). -->
<link rel="stylesheet" href="/assets/tailwind.css?v=1788382788139"> <link rel="stylesheet" href="/assets/tailwind.css?v=1788390440675">
<link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788382788139"> <link rel="icon" type="image/x-icon" href="/logo/favicon.ico?v=1788390440675">
<!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI <!-- Preload only the fonts needed for first paint. fa-solid covers the bulk of UI
icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the icons; fa-regular/fa-brands are loaded on demand by their CSS (rarely on the
first screen). Inter latin 400/700 cover body text and headings/buttons. --> first screen). Inter latin 400/700 cover body text and headings/buttons. -->
@@ -239,38 +239,38 @@
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/assets/fonts/inter/files/inter-latin-700.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/assets/fonts/inter/inter.css"> <link rel="stylesheet" href="/assets/fonts/inter/inter.css">
<link rel="stylesheet" href="/src/styles/main.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/main.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/animations.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/animations.css?v=1788390440675">
<link rel="stylesheet" href="/src/styles/components.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/components.css?v=1788390440675">
<!-- Loads after components.css on purpose: press feedback, material weight, <!-- Loads after components.css on purpose: press feedback, material weight,
size-specific tracking and the reduced-motion / -transparency / -contrast size-specific tracking and the reduced-motion / -transparency / -contrast
answers all need to settle arguments with the sheets above on source order. --> answers all need to settle arguments with the sheets above on source order. -->
<link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/apple-motion.css?v=1788390440675">
<!-- Last of the hand-written sheets: the mirroring rules must win over anything <!-- Last of the hand-written sheets: the mirroring rules must win over anything
above them, and they only ever apply under [dir="rtl"]. --> above them, and they only ever apply under [dir="rtl"]. -->
<link rel="stylesheet" href="/src/styles/rtl.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/rtl.css?v=1788390440675">
<!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. --> <!-- Non-critical CSS (FontAwesome ~102KB, Prism) loaded async — no longer blocks paint. -->
<script defer src="/src/scripts/load-async-css.js?v=1788382788139"></script> <script defer src="/src/scripts/load-async-css.js?v=1788390440675"></script>
<noscript> <noscript>
<link rel="stylesheet" href="/assets/fontawesome/css/all.min.css"> <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
<link rel="stylesheet" href="/libs/prism/prism.css"> <link rel="stylesheet" href="/libs/prism/prism.css">
</noscript> </noscript>
<script defer src="/src/scripts/fa-check.js?v=1788382788139"></script> <script defer src="/src/scripts/fa-check.js?v=1788390440675"></script>
<!-- Update Manager - система принудительного обновления --> <!-- Update Manager - система принудительного обновления -->
<script defer src="/src/utils/updateManager.js?v=1788382788139"></script> <script defer src="/src/utils/updateManager.js?v=1788390440675"></script>
<script type="module" src="/src/components/UpdateChecker.jsx?v=1788382788139"></script> <script type="module" src="/src/components/UpdateChecker.jsx?v=1788390440675"></script>
<script type="module" src="/dist/qr-local.js?v=1788382788139"></script> <script type="module" src="/dist/qr-local.js?v=1788390440675"></script>
<script type="module" src="/src/components/QRScanner.js?v=1788382788139"></script> <script type="module" src="/src/components/QRScanner.js?v=1788390440675"></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/dist/app-boot.js?v=1788382788139"></script> <script type="module" src="/dist/app-boot.js?v=1788390440675"></script>
<script type="module" src="/dist/app.js?v=1788382788139"></script> <script type="module" src="/dist/app.js?v=1788390440675"></script>
<script defer src="/src/scripts/pwa-register.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-register.js?v=1788390440675"></script>
<script src="/src/pwa/install-prompt.js?v=1788382788139" type="module"></script> <script src="/src/pwa/install-prompt.js?v=1788390440675" type="module"></script>
<script src="/src/pwa/pwa-manager.js?v=1788382788139" type="module"></script> <script src="/src/pwa/pwa-manager.js?v=1788390440675" type="module"></script>
<script defer src="/src/scripts/pwa-offline-test.js?v=1788382788139"></script> <script defer src="/src/scripts/pwa-offline-test.js?v=1788390440675"></script>
<link rel="stylesheet" href="/src/styles/pwa.css?v=1788382788139"> <link rel="stylesheet" href="/src/styles/pwa.css?v=1788390440675">
</body> </body>
</html> </html>