/* raven-ml.dev: the one stylesheet. The tokens and components are the A″
   v4 design system, unchanged; the landing page's own classes follow them. */

@font-face{font-family:Geist;src:url(/fonts/Geist-Regular.woff2) format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:Geist;src:url(/fonts/Geist-Medium.woff2) format("woff2");font-weight:500;font-display:swap}
@font-face{font-family:"Geist Mono";src:url(/fonts/GeistMono-Regular.woff2) format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"Geist Mono";src:url(/fonts/GeistMono-Medium.woff2) format("woff2");font-weight:500;font-display:swap}
@font-face{font-family:Runes;src:url(/fonts/NotoSansRunic.woff2) format("woff2");font-display:swap;unicode-range:U+16A0-16FF}

:root{
  --bg:#0d0d0c; --surface:#121211; --code-inline:#1a1a18;
  --line-1:#1f1f1d; --line-2:#262624; --line-3:#2f2e2b; --line-4:#3a3833; --field:#64615b;
  --text-0:#f3f2ee; --text-1:#ecebe6; --text-2:#c9c7c0; --text-3:#b8b6ae; --dim:#8f8c84;
  --amber:#e3a857; --amber-ring:#2a2115;
  --raven:#3987e5; --ref:#d95926;
  --r-sm:6px; --r-md:10px;
  --gutter:32px; --section-y:clamp(64px,7.8vw,112px); --hero-top:clamp(64px,8vw,112px);
  --mono:'Geist Mono',ui-monospace,SFMono-Regular,Menlo,monospace;
  --sans:Geist,ui-sans-serif,system-ui,-apple-system,sans-serif;
}
body{margin:0;background:var(--bg)}
*{box-sizing:border-box}
a{color:var(--text-1);text-decoration:none}
a:hover{color:#fff}
:focus-visible{outline:2px solid var(--text-1);outline-offset:2px;border-radius:2px}
[role=tab]:focus-visible,[role=tabpanel]:focus-visible,pre[tabindex]:focus-visible,.out:focus-visible,.scroll:focus-visible{outline-offset:-2px}
input::placeholder{color:var(--dim);opacity:1}
pre{margin:0;font-family:var(--mono)}
code{font-family:var(--mono)}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip{position:absolute;left:16px;top:-48px;z-index:10;padding:10px 14px;background:var(--text-1);color:var(--bg);border-radius:var(--r-sm);font:500 14px var(--mono)}
.skip:focus{top:12px;color:var(--bg)}

/* page */
body{background:var(--bg);color:var(--text-1);font-family:var(--sans);font-size:17px;line-height:1.6;-webkit-font-smoothing:antialiased}
.frame{max-width:1264px;margin:0 auto;border-left:1px solid var(--line-1);border-right:1px solid var(--line-1)}
.pad{padding-left:var(--gutter);padding-right:var(--gutter)}
.section{padding-top:var(--section-y);padding-bottom:var(--section-y);border-top:1px solid var(--line-1)}
.hero{padding-top:var(--hero-top);padding-bottom:var(--section-y)}
.stack{display:flex;flex-direction:column}
.split{display:flex;flex-wrap:wrap;gap:24px 64px;align-items:end;justify-content:space-between}
.split > .main{flex:1 1 560px;min-width:0}
.split > .side{flex:1 1 360px;min-width:0}

/* type: 17 tokens */
.display{margin:0;font-size:clamp(40px,5.6vw,72px);line-height:1.02;letter-spacing:-.035em;font-weight:500;color:var(--text-0);text-wrap:balance}
.h1{margin:0;font-size:clamp(40px,5.2vw,64px);line-height:1.03;letter-spacing:-.035em;font-weight:500;color:var(--text-0);text-wrap:balance}
.h1-article{margin:0;font-size:clamp(34px,4.4vw,52px);line-height:1.05;letter-spacing:-.03em;font-weight:500;color:var(--text-0);text-wrap:balance}
.h2-landing{margin:0;font-size:clamp(32px,4.2vw,52px);line-height:1.05;letter-spacing:-.03em;font-weight:500;color:var(--text-0);text-wrap:balance}
.h2{margin:0;font-size:clamp(28px,3.4vw,40px);line-height:1.08;letter-spacing:-.03em;font-weight:500;color:var(--text-0);text-wrap:balance}
.h1-doc{margin:0;font-size:38px;line-height:1.1;letter-spacing:-.03em;font-weight:500;color:var(--text-0)}
.h2-doc{margin:36px 0 0;font-size:26px;line-height:1.25;letter-spacing:-.02em;font-weight:500;color:var(--text-0)}
.h3{margin:0;font-size:22px;line-height:1.25;letter-spacing:-.015em;font-weight:500;color:var(--text-0)}
.h4{margin:0;font-size:17px;line-height:1.4;font-weight:500;color:var(--text-0)}
.lead{margin:0;max-width:36rem;font-size:18px;line-height:1.55;color:var(--text-3);text-wrap:pretty}
.body{margin:0;max-width:36rem;color:var(--text-2);text-wrap:pretty}
.small{font-size:15px;line-height:1.5;color:var(--text-3)}
.mono{font-family:var(--mono)}
.mono-ui{font-family:var(--mono);font-size:14px}
.label{margin:0;font-family:var(--mono);font-size:13px;line-height:1.5;font-weight:400;color:var(--dim)}
.caption{font-family:var(--mono);font-size:12px;line-height:1.6;color:var(--dim)}
.eyebrow-gap{display:flex;flex-direction:column;gap:20px}

/* links */
.prose a,a.u{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:var(--dim)}
.prose a:hover,.prose a:focus-visible,a.u:hover,a.u:focus-visible{text-decoration-thickness:2px;text-decoration-color:var(--text-1)}
.prose a.nu,a.nu,.prose .ptabs a,.prose .pager a,.prose .crumbs a,.prose .docmenu a,.prose .contents a,.prose .toc a,.prose .sidebar a,.prose .card > a.stack{text-decoration:none}
.go{font-family:var(--mono);font-size:14px;border-bottom:1px solid var(--line-4);padding-bottom:2px;white-space:nowrap}
.go:hover{border-color:var(--text-1)}
.icode{font-family:var(--mono);font-size:14px;color:var(--text-0);background:var(--code-inline);padding:2px 6px;border-radius:var(--r-sm)}

/* buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:0 18px;border-radius:var(--r-sm);font-family:var(--mono);font-size:14px;white-space:nowrap;cursor:pointer}
.btn-1{background:var(--text-1);color:var(--bg);font-weight:500;border:0}
.btn-1:hover{color:var(--bg);background:#fff}
.btn-2{border:1px solid var(--line-4);color:var(--text-1);background:none}
.btn-2:hover{border-color:var(--text-3)}
.copy{min-height:30px;padding:0 10px;background:none;border:1px solid var(--line-3);border-radius:var(--r-sm);color:var(--text-3);font-family:var(--mono);font-size:12px;cursor:pointer}
.copy:hover{border-color:var(--line-4);color:var(--text-1)}

/* header */
.hdr{display:flex;flex-wrap:wrap;align-items:center;gap:12px 32px;padding:16px var(--gutter);border-bottom:1px solid var(--line-1)}
.hdr .logo{display:flex;align-items:center;gap:10px;font-family:var(--mono);font-size:17px;font-weight:500;letter-spacing:-.01em;color:var(--text-0)}
.hdr nav{flex:1 1 auto;display:flex;flex-wrap:wrap;align-items:center;gap:4px 28px;font-family:var(--mono);font-size:14px}
.hdr nav a{color:var(--text-3)}
.hdr nav a[aria-current]{color:var(--text-0);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:6px}
.hdr .find{display:flex;align-items:center;gap:10px;min-height:38px;width:260px;padding:0 12px;background:#141413;border:1px solid var(--field);border-radius:var(--r-sm);color:var(--dim);font-family:var(--mono);font-size:13px}
.hdr .find input{flex:1;min-width:0;min-height:34px;background:none;border:0;color:var(--text-1);font-family:var(--mono);font-size:13px}
.hdr .gh{font-family:var(--mono);font-size:14px;color:var(--text-3)}
.hdr .find-link{display:none}
/* six links, the search and github fit one line down to the phone layout */
@media (max-width:1179px) and (min-width:900px){.hdr{gap:12px 24px}.hdr nav{gap:4px 20px}.hdr .find{width:200px}}
@media (max-width:959px) and (min-width:900px){.hdr .find{display:none}.hdr .find-link{display:inline}}
/* the field's border is its focus ring: 2px in --text-1 (1px border plus
   1px inset), at 16:1 against the page, without moving anything */
.hdr .find input:focus-visible{outline:none}
.hdr .find:focus-within{border-color:var(--text-1);box-shadow:inset 0 0 0 1px var(--text-1);color:var(--text-3)}

/* footer */
.ftr{border-top:1px solid var(--line-1);padding:56px var(--gutter) 32px;display:flex;flex-direction:column;gap:48px}
.ftr .cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:32px;font-size:14.5px}
.ftr .cols div{display:flex;flex-direction:column;gap:10px}
.ftr .cols a{color:var(--text-3)}
.ftr .base{display:flex;flex-wrap:wrap;justify-content:space-between;gap:12px;padding-top:24px;border-top:1px solid var(--line-1);font-family:var(--mono);font-size:12px;color:var(--dim)}

/* cards and rows */
.card{display:flex;flex-direction:column;gap:12px;padding:24px;background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r-md)}
a.card:hover{border-color:var(--line-4);color:var(--text-1)}
a.card:hover .h3,a.card:hover .h4{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px}
.cells{display:grid;border-top:1px solid var(--line-2);border-left:1px solid var(--line-2)}
.cells > *{padding:32px;border-right:1px solid var(--line-2);border-bottom:1px solid var(--line-2)}
.rows{list-style:none;margin:0;padding:0;border-top:1px solid var(--line-2)}
.rows > li{border-bottom:1px solid var(--line-2)}
.row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 24px;padding:20px 0;align-items:baseline}
.row.meta{grid-template-columns:var(--meta-w,110px) minmax(0,1fr)}
.grid-auto{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(240px,100%),1fr));gap:12px}

/* glyphs */
.glyph{display:inline-block;min-width:1em;font-size:inherit;line-height:1}
.glyph-row{display:flex;justify-content:space-between;align-items:flex-start;height:32px}

/* code */
.code{margin:0;background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r-md);overflow:hidden}
.code figcaption{display:flex;justify-content:space-between;align-items:center;gap:12px;min-height:38px;padding:4px 6px 4px 18px;border-bottom:1px solid var(--line-1);font-family:var(--mono);font-size:12px;color:var(--dim)}
.code figcaption .note{padding-right:12px}
.code figcaption > *{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.code figcaption > :first-child{min-width:0}
.code figcaption > a,.code figcaption > button{flex:none;overflow:visible}
.code pre{padding:18px;font-size:13.5px;line-height:1.7;color:var(--text-2);overflow-x:auto}
.out{display:flex;gap:14px;padding:14px 18px;border-top:1px dashed #2a2927;background:#0f0f0e;font-family:var(--mono);font-size:13.5px;line-height:1.7;overflow-x:auto}
.out > span{flex:none;color:var(--dim);font-size:12px;line-height:23px}
.code .out pre{padding:0;overflow:visible;color:var(--text-2);font-size:13.5px;line-height:1.7}
/* code: OCaml's tokens, as gen/highlight.ml classes them, and as odoc
   classes them in signatures. Each colour
   reads at 7:1 or more on --surface, and the comments' at 5.4:1. */
.hl-k,.spec .keyword{color:#f0a46b}
.hl-b{color:var(--text-0);font-weight:500}
.hl-m,.spec .constructor,.spec .exception{color:#85b8e6}
.hl-s{color:#a6d189}
.hl-n{color:#d3a6f0}
.hl-l,.spec .label,.spec .optlabel{color:#e6c86e}
.hl-t,.spec .type-var{color:#7fd3c4}
.hl-o,.spec .arrow{color:var(--text-3)}
.hl-c{color:var(--dim)}

/* tables */
.scroll{overflow-x:auto;border:1px solid var(--line-2);border-radius:var(--r-md)}
.tbl{width:100%;border-collapse:collapse;font-size:15px;font-variant-numeric:tabular-nums}
.tbl th,.tbl td{padding:12px 16px;border-bottom:1px solid var(--line-1);text-align:right;vertical-align:top}
.tbl thead th{font-family:var(--mono);font-size:12px;font-weight:400;color:var(--dim);border-bottom:1px solid var(--line-2)}
.tbl th[scope=row],.tbl thead th:first-child{text-align:left}
.tbl th[scope=row]{font-weight:400;color:var(--text-2);position:sticky;left:0;background:var(--bg)}
.tbl td{color:var(--text-2)}
.tbl td.hi{color:var(--text-0);font-weight:500}
.tbl tr:last-child > *{border-bottom:0}
.note-line{max-width:680px}

/* breadcrumb, pager, tabs */
.crumbs{font-family:var(--mono);font-size:13px;color:var(--dim)}
.crumbs a{color:var(--text-3)}
.pager{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(240px,100%),1fr));gap:12px;margin-top:32px;padding-top:28px;border-top:1px solid var(--line-2)}
.pager a{display:flex;flex-direction:column;gap:4px;padding:18px 20px;border:1px solid var(--line-2);border-radius:var(--r-md)}
.pager a:hover{border-color:var(--line-4)}
.pager a.next{text-align:right}
.ptabs{display:flex;flex-wrap:nowrap;overflow-x:auto;gap:24px;border-bottom:1px solid var(--line-2);font-family:var(--mono);font-size:14px}
.ptabs a{display:inline-flex;align-items:center;min-height:44px;color:var(--text-3);white-space:nowrap}
.ptabs a[aria-current]{color:var(--text-0);box-shadow:inset 0 -2px 0 var(--text-1)}

/* docs shell */
.docs{display:grid;grid-template-columns:220px minmax(0,720px) 200px;gap:40px;padding:40px var(--gutter) 96px;align-items:start}
.sidebar{display:flex;flex-direction:column;gap:28px;font-size:14px;position:sticky;top:16px}
/* The sidebar and the rail scroll on their own when taller than the window. */
.docs > .sidebar,.docs > .rail{max-height:calc(100vh - 32px);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--line-3) transparent}
.docs > .sidebar{margin-left:-12px;padding:0 8px 16px 12px}
.sidebar .group{display:flex;flex-direction:column}
.sidebar a{display:grid;grid-template-columns:22px 1fr;align-items:baseline;padding:5px 0;color:var(--text-3)}
.sidebar a.sub{display:block;padding:4px 0 4px 22px}
.sidebar a.subm{display:block;padding:4px 0 4px 22px;font-family:var(--mono);font-size:13px}
.sidebar a[aria-current]{color:var(--text-0);font-weight:500}
.sidebar .lib{font-family:var(--mono)}
.sidebar .open{display:flex;flex-direction:column;margin:2px 0 6px -11px;padding:6px 0 8px 10px;border-left:1px solid var(--line-4)}
.rail{display:flex;flex-direction:column;gap:28px;font-size:14px;position:sticky;top:16px}
.toc{display:flex;flex-direction:column;border-left:1px solid var(--line-2)}
.toc a{padding:5px 0 5px 16px;color:var(--text-3)}
.facts{display:flex;flex-direction:column;gap:2px;margin:0;font-family:var(--mono);font-size:13px}
.facts dt{color:var(--dim)}.facts dt:not(:first-child){margin-top:12px}.facts dd{margin:0;color:var(--text-2)}
.facts dd a{white-space:nowrap}
@media (max-width:899px){.facts{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:6px 20px}.facts dt:not(:first-child){margin-top:0}}
.docmenu{display:none}
.article{display:flex;flex-direction:column;gap:20px;min-width:0}

/* charts (validated pair: raven #3987e5, reference #d95926) */
.bars{list-style:none;margin:0;padding:0;border-top:1px solid var(--line-2)}
.bars > li{display:flex;flex-direction:column;gap:8px;padding:18px 0;border-bottom:1px solid var(--line-2)}
.bar{display:grid;grid-template-columns:120px minmax(0,1fr) 120px;align-items:center;gap:12px}
.bar .track{height:12px;background:var(--code-inline);border-radius:0 4px 4px 0}
.bar .fill{height:12px;border-radius:0 4px 4px 0}
.bar .v{font-family:var(--mono);font-size:13px;color:var(--text-0);text-align:right}
.bar .who{font-family:var(--mono);font-size:12px;color:var(--text-3)}
.state{display:inline-flex;align-items:center;gap:8px;font-family:var(--mono);font-size:12px;color:var(--text-3)}

@media (prefers-reduced-motion:no-preference){.wing{transform-origin:72% 40%;transform-box:fill-box;animation:flap 1.4s ease-in-out .3s 1 both}}
@keyframes flap{0%,100%{transform:rotate(0deg)}50%{transform:rotate(-9deg)}}
@media (pointer:coarse){.t,.hdr nav a,.sidebar a,.toc a{min-height:44px;display:inline-flex;align-items:center}}

@media (max-width:899px){
  :root{--gutter:16px}
  .hdr{gap:8px 20px}
  .hdr nav{order:3;flex-basis:100%;gap:4px 20px}
  .hdr .find{display:none}
  .hdr .find-link{display:inline}
  .docs{grid-template-columns:minmax(0,1fr);padding-top:24px}
  .docs > .sidebar,.docs > .rail{display:none}
  .docmenu{display:block;border:1px solid var(--line-2);border-radius:var(--r-md);background:var(--surface)}
  .docmenu summary{min-height:44px;display:flex;align-items:center;padding:0 16px;font-family:var(--mono);font-size:14px;color:var(--text-1);cursor:pointer}
  .docmenu .sidebar{position:static;padding:4px 16px 16px}
  .pagemenu .toc{margin:4px 16px 16px;max-height:60vh;overflow-y:auto}
  .pagemenu .toc > .label{display:none}
  .cells > *{padding:24px}
}
@media (max-width:600px){
  .bar{grid-template-columns:1fr auto;gap:4px 12px}
  .bar .track{grid-column:1 / -1;grid-row:2}
  .row.meta{grid-template-columns:minmax(0,1fr)}
  .hide-sm{display:none}
}
.phone-only{display:none}
@media (max-width:899px){.phone-only{display:block}}

/* the font stacks reach the runic subset for the library glyphs */
:root{--mono:'Geist Mono',Runes,ui-monospace,SFMono-Regular,Menlo,monospace;--sans:Geist,Runes,ui-sans-serif,system-ui,-apple-system,sans-serif}
html{background:var(--bg);color-scheme:dark}
p{margin:0}
[hidden]{display:none !important}
.dim{color:var(--dim)}
.amber{color:var(--amber)}
.links{display:flex;flex-wrap:wrap;gap:12px 28px}

/* header search form on one line with the rest */
.hdr form{margin:0}
.hdr .logo svg{flex:none}

/* footer */
.ftr-top{display:flex;flex-wrap:wrap;gap:48px;justify-content:space-between}
.ftr-brand{flex:1 1 240px;display:flex;flex-direction:column;gap:12px}
.ftr-brand .mono{font-size:17px;font-weight:500;color:var(--text-0)}
.ftr-brand .small{max-width:22em}
.ftr .cols{flex:2 1 520px}
.ftr-glyphs{letter-spacing:.4em}

/* hero: the header and the whole hero fit a laptop's screen, 1280 by 720
   and up */
.hero-split{display:flex;flex-wrap:wrap;gap:48px 56px;align-items:center;padding-top:clamp(32px,4vw,56px);padding-bottom:clamp(40px,4.5vw,64px)}
/* Without JS the code panels stack, taller than the screen: the text stays at the top beside them. */
html:not(.js) .hero-split{align-items:flex-start}
.hero-text{display:flex;flex-direction:column;flex:1 1 440px;min-width:0;gap:24px}
.hero-text .display{font-size:clamp(40px,3.7vw,52px)}
.install-row{display:flex;flex-wrap:wrap;align-items:center;gap:12px 24px}
.install{display:flex;align-items:center;gap:4px;min-height:48px;padding:0 6px 0 18px;background:var(--surface);border:1px solid var(--line-3);border-radius:var(--r-sm);font-family:var(--mono);font-size:15px}
.install .dim{margin-right:8px}
.install code{color:var(--text-0);margin-right:12px}
.install .copy{min-height:36px}
.setup{align-self:flex-start;color:var(--text-3)}

/* code tabs: a card with the tab list on top and a caption below. Without
   JS, each panel shows under its own heading. */
.tabs{flex:1.3 1 480px;min-width:0;background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r-md);overflow:hidden}
[role=tablist]{display:flex;overflow-x:auto;border-bottom:1px solid var(--line-2);padding:0 8px}
[role=tab]{display:flex;align-items:center;gap:7px;min-height:46px;padding:0 10px;background:none;border:0;color:var(--dim);font-family:var(--mono);font-size:14px;cursor:pointer;white-space:nowrap}
[role=tab][aria-selected=true]{box-shadow:inset 0 -2px 0 var(--text-1);color:var(--text-0)}
[role=tab][aria-selected=false] .glyph{color:inherit !important}
[role=tab]:focus-visible{outline-offset:-2px}
.panel + .panel{border-top:1px solid var(--line-2)}
.js .panel + .panel{border-top:0}
.panel-h{display:flex;align-items:center;gap:8px;min-height:46px;margin:0;padding:0 22px;border-bottom:1px solid var(--line-2);font-family:var(--mono);font-size:14px;font-weight:400;color:var(--text-0)}
.panel-code{padding:22px 20px;max-height:380px;overflow:auto;font-size:12.5px;line-height:1.7;color:var(--text-2)}
.js .panel-code{min-height:280px}
.panel-code:focus-visible{outline-offset:-2px}
.panel-foot{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:14px 20px;border-top:1px solid var(--line-1)}
.panel-foot a{color:var(--text-3);white-space:nowrap}
.js .panel.off{display:none}

/* counterparts */
.strip{display:flex;flex-wrap:wrap;align-items:center;gap:10px 28px;padding-top:22px;padding-bottom:22px;border-top:1px solid var(--line-1);font-family:var(--mono);font-size:13px}
.strip a.u{color:var(--text-3)}
.strip .go{margin-left:auto}

/* 01 */
.pipeline-row{display:flex;flex-wrap:wrap;gap:48px}
.pipeline{flex:1 1 380px}
.stage{display:grid;grid-template-columns:40px 88px 1fr;align-items:baseline;gap:12px;padding:18px 0}
.stage .mono{font-size:15px}
.stage span:last-child{color:var(--text-3)}
.step{flex:1.4 1 520px;min-width:0}
.code figcaption .note{color:var(--text-3)}
.stats{grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr))}
.stat{display:flex;flex-direction:column;gap:10px}
.stat-big{font-size:44px;line-height:1;letter-spacing:-.03em;font-weight:500;color:var(--text-0)}
.stat-foot{margin-top:auto;padding-top:8px;display:flex;justify-content:space-between;gap:12px}
.stat-foot a{color:var(--text-3)}

/* 02 */
.groups{border-top:1px solid var(--line-2)}
.group-row{display:flex;flex-wrap:wrap;gap:16px 32px;padding:32px 0;border-bottom:1px solid var(--line-2)}
.group-title{flex:0 0 200px;padding-top:6px}
.group-row .grid-auto{flex:1 1 600px;min-width:0}
.card.lib{min-height:168px}
.small-rune{transform:scale(1.6)}
/* A group of four fills one row on wide screens and two below, so none is left alone on a row. */
@media (min-width:1180px){.group-row .grid-auto.four{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media (min-width:601px) and (max-width:1179px){.group-row .grid-auto.four{grid-template-columns:repeat(2,minmax(0,1fr))}}
/* On phones the cards become rows: glyph, name, and what it is. */
@media (max-width:600px){
  .group-row{padding:24px 0}
  .group-row .grid-auto{gap:8px}
  .card.lib{min-height:0;flex-direction:row;align-items:flex-start;gap:14px;padding:14px 16px}
  .card.lib .glyph-row{height:auto;flex:0 0 22px;justify-content:center;padding-top:2px}
  .card.lib .glyph-row .caption{display:none}
  .card.lib .lib-glyph{font-size:20px}
  .card.lib .stack{gap:2px !important}
}
.lib-glyph{font-size:30px;line-height:1}
.card.lib .h4{font-size:17px}
.contrib{display:flex;align-items:baseline;gap:14px;padding:18px 22px;border:1px dashed var(--line-3);border-radius:var(--r-md)}
.contrib .mono{color:var(--text-0)}
.contrib .small{font-size:14px}

/* 03 */
.points{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:48px 40px}
.point{display:flex;flex-direction:column;gap:16px;padding-top:24px;border-top:1px solid var(--line-4)}
.point .body{color:var(--text-3)}

/* 04 */
.learn-cells{grid-template-columns:repeat(auto-fit,minmax(min(340px,100%),1fr))}
.learn{display:flex;flex-direction:column;gap:12px;min-height:200px}

/* timeline: one line through every step, a dot on it per step;
   vertical on phones */
.timeline{position:relative;list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0 32px}
.timeline::before{content:"";position:absolute;left:5px;right:0;top:5px;height:1px;background:var(--line-4)}
.milestone{position:relative;display:flex;flex-direction:column;gap:14px;padding-top:36px}
.dot{position:absolute;top:0;left:0;width:11px;height:11px;border-radius:50%}
.past .dot{background:#4a4944}
.now .dot{background:var(--amber);box-shadow:0 0 0 5px var(--amber-ring)}
.next .dot{background:var(--bg);border:1px solid var(--dim)}
.now .label{color:var(--amber)}
.milestone .go{align-self:flex-start}
@media (max-width:899px){
  .timeline{grid-template-columns:minmax(0,1fr);gap:36px}
  .timeline::before{left:5px;right:auto;top:6px;bottom:6px;width:1px;height:auto}
  .milestone{padding-top:0;padding-left:32px}
  .dot{top:5px}
}

/* the on-this-page rail stays in view */
.rail{align-self:start}

/* 06 */
.blog-support{display:flex;flex-wrap:wrap;gap:64px}
.blog{flex:1.3 1 480px;min-width:0}
.support{flex:1 1 360px;min-width:0;gap:24px;padding:36px;align-self:flex-start}
.support .h3{text-wrap:balance}
.sponsors{display:flex;flex-direction:column;gap:10px;padding:18px 0;border-top:1px solid var(--line-2);border-bottom:1px solid var(--line-2)}
.sponsors .h4{display:flex;flex-wrap:wrap;gap:8px 28px;font-size:18px}
.sponsors .past{font-size:16px;font-weight:400}
.support .links{gap:12px}

/* testimonials: the label in the groups' left column, the quote beside it */
.testimonial{display:grid;grid-template-columns:200px minmax(0,1fr);gap:20px 32px;margin:0}
.testimonial + .testimonial{margin-top:64px;padding-top:64px;border-top:1px solid var(--line-2)}
.testimonial > .label{padding-top:10px}
.testimonial-body{display:flex;flex-direction:column;gap:32px;max-width:52rem}
.testimonial blockquote{display:flex;flex-direction:column;gap:18px;margin:0}
.testimonial blockquote p{max-width:40rem;font-size:18px;line-height:1.6;color:var(--text-2);text-wrap:pretty}
.testimonial .quote-lead{max-width:none;font-size:clamp(24px,2.5vw,32px);line-height:1.3;letter-spacing:-.018em;font-weight:500;color:var(--text-0);text-wrap:pretty}
.testimonial .open{display:inline-block;margin-left:-.5em;width:.5em;color:var(--amber)}
.testimonial figcaption{display:flex;align-items:flex-start;gap:16px}
.testimonial .dash{flex:none;width:32px;height:1px;margin-top:12px;background:var(--line-4)}
.testimonial .who{display:flex;flex-direction:column;gap:4px}
.testimonial .who a{font-size:17px;font-weight:500;color:var(--text-0)}
@media (max-width:899px){.testimonial{grid-template-columns:minmax(0,1fr)}.testimonial > .label{padding-top:0}.testimonial .open{margin-left:0;width:auto}}

/* source lines: which file a page is written from, and its edit link */
.editline{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px 24px;margin:0}
.editline a{color:var(--text-3)}

/* roadmap milestones: title and text, the status beside them; stacked on
   phones */
.ms{display:grid;grid-template-columns:minmax(0,1fr) 110px;grid-template-areas:"t s" "d s";gap:4px 24px;padding:16px 0}
.ms > h3{grid-area:t}
.ms-st{grid-area:s;justify-self:end;padding-top:3px}
.ms-d{grid-area:d}
@media (max-width:600px){.ms{grid-template-columns:minmax(0,1fr);grid-template-areas:"t" "s" "d"}.ms-st{justify-self:start;padding:0}}

/* performance: the on-this-page rail hides on phones */
@media (max-width:899px){.pad[style*="200px"]{grid-template-columns:minmax(0,1fr) !important}.pad[style*="200px"] > .rail{display:none}}

/* blog posts */
.post-wrap{padding-top:var(--hero-top);padding-bottom:var(--section-y)}
.post-col{display:flex;flex-direction:column;max-width:1008px;margin:0 auto}
.post-head{display:flex;flex-direction:column;gap:20px;max-width:760px;padding-bottom:40px}
.post-note{margin:0;padding:14px 18px;color:var(--text-3)}
.post-grid{display:grid;grid-template-columns:minmax(0,760px) 200px;gap:48px}
.post-grid > .rail{padding-top:4px}
.post-grid .toc .label{padding-left:16px;margin-bottom:8px}
.post-body{display:flex;flex-direction:column;gap:20px;min-width:0;font-size:17px;line-height:1.65;color:var(--text-2)}
.post-body h2.h2-doc{margin-top:28px}

/* rendered Markdown: posts and the docs (gen/markdown.ml) */
.md > *{margin:0}
.md > h2.h2-doc{margin-top:28px}
.md h3{margin:12px 0 0;font-size:20px;line-height:1.3;font-weight:500;color:var(--text-0)}
.md h4{margin:8px 0 0;font-size:17px;font-weight:500;color:var(--text-0)}
.md strong{font-weight:500;color:var(--text-0)}
.md ul:not(.rows),.md ol:not(.rows){display:flex;flex-direction:column;gap:10px;padding-left:20px}
.md li > ul,.md li > ol{margin-top:10px}
.md li::marker{color:var(--dim)}
.md code{font-family:var(--mono);font-size:.86em;color:var(--text-0);background:var(--code-inline);padding:2px 6px;border-radius:var(--r-sm)}
.md code,.md a{overflow-wrap:anywhere}
.md pre code{background:none;padding:0;font-size:inherit;color:inherit}
.md blockquote{margin:0;padding-left:18px;border-left:2px solid var(--line-4);color:var(--text-3)}
.md table{display:block;overflow-x:auto;border-collapse:collapse;font-size:15px;font-variant-numeric:tabular-nums;border:1px solid var(--line-2);border-radius:var(--r-md)}
.md th,.md td{padding:10px 16px;border-bottom:1px solid var(--line-1);text-align:left;vertical-align:top}
.md thead th{font-family:var(--mono);font-size:12px;font-weight:400;color:var(--dim);border-bottom:1px solid var(--line-2)}
.md tr:last-child > *{border-bottom:0}
.md img{max-width:100%;height:auto}
.md hr{border:0;border-top:1px solid var(--line-2)}
.md .code > pre + pre,.md .code > .out + pre{border-top:1px solid var(--line-1)}
.hl-p{color:var(--dim);user-select:none}
.article.md{color:var(--text-2)}
.article.md > p:not([class]),.article.md > ul:not(.rows),.article.md > ol:not(.rows),.article.md > blockquote{max-width:36rem}
.libhead{display:flex;align-items:center;gap:20px}
.libmark{display:grid;place-items:center;flex:none;width:64px;height:64px;border:1px solid var(--line-3);border-radius:var(--r-md);background:var(--surface);font-size:34px}
.libmark .glyph{min-width:0;line-height:1}
.exrow{--meta-w:15rem;padding:14px 0}
@media (max-width:599px){.exrow{grid-template-columns:minmax(0,1fr)}}
.post-support{flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:20px;margin-top:24px;padding:28px 32px}
.post-support .h4{font-size:18px}
@media (max-width:899px){.post-grid{grid-template-columns:minmax(0,1fr)}.post-grid > .rail{display:none}.post-support{padding:20px}}

/* the docs landing's library index: a row per library, grouped */
.libindex{display:flex;flex-direction:column;border-top:1px solid var(--line-2)}
.libgroup{display:flex;flex-direction:column;gap:4px;padding:16px 0;border-bottom:1px solid var(--line-2)}
.libgroup > .label{padding-top:4px}
.libgroup ul{list-style:none;margin:0;padding:0}
.librow{display:grid;grid-template-columns:24px 80px minmax(0,1fr) 150px 170px;align-items:baseline;gap:4px 16px;padding:10px 12px;margin:0 -12px;border-radius:var(--r-sm)}
.librow:hover{background:var(--surface)}
.librow .glyph{font-size:18px}
.librow-name{color:var(--text-0);font-size:15px}
.librow-about{font-size:15px;line-height:1.45;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.librow-count{text-align:right;white-space:nowrap}
@media (max-width:1099px){.librow{grid-template-columns:24px 80px minmax(0,1fr) 170px}.librow-like{display:none}}
@media (max-width:899px){
  .librow{grid-template-columns:24px minmax(0,1fr) auto;grid-template-areas:"g n c" ". a a"}
  .librow .glyph{grid-area:g}.librow-name{grid-area:n}.librow-count{grid-area:c}.librow-about{grid-area:a;white-space:normal}
}

/* the API reference: odoc's markup (gen/api.ml) */
.api{display:flex;flex-direction:column;gap:20px;min-width:0;overflow-wrap:anywhere}
.api > *{margin:0}
.api > p,.api > ul:not(.rows):not(.modules),.api > ol,.spec-doc > p,.spec-doc > ul,.spec-doc > ol{max-width:36rem}
.api > h2.h2-doc{margin-top:28px}
.api .h3-doc{margin:12px 0 0;font-size:20px;line-height:1.3;font-weight:500;color:var(--text-0)}
.api-title{overflow-wrap:anywhere}
.odoc-spec{display:flex;flex-direction:column;gap:12px;padding:20px 0;border-bottom:1px solid var(--line-1)}
.api > .odoc-spec + .odoc-spec{margin-top:-20px}
.spec{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:0 12px;padding:12px 8px 12px 16px;background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r-sm);font-family:var(--mono);font-size:13.5px;line-height:1.6;color:var(--text-2);scroll-margin-top:16px}
.spec > *{grid-column:1}
.api .spec code{font:inherit;color:inherit;background:none;padding:0;white-space:pre-wrap;overflow-wrap:anywhere}
.api .spec a:not(.anchor){color:var(--text-1);text-decoration:none}
.api .spec a:not(.anchor):hover{text-decoration:underline;text-underline-offset:3px}
.api a.anchor{display:inline-flex;align-items:center;justify-content:center;min-width:24px;min-height:24px;font-size:12px;color:var(--dim);text-decoration:none}
.api a.anchor:hover{color:var(--text-1)}
.spec > a.anchor{grid-column:2;grid-row:1}
.api .spec ol{display:block;list-style:none;margin:2px 0;padding:0 0 0 2ch}
.api .spec li{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:0 12px;scroll-margin-top:16px}
.api .spec li > *{grid-column:1}
.api .spec li > a.anchor{grid-column:2;grid-row:1;opacity:0}
.api .spec li:hover > a.anchor,.api .spec li > a.anchor:focus-visible,.api .spec li:target > a.anchor{opacity:1}
.def-doc{padding:0 0 6px 2ch;font-family:var(--sans);font-size:14px;line-height:1.55;color:var(--text-3)}
.def-doc .comment-delim{display:none}
.def-doc > *{margin:0}
.spec-doc{display:flex;flex-direction:column;gap:12px;min-width:0}
.spec-doc > *{margin:0}
.spec:target,.api .spec li:target{border-color:var(--line-4)}
.api ul.modules{display:flex;flex-direction:column;gap:0;list-style:none;margin:0;padding:0;border-top:1px solid var(--line-2)}
.api ul.modules > li{display:grid;grid-template-columns:minmax(0,14rem) minmax(0,1fr);gap:4px 24px;padding:10px 0;border-bottom:1px solid var(--line-2)}
.api ul.modules .synopsis{font-size:15px;color:var(--text-3)}
.api .xref-unresolved{color:var(--text-1)}
.api .odoc-include > details > summary{cursor:pointer;list-style:none}
.api .odoc-include > details > summary::-webkit-details-marker{display:none}
.apirow{display:grid;grid-template-columns:minmax(0,10rem) minmax(0,13rem) minmax(0,1fr);gap:4px 24px;align-items:baseline;padding:12px 0}
.apirow.apihead{padding:8px 0}
@media (max-width:599px){.api ul.modules > li,.apirow{grid-template-columns:minmax(0,1fr)}.apirow.apihead{display:none}}
.toc a.sub{padding:3px 0 3px 28px;font-size:13px}

/* the index, A to Z (pages/search.html, the index slot) */
.azfield{display:flex;align-items:center;gap:12px;min-height:52px;padding:0 16px;background:#141413;border:1px solid var(--field);border-radius:var(--r-sm)}
.azfield:focus-within{border-color:var(--text-1);box-shadow:inset 0 0 0 1px var(--text-1)}
.azfield input{flex:1;min-width:0;min-height:40px;background:none;border:0;color:var(--text-1);font-family:var(--mono);font-size:15px}
.azfield input:focus-visible{outline:none}
.azgroup{display:flex;flex-wrap:wrap;gap:8px 32px;padding:24px 0;border-bottom:1px solid var(--line-2)}
.azletter{flex:0 0 64px;margin:0;font-size:22px;font-weight:500;color:var(--text-0)}
.azlist{flex:1 1 600px;min-width:0;list-style:none;margin:0;padding:0;columns:2 340px;column-gap:32px}
.azlist > li{break-inside:avoid}
.azresults{padding:16px 0}
.azitem{display:grid;grid-template-columns:22px minmax(0,1fr);gap:2px 10px;padding:10px 0}
.azglyph{font-size:15px;line-height:1.5}
.az-name{color:var(--text-0);overflow-wrap:anywhere}
.az-path{color:var(--text-3)}
.azitem:hover .az-name,.azitem:focus-visible .az-name{text-decoration:underline;text-underline-offset:3px}
.azitem .small{font-size:14px}

/* the community page, and its strip on the landing page */
.projects{grid-template-columns:repeat(auto-fit,minmax(min(420px,100%),1fr))}
.projects > :last-child:nth-child(odd){grid-column:1/-1}
.proj{display:flex;flex-direction:column;gap:16px;min-width:0}
.proj-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px 16px}
.proj-head .h3{font-size:24px}
.proj > .small{max-width:36rem;margin:0}
.proj-ref{margin:0}
.proj-ref a{color:var(--text-2)}
.proj-foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 16px;margin-top:auto;padding-top:8px}
.uses{display:flex;flex-wrap:wrap;gap:8px;list-style:none;margin:0;padding:0}
.uses a{display:inline-flex;align-items:center;gap:6px;min-height:28px;padding:0 10px;border:1px solid var(--line-2);border-radius:999px;font-family:var(--mono);font-size:13px;color:var(--text-2)}
.uses a:hover{border-color:var(--line-4);color:var(--text-0)}
.uses .glyph:empty{display:none}
.inuse{display:flex;flex-direction:column;gap:14px;padding-top:28px;border-top:1px solid var(--line-2)}
.inuse > .caption{margin:0}
.inuse-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:6px 32px;list-style:none;margin:0;padding:0}
.inuse-list li{display:flex;flex-direction:column;gap:2px;padding:6px 0}
.inuse-list .small{font-size:15px}
.testimonial .quote-long{font-size:clamp(20px,1.9vw,24px);line-height:1.45;letter-spacing:-.01em}
