diff options
| -rw-r--r-- | index.html | 154 | ||||
| -rw-r--r-- | script.js | 19 | ||||
| -rw-r--r-- | src/access0.png | bin | 0 -> 104196 bytes | |||
| -rw-r--r-- | src/access1.png | bin | 0 -> 75898 bytes | |||
| -rw-r--r-- | src/access2.png | bin | 0 -> 50322 bytes | |||
| -rw-r--r-- | src/cert1.png | bin | 0 -> 65053 bytes | |||
| -rw-r--r-- | src/cert2.png | bin | 0 -> 44811 bytes | |||
| -rw-r--r-- | src/connect1.png | bin | 0 -> 73126 bytes | |||
| -rw-r--r-- | src/connect2.png | bin | 0 -> 98059 bytes | |||
| -rw-r--r-- | src/connect3.png | bin | 0 -> 74326 bytes | |||
| -rw-r--r-- | src/connect4.png | bin | 0 -> 65112 bytes | |||
| -rw-r--r-- | src/connect5.png | bin | 0 -> 61142 bytes | |||
| -rw-r--r-- | src/download.png | bin | 0 -> 124409 bytes | |||
| -rw-r--r-- | style.css | 164 |
14 files changed, 337 insertions, 0 deletions
diff --git a/index.html b/index.html new file mode 100644 index 0000000..63961f6 --- /dev/null +++ b/index.html | |||
| @@ -0,0 +1,154 @@ | |||
| 1 | <!doctype html> | ||
| 2 | <html lang="ru"> | ||
| 3 | <head> | ||
| 4 | <meta charset="UTF-8" /> | ||
| 5 | <meta http-equiv="X-UA-Compatible" content="IE=edge" /> | ||
| 6 | <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||
| 7 | |||
| 8 | <title>Гайд по Mumble</title> | ||
| 9 | |||
| 10 | <script src="script.js"></script> | ||
| 11 | <link rel="stylesheet" href="style.css" /> | ||
| 12 | |||
| 13 | <link rel="preconnect" href="https://fonts.googleapis.com" /> | ||
| 14 | <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> | ||
| 15 | <link | ||
| 16 | href="https://fonts.googleapis.com/css2?family=Noto+Sans:ital,wdth,wght@0,62.5..100,100..900;1,62.5..100,100..900&display=swap" | ||
| 17 | rel="stylesheet" | ||
| 18 | /> | ||
| 19 | </head> | ||
| 20 | |||
| 21 | <body> | ||
| 22 | <main> | ||
| 23 | <h1>Гайд по Mumble</h1> | ||
| 24 | <p>Гайд для тех, кто хочет дискорд, только рабочий.</p> | ||
| 25 | </main> | ||
| 26 | |||
| 27 | <section> | ||
| 28 | <div class="step-header"> | ||
| 29 | <span class="step-number">1</span> | ||
| 30 | <h2>Установка</h2> | ||
| 31 | </div> | ||
| 32 | <p> | ||
| 33 | Для начала тебе нужен сам клиент. Да, он выглядит сурово, зато работает надежно. | ||
| 34 | Скачай Mumble с | ||
| 35 | <a href="https://www.mumble.info/" target="_blank">официального сайта</a>. | ||
| 36 | </p> | ||
| 37 | <div class="gallery single"> | ||
| 38 | <img src="src/download.png" alt="Кнопка скачать" loading="lazy" /> | ||
| 39 | </div> | ||
| 40 | </section> | ||
| 41 | |||
| 42 | <section> | ||
| 43 | <div class="step-header"> | ||
| 44 | <span class="step-number">2</span> | ||
| 45 | <h2>Настройка звука</h2> | ||
| 46 | </div> | ||
| 47 | <p>Запусти Mumble. Сразу откроется мастер настройки звука. <br /></p> | ||
| 48 | <div class="alert"> | ||
| 49 | <strong>Не прокликивай всё подряд кнопкой «Далее» не глядя!</strong> Настрой | ||
| 50 | микрофон нормально. Мы хотим слышать твой голос, а не то, как ты яростно долбишь по | ||
| 51 | клавиатуре. | ||
| 52 | </div> | ||
| 53 | </section> | ||
| 54 | |||
| 55 | <section> | ||
| 56 | <div class="step-header"> | ||
| 57 | <span class="step-number">3</span> | ||
| 58 | <h2>Сертификат</h2> | ||
| 59 | </div> | ||
| 60 | <p> | ||
| 61 | Mumble не использует логины и пароли в привычном виде. Он использует сертификаты. | ||
| 62 | <br />Перейди в <strong>«Настройки» > «Мастер сертификатов»</strong> и выбери | ||
| 63 | <strong>«Сохранить текущий сертификат»</strong>. | ||
| 64 | </p> | ||
| 65 | <div class="alert"> | ||
| 66 | <strong>Не теряй этот файл!</strong> Сохрани его в надежное место (Избранное в | ||
| 67 | Telegram). Если переустановишь систему и потеряешь сертификат — потеряешь доступ к | ||
| 68 | своим правам на сервере (ну если решишь залогиниться). | ||
| 69 | </div> | ||
| 70 | <div class="gallery"> | ||
| 71 | <img src="src/cert1.png" alt="Мастер сертификатов" loading="lazy" /> | ||
| 72 | <img src="src/cert2.png" alt="Сохранить текущий сертификат" loading="lazy" /> | ||
| 73 | </div> | ||
| 74 | </section> | ||
| 75 | |||
| 76 | <section> | ||
| 77 | <div class="step-header"> | ||
| 78 | <span class="step-number">4</span> | ||
| 79 | <h2>Подключение к серверу</h2> | ||
| 80 | </div> | ||
| 81 | <p>Пора заходить. Действуй по инструкции:</p> | ||
| 82 | <ol class="instructions-list"> | ||
| 83 | <li>Открой меню <strong>«Сервер» > «Подключиться»</strong>.</li> | ||
| 84 | <li> | ||
| 85 | В поле поиска скопируй этот адрес: | ||
| 86 | <br /> | ||
| 87 | <span class="copy" copy-text="Voice chat on igorek.dev"> | ||
| 88 | Voice chat on igorek.dev | ||
| 89 | </span> | ||
| 90 | </li> | ||
| 91 | <li> | ||
| 92 | Нажми на найденный сервер правой кнопкой мыши и | ||
| 93 | <strong>«Добавить в избранное»</strong>. | ||
| 94 | </li> | ||
| 95 | <li> | ||
| 96 | Перейди в раздел «Избранное» (сердечко), нажми на сервер правой кнопкой и | ||
| 97 | <strong>«Редактировать»</strong>. | ||
| 98 | </li> | ||
| 99 | <li>Придумай себе нормальное <strong>«Имя пользователя»</strong> и жми «ОК».</li> | ||
| 100 | <li>Жми <strong>«Подключиться»</strong>.</li> | ||
| 101 | </ol> | ||
| 102 | <div class="gallery grid-gallery"> | ||
| 103 | <img src="src/connect1.png" alt="Подключиться" /> | ||
| 104 | <img src="src/connect2.png" alt="Добавить в избранное" /> | ||
| 105 | <img src="src/connect3.png" alt="Редактировать" /> | ||
| 106 | <img src="src/connect4.png" alt="Окно редактирования сервера" /> | ||
| 107 | <img src="src/connect5.png" alt="Кнопка Подключиться" /> | ||
| 108 | </div> | ||
| 109 | </section> | ||
| 110 | |||
| 111 | <section> | ||
| 112 | <div class="step-header"> | ||
| 113 | <span class="step-number">5</span> | ||
| 114 | <h2>Токен доступа (Секретный пароль)</h2> | ||
| 115 | </div> | ||
| 116 | <p> | ||
| 117 | Ты зашел, но на губах печать молчания? Это нормально. Чтобы говорить, нужно знать | ||
| 118 | секретное слово. | ||
| 119 | </p> | ||
| 120 | <ol class="instructions-list"> | ||
| 121 | <li>Иди в меню <strong>«Сервер» > «Access Tokens»</strong>.</li> | ||
| 122 | <li>Нажми кнопку <strong>«Добавить»</strong>.</li> | ||
| 123 | <li> | ||
| 124 | Вставь этот токен (кликни чтобы скопировать): | ||
| 125 | <span class="copy" copy-text="premium-skype2">premium-skype2</span> | ||
| 126 | </li> | ||
| 127 | <li>Не забудь нажать <strong>Enter</strong>, а затем <strong>ОК</strong>.</li> | ||
| 128 | </ol> | ||
| 129 | <div class="gallery"> | ||
| 130 | <img src="src/access0.png" alt="Нельзя говорить" /> | ||
| 131 | <img src="src/access1.png" alt="Открыть меню" /> | ||
| 132 | <img src="src/access2.png" alt="Добавить токен" /> | ||
| 133 | </div> | ||
| 134 | </section> | ||
| 135 | |||
| 136 | <section> | ||
| 137 | <div class="step-header"> | ||
| 138 | <span class="step-number">6</span> | ||
| 139 | <h2>Переподключение</h2> | ||
| 140 | </div> | ||
| 141 | <p> | ||
| 142 | Ввел токен, а говорить всё ещё нельзя? Висит иконка «губы на замке»? | ||
| 143 | <br /> | ||
| 144 | Спокойно! Сервер проверяет твой пропуск только на входе. Нужно выйти и зайти | ||
| 145 | нормально. | ||
| 146 | </p> | ||
| 147 | <ol class="instructions-list"> | ||
| 148 | <li>Жми <strong>«Сервер» > «Отключиться»</strong>.</li> | ||
| 149 | <li>Снова жми <strong>«Сервер» > «Подключиться»</strong> и залетай обратно.</li> | ||
| 150 | <li>Теперь магия должна сработать, и ты сможешь говорить. Добро пожаловать!</li> | ||
| 151 | </ol> | ||
| 152 | </section> | ||
| 153 | </body> | ||
| 154 | </html> | ||
diff --git a/script.js b/script.js new file mode 100644 index 0000000..9afcb2c --- /dev/null +++ b/script.js | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | window.onload = () => { | ||
| 2 | document.querySelectorAll(".copy").forEach((element) => { | ||
| 3 | const tooltip = document.createElement("span"); | ||
| 4 | tooltip.textContent = " [copy]"; | ||
| 5 | tooltip.style.fontSize = "0.8em"; | ||
| 6 | tooltip.style.opacity = "0.7"; | ||
| 7 | element.appendChild(tooltip); | ||
| 8 | |||
| 9 | element.addEventListener("click", () => { | ||
| 10 | try { | ||
| 11 | navigator.clipboard.writeText(element.attributes["copy-text"]?.value); | ||
| 12 | tooltip.textContent = " [copied]"; | ||
| 13 | } catch (error) { | ||
| 14 | tooltip.textContent = " [error]"; | ||
| 15 | } | ||
| 16 | setTimeout(() => (tooltip.textContent = " [copy]"), 1000); | ||
| 17 | }); | ||
| 18 | }); | ||
| 19 | }; | ||
diff --git a/src/access0.png b/src/access0.png new file mode 100644 index 0000000..4858940 --- /dev/null +++ b/src/access0.png | |||
| Binary files differ | |||
diff --git a/src/access1.png b/src/access1.png new file mode 100644 index 0000000..c41b08f --- /dev/null +++ b/src/access1.png | |||
| Binary files differ | |||
diff --git a/src/access2.png b/src/access2.png new file mode 100644 index 0000000..ec1a38f --- /dev/null +++ b/src/access2.png | |||
| Binary files differ | |||
diff --git a/src/cert1.png b/src/cert1.png new file mode 100644 index 0000000..c85750c --- /dev/null +++ b/src/cert1.png | |||
| Binary files differ | |||
diff --git a/src/cert2.png b/src/cert2.png new file mode 100644 index 0000000..74b0e16 --- /dev/null +++ b/src/cert2.png | |||
| Binary files differ | |||
diff --git a/src/connect1.png b/src/connect1.png new file mode 100644 index 0000000..a4d9375 --- /dev/null +++ b/src/connect1.png | |||
| Binary files differ | |||
diff --git a/src/connect2.png b/src/connect2.png new file mode 100644 index 0000000..594fd4b --- /dev/null +++ b/src/connect2.png | |||
| Binary files differ | |||
diff --git a/src/connect3.png b/src/connect3.png new file mode 100644 index 0000000..00a28c3 --- /dev/null +++ b/src/connect3.png | |||
| Binary files differ | |||
diff --git a/src/connect4.png b/src/connect4.png new file mode 100644 index 0000000..6088665 --- /dev/null +++ b/src/connect4.png | |||
| Binary files differ | |||
diff --git a/src/connect5.png b/src/connect5.png new file mode 100644 index 0000000..3a1775e --- /dev/null +++ b/src/connect5.png | |||
| Binary files differ | |||
diff --git a/src/download.png b/src/download.png new file mode 100644 index 0000000..7ee1bfb --- /dev/null +++ b/src/download.png | |||
| Binary files differ | |||
diff --git a/style.css b/style.css new file mode 100644 index 0000000..035e238 --- /dev/null +++ b/style.css | |||
| @@ -0,0 +1,164 @@ | |||
| 1 | @import url("https://fonts.googleapis.com/css2?family=Noto+Sans:ital,wdth,wght@0,62.5..100,100..900;1,62.5..100,100..900&display=swap"); | ||
| 2 | |||
| 3 | @media (prefers-color-scheme: light) { | ||
| 4 | :root { | ||
| 5 | --color-primary: rgb(0 104 119); | ||
| 6 | --color-on-primary: rgb(255 255 255); | ||
| 7 | |||
| 8 | --color-secondary: rgb(75 98 104); | ||
| 9 | |||
| 10 | --color-surface: rgb(245 250 252); | ||
| 11 | --color-surface-container: rgb(233 239 240); | ||
| 12 | --color-on-surface: rgb(23 29 30); | ||
| 13 | |||
| 14 | --color-alert-bg: rgb(254 242 242); | ||
| 15 | --color-alert-border: rgb(220 38 38); | ||
| 16 | --color-alert-text: rgb(153 27 27); | ||
| 17 | } | ||
| 18 | } | ||
| 19 | |||
| 20 | @media (prefers-color-scheme: dark) { | ||
| 21 | :root { | ||
| 22 | --color-primary: rgb(131 210 228); | ||
| 23 | --color-on-primary: rgb(0 54 63); | ||
| 24 | |||
| 25 | --color-secondary: rgb(178 203 209); | ||
| 26 | |||
| 27 | --color-surface: rgb(14 20 22); | ||
| 28 | --color-surface-container: rgb(27 33 34); | ||
| 29 | --color-on-surface: rgb(222 227 229); | ||
| 30 | |||
| 31 | --color-alert-bg: rgb(69 10 10); | ||
| 32 | --color-alert-border: rgb(127 29 29); | ||
| 33 | --color-alert-text: rgb(254 202 202); | ||
| 34 | } | ||
| 35 | } | ||
| 36 | |||
| 37 | * { | ||
| 38 | transition-duration: 0.5s; | ||
| 39 | transition-property: background, color; | ||
| 40 | transition-timing-function: ease-in-out; | ||
| 41 | } | ||
| 42 | |||
| 43 | body { | ||
| 44 | font-family: "Noto Sans", sans-serif; | ||
| 45 | background-color: var(--color-surface); | ||
| 46 | color: var(--color-on-surface); | ||
| 47 | margin: 0 auto; | ||
| 48 | padding: 0 0.5rem; | ||
| 49 | |||
| 50 | max-width: 50rem; | ||
| 51 | } | ||
| 52 | |||
| 53 | main, | ||
| 54 | section, | ||
| 55 | footer { | ||
| 56 | background-color: var(--color-surface-container); | ||
| 57 | border-radius: 2rem; | ||
| 58 | margin: 1rem 0; | ||
| 59 | padding: 1.5rem; | ||
| 60 | } | ||
| 61 | |||
| 62 | main > :first-child, | ||
| 63 | section > :first-child, | ||
| 64 | footer > :first-child { | ||
| 65 | margin-top: 0; | ||
| 66 | } | ||
| 67 | |||
| 68 | main > :last-child, | ||
| 69 | section > :last-child, | ||
| 70 | footer > :last-child { | ||
| 71 | margin-bottom: 0; | ||
| 72 | } | ||
| 73 | |||
| 74 | h1 { | ||
| 75 | font-size: 2rem; | ||
| 76 | margin-bottom: 0.5rem; | ||
| 77 | } | ||
| 78 | |||
| 79 | h2 { | ||
| 80 | font-size: 1.5rem; | ||
| 81 | } | ||
| 82 | |||
| 83 | a, | ||
| 84 | .copy { | ||
| 85 | color: var(--color-primary); | ||
| 86 | text-decoration: none; | ||
| 87 | font-weight: bold; | ||
| 88 | } | ||
| 89 | |||
| 90 | .copy:hover { | ||
| 91 | cursor: pointer; | ||
| 92 | color: var(--color-secondary); | ||
| 93 | } | ||
| 94 | |||
| 95 | .step-header { | ||
| 96 | display: flex; | ||
| 97 | align-items: center; | ||
| 98 | gap: 1rem; | ||
| 99 | margin-bottom: 1rem; | ||
| 100 | } | ||
| 101 | |||
| 102 | .step-number { | ||
| 103 | background-color: var(--color-primary); | ||
| 104 | color: var(--color-on-primary); | ||
| 105 | width: 2rem; | ||
| 106 | height: 2rem; | ||
| 107 | border-radius: 50%; | ||
| 108 | display: flex; | ||
| 109 | align-items: center; | ||
| 110 | justify-content: center; | ||
| 111 | font-weight: bold; | ||
| 112 | flex-shrink: 0; | ||
| 113 | } | ||
| 114 | |||
| 115 | ol.instructions-list { | ||
| 116 | padding-left: 1.5rem; | ||
| 117 | } | ||
| 118 | |||
| 119 | ol.instructions-list li { | ||
| 120 | margin-bottom: 0.5rem; | ||
| 121 | } | ||
| 122 | |||
| 123 | .alert { | ||
| 124 | background-color: var(--color-alert-bg); | ||
| 125 | border: 1px solid var(--color-alert-border); | ||
| 126 | color: var(--color-alert-text); | ||
| 127 | padding: 1rem; | ||
| 128 | border-radius: 1rem; | ||
| 129 | margin-bottom: 1.5rem; | ||
| 130 | font-weight: 500; | ||
| 131 | } | ||
| 132 | |||
| 133 | .gallery { | ||
| 134 | display: flex; | ||
| 135 | gap: 1rem; | ||
| 136 | flex-wrap: wrap; | ||
| 137 | margin-top: 1.5rem; | ||
| 138 | } | ||
| 139 | |||
| 140 | .gallery img { | ||
| 141 | max-height: 250px; | ||
| 142 | width: auto; | ||
| 143 | max-width: 100%; | ||
| 144 | border-radius: 1rem; | ||
| 145 | border: 2px solid var(--color-surface); | ||
| 146 | } | ||
| 147 | |||
| 148 | @media (max-width: 600px) { | ||
| 149 | .gallery img { | ||
| 150 | width: 100%; | ||
| 151 | height: auto; | ||
| 152 | max-height: unset; | ||
| 153 | } | ||
| 154 | } | ||
| 155 | |||
| 156 | main h1, | ||
| 157 | main p { | ||
| 158 | text-align: center; | ||
| 159 | } | ||
| 160 | |||
| 161 | footer p { | ||
| 162 | text-align: center; | ||
| 163 | opacity: 0.7; | ||
| 164 | } | ||
