@import"https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600&family=IBM+Plex+Mono:wght@400;500;600&family=Departure+Mono&display=swap";:root{--paper: #fbfaf6;--paper-dim: #f1efe9;--ink: #221f1b;--ink-soft: #4a453d;--rule: #b7b7ae;--mustard: #d9a441;--mustard-dim: #f0cd80;--lavender: #8c6fcf;--lavender-dim: #c9b8ec;--max-w: 42rem}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--paper);color:var(--ink);font-family:IBM Plex Mono,monospace;font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased}@media (prefers-reduced-motion: reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}}a{color:var(--lavender);text-decoration-thickness:1px;text-underline-offset:3px}a:hover{color:var(--mustard)}a:focus-visible,button:focus-visible{outline:2px solid var(--mustard);outline-offset:3px}h1,h2,h3{font-family:Fraunces,serif;font-weight:500;line-height:1.2;margin:0 0 .5em;letter-spacing:-.01em}h1{font-size:clamp(2rem,6vw,2.9rem);font-weight:600}h2{font-size:1.5rem}h3{font-size:1.1rem;font-family:IBM Plex Mono,monospace;font-weight:600}p{margin:0 0 1.1em;max-width:38rem}.wrap{max-width:var(--max-w);margin:0 auto;padding:0 1.5rem}nav.site-nav{border-bottom:1px solid var(--rule);padding:1.1rem 0}nav.site-nav .wrap{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;flex-wrap:wrap}nav.site-nav .brand{font-family:Fraunces,serif;font-weight:600;font-size:1.1rem;color:var(--ink);text-decoration:none}nav.site-nav ul{list-style:none;display:flex;gap:1.4rem;margin:0;padding:0;font-size:.92rem}nav.site-nav a{text-decoration:none;color:var(--ink-soft)}nav.site-nav a:hover{color:var(--mustard)}nav.site-nav a[aria-current=page]{color:var(--lavender)}.hero{padding:3.5rem 0 2.5rem}.hero .kicker{font-size:.85rem;color:var(--ink-soft);margin-bottom:.9rem}.hero p.lede{font-size:1.05rem;color:var(--ink-soft);max-width:36rem}.screen{margin:2.5rem 0;border:1px solid var(--ink);border-top:3px solid var(--mustard);background:#fdfcf9;padding:2.2rem 1.6rem;display:flex;align-items:center;justify-content:center;min-height:6.5rem;position:relative;cursor:pointer;overflow:visible;transition:background .15s ease}.screen:before{content:"eink display, live";position:absolute;top:-.75rem;left:.8rem;background:var(--paper);padding:0 .45rem;font-family:IBM Plex Mono,monospace;font-size:.68rem;line-height:1.4;letter-spacing:.01em;color:var(--lavender);white-space:nowrap;z-index:2}.screen:after{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(34,31,27,.025) 3px);transition:opacity .15s ease;z-index:1}.screen:hover{background:var(--paper-dim)}.screen:active{background:#f7f5ef}.screen-text{font-family:Departure Mono,IBM Plex Mono,monospace;font-size:1.1rem;letter-spacing:.02em;line-height:1.4;text-align:center;color:var(--ink);white-space:pre-line;position:relative;z-index:2;transition:opacity .2s ease}.screen-text.eink-refresh{opacity:.08}.screen:has(.eink-refresh):after{opacity:1}.screen::selection,.screen-text::selection{background:transparent}@media (prefers-reduced-motion: reduce){.screen-text{transition:none}.screen:after{transition:none}}.divider{text-align:center;color:var(--rule);margin:3rem 0;font-size:1rem}.divider-icon{width:1.1rem;height:auto;display:inline-block}section.block{padding:2.2rem 0;border-bottom:1px solid var(--rule)}section.block:last-of-type{border-bottom:none}.tag{display:inline-block;border:1px solid var(--lavender);color:var(--lavender);font-size:.75rem;padding:.15rem .5rem;margin-bottom:.8rem}.reference{border:1px solid var(--rule);border-top:2px solid var(--lavender);padding:1.2rem 1.3rem;margin:1.2rem 0;background:var(--paper-dim)}.reference h3{margin-bottom:.3rem}.reference .credit{font-size:.85rem;color:var(--ink-soft);margin-bottom:.6rem}.diagram-placeholder{border:1px dashed var(--rule);padding:2.2rem 1.3rem;margin:1.2rem 0;text-align:center;color:var(--ink-soft)}.diagram-placeholder p{max-width:none}.diagram-placeholder p:first-child{font-family:Fraunces,serif;font-size:1rem;margin-bottom:.5rem}.placeholder-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.8rem;margin:1.2rem 0}.placeholder-grid .diagram-placeholder{margin:0;padding:1.6rem .8rem}@media (max-width: 34rem){.placeholder-grid{grid-template-columns:1fr}}.step-image{width:100%;margin:1.2rem 0;display:block}pre{background:var(--ink);color:#efeae0;padding:1.2rem 1.3rem;overflow-x:auto;overflow-y:auto;max-height:32rem;font-size:.82rem;line-height:1.55;border:1px solid var(--ink)}.code-block{position:relative}.copy-btn{position:absolute;top:.7rem;right:.7rem;background:var(--paper);border:1px solid var(--rule);color:var(--ink-soft);font-family:IBM Plex Mono,monospace;font-size:.75rem;padding:.3rem .65rem;cursor:pointer}.copy-btn:hover{border-color:var(--mustard);color:var(--mustard)}.copy-btn:focus-visible{outline:2px solid var(--lavender);outline-offset:2px}code{font-family:IBM Plex Mono,monospace}p code,li code{background:var(--paper-dim);padding:.1em .35em;font-size:.88em;border:1px solid var(--rule)}ol.steps{padding-left:1.4rem}ol.steps li{margin-bottom:.9rem}ul.plain{padding-left:1.2rem}ul.plain li{margin-bottom:.5rem}table.bom{width:100%;border-collapse:collapse;margin:1.2rem 0;font-size:.9rem}table.bom th,table.bom td{text-align:left;padding:.6rem .8rem;border-bottom:1px solid var(--rule)}table.bom th{font-family:IBM Plex Mono,monospace;font-weight:600;color:var(--ink-soft);font-size:.8rem}table.bom td:nth-child(2),table.bom td:nth-child(3),table.bom th:nth-child(2),table.bom th:nth-child(3){white-space:nowrap}@media (max-width: 30rem){table.bom{font-size:.8rem}table.bom th,table.bom td{padding:.5rem .4rem}}.note{border-left:2px solid var(--lavender);padding-left:1rem;color:var(--ink-soft);font-size:.93rem;margin:1.2rem 0}.btn{display:inline-block;border:1px solid var(--ink);color:var(--ink);text-decoration:none;padding:.6rem 1.1rem;font-size:.9rem;background:transparent}.btn:hover{background:var(--mustard);border-color:var(--mustard);color:var(--ink)}footer{padding:2.5rem 0 4rem;color:var(--ink-soft);font-size:.85rem}@media (max-width: 30rem){nav.site-nav ul{gap:1rem;font-size:.85rem}.screen{padding:1.6rem 1rem;margin-top:2.25rem}.screen:before{left:.65rem;font-size:.62rem}.screen-text{font-size:.95rem}}
