From 065af6d21522920fb1db1a39c6edf2321ea1898d Mon Sep 17 00:00:00 2001 From: 0x0bug <98243573+0x0bug@users.noreply.github.com> Date: Tue, 21 Jul 2026 23:55:46 +0200 Subject: [PATCH 1/2] remove legacy Pages site --- .github/workflows/pages.yml | 42 -- .github/workflows/powershell-validation.yml | 8 - site/.nojekyll | 1 - site/404.html | 30 -- site/assets/site.js | 58 --- site/assets/social-preview.png | Bin 43117 -> 0 bytes site/assets/social-preview.svg | 37 -- site/assets/style.css | 1 - site/assets/tui-result-real.png | Bin 10046 -> 0 bytes site/assets/tui-wide-real.png | Bin 42956 -> 0 bytes site/cases/index.html | 113 ------ site/cases/windows-application-crashes.html | 136 ------- ...ws-diagnostic-report-for-tech-support.html | 152 ------- site/cases/windows-disk-health-low-space.html | 138 ------- site/cases/windows-firewall-disabled.html | 136 ------- site/cases/windows-high-memory-usage.html | 138 ------- site/cases/windows-network-routes.html | 136 ------- site/cases/windows-time-service-stopped.html | 138 ------- site/cases/windows-update-pending-reboot.html | 140 ------- site/index.html | 384 ------------------ site/robots.txt | 4 - site/run.ps1 | 127 ------ site/sitemap.xml | 43 -- tests/bootstrap-sync.tests.ps1 | 27 +- tests/site-seo.tests.ps1 | 276 ------------- 25 files changed, 16 insertions(+), 2249 deletions(-) delete mode 100644 .github/workflows/pages.yml delete mode 100644 site/.nojekyll delete mode 100644 site/404.html delete mode 100644 site/assets/site.js delete mode 100644 site/assets/social-preview.png delete mode 100644 site/assets/social-preview.svg delete mode 100644 site/assets/style.css delete mode 100644 site/assets/tui-result-real.png delete mode 100644 site/assets/tui-wide-real.png delete mode 100644 site/cases/index.html delete mode 100644 site/cases/windows-application-crashes.html delete mode 100644 site/cases/windows-diagnostic-report-for-tech-support.html delete mode 100644 site/cases/windows-disk-health-low-space.html delete mode 100644 site/cases/windows-firewall-disabled.html delete mode 100644 site/cases/windows-high-memory-usage.html delete mode 100644 site/cases/windows-network-routes.html delete mode 100644 site/cases/windows-time-service-stopped.html delete mode 100644 site/cases/windows-update-pending-reboot.html delete mode 100644 site/index.html delete mode 100644 site/robots.txt delete mode 100644 site/run.ps1 delete mode 100644 site/sitemap.xml delete mode 100644 tests/site-seo.tests.ps1 diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml deleted file mode 100644 index f1e816f..0000000 --- a/.github/workflows/pages.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: Deploy project website - -on: - push: - branches: - - main - paths: - - 'site/**' - - '.github/workflows/pages.yml' - workflow_dispatch: - -permissions: - contents: read - pages: write - id-token: write - -concurrency: - group: pages - cancel-in-progress: false - -jobs: - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 - - - name: Configure Pages - uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6 - - - name: Upload site - uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5 - with: - path: site - - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5 diff --git a/.github/workflows/powershell-validation.yml b/.github/workflows/powershell-validation.yml index 97bae83..c13414f 100644 --- a/.github/workflows/powershell-validation.yml +++ b/.github/workflows/powershell-validation.yml @@ -161,14 +161,6 @@ jobs: shell: powershell run: .\tests\startup-inventory.tests.ps1 - - name: Validate static site SEO with PowerShell 7 - shell: pwsh - run: .\tests\site-seo.tests.ps1 - - - name: Validate static site SEO with Windows PowerShell 5.1 - shell: powershell - run: .\tests\site-seo.tests.ps1 - - name: Test bootstrap synchronization with PowerShell 7 shell: pwsh run: .\tests\bootstrap-sync.tests.ps1 diff --git a/site/.nojekyll b/site/.nojekyll deleted file mode 100644 index 8b13789..0000000 --- a/site/.nojekyll +++ /dev/null @@ -1 +0,0 @@ - diff --git a/site/404.html b/site/404.html deleted file mode 100644 index c581982..0000000 --- a/site/404.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - Page not found | Windows Diagnostics Toolkit - - - - - - - -
- -
-
-
-
Error 404
-

Page not found

-

The address may be outdated or incomplete. The project homepage and troubleshooting library are still available.

- -
-
- - - diff --git a/site/assets/site.js b/site/assets/site.js deleted file mode 100644 index 2ebbe3e..0000000 --- a/site/assets/site.js +++ /dev/null @@ -1,58 +0,0 @@ -(() => { - const navToggle = document.querySelector('.nav-toggle'); - const navLinks = document.querySelector('#primary-links'); - - if (navToggle && navLinks) { - const closeNavigation = () => { - navLinks.classList.remove('is-open'); - navToggle.setAttribute('aria-expanded', 'false'); - }; - - navToggle.addEventListener('click', () => { - const willOpen = !navLinks.classList.contains('is-open'); - navLinks.classList.toggle('is-open', willOpen); - navToggle.setAttribute('aria-expanded', String(willOpen)); - }); - - navLinks.addEventListener('click', (event) => { - if (event.target instanceof HTMLAnchorElement) { - closeNavigation(); - } - }); - - window.addEventListener('resize', () => { - if (window.innerWidth > 760) { - closeNavigation(); - } - }); - } - - document.querySelectorAll('[data-copy-target]').forEach((button) => { - button.addEventListener('click', async () => { - const targetId = button.getAttribute('data-copy-target'); - const target = targetId ? document.getElementById(targetId) : null; - const text = target?.textContent?.replace(/^PS>\s?/gm, '').trim(); - - if (!text) { - return; - } - - try { - await navigator.clipboard.writeText(text); - const originalLabel = button.textContent; - button.textContent = 'COPIED'; - button.classList.add('is-copied'); - window.setTimeout(() => { - button.textContent = originalLabel; - button.classList.remove('is-copied'); - }, 1800); - } catch { - const range = document.createRange(); - range.selectNodeContents(target); - const selection = window.getSelection(); - selection?.removeAllRanges(); - selection?.addRange(range); - } - }); - }); -})(); diff --git a/site/assets/social-preview.png b/site/assets/social-preview.png deleted file mode 100644 index 545783eff06ac7bab9bcbabb5a255a092c08d699..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43117 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

et$Mvw~B(b~QVhP4>bb zC&X_Xiu(V-4%BFRua;T^qp?0XW1mZ9lvd@ z@^CBUQ~V!mYXg$`;yUn$$W66xAJ(i{u};BCimIxa-TD`+V5DJ`8QMiiRJ6ik5aomm z3p-JQD=0IOd|_ClfT+X2@qvC2&s@FM{l@)9!dh&r3Mb#Y)OZ_Ma#vT^@POOBd-vo` zZ8(E1s&bw2)s!Om@2dV_ExZ2|HOW||pzt?+ zo6f|Cs4NQ>N(1(07$EVWZ;+^%m|;BrkU2^)li%ORi1OVTx|fM--rutR$)W=o(9Bhe zfdi`g*RM|kkDnYJJ8G{gym{IFIPUv0;cio#5T)srVXa&ynKvDNJiJJHcIS=I&kF(gx#``dK6 zfj#FxrFW@>L+L%=xi_xXzPl(l7w`)wxGuTD@<|(s)p`J?{8LvNBrjj<9IO4nx_8Jv@el1wFVqU#Grv35xrgOt`O|R>y zEOU!_rJEIb432^6_$^#z?nXhmO)kpbwd+`08naMc3)-VhgfU~Rtv5Hx>Asuzs|r5X zIpZ3eg~Xm3>GzeGL3P>qRrV{rp8`0nUFQ>T$XVw0Sv^Oa@7@1Pk~gtQ%#uiB0*K)5 z@d?L5ch#Q_y^mF!qB!j^EA!o%7cXAqEA=2~l*lwh;q`mX9S`&L?zT_jxNiePlphD( z@iT7aj%@>l1I;I;yUW7|2M0~L#VhX8W7-&w-wg-|C=(I{#WcL)%(J~)Z4s^9gP z`W)KIa;}{~Ae=loG#>DN;~QP8bd;YmfMzKBqZV1So@zE9@+@nmo#!9HQahn4J+pdr z!h8j|uR~}Afv&wTUO{j zwXBScsWjShTWhCJ`E6tS>#hNiV2PW*#qQ*DQWR;=iz%^1E@mK|sC{vpzIPSk6!KRM zoFb2s=DVZf_9^VV%cya&WB*0v{6dqH5cp%bg2xDp6b|ZvVxri|AAMDqa z-p2EWwW;R&oizrUc(ng6Q1`_xOlw#9%? zg)UDl%WSpQMFatpfY_rXW}=q8KMJ3MxG@SA?s|;YN;7V$-c0k$RK*%C6<>M{YrUN{2fdde^5SL`yC7^!3ZfvQ_5N`!gC} zo@6QK&?lku#6dd=R?T~>h*gvK0ZH^n6lsfeCW6aWEV}6}5Iv#1S z+)UACA#L8Xr9-Uo&*|}B;@{6iF+nEIJhp-Jfjrk&y63rC;lh^L{r256S@$2(5R3t% z+EYb8J-;rO^;tko4j_Q_Z@|K&efDdNis8NfwPpMW_4;tDAB&Lo0jFa=7n9z_heH3i zlAQf-N^(DJsc(l?fXA!-oS#teSIbO2+^!-YZy7oCRfD}5@_ofBe|sG(s8conBKeQxOUxX0yvrrryX~3OSt? zgG)FKrddv>fT0wZ9g*eZ%NSqaw#a{8C}M`5O;KiYdGcgp#c`S@gIu&~Y)%i*Gc_IF zYNl*%9xV0h1abvnb~`cT1i)-DeXG#z9q5q3_vIT1xo50;#_yOFxYpA;ouy^QGcvmE z@1-k`Wyg2hD>_P4vO^$JUB~H#m>wo2X)8Cv<{w=>Wy-0-Zm0}|a1GV35*yV9K}HzF zw_uRh9b9W|V4)ywe-*1g&s<+(jdy8sFE`v3EMpiM_?aeemz)=T8i!QzS?>V2?=Vpl z-T*yH8mnv;gKPCyhHAH0be))^3x+tWK#bB4s6Cou{ezNvQpp{lbb-a+ex0wwA-THN zR*?O1R^n&^&}^1vBG{zXZr{CgCunbb4sd%uxTfZ2G4smeoi)HwF82QzkX1TJg-KFP zIn4ezcC1DQQ8zp`!E!HiHN;Wfc{gKiC?{Q+I-f}*ZrH5gVR(Xl&@_nXFf|*fpT`IG ztFK~Uxct4cu)~vE(jhwkVMS|x4;_6RuTr&-w@123dXS?yhgu8A^piCZt7u*DbsYbqV zByp&h+DsZj+u7O}3}yR|cZyn6mj`n^VKym#@*-r`sc4&nelwc5<>QtZ3>Y>Wbdbgs@4 z&PmJE+m604X`dCe@&uJ*w=h-<{29!v^;^$UL+Tq1E=b(;KvFhVmckC zcmSVGiefyDITxF%0NdYh=8gU+&cv%6Fp?k=!6vd}v(WS9%a_rVl&<394<9}NddG2! z0LYz_a$;iSZFWnyyo{b49Y8DWDDM2a445Op4Ug8sH`A2h@7}%h@bL8X@BpL_8V$RD z|30qBB9wvKf8piH7cX8!`^3k_t||dvx?7V@=#eA9_JI!Cb&pR@{?H+yEz<#%bWI1T zz@-7Rb(iBmP9P>;0P$5Hcp*a12pHEXk|?+lz{w6bWH!i*1Mr_?zvmBB^MTcIG3FNI z${TKLGrbY1l}@69%Om<@adQYnfHz`8P?tDENT z{$O)#;50+-qkO2ReGFVTWx+aTpW__yNGPOd5U#?i6Vy&oe2z z&HilN-$T1~aHRJhr12k+5os2f>gJy>$9$4qvYfhSI|Q&QNJZ*WUkl)DSLk_iOB<$A z6?(^lMz)1Kn{c9hO>uG4Xgu5A7##RE-f}`uR81ZyHUa1Q02$OGA8%>yY5gHAz23p& zcGmDfz8CG)QGT*K?5kOQ5LiW8zDHSES#?y_+a)|_Q{3AC*Q>bIb(i8j%ETtRJK4-@ z=BT^9nv>2^A0h*}_3jnm$~MSD3+S-|8t+=McRPjF{{{o267{{@?DbQa7PP4ENno#2N7l&`Bg8bAxNZ<;Ken|oJb3WRX&}XSYcliwwd9Bh z;@;FhqG)@JvY>*;PjkIzqN1WozBfQ_n}&^cUzwu=_W2?MLULx6kLnCoQ-KW?>9w*{ypBi zA`~93X9X7lYlDlF^BkLYE~kC~dq5OZ$4y2e@vR@;dGxF%ZlUCPA$J(uF4Iq_aO3cR zh*b2Ne_Q?&q}gqUmUoMEx24M4zkaowZNI4KTfDwtv^u(uRoUEKx0CR}jry%ala(;7 zed;2axgR=a!Stov^v=&L`3Z;s$kCOmjMpvU;Smuyq?r-Ay?4|pIO^W?4<;4oa_d7K zsS~rjI8-(_;yE`Ul2f}noBW<%M_XIFh{OUoRd+(ak;-1XgjCMBt*L&6^UzKI_7Cbj zfqnLpYqp1+wfzF!l6`-xL4hNqHDaHF1BX>VA6;=+z|N2z(gA5XFPh4&o1?j-oBQ9|N?*v??gGRjBlixVTPn*ymxH_L z{}!A7Qw{$A`a02nE9x3$5YB-nQ`(NgsWW_#qDyvI9?`%4&-*clFZg`!ISF~m@dW&I z$Y1}y{AbVpx%uBI%m4Wv&_6o$t+vmEbDzY4^6J?2>Gocy0`e}63f={~efu_`RH0C4 zR#sMHV)_0s zVmZgit6X#N?FCREvU74CFQ$C%w%-9%&-0au$~2`+>t{b28ft566crU8@;?T$8lbQb zyBZXvp`ihErV{IBDgZ>_0lT{a%fMlAOCkd}EMz=sK1Rxobpir>r9y)FW1FKuN9`{# zOm&y|??qvhlKtU1M$gzcT>wld_UtT=N9?rfrox%V5cRVzuVXHh*pbKlS7 zPGjO4EZ=1OCYNjU>=|94=+SQ@YPDSMaN+>SckBD_Ze@AE4nLclo36Yp63vyhX%3`F{&+FTHF`Ld27`X@j)7_sfBUXNDz>#x5YX`^r7z7@KrQ|GZZV}m$Q zB7Agmq>PT(VbcO>BnDGKz-p3`a?+_3iualT*sl9-lRp%eE2k@l%9yz2^$QwM4!yID z?3R^419F0=k*uFVlck6N%Zl=-1odWX?aGe;rO0=&+$?QNtt5P|q4g%53*`h)8W^LdIz^^Bah| z^#`1t7bN^Q6v#C!=eR~csZWj_fdqR-MdWA}hE@8q%vXpaVw$746#}+a?9$;-!0dEn zJfaeDVwWy`OX6q){(`SdOV!*qi&D6n{T<@6yv6&Pdmxl%u2qBuyR^JbB_d@fJ!tDQ z*<|+_a8n@Gy4BI0A1MtnD&Z_q{p{`O$ZmUIi9&TWHf^uHSErz#LE+S;O~BTtgqSN@ z+&tyA=Z0HIOO}`;$&5R*@%l8&b?=*89C6r~@Ag*s397n{&Kf_h_#jq^Y#khtLc!=1 z8q)d`t*A;wB&yGm0!G%0w5tCoL+s7LDy+}OepEo^!25p)2+f0_&o+A;Fn&hB8VSI24KtDNu36aRbn{QRnb)8W>w zTgLYG$gx@)g{0s%@vXSHxC~KJ2CX85Fe&GPPogGHNOZYVVcD%*8k7dpI?CJASd|zq zIXy$e0U*cC`;hpp+#7$sVc}-j<-`}^12@Nr^PQGH3t6CTAFoQF%hxA}(AJUlRPsoo z*OaQRZfxVTRm$q>`esaYbaYe{c&%Xl)AtbTj7;oSHCxcuB!CBB{gTzj1FSdU?_qOT z#9Cg?qMLZ~4Etwb8yQ89<@+Uv&@=6?OveB;9;xClS^w!)mfrTx*0Io+Q0b^w5;BUaUtrClro3Gp2H_tH}(?6y@7QUKZV zQHKK7+e0lapeDFbH2Pl99oJ89xW|QFO5LQ6NcA}a!l0hILp=0fRDFMfF|Ycuy1EMb zah^F|L&|>Q8<=A4kFwoK%dJvh_S!^iH=5If@)I>T*EGfC9Az-zu}(Q!ZSC#lq7Ohy z*U&Jnwe2VX8Hd1bNo`4CBCzuQkfiGyW zEm6!U;pMAW7P8P$RwHv=tMQ|fPRQDwd{C1ySUo*N)BOszb_t1~cIH;}eI!T^A+xf} zxKI6rT43adSr0eRE&HSRn^&$~vy$*$4BQ+Si>80zKQkGcWug^a?m5>9d=J(zn)`H< zT>Uz+sJ7zuehGjO9E#6>0RxEc)xGfAsze#*(XENQOcWpn?Y_D8?)`h>u0Pq$+|Ep> z;WeXopA8H|kwvt&PkL_{jJ0|tBLbX%!i>k`(v$=JDFpdcD8NWQ>F<)_rQCbIES_vF z+Su5@Dj)3jw26*XdlTjMlNI*gX})IQoV6zbGXR!XzAx!%i!fVTC$Mktj2{$Lu4!O6 z-45sY#5a+S-+qP1?f>`{M16;OczAp;#YKQlBvpIc4LuzMguy;-*|VGqsOdzl6yK$- zRnt_r2M=2Q+8l#Ve5WS}4~wL$JpVOhRee~X$v2qUb>z$SB*w+HSCgdGMOtz!V5u5e z`K33cr3Z8^2skT5YI1TL`H2gjyro$HX5U=N=5S(bxxx>YlHFdWA?Bh|HGq+JWh1{$6v~|cGEo#BPpKEX9UW?N>ddJrBVCJm zALLq`tXLOR$2MNWo92Q}?SQIBaXG-Y|7Eby9yl~uxE2dBUj!H}{we@R(Ns^6dKi>K zT~1HW&PoHb6{g@Jf3GG*$@}6zJ$SZfA@|(LnwpixNsU>vw@00jJV=k(Blj;P_=A;*U-P-6?LC2BvP zl{k-;HZJEY*TRje`~f)!o&mq?+KCtfp9l%FX4s~>V4iYBVn zFtVtq%6?hcSIe>{j^pjNo)m^r?`r0TP+ZMAhx8V8#FdjI^|50%MtSGgvgQZB^$zb5 zJFx4xq8!SB0mYQ$_&$Ub7!Z&jAQSuc?W2Yn8FYKf_B4|U$a|CQT^H|iN45y_)q@w^ zYI&poS$-wdWxSJ&WcYpHq%mLACv{qw8yi^$W)J!H#NA*O!#fuSWEstrVaDL4^^KmYyIU+ z0g4FsSK-=ZytU3+S8f;iw31?_?`V;&>qeZh!MwlF;C2u??BR0cY_Qphkna=r)VK;4 zi+PgrjT>FdXKFzvEiWuIo%_VO@4`Q(b$-%*uDiQC`ZX0;!*r(W2RDJ=e0gmIiYa8g zdlr-wt;=fwNpYA~4}1S`hcFgNE3YJ41$u9-Jhk&V#J~UM`Y_C<`W9IE%a^4uQu+<{{TSET zfdWggr>n;dU&n+i%1-nNSa>bER?p=^Y#v~~t_v7Jj#LudBtvpRc?!^1r5nwT*~Dz< zh;fPg^u6~jS5OOg% z(ER)+K9F2{Jmh;zDjW{CQt)1M)l4ihFL~DU^Nr7(i#&b*BiR^Ug@If2gs~&vhJx-; z`YSB)3iI()9=gE(ebe}4jgiiVxuz9EO`XQ!(YbS3Klu3enbe1r#V1Ox$7_r5Rbjb2 zZB;0Kontv;wMy#rDLdC?XZv`8XY2Br;1gg?Me4zov{^xNEpmHpTIlno_Dulr+HLa6 zKEZsctn{7hOhu87o8PrSXU568440>T6~1=h;?{KobDS({4D3DJWp+4FODQY+Bqqiu z3`|-AlkJEF6pdJ$?MNoql9e&e~?Dq5sDVBpFK07C`Wmv ze7(yGydSHPU>ol$=H;j&P3d2FzbSCKY+2UX!nj%kb zE`y>O0N~bE#Qp*vvstxETp(4t4cvI@T01dz#Qwo(hSG?Q)miHcJgM*(6(qzsIdrc} zsp*Ddw%3Q|OZEPWDa|(!gxgfQRWSAh4^K5mziycY2bKd)vn!k1(*}Ys=y)RZs`7sF z$zi!*K`NBHS2cc$jGN343~6#s7M+CQyf;NhJ{(wGy#b`FwnwwFC;BV))j42CuV9pd zxI2!2H7o#SxW!1yxITD4b+&#p4NriL2Ej>3i$jczCO;MW;x!_g+~;Pj5=FVi9s8;& z-V0&8u@xpyOV=NJL*|s^t9l`?q1f78i1fdAJI9oD~kd6QB5;!-rk2K7D8V zzQxe5s`+(E=2b542`TIuMXew{SN_TN&P%XC!)a0NzB$7DYc2{ z3p$?*8~2+7rYuGE@o6qZS(hw>BtQVBkw3(G!|U44G9x4Y+Aw;RA1Ha-wK+WOsgCY) zSu=6dSWU&&RLJ`>6Lk|&Sy&O3DnqK7V-ewx2;0Kw<_5GuO zijnY6#q)3tBVs1^6ZAY+ktP+KK*2#Di?&Tf84E`}YP_N?nFAbjnS-1^WtEjJmke~F zBNZLXMfV~vJe8^MzcHx8(n;2X-U!%OZT4a5UK-vwCVe5wClTH!pe!dSLeQ4X-QSB* z5v|#pa%Z>LAogUTxa+pE*saP(m}(jeCX@dNyv(M(%pIKYCo#Gqo5hCj+=hSXC-gH^ zAzp+q8+nmljI_ucS4X9g+9kk`hp!;MWkrEYfb5sG+ zkt&Cc6W{yvLFD6&RPfF>-#gldcthRPj>^E%H0|V8bM@>6B%V^u#*~kqm|6iQF2{_dK+xM?kB}tNs zC@n%!gzObkgzP(&eP74ER0~SUojAg(z1wvXk}? zqN4dk)l=ag@hCYtxzAWRH8s_ud|m0_-I01t+m0|u=CnMMgo6=Lz14=&Mn?^6h$A5n z1{ymUw-Klu#8x7!4EbkMwzP(<`H8`^63UZFQiEaL<~nT?C#MC1yi@k_sx0c8W}}0A z%LUdyAq{0cmtQ`|Y)mBJ;~%k#3-tUNc%^hE*;HdiJfDjMx%PR10=5dD@bHUP?VDMR z=+@?DlZGuEKNj{qfbfX>6)gBChu|OL?LYgO4YDpRf?maovE+5#X{O|FR_6(zR5np( zrnz)!)=<&x$j^QSmJtM6P_r1}yqp-evWmV((g;HThkb5>oE#i<8Tjs0`K}mR2#IVa zT^+q)^UVgIpzIviJG2w>I~*(bBhVY>sQz527@)&^nE)|4^eN(uU|(MJQYnCW@MyJojO^p*l495 zq8KVid{3hnbl;W3UQK88WeoQ|SkH()}~~i_wtP?8>Sr zZ;ST9Iv?z@kl7Okx*$!0r!DaH!FMJ$S9y>|E-^y%uaDi|!;~P9IWCZ0b{|60T}U=r zAw5I)yDvwtE%sAHx-9Bz<(7L+zln~P@l zJs?H_O>4JUTaYtpW$m$+Pj(EWtc<)e49EtE`P+0(USmM?ewc;F6KuCN;v^87SyHe= zqV1Suyn|n9J?4mJu-M)6ZoS>U%_`%})8;m6xIa88PhC1?clc*w-ji>_-x!ac0CH5c zR#t`WucIX}ZnQL~YihX3(+mRW$?vzIN2@%L0Sg+{g{o9_0TwI#s8>~ov-><9J*lvV zp^WoOR=9Jpm*EWE!2uSw-reJ8 zvgwTrrsQuGqxP#{VA>`zseMeolzOWjfLp{=FHz}!MQU{w@+v%Avwk)&`CUV8`7qvN z)nWS^kqf^n!r0ySi*R(BiEs>6R#EBy5H{|`;O+w1SEPNMZI15>m_i_z(}{0JL%tA% z@t2+Chb|MVx%A1bO6e)szR3CS*c|Wkynu>eS;sxrj`YQ3~d;6&In)ba8&YWoIDFd;TE&+jn(Eik+>S%^hxcZu!P5`V8az zaYFXPi)r0t_VR8damNdfd4qKYw^&kJRhg@}5?9!H^ci_J4vuAugJuVNg12waK(5Yk zQ1bP?i$c3I@qEG5-$KGXUw;1F+edd&PH(`0+?-FN{lj|TX-KrvW z7Z<+sSjTVu4w9j3U6_19!hP|yoifIyOUjO4SQ1r-hQwANMiJ|_84c?CdgV0G(-2Qv zL_LifL%bOmKlYB=q+v)v06IC=4bPb23prPfcbgwZFIF$XXG-@qghMgx#8b2PJ;!Wa zjzLD{mlHwh;?0QJa$I^hB;kPQ4v?d zRo*TIKL50}y}dnL#j5{P`7VavZ{NP%oJJQo^M8IiLAoK)Y!K_V-5(#2Z-1}Wwso<5 zj!m5EjKx4Ps<9-A=M%^eGCjYAl9JQ?Zmef;c68+3DNj|BiFml&6(F2n68g{4``R#g z!y>s%R_pvQY2?gzLM94F5Sy5(Gsa}K#|DM5R=DVQRaMgaC4~K*=-5}OrKP()eOfko zWy#4n8R7lk#H1mf>#iTi`Ow-osY5nc#J#Yu-lrLac6Tf)K*>Zy%6W}_2MW5JB<}0$ zeXy~<$$GcW^e4b_*syYTkj z38mcc9fpUG9P#k*03zBwyS177I&~j3rqq-+%uOS6#jj}H)l^dkxqo?wF^09cNhnVE@)2g-Z8 z9FES;ULQW#E({_dVFy~pvllPIP6~=vY;5&4e0+d#`Np7$vn^rK&;!a(Z2OBPU=g~r zwS|Ly>{d-Zj^=z}Q4z`eEfPF2UOtgPC2(&5NNG#o{~g9N&D4xWQ&8*1Qf z_8Ky`L#_|+I*&dw+jRLyS7N73eg1qNvbWzF+^Xf}B3>kzZE z3LaPfKOss*^&cV1>=5NSIsv|?H{pdEGvaIa#8YfzS)4<<13SDTt5Jc_H7xSi@Qatx-nnK$BjXIRX zL%aF9NDI4x4DsSPyC_1jiD_?>OeRTmLYoY#CP;-NQeLPH>e@4hi>`C z>990PPRrxN$~6W8E0Oi7dMYYn^=_!l3|o$oMb1)Qe+o}{Ky!U_WlE>sPx7H%%Q3>B zjAUs475k>=XhEB$ov<9MDbvKm(`i=!u{oX2E@+!eGrv+dz@5&6=-JW)6ND#_~1R+ zh{I}YZqzv_W^egsm8W5c3YMxV(E1b>rCZYpjY05{xZ#%qvkspe>zHKKNr2kz(|}8> z4eKU)5L&({TX z%(rj<{!cN+hN*FydOlQUy%-#INB9ZD95&Nnfcog=<=dtG-E^>Ys{rd}^MLCCF(F&2 zm-=LTqjk6(6C#ssA>rda@8dIW&Sh^U=zQk#gA`D{-S6n2q@;v25M+|T5?)wXn2>OT zhn?^{TL;AckZ8b^I@-8Ad1B+J3G2uukc5F+jxW!G;lhRKsj0*cLlC`yg~h+F-U9Ob zQ%xbx8;co3Z9T>au%>1e7A|5+#PeWbK+J*L1w;a%a0i`0TFUJ^ckbN2-O$`BX#0DK zsHTP=L=5HUrXz%LBczIHAjvyTckjD$mKKEed&&=`lD>|Q|M>AEh)ISXlsiy`g_M2) zp?^&Gzz&YZp6y_dM~jhYtS&s^9pC89I9Yl06^t+tR~-KN?=>JND&gOWixbgl^2J9gPN#nYXvp&P`KQd1Z zk;#~SR}>37ox3wUPwGF7mfE*a=0l-d$F>{eiZiuXv@>|SREimS2q8DBtKOh0@-^$W z7>R6@UW|CU%t?nkETglAl)N1}zHnr0*ok&AKOv0D{3RFo8aSFEyMaLm8z+HZm(vev z$uFCH1A?&t7n~~pqEcpF>eGF{#Krt{pElJkMkA_?;N6f_toX*WfCi5}MLtAhEU!`6 zVqEayKes&Ztg*J)Z>-f~nd|;e%OEk$X_?jh-eibHeWL=DC; zp|P@IL0u{E4XMJmve>Lmy(%X5{@2W$eSKtTS2kHdzZohJbEC&c-`4+tW4-sJkj>|D z$g9JHYqtj9NNNK12Z7T%R>)j}MV_?S@yuqQHnp1T1bmYtQ}C6&Fbj`jKLsXaP5t+C zV07ti(J_)kys+wt@Yvij4NRn6;+#hD|J{KD*P;m6ki_CzKuLlyWdK%Puknwm08 z^1a$#w}>c*!4>FtrTf2bbcuN8_p=Qo#Mg;XKm=3z5+in*1a48`>qJ?n$dAk|}RYjnaZqKsSU zECl40eVUjcHQ7W)O}IDKZ$ zFv9JYEo^Fpil#DQyR5qi%@B49(pkcEH+%8gJRvGKaNj1*i~Ugwz4g=+P>OKfghQ~S z$$MNa3t1UE*+$ISJB*H5(YJ@fwPWi!Rf7+9Mh4Zo)A$H=xZ-c@^xz-Z}JU)*$Q>3eR{UoReyTt^3`zF z8#dDwsWgjhsu79ZAAO!q2{I?N`mYZ2Iq{ZI@t_bE>zRyQ;Z}R^;P^yto4Ts?EHC^H zOSIZT7Ikjo$Xx%SKWZ_{;{fLZzG`$+wHWmlncU??l|)wSu3HO|#s&9r%SUZuo{M(7 z4UQJ*Bo5wghYUpi0mQPR0K%2yZucx{Ru#2UuRqe4q*Xc;WdMNIk9QX{H#(kqAd1MH@>YEQu8ZvsrR)^TbktWbWQX4|F1xi}bxAZDDKSR8MG+H!asjK_Fy^N1HcEPNa?X>9!k;t#jwWhKWulpE9*jkn7 ze+&2b%0A=9MF6~YHE-avt(6mHY6FK-Kka1EXuN{tb3kxn=;LfTkN;V>K^WJW_NyG9 zw$T@{`hr*H#-xyQDI?}8%SqLKRjM>3R!1y-VdB6r*x6kh6{|Fr*^5{{vzL%-sK6*! zns6bW4Oij#B=y&N84A%(du4dgInCDCjGv-n==u}k**EGH_>m!|(MCIXV}sgrkS0gV z9%7VRLlk57t07~@As>ihe?ap3ydeyWyo-lyeqcy{L$;!;o`u7Y@$0I}lLql|vU7%uoISdH3OXx!Vu+^PAEu{vVPOs6oY9EHC7{ zR&cjy&sGDaU&0po|qUg zBxz`vK6}nA^XxXj3N04~S3Z2ucYFwY%nJvZ6aM#4(**jM>b&{AJt&092vVLL+1Gdq zVM7>|fU8p^ugzui1JF|!8+IjenkOxbNoyVBor? z*NR>T<5`!sd+PA;d}gag;nJiHT5->p{#+*ns7?Y0VB#yol$4k@662B+l_|n3itSu| zd2aLf!FLseUV>09f`@%FRQ>B>S;2e*WtdQuiS`yZd-=@mz0fOs!7ELy=VeGLi*6xy zV{);dAWV2~PEA8ayl2UpPV8ATn>~o}QQ};(wHo5tlxg>nCYk(<`QA*t ze{WLxio|S{$9Y-!mA53HoxXP(>wqr69M>~=Mz?1J)d$WJtJLbEa&ELh{PJpUNgCW` zApSD{fL{PL?E3ZHccfrf?2!rWogFM+4;}34LY%>k1E*_=L3m^_&FB658fQYr>dYJB zFVw7)R)LmubJ%5BHP$tBeZYXrf@-yq2`Icu+A-OduO(2j?`wS+t$5}z4f1x0`d?SLDPFkZJi-^R<+UId^ zePRMk8>7X{oQon7bPvNzF+kULB`S$>6j<0#$(s)4oPsr) z_eZ|=vR0`LE<4hKTTf3l?BdrT^2WxGbA8EWdv-vfce0y(Q}G33D?iN?8=jLJxobJT zf*=%opD00EyKmjx#Kk&R6EEK83F5_wM?5UC*F@;n)lu!<6@g^qtZFu~9mSiWFFY$FRrlq5W z*&%SBpqJQKY&}?&DFOWHpaX(1^1;hyJ&WGFd>~hyrv%9%y!#WJj{oudWy|mY-N+LL zqSm)?(u+6dkXdvYD_6MEPEz2SYy$%`7R&k;(*VpTYqRAx^hWqcyZ-NhB`Tu z3|~F%A zCM`3c3md*14N)G{4B4%rstZ2vbMv2@Z$n0w%fQ~%b(fkNR%UV$6;%^{+AYgWl^hJ_ zIuL*s(}rW++xE5$nr{64jq0PL?JrB3Sx=oZEZ_vzlQ%;;$X==I`uFUngPYc;;jATaxUI3mHv)@10el~SGFyaMVIGzsK zX$bF=%^r0nDjc%#Z0aWD@Iz3wd!o{!FRsJYqi266O{+D;EQI*(l57v$tnSg;%!xB3 zJ|Ip6+^xG|-vbZ-ta@c%lqUVDTb3&cm1};Tp{+-kUG2O>Ej8$Q6t$^c_SUzWL#Z>> z#lIaT`R?=II@XQacopS!?~^Yrr8Jw_ET#L5kHb@((==cGB+h^mc0frG*RKacLc!1B zg@9S+sYpsgE2>08e&^eV?wA-maffr1@=u=z(X|~50Vv`6Z1Oc8jDl;3x`RWcL9A3M zj-L25d#Dd0LfmT0Ae$U@k*|KE)cV^&1DQ@9MYVA7Okp-B zs(aa4RJ5BVHubd-PhRJGH*&ZqDIw=;;s9*min_ER3nC+gNgEM|DJEe_G0%=*4W$)v z>HQ(5mXFkm`Oi(u${Cv>#=ECExxa6$osrlbHS8X_{PN_@vjA;SCy}?y$4r@DyXJp9 z-CC4}a%@RPT946evbrd#yH6XCqyw7N_pE*Z2vY9OArea~x7_Ori{!r@do*5NV`P!x z_j>7QBwC~K>KsUYs5dkVz69_)Ym8<=`AVSM{7TvGqVMPaPUWFqEfHQn393vR0*-b` zp`@492`NBV{^5JrAkq~8;j0dZXKA2zPv;rLw2<{O)iy)Dk1a6YXu?o&D_cj(`eC0g z8=KJ9T9<$C)AHXxxF3dpJxTJGwJWa^?i$iD5)PH;Y>}o1Q)sEsreeb>?d?f<#GtA@ zT|V0#&FJJwbyQfivGGl6){_GV9k=16D0br@gX&X89|MJI*s8;OZ^P@v5~9M?r+Sw@ zx>ZdZ>(PysjAM*He7okdPNAHq=|y&fm6hQje}K_7=Yb*sZ&LuIvYX0WchnY|IyN9s ziFgL%oQ;(bAbd(G{bz{;?Zt~*osz*XKr23WVPSx6=RMRDW`@a3=LD+VX6QkyBG1>N z^F@1)p@)%i+}$D}C1Kg*ZHR(t8xNGl-8Myio(&|upZ6MP&G|g-B0qwB4lq@*8XMiW znO^0C=f6&`T=~d*z`y?dd0)?v`CY4}p=>y&aq5k%Wv#p+3f#PNM7-!SIzfqy)O6(U zF9+A?+=B|@q8Yk78Kh6TdU40^5|u-b;(2MAM7k%XZ*3!dlc;}xPEOc=M~{( z730^b^bKKia!RI0!dosRowYSe!BZI&ck{w_e!8)wX=!V$eBAY3|Bz7Enrc|UKp*R`~$ z-E0}W)&FCCE)s9a<~kJ=)P-w9B9mJ#^rEA#j|5)3^M2vh5)#4W~HF zDU~#rIc?h66l-S!nZVyE^Fq27hPY>4B2;LDjc-qz#Db7-QF@JqdWs4F2u;NkKS8eH zeY9-k+DwLunTfq*5wA|&W8bRbvtGI3caN=p6|2$lj)g*~cqE8D{O+GF*u(WUHV=rL zhXd55geDUW&{r^y^RkRqJpQ>N6>+sd-iViwmv1p0B|jmI+>?o9zh3;x(01|In0uYk zkYl)iSfbQOa*c!fJNBBCJrwnq_Bh*whKc(h!{WQv>nf`uX$5p;paB`s3aHq@4RJcaZLI=OImB%@nO~_33V#ggt% zY#&K%woc3H%tz1w3t#@Gz!8|}DI})%FE8L)=CbU`$f%f#C${}A>DVhSg70Er7;ddq zt$O~X%RyN@YK%f~vLo(@*m=0IEb3v}#T*0$r#op4+Fv@qd*z;2KJW5{k#QvKcuB2; zk4^j|e&N`5D814fL(a}7+ z^{u*N9D;7??Y!sl>XSri-SM>22Z_iP3FT=YZ(IXONQuNi<>h3ArZjDfYTuNC$Q(@h zWOuooU^aBCGq0@ZgE&4=XSLim5>S9?dXmzLfSWrIf1?n3FZS5T_z-bhL)17${ez{T#h|{kHV5xmc*UKUUV7#Z**aP_GNHS}+j+A0Yqo z5J`%3qT)x_9>s+$F5EZkm}ftO)z{>o5Rd#Hql0$Lkq!4A49Bfv1>$UZGY?2K4A1#` zOO&#mx`Wk9$+P30XI-JY^8NF?9@_)OgiAi|Eo(7!`1>{NOIzX4^+M&v1;|5`vXfsR z<|?I_r|fnlY22b0oo!4KD{QNN1>K!I}_tGvHiDnDwoyJ4uThn8{Y#d=j zvA*cPt*=mm`p{Cx6TH@Y7F4ImHth&)?8ivHtDXp_$~avcwYrw=^CI4RQXur~imZWD zINPL$G{BF|3Por)sKfT7CwOnQcM#PWB4%N_fAbqQvE(%x3UM19DYp2pQ^~~=A#CWL z^>(DK@!V}y)lK@I+F8t-vRww#xr0~gbGgmE(|W>m1VijGLd;rO5eo7?w5m(8X>xw1 zNLw*;kX>$@{K}K1ud>nM)Tc`bKlFsk(8!AFFq80>uIs{GXryD~zCQpb#qFju3~d^P z?Hy`>kEv#G{2+IVeFm~+TODK=2>sCJ;g#oq6917xnbq!D129N9RKBU%abukWK1QN7qWkf zbrESf3CC+Iba@9KGCRdb)2N&2*t}!joYg6kVX(3FZc(Su8*xf$`UPoz&NrJNidPf--C0C zTSCRE^e&?BlAIjA-J9?A_F6C?{T1nmfnMQzYSxv5?dA?O&ADF6yFW5%N#61;#hj&s z5CuL%_!7>@Ks%{K0T9$`Ol6EY9llC35e#U9GiPY+R=ycD1zfSw-^qy=4~lhJ8C@DX zhEyurAJfoSIoLN~W4lm)L}|y5R-BT^9aKB_f2WS_?npbVdZ&oxjM{=;!3)|!YPe~KXg>F)i1E-(G-)&7Tu~6oNow>}`migg+;;KX&Ht%)7wN0C@&{Ug5J#ukHfd8wm67J%mzVf;nyp z41&F@EGc>j)sboHU_@GkIVT@8ti^w0a5Ki4+pHg$js}>G z_zuHgzkY!@Vzr@~;vnBP6?_4!=szNw?b%&>>=gmSFIibxB_+vc^BinaoVgWjo^s83$L6OvAR7->*K3S|#r73%Iuke-4FEaPlm_@g0sx#Z z1a7V3>VX!@c552s4WbD^wY9+l)Ivwq#6w)^_^Y`iz*(N1HNrF&T1|-Rf_8;TI_hj7 zkevt1gusTStm%rv0A|Nr+im%y9PRED7)co(-VK#1_po)4oHz5kU}$Zn9cwju9(;6PKZRJ=rG(R zTM%1=koYg7dk)I`2|4F}SC9zUr2~2cumaobj2wV7M-}67cD~S<%)TYYOdVm0=uuQ= zMokItuXSl|4%>ir7QEV^Ds$VfrLiA&WD>jlXZBW>Pkj1BA-Ma~+riPXYy*#M`n3#@ zQc$LUY5)>MI&YUzVWP6r@nmjy zBrEiuMuX(?ZxJKo&i2L-gZuV#(Ynv{f=1(_Wm*R?m_9X>@9k*2O@$mkXh~DrT$7gG+S0x?&UB;DVOZ4P7LcheAEES>Pj zhs~9iyNcZa$sBk$gSGw^7zc|E-jN0`ZH<$$m+p2-0*V~yp6Ns8oEJ}%+rRXCN(Js& z;KPP^)?nQaTvb)SEgT0kVLHeAY&lnB*7eE8$%KShx83_JEG+l$FAo}Z1<$BdyUEGR z1yA+H#jLKbniYVKS)Ts)_7)6?#LEM(?%kl{4~>cvfY*P`gEULCAd?9FdG&MQTDmT# zHIfIw^^=p6H8r9ohx$#q;a==WgbIPN)l?a{P`9sJ@Tzt!v~c~cTR!xf#Nn{ek7B?S z2*pMEP3I{c$3D`4sI%Qte7L|sM&D_B!)z$HdZ9mi;!|=AU*r{iJp(L+(H3gzHabb8vGjyZE|b3efKLG9*2p)7j#h;Ydl3xx!4$w^`*IlyLx;42#>|?%vdzn$px` zY4c3ZdO5X+tf(olO9wXTw@7drnUF7mt=g6^+KePKj@lONqD--FER10qE>-~Q&DU1E zO`(P|o@x<;enNlC{ZZ<-J~Ifzsto`Jj&HCO#yYJ$HySni@?Jz_sJ_lW_TCt{se$Sw z*B6(doT0W3(kP#2&n%bjavJa*XqcRzA5INgur}$#YL?jZ+uXT{4Gjrn1)jS#2!=t6 zLL7i7^H)+u&HKCZMt-{^?~mo%TvuGK`t|X+$Kwnobhr?v_-9_;n!}qP-oJNthN4q1 z{>5}~!5vpfD%-;&vo5e{+-8KunAd4-X4-lmT+tuTaY2iK3yHqzoJv`$a682&J5N$g zuDRvrd#FV(t0Wu0ZEhC30gAkP4;|XSTx+V6C^3X}Un24H#BZlFWuu3Oiryz$dmHIF z;K5lmz;*yrCxp}%oWY`*AU0oRp5B4S5%2h!}~n5L4BongN9jY{T9SYnM1pX>Sk>@{Hq)i$bte;$__J_gzXr)=nk{J!;GymOs(} z$``?>si4pex1H^0f#BbrQQ8s6UmCcmhVLhqN&a`kx! ze|tcaN>b1jm8dPuGmUvMxI#u#OBBSSnem`pl6mGZ-ytrhTV3ZT!$%*CY|0M4pLyEu zh^0}gw}Z1Y>q0ERxQo~4%y@ool;jVc+OB+eq$#R0UphvBccPBg*T+Y65>Ocf`3Ms= ziKe!NA#JDS+A|A7v9141O2fvd{&cCIIZMHG3mAP-7K7s>#R#PL=PR80z#`=FrLkTb zeSA|LX4xg+js>BcT3YDfSrf?+Fp5B(1vD@4=?ksQ!~+{1$lX>eDnkAyZzV%+wL9$r zNL@^q038{VDbi7n%@_3260&vb`UQLWH&_tLnHs!?4PQVnZ4Z}%>x_?&yY6gO2-+`7 zp=J-0=iN(#4ji0+Dme4R<}d%WG#RDqW4)g}CPZ@=)RG`MCBn)2q#~8r`Cmv&z!Z-F zLa;^I9{1)M!{-(>TtMrXI)VSEuLp^gSTiw)|F)-=Ml(1l@%lxW!+x$HT+5)OD&~QRl zgD|43;fey9aqXK2mseL;&IK@FbF6gKj9EU$7XguFkCa@F-eROM`*8r*o3$CrcyZr` zcdk1ZT(@r0R2=g*?qkcBPoCLWC;*g&N&T6o(u@InEQUou!*REflz~q2+0V=fm-QY& z=gkX&n_wW*wdUCL?gO#hp?)#phj`oKFF?UuI1yaC{zEATO4wtcBUAKZ&_8NWNbglD~GRZ0R;Ex=roOIJ#du*tG#?rkriEz zb>GciscatF31o^jeQF?7sYadu`p9N>5mu_u^c$hS$mXS`rJd4+3Zll8Wcc)ro44Ew zU%gX8uCHz~+;do}tnv`6X>GlmuOrU#E;8$FWu<>Kzwa|Qt&unn(xR*1TO>VPbsicv zoZY5{W#_P^4XndCxjAkJQ(@B4{G>;Z`*;UrS%jGJ0V&y{@~tpWm<`H&|@JXF=4(x-|S$dOfjomX((4YYf;eIv%q{| zY}V-B#XI_|s^w>+rTZ*KD>E@ApdT)rwFSfw(>W@*^}%Nu*tw(Y%_F!ZMfbP&Hlv5~ z$!U3WZ2B_G-P~^0*6wV~Zy5}5cvQVadic|E>iG*WZ+E6Tr&Q~I&WgFwZo+~RbR3PfasAr*{$!OD^>JP<(&-SNHf%&z# zIH1+TrNJJJ0ev#Ssjs8}@d=(V;66$==Zki;Dtgm3j5LK7fB0^%%^8%)FhGw3 z>F787h(TzSNT}F-qq&G9xG${D_P)~8UG&Huf<&Y{>n`U{2L)$bh1lUHl~)Zp$AX@@uQbaG0V_&EUCA`R$u5i6%{mKG)6lJ{Tvd3xq(-$}F^Zd9^gUk)2J3Ll@|042C)y zv~@W?uBzgM+A$i7Ee0GjC*Q4Ge7EW_7}tqngr8DoL|O|&e?gYGMwE0iKa718QmLnT zN3N^_*_YPcvm?Z$>8Q8UuQDa*{;TE_oL}r02NgvRd%VA;iRf9@sSlP-q8%5AW?s$Q zScHn>Dv4ygViU^WyATi(>rQ3f;Kmx_{&4+iK>nV_8;elFeA-0COnq~JIV z4*Vg-47CC!EmVi$@PLX)$i_@hb62yZ=*Gf`rkut+Uv0Y5W&j^e-$N|x+4W*>;vX|XR=E3hQ zglV5Tbt;&lY<>Hhh!;yhU%Ez-URP4**RLSRWsiRFe9Q8lWy9GyQg3L@6g^Y`x1Swg zT3^TCz)F#?S@K+2E7gVD&m1dsT~JeWJIX$WE0m7UVJQpij&5ySURo=G3$B zagFxjy?eKxi2?*AB7~JELmQ?PCG{0Scsn=6PBZX!E;_`~62TtUiD21!J^cdKEz!X| zvq+b5(G34`*XGbO+1ZSp8P1znxBY>^!(H2f=GYiPJ%9CQ5=Y37bywyxaLou_=CVs4 zsjqihSK3>Zu~P~y@e)@ku>}UQZmNl4bg^w}N{Y(%DtgC`;6I0PhO;oMW6#h~ z35cbYD#Vraa~-EvrqsF3R+g5+9i~DSe#DC<*kjAxfldMN4os5^InMFUwXsxjdRgw0 zsg0qKmZen+;fHDRe#U*$jz96S?!6F#a(r{y+kNun2`pwxLvBY~^IDRl1il4__j9u} z_4O5~qhp+*ytvH0A2}itmNg&1}dUcL5+ONBb_%Tft{E2jk|TQuddOxH{XSC zt7KM=FhZ=m(}vW(82}Y~s2{Lc<qUB+WPyj@qITDDv8=C?3R6bsv$^y$#*K#(ywcl#MhG@h7?N#EbiTd#h#SPj6*Ja&ryxTpr6%_kFhViHcm1 z+{ldAJpi~*hzVG5_m>t5nkL{<9y^SZ7*sL^dB7{~e8~O2rQ5aez z%!1KZ%@_~+ERh6jV|@m&JPp`!uGinNh31+=DYq#vx$JNC9I=ch$d;vuq#`$6=_Q{* zY66KWLpM%N!d}I!eahRrb2jN(Th|r`f$#4FNnB=nWK2uFj+=GuOmEDUEHGEZ`_yV- zF_quHuWoNz&`?pGr<-3~%v3^}ZDt9a$lARJ`_43rhky50OSKwGj-D`3He}b+0koW_ z@sW{{-bas-4!O0rpqu4kE{`fG-3lRJP1w*Gn;*;;Nv)ZIC+G6P#|R4}U0k$NPR>|8 zQN!TKaSA1RQ|s)302onfAH7(GeHuJbCg?&N0|`wLez*B>#M%|#+Le}xfY??-p!ej| z^x&ECkiZx%HMKO;X&fQedPVn2)9xj-yz#)&VPK=*iRDhtam>=;*e;pK+Zrm}NWHMLSI#aT~E-E;BX9VuDKREJ|v+tw(MZ(-!8~ z=eT*Cq3>kcCru!@3-(Y9UC%BT9{IVt*#KC+V*F>$bUu0f<;Sh^gl_z11Er1LCrA(? zSXT`M&}ym>LlB3#xbw!++Wbf^4m@qnXb+0IJPUXKV8`46(}j})mJMHW-L=0uT?t>9 zm&B+p<~Auu*;Oo?datG{ezX5*ZviT+%dd=Tc)tYu7lvtDee{mvc~v>sgA57eH4}DB z*DTv6KsM&JFs0d`hQRChfMkNzXk&-4v$?>^a_2#0E7dLOd7f8q7jR;^1L-bodA%z= z^JSni8>!5%j)MfIS*%QmgkE%KYSZrhbymO`F861r%oqac5H{2L@re>!0vjVR{7aBr zpG~js9Y6h22y8z&iT9DCQL;#9-Jjnc*Vp$Ic%GiuO||)movGee1hgGYajhLbL6=w9{UEg~xnjMERV?IEmR{HvBzey;2&yG_Ar=SM z9iF_OD`k&%O*JXsF|{Mk3Xo3wnQr=DX-Zb~d&>FyJz08lMo_EmVrSxX=^!8%6N_d$ zs=atJwY9&*T5v~lU6!)6v<$hMG0XQuigxbF!P~d=$rQg-krd;OMMX^$=E;Nvlg-86 z4pn*6ZEl`++^ea_5Gq0toc7@zEFIi!Zyy<>woCW-LXczcqkCZrxnOt{eHSbZDj zRfzLS@-39xmO!Defu4<|C5s<@~6KTM`sb|o0SZr<%IXg8%_{M@@S?MqaBU1g#X=Bl~HP48cjPFEnGjedi8_ZCmg{{wKV}8ci?^=*QLs*ll z@u2<8_pVt!#4Lx+hN-r21z&6hVmKNCE}l1QhOm5PC=Dg57o4PGVrixtpYWwE6v9`I zlr_DIgDoxF?Nhtq-I-!LLS{GfmEnqt?`qDH%A>m=ZM>7WQQ|w-Wv~*=JVr?gDPU-a zc!l4-+!(K**B-AHQk*okO9w~oXAYE=Cqe#KYWeLt#2gP-hy&@Z6(5OwRPQkg|;_y0Z^B)T0#=%zSEj_NBq

;h4)%J&gqLRG<#^dT_$|t}um&9QR-2icM~;)rA$ugIHa;aJtaU3G z4adFZ=D{o}!?KYjXQ5Rs)qsqh&cGvsXc`ykzpCE)${KjCi7r}+Pi$Ik{%3-4y zqIU()Mdo8Sh1OoKv!{hB`a5CH>W#3#BuWw?r964+OpI%vX75zR{#pTZHQhVR<^$2 zH*iPiVvgutYo9frV z&|Wy7!nV4SlT!ort1Jzp+w2Us`&-r*Rs&0SdeuE3ssf?y?Y7E4Zok1$K@Fg#nSjQ9ZamZrx?-~5jtMAgutnkr-76xvDzu8dRLp%Fs*41Tkf8B&+FVBx$gFBs< z2(njTpAMe%>`&&*Dk~zcG40_B*Iak>&9RG3$^ASx#YFA6b}czlXkZHG63U0rSnakS z_qEI%9h`)I_v^sih9xVjeCa&~f9nB_?7|@Cfk~+Mq^?25Iv%NUwn;#3se}jrUHJ`T ztS?F7^w3A^nuQRN9$2ak2lCX+bQQX9hH0g_xJk%JB1NO65rSnn{%(G3s7vQuQYZOiK_5E5H{P;RAvQxVcR$IqOn^sUX&n|NwYswMz` zvW_?`j=st}+Vo7US2~Tn^-XsB%L};kfBy;ZS%-$D^eGkR<^{4d{r_j@H#aFPCNDpB|E5DR^B zlz87--~ExAL;C5DW}NutKa7?CgTMFRe+K{d)mxtF;tr!)2nlb%945Yizg{d7l4oQo zheoKWYyW;Xt|RjwB=s$KYYw1MI`~P%U{r9u2&;#^f0b}o=ptxVZ z%=zuxn$|OpLvmM79=dk&aV10RdomxNt11I;zn&;Y7QPSGY_C0D=#5R|Z?isRDlz`l=aTH?{I&o!fMUY!-=zX!!V- zC-VO@@Zv#bjHAlSr!>G#(`7$Hr{d5=_V7C5h_kb;Bg$7oO>RLouo?}DCHGkNwZs>hR*a+5tqM) zhVqz4rDg}Jq3SzQ<<)a@A_C}9BR^iI77K10f_@8fmb6HuNyUEgII6FuwRNRncK1T& zBOZP|(fhf@XL-90>B)o%+J zXCH`No}5rtR{r?pb+$^%xkDGD(0 z%y#W84)KiEeClT}|7otFG2fy{h!Y9Q8-#yB54`WV7!@&S(3e@WyDNlsn{%GfAO|zbdirDUW{(4+r9oK_43p1%;RT7x~+~iFOa^=WRLP zERWyFP?{yUk6nlN;9YT`**5T1?t0JI7>w`^Lgl+dOwu)G1LNPK?yx;PUyAm>a%5%Y zxUPZt9W~qil=8Ka;DKi}JOw|KW4<=^6Y3eRYrA9a@)e6rw7$N+(D(SnSVw_HfL`;q z+kxvFH#cHFhfRAit)n5f)SAU8`Q@3pt2W#G^GVf3vn}Oc2A+8#EPucC$7kz4|Ee@( zvt>PJZJu1(d6;A=^7v?1vNRVD&!)d0^^=;qdJ_P6ma81N* z4ofBEoZq+JCn@YqPIqy2#ChPlxZTWTPrGWaizj)In_WOafK~~&{qRFg^URiH=QZfY zHW84KT`$Ncz1mm7y*Sht5qS zK6|a_QAC;dstd9fZzXx=b19_h=C+$)?_aKh!5$PBo4UE;kF#J_HH3m1-TOsiHN%=S z0Z-26_u)zj^N|n!wYc}NiTRy^~~M@T1Zaj^Df1NATU!J|FAyzD}7NJ3wQ z+^~9H{Uu*3`A?3x3?}EQv0PHD`9z~w+QndW-<(wyFh5uH?9uA4TYHmJ@{zL;S z)6^tGSq4N7dxf2y0hLQ0D|9hUop^qK{u?mE6M#G-;<^2g{EV(&09!FOI@)LF`}b7Y zrePD0D>2iD6qi5P^ch&}j?J{|~3l!!Rq%>7nxS08P#WJ-w)%X0UX{AjV_vDiw`(%IrSK$i9j@a+Q)rGY+ zegKfSs`ulQB~Zt2-*+Z3I&u7tc^w2RNGc{y%CSeHxw%)+AFrFQEZ}GC*BOwvnhr%D5m$A3GZuJm6QHl2``bU{7o_J}97=SQn zO(lb6%_=eB_4K3`)Yjnfk7)3$R13yMt;|S{5o>ELUWvYBSs^#}c3#c)Cxq^{()9BV z5FM5YDaY9L`Of)eXQ80=C=az*g2`UtXaxi@*J%NRC2;b?jvnMD)q=fA1kLbM(PVk>x~qD3GO4e=~A&&Mjk`K4jn z{OI!XoSBY}GYXr=Mdmkw7#n&y&Gc?KV^Bxt5lu`UiN|%83FV zI=hZLlFHov_GEON;Z6hZMYov&KaW0bs$Br{SK738bE0@=ll|pyBjhl-#3sf0>`pTVE(( zRjH8@HHvFZ88w7I#^;J)CXTux^3|cwT4%ih1B(D}zc1Zh&)d6Y1rSls^d%*cXH!Xq zVa(xzsJtQxO)bPtzmX9#IUz=0!7ZCu+Q*19#UHyYEvN`Du?nooRAJGpcCntS!EBRZ z)Z^PX`CRGtMiJSL^&xI*Z*p?DKRuKVZA-v{b?rRD^~Th+C0;y+(ypm4%PureLKW>V zE7zK$B7i>Dg|+8!Fd11a2I}U1()hddRq` zlBdw4PfXdXoS2vAI4bAB`T+y_kb7CdJe;z%%4M^@R+mIQPWs^mB#;iW4$>nRSx4$E0N)Gk*`}QiAWTG=@mof!SA6 zE8LCKJ-2W351DLSq1q3$7Yw?Ue%w9>^=jrTcIoiFcilYP{()S3mWIpKj zJGnvcW|JZ19Y5=;7A^~7!EY%}I;XB;_Pxyf{O)*H;L<01s=VTfNA1`y`YXUcByQ{H z0Bh__&Obi^oLXxT#?NCbc}5;hu>U@rYTDvM32<2&HMKCOc)Wo88S0~NE3B2`rS{H1 za-pBGx4-k;E_Howm}D&|KIoKrH>J6`3(;@xNwmLOR1UxZA)7%7K?OVrhxnnZhOFbG}1#ys0M?QkMiOq zSscnD(|(92>Bxv`&(Z)+2{Qx)lYU9Opig|*(EHsRQT^=&QwAcsWJ z_HG;_7bz(TWC?^wG1{k*T{%A3&J^M3r~q!1}A$rFucQ9 zZ>GVJyw6D2LHY56XgR5}qvH}8;U4xf+W&4Y8vlN&q2`V0gH}lh#OuQO&5Fw&k#$wY&RS(+=K{^ls`oik3c0Dhe;O5F7 z249gayC#0GtW2d4?$D;>O0p#Ba%zdYflWaoSv9i<@D>5py+^jCyL5e17vh*W>0N!j zJbJen6Y`R+|2YfwjkCyYjrcFvS{WN@vay+2xrft!5bHtAO^E4s`ogh=h}<|UqTU(E zb){!s3RUwKV&B=()up7a#-p@h{D-#rRz1Z9%$)9T%-ZHGvhPHojYGA4G1o{Xr?RrB zT3W(mzTJprOPBI7W>2pyARDP~7!b@o3}kf%x7Kv9u`EKFZUKOaX#A@194-_9$YQ)*p&Y3E21b5#204Tapt#4=&RpuDv*{S4}7rV-ywLRe_%49Z`Bd#AFo zq2cksxQuPM6V$m(hF_X2B`N8>?wG2V(KA{B$~1lJjH?nlEV%buiyw2^%ATW3lKh(D8bQcEgwL^DML%Pz=lefZOU*$2zxU}ybPr2T(eX$jkYNZx7 zi_R#y$C;lR8o;x)b{=7BWwjP1eEnEpy_y_ed1`;}&{U&(&5GK$K~*z{L$%8CEsCMR z(I&^_yT`0#_`Vd9`{#}0Sw51h zNfeJ^mc&|Y_0(jFMTG$i5w%1Cy+eA+b!^MMX|AJk`uZ{DSq-}8NPI!b+%2{mvu&IU zREzqjXX3<7V6kx?6xMg%1*OPgX*Vq`8?`UNcGZTc5#wt%n)NBSz~X|4h0xZfx^cPosI^Mpjw1#Yrm?gLkhY0)~DM_*z~%TPFrIC z?o{NLyenZ{1BP&Tx$Qkl5UXu+VeuJ}M{t?K$Ia28;stu%mqqi32)OabaWs7M0^$EW zNLD6!jF{xf$9cU+UDb97mN@IRTInJl0Hsgrb6_-@+XlmLV z>pxjYh<$%u=yOL@RC49uz`aDc550+Brrp?VRIv<_@Wy>%WNNB7gd>WR6!<$uIdlVb z?>*XBOz2QtsHk?96)22AnxB1B1pp@_9M}o7xO`jW)nPLXC`w0y>5Jn6VzHVe^J;ii zRZv(Mxxe4~Ba^%RJChu#-d;)HX?E>& zNbTZ)-lLjf4%VN8{mYT5r^yFXMRhknPCmH#m!=@N$6ugvUH>_7%YTLatt9##huzU+ z3qCl7NtSv=C;p1i=llDRJGb~$4!-I<1)ruyE2sUu#xu8opU1yrjQ;|9vpo1a0NQ>Y z{-ff2; zKZjiZezpH5fcwwhGW-o>{STUN|0#a`rxE=}*@YtvmbUz|1IufuYO54NEuZ}ZH`jSw diff --git a/site/assets/social-preview.svg b/site/assets/social-preview.svg deleted file mode 100644 index 84df4cd..0000000 --- a/site/assets/social-preview.svg +++ /dev/null @@ -1,37 +0,0 @@ - - Windows Diagnostics Toolkit - Read-only PowerShell diagnostics with a terminal-first interface, local reports and no telemetry. - - - - - - - - WDT / WINDOWS DIAGNOSTICS TOOLKIT - [READY] - - PS C:\WDT> .\Invoke-WindowsDiagnostics.ps1 - See what Windows - is doing. - Change nothing. - Read-only diagnostics · Local reports · No telemetry - - DIAGNOSTICS - 10 / 10 - - - [x]System information - [x]Security posture - [x]Performance snapshot - [x]Network context - [x]Disk health - [x]RUN DIAGNOSTICS - - - [x] READ-ONLY - [x] LOCAL - [x] PRIVATE - github.com/0x0bug/windows-diagnostics-toolkit - MIT - diff --git a/site/assets/style.css b/site/assets/style.css deleted file mode 100644 index 45fdb74..0000000 --- a/site/assets/style.css +++ /dev/null @@ -1 +0,0 @@ -:root{color-scheme:dark;--bg:#000000;--surface:#070909;--surface-2:#0c1010;--surface-3:#111616;--text:#f1f1f1;--muted:#858d8d;--dim:#5d5d5d;--line:#244141;--line-bright:#33e6e6;--accent:#33e6e6;--ok:#25ff45;--warn:#ffff24;--danger:#ff4b5f;--max:1220px;--article:820px;--mono:"Cascadia Code","Cascadia Mono","SFMono-Regular",Consolas,"Liberation Mono",monospace}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;min-width:0;background:var(--bg);color:var(--text);font:16px/1.65 var(--mono);text-rendering:optimizeLegibility}body::before{content:"";position:fixed;inset:0;z-index:-2;pointer-events:none;background-image:linear-gradient(rgba(51,230,230,0.025) 1px,transparent 1px),linear-gradient(90deg,rgba(51,230,230,0.018) 1px,transparent 1px);background-size:40px 40px;mask-image:linear-gradient(to bottom,rgba(0,0,0,0.85),transparent 75%)}body::after{content:"";position:fixed;inset:0;z-index:1000;pointer-events:none;opacity:0.12;background:repeating-linear-gradient(to bottom,transparent 0,transparent 3px,rgba(255,255,255,0.025) 4px)}::selection{color:#000;background:var(--accent)}img{max-width:100%}a{color:var(--accent)}a:hover{color:#9cffff}a:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid var(--warn);outline-offset:4px}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:fixed;left:1rem;top:-5rem;z-index:1100;background:var(--warn);color:#000;padding:0.7rem 1rem;font-weight:800;text-decoration:none}.skip-link:focus{top:1rem}.wrap{width:min(calc(100% - 2rem),var(--max));margin-inline:auto}.ok{color:var(--ok)}.warn{color:var(--warn)}.danger{color:var(--danger)}.site-header,header{position:sticky;top:0;z-index:100;border-bottom:1px solid var(--line-bright);background:rgba(0,0,0,0.94);backdrop-filter:blur(12px)}nav,.terminal-nav{min-height:72px;display:flex;align-items:center;justify-content:space-between;gap:1.5rem}.brand{display:inline-flex;align-items:center;gap:0.8rem;color:var(--text);text-decoration:none;min-width:0}.brand-mark{display:inline-grid;place-items:center;min-width:3.25rem;height:2rem;padding-inline:0.45rem;border:1px solid var(--accent);color:var(--accent);font-weight:900;letter-spacing:0.08em}.brand-copy{display:grid;line-height:1.2}.brand-copy strong{font-size:0.88rem}.brand-copy small{color:var(--dim);font-size:0.66rem;letter-spacing:0.08em}.nav-links{display:flex;align-items:center;gap:0.35rem;flex-wrap:wrap}.nav-links a{color:var(--muted);text-decoration:none;padding:0.45rem 0.65rem;font-size:0.8rem;text-transform:uppercase;letter-spacing:0.06em}.nav-links a::before{content:"[";color:var(--dim)}.nav-links a::after{content:"]";color:var(--dim)}.nav-links a:hover{color:var(--text)}.nav-links a:hover::before,.nav-links a:hover::after{color:var(--accent)}.nav-links .nav-github{color:var(--accent)}.nav-toggle{display:none;border:1px solid var(--line-bright);background:#000;color:var(--accent);min-width:44px;min-height:44px;cursor:pointer}.hero{min-height:calc(100vh - 72px);display:grid;grid-template-columns:minmax(0,0.82fr) minmax(620px,1.35fr);align-items:center;gap:clamp(2rem,4vw,4.5rem);padding-block:clamp(4rem,8vw,7.5rem)}.hero-copy{min-width:0}.prompt-line{color:var(--dim);margin-bottom:1.8rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:0.82rem}.prompt-user{color:var(--accent)}.prompt-command{color:var(--text)}.terminal-cursor{display:inline-block;width:0.58em;height:1.05em;margin-left:0.22em;vertical-align:-0.16em;background:var(--accent);animation:cursor-blink 1.05s steps(1,end) infinite}@keyframes cursor-blink{50%{opacity:0}}.eyebrow,.section-index{margin:0 0 0.8rem;color:var(--accent);font-size:0.76rem;font-weight:800;letter-spacing:0.12em;text-transform:uppercase}.status-dot{display:inline-block;width:0.55rem;height:0.55rem;margin-right:0.55rem;background:var(--ok);box-shadow:0 0 14px rgba(37,255,69,0.85)}h1,h2,h3{color:var(--text);line-height:1.08;text-wrap:balance}h1{margin:0;font-size:clamp(3rem,6.1vw,6.35rem);letter-spacing:-0.075em;font-weight:850}h1 span{color:var(--accent)}h2{margin:0;font-size:clamp(2.25rem,4.5vw,4.8rem);letter-spacing:-0.06em}h3{font-size:1.15rem;letter-spacing:-0.025em}.lead{max-width:62ch;margin:1.6rem 0 0;color:#bbc2c2;font-size:clamp(1rem,1.35vw,1.16rem)}.actions{display:flex;flex-wrap:wrap;gap:0.65rem;margin-top:2rem}.button{display:inline-flex;align-items:center;justify-content:center;gap:0.5rem;min-height:48px;padding:0.7rem 1rem;border:1px solid var(--line-bright);border-radius:0;background:#050707;color:var(--accent);text-decoration:none;font-size:0.8rem;font-weight:800;letter-spacing:0.035em;text-transform:uppercase;transition:color 150ms ease,background-color 150ms ease,transform 150ms ease}.button:hover{transform:translate(-2px,-2px);color:#000;background:var(--accent);box-shadow:4px 4px 0 #174848}.button.primary{border-color:var(--ok);background:var(--ok);color:#001503}.button.primary:hover{background:#7aff8d;box-shadow:4px 4px 0 #0a4d13}.button.ghost{border-color:var(--line);color:var(--muted)}.button.ghost:hover{border-color:var(--muted);background:var(--text);color:#000;box-shadow:4px 4px 0 #4b5151}.hero-status{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0;margin:2.5rem 0 0;border-top:1px solid var(--line);border-left:1px solid var(--line)}.hero-status div{display:grid;grid-template-columns:auto 1fr;gap:0.65rem;padding:0.62rem 0.7rem;border-right:1px solid var(--line);border-bottom:1px solid var(--line);font-size:0.7rem}.hero-status dt{color:var(--dim)}.hero-status dd{margin:0;text-align:right;color:var(--text)}.tui-frame{position:relative;margin:0;border:1px solid var(--line-bright);background:#000;box-shadow:12px 12px 0 rgba(51,230,230,0.08)}.tui-frame::before,.tui-frame::after{content:"";position:absolute;width:12px;height:12px;pointer-events:none}.tui-frame::before{left:-1px;top:-1px;border-left:3px solid var(--accent);border-top:3px solid var(--accent)}.tui-frame::after{right:-1px;bottom:-1px;border-right:3px solid var(--accent);border-bottom:3px solid var(--accent)}.frame-label,.panel-top,.terminal-bar,.console-head,.console-foot,.terminal-footer{display:flex;align-items:center;justify-content:space-between;gap:1rem;color:var(--dim);font-size:0.68rem;letter-spacing:0.08em;text-transform:uppercase}.frame-label{min-height:38px;padding:0 0.85rem;border-bottom:1px solid var(--line)}.frame-state{color:var(--accent)}.tui-frame img{display:block;width:100%;height:auto;background:#000}.tui-frame figcaption{min-height:42px;padding:0.7rem 0.85rem;border-top:1px solid var(--line);color:var(--dim);font-size:0.72rem}.signal-strip{overflow:hidden;border-block:1px solid var(--line-bright);background:var(--accent);color:#001414}.signal-track{display:flex;justify-content:space-between;gap:2rem;padding-block:0.65rem;white-space:nowrap;font-size:0.72rem;font-weight:800;letter-spacing:0.06em}.signal-track strong{color:#003e3e}.section-block{padding-block:clamp(5rem,9vw,9rem)}.section-heading{display:grid;grid-template-columns:minmax(0,1fr) minmax(320px,0.66fr);align-items:end;gap:3rem;padding-bottom:2.5rem;border-bottom:1px solid var(--line-bright)}.section-intro{max-width:68ch;margin:0;color:var(--muted)}.workflow-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:2rem;border-left:1px solid var(--line);border-top:1px solid var(--line)}.terminal-panel{min-height:260px;padding:1.25rem;border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:rgba(7,9,9,0.78)}.terminal-panel.is-active{box-shadow:inset 3px 0 0 var(--warn)}.terminal-panel h3{margin:2.5rem 0 1rem}.terminal-panel h3 span{color:var(--warn)}.terminal-panel p{color:var(--muted)}.key-line{display:flex;align-items:center;flex-wrap:wrap;gap:0.42rem;margin-top:1.5rem;font-size:0.7rem}kbd{display:inline-flex;align-items:center;justify-content:center;min-width:2rem;min-height:1.75rem;padding:0.12rem 0.4rem;border:1px solid var(--dim);border-bottom-color:var(--text);background:#090c0c;color:var(--text);font:700 0.72rem/1 var(--mono)}.result-frame{margin-top:2rem}.quick-start{border-block:1px solid var(--line);background:rgba(7,12,12,0.78)}.command-layout,.privacy-layout,.faq-layout{display:grid;grid-template-columns:minmax(0,0.8fr) minmax(520px,1.2fr);align-items:center;gap:clamp(3rem,7vw,7rem)}.plain-status-list{display:grid;gap:0.65rem;margin:2rem 0 0;padding:0;list-style:none;color:var(--muted);font-size:0.82rem}.plain-status-list li{display:flex;align-items:flex-start;gap:0.7rem}.terminal{border:1px solid var(--line-bright);background:#000;box-shadow:10px 10px 0 rgba(51,230,230,0.08)}.terminal-bar{min-height:42px;padding:0 0.85rem;border-bottom:1px solid var(--line)}.copy-button{min-height:30px;padding-inline:0.7rem;border:1px solid var(--line);background:#000;color:var(--accent);cursor:pointer;font-size:0.68rem;font-weight:800;letter-spacing:0.08em}.copy-button:hover{border-color:var(--accent);background:var(--accent);color:#000}.copy-button.is-copied{border-color:var(--ok);color:var(--ok)}pre{margin:1.25rem 0;padding:1.25rem;overflow-x:auto;border:1px solid var(--line);border-radius:0;background:#000;color:var(--text);white-space:pre-wrap;font:0.86rem/1.8 var(--mono)}.command-terminal pre{margin:0;border:0;min-height:210px;display:grid;align-items:center}.ps-prompt{color:var(--accent)}.terminal-footer{min-height:38px;padding:0 0.85rem;border-top:1px solid var(--line)}.diagnostic-console{margin-top:2rem;border:1px solid var(--line-bright);background:#000}.console-head,.console-foot{padding:0.75rem 1rem}.console-head{border-bottom:1px solid var(--line-bright);color:var(--accent)}.console-foot{border-top:1px solid var(--line);flex-wrap:wrap}.diagnostic-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.diagnostic-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:0.85rem;min-height:112px;padding:1rem;border-right:1px solid var(--line);border-bottom:1px solid var(--line);color:var(--text);text-decoration:none;transition:background-color 150ms ease}.diagnostic-row:nth-child(2n){border-right:0}.diagnostic-row:nth-last-child(-n + 2){border-bottom:0}.diagnostic-row:hover{color:var(--text);background:#071111}.diagnostic-row:hover strong{color:var(--warn)}.diagnostic-row:hover .row-arrow{color:var(--warn);transform:translate(2px,-2px)}.diagnostic-row .check{color:var(--ok);font-weight:800}.diagnostic-row strong{display:block;font-size:0.88rem}.diagnostic-row small{display:block;margin-top:0.35rem;color:var(--dim);font-size:0.72rem;line-height:1.45}.row-arrow{color:var(--accent);transition:transform 150ms ease,color 150ms ease}.privacy-section{border-block:1px solid var(--line);background:#050707}.privacy-list li{align-items:flex-start}.privacy-list strong{display:block;color:var(--text)}.privacy-list small{display:block;margin-top:0.2rem;color:var(--dim);line-height:1.45}.redaction-panel{border:1px solid var(--line-bright);background:#000}.redaction-panel .panel-top{min-height:42px;padding:0 0.85rem;border-bottom:1px solid var(--line)}.redaction-panel pre{margin:0;border:0;font-size:0.92rem;line-height:2}.redaction-panel pre span{color:var(--ok)}.redaction-panel>p{margin:0;padding:0.85rem 1rem;border-top:1px solid var(--line);color:var(--dim);font-size:0.72rem}.guide-list{margin-top:2rem;border-top:1px solid var(--line-bright)}.guide-list a{display:grid;grid-template-columns:56px minmax(240px,1fr) minmax(240px,0.9fr) auto;align-items:center;gap:1rem;min-height:82px;padding:0.8rem 0;border-bottom:1px solid var(--line);color:var(--text);text-decoration:none}.guide-list a>span{color:var(--dim)}.guide-list a strong{font-size:0.9rem}.guide-list a small{color:var(--dim)}.guide-list a b{color:var(--accent);font-size:0.72rem}.guide-list a:hover{color:var(--text);background:linear-gradient(90deg,rgba(51,230,230,0.06),transparent)}.guide-list a:hover strong{color:var(--warn)}.faq-layout{align-items:start}.faq{border-top:1px solid var(--line-bright)}.faq details{border-bottom:1px solid var(--line)}.faq summary{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1.2rem 0;cursor:pointer;color:var(--text);list-style:none;font-weight:750}.faq summary::-webkit-details-marker{display:none}.faq summary b{color:var(--accent);font-size:1.2rem;font-weight:400;transition:transform 150ms ease}.faq details[open] summary b{transform:rotate(45deg);color:var(--warn)}.faq details[open] summary span{color:var(--warn)}.faq p{margin:0;padding:0 3rem 1.4rem 0;color:var(--muted)}.final-cta{padding-block:2rem 7rem}.final-console{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:2rem;padding:clamp(1.5rem,4vw,3rem);border:1px solid var(--line-bright);box-shadow:12px 12px 0 rgba(51,230,230,0.08)}.final-console h2{font-size:clamp(2rem,4vw,4rem)}.final-console p:not(.section-index){color:var(--muted)}footer{border-top:1px solid var(--line-bright);padding:1.5rem 0 3rem;color:var(--dim);font-size:0.72rem}.footer-grid{display:flex;justify-content:space-between;gap:2rem}.footer-grid div:first-child{display:grid}.footer-grid strong{color:var(--text)}.breadcrumb{display:flex;flex-wrap:wrap;gap:0.45rem;margin:2rem auto 0;color:var(--dim);font-size:0.78rem}.breadcrumb a{color:var(--muted)}.article{width:min(calc(100% - 2rem),var(--article));margin-inline:auto;padding:3.5rem 0 6rem}.article.breadcrumb{padding:0}.article h1{font-size:clamp(2.5rem,6vw,4.6rem);overflow-wrap:anywhere}.article h2{margin-top:3.5rem;font-size:clamp(1.7rem,4vw,2.45rem)}.article h3{margin-top:2.25rem}.article p,.article li{max-width:75ch}.article ul,.article ol{padding-left:1.35rem}.article li + li{margin-top:0.5rem}.article-meta{color:var(--dim);font-size:0.78rem}.article .lead{color:#aeb7b7}.article a{text-underline-offset:0.2em}.article-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0;margin:2rem 0;border-left:1px solid var(--line);border-top:1px solid var(--line)}.card{border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:#050707;padding:1.25rem}.card h2,.card h3{margin:0 0 0.75rem;font-size:1.15rem}.card p{color:var(--muted)}.card a{font-weight:700}.toc{border:1px solid var(--line-bright);background:#030505;padding:1.1rem 1.25rem;margin:2rem 0}.toc strong{display:block;margin-bottom:0.45rem;color:var(--accent)}.toc ul{margin:0}.checklist{padding-left:0 !important;list-style:none}.checklist li{position:relative;padding-left:2rem}.checklist li::before{content:"[x]";position:absolute;left:0;color:var(--ok);font-weight:800}.callout{border-left:3px solid var(--warn);border-block:1px solid #464600;border-right:1px solid #464600;background:rgba(255,255,36,0.035);padding:1rem 1.15rem;margin:1.5rem 0}.related-links{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));border-left:1px solid var(--line);border-top:1px solid var(--line);margin-top:1.25rem}.related-links a{display:block;border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:#050707;padding:0.9rem 1rem;text-decoration:none;font-weight:700}.kicker{font-size:0.78rem;color:var(--dim)}@media (max-width:1180px){.hero{grid-template-columns:1fr;min-height:auto}.hero-copy{max-width:850px}.hero-tui{max-width:100%}.signal-track{justify-content:flex-start;overflow-x:auto;scrollbar-width:none}.signal-track::-webkit-scrollbar{display:none}}@media (max-width:920px){.section-heading,.command-layout,.privacy-layout,.faq-layout,.final-console{grid-template-columns:1fr}.workflow-grid{grid-template-columns:1fr}.terminal-panel{min-height:0}.diagnostic-grid{grid-template-columns:1fr}.diagnostic-row,.diagnostic-row:nth-child(2n),.diagnostic-row:nth-last-child(-n + 2){border-right:0;border-bottom:1px solid var(--line)}.diagnostic-row:last-child{border-bottom:0}.guide-list a{grid-template-columns:42px minmax(0,1fr) auto}.guide-list a small{grid-column:2 / 4;margin-top:-0.8rem}}@media (max-width:760px){body::after{display:none}.signal-track{flex-wrap:wrap;justify-content:flex-start;gap:0.45rem 1.25rem;overflow-x:visible;white-space:normal}nav,.terminal-nav{min-height:64px}.brand-copy small{display:none}.nav-toggle{display:inline-grid;place-items:center}.nav-links{position:absolute;top:64px;left:0;right:0;display:none;align-items:stretch;padding:0.75rem 1rem 1rem;border-bottom:1px solid var(--line-bright);background:#000}.nav-links.is-open{display:grid}.nav-links a{min-height:44px;display:flex;align-items:center}.hero{padding-block:3.5rem 5rem}.prompt-line{margin-bottom:1.2rem}.hero-status{grid-template-columns:1fr}.section-block{padding-block:5rem}.section-heading{gap:1.5rem}.command-layout,.privacy-layout{gap:3rem}.footer-grid{flex-direction:column}.article-grid,.related-links{grid-template-columns:1fr}}@media (max-width:560px){.wrap{width:min(calc(100% - 1.25rem),var(--max))}h1{font-size:clamp(2.65rem,14vw,4.25rem);overflow-wrap:anywhere}h2{font-size:clamp(2rem,11vw,3.25rem)}.hero-actions .button{flex:1 1 100%}.hero-status div{font-size:0.66rem}.frame-label span:first-child{max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tui-frame figcaption{font-size:0.64rem}.diagnostic-row{min-height:100px}.guide-list a{grid-template-columns:32px minmax(0,1fr)}.guide-list a b{display:none}.guide-list a small{grid-column:2;margin-top:-0.65rem}.final-console{padding:1.25rem}.final-console .actions .button{flex:1 1 100%}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation-duration:0.01ms !important;animation-iteration-count:1 !important;transition-duration:0.01ms !important}} \ No newline at end of file diff --git a/site/assets/tui-result-real.png b/site/assets/tui-result-real.png deleted file mode 100644 index c70d486ab4e0b88c0e0d3845e3fce8b535915f90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10046 zcmbt)cT|&Ew>LAk85EHs2r4*{qIBuf2PsPLAfYLObdbTC;h>%r#e*H6z*SSDW0s{c+}#%=H( zXFy_a6ukV;50?SWm=k9Vl(+ig;c<5ksf6U@@?yidm+cEem8iVFM;##{n%|}tdM%7| zR|NBnG*~p*jsNqbzs$w0<5v2Tcwg@su<$#djC5vj{Zby&dwEqKB@_Z34cTT_TC@Qrj%?B=oh$HB<) zu*Wk!T{9ZdeTE$z{0J+UKuN|zw9|iuCA(nhB?!C^w@HCEWh{;q$ZrW z$DFtC!xFF{Y%Q!crOoJ%t zZN$N}2kFh4V5uu!ojqMWsmZBp!GZg7Q!rh&GpvD?t>lBaCC<4_vpS1WWvCz|vT;7H zVWUTW~HoS8;+_k=@Wyi41&FrPuCK+85Ig z)cvugfFFj+Fw(X%p3u0lW3t0bjk|m69({YgTxSc;@o+b<7oJTJm#zv9!tZhpE+q^M z=1lwzeeGswdr%y=k=KETik5f=JEf3z`Oov|v=@!N{Y~c2ujAN#GBQsl^@UDHV~4`A zcJZFNwZ<3)id{1t13&haFRnMWS5rP$aNT4+`0=bJ!D-Cl@>bby@GcpA|Aor%rv@pv zvevHLaZ=h2jRnf!yWC^kPk1v~6?P$&$KroMm-^#?E z*CP z{%}|l)K_aML^defX<)j)0wP+nYaLd0T&yt0d`OHAtyI}6%T!6P3NGlmBDHmX_(!dP zl&77p4V3HtVidXE)AZV( zSeg}l^DMvU7EimnrfdSnRV%*$xX2kEW-I-vjid9_uhYjWkDbQ17B)ZhGDXZ9Q8iMj z-DT01F{sB?7VGrn@ek-y10vY{|6|Pqu-tnrb48wbE0%T-*~IM?B#*;7IOBJSJj;L)iTcl=spqSGMqqxw=&fZ17d z^o&c>jv*&*X{0PLm-7b8WOz{1vGFmuadj&VK}4}6+aIr?@G<2r7OM4AbYrk4bBQn1 zaomW)aa?q3?)P-Wsi(exdRLD3hV?ET+J6D!4JqC^(mtG9`Y1FcVF|Dbk-|lgysprb%m+Ii4WteN~aeP2La>^9$+J1NcrOw~+ zZ;e@np2)q|R@B1(Ra?gE%9k*lI1DVYdtw2od}fw=9lghG@6x=q8}h?+FV)d3sT>!E;|cZoHT|B)^`f+P zuKnrlkV*R3msu&14Er#mnX&=WDbUP# zORX>dCZuR?M%+;XM^=VtavEznS6MYAnkbGauT^A%lWz0 zWoKp%1l!bOx84FL$Or~2j!~zYZS_|$< z`kt8Z=ajFi_S4(mgi+dbqDdzRwMJJ`it8h>m|#J4dj^ny;cjY z=taBoUGjirG4=X_;w*8_M^Qj31yUf84owj=Q#I*tdgq+oc`O?aD%)9^qfx2iilPp) z>*i=TIK#f<#fPR3^0!QythS)R$Mu14!yavk%hHZKDba&rB@jnD8I*0Kfc?4Gd$cph zGbA@m>lAmWkc-TrO$eQA$}C5w3_jH;Ip^m0A| zsVS@Bg91^XUj$BdaJqHGTf(QFJOr7h;l{S6n^%TTUqwV<+Tvk9>GHEkp6b(})VnOG zdK=ppCHW^L90Y$tU@Frj>g$bL9?c6LIsw9fy5H0I? z`!YJH>hbep8YRTi6Ivwj$3)z*^qS4G4NZ`2rhR+YT5`K3Luk)qz1D%e6bAD2?H>a} zoe_uC_|I2XFDdV?rp!HVZ?(u%_?uhCtYib?3+yFm!sZs9IJIc~6@lpUjHpoe5URV4 z;-Vgfp{(aDPu&hQ3111hrCr)?%{kF9QuYY{1{Q zczsF5KgtBltR9>L(8nUEnerrDB(y%D8C$rj1?|VU{q{Kr*3g^P^E<#qYPm(2MF}#k z(lY7nOL>V@j!|oSPbzxv6^ehAvjG_Pz0_@vDmV9sF^JpOAe`ZT&t9H@-#lzoyo$-&U=~6mEtfCZD-90TgQED~ zjJN?-s--kHQ*^s&oWHFhAM3Eos6@ORF;pth(RSS5R=jR}xKR6dG4SY9c(vZ4xrN1| zp8`|6gg)$Z>_wz&VnPB}RI)+wV6O7z-%cv=3{uJC+FDvRV&f;6m3$8OsHVjRqV}!L zLw1LUhbQUyrmflP6-|YmQASQ~Nm*iJHo@YX&ZwlO%^ ziHJHEnhB-e<;yl$I;0VK&qp)0cj;TNM7GZf=7rXv(WzD^z>QXI&6*kyt1}*4`ru%s z(b(7+tEvWvH{h1d6zRCQ?bk(72y0U3LR{wFXNv#s=0bjc{{12a`Wk=t8Xq9@jqYkR z+j(ERaOu*e8@{M#&z^mi1NLWlS{fTR%NnDh#A7I#$)3Ew)|Avn$LUr!@VLRH^73*i z{jI)CsqRN3^BWq4!w}{Rzn!f2Ce98Gsa4SL6LFaJrL@o#at3B+XFX&?7W=qx(s%Oz z9$XT3Cd#;v?HnH62t1ibab>~r9TU&Sbb9H?>kOIq66oo#JucKwx=l^-150edwy5f*%9 zWMp;^!*S9fAt77!9xg7wMYki6naJBpN}-E=nI5v26SUgrd_*{;^lKX$?lU>KySwWa zBf z(&QJ-)I(NP8Q|)sPhMw@aX}!-jW16={{S>&$;{4XXTcCEWdr0@2H%e^=>Tcm8an5@ z-S7N#x^t(W+xP-8zSO52H#_>OM zg+SnN-D?+0P$*h(i$SrevTdfq6D$^M-x9RdF9%a40s|vm-G{|u0+g&( zXakco^C-znOTTrUnh7L|LfF{YAYTKTY{k-h;wq-KG|aqkLql(355lo8;}a4}1qBgE zxKgeL1mrIKqg2RNn%cE@Vfz8*qF{}uggD0zQ8R?`{rg-AT363U6DfwpIG&`(``fGY z^YaS}3vPWG)+bk{8(_HeoqOL4lMccoKq8V_-X8sW9V(3I4Uv;1X#v%(NTgX~M(+`bAqUYI5fMlMi6 zUx|l8BGrt%dL#+|`ssJ`N0*{-%YBa|>DxK_BrY2*si5G7a9;a5KsV_BZFq5J$%W7; z-r;kRTIzJc9FnJ+0#_3*dsa_~{rq7%AdQutUKudjv#<2l8lDu2qE?3TJ>|UWR%e=I zY4m&Xc>Xb25*vANV?Ie~L&Mz5Sm7{)w0d;d-+=D_u-HF)C%V1}hn1sRZHaLZQUl$_ z<`GY(iBwW~WkWistqkvNx60U_CgFRU+}=2QI%%Xcf$n8Q%~>BNb}%ib+P*q5~;Y zyocXa{6$#cq|z^{M~-YXdKvKw=}b~B;E6J`OkbI4vhYXXrOuQKSMZ#gem@-WeMr__ zoBHw^D)(?dtFqvcZ&Gl`)*v)DsDLC0`U>N~M)2s|YGKv#UD1Z6+{YcJxz=X3wgo(F zrR-IWjo;>zB4`~6vS@>+`jK)l8S{#YJ48LmNw92agG$8g2w{IW<%Mn2fjIWyi~S+~ z5Mpw_0g{qwmZy3Yq^4m9FG697?|7Q^obZmfpQuNC|ASa}IpTPqR>EScSx-%n+r#e9 zWCUMLNQ-$HoV&h&2<|bB3s~K3nn}bJqgpq#urF;I{Z@I8=Ga)^J9Flr&EyGco|7hj zK!hyP#cUOQAKi5dn_i>uNy`>T?+NDDPLe5N>31~B%IaokpHSg^H6}oc1zc6tt*m@| ze}6HS?nip$6wEAl2}(RCApG+k=G|$pXzo4pwY3!^p}<( z2f^v^=F#h7j?#m-wXi;+5$f+O#!qsqKi)s3qilIQY>xz7>5=cCVL0nm-aPhX8TX8@ zz%`!|@Jok_j-6FXhkoCmo#~nOdhAWv=}2&b+s^InnNWQS3myGvYk1;L2RHS58;MwM z7ZeueDj>DHl_ywHU}?Ae!~4j2e)Q%oNKHgU9ufO>qFVT~9Hxv^6}CSXch_)mhv3Z& ztmFA-Vany`*w~BkoBH`+`+ls{&NUnt%H*6h(T`@UhYVVmFX zDP!ttx70g8*o;{+6DrF-?P=F{L*zK)(9k9;NN6 z?)+K!vg8jfw+viiQdQ#TfR>F84wh1scz@1P%cJfO{JQ5ssNq)wzA2|)NCt+U(2L2e zq}#11UCd)IQPL(WTNzXs_!k-a%u09;`AAwz~QZN`hG+gUI!{=tS>l&Pg<@a9{d z1fJbEtUT13^!KmVCxIwW2{*lsPgIdeHYDhAZth?)+NL#BzcpjY*51DHiDM?!%E9g9 zdau15d$Q_&?fPhL9bq*?LGd_7uq=@`LZh82)puiT1az-Bq~XNi&&4IZS(1;!9apW>UtYN_`MTdA zeAPV_GD65Y1eu5>8ElX-^GRUaorA3$$r)=a@fN>)EOFv}wTO51e2O47H+N%iZ=`uO z4~`7zO=Fa?FS_L2T+N?3UFh6x-@FrKo;rq;QXwQe*S=B|SLGnkQ=4Y4uibEw?zmlu z=uHTA51(e`F&@LFDC;FcUgkQUV-{yOo%1+R#33BA*5D&jPcBRf08t7=>Au`d2WQi1 z@ZR-x@A5KfmIlA&siC3ABx+ZeHy-wC`raH6@K24kCX|Pp|M4E`Ugp~FbM70dOLEwI zAYP-HnK>rMJOV~m1Iiw&93FPKqxb{Yl1E$ z2RyMh4fmMxKZUda38Cf3NaRu;#jKMxdE8F-=mT%|H#@pW98Hr)YkYKzes;Y12e>l4 z>k@6cGXUG&Eb2`cCx5>LVE==vpIDs!-~T$^Sm`=XLw=G4s5dC^@9!d7VM_+6@etBz zsm5RSf6EZMQQo!%M&b3k;Gc}B1 zD)#2|k=i-`4+?J3q)o#Notyw(WKRaXAU8J`;QuVw2Y?lwevUxuS4wav7#J7?`1{A) zg+ifTj*AxgFW=h$$0RvOd=F^yw~YW8KX#Jdj}3fNWXhImv+Nh_;P3@N>;~mURJ_p* z_5>{%ebboxo}R0K#i%+CS5~}3BDIQ6n#S=2f6sT2C=ttia48&%EiGMkwtnx5L;A>9 z#F|BdvQ@v$7~P(ln!074|MKLo&$M~qe5^45{&jcXYnS-fq5|5p`>03Z4{S#M|06DSfRE)-xKXT8VHZbrPngHe(eO6oiC?Mo(Nw@1;^v5n)q5kUJc~ zN<1vp9W$$wwc5BkqZ_a9@|pDmMOuaY8f<_d0SY;H?%d%G`(f;L!DIVto-j}s-aFlN zG`7NNJI+QYNtWLDw%Ym5Bsm!wSA_E=t-wHxId_6qiyca4yHC1*+&;p#B~b$c*j9of zHxG{rY%!iY@SAS~fZqU@xguIxT1+pqosYhJ`Eqo0G=V^fb8RM4I9c%2LFZZkMeFMW z@MY$uWX;FRLsI+HjsEvl%EWkU9!jb$B*FiW7q?DGIXJu#ix$FHy zJqwGSzisV~8i%S7?=UOV%^8V6PO?v4ai0~=PDb#4r3OF$@TQ6k@LR^#O;Ah>lNv#y zO+&ic+S&?Lnxx|!wdCycdjfzEft1EiY(^G6ND zy)(Z)tAt{r)bppC`7`x89^PV^Yz=E7Qc$I(_litNH^8K2CXRSa0^BGCSWGH}8ci;9X!njlb+uE6~)Se;BC!7AV=AFaR{e@i}A zmSjJL96f=@*$dvpct3?oaxe&?Mg_Ov7$FmQ*J!k=-2HqV72I-N=X{I?B+k=v z{AR11+Ja8(3VZUyK@+h=K{3S4rQrqJ?tMA6tpu^q+3R) z46cJ>y!tCY^}LbHjGq!o)md)L#eBN&#VS)66Z1Q@0I-;v8p%vOYeQ9!SdT;*%Ef^j zsX93d{yocn7Ut%fkYoo57ggo%RxU6PHAu+~89TTXvi{*rR#ujvfWXLd9rvP~{YC5I z$;ru5JMXEw()#)_GF5;zhKoiAx$xcHV4rsm_r61C6s z8#7ITA#^V1fWv}T{R3+^2#(bg3%%*ZYfj3n z#wXe;WJ*m+%|tj9gMWMnjESjz9T?(7yF|7@@q z#}w@Fs-FVhNI1Q>Xff>vjYi=7>Bn`3+%S7Xea^@DkIm~k128F>Wg^HK*f+CfgG)yF zp|^JJn2u}Ln0CMZVvtV{JfF^*taMax(O9fuW7V1GA6x)6($eJPh%5aA3fv5IpXPjk z56DC2dwF-x$qM~|wbO3u#TQE0m^ZdtEyr$~zeb%Rb!Q+j| z{B?D8R_z!wvHWn4#{;5$OelY2F}vmrouW}3v+f$jU?5+eBIsZid3do-0D0^CvQuiZY4-Y-`ySH!O78E@6@mU8E z^f|k^iVQfhlamuq($XH443Il%WyLJ%*MCI|kl8NMSR+joiu_elUS3{S*230y)we-M zSJ!;|m7aj2f`S(^67YO}etuz#3g9?Ghu>FLvIBCShEQ6@CC>Rf_EmoT@ZrNnVG9?8 zEV^XJ8Ep5Lf$B$dWfoZC!^5Z7z;}keeiL>2_31x{!d+1Mm!G3mqxZL8I9?Afxx2XB z5EeEi+t53Eur~QyA{8SeBcLFLC()Z&8JExe!LaCzL+T@t{(gQXybi$lZIxZn(ZR}Z z7on6a^wyW36?6%}S)B2v8?0Bi-VF3ouahxysjr zTfkcqWq1A)#~fzr{fQY4+T0o5(6&^N6Lx&T zDPw8AVrLSsx0~CDv}le&U_ik6bLT)S5QtmT%7a#|?HjFE0yd>)|#*R8$ls5DC!fO9aqE-816}$~DP}_>tbKyB)OtW^X9i9kjBC zjR@L>#-OnlHsgg@B%`oiYy>XHiJ_qj=cBgZiimmuZbBjj@QS1UGZN>>Xvtf*@`GQ1 zej)<7+^BN6^&xyF z7&jXY)QN8I@9z)Cs^%Dw8>?Kc<*y`a6-o(+;h?cl|!~&5Y9NG{T9Zny{(ZjMT>kF&@j8$QdLz2z!*gQ zY1moNxvOBrSA*tbY7ja5)|sYzzdi>HT0+3hWK5bzf~uKx=!6&!kH$(*}`s~Z_H z+2^SwEi8rQ+}w*r{0+n(l*!u8`HdIq`CJh_g+^z8f(<%4oBuTWcB{I&`V`~qmR+XN zgDA^WWuVE}(h}BMFbu-w+-ZMX&;SKtrz!Tt8CKiBN|(J&8s0mQqqw!#FD14;MI?d@ z@P)QdTbV2r;0Mb9+}g3HO|Lc;DxArM+DT<=Z%7lRpKHJ~a`SD1|Jr|mk;AbO;7kKx zuqk&?#6Ze~x#Y*@w$B+UTLN$@WPbhnb*VM0l1PxSNzG;-Mod)ZXsxpzKX-M-tW+tXm zgDih`{IRezB=*n_oXHbE=H~LChX4#MHq1MJ`Z?q)ZC@(0?~3&efZ|GYG(Ji9|HG0V zE=o*%8k+Md0o`=Ku^ta(H)N7Mc}vt8Pr1#l^}15-WUT}E1jgQ8uzUW4b_r*jwl_x7 z;A{v`z9l~eaAuU%?>v~JxJ26rSO!4t`HlCWjqaJ-c*nW!RZCV*`7I{gQbWgV8Xry`mg_w@l?_1NTG`#k9Tj~?SDlg^+lfj=SbrK zkr(d>-jM>G%az#Azuf?HJcY|);vH{3qt~E!UC9{wv{ox=C0Ovv)&7@WaYIpqEAl=I z6V7(XjmYL;6hjGz~PW)E)l%KRIIR!vFvP diff --git a/site/assets/tui-wide-real.png b/site/assets/tui-wide-real.png deleted file mode 100644 index f0786229109908c9bd7a22c05d8bd0897dfa73c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42956 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 z - - - - - Windows Troubleshooting Guides and Diagnostic Checks | WDT - - - - - - - - - - - - - - - - - - - - - - - - -

- -
-
- -
-
Windows troubleshooting library
-

Windows diagnostic and troubleshooting guides

-

Start from the symptom, run the relevant read-only PowerShell module and use the generated evidence to narrow the next step. The toolkit reports state; it does not automatically repair or reconfigure Windows.

- -
-

Collect a diagnostic report for tech support

Create a local TXT and Markdown support report, redact common identifiers with Privacy Mode and review the result before sharing.

Open the support report guide
-

Windows application keeps crashing

Use Application Error, Windows Error Reporting, hang, BugCheck and recent dump metadata to confirm repeated failures.

Open the application crash guide
-

Windows is using too much memory

Compare available physical memory, pagefile usage and top processes by working set without installing a monitoring agent.

Open the high memory guide
-

Windows Update may need a restart

Inspect installed updates, reboot indicators and Windows Update related services without starting a scan or installing anything.

Open the pending reboot guide
-

Disk space is low or disk health is unclear

List physical disk health and volume free-space percentages with a configurable low-space warning threshold.

Open the disk health guide
-

Windows Firewall profiles are disabled

Check Domain, Private and Public firewall state together with Defender, Secure Boot, TPM and BitLocker context.

Open the Firewall guide
-

Windows Time service is stopped

Inspect W32Time state, start mode, timezone, clock values, configured source, verbose status and optional events.

Open the time synchronization guide
-

Unexpected default route or proxy

Compare route metrics, gateways, adapters, DNS, DHCP and WinINET or WinHTTP proxy context without changing the network stack.

Open the network route guide
-
- -
Privacy reminder: use the combined runner with -PrivacyMode before attaching a report to a public issue, forum or support request. Always inspect the final file manually.
-
-
-
Windows Diagnostics Toolkit is open-source, local-first and read-only by design.
- - diff --git a/site/cases/windows-application-crashes.html b/site/cases/windows-application-crashes.html deleted file mode 100644 index 0d629bf..0000000 --- a/site/cases/windows-application-crashes.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - Find Windows Application Crash Logs with PowerShell | WDT - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
HomeGuidesApplication crash logs
-
-
Windows crash troubleshooting
-

Find Windows application crash logs with PowerShell

-

Create a local report of recent application crashes, hangs, system BugCheck events and dump-file metadata without opening dump contents or changing Windows Error Reporting.

- - - - -

Run the crash and hang diagnostic

-
pwsh -NoProfile -File .\Invoke-WindowsDiagnostics.ps1 `
-  -Crashes -PrivacyMode -ExportMarkdown
-

The command creates a local TXT report and an optional Markdown report. -PrivacyMode replaces common identifying values in the combined report, but the final file should still be reviewed before it is posted publicly.

- -

When this guide is useful

-
    -
  • An application closes unexpectedly or displays a generic crash message.
  • -
  • The same program freezes repeatedly and Windows reports that it stopped responding.
  • -
  • A support engineer asks for recent crash events or dump-file information.
  • -
  • You need to confirm whether a failure is isolated to one application or accompanied by a system BugCheck.
  • -
- -

What the report checks

-
-

Application events

Recent Application Error, Windows Error Reporting and Application Hang metadata from the Windows Event Log.

-

System failures

Recent BugCheck events that may indicate a blue-screen or system-level crash rather than an application-only failure.

-

Dump metadata

File name, timestamp, size and source for recent Minidump, MEMORY.DMP and user CrashDumps files.

-

Findings summary

An aggregated WARN or ERROR item appears before the detailed event list when relevant evidence is found.

-
- -

How to interpret Windows crash evidence

-

Look for repetition

-

Repeated application names, providers, event IDs and similar timestamps are more useful than a single isolated event. A cluster of failures from the same program can support an application-specific or vendor-specific investigation.

-

Separate application failures from system crashes

-

An Application Error or Application Hang event does not mean Windows itself crashed. A BugCheck event or fresh system dump is stronger evidence of a system-level failure and should be investigated separately.

-

Compare event time with the user-visible symptom

-

Match the report timestamps to the time the application closed or froze. Old events may be unrelated to the current problem, especially on systems with a long Event Log history.

-

Treat dump files as evidence, not a diagnosis

-

The toolkit lists dump metadata but never opens or analyzes the dump. Debugging a dump requires a separate debugger and suitable symbols.

- -
Privacy note: application names and dump-file names remain visible because they are diagnostically useful. Remove anything sensitive before sharing the report.
- -

What the toolkit does not do

-
    -
  • It does not restart or repair the application.
  • -
  • It does not delete dumps or clear Event Logs.
  • -
  • It does not change recovery, telemetry or Windows Error Reporting settings.
  • -
  • It does not determine a root cause from a dump file.
  • -
- -

Reasonable next steps

-
    -
  1. Save the redacted report with the exact time and steps that reproduced the crash.
  2. -
  3. Check whether the failure affects one application, several applications or the whole system.
  4. -
  5. Attach only the relevant report excerpt to a vendor or project issue.
  6. -
  7. For a BugCheck, preserve the dump and investigate it with an appropriate debugger or qualified support channel.
  8. -
- -

Related Windows troubleshooting guides

- - - -
-
-
Windows Diagnostics Toolkit reports diagnostic state and does not automatically repair Windows.
- - diff --git a/site/cases/windows-diagnostic-report-for-tech-support.html b/site/cases/windows-diagnostic-report-for-tech-support.html deleted file mode 100644 index fc6ef28..0000000 --- a/site/cases/windows-diagnostic-report-for-tech-support.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - Create a Windows Diagnostic Report for Tech Support | WDT - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
HomeGuidesDiagnostic report for tech support
-
-
Windows technical support
-

Create a Windows diagnostic report for tech support

-

Generate one local TXT and Markdown report for Windows 10 or Windows 11, review the findings summary and share only the redacted evidence relevant to the support request.

- - - - -

1. Create the combined Windows report

-

Open PowerShell in the toolkit directory and run:

-
pwsh -NoProfile -File .\Invoke-WindowsDiagnostics.ps1 `
-  -All -PrivacyMode -ExportMarkdown
-

For Windows PowerShell 5.1:

-
powershell.exe -NoProfile -ExecutionPolicy Bypass `
-  -File .\Invoke-WindowsDiagnostics.ps1 `
-  -All -PrivacyMode -ExportMarkdown
-

The one-run execution-policy bypass applies only to that PowerShell process. It does not change the machine-wide execution policy.

- -

2. Understand what the report contains

-
-

Findings summary

Actionable conditions are grouped as OK, WARN or ERROR before the detailed diagnostic output.

-

System and performance

Windows build, hardware summary, uptime, memory, CPU snapshot, pagefile and top processes.

-

Security and updates

Defender, Firewall, Secure Boot, TPM, BitLocker, installed updates and reboot indicators.

-

Network and time

Adapters, DNS, DHCP, routes, proxy state, reachability, W32Time source and synchronization context.

-

Disk, services and tasks

Physical disk health, free space, automatic services not running and optional startup or scheduled-task context.

-

Crashes and Event Logs

Recent application failures, hangs, BugCheck events, dump metadata and critical or error events.

-
- -

3. Read the report efficiently

-
    -
  1. Start with the overall status and findings summary.
  2. -
  3. Match each warning or error to the symptom and time when the problem occurred.
  4. -
  5. Open only the detailed module sections connected to the support request.
  6. -
  7. Do not treat every WARN item as a required fix; some states are expected on particular systems.
  8. -
- -

4. Review privacy before sharing

-

Privacy Mode replaces common computer names, user names, profile paths, IP and MAC addresses, SIDs, GUIDs and device identifiers with stable per-report tokens. It is intended to make a support report safer to share, not to guarantee complete anonymity.

-
    -
  • Search the report for your real user name and computer name.
  • -
  • Review application names, dump names, Event Log messages, DNS suffixes and proxy hosts.
  • -
  • Remove credentials, access tokens, private server names and organization-specific details.
  • -
  • Share only the relevant excerpt when the entire report is unnecessary.
  • -
-
Never post an unreviewed diagnostic report publicly. Standalone module output is raw; Privacy Mode applies to combined reports produced by Invoke-WindowsDiagnostics.ps1.
- -

5. Attach useful evidence to the support request

-

A useful report is accompanied by a short description of the symptom. Include:

-
    -
  • the Windows version and build;
  • -
  • the exact command used;
  • -
  • the time the problem happened;
  • -
  • steps that reproduce the problem;
  • -
  • the relevant redacted findings and detailed section;
  • -
  • the toolkit version, release or commit SHA.
  • -
- -

What the toolkit does not do

-
    -
  • It does not upload the report or send it to a support provider.
  • -
  • It does not automatically fix Windows.
  • -
  • It does not replace a debugger, malware scanner or vendor-specific diagnostic package.
  • -
  • It does not guarantee that every third-party application or hardware fault will appear in the report.
  • -
- -

Related Windows troubleshooting guides

- - - -
-
-
Reports remain local until the user chooses to share them.
- - diff --git a/site/cases/windows-disk-health-low-space.html b/site/cases/windows-disk-health-low-space.html deleted file mode 100644 index c110904..0000000 --- a/site/cases/windows-disk-health-low-space.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - Check Windows Disk Health and Low Disk Space | WDT - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
HomeGuidesDisk health and low space
-
-
Windows storage troubleshooting
-

Check Windows disk health and low disk space

-

List physical disk model, media type, health status and size together with volume capacity and free-space percentage without deleting files or changing storage configuration.

- - - - -

Run the disk health diagnostic

-
pwsh -NoProfile -File .\Invoke-WindowsDiagnostics.ps1 `
-  -Disk -PrivacyMode -ExportMarkdown
-

To change the low-free-space threshold in the standalone module:

-
pwsh -NoProfile -File .\scripts\disk-health.ps1 `
-  -LowFreeSpacePercent 20
- -

When this guide is useful

-
    -
  • Windows reports that a drive is running out of space.
  • -
  • Updates, applications or temporary files fail because storage may be insufficient.
  • -
  • You need a quick list of physical disks and volumes for a support request.
  • -
  • A storage-related slowdown or error needs basic health context before deeper testing.
  • -
- -

What the storage report checks

-
-

Physical disks

Disk model, reported media type, operational health and total size from built-in Windows storage sources.

-

Volumes

Drive letter or mount context, file system, total capacity, free space and free-space percentage.

-

Low-space findings

A warning is generated when a volume falls below the configured threshold, which is 15% by default.

-

Unavailable sources

Permission or platform limitations are reported instead of silently presenting missing storage data as healthy.

-
- -

How to interpret disk health and free space

-

Low free space can affect unrelated-looking tasks

-

Windows Update, browser caches, application installers, paging and crash-dump creation all need storage. A nearly full system volume can therefore contribute to failures outside a file-management workflow.

-

The percentage and absolute space both matter

-

Fifteen percent of a small drive and fifteen percent of a multi-terabyte drive represent very different absolute capacities. Use the warning as a prompt to review both values and the workload.

-

A healthy status is not a complete hardware test

-

The report shows health values exposed by Windows. It does not perform a surface scan, read vendor SMART attributes directly or stress the device. A disk can still require vendor diagnostics when symptoms persist.

-

Map volumes to the correct physical device

-

Systems with multiple disks, Storage Spaces, virtual disks or removable media can have a more complex relationship between physical devices and drive letters. Preserve the full report for context.

- -
Read-only boundary: the toolkit does not delete files, clean temporary data, run CHKDSK, repair file systems, initialize disks or change partitions.
- -

What the toolkit does not do

-
    -
  • It does not identify which folders consume the most space.
  • -
  • It does not read every vendor-specific SMART attribute.
  • -
  • It does not prove that a drive is free from hardware faults.
  • -
  • It does not modify partitions, volumes or storage pools.
  • -
- -

Reasonable next steps

-
    -
  1. Record the free-space values before deleting or moving data.
  2. -
  3. Confirm which volume contains Windows, applications, pagefiles and user data.
  4. -
  5. Use built-in or vendor-supported tools for deeper hardware testing when health warnings or I/O errors persist.
  6. -
  7. Back up important data before attempting repair or partition changes.
  8. -
- -

Related Windows troubleshooting guides

- - - -
-
-
The toolkit reports storage state and does not clean, repair or repartition disks.
- - diff --git a/site/cases/windows-firewall-disabled.html b/site/cases/windows-firewall-disabled.html deleted file mode 100644 index 5beceed..0000000 --- a/site/cases/windows-firewall-disabled.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - Check Disabled Windows Firewall Profiles with PowerShell | WDT - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
HomeGuidesWindows Firewall profiles
-
-
Windows security troubleshooting
-

Check disabled Windows Firewall profiles with PowerShell

-

Collect a local security posture snapshot for Domain, Private and Public Firewall profiles together with Microsoft Defender, Secure Boot, TPM and BitLocker state.

- - - - -

Run the security posture diagnostic

-
pwsh -NoProfile -File .\Invoke-WindowsDiagnostics.ps1 `
-  -Security -PrivacyMode -ExportMarkdown
-

The combined runner writes a local report and places security findings near the top. Privacy Mode redacts common identifying values, but the report should still be checked manually before sharing.

- -

When this guide is useful

-
    -
  • Windows Security shows a Firewall warning or a support tool reports that a profile is disabled.
  • -
  • You need to compare Firewall state with Defender and hardware-backed security features.
  • -
  • A managed computer may be controlled by Group Policy or another security product.
  • -
  • You want evidence before deciding whether any remediation is appropriate.
  • -
- -

What the security report checks

-
-

Windows Firewall profiles

Enabled state for Domain, Private and Public profiles, reported separately so one disabled profile is not confused with all profiles being disabled.

-

Microsoft Defender

Available component and protection status from built-in read-only Windows sources.

-

Secure Boot and TPM

Availability of Secure Boot and Trusted Platform Module information where Windows exposes it to the current user.

-

BitLocker status

Volume protection state without reading recovery keys, key protectors or other secret material.

-
- -

How to interpret a disabled Firewall profile

-

Check which profile is active

-

Windows maintains separate Domain, Private and Public profiles. A disabled profile may not be the currently active network profile, but it is still useful context for policy review.

-

Look for managed or third-party security

-

Another endpoint security product or centrally managed policy may control the expected Firewall state. The report identifies state but does not determine the organization’s intended configuration.

-

Do not treat every warning as an instruction

-

A WARN finding means the state deserves review. It does not automatically mean that enabling a feature is safe on every managed, specialized or test system.

-

Compare multiple signals

-

Firewall, Defender, Secure Boot, TPM and BitLocker measure different layers of protection. One enabled feature does not compensate for every other disabled feature, and one unavailable source does not prove that protection is absent.

- -
Important: the toolkit does not enable Firewall profiles, edit rules, change Defender settings, configure BitLocker or modify security policy.
- -

What the toolkit does not do

-
    -
  • It does not decide whether a profile should be enabled in your environment.
  • -
  • It does not enumerate or modify individual Firewall rules.
  • -
  • It does not retrieve BitLocker recovery keys or key protectors.
  • -
  • It does not bypass permissions when a Windows security source is unavailable.
  • -
- -

Reasonable next steps

-
    -
  1. Record the active network profile and whether the machine is domain joined or centrally managed.
  2. -
  3. Confirm whether another security product is expected to manage the Firewall.
  4. -
  5. Compare the report with the organization’s approved baseline or Microsoft guidance for that environment.
  6. -
  7. Make configuration changes only through an authorized administrative process.
  8. -
- -

Related Windows troubleshooting guides

- - - -
-
-
The toolkit reports security state and does not apply hardening changes.
- - diff --git a/site/cases/windows-high-memory-usage.html b/site/cases/windows-high-memory-usage.html deleted file mode 100644 index 4865741..0000000 --- a/site/cases/windows-high-memory-usage.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - Diagnose High Memory Usage on Windows with PowerShell | WDT - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
HomeGuidesHigh memory usage
-
-
Windows performance troubleshooting
-

Diagnose high memory usage on Windows with PowerShell

-

Take a one-time read-only snapshot of available physical memory, pagefile usage, CPU load and the processes using the most working-set memory.

- - - - -

Run the performance snapshot

-
pwsh -NoProfile -File .\Invoke-WindowsDiagnostics.ps1 `
-  -Performance -PrivacyMode -ExportMarkdown
-

For custom thresholds and a longer process list, run the standalone module:

-
pwsh -NoProfile -File .\scripts\performance-snapshot.ps1 `
-  -TopProcessCount 20 -LowMemoryPercent 20 -HighCpuPercent 90
- -

When this guide is useful

-
    -
  • Windows feels slow and Task Manager shows high memory use.
  • -
  • The pagefile is heavily used or applications report that memory is unavailable.
  • -
  • You need a compact process list to attach to a support request.
  • -
  • You want a baseline before closing applications or rebooting the computer.
  • -
- -

What the performance report checks

-
-

Physical memory

Total and available RAM plus the percentage still available at the moment the snapshot is taken.

-

Pagefile usage

Current pagefile allocation and usage where Windows exposes the data.

-

CPU snapshot

A point-in-time CPU load value used to flag unusually high load at the moment of collection.

-

Top processes

Processes ranked by working set and cumulative CPU time. Process command lines, owners and executable paths are not collected.

-
- -

How to interpret high memory usage

-

Available memory matters more than the used percentage alone

-

Windows intentionally uses free RAM for cache and can reclaim it when applications need memory. A high used percentage is more concerning when available memory is very low, pagefile use is rising and the user sees slowdowns or allocation failures.

-

Working set is not the same as total private memory

-

The process list ranks working-set memory currently resident in physical RAM. Shared pages, cached data and memory that has been paged out can make other tools show different totals.

-

Cumulative CPU time is not current CPU usage

-

A long-running process may have a high cumulative CPU total even when it is idle during the snapshot. Use the current CPU load together with the process list rather than treating cumulative time as a live percentage.

-

One snapshot cannot prove a memory leak

-

A memory leak is normally established by observing growth over time under comparable conditions. This report captures evidence at one moment and is best used as a starting point or reproducible support attachment.

- -
Default findings: the module warns below 15% available memory, at 95% CPU load and at 80% pagefile usage. Thresholds are configurable in the standalone script.
- -

What the toolkit does not do

-
    -
  • It does not terminate, suspend or reprioritize processes.
  • -
  • It does not clear caches or modify virtual-memory settings.
  • -
  • It does not collect process command lines, owners or executable paths.
  • -
  • It does not continuously record memory growth.
  • -
- -

Reasonable next steps

-
    -
  1. Save the snapshot while the slowdown is occurring.
  2. -
  3. Compare available memory, pagefile usage and the largest working sets.
  4. -
  5. Repeat the snapshot under the same workload if growth over time is suspected.
  6. -
  7. Use application-specific diagnostics when one process consistently dominates memory use.
  8. -
- -

Related Windows troubleshooting guides

- - - -
-
-
The performance module reports a snapshot and does not optimize or modify Windows.
- - diff --git a/site/cases/windows-network-routes.html b/site/cases/windows-network-routes.html deleted file mode 100644 index c31031f..0000000 --- a/site/cases/windows-network-routes.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - Inspect Windows Default Routes and Proxy Settings | WDT - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
HomeGuidesRoutes and proxy settings
-
-
Windows network troubleshooting
-

Inspect Windows default routes and proxy settings

-

Compare active adapters, gateways, route metrics, DNS, DHCP and WinINET or WinHTTP proxy state without changing the Windows network stack.

- - - - -

Run the network diagnostic

-
pwsh -NoProfile -File .\Invoke-WindowsDiagnostics.ps1 `
-  -Network -PrivacyMode -ExportMarkdown
-

The report places default routes first, then includes adapter, address, DNS, DHCP, gateway, route, proxy and basic reachability context. Privacy Mode replaces common identifiers in the combined report.

- -

When this guide is useful

-
    -
  • Internet access works through the wrong adapter or stops after installing VPN or virtualization software.
  • -
  • A browser and command-line tool behave differently because WinINET and WinHTTP proxy settings do not match.
  • -
  • DNS resolution works intermittently or an unexpected DNS suffix appears.
  • -
  • Several default routes compete and you need to see which route has the lower effective metric.
  • -
- -

What the network report checks

-
-

Adapters and addresses

Active adapters, IPv4 and IPv6 addresses, DHCP state, DHCP server and DNS suffix or search-list context.

-

Gateways and routes

Default routes appear first with next hop, interface and effective metric, followed by a bounded list of active routes.

-

DNS and reachability

Configured DNS servers plus simple gateway, DNS-resolution and internet-reachability checks.

-

Proxy context

Current-user WinINET state and read-only WinHTTP proxy output. Proxy credentials and sensitive URL query values are removed.

-
- -

How to interpret routes and proxy settings

-

Compare effective route metrics

-

For competing default routes, the path with the lower effective metric is usually preferred. The metric must still be considered together with interface state and the actual software using the network.

-

Expect virtual adapters to add routes

-

Hypervisors, containers, VPN clients and security products may create virtual interfaces and route entries. Their presence is not automatically a fault; compare the result with installed and currently running software.

-

Distinguish WinINET from WinHTTP

-

Applications may use different Windows networking APIs. A browser can use current-user WinINET settings while a service or command-line component uses WinHTTP, so one proxy can be configured while the other is direct.

-

Use reachability checks as clues

-

A successful gateway test with failed DNS resolution points in a different direction than a failed gateway test. These checks are deliberately simple and should be combined with the rest of the report.

- -
Privacy note: network reports can reveal private addressing, DNS suffixes, proxy hosts and infrastructure names. Use Privacy Mode and review the report before sharing it.
- -

What the toolkit does not do

-
    -
  • It does not add, delete or reorder routes.
  • -
  • It does not enable, disable or reset adapters.
  • -
  • It does not change DNS, DHCP, proxy or VPN configuration.
  • -
  • It does not capture packets or inspect application traffic.
  • -
- -

Reasonable next steps

-
    -
  1. Identify the active adapter and the preferred default route in the report.
  2. -
  3. Compare WinINET and WinHTTP proxy state with the affected application.
  4. -
  5. Check whether unexpected routes belong to known VPN, hypervisor or security software.
  6. -
  7. Preserve the redacted report before changing network configuration so the original state is not lost.
  8. -
- -

Related Windows troubleshooting guides

- - - -
-
-
No DNS, proxy, adapter or route setting is modified.
- - diff --git a/site/cases/windows-time-service-stopped.html b/site/cases/windows-time-service-stopped.html deleted file mode 100644 index af0dfad..0000000 --- a/site/cases/windows-time-service-stopped.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - Diagnose a Stopped Windows Time Service with PowerShell | WDT - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
HomeGuidesWindows Time service
-
-
Windows time synchronization
-

Diagnose a stopped Windows Time service with PowerShell

-

Inspect W32Time state, start mode, timezone, local and UTC clock values, configured source, verbose status and optional events without starting the service or changing its configuration.

- - - - -

Run the Windows Time diagnostic

-
pwsh -NoProfile -File .\Invoke-WindowsDiagnostics.ps1 `
-  -Time -PrivacyMode -ExportMarkdown
-

The combined report summarizes the current time-service context. For additional event evidence, the standalone module can include recent Time-Service warnings and errors:

-
pwsh -NoProfile -File .\scripts\time-sync-diagnostics.ps1 `
-  -IncludeTimeServiceEvents
- -

When this guide is useful

-
    -
  • The Windows clock is visibly incorrect or changes after reboot.
  • -
  • A domain sign-in, certificate, browser or update problem may be related to time drift.
  • -
  • The Windows Time service appears stopped and you need context before treating it as a fault.
  • -
  • A support engineer asks for the configured time source and W32Time status.
  • -
- -

What the report checks

-
-

Service state

Current W32Time status and start mode, including whether the computer is domain joined.

-

Clock context

Timezone plus current local and UTC values to make obvious offsets or display confusion easier to spot.

-

Configured source

The source reported by w32tm.exe /query /source, collected without changing peers or requesting synchronization.

-

Verbose status and events

Read-only status details and optional recent Time-Service warning or error events.

-
- -

How to interpret a stopped Windows Time service

-

A stopped service is not always an error

-

On a non-domain computer, Windows may start the time service when needed rather than keeping it continuously active. Service state should be considered together with start mode, source, status and recent events.

-

Domain membership changes the expectation

-

Domain-joined systems normally depend on the domain time hierarchy. A stopped service or unavailable source on such a machine deserves closer review than the same state on an isolated home computer.

-

Check the reported source

-

A local hardware clock, unavailable source or unexpected provider can explain why synchronization is not occurring. The source alone is not a complete diagnosis, but it narrows the investigation.

-

Separate timezone errors from synchronization errors

-

A correct UTC clock with an incorrect timezone can look like time drift to the user. Compare both local and UTC values before assuming the synchronization service is at fault.

- -
Read-only boundary: the toolkit never runs a resynchronization command, changes peers, starts or stops W32Time, or edits time-service configuration.
- -

What the toolkit does not do

-
    -
  • It does not correct the clock or timezone.
  • -
  • It does not configure an NTP server or domain time source.
  • -
  • It does not start, stop or restart the Windows Time service.
  • -
  • It does not prove that an upstream time source is accurate.
  • -
- -

Reasonable next steps

-
    -
  1. Compare local time, UTC time and timezone in the report.
  2. -
  3. Check whether the computer is domain joined and whether the reported source matches the expected environment.
  4. -
  5. Review recent Time-Service events if the source is unavailable or the clock repeatedly drifts.
  6. -
  7. Apply any configuration change only through documented Windows or organization procedures.
  8. -
- -

Related Windows troubleshooting guides

- - - -
-
-
No Windows Time configuration or resynchronization is performed.
- - diff --git a/site/cases/windows-update-pending-reboot.html b/site/cases/windows-update-pending-reboot.html deleted file mode 100644 index 2c786b0..0000000 --- a/site/cases/windows-update-pending-reboot.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - Check Windows Update Pending Reboot Indicators | WDT - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
HomeGuidesWindows Update pending reboot
-
-
Windows Update troubleshooting
-

Check Windows Update pending reboot indicators

-

Inspect recent installed updates, common reboot indicators and Windows Update related service state without starting an update scan, installing anything or resetting update components.

- - - - -

Run the Windows Update diagnostic

-
pwsh -NoProfile -File .\Invoke-WindowsDiagnostics.ps1 `
-  -Updates -PrivacyMode -ExportMarkdown
-

For optional recent update-related Event Log entries, run the standalone module:

-
pwsh -NoProfile -File .\scripts\windows-update-check.ps1 `
-  -IncludeEventLog -SinceDays 14 -MaxEvents 20
- -

When this guide is useful

-
    -
  • Windows Update says a restart is required but the reason is unclear.
  • -
  • An application installer, driver or management tool reports a pending reboot.
  • -
  • Updates appear installed but Windows Update remains in an unusual state.
  • -
  • A support request needs recent update history and related service context.
  • -
- -

What the update report checks

-
-

Windows version and build

The operating-system version and build provide context for update history and support discussions.

-

Recently installed updates

Recent update records exposed by built-in Windows read-only sources.

-

Pending reboot indicators

Common registry-backed indicators used by Windows components and servicing processes to signal that a restart may be required.

-

Update-related services

Current state and start mode for relevant Windows Update and servicing services without starting or stopping them.

-

Optional Event Log evidence

Recent Windows Update related warnings and errors when the standalone option is requested.

-

Findings summary

Unavailable sources, reboot indicators and other notable state are summarized before the detailed output.

-
- -

How to interpret pending reboot indicators

-

A reboot indicator is evidence, not a complete diagnosis

-

Different Windows components can leave separate indicators. One indicator may remain after the operation that created it, while another may appear only during a specific servicing stage.

-

Compare the indicator with update timing

-

Recent installed updates, installer activity and Event Log timestamps help determine whether the reboot state is current and relevant to the reported problem.

-

Service state depends on trigger-start behavior

-

Some Windows Update services do not run continuously. A stopped service is not automatically a fault; start mode, recent events and the observed update behavior matter.

-

Do not infer that all updates are current

-

The diagnostic reads local history and state. It does not contact Microsoft Update or prove that no newer update is available.

- -
Read-only boundary: the toolkit does not start an update scan, install or remove updates, reset Windows Update, clean SoftwareDistribution, change services or write registry values.
- -

What the toolkit does not do

-
    -
  • It does not decide whether restarting is safe at the current moment.
  • -
  • It does not verify update availability against an online catalog.
  • -
  • It does not repair Windows Update components.
  • -
  • It does not replace organization-specific update-management tools.
  • -
- -

Reasonable next steps

-
    -
  1. Record the pending reboot indicators and the most recent update timestamps.
  2. -
  3. Check whether important work, encryption operations or managed maintenance policies affect restart timing.
  4. -
  5. Review optional update events when the local state appears inconsistent.
  6. -
  7. Follow the approved restart or servicing procedure for the machine.
  8. -
- -

Related Windows troubleshooting guides

- - - -
-
-
The toolkit reads Windows Update state and does not install, remove or reset updates.
- - diff --git a/site/index.html b/site/index.html deleted file mode 100644 index be569a8..0000000 --- a/site/index.html +++ /dev/null @@ -1,384 +0,0 @@ - - - - - - Windows Diagnostics Tool for PowerShell | WDT - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
PS C:\WDT> .\Invoke-WindowsDiagnostics.ps1
-

SYSTEM READY

-

See what Windows is doing.
Change nothing.

-

A read-only PowerShell diagnostics toolkit with a responsive terminal interface, local reports, Privacy Mode and no telemetry.

- -
-
MODE
READ-ONLY
-
UPLOAD
NONE
-
RUNTIME
PS 5.1 / 7+
-
PLATFORM
WIN 10 / 11
-
-
- -
-
WDT / INTERACTIVE DASHBOARDUTF-8
- - Windows Diagnostics Toolkit Wide terminal dashboard with selected diagnostics and Privacy Mode enabled - -
[OK] Responsive layout · keyboard-first controls · current selection preserved on resize
-
-
- -
-
- [x] READ-ONLY BY DESIGN - [x] NO INSTALLER - [x] NO TELEMETRY - [x] LOCAL TXT + MARKDOWN - [x] PRIVACY MODE -
-
- -
-
-
-
-

01 / INTERFACE

-

Built around the terminal,
not bolted onto it.

-
-

Run the entry point without switches. Select the diagnostic areas, choose report options and review the result without leaving the TUI.

-
- -
-
-
STEP 01SELECT
-

Choose checks

-

Toggle ten diagnostic areas, Privacy Mode, Markdown export and the output directory.

-

navigateSpacetoggle

-
-
-
STEP 02RUN
-

Collect locally

-

Only reviewed diagnostic operations are launched. The toolkit does not apply fixes or reconfigure Windows.

-

AallRrecommendedEnterrun

-
-
-
STEP 03REVIEW
-

Read findings

-

See elapsed time, report paths and aggregated WARN and ERROR counts before opening the report.

-

EntermenuEscexit

-
-
- -
-
WDT / COLLECTION RESULTCOMPLETE
- - Windows Diagnostics Toolkit completion screen showing warnings, errors and elapsed time - -
[WARN] A warning means the observed state deserves review. It does not mean collection failed.
-
-
-
- -
-
-
-

02 / QUICK START

-

Clone. Run. Diagnose.

-

No installer and no third-party PowerShell modules. The built-in Windows PowerShell 5.1 is enough.

-
    -
  • [OK] Interactive TUI opens by default
  • -
  • [OK] Recommended checks preselected
  • -
  • [OK] Privacy Mode enabled by default
  • -
-

The planned v0.1.0-beta publication will add a one-line bootstrap that downloads a fixed GitHub Release ZIP and verifies its SHA-256 checksum before execution. Until publication, use the clone workflow. The bootstrap still requires trust in the file delivered through GitHub Pages.

-
-
-
PowerShell
-
PS> git clone https://github.com/0x0bug/windows-diagnostics-toolkit.git
-PS> cd windows-diagnostics-toolkit
-PS> .\Invoke-WindowsDiagnostics.ps1
- -
-
-
-
-

Beta release command

-

Available when v0.1.0-beta is published. Review every report before publication; Privacy Mode cannot guarantee removal of arbitrary sensitive text in Windows Event Log messages.

-
-
-
PS> irm https://0x0bug.github.io/windows-diagnostics-toolkit/run.ps1 | iex
-
-PS> irm https://0x0bug.github.io/windows-diagnostics-toolkit/run.ps1 -OutFile .\wdt-run.ps1
-PS> notepad .\wdt-run.ps1
-PS> .\wdt-run.ps1
- -
-
-
- -
-
-
-
-

03 / DIAGNOSTICS

-

One report.
Ten diagnostic modules.

-
-

Ten diagnostic modules are grouped here into six troubleshooting areas. Collect broad context or run only the module related to the problem; the findings summary appears before the detailed sections.

-
- - -
-
- -
-
-
-

04 / PRIVACY

-

Local first.
Share only what you choose.

-

Reports stay in the selected output directory. Privacy Mode replaces common identifying values with stable per-report tokens.

-
    -
  • [x]Read-onlyNo registry, service, firewall, DNS or system configuration changes.
  • -
  • [x]No telemetryNo upload, remote collection or tracking endpoint.
  • -
  • [x]AuditableSource code, validation policy and tests are public.
  • -
-
-
-
PRIVACY MODEENABLED
-
ComputerName : <HOST-1>
-UserName     : <USER-1>
-IPv4Address  : <IP-1>
-MacAddress   : <MAC-1>
-DeviceId     : <ID-1>
-

[!] Process, application and dump-file names remain visible because they are diagnostically useful.

-
-
-
- -
- -
- -
-
-
-

06 / FAQ

-

Expected behavior,
without guesswork.

-
-
-
Does the toolkit change Windows settings?

No. Production diagnostics collect and report state without applying automatic fixes, changing services, editing the registry or reconfiguring the network.

-
Why do I see the ASCII logo?

Automatic mode uses Unicode only for compatible interactive UTF-8 output. OEM encodings such as cp866, redirected output and unsupported hosts receive the printable ASCII fallback.

-
Does resizing restart diagnostics?

No. Resize events redraw the current interface and preserve the current selection. A running diagnostic operation is not restarted.

-
Where are reports stored?

Reports are written to the selected output directory. Nothing is uploaded automatically.

-
Does WARN mean the tool failed?

No. WARN describes observed state that deserves review. A module execution failure is reported separately with a non-zero exit code.

-
-
-
- -
-
-
-

READY / RUN

-

Diagnose Windows before changing Windows.

-

Open source, dependency-free and designed to produce evidence you can actually share.

-
- -
-
-
- -
- -
- - diff --git a/site/robots.txt b/site/robots.txt deleted file mode 100644 index 33bd5b2..0000000 --- a/site/robots.txt +++ /dev/null @@ -1,4 +0,0 @@ -User-agent: * -Allow: / - -Sitemap: https://0x0bug.github.io/windows-diagnostics-toolkit/sitemap.xml diff --git a/site/run.ps1 b/site/run.ps1 deleted file mode 100644 index da24993..0000000 --- a/site/run.ps1 +++ /dev/null @@ -1,127 +0,0 @@ -& { -$ErrorActionPreference = 'Stop' - -$wdtVersion = '0.1.0-beta' -$wdtArchiveName = 'windows-diagnostics-toolkit-v0.1.0-beta.zip' -$wdtReleaseBaseUri = 'https://github.com/0x0bug/windows-diagnostics-toolkit/releases/download/v0.1.0-beta' -$wdtArchiveUri = "$wdtReleaseBaseUri/$wdtArchiveName" -$wdtChecksumUri = "$wdtArchiveUri.sha256" - -function Get-WdtExpectedChecksum { - param([Parameter(Mandatory = $true)][string]$ChecksumText) - - $matches = @([System.Text.RegularExpressions.Regex]::Matches($ChecksumText, '(?im)(? - - - https://0x0bug.github.io/windows-diagnostics-toolkit/ - 2026-07-10 - - - https://0x0bug.github.io/windows-diagnostics-toolkit/cases/ - 2026-07-10 - - - https://0x0bug.github.io/windows-diagnostics-toolkit/cases/windows-diagnostic-report-for-tech-support.html - 2026-07-10 - - - https://0x0bug.github.io/windows-diagnostics-toolkit/cases/windows-application-crashes.html - 2026-07-10 - - - https://0x0bug.github.io/windows-diagnostics-toolkit/cases/windows-high-memory-usage.html - 2026-07-10 - - - https://0x0bug.github.io/windows-diagnostics-toolkit/cases/windows-update-pending-reboot.html - 2026-07-10 - - - https://0x0bug.github.io/windows-diagnostics-toolkit/cases/windows-disk-health-low-space.html - 2026-07-10 - - - https://0x0bug.github.io/windows-diagnostics-toolkit/cases/windows-firewall-disabled.html - 2026-07-10 - - - https://0x0bug.github.io/windows-diagnostics-toolkit/cases/windows-time-service-stopped.html - 2026-07-10 - - - https://0x0bug.github.io/windows-diagnostics-toolkit/cases/windows-network-routes.html - 2026-07-10 - - diff --git a/tests/bootstrap-sync.tests.ps1 b/tests/bootstrap-sync.tests.ps1 index 3b565da..84f3244 100644 --- a/tests/bootstrap-sync.tests.ps1 +++ b/tests/bootstrap-sync.tests.ps1 @@ -8,29 +8,34 @@ function Assert-True { if (-not $Condition) { throw $Message } } -function Get-NormalizedText { - param([Parameter(Mandatory = $true)][string]$Path) - return (Get-Content -LiteralPath $Path -Raw).Replace("`r`n", "`n").Replace("`r", "`n") -} - $repositoryRoot = Split-Path -Parent $PSScriptRoot $canonicalBootstrap = Join-Path -Path $repositoryRoot -ChildPath 'scripts\bootstrap\run.ps1' -$publishedBootstrap = Join-Path -Path $repositoryRoot -ChildPath 'site\run.ps1' $syncScript = Join-Path -Path $repositoryRoot -ChildPath 'scripts\Sync-WdtSiteBootstrap.ps1' $powerShellPath = [System.Diagnostics.Process]::GetCurrentProcess().MainModule.FileName $temporaryRoot = Join-Path -Path ([System.IO.Path]::GetTempPath()) -ChildPath ('wdt-bootstrap-sync-tests-' + [System.Guid]::NewGuid().ToString('N')) $previousLastExitCode = $global:LASTEXITCODE -foreach ($requiredFile in @($canonicalBootstrap, $publishedBootstrap, $syncScript)) { +foreach ($requiredFile in @($canonicalBootstrap, $syncScript)) { Assert-True (Test-Path -LiteralPath $requiredFile -PathType Leaf) "Required file is missing: $requiredFile" } $canonicalHash = (Get-FileHash -LiteralPath $canonicalBootstrap -Algorithm SHA256).Hash -$publishedHash = (Get-FileHash -LiteralPath $publishedBootstrap -Algorithm SHA256).Hash -$byteEqual = [string]::Equals($canonicalHash, $publishedHash, [System.StringComparison]::OrdinalIgnoreCase) -if (-not $byteEqual) { - Assert-True ((Get-NormalizedText -Path $canonicalBootstrap) -ceq (Get-NormalizedText -Path $publishedBootstrap)) 'Canonical and published bootstrap differ beyond CRLF/LF line endings.' +$tokens = $null +$parseErrors = $null +$syncAst = [System.Management.Automation.Language.Parser]::ParseFile($syncScript, [ref]$tokens, [ref]$parseErrors) +Assert-True ($parseErrors.Count -eq 0) 'Sync script contains PowerShell parser errors.' + +$forbiddenCommands = @('git', 'gh', 'Invoke-RestMethod', 'Invoke-WebRequest', 'curl', 'curl.exe') +$commandAsts = @($syncAst.FindAll({ + param($node) + $node -is [System.Management.Automation.Language.CommandAst] +}, $true)) +foreach ($commandAst in $commandAsts) { + $commandName = $commandAst.GetCommandName() + Assert-True ($commandName -notin $forbiddenCommands) "Sync script contains a forbidden external or network command: $commandName" } +$syncScriptText = Get-Content -LiteralPath $syncScript -Raw +Assert-True ($syncScriptText -notmatch '(?i)api\.github\.com') 'Sync script contains a GitHub API endpoint.' New-Item -ItemType Directory -Path $temporaryRoot -Force | Out-Null try { diff --git a/tests/site-seo.tests.ps1 b/tests/site-seo.tests.ps1 deleted file mode 100644 index 5539a7e..0000000 --- a/tests/site-seo.tests.ps1 +++ /dev/null @@ -1,276 +0,0 @@ -[CmdletBinding()] -param() - -$ErrorActionPreference = 'Stop' - -$repositoryRoot = Split-Path -Parent $PSScriptRoot -$siteRoot = Join-Path -Path $repositoryRoot -ChildPath 'site' -$separatorCharacters = [char[]]@('\', '/') -$siteRootFull = [System.IO.Path]::GetFullPath($siteRoot).TrimEnd($separatorCharacters) -$publishedBaseUrl = 'https://0x0bug.github.io/windows-diagnostics-toolkit/' -$projectPathPrefix = '/windows-diagnostics-toolkit/' - -$issues = New-Object System.Collections.Generic.List[string] - -function Add-TestIssue { - param([Parameter(Mandatory = $true)][string]$Message) - $issues.Add($Message) -} - -function Get-FirstMatchValue { - param( - [Parameter(Mandatory = $true)][string]$Text, - [Parameter(Mandatory = $true)][string]$Pattern - ) - - $options = [System.Text.RegularExpressions.RegexOptions]::IgnoreCase -bor [System.Text.RegularExpressions.RegexOptions]::Singleline - $match = [regex]::Match($Text, $Pattern, $options) - if (-not $match.Success) { - return $null - } - - return [System.Net.WebUtility]::HtmlDecode($match.Groups[1].Value.Trim()) -} - -function Get-RelativeSitePath { - param([Parameter(Mandatory = $true)][string]$FullPath) - - $full = [System.IO.Path]::GetFullPath($FullPath) - if (-not $full.StartsWith($siteRootFull, [System.StringComparison]::OrdinalIgnoreCase)) { - return $full - } - - return $full.Substring($siteRootFull.Length).TrimStart($separatorCharacters).Replace('\', '/') -} - -function Resolve-LocalSiteTarget { - param( - [Parameter(Mandatory = $true)][System.IO.FileInfo]$SourceFile, - [Parameter(Mandatory = $true)][string]$Reference - ) - - $referenceWithoutFragment = ($Reference -split '#', 2)[0] - $pathPart = ($referenceWithoutFragment -split '\?', 2)[0] - if ([string]::IsNullOrWhiteSpace($pathPart)) { - return $null - } - - if ($pathPart -match '(?i)^(https?:|mailto:|tel:|javascript:|data:)') { - return $null - } - - $isDirectoryReference = $pathPart.EndsWith('/') -or $pathPart -eq '.' -or $pathPart -eq '..' - - if ($pathPart.StartsWith($projectPathPrefix, [System.StringComparison]::OrdinalIgnoreCase)) { - $relative = $pathPart.Substring($projectPathPrefix.Length).Replace('/', [System.IO.Path]::DirectorySeparatorChar) - $target = Join-Path -Path $siteRoot -ChildPath $relative - } - elseif ($pathPart.StartsWith('/')) { - Add-TestIssue "Unsupported absolute local path in $($SourceFile.Name): $Reference" - return $null - } - else { - $relative = $pathPart.Replace('/', [System.IO.Path]::DirectorySeparatorChar) - $target = Join-Path -Path $SourceFile.DirectoryName -ChildPath $relative - } - - $target = [System.IO.Path]::GetFullPath($target) - if ($isDirectoryReference) { - $target = Join-Path -Path $target -ChildPath 'index.html' - } - - return $target -} - -if (-not (Test-Path -LiteralPath $siteRoot -PathType Container)) { - throw "Site directory is missing: $siteRoot" -} - -$htmlFiles = @(Get-ChildItem -LiteralPath $siteRoot -Recurse -Filter '*.html' -File | Sort-Object -Property FullName) -if ($htmlFiles.Count -lt 2) { - Add-TestIssue 'Expected at least a homepage and one additional HTML page.' -} - -$titleOwners = @{} -$canonicalOwners = @{} -$descriptionOwners = @{} -$indexableCanonicals = New-Object System.Collections.Generic.List[string] - -foreach ($file in $htmlFiles) { - $relativePath = Get-RelativeSitePath -FullPath $file.FullName - $html = Get-Content -LiteralPath $file.FullName -Raw - $isNotFoundPage = $relativePath -eq '404.html' - - if ($html -notmatch '(?i)]*lang=["'']en["'']') { - Add-TestIssue "$relativePath is missing html lang=en." - } - - $title = Get-FirstMatchValue -Text $html -Pattern '\s*(.*?)\s*' - if ([string]::IsNullOrWhiteSpace($title)) { - Add-TestIssue "$relativePath is missing a title." - } - else { - if ($title.Length -lt 15 -or $title.Length -gt 70) { - Add-TestIssue "$relativePath title length is $($title.Length); expected 15-70 characters." - } - if ($titleOwners.ContainsKey($title)) { - Add-TestIssue "$relativePath duplicates the title used by $($titleOwners[$title])." - } - else { - $titleOwners[$title] = $relativePath - } - } - - $description = Get-FirstMatchValue -Text $html -Pattern ']*name=["'']description["''][^>]*content=["''](.*?)["''][^>]*>' - if ([string]::IsNullOrWhiteSpace($description)) { - Add-TestIssue "$relativePath is missing a meta description." - } - else { - if ($description.Length -lt 70 -or $description.Length -gt 180) { - Add-TestIssue "$relativePath description length is $($description.Length); expected 70-180 characters." - } - if (-not $isNotFoundPage) { - if ($descriptionOwners.ContainsKey($description)) { - Add-TestIssue "$relativePath duplicates the description used by $($descriptionOwners[$description])." - } - else { - $descriptionOwners[$description] = $relativePath - } - } - } - - $robots = Get-FirstMatchValue -Text $html -Pattern ']*name=["'']robots["''][^>]*content=["''](.*?)["''][^>]*>' - if ($isNotFoundPage) { - if ($robots -notmatch '(?i)noindex') { - Add-TestIssue '404.html must contain a noindex robots directive.' - } - } - elseif ($robots -match '(?i)noindex') { - Add-TestIssue "$relativePath unexpectedly contains noindex." - } - - $h1Count = [regex]::Matches($html, ']*rel=["'']canonical["''][^>]*href=["''](.*?)["''][^>]*>' - if ([string]::IsNullOrWhiteSpace($canonical)) { - Add-TestIssue "$relativePath is missing a canonical URL." - } - else { - if (-not $canonical.StartsWith($publishedBaseUrl, [System.StringComparison]::OrdinalIgnoreCase)) { - Add-TestIssue "$relativePath canonical is outside the published site: $canonical" - } - if ($canonicalOwners.ContainsKey($canonical)) { - Add-TestIssue "$relativePath duplicates the canonical used by $($canonicalOwners[$canonical])." - } - else { - $canonicalOwners[$canonical] = $relativePath - $indexableCanonicals.Add($canonical) - } - } - - foreach ($requiredMeta in @('og:title', 'og:description', 'og:url', 'og:image')) { - $metaPattern = ']*property=["'']{0}["''][^>]*content=["''](.*?)["''][^>]*>' -f [regex]::Escape($requiredMeta) - $value = Get-FirstMatchValue -Text $html -Pattern $metaPattern - if ([string]::IsNullOrWhiteSpace($value)) { - Add-TestIssue "$relativePath is missing $requiredMeta." - } - } - - foreach ($requiredTwitterMeta in @('twitter:card', 'twitter:title', 'twitter:description', 'twitter:image')) { - $metaPattern = ']*name=["'']{0}["''][^>]*content=["''](.*?)["''][^>]*>' -f [regex]::Escape($requiredTwitterMeta) - $value = Get-FirstMatchValue -Text $html -Pattern $metaPattern - if ([string]::IsNullOrWhiteSpace($value)) { - Add-TestIssue "$relativePath is missing $requiredTwitterMeta." - } - } - } - - $jsonOptions = [System.Text.RegularExpressions.RegexOptions]::IgnoreCase -bor [System.Text.RegularExpressions.RegexOptions]::Singleline - $jsonLdMatches = [regex]::Matches($html, ']*type=["'']application/ld\+json["''][^>]*>(.*?)', $jsonOptions) - foreach ($jsonLdMatch in $jsonLdMatches) { - try { - $null = $jsonLdMatch.Groups[1].Value | ConvertFrom-Json - } - catch { - Add-TestIssue "$relativePath contains invalid JSON-LD: $($_.Exception.Message)" - } - } - - $referenceMatches = [regex]::Matches($html, '(?i)\b(?:href|src)=["'']([^"'']+)["'']') - foreach ($referenceMatch in $referenceMatches) { - $reference = [System.Net.WebUtility]::HtmlDecode($referenceMatch.Groups[1].Value) - $target = Resolve-LocalSiteTarget -SourceFile $file -Reference $reference - if ($null -eq $target) { - continue - } - - if (-not (Test-Path -LiteralPath $target -PathType Leaf)) { - Add-TestIssue "$relativePath contains a broken local reference: $reference -> $(Get-RelativeSitePath -FullPath $target)" - } - } -} - -$sitemapPath = Join-Path -Path $siteRoot -ChildPath 'sitemap.xml' -if (-not (Test-Path -LiteralPath $sitemapPath -PathType Leaf)) { - Add-TestIssue 'sitemap.xml is missing.' -} -else { - try { - [xml]$sitemap = Get-Content -LiteralPath $sitemapPath -Raw - $sitemapUrls = @($sitemap.urlset.url | ForEach-Object { [string]$_.loc }) - foreach ($canonical in $indexableCanonicals) { - if ($canonical -notin $sitemapUrls) { - Add-TestIssue "Canonical URL is missing from sitemap.xml: $canonical" - } - } - - foreach ($url in $sitemapUrls) { - if (-not $url.StartsWith($publishedBaseUrl, [System.StringComparison]::OrdinalIgnoreCase)) { - Add-TestIssue "Sitemap URL is outside the published site: $url" - continue - } - - $relative = $url.Substring($publishedBaseUrl.Length) - if ([string]::IsNullOrWhiteSpace($relative) -or $relative.EndsWith('/')) { - $relative = $relative + 'index.html' - } - $target = Join-Path -Path $siteRoot -ChildPath ($relative.Replace('/', [System.IO.Path]::DirectorySeparatorChar)) - if (-not (Test-Path -LiteralPath $target -PathType Leaf)) { - Add-TestIssue "Sitemap URL has no matching site file: $url" - } - } - } - catch { - Add-TestIssue "sitemap.xml is invalid: $($_.Exception.Message)" - } -} - -$robotsPath = Join-Path -Path $siteRoot -ChildPath 'robots.txt' -if (-not (Test-Path -LiteralPath $robotsPath -PathType Leaf)) { - Add-TestIssue 'robots.txt is missing.' -} -else { - $robotsText = Get-Content -LiteralPath $robotsPath -Raw - if ($robotsText -notmatch '(?im)^Sitemap:\s*https://0x0bug\.github\.io/windows-diagnostics-toolkit/sitemap\.xml\s*$') { - Add-TestIssue 'robots.txt does not reference the published sitemap URL.' - } -} - -Write-Host 'Windows Diagnostics Toolkit site SEO validation' -Write-Host ('HTML files : {0}' -f $htmlFiles.Count) -Write-Host ('Indexable pages : {0}' -f $indexableCanonicals.Count) -Write-Host ('Validation issues : {0}' -f $issues.Count) - -if ($issues.Count -gt 0) { - Write-Host '' - foreach ($issue in $issues) { - Write-Host ('- {0}' -f $issue) - } - throw 'Static site SEO validation failed.' -} - -Write-Host 'Static site SEO validation passed.' From 360012687ed19e9b9909be783997838adbe6b4a8 Mon Sep 17 00:00:00 2001 From: 0x0bug <98243573+0x0bug@users.noreply.github.com> Date: Tue, 21 Jul 2026 23:55:52 +0200 Subject: [PATCH 2/2] update documentation for standalone site --- README.md | 6 +++--- docs/seo-launch-checklist.md | 11 ++++++----- docs/usage.md | 4 ++-- tests/readme.tests.ps1 | 21 ++++++++------------- 4 files changed, 19 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 08f19a8..4e16370 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![No telemetry](https://img.shields.io/badge/telemetry-none-2ea44f)](SECURITY.md)

- Windows Diagnostics Toolkit interactive Wide dashboard + Windows Diagnostics Toolkit interactive Wide dashboard

**Generate a local Windows support report with diagnostics that are read-only by design and guarded by automated safety checks.** @@ -110,7 +110,7 @@ Remove-Item Env:WDT_TUI_LOGO -ErrorAction SilentlyContinue After collection completes, the TUI shows the elapsed time, report paths, and the number of `WARN` and `ERROR` findings. `Enter` returns to the menu and `Esc` exits.

- Windows Diagnostics Toolkit completed diagnostics screen + Windows Diagnostics Toolkit completed diagnostics screen

A `WARN` means the toolkit found a condition worth reviewing. It does not mean the collection failed. A non-zero module exit code is reported separately as an execution failure. @@ -266,7 +266,7 @@ The GitHub Actions workflow runs validation, dependency-free tests, and a report - [Detailed usage](docs/usage.md) - [Built-in module authoring](docs/module-authoring.md) - [Anonymized TXT and Markdown report](docs/report-example.md) -- [Project website and troubleshooting cases](site/index.html) +- [Project website and troubleshooting cases](https://wdt.digital/) - [Contributing](CONTRIBUTING.md) - [Security policy](SECURITY.md) diff --git a/docs/seo-launch-checklist.md b/docs/seo-launch-checklist.md index 1105927..ddbefae 100644 --- a/docs/seo-launch-checklist.md +++ b/docs/seo-launch-checklist.md @@ -1,6 +1,7 @@ # SEO launch checklist -This checklist covers the manual steps that cannot be completed from the static-site source alone. +The canonical static-site source and deployment workflow live in +[`0x0bug/wdt-site`](https://github.com/0x0bug/wdt-site). This checklist covers the manual steps that cannot be completed from that source alone. ## Published URLs @@ -11,16 +12,16 @@ This checklist covers the manual steps that cannot be completed from the static- ## After merging a site change -1. Confirm the GitHub Pages workflow completes successfully. +1. Confirm the GitHub Pages workflow in `0x0bug/wdt-site` completes successfully. 2. Open the homepage, guide index, one article, `robots.txt`, and `sitemap.xml` in a private browser window. 3. Confirm each page returns the expected content over HTTPS. -4. Check that canonical URLs use the published GitHub Pages domain and repository path. +4. Check that canonical URLs use `https://wdt.digital/`. 5. Check the social card in at least one Open Graph or social-preview debugger. 6. Update sitemap `lastmod` only for pages whose primary content changed. ## Google Search Console -1. Add the GitHub Pages URL as a URL-prefix property. +1. Add `https://wdt.digital/` as a URL-prefix property. 2. Choose an available verification method. 3. Add the provided verification token or verification file in a separate focused pull request. 4. Submit `sitemap.xml` after verification. @@ -69,7 +70,7 @@ tech-support read-only ``` -Upload a raster 1280×640 version of `site/assets/social-preview.svg` as the repository social preview when available. +Upload the raster 1280×640 social preview maintained in `0x0bug/wdt-site` as the repository social preview when available. ## Content maintenance diff --git a/docs/usage.md b/docs/usage.md index 73d478c..7f83f56 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -49,7 +49,7 @@ Run the entry point without module switches: ```

- Windows Diagnostics Toolkit interactive Wide dashboard + Windows Diagnostics Toolkit interactive Wide dashboard

The initial state enables the recommended diagnostics, Privacy Mode, and Markdown export. The interface lets you: @@ -125,7 +125,7 @@ After collection completes, the result screen displays: - controls for returning to the menu or exiting.

- Windows Diagnostics Toolkit result screen after collection + Windows Diagnostics Toolkit result screen after collection

`WARN` represents diagnostic state that deserves review. It does not change the process exit code. A non-zero exit code means a module failed to execute. diff --git a/tests/readme.tests.ps1 b/tests/readme.tests.ps1 index 0a1a6d7..2cd3e04 100644 --- a/tests/readme.tests.ps1 +++ b/tests/readme.tests.ps1 @@ -50,19 +50,14 @@ Assert-True (-not $readme.Contains('The interface is ASCII-first')) 'README stil Assert-True (-not $readme.Contains('Set-ExecutionPolicy Unrestricted')) 'README recommends a persistent unsafe Execution Policy change.' Assert-True (-not $readme.Contains('C:\Users\')) 'README contains an absolute user profile path.' -$requiredAssets = @( - 'site\assets\tui-wide-real.png', - 'site\assets\tui-result-real.png' -) -foreach ($relativeAsset in $requiredAssets) { - $assetPath = Join-Path -Path $repositoryRoot -ChildPath $relativeAsset - Assert-True (Test-Path -LiteralPath $assetPath -PathType Leaf) ("Documentation asset is missing: {0}" -f $relativeAsset) -} - -Assert-True ($readme.Contains('site/assets/tui-wide-real.png')) 'README does not reference the real Wide TUI visual.' -Assert-True ($readme.Contains('site/assets/tui-result-real.png')) 'README does not reference the real result visual.' -Assert-True ($usage.Contains('../site/assets/tui-wide-real.png')) 'Usage guide does not reference the real Wide TUI visual.' -Assert-True ($usage.Contains('../site/assets/tui-result-real.png')) 'Usage guide does not reference the real result visual.' +$wideTuiImage = 'https://wdt.digital/assets/tui-wide-real.png' +$resultTuiImage = 'https://wdt.digital/assets/tui-result-real.png' +Assert-True ($readme.Contains($wideTuiImage)) 'README does not reference the published Wide TUI visual.' +Assert-True ($readme.Contains($resultTuiImage)) 'README does not reference the published result visual.' +Assert-True ($usage.Contains($wideTuiImage)) 'Usage guide does not reference the published Wide TUI visual.' +Assert-True ($usage.Contains($resultTuiImage)) 'Usage guide does not reference the published result visual.' +Assert-True (-not $readme.Contains('site/assets/')) 'README still references legacy local site assets.' +Assert-True (-not $usage.Contains('site/assets/')) 'Usage guide still references legacy local site assets.' Assert-True ($usage.Contains('ASCII appears instead of the Unicode logo')) 'Usage guide is missing Unicode fallback troubleshooting.' Assert-True (-not $usage.Contains('## Real Co-Authored Commit')) 'Usage guide still contains contributor workflow content.'