Mirror of my GitHub Pages site www.spenser.black/
0

Configure Feed

Select the types of activity you want to include in your feed.

Add logos to social links (#2)

authored by

Spenser Black and committed by
GitHub
(Jul 10, 2026, 12:55 PM EDT) 9d992e75 db5851f5

+419 -4
+1
.gitattributes
··· 1 + /public/vendored/* linguist-vendored binary
+1
.prettierignore
··· 1 1 .devcontainer/ 2 2 .vscode/ 3 3 pnpm-lock.yaml 4 + vendored/
+11
README.md
··· 22 22 ```shell 23 23 pnpm run format 24 24 ``` 25 + 26 + ## Vendored files 27 + 28 + ### Logos 29 + 30 + Here are the sources for each brand's set of logos: 31 + 32 + - [Bluesky](https://bsky.social/about/blog/press-faq) ([media kit](https://drive.google.com/drive/folders/16mlJPfWNnc6jj-3vGZ88SFysIY13GBp0?usp=drive_link)) 33 + - [Codeberg](https://codeberg.org/Codeberg/Design) 34 + - [GitHub](https://brand.github.com/foundations/logo) 35 + - [Tangled](https://tangled.org/brand)
+10
public/vendored/GitHub_Invertocat_Black.svg
··· 1 + <svg width="98" height="96" viewBox="0 0 98 96" fill="none" xmlns="http://www.w3.org/2000/svg"> 2 + <g clip-path="url(#clip0_730_27126)"> 3 + <path d="M41.4395 69.3848C28.8066 67.8535 19.9062 58.7617 19.9062 46.9902C19.9062 42.2051 21.6289 37.0371 24.5 33.5918C23.2559 30.4336 23.4473 23.7344 24.8828 20.959C28.7109 20.4805 33.8789 22.4902 36.9414 25.2656C40.5781 24.1172 44.4062 23.543 49.0957 23.543C53.7852 23.543 57.6133 24.1172 61.0586 25.1699C64.0254 22.4902 69.2891 20.4805 73.1172 20.959C74.457 23.543 74.6484 30.2422 73.4043 33.4961C76.4668 37.1328 78.0937 42.0137 78.0937 46.9902C78.0937 58.7617 69.1934 67.6621 56.3691 69.2891C59.623 71.3945 61.8242 75.9883 61.8242 81.252L61.8242 91.2051C61.8242 94.0762 64.2168 95.7031 67.0879 94.5547C84.4102 87.9512 98 70.6289 98 49.1914C98 22.1074 75.9883 6.69539e-07 48.9043 4.309e-07C21.8203 1.92261e-07 -1.9479e-07 22.1074 -4.3343e-07 49.1914C-6.20631e-07 70.4375 13.4941 88.0469 31.6777 94.6504C34.2617 95.6074 36.75 93.8848 36.75 91.3008L36.75 83.6445C35.4102 84.2188 33.6875 84.6016 32.1562 84.6016C25.8398 84.6016 22.1074 81.1563 19.4277 74.7441C18.375 72.1602 17.2266 70.6289 15.0254 70.3418C13.877 70.2461 13.4941 69.7676 13.4941 69.1934C13.4941 68.0449 15.4082 67.1836 17.3223 67.1836C20.0977 67.1836 22.4902 68.9063 24.9785 72.4473C26.8926 75.2227 28.9023 76.4668 31.2949 76.4668C33.6875 76.4668 35.2187 75.6055 37.4199 73.4043C39.0469 71.7773 40.291 70.3418 41.4395 69.3848Z" fill="black"/> 4 + </g> 5 + <defs> 6 + <clipPath id="clip0_730_27126"> 7 + <rect width="98" height="96" fill="white"/> 8 + </clipPath> 9 + </defs> 10 + </svg>
+10
public/vendored/GitHub_Invertocat_White.svg
··· 1 + <svg width="98" height="96" viewBox="0 0 98 96" fill="none" xmlns="http://www.w3.org/2000/svg"> 2 + <g clip-path="url(#clip0_730_27136)"> 3 + <path d="M41.4395 69.3848C28.8066 67.8535 19.9062 58.7617 19.9062 46.9902C19.9062 42.2051 21.6289 37.0371 24.5 33.5918C23.2559 30.4336 23.4473 23.7344 24.8828 20.959C28.7109 20.4805 33.8789 22.4902 36.9414 25.2656C40.5781 24.1172 44.4062 23.543 49.0957 23.543C53.7852 23.543 57.6133 24.1172 61.0586 25.1699C64.0254 22.4902 69.2891 20.4805 73.1172 20.959C74.457 23.543 74.6484 30.2422 73.4043 33.4961C76.4668 37.1328 78.0937 42.0137 78.0937 46.9902C78.0937 58.7617 69.1934 67.6621 56.3691 69.2891C59.623 71.3945 61.8242 75.9883 61.8242 81.252L61.8242 91.2051C61.8242 94.0762 64.2168 95.7031 67.0879 94.5547C84.4102 87.9512 98 70.6289 98 49.1914C98 22.1074 75.9883 6.69539e-07 48.9043 4.309e-07C21.8203 1.92261e-07 -1.9479e-07 22.1074 -4.3343e-07 49.1914C-6.20631e-07 70.4375 13.4941 88.0469 31.6777 94.6504C34.2617 95.6074 36.75 93.8848 36.75 91.3008L36.75 83.6445C35.4102 84.2188 33.6875 84.6016 32.1562 84.6016C25.8398 84.6016 22.1074 81.1563 19.4277 74.7441C18.375 72.1602 17.2266 70.6289 15.0254 70.3418C13.877 70.2461 13.4941 69.7676 13.4941 69.1934C13.4941 68.0449 15.4082 67.1836 17.3223 67.1836C20.0977 67.1836 22.4902 68.9063 24.9785 72.4473C26.8926 75.2227 28.9023 76.4668 31.2949 76.4668C33.6875 76.4668 35.2187 75.6055 37.4199 73.4043C39.0469 71.7773 40.291 70.3418 41.4395 69.3848Z" fill="white"/> 4 + </g> 5 + <defs> 6 + <clipPath id="clip0_730_27136"> 7 + <rect width="98" height="96" fill="white"/> 8 + </clipPath> 9 + </defs> 10 + </svg>
+3
public/vendored/bluesky_media_kit_logo_transparent_3.svg
··· 1 + <svg width="568" height="501" viewBox="0 0 568 501" fill="none" xmlns="http://www.w3.org/2000/svg"> 2 + <path d="M123.121 33.6637C188.241 82.5526 258.281 181.681 284 234.873C309.719 181.681 379.759 82.5526 444.879 33.6637C491.866 -1.61183 568 -28.9064 568 57.9464C568 75.2916 558.055 203.659 552.222 224.501C531.947 296.954 458.067 315.434 392.347 304.249C507.222 323.8 536.444 388.56 473.333 453.32C353.473 576.312 301.061 422.461 287.631 383.039C285.169 375.812 284.017 372.431 284 375.306C283.983 372.431 282.831 375.812 280.369 383.039C266.939 422.461 214.527 576.312 94.6667 453.32C31.5556 388.56 60.7778 323.8 175.653 304.249C109.933 315.434 36.0535 296.954 15.7778 224.501C9.94525 203.659 0 75.2916 0 57.9464C0 -28.9064 76.1345 -1.61183 123.121 33.6637Z" fill="white"/> 3 + </svg>
+3
public/vendored/bluesky_media_kit_logo_transparent_4.svg
··· 1 + <svg width="568" height="501" viewBox="0 0 568 501" fill="none" xmlns="http://www.w3.org/2000/svg"> 2 + <path d="M123.121 33.6637C188.241 82.5526 258.281 181.681 284 234.873C309.719 181.681 379.759 82.5526 444.879 33.6637C491.866 -1.61183 568 -28.9064 568 57.9464C568 75.2916 558.055 203.659 552.222 224.501C531.947 296.954 458.067 315.434 392.347 304.249C507.222 323.8 536.444 388.56 473.333 453.32C353.473 576.312 301.061 422.461 287.631 383.039C285.169 375.812 284.017 372.431 284 375.306C283.983 372.431 282.831 375.812 280.369 383.039C266.939 422.461 214.527 576.312 94.6667 453.32C31.5556 388.56 60.7778 323.8 175.653 304.249C109.933 315.434 36.0535 296.954 15.7778 224.501C9.94525 203.659 0 75.2916 0 57.9464C0 -28.9064 76.1345 -1.61183 123.121 33.6637Z" fill="black"/> 3 + </svg>
+164
public/vendored/codeberg-logo_icon_white.svg
··· 1 + <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 + <svg 3 + width="16" 4 + height="16" 5 + viewBox="0 0 4.2333332 4.2333335" 6 + version="1.1" 7 + id="svg1468" 8 + sodipodi:docname="codeberg-logo_icon_white.svg" 9 + inkscape:version="1.2-alpha1 (b6a15bb, 2022-02-23)" 10 + inkscape:export-filename="/home/robert/Documents/Codeberg/Logo-Kit/svg/Codeberg-favicon_64px.png" 11 + inkscape:export-xdpi="384" 12 + inkscape:export-ydpi="384" 13 + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 14 + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 15 + xmlns:xlink="http://www.w3.org/1999/xlink" 16 + xmlns="http://www.w3.org/2000/svg" 17 + xmlns:svg="http://www.w3.org/2000/svg" 18 + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 19 + xmlns:cc="http://creativecommons.org/ns#" 20 + xmlns:dc="http://purl.org/dc/elements/1.1/"> 21 + <title 22 + id="title16">Codeberg logo</title> 23 + <defs 24 + id="defs1462"> 25 + <linearGradient 26 + xlink:href="#linearGradient6924" 27 + id="linearGradient6918" 28 + x1="42519.285" 29 + y1="-7078.7891" 30 + x2="42575.336" 31 + y2="-6966.9307" 32 + gradientUnits="userSpaceOnUse" /> 33 + <linearGradient 34 + id="linearGradient6924"> 35 + <stop 36 + style="stop-color:#2185d0;stop-opacity:0" 37 + offset="0" 38 + id="stop6920" /> 39 + <stop 40 + id="stop6926" 41 + offset="0.49517274" 42 + style="stop-color:#2185d0;stop-opacity:0.48923996" /> 43 + <stop 44 + style="stop-color:#2185d0;stop-opacity:0.63279623" 45 + offset="1" 46 + id="stop6922" /> 47 + </linearGradient> 48 + <linearGradient 49 + xlink:href="#linearGradient6924-6" 50 + id="linearGradient6918-3" 51 + x1="42519.285" 52 + y1="-7078.7891" 53 + x2="42575.336" 54 + y2="-6966.9307" 55 + gradientUnits="userSpaceOnUse" /> 56 + <linearGradient 57 + id="linearGradient6924-6"> 58 + <stop 59 + style="stop-color:#ffffff;stop-opacity:0;" 60 + offset="0" 61 + id="stop6920-7" /> 62 + <stop 63 + id="stop6926-5" 64 + offset="0.49517274" 65 + style="stop-color:#ffffff;stop-opacity:0.30000001;" /> 66 + <stop 67 + style="stop-color:#ffffff;stop-opacity:0.30000001;" 68 + offset="1" 69 + id="stop6922-3" /> 70 + </linearGradient> 71 + </defs> 72 + <sodipodi:namedview 73 + showborder="false" 74 + id="base" 75 + pagecolor="#000000" 76 + bordercolor="#666666" 77 + borderopacity="1.0" 78 + inkscape:pageopacity="0" 79 + inkscape:pageshadow="2" 80 + inkscape:zoom="22.627417" 81 + inkscape:cx="2.8505242" 82 + inkscape:cy="18.274291" 83 + inkscape:document-units="px" 84 + inkscape:current-layer="svg1468" 85 + inkscape:document-rotation="0" 86 + showgrid="false" 87 + fit-margin-top="0" 88 + fit-margin-left="0" 89 + fit-margin-right="0" 90 + fit-margin-bottom="0" 91 + units="px" 92 + inkscape:snap-global="false" 93 + inkscape:snap-page="true" 94 + showguides="false" 95 + inkscape:window-width="1531" 96 + inkscape:window-height="873" 97 + inkscape:window-x="69" 98 + inkscape:window-y="27" 99 + inkscape:window-maximized="1" 100 + inkscape:pagecheckerboard="0" 101 + inkscape:deskcolor="#d1d1d1"> 102 + <inkscape:grid 103 + type="xygrid" 104 + id="grid2067" /> 105 + </sodipodi:namedview> 106 + <metadata 107 + id="metadata1465"> 108 + <rdf:RDF> 109 + <cc:Work 110 + rdf:about=""> 111 + <dc:format>image/svg+xml</dc:format> 112 + <dc:type 113 + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> 114 + <dc:title>Codeberg logo</dc:title> 115 + <cc:license 116 + rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" /> 117 + <dc:creator> 118 + <cc:Agent> 119 + <dc:title>Robert Martinez</dc:title> 120 + </cc:Agent> 121 + </dc:creator> 122 + <dc:rights> 123 + <cc:Agent> 124 + <dc:title>Codeberg and the Codeberg Logo are trademarks of Codeberg e.V.</dc:title> 125 + </cc:Agent> 126 + </dc:rights> 127 + <dc:date>2020-04-09</dc:date> 128 + <dc:publisher> 129 + <cc:Agent> 130 + <dc:title>Codeberg e.V.</dc:title> 131 + </cc:Agent> 132 + </dc:publisher> 133 + <dc:source>codeberg.org</dc:source> 134 + </cc:Work> 135 + <cc:License 136 + rdf:about="http://creativecommons.org/publicdomain/zero/1.0/"> 137 + <cc:permits 138 + rdf:resource="http://creativecommons.org/ns#Reproduction" /> 139 + <cc:permits 140 + rdf:resource="http://creativecommons.org/ns#Distribution" /> 141 + <cc:permits 142 + rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /> 143 + </cc:License> 144 + </rdf:RDF> 145 + </metadata> 146 + <g 147 + id="g370484" 148 + inkscape:label="logo" 149 + transform="matrix(0.06551432,0,0,0.06551432,-2.232417,-1.431776)"> 150 + <path 151 + id="path6733-5" 152 + style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:url(#linearGradient6918-3);fill-opacity:1;stroke:none;stroke-width:3.67846;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke markers fill;stop-color:#000000;stop-opacity:1" 153 + d="m 42519.285,-7078.7891 a 0.76086879,0.56791688 0 0 0 -0.738,0.6739 l 33.586,125.8886 a 87.182358,87.182358 0 0 0 39.381,-33.7636 l -71.565,-92.5196 a 0.76086879,0.56791688 0 0 0 -0.664,-0.2793 z" 154 + transform="matrix(0.37058478,0,0,0.37058478,-15690.065,2662.0533)" 155 + inkscape:label="berg" /> 156 + <path 157 + id="path360787" 158 + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke-width:17.0055;paint-order:markers fill stroke;stop-color:#000000" 159 + d="m 11249.461,-1883.6961 c -12.74,0 -23.067,10.3275 -23.067,23.0671 0,4.3335 1.22,8.5795 3.522,12.2514 l 19.232,-24.8636 c 0.138,-0.1796 0.486,-0.1796 0.624,0 l 19.233,24.8646 c 2.302,-3.6721 3.523,-7.9185 3.523,-12.2524 0,-12.7396 -10.327,-23.0671 -23.067,-23.0671 z" 160 + sodipodi:nodetypes="sccccccs" 161 + inkscape:label="sky" 162 + transform="matrix(1.4006354,0,0,1.4006354,-15690.065,2662.0533)" /> 163 + </g> 164 + </svg>
+118
public/vendored/codeberg-logo_special_fake-transaprency.svg
··· 1 + <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 + <svg 3 + width="16" 4 + height="16" 5 + viewBox="0 0 4.2333332 4.2333335" 6 + version="1.1" 7 + id="svg1468" 8 + sodipodi:docname="codeberg-logo_special_no-halftone.svg" 9 + inkscape:version="1.2-alpha1 (b6a15bb, 2022-02-23)" 10 + inkscape:export-filename="/home/mray/Projects/Codeberg/codeberg_.png" 11 + inkscape:export-xdpi="1536" 12 + inkscape:export-ydpi="1536" 13 + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 14 + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 15 + xmlns="http://www.w3.org/2000/svg" 16 + xmlns:svg="http://www.w3.org/2000/svg" 17 + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 18 + xmlns:cc="http://creativecommons.org/ns#" 19 + xmlns:dc="http://purl.org/dc/elements/1.1/"> 20 + <title 21 + id="title2230">Codeberg logo special version</title> 22 + <defs 23 + id="defs1462" /> 24 + <sodipodi:namedview 25 + inkscape:bbox-nodes="true" 26 + inkscape:bbox-paths="true" 27 + inkscape:guide-bbox="true" 28 + inkscape:snap-bbox-edge-midpoints="true" 29 + inkscape:object-paths="true" 30 + inkscape:snap-intersection-paths="true" 31 + inkscape:snap-bbox-midpoints="true" 32 + inkscape:snap-bbox="true" 33 + showborder="false" 34 + id="base" 35 + pagecolor="#ffffff" 36 + bordercolor="#666666" 37 + borderopacity="1.0" 38 + inkscape:pageopacity="0.0" 39 + inkscape:pageshadow="2" 40 + inkscape:zoom="5.6568543" 41 + inkscape:cx="5.7452425" 42 + inkscape:cy="32.261747" 43 + inkscape:document-units="px" 44 + inkscape:current-layer="layer1" 45 + inkscape:document-rotation="0" 46 + showgrid="false" 47 + fit-margin-top="0" 48 + fit-margin-left="0" 49 + fit-margin-right="0" 50 + fit-margin-bottom="0" 51 + units="px" 52 + inkscape:snap-global="false" 53 + inkscape:snap-page="true" 54 + showguides="true" 55 + inkscape:pagecheckerboard="0" 56 + inkscape:deskcolor="#d1d1d1"> 57 + <inkscape:grid 58 + type="xygrid" 59 + id="grid2067" /> 60 + </sodipodi:namedview> 61 + <metadata 62 + id="metadata1465"> 63 + <rdf:RDF> 64 + <cc:Work 65 + rdf:about=""> 66 + <dc:format>image/svg+xml</dc:format> 67 + <dc:type 68 + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> 69 + <dc:title>Codeberg logo special version</dc:title> 70 + <dc:creator> 71 + <cc:Agent> 72 + <dc:title>Robert Martinez</dc:title> 73 + </cc:Agent> 74 + </dc:creator> 75 + <cc:license 76 + rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" /> 77 + <dc:description>Special single color version with fake halftone</dc:description> 78 + <dc:date>2020-04-09</dc:date> 79 + <dc:rights> 80 + <cc:Agent> 81 + <dc:title>Codeberg and the Codeberg Logo are trademarks of Codeberg e.V.</dc:title> 82 + </cc:Agent> 83 + </dc:rights> 84 + <dc:source>codeberg.org</dc:source> 85 + <dc:publisher> 86 + <cc:Agent> 87 + <dc:title>Codeberg e.V.</dc:title> 88 + </cc:Agent> 89 + </dc:publisher> 90 + </cc:Work> 91 + <cc:License 92 + rdf:about="http://creativecommons.org/publicdomain/zero/1.0/"> 93 + <cc:permits 94 + rdf:resource="http://creativecommons.org/ns#Reproduction" /> 95 + <cc:permits 96 + rdf:resource="http://creativecommons.org/ns#Distribution" /> 97 + <cc:permits 98 + rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /> 99 + </cc:License> 100 + </rdf:RDF> 101 + </metadata> 102 + <g 103 + style="opacity:1" 104 + inkscape:label="Layer 1" 105 + inkscape:groupmode="layer" 106 + id="layer1" 107 + transform="translate(-44.867463,-75.990641)"> 108 + <g 109 + id="g1542-5-7-2" 110 + style="opacity:1" 111 + transform="matrix(0.62731857,0,0,0.30231784,25.415003,63.342477)" /> 112 + <path 113 + id="rect60043" 114 + style="fill-opacity:1;stroke:none;stroke-width:0.0660874;paint-order:markers fill stroke;stop-color:#000000" 115 + d="m 46.983886,76.122471 c -1.172544,0 -2.116423,0.944367 -2.116423,2.116911 -5.6e-5,0.397554 0.112002,0.787589 0.323326,1.124632 l 1.764533,-2.281439 c 0.01275,-0.01632 0.04434,-0.01632 0.05708,0 l 0.736954,0.952848 h -0.527804 l 0.01143,0.04204 h 0.549083 l 0.155695,0.200846 h -0.648209 l 0.01818,0.06591 h 0.680903 l 0.137012,0.176972 h -0.768612 l 0.02386,0.08511 h 0.810129 l 0.122481,0.157769 H 47.42501 l 0.02906,0.103797 h 0.939356 l 0.10743,0.138567 h -1.008381 l 0.03218,0.114695 h 1.064947 l 0.09912,0.128189 h -1.128265 l 0.03218,0.114694 h 1.184832 c 0.211323,-0.337043 0.323393,-0.727078 0.323326,-1.12463 1e-6,-1.172544 -0.944364,-2.116911 -2.116909,-2.116911 z m 0.644552,3.369732 0.03218,0.114695 h 0.939339 c 0.03063,-0.03616 0.06232,-0.07645 0.09055,-0.114695 z m 0.06799,0.242882 0.03166,0.114695 h 0.628487 c 0.04111,-0.03504 0.08566,-0.07553 0.125654,-0.114694 z m 0.06747,0.242883 0.03218,0.114176 h 0.212225 c 0.06271,-0.03599 0.120816,-0.07262 0.183679,-0.114176 z" 116 + sodipodi:nodetypes="scccccccccccccccccccccccccccccsccccccccccccccc" /> 117 + </g> 118 + </svg>
+5
public/vendored/tangled_dolly_face_black.svg
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <svg viewBox="0 0 32 32" fill="black" xmlns="http://www.w3.org/2000/svg"> 3 + 4 + <path d="M21.0971 30.866C20.0566 30.8575 19.2628 30.5542 18.4016 30.0269C17.1668 29.3753 16.2237 28.2808 15.5497 27.0739C14.4789 28.4065 13.0476 29.215 11.4453 29.6718C10.763 29.8705 9.56809 30.0721 7.58737 29.3523C4.73277 28.3905 2.65342 25.4114 2.88973 22.3758C2.8465 21.1175 3.30392 19.8825 3.95228 18.8208C2.22264 17.8897 0.81225 16.3266 0.272148 14.4098C-0.0560731 13.3604 -0.042271 12.2299 0.0787626 11.1512C0.512215 8.60429 2.41697 6.38956 4.86912 5.59294C5.8479 3.35574 7.98378 1.68743 10.4037 1.34778C12.0104 1.12338 13.6735 1.46075 15.0792 2.27979C17.1272 0.00158595 20.6952 -0.671697 23.4195 0.727793C25.4978 1.72322 26.9839 3.80003 27.3447 6.06471C29.3222 6.85928 30.9877 8.47971 31.6413 10.5368C32.0784 11.8104 32.0928 13.2132 31.8098 14.5209C31.3041 16.5615 29.8679 18.2987 28.009 19.2482C28.0135 19.6113 29.2037 22.2296 29.0047 24.2056C28.9612 26.676 27.399 29.0172 25.2325 30.1544C23.9683 30.8945 22.4702 30.8805 21.0971 30.866ZM15.1733 23.755C16.9256 23.5593 18.0743 22.0269 18.9665 20.6469C19.3883 20.0182 19.7105 19.3146 20.0306 18.6454C20.4458 19.0271 20.7975 19.7461 21.4541 19.9173C22.1457 20.1333 22.9566 19.9579 23.38 19.3277C24.1902 17.8118 23.7908 15.9827 23.319 14.4119C23.0284 13.5097 22.6472 12.5841 21.9218 11.9446C22.0765 10.85 21.4299 9.73834 20.5106 9.16542C19.7272 9.79198 18.5352 9.78821 17.7794 9.11795C16.3309 10.5997 15.0034 10.5505 13.7212 9.37618C13.4331 9.11226 12.8832 10.9871 10.9535 9.92506C9.84488 10.8567 8.98526 11.753 8.22356 13.0435C7.48342 14.4347 6.70829 15.6703 6.64151 17.1811C6.6094 18.0641 7.29731 18.9892 8.22942 18.9174C9.16105 19.0009 9.7952 18.0813 10.5006 17.6993C10.6058 18.9316 10.7243 20.2556 11.1395 21.4587C11.6161 23.0155 13.2947 24.005 14.8835 23.7784C14.9959 23.7696 15.1733 23.7549 15.1733 23.755ZM16.0828 19.1062C15.2306 18.5823 15.6407 17.4452 15.6066 16.6193C15.6914 15.6227 15.7594 14.575 16.2061 13.667C16.6788 13.0197 17.8318 13.2694 17.8827 14.0999C17.8488 14.9353 17.4664 15.767 17.5121 16.633C17.4129 17.3561 17.5839 18.1684 17.265 18.8293C17.0033 19.195 16.4703 19.3013 16.0828 19.1062ZM12.3606 18.6302C11.5578 18.1933 11.8129 17.0941 11.687 16.3298C11.7914 15.445 11.7045 14.3226 12.4431 13.7021C13.1653 13.1969 14.1485 14.0621 13.8069 14.8564C13.4426 15.8602 13.6814 16.957 13.6891 17.9748C13.5512 18.5752 12.911 18.894 12.3606 18.6302Z" fill="black"/> 5 + </svg>
+5
public/vendored/tangled_dolly_face_white.svg
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <svg viewBox="0 0 32 32" fill="white" xmlns="http://www.w3.org/2000/svg"> 3 + 4 + <path d="M21.0971 30.866C20.0566 30.8575 19.2628 30.5542 18.4016 30.0269C17.1668 29.3753 16.2237 28.2808 15.5497 27.0739C14.4789 28.4065 13.0476 29.215 11.4453 29.6718C10.763 29.8705 9.56809 30.0721 7.58737 29.3523C4.73277 28.3905 2.65342 25.4114 2.88973 22.3758C2.8465 21.1175 3.30392 19.8825 3.95228 18.8208C2.22264 17.8897 0.81225 16.3266 0.272148 14.4098C-0.0560731 13.3604 -0.042271 12.2299 0.0787626 11.1512C0.512215 8.60429 2.41697 6.38956 4.86912 5.59294C5.8479 3.35574 7.98378 1.68743 10.4037 1.34778C12.0104 1.12338 13.6735 1.46075 15.0792 2.27979C17.1272 0.00158595 20.6952 -0.671697 23.4195 0.727793C25.4978 1.72322 26.9839 3.80003 27.3447 6.06471C29.3222 6.85928 30.9877 8.47971 31.6413 10.5368C32.0784 11.8104 32.0928 13.2132 31.8098 14.5209C31.3041 16.5615 29.8679 18.2987 28.009 19.2482C28.0135 19.6113 29.2037 22.2296 29.0047 24.2056C28.9612 26.676 27.399 29.0172 25.2325 30.1544C23.9683 30.8945 22.4702 30.8805 21.0971 30.866ZM15.1733 23.755C16.9256 23.5593 18.0743 22.0269 18.9665 20.6469C19.3883 20.0182 19.7105 19.3146 20.0306 18.6454C20.4458 19.0271 20.7975 19.7461 21.4541 19.9173C22.1457 20.1333 22.9566 19.9579 23.38 19.3277C24.1902 17.8118 23.7908 15.9827 23.319 14.4119C23.0284 13.5097 22.6472 12.5841 21.9218 11.9446C22.0765 10.85 21.4299 9.73834 20.5106 9.16542C19.7272 9.79198 18.5352 9.78821 17.7794 9.11795C16.3309 10.5997 15.0034 10.5505 13.7212 9.37618C13.4331 9.11226 12.8832 10.9871 10.9535 9.92506C9.84488 10.8567 8.98526 11.753 8.22356 13.0435C7.48342 14.4347 6.70829 15.6703 6.64151 17.1811C6.6094 18.0641 7.29731 18.9892 8.22942 18.9174C9.16105 19.0009 9.7952 18.0813 10.5006 17.6993C10.6058 18.9316 10.7243 20.2556 11.1395 21.4587C11.6161 23.0155 13.2947 24.005 14.8835 23.7784C14.9959 23.7696 15.1733 23.7549 15.1733 23.755ZM16.0828 19.1062C15.2306 18.5823 15.6407 17.4452 15.6066 16.6193C15.6914 15.6227 15.7594 14.575 16.2061 13.667C16.6788 13.0197 17.8318 13.2694 17.8827 14.0999C17.8488 14.9353 17.4664 15.767 17.5121 16.633C17.4129 17.3561 17.5839 18.1684 17.265 18.8293C17.0033 19.195 16.4703 19.3013 16.0828 19.1062ZM12.3606 18.6302C11.5578 18.1933 11.8129 17.0941 11.687 16.3298C11.7914 15.445 11.7045 14.3226 12.4431 13.7021C13.1653 13.1969 14.1485 14.0621 13.8069 14.8564C13.4426 15.8602 13.6814 16.957 13.6891 17.9748C13.5512 18.5752 12.911 18.894 12.3606 18.6302Z" fill="white"/> 5 + </svg>
+33 -4
src/components/Footer.astro
··· 1 1 --- 2 2 import ExternalLink from "./ExternalLink.astro"; 3 + import SocialLogos from "./SocialLogos.astro"; 3 4 const email = "me@spenser.black"; 4 5 const bluesky = "https://bsky.app/profile/spenser.black"; 5 6 const codeberg = "https://codeberg.org/spenserblack"; ··· 15 16 <strong>Contacts and socials</strong> 16 17 <ul class="vertical"> 17 18 <li><a href={`mailto:${email}`}>{email}</a></li> 18 - <li><ExternalLink link={bluesky}>Bluesky</ExternalLink></li> 19 - <li><ExternalLink link={codeberg}>Codeberg</ExternalLink></li> 20 - <li><ExternalLink link={github}>GitHub</ExternalLink></li> 21 - <li><ExternalLink link={tangled}>Tangled</ExternalLink></li> 19 + <li> 20 + <SocialLogos 21 + brand="Bluesky" 22 + dark="bluesky_media_kit_logo_transparent_3.svg" 23 + light="bluesky_media_kit_logo_transparent_4.svg" 24 + /> 25 + <ExternalLink link={bluesky}>Bluesky</ExternalLink> 26 + </li> 27 + <li> 28 + <SocialLogos 29 + brand="Codeberg" 30 + dark="codeberg-logo_icon_white.svg" 31 + light="codeberg-logo_special_fake-transaprency.svg" 32 + /> 33 + <ExternalLink link={codeberg}>Codeberg</ExternalLink> 34 + </li> 35 + <li> 36 + <SocialLogos 37 + brand="GitHub" 38 + dark="GitHub_Invertocat_White.svg" 39 + light="GitHub_Invertocat_Black.svg" 40 + /> 41 + <ExternalLink link={github}>GitHub</ExternalLink> 42 + </li> 43 + <li> 44 + <SocialLogos 45 + brand="Tangled" 46 + dark="tangled_dolly_face_white.svg" 47 + light="tangled_dolly_face_black.svg" 48 + /> 49 + <ExternalLink link={tangled}>Tangled</ExternalLink> 50 + </li> 22 51 </ul> 23 52 </li> 24 53 <li>
+34
src/components/SocialLogos.astro
··· 1 + --- 2 + type Props = { 3 + brand: string; 4 + light?: string; 5 + dark?: string; 6 + }; 7 + 8 + const { brand, light, dark } = Astro.props; 9 + --- 10 + 11 + { 12 + dark && ( 13 + <img 14 + class="logo dark-only" 15 + src={`/vendored/${dark}`} 16 + alt={`${brand} Logo (dark theme)`} 17 + /> 18 + ) 19 + }{ 20 + light && ( 21 + <img 22 + class="logo light-only" 23 + src={`/vendored/${light}`} 24 + alt={`${brand} Logo (light theme)`} 25 + /> 26 + ) 27 + } 28 + <style> 29 + img { 30 + max-width: 1em; 31 + max-height: 1em; 32 + margin-right: 0.25em; 33 + } 34 + </style>
+21
src/styles/global.css
··· 35 35 * mode detection. I'm just assuming those people prefer dark mode, and making that the default 36 36 * when it's unknown. 37 37 */ 38 + .light-only { 39 + display: none; 40 + } 38 41 @media (prefers-color-scheme: light) { 39 42 :root { 40 43 --main-bg: var(--light-main-bg); ··· 45 48 --link-visited: var(--light-link-visited); 46 49 --link-hover: var(--light-link-hover); 47 50 } 51 + .dark-only { 52 + display: none; 53 + } 54 + .light-only { 55 + display: revert; 56 + } 48 57 } 49 58 50 59 :root[data-theme="light"] { ··· 56 65 --link-visited: var(--light-link-visited); 57 66 --link-hover: var(--light-link-hover); 58 67 } 68 + :root[data-theme="light"] .light-only { 69 + display: revert; 70 + } 71 + :root[data-theme="light"] .dark-only { 72 + display: none !important; 73 + } 59 74 60 75 :root[data-theme="dark"] { 61 76 --main-bg: var(--dark-main-bg); ··· 65 80 --link: var(--dark-link); 66 81 --link-visited: var(--dark-link-visited); 67 82 --link-hover: var(--dark-link-visited); 83 + } 84 + :root[data-theme="dark"] .dark-only { 85 + display: revert; 86 + } 87 + :root[data-theme="dark"] .light-only { 88 + display: none !important; 68 89 } 69 90 70 91 body {