@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/fraunces-vietnamese-wght-normal.CnvboYUG.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/fraunces-latin-ext-wght-normal.Ca2vKHc0.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/fraunces-latin-wght-normal.ukD16Tqj.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Fraunces Variable;font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/fraunces-vietnamese-wght-italic.BicUS2cM.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Fraunces Variable;font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/fraunces-latin-ext-wght-italic.BfTTTDIL.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fraunces Variable;font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/fraunces-latin-wght-italic.Py8at3oI.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Outfit Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/outfit-latin-ext-wght-normal.DdQaqQDo.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Outfit Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/outfit-latin-wght-normal.Bc-8i84L.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff)format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff)format("woff")}:root{--paper:#efe6d4;--paper-2:#f7f1e4;--ink:#1c1712;--ink-soft:#5c5348;--line:#d9ccb6;--viewport:#141311;--viewport-2:#24211c;--filename:#f0c84b;--marker:#d83a2e;--marker-ink:#8d1d16;--cel:#0f6e78;--cel-soft:#d5eef0;--ok:#1c6b45;--bad:#9d2e24;--warn:#8a5a12;--shadow:4px 4px 0 var(--ink);--serif:"Fraunces Variable", "Iowan Old Style", Georgia, serif;--sans:"Outfit Variable", "Avenir Next", "Segoe UI", sans-serif;--mono:"IBM Plex Mono", ui-monospace, monospace;--wrap:1120px}*,:before,:after{box-sizing:border-box}[hidden]{display:none!important}html{scroll-behavior:smooth}body{color:var(--ink);background-color:var(--paper);font-family:var(--sans);background-image:radial-gradient(#1c17120b .7px,#0000 .7px);background-size:3px 3px;min-height:100vh;margin:0;font-size:1.05rem;line-height:1.5}img{max-width:100%}a{color:inherit}:focus-visible{outline:2px solid var(--cel);outline-offset:3px}::selection{background:var(--filename);color:var(--ink)}.skip{background:var(--filename);color:var(--ink);z-index:10;font-family:var(--mono);padding:.4rem .7rem;position:absolute;top:-3rem;left:.75rem}.skip:focus{top:.75rem}.sample-banner{background:var(--filename);color:var(--ink);font-family:var(--mono);text-align:center;padding:.55rem 1rem;font-size:.78rem;line-height:1.45}.sample-banner strong{font-weight:500}.site-header{background:var(--viewport);color:#f3ecdf}.file-tabs{font-family:var(--mono);border-bottom:1px solid #3a342c;gap:0;font-size:.72rem;display:flex;overflow:hidden}.file-tabs span{color:#9c9386;white-space:nowrap;border-right:1px solid #3a342c;padding:.45rem .85rem}.file-tabs .is-open{background:var(--viewport-2);color:var(--filename)}.bar{max-width:var(--wrap);justify-content:space-between;align-items:center;gap:1rem;margin:0 auto;padding:.85rem 1.25rem 1rem;display:flex}.logo{font-family:var(--mono);letter-spacing:-.03em;color:#f7f1e6;font-size:1.05rem;text-decoration:none}.logo em{color:var(--filename);font-style:normal}.nav{scrollbar-width:none;gap:.2rem;display:flex;overflow-x:auto}.nav a{font-family:var(--mono);color:#d9d0c2;white-space:nowrap;border-radius:999px;padding:.4rem .55rem;font-size:.78rem;text-decoration:none}.nav a[aria-current=page]{background:var(--filename);color:var(--ink)}.wrap{width:min(var(--wrap), calc(100% - 2rem));margin:0 auto}main{padding-bottom:4rem}.hero{grid-template-columns:1.3fr .9fr;align-items:end;gap:1.5rem;padding:2.2rem 0 1rem;display:grid}.kicker{font-family:var(--mono);letter-spacing:.04em;text-transform:uppercase;color:var(--marker-ink);margin:0 0 .6rem;font-size:.75rem}h1,h2,h3{font-family:var(--serif);letter-spacing:-.03em;margin:0;font-weight:560;line-height:1.02}.hero h1{max-width:11ch;font-size:clamp(2.7rem,6.4vw,5.3rem);font-weight:620}.lede{max-width:42rem;color:var(--ink);margin:1rem 0 0;font-size:1.15rem}.muted{color:var(--ink-soft)}.actions{flex-wrap:wrap;align-items:center;gap:.6rem;margin-top:1.3rem;display:flex}.btn{border:1px solid var(--ink);background:var(--ink);min-height:44px;color:var(--paper-2);font-family:var(--mono);cursor:pointer;border-radius:999px;justify-content:center;align-items:center;padding:.55rem 1rem;font-size:.82rem;text-decoration:none;display:inline-flex}.btn-primary{background:var(--marker);border-color:var(--marker);color:#fff}.btn-ghost{color:var(--ink);background:0 0}.btn[disabled],.btn[aria-disabled=true]{color:var(--ink-soft);cursor:not-allowed;background:0 0;border-style:dashed}.outliner{background:var(--viewport);color:#e7e0d4;border:1px solid var(--ink);box-shadow:var(--shadow);font-family:var(--mono);padding:.85rem .9rem 1rem;font-size:.78rem}.outliner header{color:#9c9386;letter-spacing:.08em;text-transform:uppercase;justify-content:space-between;margin-bottom:.55rem;font-size:.7rem;display:flex}.outliner ul{margin:0;padding:0;list-style:none}.outliner li{color:#c9c0b2;padding:.18rem 0 .18rem .9rem}.outliner .group{color:#f3ecdf;margin-top:.45rem;padding-left:0}.outliner .open{color:var(--filename);background:#3a3114;margin:.1rem -.4rem;padding-left:1.3rem}.stats{grid-template-columns:repeat(3,1fr);gap:.8rem;margin:1.4rem 0 .4rem;display:grid}.stat{border-top:1px solid var(--ink);padding-top:.45rem}.stat b{font-family:var(--mono);font-size:1.35rem;font-weight:500;display:block}.stat span{color:var(--ink-soft);font-size:.88rem}.section{margin-top:2.8rem}.section-head{justify-content:space-between;align-items:baseline;gap:1rem;margin-bottom:.9rem;display:flex}.section-head h2{font-size:clamp(1.8rem,3vw,2.5rem)}.section-head a{font-family:var(--mono);font-size:.78rem}.sheet-no{font-family:var(--mono);color:var(--ink-soft);font-size:.75rem}.grid-3,.tools-grid,.card-grid{grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:.9rem;display:grid}.card,.tool-card,.post-card,.product-card,.job,.panel{background:var(--paper-2);border:1px solid var(--ink)}.tool-card,.post-card,.product-card{flex-direction:column;min-height:100%;text-decoration:none;display:flex}.tool-card:hover,.post-card:hover,.product-card:hover{background:#fff}.mark{border-bottom:1px solid var(--ink);background:linear-gradient(145deg, hsl(var(--h) 48% 46%) 0 42%, transparent 42%), repeating-linear-gradient(-18deg, transparent 0 10px, #ffffff29 10px 11px), #201c18;height:88px}.card-body,.post-card,.product-card{padding:.85rem .9rem 1rem}.tool-card .card-body{flex-direction:column;flex:1;gap:.45rem;display:flex}.badges{flex-wrap:wrap;align-items:center;gap:.35rem;display:flex}.badge{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;border:1px solid var(--ink);padding:.12rem .35rem;font-size:.68rem}.badge-example{color:var(--marker-ink);border-color:var(--marker)}.badge-oss{background:var(--cel-soft);border-color:var(--cel);color:#08343a}.badge-sponsored{background:var(--ink);color:var(--paper)}.tape{background:var(--filename);color:var(--ink);font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;padding:.12rem .4rem;font-size:.68rem;display:inline-block;transform:rotate(-2deg)}.tool-card h3,.post-card h3,.product-card h3{margin-top:.15rem;font-size:1.55rem}.summary{color:var(--ink-soft);margin:0;font-size:.95rem}.price-row{font-family:var(--mono);flex-wrap:wrap;align-items:baseline;gap:.45rem .7rem;margin-top:auto;display:flex}.price-row .now{font-size:1.15rem}.price-row s{color:var(--ink-soft)}.price-row .off{color:var(--marker-ink)}.pills{flex-wrap:wrap;gap:.3rem;display:flex}.pill{font-family:var(--mono);border:1px solid var(--line);color:var(--ink-soft);padding:.08rem .32rem;font-size:.68rem}.pill.works{color:var(--ok);border-color:#b7d8c8}.pill.broken{color:var(--bad);border-color:#ecc4be}.pill.partial{color:var(--warn);border-color:#ead7b4}.filters{grid-template-columns:1.3fr repeat(5,minmax(0,1fr)) auto;align-items:end;gap:.55rem;margin:.4rem 0 1rem;display:grid}label.field{font-family:var(--mono);color:var(--ink-soft);flex-direction:column;gap:.25rem;font-size:.72rem;display:flex}input,select,textarea{font:inherit;color:var(--ink);border:1px solid var(--ink);background:#fff;border-radius:0;width:100%;min-height:44px;padding:.55rem .6rem;font-size:1rem}.checks{min-height:44px;font-family:var(--mono);align-items:center;gap:.8rem;font-size:.78rem;display:flex}.checks label{align-items:center;gap:.35rem;display:flex}.countline{font-family:var(--mono);color:var(--ink-soft);margin:0 0 .8rem;font-size:.8rem}.layout-tool{grid-template-columns:minmax(0,1.5fr) minmax(260px,.75fr);align-items:start;gap:1.2rem;display:grid}.buybox{background:var(--paper-2);border:1px solid var(--ink);box-shadow:var(--shadow);padding:1rem;position:sticky;top:.8rem}.buybox .now{font-family:var(--mono);font-size:2rem}.buybox .meta{font-family:var(--mono);color:var(--ink-soft);font-size:.78rem}.prose{max-width:68ch}.prose p,.prose ul{margin:.8rem 0}.prose h2{margin-top:1.6rem;font-size:1.8rem}.prose a{color:var(--cel)}.prose ul{padding-left:1.2rem}.table-wrap{margin:1rem 0;overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:.95rem}th,td{text-align:left;border-bottom:1px solid var(--line);vertical-align:top;padding:.45rem .5rem}th{font-family:var(--mono);letter-spacing:.04em;text-transform:uppercase;color:var(--ink-soft);font-size:.72rem;font-weight:500}.status-works{color:var(--ok)}.status-broken{color:var(--bad)}.status-partial{color:var(--warn)}.status-unknown{color:var(--ink-soft)}.chart{border:1px solid var(--ink);background:#fff;width:100%;height:auto;display:block}.footnote{color:var(--ink-soft);font-size:.85rem}.form{gap:.55rem;margin-top:.8rem;display:grid}.hp{width:0;height:0;position:absolute;left:-9999px;overflow:hidden}.status{border:1px solid var(--ink);margin:.7rem 0 0;padding:.6rem .7rem;font-size:.92rem}.status.ok{background:#e5f4ec}.status.warn{background:#fff4cc}.status.bad{background:#fde8e4}.kind-row{grid-template-columns:repeat(3,1fr);gap:.8rem;display:grid}.kind-link{border:1px solid var(--ink);background:var(--paper-2);min-height:140px;padding:1rem;text-decoration:none;display:block}.kind-link:hover{background:#fff}.kind-link span{font-family:var(--mono);color:var(--ink-soft);font-size:.75rem}.kind-link strong{font-family:var(--serif);margin-top:.4rem;font-size:2rem;font-weight:560;display:block}.split{grid-template-columns:1.1fr .9fr;gap:.9rem;display:grid}.job{padding:.9rem 1rem}.job h3{font-size:1.45rem}.job .meta,.post-card .meta,.product-card .meta{font-family:var(--mono);color:var(--ink-soft);margin:.35rem 0;font-size:.75rem}.newsletter-band{background:var(--viewport);color:#f4eee4;grid-template-columns:1.2fr 1fr;align-items:center;gap:1rem;margin-top:3rem;padding:1.5rem;display:grid}.newsletter-band h2{color:#fff;font-size:2.2rem}.newsletter-band p{color:#d9d0c2;margin:.4rem 0 0}.newsletter-band .field{color:#d9d0c2}.newsletter-band input{color:#fff;background:#1d1b18;border-color:#6d6458}.newsletter-band input::placeholder{color:#9c9386}.site-footer{border-top:1px solid var(--ink);color:var(--ink-soft);padding:1.5rem 0 2.5rem;font-size:.92rem}.footer-grid{flex-wrap:wrap;justify-content:space-between;gap:1rem;display:flex}.site-footer nav{flex-wrap:wrap;gap:.8rem;display:flex}.site-footer a{color:var(--ink)}.filename-foot{font-family:var(--mono);margin-top:1rem;font-size:.75rem}.empty{border:1px dashed var(--ink);background:#ffffff59;padding:1.2rem}.page-title{padding-top:1.6rem}.page-title h1{max-width:16ch;font-size:clamp(2.4rem,5vw,4.2rem)}.crumbs{font-family:var(--mono);color:var(--ink-soft);margin:0 0 .7rem;font-size:.75rem}.crumbs a{color:var(--ink)}.verdict{border-left:4px solid var(--marker);background:#fff;margin:1rem 0;padding:.8rem 1rem}.steps{grid-template-columns:repeat(3,1fr);gap:.8rem;display:grid}.step{border-top:2px solid var(--ink);padding-top:.6rem}.step b{font-family:var(--mono);color:var(--marker-ink);font-size:.75rem}.step h3{margin:.25rem 0;font-size:1.4rem}details summary{cursor:pointer;font-family:var(--mono);font-size:.8rem}.stack{gap:.7rem;display:grid}@media (width<=900px){.hero,.layout-tool,.split,.newsletter-band,.kind-row,.steps,.stats{grid-template-columns:1fr}.buybox{position:static}.filters{grid-template-columns:1fr 1fr}.file-tabs span:not(.is-open){display:none}.bar{flex-direction:column;align-items:flex-start}}@media (width<=560px){.filters{grid-template-columns:1fr}.hero h1{max-width:none}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.tape{transform:none}}
