Подготовить сайт к запуску

This commit is contained in:
2026-05-17 19:09:30 +03:00
parent ebea196828
commit dcdc040918
47 changed files with 2456 additions and 0 deletions
@@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" width="860" height="460" viewBox="0 0 860 460" role="img" aria-label="Bitrix API: SKU">
<rect width="860" height="460" fill="#f7f4ed"/>
<rect x="24" y="24" width="812" height="412" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="812" height="14" rx="7" fill="#1d4ed8"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">Bitrix API: SKU</text>
<text x="56" y="116" font-size="16" fill="#52606d">Создание торгового предложения и привязка к товару</text>
<rect x="60" y="140" width="740" height="248" rx="14" fill="#111827" stroke="#111827" stroke-width="2"/>
<circle cx="92" cy="164" r="6" fill="#ef4444"/><circle cx="114" cy="164" r="6" fill="#f59e0b"/><circle cx="136" cy="164" r="6" fill="#22c55e"/>
<text x="84" y="178" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace">CModule::IncludeModule(&quot;iblock&quot;);</text><text x="84" y="206" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace">$el = new CIBlockElement;</text><text x="84" y="234" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace">$id = $el-&gt;Add($fields);</text><text x="84" y="262" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace">CPrice::SetBasePrice($id, 990);</text>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1030" height="720" viewBox="0 0 1030 720" role="img" aria-label="Редактор картинок Bitrix">
<rect width="1030" height="720" fill="#f7f4ed"/>
<rect x="24" y="24" width="982" height="672" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="982" height="14" rx="7" fill="#1d4ed8"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">Редактор картинок Bitrix</text>
<text x="56" y="116" font-size="16" fill="#52606d">Читаемый интерфейс FileInput</text>
<rect x="70" y="150" width="890" height="470" rx="10" fill="#eef3fb" stroke="#bfccdc" stroke-width="2"/><rect x="110" y="200" width="520" height="360" rx="8" fill="#ffffff" stroke="#9aa8b8" stroke-width="2"/><path d="M160 494l132-150 102 110 70-76 116 116z" fill="#93c5fd"/><circle cx="484" cy="286" r="46" fill="#fde68a"/><rect x="668" y="200" width="238" height="56" rx="8" fill="#fff" stroke="#d1d8e0" stroke-width="2"/><text x="690" y="236" font-size="20" fill="#1f2933">Обрезать</text><rect x="668" y="278" width="238" height="56" rx="8" fill="#fff" stroke="#d1d8e0" stroke-width="2"/><text x="690" y="314" font-size="20" fill="#1f2933">Повернуть</text><rect x="668" y="356" width="238" height="56" rx="8" fill="#1d4ed8" stroke="#1d4ed8" stroke-width="2"/><text x="710" y="392" font-size="20" font-weight="700" fill="#fff">Сохранить</text>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="860" height="420" viewBox="0 0 860 420" role="img" aria-label="Bitrix photo editor">
<rect width="860" height="420" fill="#f7f4ed"/>
<rect x="24" y="24" width="812" height="372" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="812" height="14" rx="7" fill="#1d4ed8"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">Bitrix photo editor</text>
<text x="56" y="116" font-size="16" fill="#52606d">Встроенный FileInput для загрузки и редактирования картинки</text>
<rect x="64" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="84" y="229" font-size="17" font-weight="700" fill="#1f2933">FileInput</text><text x="84" y="258" font-size="13" fill="#52606d">create</text><path d="M196 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M232 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="242" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="262" y="229" font-size="17" font-weight="700" fill="#1f2933">upload</text><text x="262" y="258" font-size="13" fill="#52606d">image</text><path d="M374 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M410 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="420" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="440" y="229" font-size="17" font-weight="700" fill="#1f2933">edit</text><text x="440" y="258" font-size="13" fill="#52606d">crop</text><path d="M552 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M588 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="598" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="618" y="229" font-size="17" font-weight="700" fill="#1f2933">save</text><text x="618" y="258" font-size="13" fill="#52606d">file ID</text>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" width="860" height="460" viewBox="0 0 860 460" role="img" aria-label="Bitrix API: translit">
<rect width="860" height="460" fill="#f7f4ed"/>
<rect x="24" y="24" width="812" height="412" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="812" height="14" rx="7" fill="#0f766e"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">Bitrix API: translit</text>
<text x="56" y="116" font-size="16" fill="#52606d">Символьный код из имени элемента</text>
<rect x="60" y="140" width="740" height="248" rx="14" fill="#111827" stroke="#111827" stroke-width="2"/>
<circle cx="92" cy="164" r="6" fill="#ef4444"/><circle cx="114" cy="164" r="6" fill="#f59e0b"/><circle cx="136" cy="164" r="6" fill="#22c55e"/>
<text x="84" y="178" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace">$code = CUtil::translit($name, &quot;ru&quot;, [</text><text x="84" y="206" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace"> &quot;replace_space&quot; =&gt; &quot;-&quot;,</text><text x="84" y="234" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace"> &quot;replace_other&quot; =&gt; &quot;-&quot;,</text><text x="84" y="262" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace">]);</text>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="480" viewBox="0 0 900 480" role="img" aria-label="Планировщик против рекламного запуска">
<rect width="900" height="480" fill="#f7f4ed"/>
<rect x="24" y="24" width="852" height="432" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="852" height="14" rx="7" fill="#2f6fed"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">Планировщик против рекламного запуска</text>
<text x="56" y="116" font-size="16" fill="#52606d">Схема поиска вредного задания</text>
<rect x="86" y="168" width="728" height="178" rx="12" fill="#eef3fb" stroke="#bfccdc" stroke-width="2"/><text x="128" y="230" font-size="38" font-weight="700" fill="#1f2933" font-family="monospace">taskschd.msc</text><text x="128" y="286" font-size="28" fill="#b42318" font-family="monospace">firefox.exe + URL</text>
</svg>

After

Width:  |  Height:  |  Size: 991 B

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="860" height="420" viewBox="0 0 860 420" role="img" aria-label="NewCTFE">
<rect width="860" height="420" fill="#f7f4ed"/>
<rect x="24" y="24" width="812" height="372" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="812" height="14" rx="7" fill="#7c3aed"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">NewCTFE</text>
<text x="56" y="116" font-size="16" fill="#52606d">Вычисления во время компиляции без лишней магии</text>
<rect x="64" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="84" y="229" font-size="17" font-weight="700" fill="#1f2933">AST</text><text x="84" y="258" font-size="13" fill="#52606d">input</text><path d="M196 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M232 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="242" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="262" y="229" font-size="17" font-weight="700" fill="#1f2933">CTFE VM</text><text x="262" y="258" font-size="13" fill="#52606d">evaluate</text><path d="M374 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M410 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="420" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="440" y="229" font-size="17" font-weight="700" fill="#1f2933">Result</text><text x="440" y="258" font-size="13" fill="#52606d">constant</text><path d="M552 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M588 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="598" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="618" y="229" font-size="17" font-weight="700" fill="#1f2933">Binary</text><text x="618" y="258" font-size="13" fill="#52606d">ready</text>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="860" height="420" viewBox="0 0 860 420" role="img" aria-label="D GC under the hood">
<rect width="860" height="420" fill="#f7f4ed"/>
<rect x="24" y="24" width="812" height="372" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="812" height="14" rx="7" fill="#0f766e"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">D GC under the hood</text>
<text x="56" y="116" font-size="16" fill="#52606d">Пулы, страницы, маркировка и очистка</text>
<rect x="64" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="84" y="229" font-size="17" font-weight="700" fill="#1f2933">Pool</text><text x="84" y="258" font-size="13" fill="#52606d">memory</text><path d="M196 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M232 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="242" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="262" y="229" font-size="17" font-weight="700" fill="#1f2933">Mark</text><text x="262" y="258" font-size="13" fill="#52606d">scan</text><path d="M374 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M410 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="420" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="440" y="229" font-size="17" font-weight="700" fill="#1f2933">Sweep</text><text x="440" y="258" font-size="13" fill="#52606d">free</text><path d="M552 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M588 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="598" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="618" y="229" font-size="17" font-weight="700" fill="#1f2933">Reuse</text><text x="618" y="258" font-size="13" fill="#52606d">alloc</text>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="860" height="420" viewBox="0 0 860 420" role="img" aria-label="DMD x64 под Windows">
<rect width="860" height="420" fill="#f7f4ed"/>
<rect x="24" y="24" width="812" height="372" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="812" height="14" rx="7" fill="#7c2d12"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">DMD x64 под Windows</text>
<text x="56" y="116" font-size="16" fill="#52606d">Не смешиваем OMF и COFF библиотеки</text>
<rect x="64" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="84" y="229" font-size="17" font-weight="700" fill="#1f2933">D source</text><text x="84" y="258" font-size="13" fill="#52606d">main.d</text><path d="M196 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M232 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="242" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="262" y="229" font-size="17" font-weight="700" fill="#1f2933">dmd -m64</text><text x="262" y="258" font-size="13" fill="#52606d">compiler</text><path d="M374 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M410 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="420" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="440" y="229" font-size="17" font-weight="700" fill="#1f2933">COFF libs</text><text x="440" y="258" font-size="13" fill="#52606d">x64</text><path d="M552 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M588 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="598" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="618" y="229" font-size="17" font-weight="700" fill="#1f2933">EXE</text><text x="618" y="258" font-size="13" fill="#52606d">win64</text>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="860" height="420" viewBox="0 0 860 420" role="img" aria-label="Firefox timeout">
<rect width="860" height="420" fill="#f7f4ed"/>
<rect x="24" y="24" width="812" height="372" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="812" height="14" rx="7" fill="#ea580c"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">Firefox timeout</text>
<text x="56" y="116" font-size="16" fill="#52606d">Когда браузеру нужно ждать дольше</text>
<rect x="80" y="170" width="700" height="80" rx="12" fill="#fff7ed" stroke="#fed7aa" stroke-width="2"/><text x="112" y="222" font-size="28" font-weight="700" fill="#9a3412" font-family="monospace">network.http.response.timeout = 600</text><rect x="80" y="286" width="520" height="26" rx="13" fill="#fed7aa" stroke="#fed7aa" stroke-width="2"/><rect x="80" y="286" width="390" height="26" rx="13" fill="#ea580c" stroke="#ea580c" stroke-width="2"/><text x="80" y="352" font-size="18" fill="#52606d">Для административных операций, а не для маскировки медленного сайта.</text>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="520" viewBox="0 0 900 520" role="img" aria-label="GC D: большие объекты">
<rect width="900" height="520" fill="#f7f4ed"/>
<rect x="24" y="24" width="852" height="472" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="852" height="14" rx="7" fill="#c2410c"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">GC D: большие объекты</text>
<text x="56" y="116" font-size="16" fill="#52606d">Метаданные растут вместе с диапазоном страниц</text>
<rect x="86" y="166" width="728" height="92" rx="10" fill="#fff7ed" stroke="#fdba74" stroke-width="2"/>
<text x="112" y="222" font-size="25" font-weight="700" fill="#9a3412" font-family="monospace">object &gt; 100 MB</text>
<rect x="86" y="310" width="728" height="58" rx="8" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/>
<rect x="108" y="323" width="24" height="32" rx="4" fill="#fb923c"/><rect x="146" y="323" width="24" height="32" rx="4" fill="#fb923c"/><rect x="184" y="323" width="24" height="32" rx="4" fill="#fb923c"/><rect x="222" y="323" width="24" height="32" rx="4" fill="#fb923c"/><rect x="260" y="323" width="24" height="32" rx="4" fill="#fb923c"/><rect x="298" y="323" width="24" height="32" rx="4" fill="#fb923c"/><rect x="336" y="323" width="24" height="32" rx="4" fill="#fb923c"/><rect x="374" y="323" width="24" height="32" rx="4" fill="#fb923c"/><rect x="412" y="323" width="24" height="32" rx="4" fill="#fb923c"/><rect x="450" y="323" width="24" height="32" rx="4" fill="#fb923c"/><rect x="488" y="323" width="24" height="32" rx="4" fill="#fb923c"/><rect x="526" y="323" width="24" height="32" rx="4" fill="#cbd5e1"/><rect x="564" y="323" width="24" height="32" rx="4" fill="#cbd5e1"/><rect x="602" y="323" width="24" height="32" rx="4" fill="#cbd5e1"/><rect x="640" y="323" width="24" height="32" rx="4" fill="#cbd5e1"/><rect x="678" y="323" width="24" height="32" rx="4" fill="#cbd5e1"/><rect x="716" y="323" width="24" height="32" rx="4" fill="#cbd5e1"/><rect x="754" y="323" width="24" height="32" rx="4" fill="#cbd5e1"/>
<text x="86" y="410" font-size="17" fill="#52606d">Один большой объект может оставить заметный хвост таблиц и свободных страниц.</text>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.9 KiB

@@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" width="860" height="460" viewBox="0 0 860 460" role="img" aria-label="jQuery в Webpack">
<rect width="860" height="460" fill="#f7f4ed"/>
<rect x="24" y="24" width="812" height="412" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="812" height="14" rx="7" fill="#2563eb"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">jQuery в Webpack</text>
<text x="56" y="116" font-size="16" fill="#52606d">Один экземпляр библиотеки для модулей и старых плагинов</text>
<rect x="60" y="140" width="740" height="248" rx="14" fill="#111827" stroke="#111827" stroke-width="2"/>
<circle cx="92" cy="164" r="6" fill="#ef4444"/><circle cx="114" cy="164" r="6" fill="#f59e0b"/><circle cx="136" cy="164" r="6" fill="#22c55e"/>
<text x="84" y="178" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace">import $ from &quot;jquery&quot;;</text><text x="84" y="206" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace">window.$ = window.jQuery = $;</text><text x="84" y="234" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace"></text><text x="84" y="262" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace">new webpack.ProvidePlugin({</text><text x="84" y="290" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace"> $: &quot;jquery&quot;,</text><text x="84" y="318" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace"> jQuery: &quot;jquery&quot;</text><text x="84" y="346" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace">});</text>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="860" height="420" viewBox="0 0 860 420" role="img" aria-label="PHP SSL CA bundle">
<rect width="860" height="420" fill="#f7f4ed"/>
<rect x="24" y="24" width="812" height="372" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="812" height="14" rx="7" fill="#0f766e"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">PHP SSL CA bundle</text>
<text x="56" y="116" font-size="16" fill="#52606d">Ошибка лечится сертификатами, а не отключением проверки</text>
<rect x="64" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="84" y="229" font-size="17" font-weight="700" fill="#1f2933">PHP</text><text x="84" y="258" font-size="13" fill="#52606d">request</text><path d="M196 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M232 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="242" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="262" y="229" font-size="17" font-weight="700" fill="#1f2933">OpenSSL</text><text x="262" y="258" font-size="13" fill="#52606d">verify</text><path d="M374 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M410 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="420" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="440" y="229" font-size="17" font-weight="700" fill="#1f2933">CA file</text><text x="440" y="258" font-size="13" fill="#52606d">cacert.pem</text><path d="M552 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M588 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="598" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="618" y="229" font-size="17" font-weight="700" fill="#1f2933">HTTPS</text><text x="618" y="258" font-size="13" fill="#52606d">ok</text>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" width="860" height="460" viewBox="0 0 860 460" role="img" aria-label="preg_match_all на D">
<rect width="860" height="460" fill="#f7f4ed"/>
<rect x="24" y="24" width="812" height="412" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="812" height="14" rx="7" fill="#be123c"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">preg_match_all на D</text>
<text x="56" y="116" font-size="16" fill="#52606d">Регулярные выражения, группы и позиции совпадений</text>
<rect x="60" y="140" width="740" height="248" rx="14" fill="#111827" stroke="#111827" stroke-width="2"/>
<circle cx="92" cy="164" r="6" fill="#ef4444"/><circle cx="114" cy="164" r="6" fill="#f59e0b"/><circle cx="136" cy="164" r="6" fill="#22c55e"/>
<text x="84" y="178" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace">auto r = regex(r&quot;(\\w+)=(\\d+)&quot;);</text><text x="84" y="206" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace">auto m = matchAll(&quot;a=1 b=22&quot;, r);</text><text x="84" y="234" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace"></text><text x="84" y="262" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace">foreach (hit; m) {</text><text x="84" y="290" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace"> writeln(hit.captures);</text><text x="84" y="318" font-size="17" fill="#d7e3f5" font-family="SFMono-Regular, Menlo, Consolas, monospace">}</text>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,22 @@
<svg xmlns="http://www.w3.org/2000/svg" width="980" height="520" viewBox="0 0 980 520" role="img" aria-label="Планировщик заданий: действие">
<rect width="980" height="520" fill="#f7f4ed"/>
<rect x="24" y="24" width="932" height="472" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="932" height="14" rx="7" fill="#2f6fed"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">Планировщик заданий: действие</text>
<text x="56" y="116" font-size="16" fill="#52606d">В аргументах браузера виден лишний URL</text>
<rect x="70" y="148" width="840" height="300" rx="8" fill="#eef3fb" stroke="#bfccdc" stroke-width="2"/>
<text x="96" y="186" font-size="22" font-weight="700" fill="#1f2933">Библиотека планировщика заданий</text>
<rect x="96" y="212" width="300" height="192" rx="6" fill="#fff" stroke="#d1d8e0" stroke-width="2"/>
<text x="118" y="248" font-size="17" fill="#1f2933">Update Service</text>
<text x="118" y="282" font-size="17" fill="#1f2933">Browser Updater</text>
<text x="118" y="316" font-size="17" font-weight="700" fill="#b42318">Mozilla Firefox Task</text>
<rect x="430" y="212" width="420" height="192" rx="6" fill="#fff" stroke="#d1d8e0" stroke-width="2"/>
<text x="456" y="250" font-size="16" fill="#52606d">Программа:</text>
<text x="456" y="282" font-size="20" fill="#1f2933" font-family="monospace">firefox.exe</text>
<text x="456" y="326" font-size="16" fill="#52606d">Аргументы:</text>
<text x="456" y="358" font-size="20" fill="#b42318" font-family="monospace">http://example-bad-site.test</text>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

@@ -0,0 +1,19 @@
<svg xmlns="http://www.w3.org/2000/svg" width="980" height="520" viewBox="0 0 980 520" role="img" aria-label="Запуск планировщика заданий">
<rect width="980" height="520" fill="#f7f4ed"/>
<rect x="24" y="24" width="932" height="472" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="932" height="14" rx="7" fill="#2f6fed"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">Запуск планировщика заданий</text>
<text x="56" y="116" font-size="16" fill="#52606d">Win + R, затем taskschd.msc</text>
<rect x="70" y="148" width="840" height="300" rx="8" fill="#eef3fb" stroke="#bfccdc" stroke-width="2"/>
<text x="96" y="186" font-size="22" font-weight="700" fill="#1f2933">Выполнить</text>
<text x="110" y="245" font-size="18" fill="#52606d">Открыть:</text>
<rect x="110" y="268" width="540" height="54" rx="6" fill="#fff" stroke="#9aa8b8" stroke-width="2"/>
<text x="132" y="303" font-size="24" fill="#1f2933" font-family="monospace">taskschd.msc</text>
<rect x="670" y="268" width="128" height="54" rx="6" fill="#2f6fed" stroke="#2f6fed" stroke-width="2"/>
<text x="704" y="303" font-size="22" font-weight="700" fill="#fff">OK</text>
<text x="110" y="372" font-size="17" fill="#52606d">Так открывается системный инструмент, где видны все периодические запуски.</text>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="860" height="420" viewBox="0 0 860 420" role="img" aria-label="Tilix + D">
<rect width="860" height="420" fill="#f7f4ed"/>
<rect x="24" y="24" width="812" height="372" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="812" height="14" rx="7" fill="#7c3aed"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">Tilix + D</text>
<text x="56" y="116" font-size="16" fill="#52606d">Desktop-приложение на GtkD</text>
<rect x="64" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="84" y="229" font-size="17" font-weight="700" fill="#1f2933">GtkD</text><text x="84" y="258" font-size="13" fill="#52606d">UI</text><path d="M196 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M232 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="242" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="262" y="229" font-size="17" font-weight="700" fill="#1f2933">D</text><text x="262" y="258" font-size="13" fill="#52606d">logic</text><path d="M374 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M410 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="420" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="440" y="229" font-size="17" font-weight="700" fill="#1f2933">VTE</text><text x="440" y="258" font-size="13" fill="#52606d">terminal</text><path d="M552 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M588 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="598" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="618" y="229" font-size="17" font-weight="700" fill="#1f2933">GNOME</text><text x="618" y="258" font-size="13" fill="#52606d">HIG</text>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@@ -0,0 +1,24 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1040" height="600" viewBox="0 0 1040 600" role="img" aria-label="Tilix">
<rect width="1040" height="600" fill="#f7f4ed"/>
<rect x="24" y="24" width="992" height="552" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="992" height="14" rx="7" fill="#7c3aed"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">Tilix</text>
<text x="56" y="116" font-size="16" fill="#52606d">Тайлинговый терминал с боковой панелью сессий</text>
<rect x="66" y="130" width="908" height="390" rx="12" fill="#1f2933" stroke="#111827" stroke-width="2"/>
<rect x="66" y="130" width="908" height="44" rx="12" fill="#343b46"/>
<text x="100" y="159" font-size="16" fill="#d7e3f5" font-family="monospace">project: ~/src/tilix</text>
<rect x="88" y="198" width="170" height="286" rx="8" fill="#111827" stroke="#334155" stroke-width="2"/>
<text x="112" y="232" font-size="15" fill="#94a3b8" font-family="monospace">sessions</text>
<text x="112" y="272" font-size="18" fill="#f8fafc" font-family="monospace">build</text>
<text x="112" y="310" font-size="18" fill="#f8fafc" font-family="monospace">ssh prod</text>
<text x="112" y="348" font-size="18" fill="#f8fafc" font-family="monospace">logs</text>
<rect x="286" y="198" width="308" height="132" rx="8" fill="#0f172a" stroke="#475569" stroke-width="2"/>
<rect x="616" y="198" width="308" height="132" rx="8" fill="#0f172a" stroke="#475569" stroke-width="2"/>
<rect x="286" y="352" width="638" height="132" rx="8" fill="#0f172a" stroke="#475569" stroke-width="2"/>
<text x="316" y="238" font-size="19" fill="#a7f3d0" font-family="monospace">$ dub build</text>
<text x="646" y="238" font-size="19" fill="#bfdbfe" font-family="monospace">$ journalctl -f</text>
<text x="316" y="394" font-size="19" fill="#fde68a" font-family="monospace">$ grep -R GtkD source/</text>
<text x="316" y="430" font-size="18" fill="#e5e7eb" font-family="monospace">ready</text>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="760" height="420" viewBox="0 0 760 420" role="img" aria-label="Короткий API">
<rect width="760" height="420" fill="#f7f4ed"/>
<rect x="24" y="24" width="712" height="372" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="712" height="14" rx="7" fill="#2563eb"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">Короткий API</text>
<text x="56" y="116" font-size="16" fill="#52606d">Минимум кода для типовых веб-задач</text>
<circle cx="90" cy="160" r="14" fill="#2563eb"/><path d="M83 160l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="168" font-size="20" fill="#263241">маршруты рядом с логикой</text><circle cx="90" cy="218" r="14" fill="#2563eb"/><path d="M83 218l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="226" font-size="20" fill="#263241">простые настройки сервера</text><circle cx="90" cy="276" r="14" fill="#2563eb"/><path d="M83 276l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="284" font-size="20" fill="#263241">DUB-пакеты</text>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="760" height="420" viewBox="0 0 760 420" role="img" aria-label="Асинхронность">
<rect width="760" height="420" fill="#f7f4ed"/>
<rect x="24" y="24" width="712" height="372" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="712" height="14" rx="7" fill="#059669"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">Асинхронность</text>
<text x="56" y="116" font-size="16" fill="#52606d">Задачи выглядят синхронно, I/O остаётся неблокирующим</text>
<circle cx="90" cy="160" r="14" fill="#059669"/><path d="M83 160l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="168" font-size="20" fill="#263241">fiber на запрос</text><circle cx="90" cy="218" r="14" fill="#059669"/><path d="M83 218l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="226" font-size="20" fill="#263241">ожидание без блокировки</text><circle cx="90" cy="276" r="14" fill="#059669"/><path d="M83 276l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="284" font-size="20" fill="#263241">простая модель ошибок</text>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="860" height="420" viewBox="0 0 860 420" role="img" aria-label="vibe.d">
<rect width="860" height="420" fill="#f7f4ed"/>
<rect x="24" y="24" width="812" height="372" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="812" height="14" rx="7" fill="#059669"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">vibe.d</text>
<text x="56" y="116" font-size="16" fill="#52606d">Асинхронный веб-стек на языке D</text>
<rect x="64" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="84" y="229" font-size="17" font-weight="700" fill="#1f2933">HTTP</text><text x="84" y="258" font-size="13" fill="#52606d">server</text><path d="M196 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M232 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="242" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="262" y="229" font-size="17" font-weight="700" fill="#1f2933">Fiber</text><text x="262" y="258" font-size="13" fill="#52606d">async I/O</text><path d="M374 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M410 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="420" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="440" y="229" font-size="17" font-weight="700" fill="#1f2933">Mongo/Redis</text><text x="440" y="258" font-size="13" fill="#52606d">drivers</text><path d="M552 248h44" stroke="#687789" stroke-width="4" stroke-linecap="round"/><path d="M588 238l16 10-16 10" fill="none" stroke="#687789" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><rect x="598" y="190" width="130" height="96" rx="12" fill="#f8fafc" stroke="#d1d8e0" stroke-width="2"/><text x="618" y="229" font-size="17" font-weight="700" fill="#1f2933">Diet</text><text x="618" y="258" font-size="13" fill="#52606d">views</text>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="760" height="420" viewBox="0 0 760 420" role="img" aria-label="Базы данных">
<rect width="760" height="420" fill="#f7f4ed"/>
<rect x="24" y="24" width="712" height="372" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="712" height="14" rx="7" fill="#0f766e"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">Базы данных</text>
<text x="56" y="116" font-size="16" fill="#52606d">MongoDB и Redis доступны из коробки</text>
<circle cx="90" cy="160" r="14" fill="#0f766e"/><path d="M83 160l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="168" font-size="20" fill="#263241">асинхронные драйверы</text><circle cx="90" cy="218" r="14" fill="#0f766e"/><path d="M83 218l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="226" font-size="20" fill="#263241">простые запросы</text><circle cx="90" cy="276" r="14" fill="#0f766e"/><path d="M83 276l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="284" font-size="20" fill="#263241">расширение через DUB</text>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="760" height="420" viewBox="0 0 760 420" role="img" aria-label="Diet templates">
<rect width="760" height="420" fill="#f7f4ed"/>
<rect x="24" y="24" width="712" height="372" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="712" height="14" rx="7" fill="#0f172a"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">Diet templates</text>
<text x="56" y="116" font-size="16" fill="#52606d">HTML без лишнего синтаксического шума</text>
<circle cx="90" cy="160" r="14" fill="#0f172a"/><path d="M83 160l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="168" font-size="20" fill="#263241">наследник Pug/Haml</text><circle cx="90" cy="218" r="14" fill="#0f172a"/><path d="M83 218l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="226" font-size="20" fill="#263241">динамические вставки</text><circle cx="90" cy="276" r="14" fill="#0f172a"/><path d="M83 276l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="284" font-size="20" fill="#263241">читаемые view</text>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="760" height="420" viewBox="0 0 760 420" role="img" aria-label="Язык D">
<rect width="760" height="420" fill="#f7f4ed"/>
<rect x="24" y="24" width="712" height="372" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="712" height="14" rx="7" fill="#b91c1c"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">Язык D</text>
<text x="56" y="116" font-size="16" fill="#52606d">Скорость нативного кода и выразительность высокого уровня</text>
<circle cx="90" cy="160" r="14" fill="#b91c1c"/><path d="M83 160l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="168" font-size="20" fill="#263241">типы и шаблоны</text><circle cx="90" cy="218" r="14" fill="#b91c1c"/><path d="M83 218l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="226" font-size="20" fill="#263241">быстрая компиляция</text><circle cx="90" cy="276" r="14" fill="#b91c1c"/><path d="M83 276l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="284" font-size="20" fill="#263241">удобная метапрограмма</text>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="760" height="420" viewBox="0 0 760 420" role="img" aria-label="Неблокирующий I/O">
<rect width="760" height="420" fill="#f7f4ed"/>
<rect x="24" y="24" width="712" height="372" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="712" height="14" rx="7" fill="#9333ea"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">Неблокирующий I/O</text>
<text x="56" y="116" font-size="16" fill="#52606d">libevent и системные API вместо ожидания потока</text>
<circle cx="90" cy="160" r="14" fill="#9333ea"/><path d="M83 160l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="168" font-size="20" fill="#263241">сетевые операции</text><circle cx="90" cy="218" r="14" fill="#9333ea"/><path d="M83 218l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="226" font-size="20" fill="#263241">файловые операции</text><circle cx="90" cy="276" r="14" fill="#9333ea"/><path d="M83 276l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="284" font-size="20" fill="#263241">меньше простаивания</text>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="760" height="420" viewBox="0 0 760 420" role="img" aria-label="Веб-инструменты">
<rect width="760" height="420" fill="#f7f4ed"/>
<rect x="24" y="24" width="712" height="372" rx="18" fill="#ffffff" stroke="#242424" stroke-width="2"/>
<rect x="24" y="24" width="712" height="14" rx="7" fill="#dc2626"/>
<text x="56" y="82" font-size="30" font-weight="700" fill="#1f2933">Веб-инструменты</text>
<text x="56" y="116" font-size="16" fill="#52606d">HTTP, WebSocket, сессии и шаблоны</text>
<circle cx="90" cy="160" r="14" fill="#dc2626"/><path d="M83 160l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="168" font-size="20" fill="#263241">статические файлы</text><circle cx="90" cy="218" r="14" fill="#dc2626"/><path d="M83 218l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="226" font-size="20" fill="#263241">JSON/BSON</text><circle cx="90" cy="276" r="14" fill="#dc2626"/><path d="M83 276l5 6 11-14" fill="none" stroke="#fff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><text x="124" y="284" font-size="20" fill="#263241">SMTP и криптография</text>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB