@layer reset{*,:before,:after{box-sizing:border-box}html{text-size-adjust:100%}body,h1,h2,h3,p,blockquote,figure{margin:0}body{min-block-size:100vh}img,picture,svg{max-inline-size:100%;display:block}button,input,textarea,select{font:inherit}button,a{touch-action:manipulation}table{border-collapse:collapse}}@layer fonts{@font-face{font-family:Vazirmatn;font-style:normal;font-weight:100 900;font-display:swap;src:url(/fonts/vazirmatn/vazirmatn-variable.woff2)format("woff2")}@font-face{font-family:Estedad;font-style:normal;font-weight:100 900;font-display:swap;src:url(/fonts/estedad/estedad-variable.woff2)format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/fonts/inter/inter-latin.woff2)format("woff2")}@font-face{font-family:MAR Editorial;font-style:normal;font-weight:200 900;font-display:swap;src:url(/fonts/source-serif-4/mar-editorial-variable.woff2)format("woff2")}@font-face{font-family:MAR Editorial LCP;font-style:normal;font-weight:200 900;font-display:swap;src:url(/fonts/source-serif-4/mar-editorial-lcp.woff2)format("woff2")}@font-face{font-family:MAR Editorial;font-style:italic;font-weight:200 900;font-display:swap;src:url(/fonts/source-serif-4/mar-editorial-variable-italic.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/jetbrains-mono/jetbrains-mono-latin.woff2)format("woff2")}}@layer tokens{:root{color-scheme:light;--color-canvas:#f7f4ed;--color-surface:#fcfaf6;--color-ink:#18222d;--color-accent:#a34b35;--color-lapis:#304f68;--color-muted:#706e68;--color-rule:#ddd7cc;--color-focus:#7c3aed;--color-code-bg:#f0ede6;--color-selection-bg:#e7c9be;--color-selection-ink:#18222d;--font-fa-ui:"Vazirmatn", Tahoma, Arial, sans-serif;--font-fa-heading:"Estedad", "Vazirmatn", Tahoma, sans-serif;--font-en-ui:"Inter", system-ui, sans-serif;--font-en-reading:"MAR Editorial", Georgia, serif;--font-code:"JetBrains Mono", "Cascadia Code", Consolas, monospace;--step--1:clamp(.82rem, .79rem + .12vw, .9rem);--step-0:clamp(1rem, .96rem + .18vw, 1.125rem);--step-1:clamp(1.2rem, 1.12rem + .35vw, 1.44rem);--step-2:clamp(1.44rem, 1.29rem + .64vw, 1.88rem);--step-3:clamp(1.73rem, 1.46rem + 1.1vw, 2.5rem);--step-4:clamp(2.07rem, 1.61rem + 1.9vw, 3.38rem);--step-5:clamp(2.49rem, 1.77rem + 3vw, 4.56rem);--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-8:2rem;--space-10:2.5rem;--space-12:3rem;--space-16:4rem;--space-20:5rem;--space-24:6rem;--section-space:clamp(4rem, 8vw, 8rem);--page-max:72rem;--reading-max-fa:46rem;--reading-max-en:43rem;--page-gutter:clamp(1rem, 4vw, 2rem);--header-height:4.5rem;--toc-width:15rem;--tap-min:2.75rem;--border-thin:1px;--border-accent:2px;--radius-sm:.2rem;--radius-md:.375rem;--shadow-focus:0 0 0 3px color-mix(in srgb, var(--color-focus) 32%, transparent);--duration-fast:.12s;--duration-base:.18s;--duration-slow:.22s;--ease-standard:cubic-bezier(.2, 0, 0, 1);--z-base:0;--z-header:10;--z-popover:20;--z-dialog:30}html[lang=fa]{--font-ui:var(--font-fa-ui);--font-heading:var(--font-fa-heading);--font-reading:var(--font-fa-ui);--reading-leading:1.95;--reading-max:var(--reading-max-fa)}html[lang=en]{--font-ui:var(--font-en-ui);--font-heading:"MAR Editorial LCP", var(--font-en-reading);--font-reading:"MAR Editorial LCP", var(--font-en-reading);--reading-leading:1.68;--reading-max:var(--reading-max-en)}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}}@layer base{html{background:var(--color-canvas);color:var(--color-ink);font-family:var(--font-ui);scroll-behavior:smooth;font-size:100%;line-height:1.5}body{background:var(--color-canvas);color:var(--color-ink);font-size:var(--step-0);text-align:start}::selection{background:var(--color-selection-bg);color:var(--color-selection-ink)}a{color:var(--color-accent);text-decoration-color:currentColor;text-decoration-thickness:var(--border-thin);text-underline-offset:var(--space-1);transition:color var(--duration-fast) var(--ease-standard), text-decoration-thickness var(--duration-fast) var(--ease-standard)}a:hover{color:var(--color-ink);text-decoration-thickness:var(--border-accent)}:focus-visible{border-radius:var(--radius-sm);outline:var(--border-accent) solid var(--color-focus);outline-offset:var(--space-1);box-shadow:var(--shadow-focus)}button{min-block-size:var(--tap-min);min-inline-size:var(--tap-min)}.page-shell{inline-size:min(100%, var(--page-max));padding-inline:var(--page-gutter);margin-inline:auto}.reading-column{inline-size:min(100%, var(--reading-max))}.visually-hidden{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;block-size:1px;inline-size:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.code,pre,code,[data-bidi=ltr]{text-align:left;direction:ltr;unicode-bidi:isolate}}@layer typography{h1,h2,h3,h4{color:var(--color-ink);font-family:var(--font-heading);text-wrap:balance;font-weight:600;line-height:1.12}h1{font-size:var(--step-5)}h2{font-size:var(--step-3)}h3{font-size:var(--step-2)}.prose{color:var(--color-ink);font-family:var(--font-reading);font-size:var(--step-0);line-height:var(--reading-leading)}.prose>*+*{margin-block-start:var(--space-6)}.prose ul,.prose ol{padding-inline-start:var(--space-6)}.prose li+li{margin-block-start:var(--space-2)}.prose blockquote{border-inline-start:var(--border-accent) solid var(--color-accent);font-size:var(--step-1);padding-inline-start:var(--space-6)}.prose blockquote footer{color:var(--color-lapis);font-family:var(--font-ui);font-size:var(--step--1);margin-block-start:var(--space-3)}html[lang=en] .eyebrow{letter-spacing:.08em;text-transform:uppercase}.eyebrow{color:var(--color-accent);font-family:var(--font-ui);font-size:var(--step--1);font-weight:700}}@layer components{.article-page{gap:0 var(--space-6);grid-template-columns:repeat(12,minmax(0,1fr));padding-block-start:clamp(3rem,7vw,6rem);display:grid}.article-header,.article-cover,.article-prose{grid-column:2/span 8}.article-header{padding-block-end:var(--space-12)}.article-header__back{min-block-size:var(--tap-min);align-items:center;gap:var(--space-2);font-family:var(--font-ui);font-size:var(--step--1);margin-block-end:var(--space-12);font-weight:700;text-decoration:none;display:inline-flex}html[dir=rtl] .article-header__back span{transform:scaleX(-1)}.article-header>.eyebrow{margin-block-end:var(--space-4)}.article-header h1{max-inline-size:var(--reading-max)}.article-header__deck{max-inline-size:var(--reading-max);color:var(--color-lapis);font-family:var(--font-reading);font-size:var(--step-1);line-height:var(--reading-leading);margin-block-start:var(--space-6)}.article-meta{gap:var(--space-3) var(--space-6);color:var(--color-muted);font-family:var(--font-ui);font-size:var(--step--1);flex-wrap:wrap;margin-block-start:var(--space-8);display:flex}.article-meta div{gap:var(--space-2);display:flex}.article-meta dt,.article-meta dd{margin:0}.article-meta dt:not(.visually-hidden){color:var(--color-ink);font-weight:700}.translation-status{align-items:center;gap:var(--space-3) var(--space-5);font-family:var(--font-ui);font-size:var(--step--1);flex-wrap:wrap;margin-block-start:var(--space-6);display:flex}.translation-status>span{color:var(--color-muted)}.translation-status>a{min-block-size:var(--tap-min);align-items:center;font-weight:700;display:inline-flex}.article-header__notice{border-inline-start:var(--border-accent) solid var(--color-accent);color:var(--color-muted);font-family:var(--font-ui);font-size:var(--step--1);margin-block-start:var(--space-6);padding-inline-start:var(--space-4);line-height:1.7}.article-header__notice strong{color:var(--color-accent)}.article-toc{font-family:var(--font-ui);grid-area:1/10/span 3/-1;align-self:start;padding-block-start:calc(var(--space-24) + var(--space-8));position:sticky;inset-block-start:var(--space-8)}.article-toc summary{color:var(--color-ink);cursor:pointer;font-size:var(--step--1);font-weight:700}.article-toc ol{margin:var(--space-4) 0 0;padding:0;list-style:none}.article-toc li+li{margin-block-start:var(--space-3)}.article-toc a{color:var(--color-muted);font-size:var(--step--1);line-height:1.45;text-decoration:none}.article-toc a:hover{color:var(--color-accent)}.article-toc__level-3{padding-inline-start:var(--space-4)}.article-toc__level-4{padding-inline-start:var(--space-8)}.article-cover{margin-block:0 var(--space-16)}.article-cover svg{border:var(--border-thin) solid var(--color-rule);background:var(--color-code-bg);inline-size:100%;color:var(--color-ink)}.article-cover__grid{fill:none;stroke:var(--color-rule);stroke-width:1px}.article-cover__flow,.article-cover__modules,.article-cover__nodes{fill:var(--color-canvas);stroke:currentColor;stroke-width:2px}.article-cover__flow{fill:none;stroke:var(--color-lapis)}.article-cover__nodes circle{fill:var(--color-accent);stroke:var(--color-canvas)}.article-cover__accent{fill:var(--color-accent);opacity:.88}.article-cover__lapis{fill:var(--color-lapis);opacity:.9}.article-cover figcaption{color:var(--color-muted);font-family:var(--font-ui);font-size:var(--step--1);margin-block-start:var(--space-3)}.article-prose{max-inline-size:var(--reading-max);min-inline-size:0}.article-prose>blockquote:first-child{display:none}.article-prose h2,.article-prose h3,.article-prose h4{scroll-margin-block-start:var(--space-8)}.article-prose h2{margin-block-start:var(--space-16)}.article-prose h3{margin-block-start:var(--space-10)}.article-prose h4{font-size:var(--step-1);margin-block-start:var(--space-8)}.article-prose a{overflow-wrap:anywhere}.article-prose pre{border:var(--border-thin) solid var(--color-rule);border-inline-start:var(--border-accent) solid var(--color-lapis);border-radius:var(--radius-sm);max-inline-size:100%;padding:var(--space-5);font-family:var(--font-code);font-size:var(--step--1);line-height:1.65;overflow-x:auto;background:var(--color-code-bg)!important}.article-prose :not(pre)>code{border-radius:var(--radius-sm);padding:var(--space-1) var(--space-2);background:var(--color-code-bg);font-family:var(--font-code);font-size:.9em}.article-prose table{inline-size:100%;min-inline-size:34rem;font-family:var(--font-ui);font-size:var(--step--1);line-height:1.55}.article-prose .table-scroll{border-block:var(--border-thin) solid var(--color-rule);max-inline-size:100%;overflow-x:auto}.article-prose th,.article-prose td{border-block-end:var(--border-thin) solid var(--color-rule);padding:var(--space-3) var(--space-4);text-align:start;vertical-align:top}.article-prose th{background:var(--color-code-bg);color:var(--color-ink)}.article-prose .callout{border-inline-start:var(--border-accent) solid var(--color-lapis);padding:var(--space-5) var(--space-6);background:var(--color-surface);font-family:var(--font-ui);font-size:var(--step-0);line-height:1.75}.article-prose .callout strong{color:var(--color-lapis)}.article-prose .article-figure{margin-block:var(--space-10)}.article-prose .article-figure svg{border-block:var(--border-thin) solid var(--color-rule);inline-size:100%;padding-block:var(--space-4)}.article-prose .article-figure figcaption{color:var(--color-muted);font-family:var(--font-ui);font-size:var(--step--1);margin-block-start:var(--space-3)}.article-prose .footnotes{border-block-start:var(--border-thin) solid var(--color-rule);font-size:var(--step--1);margin-block-start:var(--space-16);padding-block-start:var(--space-6)}.article-prose .footnotes ol{margin:0}.article-prose .footnotes a{font-family:var(--font-ui)}.article-support{font-family:var(--font-ui);grid-column:10/-1;align-self:start;margin-block-start:var(--space-16)}.article-support section+section{margin-block-start:var(--space-10)}.article-support__permalink{overflow-wrap:anywhere;color:var(--color-muted);font-size:var(--step--1);margin-block-start:var(--space-3);display:block}.article-support ul{margin:var(--space-3) 0 0;padding:0;list-style:none}.article-support li{border-block-end:var(--border-thin) solid var(--color-rule);padding-block:var(--space-3)}.article-support li a{color:var(--color-ink);font-size:var(--step--1);line-height:1.45;text-decoration:none}.article-pager{gap:var(--space-8);border-block:var(--border-thin) solid var(--color-rule);padding-block:var(--space-6);font-family:var(--font-ui);grid-column:1/-1;grid-template-columns:repeat(2,minmax(0,1fr));margin-block-start:var(--section-space);display:grid}.article-pager>div:last-child{text-align:end}.article-pager span{color:var(--color-accent);font-size:var(--step--1);margin-block-end:var(--space-2);font-weight:700;display:block}.article-pager a{color:var(--color-ink);font-family:var(--font-heading);font-size:var(--step-1);font-weight:600;text-decoration:none}.article-pager p{color:var(--color-muted);font-size:var(--step--1)}.article-print-header{display:none}@media (width<=64rem){.article-header,.article-cover,.article-prose{grid-column:1/span 8}.article-toc,.article-support{grid-column:9/-1}}@media (width<=48rem){.article-page{padding-block-start:var(--space-10);display:block}.article-header{padding-block-end:var(--space-8)}.article-header__back{margin-block-end:var(--space-8)}.article-toc{padding-block:var(--space-4) var(--space-8);position:static}.article-toc details{border-block:var(--border-thin) solid var(--color-rule);padding-block:var(--space-4)}.article-cover{margin-block-end:var(--space-10)}.article-support{border-block-start:var(--border-thin) solid var(--color-rule);margin-block-start:var(--space-16);padding-block-start:var(--space-8)}}@media (width<=32rem){.article-meta,.translation-status{flex-direction:column;align-items:flex-start}.article-pager{grid-template-columns:1fr}.article-pager>div:last-child{border-block-start:var(--border-thin) solid var(--color-rule);text-align:start;padding-block-start:var(--space-5)}}.secondary-page{min-block-size:60vh}.secondary-intro{gap:var(--space-12);padding-block:clamp(4rem, 9vw, 7rem) var(--space-12);border-block-end:var(--border-thin) solid var(--color-rule);grid-template-columns:minmax(0,8fr) minmax(15rem,4fr);align-items:end;display:grid}.secondary-intro__copy{max-inline-size:48rem}.secondary-intro h1{margin-block-start:var(--space-4)}.secondary-intro__deck{max-inline-size:42rem;color:var(--color-lapis);font-family:var(--font-reading);font-size:var(--step-1);line-height:var(--reading-leading);margin-block-start:var(--space-6)}.secondary-intro__notice{border-inline-start:var(--border-accent) solid var(--color-accent);color:var(--color-muted);font-family:var(--font-ui);font-size:var(--step--1);padding-inline-start:var(--space-5);line-height:1.65}.secondary-section{padding-block:var(--space-12) var(--section-space)}.secondary-list{margin:0;padding:0;list-style:none}.secondary-row{gap:var(--space-8);padding-block:var(--space-8);border-block-end:var(--border-thin) solid var(--color-rule);grid-template-columns:minmax(0,1fr) minmax(9rem,auto);align-items:start;display:grid}.secondary-row:first-child{border-block-start:var(--border-thin) solid var(--color-rule)}.secondary-row h2{font-size:var(--step-2)}.secondary-row h2 a{color:var(--color-ink);text-decoration:none}.secondary-row h2 a:hover{color:var(--color-accent)}.secondary-row__description{max-inline-size:48rem;color:var(--color-muted);margin-block-start:var(--space-3);line-height:1.65}.secondary-row__meta{color:var(--color-lapis);font-family:var(--font-ui);font-size:var(--step--1);text-align:end}.secondary-row__action{min-block-size:var(--tap-min);font-size:var(--step--1);align-items:center;margin-block-start:var(--space-2);font-weight:700;display:inline-flex}.topic-mark{grid-template-columns:repeat(3, var(--space-2));gap:var(--space-2);justify-content:end;margin-block-end:var(--space-4);display:grid}.topic-mark span{inline-size:var(--space-2);block-size:var(--space-2);border:var(--border-thin) solid var(--color-lapis)}.topic-mark span:nth-child(2){background:var(--color-accent);border-color:var(--color-accent)}.project-row{grid-template-columns:minmax(9rem,3fr) minmax(0,6fr) minmax(10rem,3fr)}.project-row__status{color:var(--color-accent);font-family:var(--font-ui);font-size:var(--step--1);margin-block-start:var(--space-2)}.technology-list{justify-content:flex-end;gap:var(--space-2) var(--space-4);margin:var(--space-3) 0 0;color:var(--color-ink);font-family:var(--font-code);font-size:var(--step--1);flex-wrap:wrap;padding:0;list-style:none;display:flex}.placeholder-prose{padding-block:var(--space-12) var(--section-space)}.secondary-page .writing .article-meta span[aria-hidden=true]{display:none}.placeholder-prose :where(h2,h3){margin-block-start:var(--space-10)}.search-tool{padding-block:var(--space-10) var(--section-space)}.search-form{max-inline-size:56rem}.search-form label{color:var(--color-muted);font-family:var(--font-ui);font-size:var(--step--1);margin-block-end:var(--space-3);display:block}.search-form__control{border-block-end:var(--border-accent) solid var(--color-ink);grid-template-columns:minmax(0,1fr) auto;display:grid}.search-form input,.search-form button{min-block-size:var(--tap-min);color:var(--color-ink);font:inherit;background:0 0;border:0;border-radius:0}.search-form input{min-inline-size:0;padding-block:var(--space-4);padding-inline:0 var(--space-4);font-family:var(--font-reading);font-size:var(--step-1)}.search-form input::placeholder{color:var(--color-muted);opacity:.78}.search-form button{border-inline-start:var(--border-thin) solid var(--color-rule);padding-inline:var(--space-6);color:var(--color-accent);cursor:pointer;font-family:var(--font-ui);font-weight:700}.search-form button:hover{background:var(--color-surface)}.search-status{min-block-size:1.6em;color:var(--color-muted);font-family:var(--font-ui);font-size:var(--step--1);margin-block-start:var(--space-5)}.search-results{max-inline-size:56rem;margin:var(--space-10) 0 0;padding:0;list-style:none}.search-result{border-block-start:var(--border-thin) solid var(--color-rule);padding-block:var(--space-6)}.search-result:last-child{border-block-end:var(--border-thin) solid var(--color-rule)}.search-result>a{color:var(--color-ink);font-family:var(--font-heading);font-size:var(--step-1);text-underline-offset:.2em;font-weight:700;text-decoration-thickness:.08em}.search-result__excerpt{color:var(--color-muted);margin-block-start:var(--space-3);line-height:1.7}.search-result__excerpt mark{background:color-mix(in srgb, var(--color-accent) 20%, transparent);color:var(--color-ink)}.search-result__meta{color:var(--color-lapis);font-family:var(--font-ui);font-size:var(--step--1);margin-block-start:var(--space-3)}.not-found{background:var(--color-canvas);min-block-size:100vh;color:var(--color-ink);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.not-found__edition{flex-direction:column;justify-content:center;padding:clamp(2rem,7vw,7rem);display:flex}.not-found__edition[lang=fa]{font-family:var(--font-fa-ui)}.not-found__edition[lang=fa] h1{font-family:var(--font-fa-heading)}.not-found__edition[lang=en]{font-family:var(--font-en-ui)}.not-found__edition[lang=en] h1{font-family:var(--font-en-reading)}.not-found__edition+.not-found__edition{border-inline-start:var(--border-thin) solid var(--color-rule)}.not-found__edition h1{font-size:var(--step-4);margin-block-start:var(--space-4)}.not-found__edition>p:last-of-type{max-inline-size:34rem;color:var(--color-muted);margin-block-start:var(--space-5);line-height:1.7}.not-found__links{gap:var(--space-4) var(--space-6);flex-wrap:wrap;margin-block-start:var(--space-8);display:flex}.not-found__links a{min-block-size:var(--tap-min);align-items:center;display:inline-flex}@media (width<=48rem){.secondary-intro,.secondary-row,.project-row{grid-template-columns:1fr}.secondary-intro{gap:var(--space-8)}.secondary-row{gap:var(--space-4)}.secondary-row__meta{text-align:start}.topic-mark{justify-content:start}.technology-list{justify-content:flex-start}}@media (width<=40rem){.search-form__control{grid-template-columns:1fr}.search-form button{border-block-start:var(--border-thin) solid var(--color-rule);text-align:start;border-inline-start:0;padding-inline:0}.not-found{grid-template-columns:1fr}.not-found__edition+.not-found__edition{border-block-start:var(--border-thin) solid var(--color-rule);border-inline-start:0}}}@layer utilities{@media print{@page{margin:18mm}html,body{color:#000;background:#fff}nav,[data-print=hidden],[data-system-graphic]{display:none!important}a{color:#000;text-decoration:underline}a[href^=http]:after{content:" (" attr(href) ")";overflow-wrap:anywhere}h1,h2,h3{break-after:avoid}.reading-column{max-inline-size:175mm}.site-header,.site-footer,.article-cover,.article-header__notice,.translation-status{display:none!important}.article-page{padding:0;display:block}.article-header,.article-prose{max-inline-size:none}.article-header__back{display:none}.article-header h1{font-size:28pt}.article-prose{font-size:11pt}.article-prose pre,.article-prose .callout,.article-prose .article-figure{break-inside:avoid}.article-print-header{justify-content:space-between;gap:var(--space-6);border-block-start:var(--border-thin) solid black;font-family:var(--font-ui);margin-block-start:var(--space-12);padding-block-start:var(--space-3);font-size:8pt;display:flex}}}
