/* Articles: Arabic (RTL) reading pages on top of site.css. Code and logs stay
   dark in both modes, like the code on ml2software.dev. */
:root{--code-bg:#0f172a;--code-fg:#e2e8f0;--code-line:rgba(255,255,255,.09);--code-muted:#94a3b8;
  --c-key:#a5b4fc;--c-str:#5eead4;--c-num:#fcd34d;--c-warn:#fbbf24;--c-err:#fda4af;--warn:#b45309}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){--code-bg:#0a0d13;--warn:#fbbf24}}
:root[data-theme="dark"]{--code-bg:#0a0d13;--warn:#fbbf24}

main.read{max-width:760px}
.read{font-size:18px;line-height:1.95}
.crumbs{padding-top:40px;font-size:.95rem}
.crumbs a{color:var(--fg-muted);text-decoration:none;font-weight:500}
.crumbs a:hover{color:var(--accent)}

/* Head */
.post__head{padding-block:16px 32px;border-bottom:1px solid var(--line)}
.post__head .kicker{direction:ltr;unicode-bidi:isolate}
.post__head h1{font-size:clamp(1.75rem,5vw,2.45rem);line-height:1.45;letter-spacing:0}
.post__meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin-top:20px;color:var(--fg-muted);font-size:.95rem}
.post__meta img{width:36px;height:36px;border-radius:50%}
.post__meta b{color:var(--fg);font-weight:600}
.post__meta .sep{opacity:.5}

/* Body */
.prose{padding-top:8px}
.prose p,.prose ul{margin-top:1.1em}
.prose .lead{font-size:1.12em;color:var(--fg);margin-top:28px}
.prose h2{margin-top:2.2em;font-size:1.5rem;font-weight:700;line-height:1.5}
.prose h3{margin-top:1.8em;font-size:1.12rem;font-weight:700;line-height:1.6}
.prose h3+p{margin-top:.3em}
.prose ul{padding-inline-start:1.3em}
.prose li{margin-top:.4em}
.prose li::marker{color:var(--accent)}
.prose strong{font-weight:700;color:var(--fg)}
.prose code{font-family:var(--mono);font-size:.84em;padding:1px 6px;border-radius:6px;background:var(--mist);
  direction:ltr;unicode-bidi:isolate}
.prose blockquote{margin:1.4em 0 0;padding:14px 20px;border-inline-start:4px solid var(--accent);
  background:var(--accent-soft);border-radius:0 10px 10px 0;font-weight:500}
.lat{unicode-bidi:isolate}

/* Code, logs, and their captions */
.fig{margin:1.8em 0 0}
.fig figcaption{margin-top:10px;color:var(--fg-muted);font-size:.9rem;line-height:1.7;text-align:center}
.box{direction:ltr;text-align:left;background:var(--code-bg);color:var(--code-fg);border-radius:12px;overflow:hidden;
  box-shadow:var(--shadow)}
.box__bar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 10px 8px 16px;
  border-bottom:1px solid var(--code-line);font:500 .8rem var(--font);color:var(--code-muted)}
.copy{font:600 .78rem var(--font);color:var(--code-fg);background:rgba(255,255,255,.07);border:1px solid var(--code-line);
  border-radius:999px;padding:5px 12px;cursor:pointer;min-height:32px}
.copy:hover{background:rgba(255,255,255,.14)}
.box pre{margin:0;padding:16px 18px 18px;overflow-x:auto;font:400 .84rem/1.75 var(--mono);white-space:pre;tab-size:4}
.box pre code{font:inherit;background:none;padding:0;border-radius:0}
.box__out{border-top:1px solid var(--code-line);background:rgba(255,255,255,.025)}
.box__out .lbl{padding:10px 18px 0;font:500 .75rem var(--font);color:var(--code-muted);text-transform:uppercase;letter-spacing:.06em}
.box__out pre{padding-top:6px}

.k{color:var(--c-key);font-weight:600}.s{color:var(--c-str)}.c{color:var(--code-muted);font-style:italic}
.n{color:var(--c-num)}.f{color:#fff;font-weight:600}
.t{color:var(--code-muted)}.src{color:var(--c-key)}
.lv-info{color:var(--c-str);font-weight:600}.lv-warning{color:var(--c-warn);font-weight:600}
.lv-debug{color:var(--code-muted);font-weight:600}.lv-error{color:var(--c-err);font-weight:600}
.row{display:block}
.row.warn{background:rgba(251,191,36,.12);margin-inline:-18px;padding-inline:18px}
pre .row{width:max-content;min-width:calc(100% + 36px)}

/* One log line, its parts labelled */
.anat{overflow-x:auto}
.anat__in{width:max-content;padding:18px 18px 16px;font:400 .84rem/1.75 var(--mono)}
.anat__in pre{padding:0;overflow:visible}
.anat__labels{position:relative;height:2.6em;margin-top:4px}
.seg{position:absolute;top:0;border-top:3px solid;padding-top:4px;text-align:center}
.seg span{font:700 .78rem var(--font);direction:rtl;unicode-bidi:isolate;white-space:nowrap}

/* A bad message next to a good one */
.cmp{display:flex;align-items:center;gap:14px;padding:16px 18px;font:400 .88rem/1.6 var(--mono)}
.cmp+.cmp{border-top:1px solid var(--code-line)}
.cmp--bad{color:var(--c-err)}
.cmp .ic{flex:none;width:26px;height:26px;border-radius:50%;display:grid;place-items:center;font:700 .8rem var(--font);color:#0f172a}
.cmp--bad .ic{background:var(--c-err)}.cmp--good .ic{background:var(--c-str)}

/* Try it */
.try{margin-top:2.4em;padding:4px 24px 24px;border-radius:var(--radius);background:var(--accent-soft)}
.try h2{margin-top:.9em}

/* After the article */
.author{display:flex;gap:14px;align-items:center;margin-top:56px;padding-top:24px;border-top:1px solid var(--line)}
.author img{width:56px;height:56px;border-radius:50%;flex:none}
.author p{margin:0;color:var(--fg-muted);font-size:.95rem;line-height:1.7}
.author b{color:var(--fg)}
.more{margin-top:24px}

/* Articles list */
.list-head{padding-block:48px 8px}
.list-head h1{font-size:clamp(2rem,5vw,2.6rem);line-height:1.3}
.list-head p{margin-top:10px;color:var(--fg-muted)}
.posts{list-style:none;padding:0;margin:32px 0 0;display:grid;gap:16px}
.post-card{display:block;padding:24px;border-radius:var(--radius);background:var(--surface);border:1px solid var(--line);
  box-shadow:var(--shadow);text-decoration:none;color:inherit;transition:border-color .15s ease,transform .15s ease}
.post-card:hover{border-color:color-mix(in srgb,var(--accent) 45%,var(--line));transform:translateY(-1px)}
.post-card h2{font-size:1.3rem;font-weight:700;line-height:1.55}
.post-card p{margin-top:8px;color:var(--fg-muted);font-size:1rem;line-height:1.8}
.post-card .meta{margin-top:14px;font-size:.88rem;color:var(--fg-muted)}
.post-card .go{color:var(--accent);font-weight:600}
.tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.tag{font:600 .72rem var(--mono);color:var(--accent);background:var(--accent-soft);border-radius:6px;padding:2px 8px}
.post__dek{margin-top:12px;font-size:1.15rem;line-height:1.8;color:var(--fg-muted)}

/* Reading progress: a thin line under the sticky bar, filling from the right */
.progress{position:fixed;inset-inline:0;top:0;height:3px;z-index:20;pointer-events:none}
.progress span{display:block;height:100%;background:var(--accent);transform:scaleX(0);transform-origin:right}

/* Section links: a # after each heading, shown on hover or focus */
.prose h2 .anchor{color:var(--fg-muted);text-decoration:none;font-weight:500;opacity:0;margin-inline-start:4px;transition:opacity .15s}
.prose h2:hover .anchor,.prose h2 .anchor:focus-visible{opacity:.7}
.prose h2 .anchor:hover{color:var(--accent);opacity:1}
.prose h2[id]{scroll-margin-top:88px}

/* Contents: a box under the head on phones and tablets, a sticky side list on wide screens */
.toc ol,.toc-inline ol{list-style:none;margin:0;padding:0;counter-reset:toc}
.toc li,.toc-inline li{counter-increment:toc}
.toc a,.toc-inline a{display:block;color:var(--fg-muted);text-decoration:none;font-size:.92rem;line-height:1.6;padding:5px 0}
.toc a::before,.toc-inline a::before{content:counter(toc,arabic-indic) ". ";color:var(--accent);font-weight:600}
.toc a:hover,.toc-inline a:hover{color:var(--accent)}
.toc-inline{margin-top:24px;padding:12px 18px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}
.toc-inline summary{cursor:pointer;font-weight:700;padding:4px 0}
.toc-inline nav{padding-top:6px}
.toc-side{display:none}
@media (min-width:1180px){
  main.read--toc{max-width:1140px}
  .layout{display:grid;grid-template-columns:minmax(0,760px) 250px;gap:64px;justify-content:center}
  .toc-inline{display:none}
  .toc-side{display:block}
  .toc{position:sticky;top:92px;padding-top:40px;max-height:calc(100vh - 110px);overflow-y:auto}
  .toc__title{font:700 .9rem var(--font);color:var(--fg);margin-bottom:8px}
  .toc a{border-inline-start:2px solid var(--line);padding-inline-start:12px}
  .toc a[aria-current]{color:var(--fg);border-color:var(--accent);font-weight:600}
}

/* Share */
.share{margin-top:56px;padding:24px;border-radius:var(--radius);border:1px solid var(--line);background:var(--surface)}
.share h2{font-size:1.15rem;font-weight:700}
.share__btns{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px;justify-content:flex-end}
.share__btns .btn{min-height:40px;padding:8px 16px;font-size:.92rem}
.share__discuss{margin-top:18px;color:var(--fg-muted)}
.share + .author{margin-top:32px}
