.blog-float-right{float:right;margin:0 0 1rem 1.5rem;max-width:240px;shape-margin:1rem}.blog-float-right img{width:100%;height:auto;display:block;border-radius:1rem 1rem 0 0;-webkit-mask-image:linear-gradient(180deg,black 70%,transparent);mask-image:linear-gradient(180deg,black 70%,transparent)}.prose:has(.blog-float-right) h2,.prose:has(.blog-float-right) h3,.prose:has(.blog-float-right) h4{clear:none}@media (max-width:640px){.blog-float-right{float:none;max-width:200px;margin:0 auto 1.5rem}}body:has(.blog-page-section){padding-top:1rem!important}@media (min-width:640px){body:has(.blog-page-section){padding-top:1rem!important}}[style*=opacity]{overflow:visible!important}@supports (overflow-x:clip){body:has(.blog-page-section),html:has(body .blog-page-section){overflow-x:clip!important;overflow-y:visible!important}}@supports not (overflow-x:clip){body:has(.blog-page-section),html:has(body .blog-page-section){overflow:visible!important}}.blog-page-section .sticky{position:sticky!important}@media print{@page{margin:1.5cm;size:A4}.blog-header-dock,.breadcrumbs,.command-menu,.comment-section,.cookie-consent,.fixed,.floating-assistant-button,.fullscreen-toggle,.navbar,.print-no-show,.scroll-progress,.seo-editor,.share-menu,.sticky,[data-floating],[role=navigation],aside,button:not(.print-visible),footer,header,nav{display:none!important}.print-only-show{display:block!important}.bg-background,.bg-card,.prose,article,body,main{background:white!important;color:black!important}*{color:black!important;background:transparent!important;box-shadow:none!important;text-shadow:none!important}a[href]:after{content:" (" attr(href) ")";font-size:.8em;color:#666!important}a[href^="#"]:after,a[href^="/"]:after,a[href^=javascript]:after{content:""}body{font-size:12pt;line-height:1.6;font-family:Georgia,Times New Roman,serif!important}h1{font-size:24pt}h1,h2{margin-bottom:12pt;page-break-after:avoid}h2{font-size:18pt;margin-top:24pt}h3{font-size:14pt;margin-top:18pt;margin-bottom:8pt;page-break-after:avoid}li,p{orphans:3;widows:3}code,pre{font-family:Courier New,monospace!important;font-size:10pt;border:1px solid #ccc!important;padding:8pt!important;white-space:pre-wrap;word-wrap:break-word}code,img,pre{page-break-inside:avoid}img{max-width:100%!important;height:auto!important}article{page-break-before:auto}.page-break{page-break-before:always}.prose,article,main{width:100%!important;max-width:none!important;margin:0!important;padding:0!important}.post-meta{border-bottom:1pt solid #ccc;padding-bottom:12pt;margin-bottom:24pt}table{border-collapse:collapse!important;width:100%!important}td,th{border:1pt solid #ccc!important;padding:6pt!important}blockquote{border-left:3pt solid #666!important;padding-left:12pt!important;margin-left:0!important;font-style:italic}body:after{content:"Printed from ranti.dev";display:block;text-align:center;font-size:10pt;color:#666!important;margin-top:24pt;padding-top:12pt;border-top:1pt solid #ccc}}:root:not(.dark) .prose pre{background-color:#f8fafc!important;border:1px solid #e2e8f0!important}:root:not(.dark) .prose pre code{color:#0f172a!important}:root:not(.dark) [data-line-numbers]>.line:before{color:#94a3b8!important}.dark .prose pre{background-color:#0f172a!important;border:1px solid rgba(255,255,255,.1)!important}.code-block-container:has(code[data-language=mermaid]),pre:has(code[data-language=mermaid]){display:none!important}.mermaid-diagram{margin:2rem 0;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.mermaid-diagram svg{display:block;margin:0 auto;height:auto!important;min-height:200px}.mermaid-diagram .labelText,.mermaid-diagram .labelText>tspan,.mermaid-diagram .loopText,.mermaid-diagram .loopText>tspan,.mermaid-diagram .messageText,.mermaid-diagram .noteText,.mermaid-diagram .noteText>tspan{paint-order:stroke fill!important;stroke:white!important;stroke-width:6px!important;stroke-linecap:round!important;stroke-linejoin:round!important}:is(.dark) .mermaid-diagram .labelText,:is(.dark) .mermaid-diagram .labelText>tspan,:is(.dark) .mermaid-diagram .loopText,:is(.dark) .mermaid-diagram .loopText>tspan,:is(.dark) .mermaid-diagram .messageText,:is(.dark) .mermaid-diagram .noteText,:is(.dark) .mermaid-diagram .noteText>tspan{stroke:hsl(var(--background))!important}.mermaid-diagram{--mm-green-bg:#c3e6cb;--mm-green-border:#28a745;--mm-green-text:#052c11;--mm-yellow-bg:#ffeeba;--mm-yellow-border:#d39e00;--mm-yellow-text:#3d2d00;--mm-blue-bg:#cce5ff;--mm-blue-border:#0056b3;--mm-blue-text:#00224a;--mm-red-bg:#f8d7da;--mm-red-border:#dc3545;--mm-red-text:#4a0910;--mm-purple-bg:#e2d5f1;--mm-purple-border:#6f42c1;--mm-purple-text:#26114a;--mm-teal-bg:#d1ecf1;--mm-teal-border:#17a2b8;--mm-teal-text:#093e47}:is(.dark) .mermaid-diagram{--mm-green-bg:#064020;--mm-green-border:#4ade80;--mm-green-text:#bbf7d0;--mm-yellow-bg:#5c4100;--mm-yellow-border:#facc15;--mm-yellow-text:#fef08a;--mm-blue-bg:#0b3469;--mm-blue-border:#60a5fa;--mm-blue-text:#bfdbfe;--mm-red-bg:#63121b;--mm-red-border:#f87171;--mm-red-text:#fecaca;--mm-purple-bg:#3b1f5e;--mm-purple-border:#a78bfa;--mm-purple-text:#ddd6fe;--mm-teal-bg:#0d4d5a;--mm-teal-border:#4ecdc4;--mm-teal-text:#a5f3fc}.mermaid-diagram .mm-green circle,.mermaid-diagram .mm-green polygon,.mermaid-diagram .mm-green rect{fill:var(--mm-green-bg)!important;stroke:var(--mm-green-border)!important}.mermaid-diagram .mm-green .nodeLabel,.mermaid-diagram .mm-green text{color:var(--mm-green-text)!important;fill:var(--mm-green-text)!important}.mermaid-diagram .mm-yellow circle,.mermaid-diagram .mm-yellow polygon,.mermaid-diagram .mm-yellow rect{fill:var(--mm-yellow-bg)!important;stroke:var(--mm-yellow-border)!important}.mermaid-diagram .mm-yellow .nodeLabel,.mermaid-diagram .mm-yellow text{color:var(--mm-yellow-text)!important;fill:var(--mm-yellow-text)!important}.mermaid-diagram .mm-blue circle,.mermaid-diagram .mm-blue polygon,.mermaid-diagram .mm-blue rect{fill:var(--mm-blue-bg)!important;stroke:var(--mm-blue-border)!important}.mermaid-diagram .mm-blue .nodeLabel,.mermaid-diagram .mm-blue text{color:var(--mm-blue-text)!important;fill:var(--mm-blue-text)!important}.mermaid-diagram .mm-red circle,.mermaid-diagram .mm-red polygon,.mermaid-diagram .mm-red rect{fill:var(--mm-red-bg)!important;stroke:var(--mm-red-border)!important}.mermaid-diagram .mm-red .nodeLabel,.mermaid-diagram .mm-red text{color:var(--mm-red-text)!important;fill:var(--mm-red-text)!important}.mermaid-diagram .mm-purple circle,.mermaid-diagram .mm-purple polygon,.mermaid-diagram .mm-purple rect{fill:var(--mm-purple-bg)!important;stroke:var(--mm-purple-border)!important}.mermaid-diagram .mm-purple .nodeLabel,.mermaid-diagram .mm-purple text{color:var(--mm-purple-text)!important;fill:var(--mm-purple-text)!important}.mermaid-diagram .mm-teal circle,.mermaid-diagram .mm-teal polygon,.mermaid-diagram .mm-teal rect{fill:var(--mm-teal-bg)!important;stroke:var(--mm-teal-border)!important}.mermaid-diagram .mm-teal .nodeLabel,.mermaid-diagram .mm-teal text{color:var(--mm-teal-text)!important;fill:var(--mm-teal-text)!important}