{"id":1665,"date":"2026-09-05T10:16:44","date_gmt":"2026-09-05T10:16:44","guid":{"rendered":"https:\/\/www.mathros.net.ua\/ru\/?page_id=1665"},"modified":"2026-09-05T11:17:22","modified_gmt":"2026-09-05T11:17:22","slug":"opredelitel-matricy-onlajn","status":"publish","type":"page","link":"https:\/\/www.mathros.net.ua\/ru\/opredelitel-matricy-onlajn","title":{"rendered":"<center>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u041c\u0430\u0442\u0440\u0438\u0446\u044b \u041e\u043d\u043b\u0430\u0439\u043d \u0441 \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u043c \u0420\u0435\u0448\u0435\u043d\u0438\u0435\u043c<\/center>"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1665\" class=\"elementor elementor-1665\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c193761 e-flex e-con-boxed e-con e-parent\" data-id=\"c193761\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a4fbb6b elementor-widget elementor-widget-html\" data-id=\"a4fbb6b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2\r\n  id=\"determinant-calculator-title\"\r\n  class=\"determinant-calculator-title\"\r\n>\r\n  \u041e\u0442\u0440\u0438\u043c\u0430\u0439\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u0432\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u0456 \u0437\u0430 \u043a\u0456\u043b\u044c\u043a\u0430 \u0441\u0435\u043a\u0443\u043d\u0434, \u0441\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u0432\u0448\u0438\u0441\u044c \u043d\u0430\u0448\u0438\u043c \u043e\u043d\u043b\u0430\u0439\u043d-\u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c\r\n<\/h2>\r\n\r\n\r\n<style>\r\n.determinant-calculator-title {\r\n  width:\r\n    min(\r\n      860px,\r\n      calc(100% - 32px)\r\n    );\r\n\r\n  max-width:\r\n    860px;\r\n\r\n  margin:\r\n    10px auto 16px;\r\n\r\n  padding:\r\n    0;\r\n\r\n  font-family:\r\n    system-ui,\r\n    -apple-system,\r\n    \"Segoe UI\",\r\n    Roboto,\r\n    \"Helvetica Neue\",\r\n    Arial,\r\n    \"Noto Sans\",\r\n    \"Liberation Sans\",\r\n    sans-serif;\r\n\r\n  font-size:\r\n    clamp(\r\n      1.15rem,\r\n      1rem + .8vw,\r\n      1.5rem\r\n    );\r\n\r\n  font-weight:\r\n    650;\r\n\r\n  line-height:\r\n    1.35;\r\n\r\n  letter-spacing:\r\n    .002em;\r\n\r\n  color:\r\n    #334155;\r\n\r\n  text-align:\r\n    center;\r\n\r\n  text-wrap:\r\n    balance;\r\n\r\n  hyphens:\r\n    auto;\r\n\r\n  word-break:\r\n    normal;\r\n\r\n  overflow-wrap:\r\n    anywhere;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Dark mode\r\n========================================================= *\/\r\n\r\n@media (prefers-color-scheme: dark) {\r\n\r\n  .determinant-calculator-title {\r\n    color:\r\n      #cbd5e1;\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Tablet\r\n========================================================= *\/\r\n\r\n@media (max-width: 768px) {\r\n\r\n  .determinant-calculator-title {\r\n    width:\r\n      calc(100% - 32px);\r\n\r\n    margin:\r\n      8px auto 14px;\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Mobile\r\n========================================================= *\/\r\n\r\n@media (max-width: 480px) {\r\n\r\n  .determinant-calculator-title {\r\n    width:\r\n      calc(100% - 24px);\r\n\r\n    font-size:\r\n      clamp(\r\n        1.05rem,\r\n        .95rem + 1.5vw,\r\n        1.25rem\r\n      );\r\n\r\n    line-height:\r\n      1.4;\r\n\r\n    margin:\r\n      6px auto 12px;\r\n  }\r\n\r\n}\r\n<\/style>\r\n\r\n\r\n<script>\r\n(function () {\r\n\r\n  'use strict';\r\n\r\n\r\n  \/* =======================================================\r\n     Translations\r\n  ======================================================= *\/\r\n\r\n  const translations = {\r\n\r\n    uk:\r\n      '\u041e\u0442\u0440\u0438\u043c\u0430\u0439\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u0432\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u0456 \u0437\u0430 \u043a\u0456\u043b\u044c\u043a\u0430 \u0441\u0435\u043a\u0443\u043d\u0434, \u0441\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u0432\u0448\u0438\u0441\u044c \u043d\u0430\u0448\u0438\u043c \u043e\u043d\u043b\u0430\u0439\u043d-\u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c',\r\n\r\n    en:\r\n      'Calculate the determinant of a matrix in seconds with our online calculator',\r\n\r\n    ru:\r\n      '\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0437\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c \u043d\u0430\u0448\u0438\u043c \u043e\u043d\u043b\u0430\u0439\u043d-\u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c'\r\n\r\n  };\r\n\r\n\r\n  \/* =======================================================\r\n     Language normalization\r\n  ======================================================= *\/\r\n\r\n  function normalizeLanguage(value) {\r\n\r\n    const language =\r\n      String(\r\n        value || ''\r\n      )\r\n        .trim()\r\n        .toLowerCase()\r\n        .replace(\r\n          '_',\r\n          '-'\r\n        );\r\n\r\n\r\n    if (\r\n      language === 'uk' ||\r\n      language === 'ua' ||\r\n      language.startsWith('uk-') ||\r\n      language.startsWith('ua-')\r\n    ) {\r\n      return 'uk';\r\n    }\r\n\r\n\r\n    if (\r\n      language === 'en' ||\r\n      language.startsWith('en-')\r\n    ) {\r\n      return 'en';\r\n    }\r\n\r\n\r\n    if (\r\n      language === 'ru' ||\r\n      language.startsWith('ru-')\r\n    ) {\r\n      return 'ru';\r\n    }\r\n\r\n\r\n    return '';\r\n\r\n  }\r\n\r\n\r\n  \/* =======================================================\r\n     Language detection\r\n  ======================================================= *\/\r\n\r\n  function detectLanguage() {\r\n\r\n    \/*\r\n     * 1. \u042f\u0432\u043d\u043e \u0437\u0430\u0434\u0430\u043d\u0430 \u043c\u043e\u0432\u0430 \u0447\u0435\u0440\u0435\u0437 JavaScript.\r\n     *\r\n     * \u041f\u0440\u0438\u043a\u043b\u0430\u0434:\r\n     * window.MathrosDetLang = 'en';\r\n     *\/\r\n    const windowLanguage =\r\n      normalizeLanguage(\r\n        window.MathrosDetLang\r\n      );\r\n\r\n\r\n    if (windowLanguage) {\r\n      return windowLanguage;\r\n    }\r\n\r\n\r\n    \/*\r\n     * 2. \u0410\u0442\u0440\u0438\u0431\u0443\u0442 lang \u0443 <html>.\r\n     *\/\r\n    const htmlLanguage =\r\n      normalizeLanguage(\r\n        document.documentElement.lang\r\n      );\r\n\r\n\r\n    if (htmlLanguage) {\r\n      return htmlLanguage;\r\n    }\r\n\r\n\r\n    \/*\r\n     * 3. \u041f\u0435\u0440\u0448\u0438\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 URL.\r\n     *\r\n     * \/uk\/...\r\n     * \/en\/...\r\n     * \/ru\/...\r\n     *\/\r\n    const pathSegment =\r\n      String(\r\n        window.location.pathname || ''\r\n      )\r\n        .split('\/')\r\n        .filter(Boolean)[0]\r\n        ||\r\n        '';\r\n\r\n\r\n    const pathLanguage =\r\n      normalizeLanguage(\r\n        pathSegment\r\n      );\r\n\r\n\r\n    if (pathLanguage) {\r\n      return pathLanguage;\r\n    }\r\n\r\n\r\n    \/*\r\n     * 4. \u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430 \u043c\u043e\u0432\u0430 \u0437\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f\u043c.\r\n     *\/\r\n    return 'uk';\r\n\r\n  }\r\n\r\n\r\n  \/* =======================================================\r\n     Set title\r\n  ======================================================= *\/\r\n\r\n  function setCalculatorTitle() {\r\n\r\n    const title =\r\n      document.getElementById(\r\n        'determinant-calculator-title'\r\n      );\r\n\r\n\r\n    if (!title) {\r\n      return;\r\n    }\r\n\r\n\r\n    const language =\r\n      detectLanguage();\r\n\r\n\r\n    title.textContent =\r\n      translations[language]\r\n      ||\r\n      translations.uk;\r\n\r\n  }\r\n\r\n\r\n  \/* =======================================================\r\n     Init\r\n  ======================================================= *\/\r\n\r\n  if (\r\n    document.readyState === 'loading'\r\n  ) {\r\n\r\n    document.addEventListener(\r\n      'DOMContentLoaded',\r\n      setCalculatorTitle\r\n    );\r\n\r\n  } else {\r\n\r\n    setCalculatorTitle();\r\n\r\n  }\r\n\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2daee86 elementor-widget elementor-widget-html\" data-id=\"2daee86\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- =========================================================\r\n     DETERMINANT CALCULATOR UI\r\n     Languages: uk \/ en \/ ru\r\n     AJAX action: calculate_determinant\r\n\r\n     Language detection priority:\r\n     1) window.MathrosDetLang = 'uk' | 'en' | 'ru'\r\n     2) data-lang on #determinant-calculator-app\r\n     3) <html lang=\"...\">\r\n     4) first URL segment: \/uk\/, \/en\/, \/ru\/\r\n     5) fallback: uk\r\n========================================================= -->\r\n\r\n\r\n<!-- =========================================================\r\n     MathJax v2\r\n========================================================= -->\r\n\r\n<script>\r\n(function () {\r\n\r\n    if (\r\n        !window.MathJax\r\n        &&\r\n        !document.getElementById(\r\n            'mathjax-v2-determinant-loader'\r\n        )\r\n    ) {\r\n\r\n        const script =\r\n            document.createElement(\r\n                'script'\r\n            );\r\n\r\n        script.id =\r\n            'mathjax-v2-determinant-loader';\r\n\r\n        script.type =\r\n            'text\/javascript';\r\n\r\n        script.async =\r\n            true;\r\n\r\n        script.src =\r\n            'https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/mathjax\/2.7.7\/MathJax.js?config=TeX-MML-AM_CHTML';\r\n\r\n        document.head.appendChild(\r\n            script\r\n        );\r\n\r\n    }\r\n\r\n})();\r\n<\/script>\r\n\r\n\r\n<!-- =========================================================\r\n     HTML\r\n========================================================= -->\r\n\r\n<div\r\n    id=\"determinant-calculator-app\"\r\n    class=\"determinant-app\"\r\n    data-lang=\"auto\"\r\n>\r\n\r\n    <!-- =====================================================\r\n         Calculator\r\n    ====================================================== -->\r\n\r\n    <section\r\n        class=\"determinant-calculator\"\r\n        aria-labelledby=\"determinant-size-label\"\r\n    >\r\n\r\n        <!-- =================================================\r\n             Matrix size\r\n        ================================================== -->\r\n\r\n        <div class=\"determinant-field\">\r\n\r\n            <label\r\n                id=\"determinant-size-label\"\r\n                for=\"matrixSize\"\r\n                data-i18n=\"matrixSizeLabel\"\r\n            >\r\n                \u0420\u043e\u0437\u043c\u0456\u0440\u043d\u0456\u0441\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0456\r\n            <\/label>\r\n\r\n            <select\r\n                id=\"matrixSize\"\r\n                data-i18n-aria=\"matrixSizeAria\"\r\n                aria-label=\"\u0420\u043e\u0437\u043c\u0456\u0440\u043d\u0456\u0441\u0442\u044c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u043e\u0457 \u043c\u0430\u0442\u0440\u0438\u0446\u0456\"\r\n            >\r\n\r\n                <option value=\"2\">\r\n                    2\u00d72\r\n                <\/option>\r\n\r\n                <option\r\n                    value=\"3\"\r\n                    selected\r\n                >\r\n                    3\u00d73\r\n                <\/option>\r\n\r\n                <option value=\"4\">\r\n                    4\u00d74\r\n                <\/option>\r\n\r\n                <option value=\"5\">\r\n                    5\u00d75\r\n                <\/option>\r\n\r\n                <option value=\"6\">\r\n                    6\u00d76\r\n                <\/option>\r\n\r\n                <option value=\"7\">\r\n                    7\u00d77\r\n                <\/option>\r\n\r\n                <option value=\"8\">\r\n                    8\u00d78\r\n                <\/option>\r\n\r\n            <\/select>\r\n\r\n        <\/div>\r\n\r\n\r\n        <!-- =================================================\r\n             Matrix\r\n        ================================================== -->\r\n\r\n        <section\r\n            class=\"determinant-matrix-section\"\r\n            aria-labelledby=\"determinant-matrix-title\"\r\n        >\r\n\r\n            <div\r\n                id=\"determinant-matrix-title\"\r\n                class=\"determinant-section-label\"\r\n                data-i18n=\"matrixTitle\"\r\n            >\r\n                \u041c\u0430\u0442\u0440\u0438\u0446\u044f A\r\n            <\/div>\r\n\r\n\r\n            <div class=\"determinant-matrix-scroll\">\r\n\r\n                <div class=\"determinant-matrix-frame\">\r\n\r\n                    <table\r\n                        id=\"matrixTable\"\r\n                        class=\"determinant-matrix\"\r\n                        data-i18n-aria=\"matrixTableAria\"\r\n                        aria-label=\"\u041f\u043e\u043b\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0456\u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u0456\"\r\n                    ><\/table>\r\n\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n        <\/section>\r\n\r\n\r\n        <!-- =================================================\r\n             Random example settings\r\n        ================================================== -->\r\n\r\n        <details class=\"determinant-random-settings\">\r\n\r\n            <summary data-i18n=\"randomSettingsTitle\">\r\n                \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u0432\u0438\u043f\u0430\u0434\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u0443\r\n            <\/summary>\r\n\r\n\r\n            <div class=\"determinant-random-settings__content\">\r\n\r\n                <div class=\"determinant-random-grid\">\r\n\r\n\r\n                    <!-- =====================================\r\n                         Range\r\n                    ====================================== -->\r\n\r\n                    <div class=\"determinant-random-group\">\r\n\r\n                        <div\r\n                            class=\"determinant-random-label\"\r\n                            data-i18n=\"elementValuesLabel\"\r\n                        >\r\n                            \u0417\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0456\u0432\r\n                        <\/div>\r\n\r\n\r\n                        <div class=\"determinant-range\">\r\n\r\n                            <div>\r\n\r\n                                <label\r\n                                    for=\"randomMin\"\r\n                                    data-i18n=\"fromLabel\"\r\n                                >\r\n                                    \u0412\u0456\u0434\r\n                                <\/label>\r\n\r\n                                <input\r\n                                    id=\"randomMin\"\r\n                                    type=\"number\"\r\n                                    value=\"-5\"\r\n                                    step=\"0.1\"\r\n                                    data-i18n-aria=\"randomMinAria\"\r\n                                    aria-label=\"\u041c\u0456\u043d\u0456\u043c\u0430\u043b\u044c\u043d\u0435 \u0432\u0438\u043f\u0430\u0434\u043a\u043e\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\"\r\n                                >\r\n\r\n                            <\/div>\r\n\r\n\r\n                            <div>\r\n\r\n                                <label\r\n                                    for=\"randomMax\"\r\n                                    data-i18n=\"toLabel\"\r\n                                >\r\n                                    \u0414\u043e\r\n                                <\/label>\r\n\r\n                                <input\r\n                                    id=\"randomMax\"\r\n                                    type=\"number\"\r\n                                    value=\"5\"\r\n                                    step=\"0.1\"\r\n                                    data-i18n-aria=\"randomMaxAria\"\r\n                                    aria-label=\"\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0435 \u0432\u0438\u043f\u0430\u0434\u043a\u043e\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\"\r\n                                >\r\n\r\n                            <\/div>\r\n\r\n                        <\/div>\r\n\r\n                    <\/div>\r\n\r\n\r\n                    <!-- =====================================\r\n                         Number type\r\n                    ====================================== -->\r\n\r\n                    <div class=\"determinant-random-group\">\r\n\r\n                        <label\r\n                            class=\"determinant-random-label\"\r\n                            for=\"randomNumberType\"\r\n                            data-i18n=\"numberTypeLabel\"\r\n                        >\r\n                            \u0422\u0438\u043f \u0447\u0438\u0441\u0435\u043b\r\n                        <\/label>\r\n\r\n                        <select id=\"randomNumberType\">\r\n\r\n                            <option\r\n                                value=\"integer\"\r\n                                selected\r\n                                data-i18n=\"integersOption\"\r\n                            >\r\n                                \u0426\u0456\u043b\u0456\r\n                            <\/option>\r\n\r\n                            <option\r\n                                value=\"decimal\"\r\n                                data-i18n=\"decimalsOption\"\r\n                            >\r\n                                \u0414\u0435\u0441\u044f\u0442\u043a\u043e\u0432\u0456\r\n                            <\/option>\r\n\r\n                        <\/select>\r\n\r\n                    <\/div>\r\n\r\n\r\n                    <!-- =====================================\r\n                         Matrix type\r\n                    ====================================== -->\r\n\r\n                    <div class=\"determinant-random-group\">\r\n\r\n                        <label\r\n                            class=\"determinant-random-label\"\r\n                            for=\"randomMatrixType\"\r\n                            data-i18n=\"matrixTypeLabel\"\r\n                        >\r\n                            \u0422\u0438\u043f \u043c\u0430\u0442\u0440\u0438\u0446\u0456\r\n                        <\/label>\r\n\r\n                        <select id=\"randomMatrixType\">\r\n\r\n                            <option\r\n                                value=\"any\"\r\n                                selected\r\n                                data-i18n=\"anyMatrixOption\"\r\n                            >\r\n                                \u0411\u0443\u0434\u044c-\u044f\u043a\u0430\r\n                            <\/option>\r\n\r\n                            <option\r\n                                value=\"nonsingular\"\r\n                                data-i18n=\"nonsingularOption\"\r\n                            >\r\n                                \u041d\u0435\u0432\u0438\u0440\u043e\u0434\u0436\u0435\u043d\u0430\r\n                            <\/option>\r\n\r\n                            <option\r\n                                value=\"singular\"\r\n                                data-i18n=\"singularOption\"\r\n                            >\r\n                                \u0412\u0438\u0440\u043e\u0434\u0436\u0435\u043d\u0430\r\n                            <\/option>\r\n\r\n                        <\/select>\r\n\r\n                    <\/div>\r\n\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n        <\/details>\r\n\r\n\r\n        <!-- =================================================\r\n             Utility buttons\r\n        ================================================== -->\r\n\r\n        <div class=\"determinant-utility-row\">\r\n\r\n            <button\r\n                id=\"determinant-random-button\"\r\n                type=\"button\"\r\n                class=\"determinant-secondary-button\"\r\n                data-i18n=\"randomButton\"\r\n            >\r\n                \u0412\u0438\u043f\u0430\u0434\u043a\u043e\u0432\u0438\u0439 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\r\n            <\/button>\r\n\r\n\r\n            <button\r\n                id=\"determinant-clear-button\"\r\n                type=\"button\"\r\n                class=\"determinant-text-button\"\r\n                data-i18n=\"clearButton\"\r\n            >\r\n                \u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438\r\n            <\/button>\r\n\r\n        <\/div>\r\n\r\n\r\n        <!-- =================================================\r\n             Main action\r\n        ================================================== -->\r\n\r\n        <button\r\n            id=\"determinant-generate-button\"\r\n            type=\"button\"\r\n            class=\"determinant-primary-button\"\r\n            data-i18n=\"calculateButton\"\r\n        >\r\n            \u041e\u0431\u0447\u0438\u0441\u043b\u0438\u0442\u0438 \u0432\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a\r\n        <\/button>\r\n\r\n\r\n        <!-- =================================================\r\n             Keyboard shortcut\r\n        ================================================== -->\r\n\r\n        <div class=\"determinant-shortcut\">\r\n\r\n            <span data-i18n=\"shortcutLabel\">\r\n                \u0428\u0432\u0438\u0434\u043a\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a:\r\n            <\/span>\r\n\r\n            <kbd>Ctrl<\/kbd>\/<kbd>\u2318<\/kbd>\r\n            +\r\n            <kbd>Enter<\/kbd>\r\n\r\n        <\/div>\r\n\r\n    <\/section>\r\n\r\n\r\n    <!-- =====================================================\r\n         Error\r\n    ====================================================== -->\r\n\r\n    <div\r\n        id=\"determinant-error\"\r\n        class=\"determinant-error\"\r\n        role=\"alert\"\r\n        aria-live=\"polite\"\r\n    ><\/div>\r\n\r\n\r\n    <!-- =====================================================\r\n         Loading\r\n    ====================================================== -->\r\n\r\n    <div\r\n        id=\"determinant-loading\"\r\n        class=\"determinant-loading\"\r\n        hidden\r\n        aria-live=\"polite\"\r\n    >\r\n\r\n        <div\r\n            class=\"determinant-loader-circle\"\r\n            aria-hidden=\"true\"\r\n        ><\/div>\r\n\r\n\r\n        <div>\r\n\r\n            <strong data-i18n=\"loadingTitle\">\r\n                \u041e\u0431\u0447\u0438\u0441\u043b\u044e\u0454\u043c\u043e \u0432\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a\r\n            <\/strong>\r\n\r\n            <span data-i18n=\"loadingText\">\r\n                \u0412\u0438\u043a\u043e\u043d\u0443\u0454\u043c\u043e \u043d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u0456 \u043f\u0435\u0440\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0456.\r\n            <\/span>\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n\r\n    <!-- =====================================================\r\n         Solution\r\n    ====================================================== -->\r\n\r\n    <section\r\n        id=\"determinant-solution-container\"\r\n        class=\"determinant-solution-container\"\r\n        hidden\r\n        aria-live=\"polite\"\r\n    ><\/section>\r\n\r\n<\/div>\r\n\r\n\r\n<!-- =========================================================\r\n     CSS\r\n========================================================= -->\r\n\r\n<style>\r\n\r\n\/* =========================================================\r\n   Root\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app {\r\n\r\n    --det-bg:\r\n        #ffffff;\r\n\r\n    --det-soft:\r\n        #f8fbfd;\r\n\r\n    --det-soft-2:\r\n        #eef5f8;\r\n\r\n    --det-border:\r\n        #dbe6ed;\r\n\r\n    --det-border-strong:\r\n        #bfd0da;\r\n\r\n    --det-text:\r\n        #0f1728;\r\n\r\n    --det-muted:\r\n        #607487;\r\n\r\n    --det-accent:\r\n        #0B638B;\r\n\r\n    --det-accent-hover:\r\n        #095676;\r\n\r\n    --det-accent-soft:\r\n        rgba(11, 99, 139, .10);\r\n\r\n    --det-danger:\r\n        #b9382f;\r\n\r\n    --det-danger-soft:\r\n        rgba(185, 56, 47, .10);\r\n\r\n    --det-radius:\r\n        16px;\r\n\r\n    --det-font:\r\n        system-ui,\r\n        -apple-system,\r\n        \"Segoe UI\",\r\n        Roboto,\r\n        \"Helvetica Neue\",\r\n        Arial,\r\n        \"Noto Sans\",\r\n        sans-serif;\r\n\r\n    width:\r\n        min(100%, 860px);\r\n\r\n    margin:\r\n        20px auto;\r\n\r\n    color:\r\n        var(--det-text);\r\n\r\n    font-family:\r\n        var(--det-font);\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app *,\r\n#determinant-calculator-app *::before,\r\n#determinant-calculator-app *::after {\r\n\r\n    box-sizing:\r\n        border-box;\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Calculator\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-calculator {\r\n\r\n    padding:\r\n        22px;\r\n\r\n    border:\r\n        1px solid\r\n        var(--det-border);\r\n\r\n    border-radius:\r\n        var(--det-radius);\r\n\r\n    background:\r\n        var(--det-bg);\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   General field\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-field {\r\n\r\n    margin-bottom:\r\n        18px;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-field label {\r\n\r\n    display:\r\n        block;\r\n\r\n    margin:\r\n        0 0 7px;\r\n\r\n    color:\r\n        var(--det-text);\r\n\r\n    font-size:\r\n        .95rem;\r\n\r\n    font-weight:\r\n        760;\r\n\r\n    line-height:\r\n        1.35;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-field select {\r\n\r\n    width:\r\n        190px;\r\n\r\n    height:\r\n        43px;\r\n\r\n    padding:\r\n        0 11px;\r\n\r\n    border:\r\n        1px solid\r\n        var(--det-border);\r\n\r\n    border-radius:\r\n        11px;\r\n\r\n    outline:\r\n        none;\r\n\r\n    background:\r\n        var(--det-soft);\r\n\r\n    color:\r\n        var(--det-text);\r\n\r\n    font:\r\n        650 .9rem\/1\r\n        var(--det-font);\r\n\r\n    cursor:\r\n        pointer;\r\n\r\n    transition:\r\n        border-color .16s ease,\r\n        background-color .16s ease;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-field select:hover {\r\n\r\n    border-color:\r\n        var(--det-border-strong);\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-field select:focus-visible {\r\n\r\n    border-color:\r\n        var(--det-accent);\r\n\r\n    box-shadow:\r\n        0 0 0 3px\r\n        rgba(11, 99, 139, .08);\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Matrix section\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-matrix-section {\r\n\r\n    padding-top:\r\n        15px;\r\n\r\n    border-top:\r\n        1px solid\r\n        var(--det-border);\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-section-label {\r\n\r\n    margin-bottom:\r\n        10px;\r\n\r\n    color:\r\n        var(--det-muted);\r\n\r\n    font-size:\r\n        .78rem;\r\n\r\n    font-weight:\r\n        800;\r\n\r\n    line-height:\r\n        1.35;\r\n\r\n    letter-spacing:\r\n        .035em;\r\n\r\n    text-transform:\r\n        uppercase;\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Matrix scroll\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-matrix-scroll {\r\n\r\n    width:\r\n        100%;\r\n\r\n    max-width:\r\n        100%;\r\n\r\n    overflow-x:\r\n        auto;\r\n\r\n    overflow-y:\r\n        hidden;\r\n\r\n    padding:\r\n        4px 0 8px;\r\n\r\n    -webkit-overflow-scrolling:\r\n        touch;\r\n\r\n    scrollbar-width:\r\n        thin;\r\n\r\n    scrollbar-color:\r\n        var(--det-border-strong)\r\n        transparent;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-matrix-scroll::-webkit-scrollbar {\r\n\r\n    height:\r\n        6px;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-matrix-scroll::-webkit-scrollbar-track {\r\n\r\n    background:\r\n        transparent;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-matrix-scroll::-webkit-scrollbar-thumb {\r\n\r\n    background:\r\n        var(--det-border-strong);\r\n\r\n    border-radius:\r\n        999px;\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Matrix brackets\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-matrix-frame {\r\n\r\n    position:\r\n        relative;\r\n\r\n    display:\r\n        table;\r\n\r\n    min-width:\r\n        min-content;\r\n\r\n    margin:\r\n        0 auto;\r\n\r\n    padding:\r\n        10px 18px;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-matrix-frame::before {\r\n\r\n    content:\r\n        \"\";\r\n\r\n    position:\r\n        absolute;\r\n\r\n    top:\r\n        3px;\r\n\r\n    bottom:\r\n        3px;\r\n\r\n    left:\r\n        2px;\r\n\r\n    width:\r\n        9px;\r\n\r\n    border-top:\r\n        2px solid\r\n        var(--det-text);\r\n\r\n    border-bottom:\r\n        2px solid\r\n        var(--det-text);\r\n\r\n    border-left:\r\n        2px solid\r\n        var(--det-text);\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-matrix-frame::after {\r\n\r\n    content:\r\n        \"\";\r\n\r\n    position:\r\n        absolute;\r\n\r\n    top:\r\n        3px;\r\n\r\n    bottom:\r\n        3px;\r\n\r\n    right:\r\n        2px;\r\n\r\n    width:\r\n        9px;\r\n\r\n    border-top:\r\n        2px solid\r\n        var(--det-text);\r\n\r\n    border-bottom:\r\n        2px solid\r\n        var(--det-text);\r\n\r\n    border-right:\r\n        2px solid\r\n        var(--det-text);\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Matrix table\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-matrix {\r\n\r\n    width:\r\n        auto !important;\r\n\r\n    margin:\r\n        0 !important;\r\n\r\n    padding:\r\n        0 !important;\r\n\r\n    border:\r\n        0 !important;\r\n\r\n    border-collapse:\r\n        separate !important;\r\n\r\n    border-spacing:\r\n        6px !important;\r\n\r\n    background:\r\n        transparent !important;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-matrix tr,\r\n\r\n#determinant-calculator-app\r\n.determinant-matrix td {\r\n\r\n    margin:\r\n        0 !important;\r\n\r\n    padding:\r\n        0 !important;\r\n\r\n    border:\r\n        0 !important;\r\n\r\n    background:\r\n        transparent !important;\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Matrix inputs\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-matrix input {\r\n\r\n    display:\r\n        block;\r\n\r\n    width:\r\n        70px;\r\n\r\n    height:\r\n        43px;\r\n\r\n    margin:\r\n        0;\r\n\r\n    padding:\r\n        0 7px;\r\n\r\n    border:\r\n        1px solid\r\n        var(--det-border);\r\n\r\n    border-radius:\r\n        9px;\r\n\r\n    outline:\r\n        none;\r\n\r\n    background:\r\n        var(--det-soft);\r\n\r\n    color:\r\n        var(--det-text);\r\n\r\n    font:\r\n        650 15px\/1\r\n        var(--det-font);\r\n\r\n    text-align:\r\n        center;\r\n\r\n    transition:\r\n        border-color .16s ease,\r\n        background-color .16s ease,\r\n        box-shadow .16s ease;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-matrix input:hover {\r\n\r\n    border-color:\r\n        var(--det-border-strong);\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-matrix input:focus-visible {\r\n\r\n    border-color:\r\n        var(--det-accent);\r\n\r\n    background:\r\n        #ffffff;\r\n\r\n    box-shadow:\r\n        0 0 0 3px\r\n        rgba(11, 99, 139, .08);\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-matrix input::placeholder {\r\n\r\n    color:\r\n        var(--det-muted);\r\n\r\n    opacity:\r\n        .52;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-matrix input.determinant-input-error {\r\n\r\n    border-color:\r\n        var(--det-danger);\r\n\r\n    background:\r\n        var(--det-danger-soft);\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Random settings\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-random-settings {\r\n\r\n    margin-top:\r\n        17px;\r\n\r\n    padding-top:\r\n        13px;\r\n\r\n    border-top:\r\n        1px solid\r\n        var(--det-border);\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-random-settings > summary {\r\n\r\n    cursor:\r\n        pointer;\r\n\r\n    list-style:\r\n        none;\r\n\r\n    color:\r\n        var(--det-accent);\r\n\r\n    font-size:\r\n        .87rem;\r\n\r\n    font-weight:\r\n        760;\r\n\r\n    line-height:\r\n        1.4;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-random-settings > summary::-webkit-details-marker {\r\n\r\n    display:\r\n        none;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-random-settings > summary::after {\r\n\r\n    content:\r\n        \" +\";\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-random-settings[open] > summary::after {\r\n\r\n    content:\r\n        \" \u2212\";\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-random-settings__content {\r\n\r\n    margin-top:\r\n        13px;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-random-grid {\r\n\r\n    display:\r\n        grid;\r\n\r\n    grid-template-columns:\r\n        1.25fr 1fr 1fr;\r\n\r\n    gap:\r\n        8px;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-random-group {\r\n\r\n    min-width:\r\n        0;\r\n\r\n    padding:\r\n        10px 11px;\r\n\r\n    border:\r\n        1px solid\r\n        var(--det-border);\r\n\r\n    border-radius:\r\n        9px;\r\n\r\n    background:\r\n        var(--det-soft);\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-random-label {\r\n\r\n    display:\r\n        block;\r\n\r\n    margin:\r\n        0 0 7px;\r\n\r\n    color:\r\n        var(--det-text);\r\n\r\n    font-size:\r\n        .84rem;\r\n\r\n    font-weight:\r\n        760;\r\n\r\n    line-height:\r\n        1.35;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-range {\r\n\r\n    display:\r\n        grid;\r\n\r\n    grid-template-columns:\r\n        repeat(\r\n            2,\r\n            minmax(0, 1fr)\r\n        );\r\n\r\n    gap:\r\n        7px;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-range label {\r\n\r\n    display:\r\n        block;\r\n\r\n    margin-bottom:\r\n        4px;\r\n\r\n    color:\r\n        var(--det-muted);\r\n\r\n    font-size:\r\n        .75rem;\r\n\r\n    font-weight:\r\n        650;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-range input,\r\n\r\n#determinant-calculator-app\r\n.determinant-random-group select {\r\n\r\n    width:\r\n        100%;\r\n\r\n    height:\r\n        39px;\r\n\r\n    padding:\r\n        0 9px;\r\n\r\n    border:\r\n        1px solid\r\n        var(--det-border);\r\n\r\n    border-radius:\r\n        8px;\r\n\r\n    outline:\r\n        none;\r\n\r\n    background:\r\n        var(--det-bg);\r\n\r\n    color:\r\n        var(--det-text);\r\n\r\n    font:\r\n        650 .84rem\/1\r\n        var(--det-font);\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-range input:hover,\r\n\r\n#determinant-calculator-app\r\n.determinant-random-group select:hover {\r\n\r\n    border-color:\r\n        var(--det-border-strong);\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-range input:focus-visible,\r\n\r\n#determinant-calculator-app\r\n.determinant-random-group select:focus-visible {\r\n\r\n    border-color:\r\n        var(--det-accent);\r\n\r\n    box-shadow:\r\n        0 0 0 3px\r\n        rgba(11, 99, 139, .07);\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Utility row\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-utility-row {\r\n\r\n    display:\r\n        grid;\r\n\r\n    grid-template-columns:\r\n        minmax(0, 1fr)\r\n        auto;\r\n\r\n    gap:\r\n        12px;\r\n\r\n    align-items:\r\n        center;\r\n\r\n    margin-top:\r\n        15px;\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Secondary button\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-secondary-button {\r\n\r\n    min-height:\r\n        43px;\r\n\r\n    padding:\r\n        0 14px;\r\n\r\n    border:\r\n        1px solid\r\n        var(--det-border);\r\n\r\n    border-radius:\r\n        10px;\r\n\r\n    background:\r\n        var(--det-soft);\r\n\r\n    color:\r\n        var(--det-accent);\r\n\r\n    font:\r\n        760 .88rem\/1.2\r\n        var(--det-font);\r\n\r\n    cursor:\r\n        pointer;\r\n\r\n    transition:\r\n        border-color .16s ease,\r\n        background-color .16s ease;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-secondary-button:hover {\r\n\r\n    border-color:\r\n        var(--det-border-strong);\r\n\r\n    background:\r\n        var(--det-accent-soft);\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Text button\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-text-button {\r\n\r\n    min-height:\r\n        43px;\r\n\r\n    padding:\r\n        0 8px;\r\n\r\n    border:\r\n        1px solid\r\n        transparent;\r\n\r\n    border-radius:\r\n        8px;\r\n\r\n    background:\r\n        transparent;\r\n\r\n    color:\r\n        var(--det-accent);\r\n\r\n    font:\r\n        750 .88rem\/1.2\r\n        var(--det-font);\r\n\r\n    cursor:\r\n        pointer;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-text-button:hover {\r\n\r\n    background:\r\n        var(--det-accent-soft);\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Primary button\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-primary-button {\r\n\r\n    width:\r\n        100%;\r\n\r\n    min-height:\r\n        48px;\r\n\r\n    margin-top:\r\n        13px;\r\n\r\n    padding:\r\n        0 18px;\r\n\r\n    border:\r\n        1px solid\r\n        transparent;\r\n\r\n    border-radius:\r\n        11px;\r\n\r\n    background:\r\n        var(--det-accent);\r\n\r\n    color:\r\n        #ffffff;\r\n\r\n    font:\r\n        800 .96rem\/1.2\r\n        var(--det-font);\r\n\r\n    cursor:\r\n        pointer;\r\n\r\n    transition:\r\n        background-color .16s ease,\r\n        opacity .16s ease;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-primary-button:hover {\r\n\r\n    background:\r\n        var(--det-accent-hover);\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-primary-button:disabled {\r\n\r\n    opacity:\r\n        .62;\r\n\r\n    cursor:\r\n        not-allowed;\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Shortcut\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-shortcut {\r\n\r\n    margin-top:\r\n        8px;\r\n\r\n    text-align:\r\n        center;\r\n\r\n    color:\r\n        var(--det-muted);\r\n\r\n    font-size:\r\n        .76rem;\r\n\r\n    line-height:\r\n        1.4;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-shortcut kbd {\r\n\r\n    display:\r\n        inline-block;\r\n\r\n    padding:\r\n        2px 5px;\r\n\r\n    border:\r\n        1px solid\r\n        var(--det-border);\r\n\r\n    border-bottom-width:\r\n        2px;\r\n\r\n    border-radius:\r\n        5px;\r\n\r\n    background:\r\n        var(--det-soft);\r\n\r\n    color:\r\n        var(--det-text);\r\n\r\n    font:\r\n        650 .72rem\/1.2\r\n        var(--det-font);\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Error\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-error {\r\n\r\n    display:\r\n        none;\r\n\r\n    margin-top:\r\n        13px;\r\n\r\n    padding:\r\n        12px 14px;\r\n\r\n    border-left:\r\n        3px solid\r\n        var(--det-danger);\r\n\r\n    border-radius:\r\n        8px;\r\n\r\n    background:\r\n        var(--det-danger-soft);\r\n\r\n    color:\r\n        var(--det-danger);\r\n\r\n    font-size:\r\n        .9rem;\r\n\r\n    font-weight:\r\n        650;\r\n\r\n    line-height:\r\n        1.5;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-error.is-visible {\r\n\r\n    display:\r\n        block;\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Loading\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-loading {\r\n\r\n    display:\r\n        flex;\r\n\r\n    align-items:\r\n        center;\r\n\r\n    gap:\r\n        12px;\r\n\r\n    margin:\r\n        17px 0;\r\n\r\n    padding:\r\n        13px 2px;\r\n\r\n    color:\r\n        var(--det-text);\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-loading[hidden] {\r\n\r\n    display:\r\n        none !important;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-loading > div:last-child {\r\n\r\n    display:\r\n        grid;\r\n\r\n    gap:\r\n        2px;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-loading strong {\r\n\r\n    font-size:\r\n        .92rem;\r\n\r\n    line-height:\r\n        1.4;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-loading span {\r\n\r\n    color:\r\n        var(--det-muted);\r\n\r\n    font-size:\r\n        .84rem;\r\n\r\n    line-height:\r\n        1.45;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-loader-circle {\r\n\r\n    flex:\r\n        0 0 28px;\r\n\r\n    width:\r\n        28px;\r\n\r\n    height:\r\n        28px;\r\n\r\n    border:\r\n        3px solid\r\n        var(--det-border);\r\n\r\n    border-top-color:\r\n        var(--det-accent);\r\n\r\n    border-radius:\r\n        50%;\r\n\r\n    animation:\r\n        determinant-loading-spin\r\n        .8s linear infinite;\r\n\r\n}\r\n\r\n\r\n@keyframes determinant-loading-spin {\r\n\r\n    to {\r\n\r\n        transform:\r\n            rotate(360deg);\r\n\r\n    }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Solution container\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-solution-container {\r\n\r\n    width:\r\n        100%;\r\n\r\n    max-width:\r\n        100%;\r\n\r\n    min-width:\r\n        0;\r\n\r\n    margin-top:\r\n        22px;\r\n\r\n    color:\r\n        var(--det-text);\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-solution-container[hidden] {\r\n\r\n    display:\r\n        none !important;\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Answer card\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-answer-card {\r\n\r\n    width:\r\n        100%;\r\n\r\n    max-width:\r\n        100%;\r\n\r\n    min-width:\r\n        0;\r\n\r\n    padding:\r\n        18px 19px;\r\n\r\n    border:\r\n        1px solid\r\n        var(--det-border);\r\n\r\n    border-radius:\r\n        13px;\r\n\r\n    background:\r\n        #ffffff;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-answer-card__top {\r\n\r\n    display:\r\n        flex;\r\n\r\n    align-items:\r\n        center;\r\n\r\n    justify-content:\r\n        space-between;\r\n\r\n    gap:\r\n        12px;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-answer-card__title {\r\n\r\n    margin:\r\n        0;\r\n\r\n    color:\r\n        var(--det-text);\r\n\r\n    font-size:\r\n        1.05rem;\r\n\r\n    font-weight:\r\n        820;\r\n\r\n    line-height:\r\n        1.35;\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Copy button\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-copy-button {\r\n\r\n    flex:\r\n        0 0 auto;\r\n\r\n    padding:\r\n        7px 9px;\r\n\r\n    border:\r\n        0;\r\n\r\n    border-radius:\r\n        8px;\r\n\r\n    background:\r\n        transparent;\r\n\r\n    color:\r\n        var(--det-accent);\r\n\r\n    font:\r\n        720 .78rem\/1.1\r\n        var(--det-font);\r\n\r\n    cursor:\r\n        pointer;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-copy-button:hover {\r\n\r\n    background:\r\n        var(--det-accent-soft);\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Answer formula\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-answer-card__formula {\r\n\r\n    width:\r\n        100%;\r\n\r\n    max-width:\r\n        100%;\r\n\r\n    min-width:\r\n        0;\r\n\r\n    margin-top:\r\n        9px;\r\n\r\n    padding:\r\n        10px 0;\r\n\r\n    overflow-x:\r\n        auto;\r\n\r\n    overflow-y:\r\n        hidden;\r\n\r\n    -webkit-overflow-scrolling:\r\n        touch;\r\n\r\n    scrollbar-width:\r\n        thin;\r\n\r\n    scrollbar-color:\r\n        var(--det-border-strong)\r\n        transparent;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-answer-card__formula::-webkit-scrollbar {\r\n\r\n    height:\r\n        7px;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-answer-card__formula::-webkit-scrollbar-track {\r\n\r\n    background:\r\n        transparent;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-answer-card__formula::-webkit-scrollbar-thumb {\r\n\r\n    background:\r\n        var(--det-border-strong);\r\n\r\n    border-radius:\r\n        999px;\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Solution toolbar\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-solution-toolbar {\r\n\r\n    display:\r\n        flex;\r\n\r\n    align-items:\r\n        center;\r\n\r\n    justify-content:\r\n        space-between;\r\n\r\n    gap:\r\n        12px;\r\n\r\n    margin:\r\n        26px 0 4px;\r\n\r\n    padding-bottom:\r\n        10px;\r\n\r\n    border-bottom:\r\n        1px solid\r\n        var(--det-border-strong);\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-solution-toolbar h2 {\r\n\r\n    margin:\r\n        0;\r\n\r\n    color:\r\n        var(--det-text);\r\n\r\n    font-size:\r\n        1.18rem;\r\n\r\n    font-weight:\r\n        840;\r\n\r\n    line-height:\r\n        1.35;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-solution-toolbar__actions {\r\n\r\n    display:\r\n        flex;\r\n\r\n    gap:\r\n        6px;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-solution-toolbar button {\r\n\r\n    padding:\r\n        5px 7px;\r\n\r\n    border:\r\n        1px solid\r\n        transparent;\r\n\r\n    border-radius:\r\n        7px;\r\n\r\n    background:\r\n        transparent;\r\n\r\n    color:\r\n        var(--det-accent);\r\n\r\n    font:\r\n        700 .76rem\/1.1\r\n        var(--det-font);\r\n\r\n    cursor:\r\n        pointer;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-solution-toolbar button:hover {\r\n\r\n    background:\r\n        var(--det-accent-soft);\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Steps\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-steps {\r\n\r\n    display:\r\n        grid;\r\n\r\n    width:\r\n        100%;\r\n\r\n    min-width:\r\n        0;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-step {\r\n\r\n    width:\r\n        100%;\r\n\r\n    max-width:\r\n        100%;\r\n\r\n    min-width:\r\n        0;\r\n\r\n    border-bottom:\r\n        1px solid\r\n        var(--det-border);\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-step:last-child {\r\n\r\n    border-bottom:\r\n        0;\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Step summary\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-step__summary {\r\n\r\n    display:\r\n        grid;\r\n\r\n    grid-template-columns:\r\n        auto\r\n        minmax(0, 1fr)\r\n        22px;\r\n\r\n    gap:\r\n        5px;\r\n\r\n    align-items:\r\n        center;\r\n\r\n    padding:\r\n        15px 2px;\r\n\r\n    cursor:\r\n        pointer;\r\n\r\n    list-style:\r\n        none;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-step__summary::-webkit-details-marker {\r\n\r\n    display:\r\n        none;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-step__summary::marker {\r\n\r\n    content:\r\n        \"\";\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-step__number {\r\n\r\n    color:\r\n        var(--det-text);\r\n\r\n    font-size:\r\n        .96rem;\r\n\r\n    font-weight:\r\n        790;\r\n\r\n    line-height:\r\n        1.35;\r\n\r\n    font-variant-numeric:\r\n        tabular-nums;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-step__title {\r\n\r\n    min-width:\r\n        0;\r\n\r\n    color:\r\n        var(--det-text);\r\n\r\n    font-size:\r\n        .96rem;\r\n\r\n    font-weight:\r\n        790;\r\n\r\n    line-height:\r\n        1.35;\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Chevron\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-step__chevron {\r\n\r\n    position:\r\n        relative;\r\n\r\n    width:\r\n        22px;\r\n\r\n    height:\r\n        22px;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-step__chevron::before {\r\n\r\n    content:\r\n        \"\";\r\n\r\n    position:\r\n        absolute;\r\n\r\n    top:\r\n        6px;\r\n\r\n    left:\r\n        7px;\r\n\r\n    width:\r\n        7px;\r\n\r\n    height:\r\n        7px;\r\n\r\n    border-right:\r\n        1.5px solid\r\n        var(--det-muted);\r\n\r\n    border-bottom:\r\n        1.5px solid\r\n        var(--det-muted);\r\n\r\n    transform:\r\n        rotate(45deg);\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-step[open]\r\n.determinant-step__chevron::before {\r\n\r\n    top:\r\n        8px;\r\n\r\n    transform:\r\n        rotate(225deg);\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Step content\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-step__content {\r\n\r\n    width:\r\n        100%;\r\n\r\n    max-width:\r\n        100%;\r\n\r\n    min-width:\r\n        0;\r\n\r\n    padding:\r\n        0 0 18px;\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Formula block\r\n\r\n   Long formulas scroll horizontally.\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-step__formula {\r\n\r\n    display:\r\n        block;\r\n\r\n    width:\r\n        100%;\r\n\r\n    max-width:\r\n        100%;\r\n\r\n    min-width:\r\n        0;\r\n\r\n    margin:\r\n        2px 0 4px;\r\n\r\n    padding:\r\n        12px 0;\r\n\r\n    border:\r\n        0;\r\n\r\n    background:\r\n        #ffffff;\r\n\r\n    overflow-x:\r\n        auto;\r\n\r\n    overflow-y:\r\n        hidden;\r\n\r\n    -webkit-overflow-scrolling:\r\n        touch;\r\n\r\n    scrollbar-width:\r\n        thin;\r\n\r\n    scrollbar-color:\r\n        var(--det-border-strong)\r\n        transparent;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-step__formula::-webkit-scrollbar {\r\n\r\n    height:\r\n        7px;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-step__formula::-webkit-scrollbar-track {\r\n\r\n    background:\r\n        transparent;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-step__formula::-webkit-scrollbar-thumb {\r\n\r\n    background:\r\n        var(--det-border-strong);\r\n\r\n    border-radius:\r\n        999px;\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   MathJax\r\n\r\n   min-width:100% centers short formulas.\r\n   width:max-content keeps long formulas scrollable\r\n   from their left edge.\r\n========================================================= *\/\r\n\r\n#determinant-calculator-app\r\n.determinant-answer-card__formula\r\n.MathJax_Display,\r\n\r\n#determinant-calculator-app\r\n.determinant-step__formula\r\n.MathJax_Display {\r\n\r\n    display:\r\n        block !important;\r\n\r\n    width:\r\n        max-content !important;\r\n\r\n    min-width:\r\n        100% !important;\r\n\r\n    max-width:\r\n        none !important;\r\n\r\n    margin:\r\n        .3em 0 !important;\r\n\r\n    text-align:\r\n        center !important;\r\n\r\n    white-space:\r\n        nowrap !important;\r\n\r\n}\r\n\r\n\r\n#determinant-calculator-app\r\n.determinant-answer-card__formula\r\n.MathJax,\r\n\r\n#determinant-calculator-app\r\n.determinant-step__formula\r\n.MathJax {\r\n\r\n    max-width:\r\n        none !important;\r\n\r\n    white-space:\r\n        nowrap !important;\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Tablet\r\n========================================================= *\/\r\n\r\n@media (max-width: 900px) {\r\n\r\n    #determinant-calculator-app {\r\n\r\n        width:\r\n            calc(100% - 28px);\r\n\r\n    }\r\n\r\n}\r\n\r\n\r\n@media (max-width: 700px) {\r\n\r\n    #determinant-calculator-app\r\n    .determinant-calculator {\r\n\r\n        padding:\r\n            18px;\r\n\r\n    }\r\n\r\n\r\n    #determinant-calculator-app\r\n    .determinant-random-grid {\r\n\r\n        grid-template-columns:\r\n            repeat(\r\n                2,\r\n                minmax(0, 1fr)\r\n            );\r\n\r\n    }\r\n\r\n\r\n    #determinant-calculator-app\r\n    .determinant-random-group:first-child {\r\n\r\n        grid-column:\r\n            1 \/ -1;\r\n\r\n    }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Mobile\r\n========================================================= *\/\r\n\r\n@media (max-width: 520px) {\r\n\r\n    #determinant-calculator-app {\r\n\r\n        width:\r\n            calc(100% - 20px);\r\n\r\n        margin:\r\n            12px auto;\r\n\r\n    }\r\n\r\n\r\n    #determinant-calculator-app\r\n    .determinant-calculator {\r\n\r\n        padding:\r\n            14px;\r\n\r\n        border-radius:\r\n            13px;\r\n\r\n    }\r\n\r\n\r\n    #determinant-calculator-app\r\n    .determinant-field select {\r\n\r\n        width:\r\n            100%;\r\n\r\n    }\r\n\r\n\r\n    #determinant-calculator-app\r\n    .determinant-matrix {\r\n\r\n        border-spacing:\r\n            4px !important;\r\n\r\n    }\r\n\r\n\r\n    #determinant-calculator-app\r\n    .determinant-matrix input {\r\n\r\n        width:\r\n            57px;\r\n\r\n        height:\r\n            40px;\r\n\r\n        padding:\r\n            0 5px;\r\n\r\n        font-size:\r\n            14px;\r\n\r\n    }\r\n\r\n\r\n    #determinant-calculator-app\r\n    .determinant-random-grid {\r\n\r\n        grid-template-columns:\r\n            1fr;\r\n\r\n    }\r\n\r\n\r\n    #determinant-calculator-app\r\n    .determinant-random-group:first-child {\r\n\r\n        grid-column:\r\n            auto;\r\n\r\n    }\r\n\r\n\r\n    #determinant-calculator-app\r\n    .determinant-utility-row {\r\n\r\n        grid-template-columns:\r\n            1fr;\r\n\r\n        gap:\r\n            7px;\r\n\r\n    }\r\n\r\n\r\n    #determinant-calculator-app\r\n    .determinant-text-button {\r\n\r\n        justify-self:\r\n            start;\r\n\r\n    }\r\n\r\n\r\n    #determinant-calculator-app\r\n    .determinant-answer-card {\r\n\r\n        padding:\r\n            15px 13px;\r\n\r\n    }\r\n\r\n\r\n    #determinant-calculator-app\r\n    .determinant-answer-card__top {\r\n\r\n        align-items:\r\n            flex-start;\r\n\r\n        flex-direction:\r\n            column;\r\n\r\n    }\r\n\r\n\r\n    #determinant-calculator-app\r\n    .determinant-copy-button {\r\n\r\n        width:\r\n            100%;\r\n\r\n        text-align:\r\n            left;\r\n\r\n    }\r\n\r\n\r\n    #determinant-calculator-app\r\n    .determinant-solution-toolbar {\r\n\r\n        align-items:\r\n            flex-start;\r\n\r\n        flex-direction:\r\n            column;\r\n\r\n    }\r\n\r\n\r\n    #determinant-calculator-app\r\n    .determinant-solution-toolbar__actions {\r\n\r\n        width:\r\n            100%;\r\n\r\n    }\r\n\r\n\r\n    #determinant-calculator-app\r\n    .determinant-solution-toolbar button {\r\n\r\n        flex:\r\n            1 1 0;\r\n\r\n    }\r\n\r\n\r\n    #determinant-calculator-app\r\n    .determinant-step__summary {\r\n\r\n        grid-template-columns:\r\n            auto\r\n            minmax(0, 1fr)\r\n            20px;\r\n\r\n        gap:\r\n            4px;\r\n\r\n        padding:\r\n            13px 0;\r\n\r\n    }\r\n\r\n\r\n    #determinant-calculator-app\r\n    .determinant-step__number,\r\n\r\n    #determinant-calculator-app\r\n    .determinant-step__title {\r\n\r\n        font-size:\r\n            .91rem;\r\n\r\n    }\r\n\r\n\r\n    #determinant-calculator-app\r\n    .determinant-step__content {\r\n\r\n        padding:\r\n            0 0 15px;\r\n\r\n    }\r\n\r\n\r\n    #determinant-calculator-app\r\n    .determinant-step__formula {\r\n\r\n        padding:\r\n            10px 0;\r\n\r\n        font-size:\r\n            .94rem;\r\n\r\n    }\r\n\r\n}\r\n\r\n\r\n@media (max-width: 380px) {\r\n\r\n    #determinant-calculator-app\r\n    .determinant-matrix input {\r\n\r\n        width:\r\n            52px;\r\n\r\n        height:\r\n            38px;\r\n\r\n    }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   Reduced motion\r\n========================================================= *\/\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n\r\n    #determinant-calculator-app *,\r\n    #determinant-calculator-app *::before,\r\n    #determinant-calculator-app *::after {\r\n\r\n        animation-duration:\r\n            .01ms !important;\r\n\r\n        animation-iteration-count:\r\n            1 !important;\r\n\r\n        transition-duration:\r\n            .01ms !important;\r\n\r\n        scroll-behavior:\r\n            auto !important;\r\n\r\n    }\r\n\r\n}\r\n\r\n<\/style>\r\n\r\n\r\n<!-- =========================================================\r\n     JAVASCRIPT\r\n========================================================= -->\r\n\r\n<script>\r\n\r\n(function () {\r\n\r\n    'use strict';\r\n\r\n\r\n    \/* =====================================================\r\n       App\r\n    ===================================================== *\/\r\n\r\n    const APP =\r\n        document.getElementById(\r\n            'determinant-calculator-app'\r\n        );\r\n\r\n\r\n    if (!APP) {\r\n\r\n        return;\r\n\r\n    }\r\n\r\n\r\n    const AJAX_URL =\r\n        (\r\n            typeof window !== 'undefined'\r\n            &&\r\n            window.ajaxurl\r\n        )\r\n            ? window.ajaxurl\r\n            : '\/wp-admin\/admin-ajax.php';\r\n\r\n\r\n    const AJAX_ACTION =\r\n        'calculate_determinant';\r\n\r\n\r\n    let activeController =\r\n        null;\r\n\r\n\r\n    let lastResultLatex =\r\n        '';\r\n\r\n\r\n    \/* =====================================================\r\n       i18n\r\n    ===================================================== *\/\r\n\r\n    const I18N = {\r\n\r\n        \/* =================================================\r\n           Ukrainian\r\n        ================================================= *\/\r\n\r\n        uk: {\r\n\r\n            matrixSizeLabel:\r\n                '\u0420\u043e\u0437\u043c\u0456\u0440\u043d\u0456\u0441\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0456',\r\n\r\n            matrixSizeAria:\r\n                '\u0420\u043e\u0437\u043c\u0456\u0440\u043d\u0456\u0441\u0442\u044c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u043e\u0457 \u043c\u0430\u0442\u0440\u0438\u0446\u0456',\r\n\r\n            matrixTitle:\r\n                '\u041c\u0430\u0442\u0440\u0438\u0446\u044f A',\r\n\r\n            matrixTableAria:\r\n                '\u041f\u043e\u043b\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044f \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0456\u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u0456',\r\n\r\n            matrixCellAria:\r\n                '\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0442\u0440\u0438\u0446\u0456, \u0440\u044f\u0434\u043e\u043a {row}, \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c {column}',\r\n\r\n            randomSettingsTitle:\r\n                '\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u0432\u0438\u043f\u0430\u0434\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u0443',\r\n\r\n            elementValuesLabel:\r\n                '\u0417\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0456\u0432',\r\n\r\n            fromLabel:\r\n                '\u0412\u0456\u0434',\r\n\r\n            toLabel:\r\n                '\u0414\u043e',\r\n\r\n            randomMinAria:\r\n                '\u041c\u0456\u043d\u0456\u043c\u0430\u043b\u044c\u043d\u0435 \u0432\u0438\u043f\u0430\u0434\u043a\u043e\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f',\r\n\r\n            randomMaxAria:\r\n                '\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0435 \u0432\u0438\u043f\u0430\u0434\u043a\u043e\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f',\r\n\r\n            numberTypeLabel:\r\n                '\u0422\u0438\u043f \u0447\u0438\u0441\u0435\u043b',\r\n\r\n            integersOption:\r\n                '\u0426\u0456\u043b\u0456',\r\n\r\n            decimalsOption:\r\n                '\u0414\u0435\u0441\u044f\u0442\u043a\u043e\u0432\u0456',\r\n\r\n            matrixTypeLabel:\r\n                '\u0422\u0438\u043f \u043c\u0430\u0442\u0440\u0438\u0446\u0456',\r\n\r\n            anyMatrixOption:\r\n                '\u0411\u0443\u0434\u044c-\u044f\u043a\u0430',\r\n\r\n            nonsingularOption:\r\n                '\u041d\u0435\u0432\u0438\u0440\u043e\u0434\u0436\u0435\u043d\u0430',\r\n\r\n            singularOption:\r\n                '\u0412\u0438\u0440\u043e\u0434\u0436\u0435\u043d\u0430',\r\n\r\n            randomButton:\r\n                '\u0412\u0438\u043f\u0430\u0434\u043a\u043e\u0432\u0438\u0439 \u043f\u0440\u0438\u043a\u043b\u0430\u0434',\r\n\r\n            clearButton:\r\n                '\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438',\r\n\r\n            calculateButton:\r\n                '\u041e\u0431\u0447\u0438\u0441\u043b\u0438\u0442\u0438 \u0432\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a',\r\n\r\n            calculatingButton:\r\n                '\u041e\u0431\u0447\u0438\u0441\u043b\u044e\u0454\u043c\u043e \u0432\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a\u2026',\r\n\r\n            shortcutLabel:\r\n                '\u0428\u0432\u0438\u0434\u043a\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a:',\r\n\r\n            loadingTitle:\r\n                '\u041e\u0431\u0447\u0438\u0441\u043b\u044e\u0454\u043c\u043e \u0432\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a',\r\n\r\n            loadingText:\r\n                '\u0412\u0438\u043a\u043e\u043d\u0443\u0454\u043c\u043e \u043d\u0435\u043e\u0431\u0445\u0456\u0434\u043d\u0456 \u043f\u0435\u0440\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0456.',\r\n\r\n            answerTitle:\r\n                '\u0412\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u044c',\r\n\r\n            copyLatex:\r\n                '\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438 LaTeX',\r\n\r\n            copied:\r\n                '\u0421\u043a\u043e\u043f\u0456\u0439\u043e\u0432\u0430\u043d\u043e',\r\n\r\n            solutionTitle:\r\n                '\u0420\u043e\u0437\u0432\u2019\u044f\u0437\u0430\u043d\u043d\u044f',\r\n\r\n            expandAll:\r\n                '\u0420\u043e\u0437\u0433\u043e\u0440\u043d\u0443\u0442\u0438 \u0432\u0441\u0456',\r\n\r\n            collapseAll:\r\n                '\u0417\u0433\u043e\u0440\u043d\u0443\u0442\u0438 \u0432\u0441\u0456',\r\n\r\n            step:\r\n                '\u041a\u0440\u043e\u043a',\r\n\r\n            errorGeneric:\r\n                '\u0421\u0442\u0430\u043b\u0430\u0441\u044f \u043f\u043e\u043c\u0438\u043b\u043a\u0430.',\r\n\r\n            errorRange:\r\n                '\u0412\u043a\u0430\u0436\u0456\u0442\u044c \u043a\u043e\u0440\u0435\u043a\u0442\u043d\u0438\u0439 \u0434\u0456\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u044c.',\r\n\r\n            errorRangeOrder:\r\n                '\u041c\u0456\u043d\u0456\u043c\u0430\u043b\u044c\u043d\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u043d\u0435 \u043c\u043e\u0436\u0435 \u0431\u0443\u0442\u0438 \u0431\u0456\u043b\u044c\u0448\u0438\u043c \u0437\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0435.',\r\n\r\n            errorNoIntegers:\r\n                '\u0423 \u0437\u0430\u0434\u0430\u043d\u043e\u043c\u0443 \u0434\u0456\u0430\u043f\u0430\u0437\u043e\u043d\u0456 \u043d\u0435\u043c\u0430\u0454 \u0446\u0456\u043b\u0438\u0445 \u0447\u0438\u0441\u0435\u043b.',\r\n\r\n            errorNoDecimals:\r\n                '\u0423 \u0437\u0430\u0434\u0430\u043d\u043e\u043c\u0443 \u0434\u0456\u0430\u043f\u0430\u0437\u043e\u043d\u0456 \u043d\u0435\u043c\u0430\u0454 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u0438\u0445 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432\u0438\u0445 \u0447\u0438\u0441\u0435\u043b.',\r\n\r\n            errorNonsingular:\r\n                '\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0441\u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u043d\u0435\u0432\u0438\u0440\u043e\u0434\u0436\u0435\u043d\u0443 \u043c\u0430\u0442\u0440\u0438\u0446\u044e \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0456\u0432. \u0417\u0431\u0456\u043b\u044c\u0448\u0442\u0435 \u0434\u0456\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u044c.',\r\n\r\n            errorMatrix:\r\n                '\u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u0432\u0432\u0435\u0434\u0456\u0442\u044c \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u0456.',\r\n\r\n            errorInvalidFields:\r\n                '\u041f\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u0443 \u0432\u0438\u0434\u0456\u043b\u0435\u043d\u0438\u0445 \u043f\u043e\u043b\u044f\u0445.',\r\n\r\n            errorServerResponse:\r\n                '\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u043e\u0442\u0440\u0438\u043c\u0430\u0442\u0438 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u0430.',\r\n\r\n            errorCalculate:\r\n                '\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u043e\u0431\u0447\u0438\u0441\u043b\u0438\u0442\u0438 \u0432\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a \u043c\u0430\u0442\u0440\u0438\u0446\u0456.',\r\n\r\n            errorNoPayload:\r\n                '\u0421\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043f\u043e\u0432\u0435\u0440\u043d\u0443\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0431\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044f.',\r\n\r\n            errorNetwork:\r\n                '\u0421\u0442\u0430\u043b\u0430\u0441\u044f \u043f\u043e\u043c\u0438\u043b\u043a\u0430 \u043f\u0456\u0434 \u0447\u0430\u0441 \u043e\u0431\u043c\u0456\u043d\u0443 \u0434\u0430\u043d\u0438\u043c\u0438 \u0456\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c.'\r\n\r\n        },\r\n\r\n\r\n        \/* =================================================\r\n           English\r\n        ================================================= *\/\r\n\r\n        en: {\r\n\r\n            matrixSizeLabel:\r\n                'Matrix Size',\r\n\r\n            matrixSizeAria:\r\n                'Size of the square matrix',\r\n\r\n            matrixTitle:\r\n                'Matrix A',\r\n\r\n            matrixTableAria:\r\n                'Matrix element input grid',\r\n\r\n            matrixCellAria:\r\n                'Matrix element, row {row}, column {column}',\r\n\r\n            randomSettingsTitle:\r\n                'Random Example Settings',\r\n\r\n            elementValuesLabel:\r\n                'Element Values',\r\n\r\n            fromLabel:\r\n                'From',\r\n\r\n            toLabel:\r\n                'To',\r\n\r\n            randomMinAria:\r\n                'Minimum random value',\r\n\r\n            randomMaxAria:\r\n                'Maximum random value',\r\n\r\n            numberTypeLabel:\r\n                'Number Type',\r\n\r\n            integersOption:\r\n                'Integers',\r\n\r\n            decimalsOption:\r\n                'Decimals',\r\n\r\n            matrixTypeLabel:\r\n                'Matrix Type',\r\n\r\n            anyMatrixOption:\r\n                'Any',\r\n\r\n            nonsingularOption:\r\n                'Nonsingular',\r\n\r\n            singularOption:\r\n                'Singular',\r\n\r\n            randomButton:\r\n                'Random Example',\r\n\r\n            clearButton:\r\n                'Clear',\r\n\r\n            calculateButton:\r\n                'Calculate Determinant',\r\n\r\n            calculatingButton:\r\n                'Calculating Determinant\u2026',\r\n\r\n            shortcutLabel:\r\n                'Keyboard shortcut:',\r\n\r\n            loadingTitle:\r\n                'Calculating the Determinant',\r\n\r\n            loadingText:\r\n                'Performing the required matrix transformations.',\r\n\r\n            answerTitle:\r\n                'Answer',\r\n\r\n            copyLatex:\r\n                'Copy LaTeX',\r\n\r\n            copied:\r\n                'Copied',\r\n\r\n            solutionTitle:\r\n                'Solution',\r\n\r\n            expandAll:\r\n                'Expand All',\r\n\r\n            collapseAll:\r\n                'Collapse All',\r\n\r\n            step:\r\n                'Step',\r\n\r\n            errorGeneric:\r\n                'An error occurred.',\r\n\r\n            errorRange:\r\n                'Enter a valid range of values.',\r\n\r\n            errorRangeOrder:\r\n                'The minimum value cannot be greater than the maximum value.',\r\n\r\n            errorNoIntegers:\r\n                'The specified range contains no integers.',\r\n\r\n            errorNoDecimals:\r\n                'The specified range contains no valid decimal values.',\r\n\r\n            errorNonsingular:\r\n                'Unable to generate a nonsingular matrix with the selected settings. Increase the range of values.',\r\n\r\n            errorMatrix:\r\n                'Please enter the matrix elements.',\r\n\r\n            errorInvalidFields:\r\n                'Check the values in the highlighted fields.',\r\n\r\n            errorServerResponse:\r\n                'Unable to get a response from the server.',\r\n\r\n            errorCalculate:\r\n                'Unable to calculate the determinant of the matrix.',\r\n\r\n            errorNoPayload:\r\n                'The server did not return a calculation result.',\r\n\r\n            errorNetwork:\r\n                'A network error occurred while communicating with the server.'\r\n\r\n        },\r\n\r\n\r\n        \/* =================================================\r\n           Russian\r\n        ================================================= *\/\r\n\r\n        ru: {\r\n\r\n            matrixSizeLabel:\r\n                '\u0420\u0430\u0437\u043c\u0435\u0440 \u043c\u0430\u0442\u0440\u0438\u0446\u044b',\r\n\r\n            matrixSizeAria:\r\n                '\u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u044b',\r\n\r\n            matrixTitle:\r\n                '\u041c\u0430\u0442\u0440\u0438\u0446\u0430 A',\r\n\r\n            matrixTableAria:\r\n                '\u041f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u044b',\r\n\r\n            matrixCellAria:\r\n                '\u042d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0442\u0440\u0438\u0446\u044b, \u0441\u0442\u0440\u043e\u043a\u0430 {row}, \u0441\u0442\u043e\u043b\u0431\u0435\u0446 {column}',\r\n\r\n            randomSettingsTitle:\r\n                '\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430',\r\n\r\n            elementValuesLabel:\r\n                '\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432',\r\n\r\n            fromLabel:\r\n                '\u041e\u0442',\r\n\r\n            toLabel:\r\n                '\u0414\u043e',\r\n\r\n            randomMinAria:\r\n                '\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435',\r\n\r\n            randomMaxAria:\r\n                '\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435',\r\n\r\n            numberTypeLabel:\r\n                '\u0422\u0438\u043f \u0447\u0438\u0441\u0435\u043b',\r\n\r\n            integersOption:\r\n                '\u0426\u0435\u043b\u044b\u0435',\r\n\r\n            decimalsOption:\r\n                '\u0414\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0435',\r\n\r\n            matrixTypeLabel:\r\n                '\u0422\u0438\u043f \u043c\u0430\u0442\u0440\u0438\u0446\u044b',\r\n\r\n            anyMatrixOption:\r\n                '\u041b\u044e\u0431\u0430\u044f',\r\n\r\n            nonsingularOption:\r\n                '\u041d\u0435\u0432\u044b\u0440\u043e\u0436\u0434\u0435\u043d\u043d\u0430\u044f',\r\n\r\n            singularOption:\r\n                '\u0412\u044b\u0440\u043e\u0436\u0434\u0435\u043d\u043d\u0430\u044f',\r\n\r\n            randomButton:\r\n                '\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440',\r\n\r\n            clearButton:\r\n                '\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c',\r\n\r\n            calculateButton:\r\n                '\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c',\r\n\r\n            calculatingButton:\r\n                '\u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c\u2026',\r\n\r\n            shortcutLabel:\r\n                '\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a:',\r\n\r\n            loadingTitle:\r\n                '\u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c',\r\n\r\n            loadingText:\r\n                '\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u044b.',\r\n\r\n            answerTitle:\r\n                '\u041e\u0442\u0432\u0435\u0442',\r\n\r\n            copyLatex:\r\n                '\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c LaTeX',\r\n\r\n            copied:\r\n                '\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043e',\r\n\r\n            solutionTitle:\r\n                '\u0420\u0435\u0448\u0435\u043d\u0438\u0435',\r\n\r\n            expandAll:\r\n                '\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0435',\r\n\r\n            collapseAll:\r\n                '\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0435',\r\n\r\n            step:\r\n                '\u0428\u0430\u0433',\r\n\r\n            errorGeneric:\r\n                '\u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430.',\r\n\r\n            errorRange:\r\n                '\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.',\r\n\r\n            errorRangeOrder:\r\n                '\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e.',\r\n\r\n            errorNoIntegers:\r\n                '\u0412 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043d\u0435\u0442 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b.',\r\n\r\n            errorNoDecimals:\r\n                '\u0412 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043d\u0435\u0442 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b.',\r\n\r\n            errorNonsingular:\r\n                '\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u0432\u044b\u0440\u043e\u0436\u0434\u0435\u043d\u043d\u0443\u044e \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438. \u0423\u0432\u0435\u043b\u0438\u0447\u044c\u0442\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.',\r\n\r\n            errorMatrix:\r\n                '\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043c\u0430\u0442\u0440\u0438\u0446\u044b.',\r\n\r\n            errorInvalidFields:\r\n                '\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044f\u0445.',\r\n\r\n            errorServerResponse:\r\n                '\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.',\r\n\r\n            errorCalculate:\r\n                '\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u044b.',\r\n\r\n            errorNoPayload:\r\n                '\u0421\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u0432\u0435\u0440\u043d\u0443\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f.',\r\n\r\n            errorNetwork:\r\n                '\u041f\u0440\u0438 \u043e\u0431\u043c\u0435\u043d\u0435 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430.'\r\n\r\n        }\r\n\r\n    };\r\n\r\n\r\n    \/* =====================================================\r\n       Language normalization\r\n    ===================================================== *\/\r\n\r\n    function normalizeLanguage(value) {\r\n\r\n        const raw =\r\n            String(\r\n                value || ''\r\n            )\r\n            .trim()\r\n            .toLowerCase()\r\n            .replace(\r\n                '_',\r\n                '-'\r\n            );\r\n\r\n\r\n        if (\r\n            raw === 'ua'\r\n            ||\r\n            raw.startsWith('uk')\r\n        ) {\r\n\r\n            return 'uk';\r\n\r\n        }\r\n\r\n\r\n        if (\r\n            raw.startsWith('en')\r\n        ) {\r\n\r\n            return 'en';\r\n\r\n        }\r\n\r\n\r\n        if (\r\n            raw.startsWith('ru')\r\n        ) {\r\n\r\n            return 'ru';\r\n\r\n        }\r\n\r\n\r\n        return '';\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Language detection\r\n    ===================================================== *\/\r\n\r\n    function detectLanguage() {\r\n\r\n        \/*\r\n         * 1. Explicit JavaScript variable.\r\n         *\r\n         * Example:\r\n         *\r\n         * window.MathrosDetLang = 'en';\r\n         *\/\r\n        const fromWindow =\r\n            normalizeLanguage(\r\n                window.MathrosDetLang\r\n            );\r\n\r\n\r\n        if (fromWindow) {\r\n\r\n            return fromWindow;\r\n\r\n        }\r\n\r\n\r\n        \/*\r\n         * 2. data-lang.\r\n         *\/\r\n        const dataLang =\r\n            normalizeLanguage(\r\n                APP.getAttribute(\r\n                    'data-lang'\r\n                )\r\n            );\r\n\r\n\r\n        if (dataLang) {\r\n\r\n            return dataLang;\r\n\r\n        }\r\n\r\n\r\n        \/*\r\n         * 3. HTML lang.\r\n         *\/\r\n        const htmlLang =\r\n            normalizeLanguage(\r\n                document.documentElement\r\n                    .getAttribute(\r\n                        'lang'\r\n                    )\r\n            );\r\n\r\n\r\n        if (htmlLang) {\r\n\r\n            return htmlLang;\r\n\r\n        }\r\n\r\n\r\n        \/*\r\n         * 4. First URL segment.\r\n         *\r\n         * \/uk\/...\r\n         * \/en\/...\r\n         * \/ru\/...\r\n         *\/\r\n        const firstPathSegment =\r\n            String(\r\n                window.location.pathname\r\n                ||\r\n                ''\r\n            )\r\n            .split('\/')\r\n            .filter(Boolean)[0]\r\n            ||\r\n            '';\r\n\r\n\r\n        const pathLang =\r\n            normalizeLanguage(\r\n                firstPathSegment\r\n            );\r\n\r\n\r\n        \/*\r\n         * 5. Ukrainian fallback.\r\n         *\/\r\n        return pathLang || 'uk';\r\n\r\n    }\r\n\r\n\r\n    const LANG =\r\n        detectLanguage();\r\n\r\n\r\n    const T =\r\n        I18N[LANG]\r\n        ||\r\n        I18N.uk;\r\n\r\n\r\n    \/* =====================================================\r\n       Apply static translations\r\n    ===================================================== *\/\r\n\r\n    function applyTranslations() {\r\n\r\n        APP\r\n            .querySelectorAll(\r\n                '[data-i18n]'\r\n            )\r\n            .forEach(\r\n                function (element) {\r\n\r\n                    const key =\r\n                        element.getAttribute(\r\n                            'data-i18n'\r\n                        );\r\n\r\n\r\n                    if (\r\n                        key\r\n                        &&\r\n                        Object.prototype\r\n                            .hasOwnProperty\r\n                            .call(\r\n                                T,\r\n                                key\r\n                            )\r\n                    ) {\r\n\r\n                        element.textContent =\r\n                            T[key];\r\n\r\n                    }\r\n\r\n                }\r\n            );\r\n\r\n\r\n        APP\r\n            .querySelectorAll(\r\n                '[data-i18n-aria]'\r\n            )\r\n            .forEach(\r\n                function (element) {\r\n\r\n                    const key =\r\n                        element.getAttribute(\r\n                            'data-i18n-aria'\r\n                        );\r\n\r\n\r\n                    if (\r\n                        key\r\n                        &&\r\n                        Object.prototype\r\n                            .hasOwnProperty\r\n                            .call(\r\n                                T,\r\n                                key\r\n                            )\r\n                    ) {\r\n\r\n                        element.setAttribute(\r\n                            'aria-label',\r\n                            T[key]\r\n                        );\r\n\r\n                    }\r\n\r\n                }\r\n            );\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Helpers\r\n    ===================================================== *\/\r\n\r\n    function byId(id) {\r\n\r\n        return document.getElementById(\r\n            id\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function escapeHtml(value) {\r\n\r\n        return String(\r\n            value ?? ''\r\n        )\r\n        .replace(\r\n            \/[&<>\"']\/g,\r\n            function (character) {\r\n\r\n                const map = {\r\n\r\n                    '&':\r\n                        '&amp;',\r\n\r\n                    '<':\r\n                        '&lt;',\r\n\r\n                    '>':\r\n                        '&gt;',\r\n\r\n                    '\"':\r\n                        '&quot;',\r\n\r\n                    \"'\":\r\n                        '&#39;'\r\n\r\n                };\r\n\r\n\r\n                return map[\r\n                    character\r\n                ];\r\n\r\n            }\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function formatTemplate(\r\n        template,\r\n        values\r\n    ) {\r\n\r\n        let result =\r\n            String(\r\n                template || ''\r\n            );\r\n\r\n\r\n        Object.keys(\r\n            values || {}\r\n        )\r\n        .forEach(\r\n            function (key) {\r\n\r\n                result =\r\n                    result.replace(\r\n                        new RegExp(\r\n                            '\\\\{'\r\n                            +\r\n                            key\r\n                            +\r\n                            '\\\\}',\r\n                            'g'\r\n                        ),\r\n                        String(\r\n                            values[key]\r\n                        )\r\n                    );\r\n\r\n            }\r\n        );\r\n\r\n\r\n        return result;\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Number \u2192 LaTeX\r\n    ===================================================== *\/\r\n\r\n    function numberToLatex(value) {\r\n\r\n        const number =\r\n            Number(value);\r\n\r\n\r\n        if (\r\n            !Number.isFinite(\r\n                number\r\n            )\r\n        ) {\r\n\r\n            return '0';\r\n\r\n        }\r\n\r\n\r\n        if (\r\n            Object.is(\r\n                number,\r\n                -0\r\n            )\r\n            ||\r\n            Math.abs(number)\r\n            <\r\n            1e-12\r\n        ) {\r\n\r\n            return '0';\r\n\r\n        }\r\n\r\n\r\n        const string =\r\n            String(number);\r\n\r\n\r\n        if (\r\n            \/e\/i.test(string)\r\n        ) {\r\n\r\n            const parts =\r\n                string\r\n                    .toLowerCase()\r\n                    .split('e');\r\n\r\n\r\n            const mantissa =\r\n                parts[0];\r\n\r\n\r\n            const exponent =\r\n                Number(\r\n                    parts[1]\r\n                );\r\n\r\n\r\n            return (\r\n                mantissa\r\n                +\r\n                '\\\\cdot 10^{'\r\n                +\r\n                exponent\r\n                +\r\n                '}'\r\n            );\r\n\r\n        }\r\n\r\n\r\n        return string;\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Result number \u2192 LaTeX\r\n    ===================================================== *\/\r\n\r\n    function formatDeterminantValue(\r\n        value\r\n    ) {\r\n\r\n        const number =\r\n            Number(value);\r\n\r\n\r\n        if (\r\n            !Number.isFinite(\r\n                number\r\n            )\r\n        ) {\r\n\r\n            return String(\r\n                value ?? ''\r\n            );\r\n\r\n        }\r\n\r\n\r\n        if (\r\n            Math.abs(number)\r\n            <\r\n            1e-12\r\n        ) {\r\n\r\n            return '0';\r\n\r\n        }\r\n\r\n\r\n        const absolute =\r\n            Math.abs(number);\r\n\r\n\r\n        if (\r\n            absolute >= 1e12\r\n            ||\r\n            absolute < 1e-8\r\n        ) {\r\n\r\n            const scientific =\r\n                number.toExponential(\r\n                    8\r\n                );\r\n\r\n\r\n            const parts =\r\n                scientific\r\n                    .toLowerCase()\r\n                    .split('e');\r\n\r\n\r\n            let mantissa =\r\n                parts[0];\r\n\r\n\r\n            mantissa =\r\n                mantissa\r\n                    .replace(\r\n                        \/0+$\/,\r\n                        ''\r\n                    )\r\n                    .replace(\r\n                        \/\\.$\/,\r\n                        ''\r\n                    );\r\n\r\n\r\n            const exponent =\r\n                Number(\r\n                    parts[1]\r\n                );\r\n\r\n\r\n            return (\r\n                mantissa\r\n                +\r\n                '\\\\cdot 10^{'\r\n                +\r\n                exponent\r\n                +\r\n                '}'\r\n            );\r\n\r\n        }\r\n\r\n\r\n        const rounded =\r\n            Math.round(\r\n                number\r\n                *\r\n                100000000\r\n            )\r\n            \/\r\n            100000000;\r\n\r\n\r\n        return String(\r\n            rounded\r\n        );\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Matrix \u2192 LaTeX determinant\r\n    ===================================================== *\/\r\n\r\n    function matrixToLatex(\r\n        matrix\r\n    ) {\r\n\r\n        if (\r\n            !Array.isArray(\r\n                matrix\r\n            )\r\n            ||\r\n            matrix.length === 0\r\n        ) {\r\n\r\n            return '';\r\n\r\n        }\r\n\r\n\r\n        const rows =\r\n            matrix.map(\r\n                function (row) {\r\n\r\n                    return row\r\n                        .map(\r\n                            function (value) {\r\n\r\n                                return numberToLatex(\r\n                                    value\r\n                                );\r\n\r\n                            }\r\n                        )\r\n                        .join(\r\n                            ' & '\r\n                        );\r\n\r\n                }\r\n            )\r\n            .join(\r\n                ' \\\\\\\\ '\r\n            );\r\n\r\n\r\n        return (\r\n            '\\\\begin{vmatrix}'\r\n            +\r\n            rows\r\n            +\r\n            '\\\\end{vmatrix}'\r\n        );\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       MathJax v2 \/ v3\r\n    ===================================================== *\/\r\n\r\n    function renderMathJax(\r\n        element,\r\n        tries\r\n    ) {\r\n\r\n        tries =\r\n            typeof tries ===\r\n            'number'\r\n                ? tries\r\n                : 24;\r\n\r\n\r\n        if (!element) {\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        \/*\r\n         * MathJax v3.\r\n         *\/\r\n        if (\r\n            window.MathJax\r\n            &&\r\n            typeof window.MathJax\r\n                .typesetPromise\r\n                ===\r\n                'function'\r\n        ) {\r\n\r\n            window.MathJax\r\n                .typesetPromise(\r\n                    [element]\r\n                )\r\n                .catch(\r\n                    function () {}\r\n                );\r\n\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        \/*\r\n         * MathJax v2.\r\n         *\/\r\n        if (\r\n            window.MathJax\r\n            &&\r\n            window.MathJax.Hub\r\n            &&\r\n            window.MathJax.Hub.Queue\r\n        ) {\r\n\r\n            window.MathJax.Hub.Queue(\r\n                [\r\n                    'Typeset',\r\n                    window.MathJax.Hub,\r\n                    element\r\n                ]\r\n            );\r\n\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        if (\r\n            tries > 0\r\n        ) {\r\n\r\n            setTimeout(\r\n                function () {\r\n\r\n                    renderMathJax(\r\n                        element,\r\n                        tries - 1\r\n                    );\r\n\r\n                },\r\n                150\r\n            );\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Error\r\n    ===================================================== *\/\r\n\r\n    function showError(message) {\r\n\r\n        const element =\r\n            byId(\r\n                'determinant-error'\r\n            );\r\n\r\n\r\n        if (!element) {\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        element.textContent =\r\n            message\r\n            ||\r\n            T.errorGeneric;\r\n\r\n\r\n        element.classList.add(\r\n            'is-visible'\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function clearError() {\r\n\r\n        const element =\r\n            byId(\r\n                'determinant-error'\r\n            );\r\n\r\n\r\n        if (!element) {\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        element.textContent =\r\n            '';\r\n\r\n\r\n        element.classList.remove(\r\n            'is-visible'\r\n        );\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Loading\r\n    ===================================================== *\/\r\n\r\n    function setLoading(value) {\r\n\r\n        const loader =\r\n            byId(\r\n                'determinant-loading'\r\n            );\r\n\r\n\r\n        const button =\r\n            byId(\r\n                'determinant-generate-button'\r\n            );\r\n\r\n\r\n        if (loader) {\r\n\r\n            loader.hidden =\r\n                !value;\r\n\r\n        }\r\n\r\n\r\n        if (button) {\r\n\r\n            button.disabled =\r\n                Boolean(value);\r\n\r\n\r\n            button.textContent =\r\n                value\r\n                    ? T.calculatingButton\r\n                    : T.calculateButton;\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Clear result\r\n    ===================================================== *\/\r\n\r\n    function clearResult() {\r\n\r\n        const container =\r\n            byId(\r\n                'determinant-solution-container'\r\n            );\r\n\r\n\r\n        if (!container) {\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        container.innerHTML =\r\n            '';\r\n\r\n\r\n        container.hidden =\r\n            true;\r\n\r\n\r\n        lastResultLatex =\r\n            '';\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Number input normalization\r\n    ===================================================== *\/\r\n\r\n    function normalizeNumberInput(value) {\r\n\r\n        let stringValue =\r\n            String(\r\n                value ?? ''\r\n            )\r\n            .trim();\r\n\r\n\r\n        if (!stringValue) {\r\n\r\n            return '';\r\n\r\n        }\r\n\r\n\r\n        stringValue =\r\n            stringValue\r\n                .replace(\r\n                    \/\\s+\/g,\r\n                    ''\r\n                )\r\n                .replace(\r\n                    ',',\r\n                    '.'\r\n                );\r\n\r\n\r\n        stringValue =\r\n            stringValue.replace(\r\n                \/[^0-9.\\-]\/g,\r\n                ''\r\n            );\r\n\r\n\r\n        \/*\r\n         * Only one minus sign,\r\n         * and only at the beginning.\r\n         *\/\r\n        stringValue =\r\n            stringValue.replace(\r\n                \/(?!^)-\/g,\r\n                ''\r\n            );\r\n\r\n\r\n        \/*\r\n         * Only one decimal point.\r\n         *\/\r\n        const parts =\r\n            stringValue.split('.');\r\n\r\n\r\n        if (\r\n            parts.length > 2\r\n        ) {\r\n\r\n            stringValue =\r\n                parts[0]\r\n                +\r\n                '.'\r\n                +\r\n                parts\r\n                    .slice(1)\r\n                    .join('');\r\n\r\n        }\r\n\r\n\r\n        return stringValue;\r\n\r\n    }\r\n\r\n\r\n    function parseNumberSafe(value) {\r\n\r\n        const normalized =\r\n            normalizeNumberInput(\r\n                value\r\n            );\r\n\r\n\r\n        \/*\r\n         * Empty field = 0.\r\n         *\/\r\n        if (\r\n            normalized === ''\r\n        ) {\r\n\r\n            return 0;\r\n\r\n        }\r\n\r\n\r\n        if (\r\n            normalized === '-'\r\n            ||\r\n            normalized === '.'\r\n            ||\r\n            normalized === '-.'\r\n        ) {\r\n\r\n            return null;\r\n\r\n        }\r\n\r\n\r\n        const number =\r\n            Number(normalized);\r\n\r\n\r\n        return Number.isFinite(\r\n            number\r\n        )\r\n            ? number\r\n            : null;\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Matrix error styles\r\n    ===================================================== *\/\r\n\r\n    function clearMatrixErrors() {\r\n\r\n        const table =\r\n            byId(\r\n                'matrixTable'\r\n            );\r\n\r\n\r\n        if (!table) {\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        table\r\n            .querySelectorAll(\r\n                '.determinant-input-error'\r\n            )\r\n            .forEach(\r\n                function (input) {\r\n\r\n                    input.classList.remove(\r\n                        'determinant-input-error'\r\n                    );\r\n\r\n                }\r\n            );\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Build matrix\r\n    ===================================================== *\/\r\n\r\n    function changeMatrixSize() {\r\n\r\n        const select =\r\n            byId(\r\n                'matrixSize'\r\n            );\r\n\r\n\r\n        const size =\r\n            Number(\r\n                select\r\n                    ? select.value\r\n                    : 3\r\n            )\r\n            ||\r\n            3;\r\n\r\n\r\n        const table =\r\n            byId(\r\n                'matrixTable'\r\n            );\r\n\r\n\r\n        if (!table) {\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        clearError();\r\n\r\n        clearResult();\r\n\r\n        clearMatrixErrors();\r\n\r\n\r\n        table.innerHTML =\r\n            '';\r\n\r\n\r\n        for (\r\n            let rowIndex = 0;\r\n            rowIndex < size;\r\n            rowIndex++\r\n        ) {\r\n\r\n            const row =\r\n                document.createElement(\r\n                    'tr'\r\n                );\r\n\r\n\r\n            for (\r\n                let columnIndex = 0;\r\n                columnIndex < size;\r\n                columnIndex++\r\n            ) {\r\n\r\n                const cell =\r\n                    document.createElement(\r\n                        'td'\r\n                    );\r\n\r\n\r\n                const input =\r\n                    document.createElement(\r\n                        'input'\r\n                    );\r\n\r\n\r\n                input.type =\r\n                    'text';\r\n\r\n\r\n                input.inputMode =\r\n                    'decimal';\r\n\r\n\r\n                input.autocomplete =\r\n                    'off';\r\n\r\n\r\n                input.spellcheck =\r\n                    false;\r\n\r\n\r\n                input.placeholder =\r\n                    '0';\r\n\r\n\r\n                input.name =\r\n                    'A['\r\n                    +\r\n                    rowIndex\r\n                    +\r\n                    ']['\r\n                    +\r\n                    columnIndex\r\n                    +\r\n                    ']';\r\n\r\n\r\n                input.setAttribute(\r\n                    'aria-label',\r\n                    formatTemplate(\r\n                        T.matrixCellAria,\r\n                        {\r\n\r\n                            row:\r\n                                rowIndex + 1,\r\n\r\n                            column:\r\n                                columnIndex + 1\r\n\r\n                        }\r\n                    )\r\n                );\r\n\r\n\r\n                input.addEventListener(\r\n                    'input',\r\n                    function () {\r\n\r\n                        const normalized =\r\n                            normalizeNumberInput(\r\n                                input.value\r\n                            );\r\n\r\n\r\n                        if (\r\n                            input.value\r\n                            !==\r\n                            normalized\r\n                        ) {\r\n\r\n                            input.value =\r\n                                normalized;\r\n\r\n                        }\r\n\r\n\r\n                        input.classList.remove(\r\n                            'determinant-input-error'\r\n                        );\r\n\r\n\r\n                        clearError();\r\n\r\n                        clearResult();\r\n\r\n                    }\r\n                );\r\n\r\n\r\n                cell.appendChild(\r\n                    input\r\n                );\r\n\r\n\r\n                row.appendChild(\r\n                    cell\r\n                );\r\n\r\n            }\r\n\r\n\r\n            table.appendChild(\r\n                row\r\n            );\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Clear matrix\r\n    ===================================================== *\/\r\n\r\n    function clearMatrix() {\r\n\r\n        const table =\r\n            byId(\r\n                'matrixTable'\r\n            );\r\n\r\n\r\n        if (!table) {\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        table\r\n            .querySelectorAll(\r\n                'input'\r\n            )\r\n            .forEach(\r\n                function (input) {\r\n\r\n                    input.value =\r\n                        '';\r\n\r\n\r\n                    input.classList.remove(\r\n                        'determinant-input-error'\r\n                    );\r\n\r\n                }\r\n            );\r\n\r\n\r\n        clearError();\r\n\r\n        clearResult();\r\n\r\n\r\n        const firstInput =\r\n            table.querySelector(\r\n                'input'\r\n            );\r\n\r\n\r\n        if (firstInput) {\r\n\r\n            firstInput.focus();\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Collect matrix\r\n    ===================================================== *\/\r\n\r\n    function collectMatrix() {\r\n\r\n        const table =\r\n            byId(\r\n                'matrixTable'\r\n            );\r\n\r\n\r\n        if (!table) {\r\n\r\n            return {\r\n\r\n                matrix: [],\r\n\r\n                invalidCount: 0\r\n\r\n            };\r\n\r\n        }\r\n\r\n\r\n        const matrix =\r\n            [];\r\n\r\n\r\n        let invalidCount =\r\n            0;\r\n\r\n\r\n        for (\r\n            let rowIndex = 0;\r\n            rowIndex < table.rows.length;\r\n            rowIndex++\r\n        ) {\r\n\r\n            const row =\r\n                table.rows[\r\n                    rowIndex\r\n                ];\r\n\r\n\r\n            const rowValues =\r\n                [];\r\n\r\n\r\n            for (\r\n                let columnIndex = 0;\r\n                columnIndex < row.cells.length;\r\n                columnIndex++\r\n            ) {\r\n\r\n                const input =\r\n                    row.cells[\r\n                        columnIndex\r\n                    ]\r\n                    .querySelector(\r\n                        'input'\r\n                    );\r\n\r\n\r\n                const parsed =\r\n                    parseNumberSafe(\r\n                        input\r\n                            ? input.value\r\n                            : ''\r\n                    );\r\n\r\n\r\n                if (\r\n                    parsed === null\r\n                ) {\r\n\r\n                    invalidCount++;\r\n\r\n\r\n                    if (input) {\r\n\r\n                        input.classList.add(\r\n                            'determinant-input-error'\r\n                        );\r\n\r\n                    }\r\n\r\n\r\n                    rowValues.push(\r\n                        0\r\n                    );\r\n\r\n                }\r\n\r\n                else {\r\n\r\n                    rowValues.push(\r\n                        parsed\r\n                    );\r\n\r\n                }\r\n\r\n            }\r\n\r\n\r\n            matrix.push(\r\n                rowValues\r\n            );\r\n\r\n        }\r\n\r\n\r\n        return {\r\n\r\n            matrix,\r\n\r\n            invalidCount\r\n\r\n        };\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Random values\r\n    ===================================================== *\/\r\n\r\n    function randomInteger(\r\n        min,\r\n        max\r\n    ) {\r\n\r\n        return (\r\n            Math.floor(\r\n                Math.random()\r\n                *\r\n                (max - min + 1)\r\n            )\r\n            +\r\n            min\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function randomDecimal(\r\n        min,\r\n        max\r\n    ) {\r\n\r\n        const minScaled =\r\n            Math.ceil(\r\n                min * 10\r\n            );\r\n\r\n\r\n        const maxScaled =\r\n            Math.floor(\r\n                max * 10\r\n            );\r\n\r\n\r\n        return (\r\n            randomInteger(\r\n                minScaled,\r\n                maxScaled\r\n            )\r\n            \/\r\n            10\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function randomValue(\r\n        min,\r\n        max,\r\n        numberType\r\n    ) {\r\n\r\n        if (\r\n            numberType ===\r\n            'decimal'\r\n        ) {\r\n\r\n            return randomDecimal(\r\n                min,\r\n                max\r\n            );\r\n\r\n        }\r\n\r\n\r\n        return randomInteger(\r\n            Math.ceil(min),\r\n            Math.floor(max)\r\n        );\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Create random matrix\r\n    ===================================================== *\/\r\n\r\n    function createRandomMatrix(\r\n        size,\r\n        min,\r\n        max,\r\n        numberType\r\n    ) {\r\n\r\n        const matrix =\r\n            [];\r\n\r\n\r\n        for (\r\n            let rowIndex = 0;\r\n            rowIndex < size;\r\n            rowIndex++\r\n        ) {\r\n\r\n            const row =\r\n                [];\r\n\r\n\r\n            for (\r\n                let columnIndex = 0;\r\n                columnIndex < size;\r\n                columnIndex++\r\n            ) {\r\n\r\n                row.push(\r\n                    randomValue(\r\n                        min,\r\n                        max,\r\n                        numberType\r\n                    )\r\n                );\r\n\r\n            }\r\n\r\n\r\n            matrix.push(\r\n                row\r\n            );\r\n\r\n        }\r\n\r\n\r\n        return matrix;\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Local determinant check\r\n       Used only by the random generator.\r\n    ===================================================== *\/\r\n\r\n    function determinantForCheck(\r\n        matrix\r\n    ) {\r\n\r\n        const size =\r\n            matrix.length;\r\n\r\n\r\n        if (!size) {\r\n\r\n            return 0;\r\n\r\n        }\r\n\r\n\r\n        const working =\r\n            matrix.map(\r\n                function (row) {\r\n\r\n                    return row.map(\r\n                        Number\r\n                    );\r\n\r\n                }\r\n            );\r\n\r\n\r\n        let scale =\r\n            0;\r\n\r\n\r\n        for (\r\n            let row = 0;\r\n            row < size;\r\n            row++\r\n        ) {\r\n\r\n            for (\r\n                let column = 0;\r\n                column < size;\r\n                column++\r\n            ) {\r\n\r\n                scale =\r\n                    Math.max(\r\n                        scale,\r\n                        Math.abs(\r\n                            working[\r\n                                row\r\n                            ][\r\n                                column\r\n                            ]\r\n                        )\r\n                    );\r\n\r\n            }\r\n\r\n        }\r\n\r\n\r\n        const tolerance =\r\n\r\n            Number.EPSILON\r\n\r\n            *\r\n\r\n            Math.max(\r\n                scale,\r\n                Number.MIN_VALUE\r\n            )\r\n\r\n            *\r\n\r\n            size\r\n\r\n            *\r\n\r\n            64;\r\n\r\n\r\n        let swaps =\r\n            0;\r\n\r\n\r\n        for (\r\n            let column = 0;\r\n            column < size;\r\n            column++\r\n        ) {\r\n\r\n            let pivotRow =\r\n                column;\r\n\r\n\r\n            let maxValue =\r\n                Math.abs(\r\n                    working[\r\n                        column\r\n                    ][\r\n                        column\r\n                    ]\r\n                );\r\n\r\n\r\n            for (\r\n                let row = column + 1;\r\n                row < size;\r\n                row++\r\n            ) {\r\n\r\n                const value =\r\n                    Math.abs(\r\n                        working[\r\n                            row\r\n                        ][\r\n                            column\r\n                        ]\r\n                    );\r\n\r\n\r\n                if (\r\n                    value > maxValue\r\n                ) {\r\n\r\n                    maxValue =\r\n                        value;\r\n\r\n\r\n                    pivotRow =\r\n                        row;\r\n\r\n                }\r\n\r\n            }\r\n\r\n\r\n            if (\r\n                maxValue <= tolerance\r\n            ) {\r\n\r\n                return 0;\r\n\r\n            }\r\n\r\n\r\n            if (\r\n                pivotRow !== column\r\n            ) {\r\n\r\n                const temporary =\r\n                    working[column];\r\n\r\n\r\n                working[column] =\r\n                    working[pivotRow];\r\n\r\n\r\n                working[pivotRow] =\r\n                    temporary;\r\n\r\n\r\n                swaps++;\r\n\r\n            }\r\n\r\n\r\n            const pivot =\r\n                working[\r\n                    column\r\n                ][\r\n                    column\r\n                ];\r\n\r\n\r\n            for (\r\n                let row = column + 1;\r\n                row < size;\r\n                row++\r\n            ) {\r\n\r\n                const factor =\r\n                    working[\r\n                        row\r\n                    ][\r\n                        column\r\n                    ]\r\n                    \/\r\n                    pivot;\r\n\r\n\r\n                working[\r\n                    row\r\n                ][\r\n                    column\r\n                ] =\r\n                    0;\r\n\r\n\r\n                for (\r\n                    let currentColumn =\r\n                        column + 1;\r\n\r\n                    currentColumn < size;\r\n\r\n                    currentColumn++\r\n                ) {\r\n\r\n                    working[\r\n                        row\r\n                    ][\r\n                        currentColumn\r\n                    ] -=\r\n\r\n                        factor\r\n\r\n                        *\r\n\r\n                        working[\r\n                            column\r\n                        ][\r\n                            currentColumn\r\n                        ];\r\n\r\n                }\r\n\r\n            }\r\n\r\n        }\r\n\r\n\r\n        let determinant =\r\n            swaps % 2 === 0\r\n                ? 1\r\n                : -1;\r\n\r\n\r\n        for (\r\n            let index = 0;\r\n            index < size;\r\n            index++\r\n        ) {\r\n\r\n            determinant *=\r\n                working[\r\n                    index\r\n                ][\r\n                    index\r\n                ];\r\n\r\n        }\r\n\r\n\r\n        return determinant;\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Random parameters\r\n    ===================================================== *\/\r\n\r\n    function getRandomParameters() {\r\n\r\n        const minInput =\r\n            byId(\r\n                'randomMin'\r\n            );\r\n\r\n\r\n        const maxInput =\r\n            byId(\r\n                'randomMax'\r\n            );\r\n\r\n\r\n        const numberTypeSelect =\r\n            byId(\r\n                'randomNumberType'\r\n            );\r\n\r\n\r\n        const matrixTypeSelect =\r\n            byId(\r\n                'randomMatrixType'\r\n            );\r\n\r\n\r\n        const min =\r\n            Number(\r\n                minInput\r\n                    ? minInput.value\r\n                    : -5\r\n            );\r\n\r\n\r\n        const max =\r\n            Number(\r\n                maxInput\r\n                    ? maxInput.value\r\n                    : 5\r\n            );\r\n\r\n\r\n        const numberType =\r\n            numberTypeSelect\r\n                ? numberTypeSelect.value\r\n                : 'integer';\r\n\r\n\r\n        const matrixType =\r\n            matrixTypeSelect\r\n                ? matrixTypeSelect.value\r\n                : 'any';\r\n\r\n\r\n        if (\r\n            !Number.isFinite(min)\r\n            ||\r\n            !Number.isFinite(max)\r\n        ) {\r\n\r\n            return {\r\n\r\n                valid:\r\n                    false,\r\n\r\n                message:\r\n                    T.errorRange\r\n\r\n            };\r\n\r\n        }\r\n\r\n\r\n        if (\r\n            min > max\r\n        ) {\r\n\r\n            return {\r\n\r\n                valid:\r\n                    false,\r\n\r\n                message:\r\n                    T.errorRangeOrder\r\n\r\n            };\r\n\r\n        }\r\n\r\n\r\n        if (\r\n            numberType ===\r\n            'integer'\r\n            &&\r\n            Math.ceil(min)\r\n            >\r\n            Math.floor(max)\r\n        ) {\r\n\r\n            return {\r\n\r\n                valid:\r\n                    false,\r\n\r\n                message:\r\n                    T.errorNoIntegers\r\n\r\n            };\r\n\r\n        }\r\n\r\n\r\n        if (\r\n            numberType ===\r\n            'decimal'\r\n            &&\r\n            Math.ceil(\r\n                min * 10\r\n            )\r\n            >\r\n            Math.floor(\r\n                max * 10\r\n            )\r\n        ) {\r\n\r\n            return {\r\n\r\n                valid:\r\n                    false,\r\n\r\n                message:\r\n                    T.errorNoDecimals\r\n\r\n            };\r\n\r\n        }\r\n\r\n\r\n        return {\r\n\r\n            valid:\r\n                true,\r\n\r\n            min,\r\n\r\n            max,\r\n\r\n            numberType,\r\n\r\n            matrixType\r\n\r\n        };\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Fill matrix\r\n    ===================================================== *\/\r\n\r\n    function fillMatrixInputs(\r\n        matrix\r\n    ) {\r\n\r\n        const table =\r\n            byId(\r\n                'matrixTable'\r\n            );\r\n\r\n\r\n        if (!table) {\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        for (\r\n            let row = 0;\r\n            row < matrix.length;\r\n            row++\r\n        ) {\r\n\r\n            for (\r\n                let column = 0;\r\n                column < matrix[row].length;\r\n                column++\r\n            ) {\r\n\r\n                const input =\r\n                    table.rows[row]\r\n                        ?.cells[column]\r\n                        ?.querySelector(\r\n                            'input'\r\n                        );\r\n\r\n\r\n                if (!input) {\r\n\r\n                    continue;\r\n\r\n                }\r\n\r\n\r\n                input.value =\r\n                    String(\r\n                        matrix[\r\n                            row\r\n                        ][\r\n                            column\r\n                        ]\r\n                    );\r\n\r\n\r\n                input.classList.remove(\r\n                    'determinant-input-error'\r\n                );\r\n\r\n            }\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Generate random example\r\n    ===================================================== *\/\r\n\r\n    function generateRandomExample() {\r\n\r\n        clearError();\r\n\r\n        clearResult();\r\n\r\n\r\n        const parameters =\r\n            getRandomParameters();\r\n\r\n\r\n        if (\r\n            !parameters.valid\r\n        ) {\r\n\r\n            showError(\r\n                parameters.message\r\n            );\r\n\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        const sizeSelect =\r\n            byId(\r\n                'matrixSize'\r\n            );\r\n\r\n\r\n        const size =\r\n            Number(\r\n                sizeSelect\r\n                    ? sizeSelect.value\r\n                    : 3\r\n            )\r\n            ||\r\n            3;\r\n\r\n\r\n        const min =\r\n            parameters.min;\r\n\r\n\r\n        const max =\r\n            parameters.max;\r\n\r\n\r\n        const numberType =\r\n            parameters.numberType;\r\n\r\n\r\n        const matrixType =\r\n            parameters.matrixType;\r\n\r\n\r\n        let matrix =\r\n            null;\r\n\r\n\r\n        \/* -------------------------------------------------\r\n           Any matrix\r\n        ------------------------------------------------- *\/\r\n\r\n        if (\r\n            matrixType ===\r\n            'any'\r\n        ) {\r\n\r\n            matrix =\r\n                createRandomMatrix(\r\n                    size,\r\n                    min,\r\n                    max,\r\n                    numberType\r\n                );\r\n\r\n        }\r\n\r\n\r\n        \/* -------------------------------------------------\r\n           Singular matrix\r\n\r\n           Duplicate one row.\r\n           This guarantees det(A)=0 and keeps all\r\n           values inside the requested range.\r\n        ------------------------------------------------- *\/\r\n\r\n        else if (\r\n            matrixType ===\r\n            'singular'\r\n        ) {\r\n\r\n            matrix =\r\n                createRandomMatrix(\r\n                    size,\r\n                    min,\r\n                    max,\r\n                    numberType\r\n                );\r\n\r\n\r\n            matrix[\r\n                size - 1\r\n            ] =\r\n                matrix[0].slice();\r\n\r\n        }\r\n\r\n\r\n        \/* -------------------------------------------------\r\n           Nonsingular matrix\r\n        ------------------------------------------------- *\/\r\n\r\n        else {\r\n\r\n            const maxAttempts =\r\n                300;\r\n\r\n\r\n            for (\r\n                let attempt = 0;\r\n                attempt < maxAttempts;\r\n                attempt++\r\n            ) {\r\n\r\n                const candidate =\r\n                    createRandomMatrix(\r\n                        size,\r\n                        min,\r\n                        max,\r\n                        numberType\r\n                    );\r\n\r\n\r\n                const determinant =\r\n                    determinantForCheck(\r\n                        candidate\r\n                    );\r\n\r\n\r\n                if (\r\n                    Number.isFinite(\r\n                        determinant\r\n                    )\r\n                    &&\r\n                    Math.abs(\r\n                        determinant\r\n                    )\r\n                    >\r\n                    1e-10\r\n                ) {\r\n\r\n                    matrix =\r\n                        candidate;\r\n\r\n\r\n                    break;\r\n\r\n                }\r\n\r\n            }\r\n\r\n\r\n            if (!matrix) {\r\n\r\n                showError(\r\n                    T.errorNonsingular\r\n                );\r\n\r\n\r\n                return;\r\n\r\n            }\r\n\r\n        }\r\n\r\n\r\n        fillMatrixInputs(\r\n            matrix\r\n        );\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Parse backend step title\r\n    ===================================================== *\/\r\n\r\n    function parseStepTitle(\r\n        html,\r\n        index\r\n    ) {\r\n\r\n        const holder =\r\n            document.createElement(\r\n                'div'\r\n            );\r\n\r\n\r\n        holder.innerHTML =\r\n            String(\r\n                html || ''\r\n            );\r\n\r\n\r\n        const heading =\r\n            holder.querySelector(\r\n                'h1, h2, h3, h4, .cramer-step__title'\r\n            );\r\n\r\n\r\n        let title =\r\n            T.step\r\n            +\r\n            ' '\r\n            +\r\n            (index + 1);\r\n\r\n\r\n        if (heading) {\r\n\r\n            const candidate =\r\n                String(\r\n                    heading.textContent\r\n                    ||\r\n                    ''\r\n                )\r\n                .trim();\r\n\r\n\r\n            if (candidate) {\r\n\r\n                title =\r\n                    candidate;\r\n\r\n            }\r\n\r\n        }\r\n\r\n\r\n        return title;\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Input-matrix structural step\r\n\r\n       The input matrix is already visible above,\r\n       so it is not duplicated in the step list.\r\n    ===================================================== *\/\r\n\r\n    function isStructuralStep(\r\n        title\r\n    ) {\r\n\r\n        const normalized =\r\n            String(\r\n                title || ''\r\n            )\r\n            .toLowerCase()\r\n            .replace(\r\n                \/\\s+\/g,\r\n                ' '\r\n            )\r\n            .trim();\r\n\r\n\r\n        return (\r\n            normalized.startsWith(\r\n                '\u0432\u0445\u0456\u0434\u043d\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u044f'\r\n            )\r\n            ||\r\n            normalized.startsWith(\r\n                'input matrix'\r\n            )\r\n            ||\r\n            normalized.startsWith(\r\n                '\u0438\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0430'\r\n            )\r\n        );\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Render result\r\n    ===================================================== *\/\r\n\r\n    function renderSolution(\r\n        container,\r\n        payload,\r\n        matrix\r\n    ) {\r\n\r\n        if (\r\n            !container\r\n            ||\r\n            !Array.isArray(\r\n                payload\r\n            )\r\n        ) {\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        const resultLatex =\r\n            formatDeterminantValue(\r\n                payload[0]\r\n            );\r\n\r\n\r\n        const matrixLatex =\r\n            matrixToLatex(\r\n                matrix\r\n            );\r\n\r\n\r\n        const formulas =\r\n            Array.isArray(\r\n                payload[1]\r\n            )\r\n                ? payload[1]\r\n                : [];\r\n\r\n\r\n        const titles =\r\n            Array.isArray(\r\n                payload[2]\r\n            )\r\n                ? payload[2]\r\n                : [];\r\n\r\n\r\n        \/* -------------------------------------------------\r\n           Full answer for Copy LaTeX:\r\n\r\n           det(A)=|matrix|=value\r\n        ------------------------------------------------- *\/\r\n\r\n        lastResultLatex =\r\n\r\n            '\\\\det(A)='\r\n\r\n            +\r\n\r\n            matrixLatex\r\n\r\n            +\r\n\r\n            '='\r\n\r\n            +\r\n\r\n            resultLatex;\r\n\r\n\r\n        \/* -------------------------------------------------\r\n           Prepare visible steps\r\n        ------------------------------------------------- *\/\r\n\r\n        const stepCount =\r\n            Math.max(\r\n                formulas.length,\r\n                titles.length\r\n            );\r\n\r\n\r\n        const steps =\r\n            [];\r\n\r\n\r\n        for (\r\n            let index = 0;\r\n            index < stepCount;\r\n            index++\r\n        ) {\r\n\r\n            const title =\r\n                parseStepTitle(\r\n                    titles[index] || '',\r\n                    index\r\n                );\r\n\r\n\r\n            const formula =\r\n                formulas[index]\r\n                ||\r\n                '';\r\n\r\n\r\n            \/*\r\n             * Do not duplicate input matrix.\r\n             *\/\r\n            if (\r\n                isStructuralStep(\r\n                    title\r\n                )\r\n            ) {\r\n\r\n                continue;\r\n\r\n            }\r\n\r\n\r\n            if (!formula) {\r\n\r\n                continue;\r\n\r\n            }\r\n\r\n\r\n            steps.push({\r\n\r\n                title,\r\n\r\n                formula\r\n\r\n            });\r\n\r\n        }\r\n\r\n\r\n        let html =\r\n            '';\r\n\r\n\r\n        \/* =================================================\r\n           Answer\r\n        ================================================= *\/\r\n\r\n        html +=\r\n\r\n            '<section class=\"determinant-answer-card\">'\r\n\r\n            +\r\n\r\n                '<div class=\"determinant-answer-card__top\">'\r\n\r\n                +\r\n\r\n                    '<h2 class=\"determinant-answer-card__title\">'\r\n\r\n                    +\r\n\r\n                        escapeHtml(\r\n                            T.answerTitle\r\n                        )\r\n\r\n                    +\r\n\r\n                    '<\/h2>'\r\n\r\n                +\r\n\r\n                    '<button'\r\n\r\n                    +\r\n\r\n                        ' type=\"button\"'\r\n\r\n                    +\r\n\r\n                        ' class=\"determinant-copy-button\"'\r\n\r\n                    +\r\n\r\n                        ' data-determinant-action=\"copy-result\"'\r\n\r\n                    +\r\n\r\n                    '>'\r\n\r\n                    +\r\n\r\n                        escapeHtml(\r\n                            T.copyLatex\r\n                        )\r\n\r\n                    +\r\n\r\n                    '<\/button>'\r\n\r\n                +\r\n\r\n                '<\/div>'\r\n\r\n            +\r\n\r\n                '<div'\r\n\r\n                +\r\n\r\n                    ' class=\"determinant-answer-card__formula\"'\r\n\r\n                +\r\n\r\n                    ' tabindex=\"0\"'\r\n\r\n                +\r\n\r\n                '>'\r\n\r\n                +\r\n\r\n                    '\\\\['\r\n\r\n                    +\r\n\r\n                        '\\\\det(A)='\r\n\r\n                    +\r\n\r\n                        matrixLatex\r\n\r\n                    +\r\n\r\n                        '='\r\n\r\n                    +\r\n\r\n                        resultLatex\r\n\r\n                    +\r\n\r\n                    '\\\\]'\r\n\r\n                +\r\n\r\n                '<\/div>'\r\n\r\n            +\r\n\r\n            '<\/section>';\r\n\r\n\r\n        \/* =================================================\r\n           Step-by-step solution\r\n        ================================================= *\/\r\n\r\n        if (\r\n            steps.length > 0\r\n        ) {\r\n\r\n            html +=\r\n\r\n                '<div class=\"determinant-solution-toolbar\">'\r\n\r\n                +\r\n\r\n                    '<h2>'\r\n\r\n                    +\r\n\r\n                        escapeHtml(\r\n                            T.solutionTitle\r\n                        )\r\n\r\n                    +\r\n\r\n                    '<\/h2>'\r\n\r\n                +\r\n\r\n                    '<div class=\"determinant-solution-toolbar__actions\">'\r\n\r\n                    +\r\n\r\n                        '<button'\r\n\r\n                        +\r\n\r\n                            ' type=\"button\"'\r\n\r\n                        +\r\n\r\n                            ' data-determinant-action=\"expand-all\"'\r\n\r\n                        +\r\n\r\n                        '>'\r\n\r\n                        +\r\n\r\n                            escapeHtml(\r\n                                T.expandAll\r\n                            )\r\n\r\n                        +\r\n\r\n                        '<\/button>'\r\n\r\n                    +\r\n\r\n                        '<button'\r\n\r\n                        +\r\n\r\n                            ' type=\"button\"'\r\n\r\n                        +\r\n\r\n                            ' data-determinant-action=\"collapse-all\"'\r\n\r\n                        +\r\n\r\n                        '>'\r\n\r\n                        +\r\n\r\n                            escapeHtml(\r\n                                T.collapseAll\r\n                            )\r\n\r\n                        +\r\n\r\n                        '<\/button>'\r\n\r\n                    +\r\n\r\n                    '<\/div>'\r\n\r\n                +\r\n\r\n                '<\/div>'\r\n\r\n            +\r\n\r\n                '<div class=\"determinant-steps\">';\r\n\r\n\r\n            steps.forEach(\r\n                function (\r\n                    step,\r\n                    index\r\n                ) {\r\n\r\n                    html +=\r\n\r\n                        '<details class=\"determinant-step\" open>'\r\n\r\n                        +\r\n\r\n                            '<summary class=\"determinant-step__summary\">'\r\n\r\n                            +\r\n\r\n                                '<span class=\"determinant-step__number\">'\r\n\r\n                                +\r\n\r\n                                    (index + 1)\r\n\r\n                                +\r\n\r\n                                    '.'\r\n\r\n                                +\r\n\r\n                                '<\/span>'\r\n\r\n                            +\r\n\r\n                                '<span class=\"determinant-step__title\">'\r\n\r\n                                +\r\n\r\n                                    escapeHtml(\r\n                                        step.title\r\n                                    )\r\n\r\n                                +\r\n\r\n                                '<\/span>'\r\n\r\n                            +\r\n\r\n                                '<span'\r\n\r\n                                +\r\n\r\n                                    ' class=\"determinant-step__chevron\"'\r\n\r\n                                +\r\n\r\n                                    ' aria-hidden=\"true\"'\r\n\r\n                                +\r\n\r\n                                '><\/span>'\r\n\r\n                            +\r\n\r\n                            '<\/summary>'\r\n\r\n                        +\r\n\r\n                            '<div class=\"determinant-step__content\">'\r\n\r\n                            +\r\n\r\n                                '<div'\r\n\r\n                                +\r\n\r\n                                    ' class=\"determinant-step__formula\"'\r\n\r\n                                +\r\n\r\n                                    ' tabindex=\"0\"'\r\n\r\n                                +\r\n\r\n                                '>'\r\n\r\n                                +\r\n\r\n                                    step.formula\r\n\r\n                                +\r\n\r\n                                '<\/div>'\r\n\r\n                            +\r\n\r\n                            '<\/div>'\r\n\r\n                        +\r\n\r\n                        '<\/details>';\r\n\r\n                }\r\n            );\r\n\r\n\r\n            html +=\r\n                '<\/div>';\r\n\r\n        }\r\n\r\n\r\n        container.innerHTML =\r\n            html;\r\n\r\n\r\n        container.hidden =\r\n            false;\r\n\r\n\r\n        renderMathJax(\r\n            container\r\n        );\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Copy result\r\n    ===================================================== *\/\r\n\r\n    function showCopiedState(\r\n        button\r\n    ) {\r\n\r\n        if (!button) {\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        const previous =\r\n            button.textContent;\r\n\r\n\r\n        button.textContent =\r\n            T.copied;\r\n\r\n\r\n        setTimeout(\r\n            function () {\r\n\r\n                button.textContent =\r\n                    previous;\r\n\r\n            },\r\n            1500\r\n        );\r\n\r\n    }\r\n\r\n\r\n    function fallbackCopy(\r\n        text,\r\n        button\r\n    ) {\r\n\r\n        const textarea =\r\n            document.createElement(\r\n                'textarea'\r\n            );\r\n\r\n\r\n        textarea.value =\r\n            text;\r\n\r\n\r\n        textarea.style.position =\r\n            'fixed';\r\n\r\n\r\n        textarea.style.opacity =\r\n            '0';\r\n\r\n\r\n        textarea.style.pointerEvents =\r\n            'none';\r\n\r\n\r\n        document.body.appendChild(\r\n            textarea\r\n        );\r\n\r\n\r\n        textarea.select();\r\n\r\n\r\n        try {\r\n\r\n            document.execCommand(\r\n                'copy'\r\n            );\r\n\r\n\r\n            showCopiedState(\r\n                button\r\n            );\r\n\r\n        }\r\n\r\n        catch (error) {\r\n\r\n            \/* no-op *\/\r\n\r\n        }\r\n\r\n\r\n        textarea.remove();\r\n\r\n    }\r\n\r\n\r\n    function copyResult(\r\n        button\r\n    ) {\r\n\r\n        if (!lastResultLatex) {\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        if (\r\n            navigator.clipboard\r\n            &&\r\n            navigator.clipboard.writeText\r\n        ) {\r\n\r\n            navigator.clipboard\r\n                .writeText(\r\n                    lastResultLatex\r\n                )\r\n                .then(\r\n                    function () {\r\n\r\n                        showCopiedState(\r\n                            button\r\n                        );\r\n\r\n                    }\r\n                )\r\n                .catch(\r\n                    function () {\r\n\r\n                        fallbackCopy(\r\n                            lastResultLatex,\r\n                            button\r\n                        );\r\n\r\n                    }\r\n                );\r\n\r\n        }\r\n\r\n        else {\r\n\r\n            fallbackCopy(\r\n                lastResultLatex,\r\n                button\r\n            );\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Solution actions\r\n    ===================================================== *\/\r\n\r\n    function handleSolutionClick(\r\n        event\r\n    ) {\r\n\r\n        const container =\r\n            byId(\r\n                'determinant-solution-container'\r\n            );\r\n\r\n\r\n        if (!container) {\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        const button =\r\n            event.target.closest(\r\n                '[data-determinant-action]'\r\n            );\r\n\r\n\r\n        if (\r\n            !button\r\n            ||\r\n            !container.contains(\r\n                button\r\n            )\r\n        ) {\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        const action =\r\n            button.getAttribute(\r\n                'data-determinant-action'\r\n            );\r\n\r\n\r\n        \/* -------------------------------------------------\r\n           Expand all\r\n        ------------------------------------------------- *\/\r\n\r\n        if (\r\n            action ===\r\n            'expand-all'\r\n        ) {\r\n\r\n            container\r\n                .querySelectorAll(\r\n                    '.determinant-step'\r\n                )\r\n                .forEach(\r\n                    function (step) {\r\n\r\n                        step.open =\r\n                            true;\r\n\r\n                    }\r\n                );\r\n\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        \/* -------------------------------------------------\r\n           Collapse all\r\n        ------------------------------------------------- *\/\r\n\r\n        if (\r\n            action ===\r\n            'collapse-all'\r\n        ) {\r\n\r\n            container\r\n                .querySelectorAll(\r\n                    '.determinant-step'\r\n                )\r\n                .forEach(\r\n                    function (step) {\r\n\r\n                        step.open =\r\n                            false;\r\n\r\n                    }\r\n                );\r\n\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        \/* -------------------------------------------------\r\n           Copy\r\n        ------------------------------------------------- *\/\r\n\r\n        if (\r\n            action ===\r\n            'copy-result'\r\n        ) {\r\n\r\n            copyResult(\r\n                button\r\n            );\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       AJAX\r\n    ===================================================== *\/\r\n\r\n    function sendMatrixToServer(\r\n        matrix\r\n    ) {\r\n\r\n        const resultContainer =\r\n            byId(\r\n                'determinant-solution-container'\r\n            );\r\n\r\n\r\n        clearResult();\r\n\r\n        clearError();\r\n\r\n\r\n        \/*\r\n         * Cancel previous request.\r\n         *\/\r\n        if (\r\n            activeController\r\n        ) {\r\n\r\n            try {\r\n\r\n                activeController.abort();\r\n\r\n            }\r\n\r\n            catch (error) {\r\n\r\n                \/* no-op *\/\r\n\r\n            }\r\n\r\n        }\r\n\r\n\r\n        activeController =\r\n            typeof AbortController\r\n            !==\r\n            'undefined'\r\n                ? new AbortController()\r\n                : null;\r\n\r\n\r\n        setLoading(\r\n            true\r\n        );\r\n\r\n\r\n        const formData =\r\n            new FormData();\r\n\r\n\r\n        formData.append(\r\n            'action',\r\n            AJAX_ACTION\r\n        );\r\n\r\n\r\n        formData.append(\r\n            'matrix',\r\n            JSON.stringify(\r\n                matrix\r\n            )\r\n        );\r\n\r\n\r\n        \/*\r\n         * Important:\r\n         * PHP receives the same language\r\n         * that the frontend currently uses.\r\n         *\/\r\n        formData.append(\r\n            'lang',\r\n            LANG\r\n        );\r\n\r\n\r\n        const fetchOptions = {\r\n\r\n            method:\r\n                'POST',\r\n\r\n            body:\r\n                formData\r\n\r\n        };\r\n\r\n\r\n        if (\r\n            activeController\r\n        ) {\r\n\r\n            fetchOptions.signal =\r\n                activeController.signal;\r\n\r\n        }\r\n\r\n\r\n        fetch(\r\n            AJAX_URL,\r\n            fetchOptions\r\n        )\r\n\r\n        .then(\r\n            function (response) {\r\n\r\n                if (\r\n                    !response.ok\r\n                ) {\r\n\r\n                    throw new Error(\r\n                        T.errorServerResponse\r\n                    );\r\n\r\n                }\r\n\r\n\r\n                return response.json();\r\n\r\n            }\r\n        )\r\n\r\n        .then(\r\n            function (data) {\r\n\r\n                setLoading(\r\n                    false\r\n                );\r\n\r\n\r\n                if (\r\n                    !data\r\n                    ||\r\n                    data.success !== true\r\n                ) {\r\n\r\n                    showError(\r\n                        data\r\n                        &&\r\n                        data.error\r\n                            ? data.error\r\n                            : T.errorCalculate\r\n                    );\r\n\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n\r\n                if (\r\n                    !Array.isArray(\r\n                        data.solution\r\n                    )\r\n                ) {\r\n\r\n                    showError(\r\n                        T.errorNoPayload\r\n                    );\r\n\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n\r\n                if (\r\n                    !resultContainer\r\n                ) {\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n\r\n                renderSolution(\r\n                    resultContainer,\r\n                    data.solution,\r\n                    matrix\r\n                );\r\n\r\n\r\n                \/*\r\n                 * Scroll to result.\r\n                 *\/\r\n                setTimeout(\r\n                    function () {\r\n\r\n                        const reducedMotion =\r\n                            window.matchMedia\r\n                            &&\r\n                            window.matchMedia(\r\n                                '(prefers-reduced-motion: reduce)'\r\n                            )\r\n                            .matches;\r\n\r\n\r\n                        resultContainer\r\n                            .scrollIntoView(\r\n                                {\r\n\r\n                                    behavior:\r\n                                        reducedMotion\r\n                                            ? 'auto'\r\n                                            : 'smooth',\r\n\r\n                                    block:\r\n                                        'start'\r\n\r\n                                }\r\n                            );\r\n\r\n                    },\r\n                    80\r\n                );\r\n\r\n            }\r\n        )\r\n\r\n        .catch(\r\n            function (error) {\r\n\r\n                if (\r\n                    error\r\n                    &&\r\n                    error.name ===\r\n                    'AbortError'\r\n                ) {\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n\r\n                setLoading(\r\n                    false\r\n                );\r\n\r\n\r\n                showError(\r\n                    error\r\n                    &&\r\n                    error.message\r\n                        ? error.message\r\n                        : T.errorNetwork\r\n                );\r\n\r\n            }\r\n        );\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Calculate\r\n    ===================================================== *\/\r\n\r\n    function calculateDeterminant() {\r\n\r\n        clearError();\r\n\r\n        clearMatrixErrors();\r\n\r\n\r\n        const result =\r\n            collectMatrix();\r\n\r\n\r\n        if (\r\n            !result.matrix.length\r\n        ) {\r\n\r\n            showError(\r\n                T.errorMatrix\r\n            );\r\n\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        if (\r\n            result.invalidCount > 0\r\n        ) {\r\n\r\n            showError(\r\n                T.errorInvalidFields\r\n            );\r\n\r\n\r\n            return;\r\n\r\n        }\r\n\r\n\r\n        sendMatrixToServer(\r\n            result.matrix\r\n        );\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Bind events\r\n    ===================================================== *\/\r\n\r\n    function bindEvents() {\r\n\r\n        const sizeSelect =\r\n            byId(\r\n                'matrixSize'\r\n            );\r\n\r\n\r\n        const calculateButton =\r\n            byId(\r\n                'determinant-generate-button'\r\n            );\r\n\r\n\r\n        const clearButton =\r\n            byId(\r\n                'determinant-clear-button'\r\n            );\r\n\r\n\r\n        const randomButton =\r\n            byId(\r\n                'determinant-random-button'\r\n            );\r\n\r\n\r\n        const table =\r\n            byId(\r\n                'matrixTable'\r\n            );\r\n\r\n\r\n        const solutionContainer =\r\n            byId(\r\n                'determinant-solution-container'\r\n            );\r\n\r\n\r\n        if (\r\n            sizeSelect\r\n        ) {\r\n\r\n            sizeSelect.addEventListener(\r\n                'change',\r\n                changeMatrixSize\r\n            );\r\n\r\n        }\r\n\r\n\r\n        if (\r\n            calculateButton\r\n        ) {\r\n\r\n            calculateButton.addEventListener(\r\n                'click',\r\n                calculateDeterminant\r\n            );\r\n\r\n        }\r\n\r\n\r\n        if (\r\n            clearButton\r\n        ) {\r\n\r\n            clearButton.addEventListener(\r\n                'click',\r\n                clearMatrix\r\n            );\r\n\r\n        }\r\n\r\n\r\n        if (\r\n            randomButton\r\n        ) {\r\n\r\n            randomButton.addEventListener(\r\n                'click',\r\n                generateRandomExample\r\n            );\r\n\r\n        }\r\n\r\n\r\n        \/*\r\n         * Ctrl \/ Command + Enter.\r\n         *\/\r\n        if (\r\n            table\r\n        ) {\r\n\r\n            table.addEventListener(\r\n                'keydown',\r\n                function (event) {\r\n\r\n                    if (\r\n                        (\r\n                            event.ctrlKey\r\n                            ||\r\n                            event.metaKey\r\n                        )\r\n                        &&\r\n                        event.key ===\r\n                        'Enter'\r\n                    ) {\r\n\r\n                        event.preventDefault();\r\n\r\n\r\n                        calculateDeterminant();\r\n\r\n                    }\r\n\r\n                }\r\n            );\r\n\r\n        }\r\n\r\n\r\n        \/*\r\n         * One delegated listener for\r\n         * dynamically rendered solution.\r\n         *\/\r\n        if (\r\n            solutionContainer\r\n        ) {\r\n\r\n            solutionContainer.addEventListener(\r\n                'click',\r\n                handleSolutionClick\r\n            );\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       Init\r\n    ===================================================== *\/\r\n\r\n    function init() {\r\n\r\n        \/*\r\n         * Translate static HTML first.\r\n         *\/\r\n        applyTranslations();\r\n\r\n\r\n        \/*\r\n         * Then create inputs so their\r\n         * dynamic aria-labels use T.\r\n         *\/\r\n        changeMatrixSize();\r\n\r\n\r\n        bindEvents();\r\n\r\n\r\n        renderMathJax(\r\n            APP\r\n        );\r\n\r\n    }\r\n\r\n\r\n    if (\r\n        document.readyState ===\r\n        'loading'\r\n    ) {\r\n\r\n        document.addEventListener(\r\n            'DOMContentLoaded',\r\n            init\r\n        );\r\n\r\n    }\r\n\r\n    else {\r\n\r\n        init();\r\n\r\n    }\r\n\r\n})();\r\n\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5a01589 elementor-widget elementor-widget-html\" data-id=\"5a01589\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<section\r\n  id=\"determinant-info-block\"\r\n  class=\"determinant-info-block\"\r\n  data-lang=\"auto\"\r\n>\r\n\r\n  <h2\r\n    id=\"determinant-info-title\"\r\n    class=\"determinant-info-title\"\r\n  >\r\n    \u0412\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a \u043c\u0430\u0442\u0440\u0438\u0446\u0456 \u043e\u043d\u043b\u0430\u0439\u043d: \u044f\u043a \u0446\u0435 \u043f\u0440\u0430\u0446\u044e\u0454?\r\n  <\/h2>\r\n\r\n\r\n  <img loading=\"lazy\"\r\n    id=\"determinant-info-image\"\r\n    class=\"determinant-info-image aligncenter wp-image-10020256 size-full\"\r\n    src=\"https:\/\/www.mathros.net.ua\/ru\/wp-content\/uploads\/2023\/12\/matrix-determinant-online2.jpg\"\r\n    alt=\"\u0412\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a \u043c\u0430\u0442\u0440\u0438\u0446\u0456 \u043e\u043d\u043b\u0430\u0439\u043d\"\r\n    width=\"150\"\r\n    height=\"150\"\r\n    loading=\"lazy\"\r\n    decoding=\"async\"\r\n  >\r\n\r\n\r\n  <p\r\n    id=\"determinant-info-text-1\"\r\n    class=\"determinant-info-text\"\r\n  >\r\n    \u041d\u0430\u0448 \u043e\u043d\u043b\u0430\u0439\u043d-\u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u0448\u0432\u0438\u0434\u043a\u043e \u0442\u0430 \u0442\u043e\u0447\u043d\u043e \u043e\u0431\u0447\u0438\u0441\u043b\u044e\u0454 \u0432\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a\u0438\r\n    <a\r\n      title=\"\u0429\u043e \u0442\u0430\u043a\u0435 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u044f\"\r\n      href=\"https:\/\/uk.wikipedia.org\/wiki\/%D0%9A%D0%B2%D0%B0%D0%B4%D1%80%D0%B0%D1%82%D0%BD%D0%B0_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8F\"\r\n      target=\"_blank\"\r\n      rel=\"nofollow noopener\"\r\n    >\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u0438\u0445 \u043c\u0430\u0442\u0440\u0438\u0446\u044c<\/a>.\r\n    \u0417\u0430\u0432\u0434\u044f\u043a\u0438 \u0441\u043f\u0435\u0446\u0456\u0430\u043b\u044c\u043d\u0438\u043c \u0444\u043e\u0440\u043c\u0443\u043b\u0430\u043c \u0434\u043b\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u044c \u0440\u043e\u0437\u043c\u0456\u0440\u043e\u043c 2\u00d72 \u0456 3\u00d73 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0442\u0440\u0438\u043c\u0443\u0454\u0442\u044c\u0441\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u043e \u043c\u0438\u0442\u0442\u0454\u0432\u043e.\r\n    \u0414\u043b\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u044c \u0440\u043e\u0437\u043c\u0456\u0440\u043e\u043c 4\u00d74 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f\r\n    <a\r\n      title=\"\u041e\u0431\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044f \u0432\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a\u0456\u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u044c \u0432\u0438\u0449\u0438\u0445 \u043f\u043e\u0440\u044f\u0434\u043a\u0456\u0432\"\r\n      href=\"https:\/\/www.mathros.net.ua\/obchyslennja-vyznachnykiv-vysokyh-porjadkiv-za-shemoju-rozkladu-vyznachnyka-po-rjadku-chy-stovpci.html\"\r\n    >\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u043e\u0437\u043a\u043b\u0430\u0434\u0443 \u0437\u0430 \u043f\u0435\u0440\u0448\u0438\u043c \u0440\u044f\u0434\u043a\u043e\u043c<\/a>,\r\n    \u0449\u043e \u0437\u0430\u0431\u0435\u0437\u043f\u0435\u0447\u0443\u0454 \u0435\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0456\u0441\u0442\u044c \u043e\u0431\u0447\u0438\u0441\u043b\u0435\u043d\u044c.\r\n    \u0414\u043b\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u044c \u0440\u043e\u0437\u043c\u0456\u0440\u043e\u043c 5\u00d75\u20138\u00d78 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f\r\n    <a\r\n      title=\"\u0412\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a \u043c\u0430\u0442\u0440\u0438\u0446\u0456 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0413\u0430\u0443\u0441\u0430\"\r\n      href=\"https:\/\/www.mathros.net.ua\/obchyslennja-vyznachnyka-matryci-rozmirnosti-nxn.html\"\r\n    >\u043c\u0435\u0442\u043e\u0434 \u0413\u0430\u0443\u0441\u0430<\/a>,\r\n    \u044f\u043a\u0438\u0439 \u043f\u0435\u0440\u0435\u0442\u0432\u043e\u0440\u044e\u0454 \u043c\u0430\u0442\u0440\u0438\u0446\u044e \u0443 \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u0442\u0440\u0438\u043a\u0443\u0442\u043d\u0443 \u0444\u043e\u0440\u043c\u0443 \u0442\u0430 \u043e\u0431\u0447\u0438\u0441\u043b\u044e\u0454 \u0432\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a.\r\n  <\/p>\r\n\r\n\r\n  <p\r\n    id=\"determinant-info-text-2\"\r\n    class=\"determinant-info-text\"\r\n  >\r\n    \u041a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u043f\u0440\u043e\u043f\u043e\u043d\u0443\u0454 \u0437\u0440\u0443\u0447\u043d\u0438\u0439 \u0456\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0442\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u043d\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e \u043f\u0440\u043e \u043e\u0431\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044f.\r\n    \u041e\u0442\u0440\u0438\u043c\u0443\u0439\u0442\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0438 \u0448\u0432\u0438\u0434\u043a\u043e \u0442\u0430 \u0431\u0435\u0437\u043f\u043e\u043c\u0438\u043b\u043a\u043e\u0432\u043e!\r\n  <\/p>\r\n\r\n\r\n  <p\r\n    id=\"determinant-info-text-3\"\r\n    class=\"determinant-info-text\"\r\n  >\r\n    \u0417\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u043f\u0440\u043e \u0441\u043a\u043b\u0430\u0434\u043d\u0456 \u0440\u043e\u0437\u0440\u0430\u0445\u0443\u043d\u043a\u0438 \u0432\u0440\u0443\u0447\u043d\u0443.\r\n    \u041d\u0430\u0448 \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u043a\u0430\u0437\u0443\u0454 \u043a\u043e\u0436\u0435\u043d \u043a\u0440\u043e\u043a \u043e\u0431\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044f \u0432\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u0456, \u0449\u043e \u0434\u043e\u0437\u0432\u043e\u043b\u044f\u0454 \u0437\u0440\u043e\u0437\u0443\u043c\u0456\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441 \u0456 \u043e\u0442\u0440\u0438\u043c\u0430\u0442\u0438 \u0442\u043e\u0447\u043d\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.\r\n  <\/p>\r\n\r\n<\/section>\r\n\r\n\r\n<style>\r\n\r\n\/* =========================================================\r\n   \u041e\u0441\u043d\u043e\u0432\u043d\u0438\u0439 \u0431\u043b\u043e\u043a\r\n========================================================= *\/\r\n\r\n.determinant-info-block {\r\n  width: 100%;\r\n  max-width: 100%;\r\n\r\n  margin: 0;\r\n  padding: 0;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a\r\n========================================================= *\/\r\n\r\n.determinant-info-title {\r\n  width:\r\n    min(\r\n      860px,\r\n      calc(100% - 32px)\r\n    );\r\n\r\n  max-width:\r\n    860px;\r\n\r\n  margin:\r\n    22px auto 12px;\r\n\r\n  padding:\r\n    0;\r\n\r\n  font-family:\r\n    system-ui,\r\n    -apple-system,\r\n    \"Segoe UI\",\r\n    Roboto,\r\n    \"Helvetica Neue\",\r\n    Arial,\r\n    \"Noto Sans\",\r\n    \"Liberation Sans\",\r\n    sans-serif;\r\n\r\n  font-weight:\r\n    650;\r\n\r\n  font-size:\r\n    clamp(\r\n      1.2rem,\r\n      1.05rem + .8vw,\r\n      1.55rem\r\n    );\r\n\r\n  line-height:\r\n    1.35;\r\n\r\n  letter-spacing:\r\n    .002em;\r\n\r\n  color:\r\n    #334155;\r\n\r\n  text-align:\r\n    center;\r\n\r\n  text-wrap:\r\n    balance;\r\n\r\n  -webkit-hyphens:\r\n    none;\r\n\r\n  -ms-hyphens:\r\n    none;\r\n\r\n  hyphens:\r\n    none;\r\n\r\n  word-break:\r\n    normal;\r\n\r\n  overflow-wrap:\r\n    normal;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   \u0410\u0431\u0437\u0430\u0446\u0438\r\n========================================================= *\/\r\n\r\n.determinant-info-text {\r\n  width:\r\n    min(\r\n      800px,\r\n      calc(100% - 32px)\r\n    );\r\n\r\n  max-width:\r\n    800px;\r\n\r\n  margin:\r\n    10px auto;\r\n\r\n  padding:\r\n    0;\r\n\r\n  font-family:\r\n    system-ui,\r\n    -apple-system,\r\n    \"Segoe UI\",\r\n    Roboto,\r\n    \"Helvetica Neue\",\r\n    Arial,\r\n    \"Noto Sans\",\r\n    \"Liberation Sans\",\r\n    sans-serif;\r\n\r\n  font-weight:\r\n    400;\r\n\r\n  font-size:\r\n    clamp(\r\n      .95rem,\r\n      .92rem + .2vw,\r\n      1rem\r\n    );\r\n\r\n  line-height:\r\n    1.7;\r\n\r\n  color:\r\n    #475569;\r\n\r\n  text-align:\r\n    left;\r\n\r\n  text-wrap:\r\n    pretty;\r\n\r\n  -webkit-hyphens:\r\n    none;\r\n\r\n  -ms-hyphens:\r\n    none;\r\n\r\n  hyphens:\r\n    none;\r\n\r\n  word-break:\r\n    normal;\r\n\r\n  overflow-wrap:\r\n    normal;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   \u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f\r\n========================================================= *\/\r\n\r\n.determinant-info-text a {\r\n  color:\r\n    #0B638B;\r\n\r\n  text-decoration:\r\n    underline;\r\n\r\n  text-underline-offset:\r\n    3px;\r\n\r\n  text-decoration-thickness:\r\n    1px;\r\n\r\n  -webkit-hyphens:\r\n    none;\r\n\r\n  -ms-hyphens:\r\n    none;\r\n\r\n  hyphens:\r\n    none;\r\n\r\n  word-break:\r\n    normal;\r\n\r\n  overflow-wrap:\r\n    normal;\r\n}\r\n\r\n\r\n.determinant-info-text a:hover,\r\n.determinant-info-text a:focus-visible {\r\n  color:\r\n    #095676;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   \u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f\r\n========================================================= *\/\r\n\r\n.determinant-info-image {\r\n  display:\r\n    block;\r\n\r\n  width:\r\n    150px;\r\n\r\n  max-width:\r\n    100%;\r\n\r\n  height:\r\n    auto;\r\n\r\n  margin:\r\n    16px auto;\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   \u0422\u0435\u043c\u043d\u0430 \u0442\u0435\u043c\u0430\r\n========================================================= *\/\r\n\r\n@media (prefers-color-scheme: dark) {\r\n\r\n  .determinant-info-title {\r\n    color:\r\n      #cbd5e1;\r\n  }\r\n\r\n\r\n  .determinant-info-text {\r\n    color:\r\n      #9cb0c0;\r\n  }\r\n\r\n\r\n  .determinant-info-text a {\r\n    color:\r\n      #58b6e4;\r\n  }\r\n\r\n\r\n  .determinant-info-text a:hover,\r\n  .determinant-info-text a:focus-visible {\r\n    color:\r\n      #45a7d9;\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   \u041f\u043b\u0430\u043d\u0448\u0435\u0442\u0438\r\n========================================================= *\/\r\n\r\n@media (max-width: 768px) {\r\n\r\n  .determinant-info-title {\r\n    margin:\r\n      18px auto 10px;\r\n  }\r\n\r\n\r\n  .determinant-info-text {\r\n    margin:\r\n      8px auto;\r\n  }\r\n\r\n}\r\n\r\n\r\n\/* =========================================================\r\n   \u0422\u0435\u043b\u0435\u0444\u043e\u043d\u0438\r\n========================================================= *\/\r\n\r\n@media (max-width: 480px) {\r\n\r\n  .determinant-info-title {\r\n    width:\r\n      calc(100% - 24px);\r\n\r\n    font-size:\r\n      1.15rem;\r\n\r\n    line-height:\r\n      1.4;\r\n  }\r\n\r\n\r\n  .determinant-info-text {\r\n    width:\r\n      calc(100% - 24px);\r\n\r\n    font-size:\r\n      .95rem;\r\n\r\n    line-height:\r\n      1.65;\r\n  }\r\n\r\n\r\n  .determinant-info-image {\r\n    width:\r\n      140px;\r\n  }\r\n\r\n}\r\n\r\n<\/style>\r\n\r\n\r\n<script>\r\n(function () {\r\n\r\n  'use strict';\r\n\r\n\r\n  \/* =======================================================\r\n     \u041f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u0438\r\n  ======================================================= *\/\r\n\r\n  const translations = {\r\n\r\n    \/* =====================================================\r\n       \u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430\r\n    ===================================================== *\/\r\n\r\n    uk: {\r\n\r\n      title:\r\n        '\u0412\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a \u043c\u0430\u0442\u0440\u0438\u0446\u0456 \u043e\u043d\u043b\u0430\u0439\u043d: \u044f\u043a \u0446\u0435 \u043f\u0440\u0430\u0446\u044e\u0454?',\r\n\r\n      imageAlt:\r\n        '\u0412\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a \u043c\u0430\u0442\u0440\u0438\u0446\u0456 \u043e\u043d\u043b\u0430\u0439\u043d',\r\n\r\n      text1:\r\n        '\u041d\u0430\u0448 \u043e\u043d\u043b\u0430\u0439\u043d-\u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u0448\u0432\u0438\u0434\u043a\u043e \u0442\u0430 \u0442\u043e\u0447\u043d\u043e \u043e\u0431\u0447\u0438\u0441\u043b\u044e\u0454 \u0432\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a\u0438 <a title=\"\u0429\u043e \u0442\u0430\u043a\u0435 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u044f\" href=\"https:\/\/uk.wikipedia.org\/wiki\/%D0%9A%D0%B2%D0%B0%D0%B4%D1%80%D0%B0%D1%82%D0%BD%D0%B0_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8F\" target=\"_blank\" rel=\"nofollow noopener\">\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u0438\u0445 \u043c\u0430\u0442\u0440\u0438\u0446\u044c<\/a>. \u0417\u0430\u0432\u0434\u044f\u043a\u0438 \u0441\u043f\u0435\u0446\u0456\u0430\u043b\u044c\u043d\u0438\u043c \u0444\u043e\u0440\u043c\u0443\u043b\u0430\u043c \u0434\u043b\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u044c \u0440\u043e\u0437\u043c\u0456\u0440\u043e\u043c 2\u00d72 \u0456 3\u00d73 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0442\u0440\u0438\u043c\u0443\u0454\u0442\u044c\u0441\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u043e \u043c\u0438\u0442\u0442\u0454\u0432\u043e. \u0414\u043b\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u044c \u0440\u043e\u0437\u043c\u0456\u0440\u043e\u043c 4\u00d74 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f <a title=\"\u041e\u0431\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044f \u0432\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a\u0456\u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u044c \u0432\u0438\u0449\u0438\u0445 \u043f\u043e\u0440\u044f\u0434\u043a\u0456\u0432\" href=\"https:\/\/www.mathros.net.ua\/obchyslennja-vyznachnykiv-vysokyh-porjadkiv-za-shemoju-rozkladu-vyznachnyka-po-rjadku-chy-stovpci.html\">\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u043e\u0437\u043a\u043b\u0430\u0434\u0443 \u0437\u0430 \u043f\u0435\u0440\u0448\u0438\u043c \u0440\u044f\u0434\u043a\u043e\u043c<\/a>, \u0449\u043e \u0437\u0430\u0431\u0435\u0437\u043f\u0435\u0447\u0443\u0454 \u0435\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0456\u0441\u0442\u044c \u043e\u0431\u0447\u0438\u0441\u043b\u0435\u043d\u044c. \u0414\u043b\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u044c \u0440\u043e\u0437\u043c\u0456\u0440\u043e\u043c 5\u00d75\u20138\u00d78 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f <a title=\"\u0412\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a \u043c\u0430\u0442\u0440\u0438\u0446\u0456 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0413\u0430\u0443\u0441\u0430\" href=\"https:\/\/www.mathros.net.ua\/obchyslennja-vyznachnyka-matryci-rozmirnosti-nxn.html\">\u043c\u0435\u0442\u043e\u0434 \u0413\u0430\u0443\u0441\u0430<\/a>, \u044f\u043a\u0438\u0439 \u043f\u0435\u0440\u0435\u0442\u0432\u043e\u0440\u044e\u0454 \u043c\u0430\u0442\u0440\u0438\u0446\u044e \u0443 \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u0442\u0440\u0438\u043a\u0443\u0442\u043d\u0443 \u0444\u043e\u0440\u043c\u0443 \u0442\u0430 \u043e\u0431\u0447\u0438\u0441\u043b\u044e\u0454 \u0432\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a.',\r\n\r\n      text2:\r\n        '\u041a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u043f\u0440\u043e\u043f\u043e\u043d\u0443\u0454 \u0437\u0440\u0443\u0447\u043d\u0438\u0439 \u0456\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0442\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u043d\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e \u043f\u0440\u043e \u043e\u0431\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044f. \u041e\u0442\u0440\u0438\u043c\u0443\u0439\u0442\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0438 \u0448\u0432\u0438\u0434\u043a\u043e \u0442\u0430 \u0431\u0435\u0437\u043f\u043e\u043c\u0438\u043b\u043a\u043e\u0432\u043e!',\r\n\r\n      text3:\r\n        '\u0417\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u043f\u0440\u043e \u0441\u043a\u043b\u0430\u0434\u043d\u0456 \u0440\u043e\u0437\u0440\u0430\u0445\u0443\u043d\u043a\u0438 \u0432\u0440\u0443\u0447\u043d\u0443. \u041d\u0430\u0448 \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u043a\u0430\u0437\u0443\u0454 \u043a\u043e\u0436\u0435\u043d \u043a\u0440\u043e\u043a \u043e\u0431\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044f \u0432\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u0456, \u0449\u043e \u0434\u043e\u0437\u0432\u043e\u043b\u044f\u0454 \u0437\u0440\u043e\u0437\u0443\u043c\u0456\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441 \u0456 \u043e\u0442\u0440\u0438\u043c\u0430\u0442\u0438 \u0442\u043e\u0447\u043d\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.'\r\n\r\n    },\r\n\r\n\r\n    \/* =====================================================\r\n       English\r\n    ===================================================== *\/\r\n\r\n    en: {\r\n\r\n      title:\r\n        'Matrix Determinant Calculator: How Does It Work?',\r\n\r\n      imageAlt:\r\n        'Matrix determinant calculator',\r\n\r\n      text1:\r\n        'Our matrix determinant calculator quickly and accurately computes the determinant of <a title=\"What is a square matrix\" href=\"https:\/\/en.wikipedia.org\/wiki\/Square_matrix\" target=\"_blank\" rel=\"nofollow noopener\">square matrices<\/a>. Special formulas for 2\u00d72 and 3\u00d73 matrices provide results almost instantly. For 4\u00d74 matrices, the calculator uses <a title=\"Computing determinants of higher-order matrices\" href=\"https:\/\/www.mathros.net.ua\/en\/determinant-of-a-matrix.html\">cofactor expansion along the first row<\/a> to perform the calculation efficiently. For 5\u00d75\u20138\u00d78 matrices, it uses <a title=\"Determinant of a matrix using Gaussian elimination\" href=\"https:\/\/www.mathros.net.ua\/en\/determinant-of-a-matrix-using-gaussian-elimination.html\">Gaussian elimination<\/a>, transforming the matrix into upper triangular form and then computing the determinant.',\r\n\r\n      text2:\r\n        'The matrix determinant calculator offers a user-friendly interface and detailed information about each stage of the calculation. You can get results quickly and accurately.',\r\n\r\n      text3:\r\n        'Forget about lengthy manual calculations. Our matrix determinant calculator shows every step involved in calculating the determinant of a matrix, helping you understand the process while obtaining an accurate final answer.'\r\n\r\n    },\r\n\r\n\r\n    \/* =====================================================\r\n       \u0420\u0443\u0441\u0441\u043a\u0438\u0439\r\n    ===================================================== *\/\r\n\r\n    ru: {\r\n\r\n      title:\r\n        '\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043e\u043d\u043b\u0430\u0439\u043d: \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442?',\r\n\r\n      imageAlt:\r\n        '\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043e\u043d\u043b\u0430\u0439\u043d',\r\n\r\n      text1:\r\n        '\u041d\u0430\u0448 \u043e\u043d\u043b\u0430\u0439\u043d-\u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438 <a title=\"\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u0430\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0430\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%B2%D0%B0%D0%B4%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0\" target=\"_blank\" rel=\"nofollow noopener\">\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0445 \u043c\u0430\u0442\u0440\u0438\u0446<\/a>. \u0414\u043b\u044f \u043c\u0430\u0442\u0440\u0438\u0446 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 2\u00d72 \u0438 3\u00d73 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u0443\u043b\u044b, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e. \u0414\u043b\u044f \u043c\u0430\u0442\u0440\u0438\u0446 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 4\u00d74 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f <a title=\"\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u043c\u0430\u0442\u0440\u0438\u0446 \u0432\u044b\u0441\u0448\u0438\u0445 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\" href=\"https:\/\/www.mathros.net.ua\/ru\/opredelitel-matritsy.html\">\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435<\/a>, \u0447\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u043c\u0430\u0442\u0440\u0438\u0446 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 5\u00d75\u20138\u00d78 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <a title=\"\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0413\u0430\u0443\u0441\u0441\u0430\" href=\"https:\/\/www.mathros.net.ua\/ru\/opredelitel-matricy-metodom-gaussa.html\">\u043c\u0435\u0442\u043e\u0434 \u0413\u0430\u0443\u0441\u0441\u0430<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0439 \u0432\u0438\u0434 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0435\u0451 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c.',\r\n\r\n      text2:\r\n        '\u041e\u043d\u043b\u0430\u0439\u043d-\u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u0430\u0436\u0434\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439. \u041e\u043d \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0438 \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a.',\r\n\r\n      text3:\r\n        '\u0417\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u043e \u0442\u0440\u0443\u0434\u043e\u0451\u043c\u043a\u0438\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445 \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u041d\u0430\u0448 \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0448\u0430\u0433 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u044b, \u0447\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u043e\u0447\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.'\r\n\r\n    }\r\n\r\n  };\r\n\r\n\r\n  \/* =======================================================\r\n     \u041d\u043e\u0440\u043c\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u044f \u043c\u043e\u0432\u0438\r\n  ======================================================= *\/\r\n\r\n  function normalizeLanguage(value) {\r\n\r\n    const language =\r\n      String(\r\n        value || ''\r\n      )\r\n        .trim()\r\n        .toLowerCase()\r\n        .replace(\r\n          '_',\r\n          '-'\r\n        );\r\n\r\n\r\n    if (\r\n      language === 'uk' ||\r\n      language === 'ua' ||\r\n      language.startsWith('uk-') ||\r\n      language.startsWith('ua-')\r\n    ) {\r\n      return 'uk';\r\n    }\r\n\r\n\r\n    if (\r\n      language === 'en' ||\r\n      language.startsWith('en-')\r\n    ) {\r\n      return 'en';\r\n    }\r\n\r\n\r\n    if (\r\n      language === 'ru' ||\r\n      language.startsWith('ru-')\r\n    ) {\r\n      return 'ru';\r\n    }\r\n\r\n\r\n    return '';\r\n\r\n  }\r\n\r\n\r\n  \/* =======================================================\r\n     \u0412\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u043c\u043e\u0432\u0438\r\n  ======================================================= *\/\r\n\r\n  function detectLanguage() {\r\n\r\n    \/*\r\n     * 1. \u042f\u0432\u043d\u043e \u0437\u0430\u0434\u0430\u043d\u0430 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430 \u043c\u043e\u0432\u0430 \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u0430.\r\n     *\r\n     * \u041d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434:\r\n     * window.MathrosDetLang = 'en';\r\n     *\/\r\n    if (\r\n      typeof window !== 'undefined' &&\r\n      window.MathrosDetLang\r\n    ) {\r\n\r\n      const globalLanguage =\r\n        normalizeLanguage(\r\n          window.MathrosDetLang\r\n        );\r\n\r\n\r\n      if (globalLanguage) {\r\n        return globalLanguage;\r\n      }\r\n\r\n    }\r\n\r\n\r\n    \/*\r\n     * 2. data-lang \u0431\u043b\u043e\u043a\u0430.\r\n     *\/\r\n    const block =\r\n      document.getElementById(\r\n        'determinant-info-block'\r\n      );\r\n\r\n\r\n    if (block) {\r\n\r\n      const dataLanguage =\r\n        block.getAttribute(\r\n          'data-lang'\r\n        );\r\n\r\n\r\n      if (\r\n        dataLanguage &&\r\n        dataLanguage !== 'auto'\r\n      ) {\r\n\r\n        const blockLanguage =\r\n          normalizeLanguage(\r\n            dataLanguage\r\n          );\r\n\r\n\r\n        if (blockLanguage) {\r\n          return blockLanguage;\r\n        }\r\n\r\n      }\r\n\r\n    }\r\n\r\n\r\n    \/*\r\n     * 3. \u0410\u0442\u0440\u0438\u0431\u0443\u0442 <html lang>.\r\n     *\/\r\n    const htmlLanguage =\r\n      normalizeLanguage(\r\n        document.documentElement.lang\r\n      );\r\n\r\n\r\n    if (htmlLanguage) {\r\n      return htmlLanguage;\r\n    }\r\n\r\n\r\n    \/*\r\n     * 4. \u041f\u0435\u0440\u0448\u0438\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 URL:\r\n     *\r\n     * \/uk\/...\r\n     * \/en\/...\r\n     * \/ru\/...\r\n     *\/\r\n    const firstPathSegment =\r\n      String(\r\n        window.location.pathname || ''\r\n      )\r\n        .split('\/')\r\n        .filter(Boolean)[0]\r\n        ||\r\n        '';\r\n\r\n\r\n    const pathLanguage =\r\n      normalizeLanguage(\r\n        firstPathSegment\r\n      );\r\n\r\n\r\n    if (pathLanguage) {\r\n      return pathLanguage;\r\n    }\r\n\r\n\r\n    \/*\r\n     * 5. \u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430 \u0437\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f\u043c.\r\n     *\/\r\n    return 'uk';\r\n\r\n  }\r\n\r\n\r\n  \/* =======================================================\r\n     \u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u043d\u043d\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u0443\r\n  ======================================================= *\/\r\n\r\n  function applyTranslation() {\r\n\r\n    const language =\r\n      detectLanguage();\r\n\r\n\r\n    const dictionary =\r\n      translations[language] ||\r\n      translations.uk;\r\n\r\n\r\n    const title =\r\n      document.getElementById(\r\n        'determinant-info-title'\r\n      );\r\n\r\n\r\n    const image =\r\n      document.getElementById(\r\n        'determinant-info-image'\r\n      );\r\n\r\n\r\n    const text1 =\r\n      document.getElementById(\r\n        'determinant-info-text-1'\r\n      );\r\n\r\n\r\n    const text2 =\r\n      document.getElementById(\r\n        'determinant-info-text-2'\r\n      );\r\n\r\n\r\n    const text3 =\r\n      document.getElementById(\r\n        'determinant-info-text-3'\r\n      );\r\n\r\n\r\n    if (title) {\r\n\r\n      title.textContent =\r\n        dictionary.title;\r\n\r\n    }\r\n\r\n\r\n    if (image) {\r\n\r\n      image.alt =\r\n        dictionary.imageAlt;\r\n\r\n    }\r\n\r\n\r\n    \/*\r\n     * \u041f\u0435\u0440\u0448\u0438\u0439 \u0430\u0431\u0437\u0430\u0446 \u043c\u0456\u0441\u0442\u0438\u0442\u044c \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f.\r\n     *\/\r\n    if (text1) {\r\n\r\n      text1.innerHTML =\r\n        dictionary.text1;\r\n\r\n    }\r\n\r\n\r\n    \/*\r\n     * \u0414\u0440\u0443\u0433\u0438\u0439 \u0430\u0431\u0437\u0430\u0446 \u043c\u0456\u0441\u0442\u0438\u0442\u044c \u043b\u0438\u0448\u0435 \u0442\u0435\u043a\u0441\u0442.\r\n     *\/\r\n    if (text2) {\r\n\r\n      text2.textContent =\r\n        dictionary.text2;\r\n\r\n    }\r\n\r\n\r\n    \/*\r\n     * \u0422\u0440\u0435\u0442\u0456\u0439 \u0430\u0431\u0437\u0430\u0446 \u043c\u0456\u0441\u0442\u0438\u0442\u044c \u043b\u0438\u0448\u0435 \u0442\u0435\u043a\u0441\u0442.\r\n     *\/\r\n    if (text3) {\r\n\r\n      text3.textContent =\r\n        dictionary.text3;\r\n\r\n    }\r\n\r\n  }\r\n\r\n\r\n  \/* =======================================================\r\n     Init\r\n  ======================================================= *\/\r\n\r\n  if (\r\n    document.readyState === 'loading'\r\n  ) {\r\n\r\n    document.addEventListener(\r\n      'DOMContentLoaded',\r\n      applyTranslation\r\n    );\r\n\r\n  } else {\r\n\r\n    applyTranslation();\r\n\r\n  }\r\n\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u041e\u0442\u0440\u0438\u043c\u0430\u0439\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u0432\u0438\u0437\u043d\u0430\u0447\u043d\u0438\u043a\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u0456 \u0437\u0430 \u043a\u0456\u043b\u044c\u043a\u0430 \u0441\u0435\u043a\u0443\u043d\u0434, \u0441\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u0432\u0448\u0438\u0441\u044c \u043d\u0430\u0448\u0438\u043c \u043e\u043d\u043b\u0430\u0439\u043d-\u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u0420\u043e\u0437\u043c\u0456\u0440\u043d\u0456\u0441\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0456 2\u00d72 3\u00d73 4\u00d74 5\u00d75 6\u00d76 7\u00d77 8\u00d78 \u041c\u0430\u0442\u0440\u0438\u0446\u044f<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-centered.php","meta":{"footnotes":""},"class_list":["post-1665","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.mathros.net.ua\/ru\/wp-json\/wp\/v2\/pages\/1665"}],"collection":[{"href":"https:\/\/www.mathros.net.ua\/ru\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.mathros.net.ua\/ru\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.mathros.net.ua\/ru\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mathros.net.ua\/ru\/wp-json\/wp\/v2\/comments?post=1665"}],"version-history":[{"count":31,"href":"https:\/\/www.mathros.net.ua\/ru\/wp-json\/wp\/v2\/pages\/1665\/revisions"}],"predecessor-version":[{"id":3987,"href":"https:\/\/www.mathros.net.ua\/ru\/wp-json\/wp\/v2\/pages\/1665\/revisions\/3987"}],"wp:attachment":[{"href":"https:\/\/www.mathros.net.ua\/ru\/wp-json\/wp\/v2\/media?parent=1665"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}