body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}body{background-color:#949494}body.dark{background-color:#111}h1{font-size:1.65em}h2{font-size:1.55em}h3{font-size:1.45em}h1,h2,h3,h4,h5,h6{margin:0;padding:.15em 0}hr{border-bottom:1px solid #838383;border-top:0}a{text-decoration:none}nav ul{background-color:#c8102f;border-radius:.85em;height:3em;margin:15px 0;padding:0}nav ul li{display:inline-block;margin:0;padding:0}nav ul li:not(:first-child){margin-left:1.4em}nav ul li img{max-width:32px;padding:0 0 0 7px;position:relative;top:.65em}nav ul li a{color:#ccc;display:inline-block;margin-top:-.2em;min-height:64px;text-decoration:none}nav ul li a:hover{color:#eee;text-decoration:none}.container{margin:0 auto;max-width:600px}.container p{line-height:1.5em}.container .about,.container .blog,.container .contact,.container .home,.container .tools{background-color:#ffffffd1;border-radius:1.4em;box-shadow:0 6px 22px #0000002e;padding:1.45em}.container .about img{border:2px solid #999;display:inline-block;float:right;margin-left:1em;max-width:180px}.row{grid-gap:5px;display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr))}img.img-responsive{width:100%}ul.social-networks{margin:0;padding:0}ul.social-networks li{display:inline-block}ul.social-networks li:not(:first-child){margin-left:12px}ul.social-networks li a{padding-right:1.1em;text-decoration:none}ul.social-networks li a:hover{background:url(/static/media/open_new_tab.3f29c5a47e8b316fbc9a.svg) no-repeat 100% 2px;text-decoration:none}ul.social-networks li.twitter a{color:#1da1f2}ul.social-networks li.linkedin a{color:#0077b5}ul.social-networks li.github a{color:#171515}ul.social-networks li.stackoverflow a{color:#ef8236}a.target_blank{padding-right:1.1em;text-decoration:none}a.target_blank:hover{background:url(/static/media/open_new_tab.3f29c5a47e8b316fbc9a.svg) no-repeat 100% 2px;text-decoration:none}.container .blog{background-color:#f5f5f5e0;color:#1c1c1c;margin-bottom:2em}.blog h1{font-size:1.9em;line-height:1.25;padding:0 0 .2em}.blog h2{font-size:1.4em;line-height:1.3;margin:1.8em 0 .4em}.blog h3{font-size:1.15em;margin:1.4em 0 .3em}.blog li,.blog p{font-size:1.03rem;line-height:1.7}.blog p{margin:0 0 1em}.blog ol,.blog ul{margin:0 0 1.2em;padding-left:1.4em}.blog li{margin-bottom:.4em}.blog li a,.blog p a{color:#0a58ca;text-decoration:underline;text-underline-offset:2px}.blog li a:hover,.blog p a:hover{color:#084298}.blog p a svg{fill:currentColor!important}.blog img{display:block;height:auto;margin:1em auto 0;max-width:100%}.blog .post-item{margin-bottom:1.6em}.blog .post-item a{font-size:1.08em;font-weight:600}.blog .post-item small{color:#555}:root{--sky-top:#6db8f5;--sky-bottom:#eaf6ff;--cloud:#fff;--far:#a8d39a;--near:#80b56d;--verge:#5f9b4f;--asphalt:#565962;--frame:#7a808b;--mark:#f2f2f2;--wall:#cbc5bc;--wall-dark:#aca69d;--roof:#6f7783;--win:#9cc3da;--brick:#a35a47;--smoke:#f4f4f4;--crane:#e2ac27;--steel:#565b63;--mill:#5a4a42;--mill-dark:#3b312d;--sail:#d9d2c6;--tower:#a2604a;--tower-light:#d6cab6;--spire:#4f5662;--concrete:#d0d3d8;--turbine:#f4f6f8;--pylon:#6b7380;--h1:#a8523d;--h2:#c9a063;--h3:#d8cdb8;--h4:#6f8798;--h5:#7a3f35;--hwin:#bcd6e6;--water:#6aa6c9;--foliage:#4f8a47;--trunk:#5b4636;--t-yellow:#f2c818;--t-red:#d8352f;--t-pink:#e56fa8;--t-purple:#8e4fb3;--t-orange:#f08a24}:root[data-phase=dusk]{--sky-top:#36468c;--sky-bottom:#ffa877;--cloud:#ffd0b6;--far:#5c6e68;--near:#455a49;--verge:#3c5d40;--asphalt:#41434c;--frame:#666c78;--wall:#918a92;--wall-dark:#7a747d;--roof:#4d5460;--win:#ffd37a;--brick:#7b4439;--smoke:#d7c3c4;--crane:#c98a28;--steel:#3f444c;--mill:#3a2f33;--mill-dark:#241d22;--sail:#9f8f8a;--tower:#7b4a43;--tower-light:#a39bab;--spire:#3a3f4c;--concrete:#a99fa8;--turbine:#e0d4d4;--pylon:#4a4a58;--h1:#82402f;--h2:#9a7648;--h3:#a69b92;--h4:#54677a;--h5:#5a2f2b;--hwin:#ffd37a;--water:#5f7fa8;--foliage:#3b6a3d;--trunk:#3b2e29;--t-yellow:#c9a01a;--t-red:#a62e2c;--t-pink:#b3597f;--t-purple:#704092;--t-orange:#c06e22}:root[data-phase=night]{--sky-top:#050918;--sky-bottom:#1b2756;--cloud:#2a3662;--far:#1b2937;--near:#132230;--verge:#15301f;--asphalt:#2d3038;--frame:#565c68;--mark:#cfcfcf;--wall:#3e4356;--wall-dark:#30344a;--roof:#272c38;--win:#ffd36b;--brick:#4d2e2c;--smoke:#8e94a6;--crane:#8c6a24;--steel:#2a2e36;--mill:#1d1a22;--mill-dark:#121018;--sail:#5c5a66;--tower:#3a2a2e;--tower-light:#4a4a5a;--spire:#20242e;--concrete:#6d7388;--turbine:#aeb5c6;--pylon:#272b36;--h1:#4d2b27;--h2:#50432e;--h3:#4c4a4a;--h4:#2f3b47;--h5:#3a1f21;--hwin:#ffd36b;--water:#213a60;--foliage:#1c3a24;--trunk:#261c18;--t-yellow:#8a7210;--t-red:#702020;--t-pink:#7a3d58;--t-purple:#4b2c63;--t-orange:#7d4a14}.sky{background:linear-gradient(#6db8f5,#eaf6ff calc(100% - 140px));background:linear-gradient(var(--sky-top),var(--sky-bottom) calc(100% - 140px));bottom:0;left:0;overflow:hidden;pointer-events:none;position:fixed;right:0;top:0;z-index:-1}.sky-sun{background:#ffe27a;border-radius:50%;box-shadow:0 0 36px 12px #ffe27a8c;height:46px;left:9%;position:absolute;top:90px;width:46px}[data-phase=dusk] .sky-sun{background:#ff8a4c;bottom:190px;box-shadow:0 0 40px 16px #ff8a4c80;top:auto}[data-phase=night] .sky-sun{background:#f4f6ff;box-shadow:inset -9px -4px 0 0 #aab5e6,0 0 26px 6px #becdff4d}.sky-stars{background-image:radial-gradient(1.5px 1.5px at 8% 12%,#fff 60%,#0000 62%),radial-gradient(1px 1px at 17% 41%,#fff 60%,#0000 62%),radial-gradient(1.5px 1.5px at 26% 8%,#fff 60%,#0000 62%),radial-gradient(1px 1px at 33% 57%,#fff 60%,#0000 62%),radial-gradient(1.5px 1.5px at 41% 22%,#fff 60%,#0000 62%),radial-gradient(1px 1px at 57% 11%,#fff 60%,#0000 62%),radial-gradient(1.5px 1.5px at 64% 47%,#fff 60%,#0000 62%),radial-gradient(1px 1px at 72% 19%,#fff 60%,#0000 62%),radial-gradient(1.5px 1.5px at 81% 7%,#fff 60%,#0000 62%),radial-gradient(1px 1px at 88% 36%,#fff 60%,#0000 62%),radial-gradient(1.5px 1.5px at 95% 16%,#fff 60%,#0000 62%),radial-gradient(1px 1px at 5% 63%,#fff 60%,#0000 62%),radial-gradient(1.5px 1.5px at 93% 58%,#fff 60%,#0000 62%);height:70%;left:0;opacity:0;position:absolute;right:0;top:0}[data-phase=dusk] .sky-stars{opacity:.35}[data-phase=night] .sky-stars{opacity:1}.sky-cloud{animation:sky-drift 140s linear infinite;background:#fff;background:var(--cloud);border-radius:26px;height:26px;left:0;opacity:.85;position:absolute;width:120px}.sky-cloud:after,.sky-cloud:before{background:inherit;border-radius:50%;content:"";position:absolute}.sky-cloud:before{height:50px;left:20px;top:-22px;width:50px}.sky-cloud:after{height:38px;left:62px;top:-14px;width:38px}.sky-cloud-small{scale:.7;transform-origin:left center}@keyframes sky-drift{0%{transform:translateX(-180px)}to{transform:translateX(100vw)}}.sky-plane{animation:sky-fly 110s linear infinite;animation-delay:-40s;left:0;position:absolute;top:62%}.sky-plane svg{display:block}.sky-contrail{background:linear-gradient(270deg,#ffffffbf,#fff0);height:2px;position:absolute;right:90%;top:9px;width:260px}.sky-plane-body{fill:#fff}.sky-plane-light{fill:#ff3b30;opacity:0}[data-phase=night] .sky-plane-body{fill:#9aa3b8}[data-phase=night] .sky-plane-light{animation:blink 1.2s steps(1) infinite;opacity:1}[data-phase=night] .sky-contrail{opacity:.25}.sky-birds{fill:none;stroke:#3b4a63;stroke-width:1.2;stroke-linecap:round;animation:sky-fly 150s linear infinite;animation-delay:-75s;left:0;position:absolute;top:74%}[data-phase=dusk] .sky-birds{stroke:#3a2f4a}[data-phase=night] .sky-birds{opacity:0}@keyframes sky-fly{0%{transform:translateX(-340px)}to{transform:translateX(100vw)}}.page{box-sizing:border-box;display:flow-root;min-height:100vh;min-height:100dvh;overflow-x:clip;padding-bottom:56px;position:relative}.truck-footer{height:56px;overflow:hidden;pointer-events:none}.truck-footer,.truck-lane{bottom:0;left:0;position:absolute;right:0}.truck-lane{top:0}.truck-road{border-top:1px dashed #0000004d;bottom:10px;bottom:calc(var(--ground, 11px) - 1px);right:0}.truck,.truck-road{left:0;position:absolute}.truck{-webkit-tap-highlight-color:transparent;background:none;border:0;bottom:11px;bottom:var(--ground,11px);color:inherit;cursor:pointer;height:40px;height:calc(var(--truck-w, 100px)*.4);padding:0;pointer-events:auto;width:100px;width:var(--truck-w,100px);will-change:transform}.truck svg{display:block;height:100%;overflow:visible;width:100%}@media (pointer:coarse){.truck:before{bottom:-10px;content:"";left:-12px;position:absolute;right:-12px;top:-10px}}@media only screen and (max-width:480px){.truck-footer{--truck-w:80px}.row{grid-template-columns:1fr}}.truck-box{fill:#f4f4f4}.truck-ribs{fill:none;stroke:#d6d6d6;stroke-width:.5}.truck-cab,.truck-stripe{fill:#c8102f}.truck-livery-name{fill:#1c1c1c;font:italic 900 9px Arial Black,Helvetica Neue,Arial,sans-serif}.truck-livery-line{fill:#c8102f;font:700 3.2px Helvetica Neue,Arial,sans-serif;letter-spacing:.3px}.truck-beam{opacity:0}[data-phase=dusk] .truck-beam,[data-phase=night] .truck-beam{opacity:1}[data-phase=dusk] .truck-headlight,[data-phase=night] .truck-headlight{fill:#fffbe0;stroke:#fff4c48c;stroke-width:.8}.truck-frame,.truck-trim{fill:#2a2a2a}.truck-stack{fill:#bdbdbd}.truck-tank{fill:#c3c7cc;stroke:#7f8387;stroke-width:.3}.truck-strap{fill:none;stroke:#6b6b6b;stroke-width:.6}.truck-arch{fill:#1b1b1b}.truck-seam{fill:none;stroke:#00000059;stroke-width:.6}.truck-glass{fill:#26323b}.truck-glint{fill:#ffffff38}.truck-light-amber{fill:#ffb300}.truck-light-red{fill:#ff2d2d}.truck-headlight{fill:#fff3c4}.truck-fender{fill:#1c1c1c}.truck-guard{fill:none;stroke:#1c1c1c;stroke-width:1}.truck-bumper{fill:#b9bec4}.truck-hose-red,.truck-hose-yellow{fill:none;stroke-width:.5;stroke-linecap:round}.truck-hose-red{stroke:#d42a2a}.truck-hose-yellow{stroke:#f2c200}.truck-tire{fill:#1c1c1c}.truck-tread{fill:none;stroke:#353535;stroke-width:.5}.truck-rim{fill:#c8102f;stroke:#e6e6e6;stroke-width:.3}.truck-rim-trailer{fill:#b9b9b9;stroke:#8f8f8f}.truck-hole{fill:#1f1f1f}.truck-hub{fill:#d7d9dc;stroke:#8d9094;stroke-width:.25}.truck-lug{fill:#6b6f74}@keyframes truck-flash{0%,to{stroke-width:0}20%,60%{stroke-width:2.4}40%,80%{stroke-width:.6}}.honking .truck-headlight{stroke:#fff4c499;animation:truck-flash .9s ease-in-out}.honking .truck-light-amber{stroke:#ffb3008c;animation:truck-flash .9s ease-in-out}@media (prefers-reduced-motion:reduce){.honking .truck-headlight,.honking .truck-light-amber{animation:none}}@media only screen and (max-width:768px){.container{max-width:100%}.container .blog{border-radius:1em;padding:1.1em}.container .about{border-radius:1em;padding:1em}.container .about img{max-width:120px}}.roadtrip{display:flex;flex-direction:column;left:50%;margin:0 0 -56px -50vw;min-height:calc(100vh - 78px);min-height:calc(100dvh - 78px);position:relative;width:100vw}.rt-top{box-sizing:border-box;flex:none;margin:0 auto;max-width:600px;width:100%}.roadtrip-lane{flex:1 1 auto;min-height:230px;position:relative}.rt-stage{height:100%;left:0;overflow:hidden;pointer-events:none;position:absolute;top:0;transition:opacity .8s ease;width:100%}.rt-hill-far{fill:#a8d39a;fill:var(--far)}.rt-hill-near{fill:#80b56d;fill:var(--near)}.rt-distant{opacity:.85}.rt-verge{fill:#5f9b4f;fill:var(--verge)}.rt-asphalt{fill:#565962;fill:var(--asphalt)}.rt-edge{fill:#ffffffa6}.rt-dash{fill:none;stroke:#f2f2f2;stroke:var(--mark);stroke-width:1.3;stroke-dasharray:14 16}.rt-mill-body{fill:#5a4a42;fill:var(--mill)}.rt-blades,.rt-mill-dark,.rt-rotor{fill:#3b312d;fill:var(--mill-dark)}.rt-blades,.rt-rotor{animation:rt-spin 26s linear infinite;transform-box:fill-box;transform-origin:center}.rt-rotor{fill:none;animation-duration:9s}.rt-sail{fill:#d9d2c6;fill:var(--sail)}.rt-tower-brick{fill:#a2604a;fill:var(--tower)}.rt-tower-stone{fill:#d6cab6;fill:var(--tower-light)}.rt-tower-dark{fill:#00000080}.rt-spire{fill:#4f5662;fill:var(--spire)}.rt-concrete{fill:#d0d3d8;fill:var(--concrete)}.rt-concrete-dark{filter:brightness(.82)}.rt-mast-red{fill:#d9423a}.rt-turbine{fill:#f4f6f8;fill:var(--turbine)}.rt-pylon{fill:none;stroke:#6b7380;stroke:var(--pylon);stroke-width:.9}.rt-trunk{fill:#5b4636;fill:var(--trunk)}.rt-foliage{fill:#4f8a47;fill:var(--foliage)}.rt-house{stroke:#0000001f;stroke-width:.3}.rt-h1{fill:#a8523d;fill:var(--h1)}.rt-h2{fill:#c9a063;fill:var(--h2)}.rt-h3{fill:#d8cdb8;fill:var(--h3)}.rt-h4{fill:#6f8798;fill:var(--h4)}.rt-h5{fill:#7a3f35;fill:var(--h5)}.rt-hwin{fill:#bcd6e6;fill:var(--hwin);stroke:#00000040;stroke-width:.3}.rt-hdoor{fill:#00000073}.rt-water{fill:#6aa6c9;fill:var(--water)}.rt-ripple{fill:none;stroke:#fff6;stroke-width:.5}.rt-tulip-yellow{fill:#f2c818;fill:var(--t-yellow)}.rt-tulip-red{fill:#d8352f;fill:var(--t-red)}.rt-tulip-pink{fill:#e56fa8;fill:var(--t-pink)}.rt-tulip-purple{fill:#8e4fb3;fill:var(--t-purple)}.rt-tulip-orange{fill:#f08a24;fill:var(--t-orange)}.rt-leaf{fill:#4f8a47;fill:var(--foliage)}.rt-rows{fill:none;stroke:#00000038;stroke-width:2.8;stroke-dasharray:.7 1.9}@keyframes rt-spin{to{transform:rotate(1turn)}}.rt-wall{fill:#cbc5bc;fill:var(--wall)}.rt-wall-dark{fill:#aca69d;fill:var(--wall-dark)}.rt-roof{fill:#6f7783;fill:var(--roof)}.rt-win{fill:#9cc3da;fill:var(--win);stroke:#00000040;stroke-width:.5}.rt-brick{fill:#a35a47;fill:var(--brick)}.rt-brick-cap{fill:#565b63;fill:var(--steel)}.rt-door{fill:#23262c}.rt-door-glow{fill:#ffcf6b;opacity:0;transition:opacity .5s ease}.roadtrip.working .rt-door-glow{opacity:.55}.roadtrip.working .rt-smoke circle{animation-duration:2.6s}.rt-door-slats{fill:none;stroke:#ffffff2e;stroke-width:.6}.rt-smoke circle{fill:#f4f4f4;fill:var(--smoke);animation:rt-smoke 6s linear infinite;opacity:0;transform-box:fill-box;transform-origin:center}@keyframes rt-smoke{0%{opacity:0;transform:translate(0) scale(.5)}15%{opacity:.6}to{opacity:0;transform:translate(16px,-36px) scale(2.4)}}.rt-crane,.rt-crane-cab{fill:#e2ac27;fill:var(--crane)}.rt-crane-cab{filter:brightness(.85)}.rt-crane-window{fill:#bcd9ea}.rt-crane-leg{fill:none;stroke:#e2ac27;stroke:var(--crane);stroke-width:3.2;stroke-linejoin:round}.rt-crane-truss{fill:none;stroke:#e2ac27;stroke:var(--crane);stroke-width:.9}.rt-beacon{fill:#ff3b30;animation:blink 1.4s steps(1) infinite}@keyframes blink{50%{opacity:.15}}.rt-spreader,.rt-trolley{fill:#565b63;fill:var(--steel)}.rt-cable{fill:none;stroke:#565b63;stroke:var(--steel);stroke-width:.8}.rt-ctr{fill:#6a6fae}.rt-dyn[data-kind=python] .rt-ctr{fill:#2f6da3}.rt-dyn[data-kind=php] .k-python,.rt-dyn[data-kind=python] .k-php{display:none}.rt-ctr-label{fill:#fff;font:800 11px Helvetica Neue,Arial,sans-serif}.rt-dyn[data-kind=python] .rt-ctr-label{fill:#ffd43b}.rt-ctr-ribs{fill:none;stroke:#0000002b;stroke-width:.5}.rt-ctr-rail{fill:#00000038}.rt-ctr-corner{fill:#2b2f36}.rt-tractor .truck-frame,.rt-trailer .truck-frame{fill:#7a808b;fill:var(--frame)}.rt-tractor .truck-fender{fill:#2a2c31}.trailer-leg{transition:transform 1s ease}.rt-trailer.parked .trailer-leg{transform:translateY(4.1px)}.rt-tractor{cursor:pointer;outline:none;pointer-events:all}.rt-tractor:focus-visible{outline:2px solid #fff;outline-offset:2px}.rt-tractor.reversing .truck-light-amber{animation:rt-amber .9s steps(1) infinite}@keyframes rt-amber{50%{fill-opacity:.2}}@media only screen and (max-width:700px){.roadtrip-lane{min-height:215px}.sky-sun{bottom:150px;left:auto;right:8%;top:auto}}@media (prefers-reduced-motion:reduce){.rt-beacon,.rt-blades,.rt-rotor,.rt-smoke circle,.sky-birds,.sky-cloud,.sky-plane,.sky-plane-light{animation:none}.rt-stage,.trailer-leg{transition:none}}
/*# sourceMappingURL=main.35473b86.css.map*/