@orangecheck/app-design 0.5.10 → 0.5.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/cn.ts","../src/components/typography.tsx","../src/components/motion.tsx","../src/components/section.tsx","../src/components/hero.tsx","../src/primitives/badge.tsx","../src/primitives/card.tsx","../src/components/steps.tsx","../src/primitives/scroll-fade.tsx","../src/lib/shell-context.ts","../src/primitives/feedback.tsx","../src/primitives/button.tsx","../src/components/data.tsx","../src/components/code-card.tsx","../src/components/split-bar.tsx","../src/components/truth-table.tsx","../src/components/money.tsx","../src/components/frames.tsx","../src/components/monogram.tsx"],"names":["extendTailwindMerge","clsx","jsx","createElement","useRef","useState","useEffect","cva","jsxs","Fragment","forwardRef","Card","useCallback","createContext","useContext","Separator","SeparatorPrimitive","Button","Slot","Children","isValidElement","cloneElement","Check","Copy"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,IAAM,QAAQA,iCAAA,CAAgC;AAAA,EAC1C,MAAA,EAAQ;AAAA,IACJ,WAAA,EAAa;AAAA,MACT,UAAA,EAAY;AAAA,QACR,eAAA;AAAA,QACA,eAAA;AAAA,QACA,eAAA;AAAA,QACA,WAAA;AAAA,QACA,cAAA;AAAA,QACA,aAAA;AAAA,QACA,UAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA;AACJ;AACJ;AAER,CAAC,CAAA;AAEM,SAAS,MAAM,MAAA,EAA8B;AAChD,EAAA,OAAO,KAAA,CAAMC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACpBO,SAAS,QAAQ,EAAE,SAAA,EAAW,KAAA,EAAO,GAAG,OAAM,EAA+D;AAChH,EAAA,uBAAOC,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,EAAA,CAAG,aAAA,EAAe,SAAS,sBAAA,EAAwB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AACnG;AAWO,SAAS,OAAA,CAAQ,EAAE,KAAA,GAAQ,CAAA,EAAG,IAAI,SAAA,EAAW,GAAG,OAAM,EAAiB;AAC1E,EAAA,MAAM,GAAA,GAAM,EAAA,IAAO,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA;AAC5B,EAAA,OAAOC,mBAAA,CAAc,GAAA,EAAK,EAAE,SAAA,EAAW,EAAA,CAAG,CAAA,YAAA,EAAe,KAAK,CAAA,CAAA,EAAI,SAAS,CAAA,EAAG,GAAG,KAAA,EAAO,CAAA;AAC5F;AAIO,SAAS,MAAA,CAAO,EAAE,QAAA,EAAU,SAAA,EAAU,EAAgD;AACzF,EAAA,sCAAQ,MAAA,EAAA,EAAK,SAAA,EAAW,GAAG,yBAAA,EAA2B,SAAS,GAAI,QAAA,EAAS,CAAA;AAChF;AAEO,SAAS,IAAA,CAAK,EAAE,SAAA,EAAW,GAAG,OAAM,EAAyC;AAChF,EAAA,uBAAOD,cAAA,CAAC,OAAE,SAAA,EAAW,EAAA,CAAG,0BAA0B,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAC7E;AAGO,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAAyC;AACpF,EAAA,uBAAOA,cAAA,CAAC,OAAE,SAAA,EAAW,EAAA,CAAG,0CAA0C,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAC7F;AAOO,SAAS,KAAA,CAAM,EAAE,SAAA,EAAW,GAAG,OAAM,EAAmC;AAC3E,EAAA,uBACIA,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,oEAAA;AAAA,QACA,mJAAA;AAAA,QACA,2HAAA;AAAA,QACA,gFAAA;AAAA,QACA,iIAAA;AAAA,QACA,6JAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER;ACxCA,SAAS,YAAA,GAAwB;AAC7B,EAAA,OAAO,OAAO,MAAA,KAAW,WAAA,IAAe,MAAA,CAAO,UAAA,CAAW,kCAAkC,CAAA,CAAE,OAAA;AAClG;AAGO,SAAS,SAAA,CAA6B,aAAa,kBAAA,EAAoB;AAC1E,EAAA,MAAM,GAAA,GAAME,aAAU,IAAI,CAAA;AAC1B,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,eAAS,KAAK,CAAA;AACtC,EAAAC,eAAA,CAAU,MAAM;AACZ,IAAA,MAAM,KAAK,GAAA,CAAI,OAAA;AACf,IAAA,IAAI,CAAC,MAAM,IAAA,EAAM;AACjB,IAAA,IAAI,OAAO,yBAAyB,WAAA,EAAa;AAC7C,MAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,KAAK,IAAI,oBAAA;AAAA,MACX,CAAC,CAAC,CAAC,CAAA,KAAM;AACL,QAAA,IAAI,GAAG,cAAA,EAAgB;AACnB,UAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,UAAA,EAAA,CAAG,UAAA,EAAW;AAAA,QAClB;AAAA,MACJ,CAAA;AAAA,MACA,EAAE,UAAA;AAAW,KACjB;AACA,IAAA,EAAA,CAAG,QAAQ,EAAE,CAAA;AACb,IAAA,OAAO,MAAM,GAAG,UAAA,EAAW;AAAA,EAC/B,CAAA,EAAG,CAAC,UAAA,EAAY,IAAI,CAAC,CAAA;AACrB,EAAA,OAAO,CAAC,KAAK,IAAI,CAAA;AACrB;AAMO,SAAS,MAAA,CAAO;AAAA,EACnB,EAAA,GAAK,KAAA;AAAA,EACL,KAAA,GAAQ,CAAA;AAAA,EACR,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACJ,CAAA,EAOG;AACC,EAAA,MAAM,GAAA,GAAMF,aAAoB,IAAI,CAAA;AACpC,EAAAE,eAAA,CAAU,MAAM;AACZ,IAAA,MAAM,KAAK,GAAA,CAAI,OAAA;AACf,IAAA,IAAI,CAAC,EAAA,IAAM,YAAA,EAAa,IAAK,OAAO,yBAAyB,WAAA,EAAa;AAC1E,IAAA,IAAI,GAAG,qBAAA,EAAsB,CAAE,GAAA,GAAM,MAAA,CAAO,cAAc,IAAA,EAAM;AAChE,IAAA,EAAA,CAAG,QAAQ,MAAA,GAAS,SAAA;AACpB,IAAA,MAAM,KAAK,IAAI,oBAAA;AAAA,MACX,CAAC,CAAC,CAAC,CAAA,KAAM;AACL,QAAA,IAAI,GAAG,cAAA,EAAgB;AACnB,UAAA,EAAA,CAAG,QAAQ,MAAA,GAAS,OAAA;AACpB,UAAA,EAAA,CAAG,UAAA,EAAW;AAAA,QAClB;AAAA,MACJ,CAAA;AAAA,MACA,EAAE,YAAY,kBAAA;AAAmB,KACrC;AACA,IAAA,EAAA,CAAG,QAAQ,EAAE,CAAA;AACb,IAAA,OAAO,MAAM,GAAG,UAAA,EAAW;AAAA,EAC/B,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,OAAOH,mBAAAA;AAAA,IACH,EAAA;AAAA,IACA,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,EAAE,GAAG,KAAA,EAAO,gBAAA,EAAkB,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA,EAAK,EAAmB;AAAA,IACvF;AAAA,GACJ;AACJ;AAQO,SAAS,WAAA,CAAY;AAAA,EACxB,MAAA,GAAS,CAAA;AAAA,EACT,SAAA;AAAA,EACA,cAAA;AAAA,EACA;AACJ,CAAA,EAMG;AACC,EAAA,MAAM,GAAA,GAAMC,aAAuB,IAAI,CAAA;AACvC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,eAAS,KAAK,CAAA;AAC1C,EAAAC,eAAA,CAAU,MAAM;AACZ,IAAA,MAAM,KAAK,GAAA,CAAI,OAAA;AACf,IAAA,IAAI,CAAC,EAAA,IAAM,YAAA,EAAa,EAAG;AAC3B,IAAA,SAAA,CAAU,IAAI,CAAA;AACd,IAAA,IAAI,GAAA,GAAM,CAAA;AACV,IAAA,MAAM,SAAS,MAAM;AACjB,MAAA,GAAA,GAAM,CAAA;AACN,MAAA,MAAM,CAAA,GAAI,GAAG,qBAAA,EAAsB;AACnC,MAAA,MAAM,MAAA,GAAS,CAAA,CAAE,MAAA,GAAS,MAAA,CAAO,WAAA;AACjC,MAAA,MAAM,CAAA,GAAI,MAAA,GAAS,CAAA,GAAI,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,GAAM,MAAM,CAAC,CAAA,GAAI,CAAA;AACnE,MAAA,EAAA,CAAG,MAAM,WAAA,CAAY,KAAA,EAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,IAC5C,CAAA;AACA,IAAA,MAAM,KAAK,MAAM;AACb,MAAA,IAAI,CAAC,GAAA,EAAK,GAAA,GAAM,qBAAA,CAAsB,MAAM,CAAA;AAAA,IAChD,CAAA;AACA,IAAA,MAAA,EAAO;AACP,IAAA,MAAA,CAAO,iBAAiB,QAAA,EAAU,EAAA,EAAI,EAAE,OAAA,EAAS,MAAM,CAAA;AACvD,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,EAAE,CAAA;AACpC,IAAA,OAAO,MAAM;AACT,MAAA,oBAAA,CAAqB,GAAG,CAAA;AACxB,MAAA,MAAA,CAAO,mBAAA,CAAoB,UAAU,EAAE,CAAA;AACvC,MAAA,MAAA,CAAO,mBAAA,CAAoB,UAAU,EAAE,CAAA;AAAA,IAC3C,CAAA;AAAA,EACJ,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,uBACIJ,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA,EAAG,KAAA,EAAO,MAAA,GAAS,EAAE,MAAA,EAAQ,CAAA,EAAG,MAAA,GAAS,GAAG,CAAA,GAAA,CAAA,EAAM,GAAI,MAAA,EACpG,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,MAAA,IAAU,0CAAA,EAA4C,cAAc,CAAA,EAAI,UAAS,CAAA,EACxG,CAAA;AAER;AAGO,SAAS,MAAA,CAAO;AAAA,EACnB,KAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,MAAA,GAAS,CAAC,CAAA,KAAM,IAAA,CAAK,MAAM,CAAC,CAAA,CAAE,eAAe,OAAO,CAAA;AAAA,EACpD;AACJ,CAAA,EAKG;AACC,EAAA,MAAM,CAAC,GAAA,EAAK,IAAI,CAAA,GAAI,SAAA,EAA2B;AAC/C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIG,eAAS,KAAK,CAAA;AAGxC,EAAA,MAAM,OAAA,GAAUD,aAAuB,IAAI,CAAA;AAC3C,EAAAE,eAAA,CAAU,MAAM;AACZ,IAAA,MAAM,KAAK,GAAA,CAAI,OAAA;AACf,IAAA,IAAI,CAAC,EAAA,IAAM,OAAA,CAAQ,OAAA,KAAY,IAAA,EAAM;AACrC,IAAA,OAAA,CAAQ,OAAA,GAAU,CAAC,YAAA,EAAa,IAAK,GAAG,qBAAA,EAAsB,CAAE,GAAA,GAAM,MAAA,CAAO,WAAA,GAAc,GAAA;AAC3F,IAAA,IAAI,OAAA,CAAQ,OAAA,EAAS,QAAA,CAAS,CAAC,CAAA;AAAA,EACnC,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AACR,EAAAA,eAAA,CAAU,MAAM;AACZ,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,IAAI,CAAC,QAAQ,OAAA,EAAS;AAClB,MAAA,QAAA,CAAS,KAAK,CAAA;AACd,MAAA;AAAA,IACJ;AACA,IAAA,IAAI,GAAA,GAAM,CAAA;AACV,IAAA,MAAM,EAAA,GAAK,YAAY,GAAA,EAAI;AAC3B,IAAA,MAAM,IAAA,GAAO,CAAC,GAAA,KAAgB;AAC1B,MAAA,MAAM,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAA,CAAI,GAAA,GAAM,MAAM,QAAQ,CAAA;AAC3C,MAAA,QAAA,CAAS,SAAS,CAAA,GAAI,IAAA,CAAK,IAAI,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA,CAAE,CAAA;AACzC,MAAA,IAAI,CAAA,GAAI,CAAA,EAAG,GAAA,GAAM,qBAAA,CAAsB,IAAI,CAAA;AAAA,IAC/C,CAAA;AACA,IAAA,GAAA,GAAM,sBAAsB,IAAI,CAAA;AAChC,IAAA,OAAO,MAAM,qBAAqB,GAAG,CAAA;AAAA,EACzC,CAAA,EAAG,CAAC,IAAA,EAAM,KAAA,EAAO,QAAQ,CAAC,CAAA;AAC1B,EAAA,uBACIJ,cAAAA,CAAC,MAAA,EAAA,EAAK,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,aAAA,EAAe,SAAS,CAAA,EACjD,QAAA,EAAA,MAAA,CAAO,KAAK,CAAA,EACjB,CAAA;AAER;AC7KO,IAAM,eAAA,GAAkBK,2BAAI,iCAAA,EAAmC;AAAA,EAClE,QAAA,EAAU;AAAA,IACN,IAAA,EAAM;AAAA,MACF,MAAA,EAAQ,+BAAA;AAAA,MACR,IAAA,EAAM,8BAAA;AAAA;AAAA;AAAA,MAGN,GAAA,EAAK,2EAAA;AAAA,MACL,KAAA,EAAO;AAAA,KACX;AAAA,IACA,KAAA,EAAO;AAAA,MACH,IAAA,EAAM,EAAA;AAAA,MACN,EAAA,EAAI,gBAAA;AAAA,MACJ,EAAA,EAAI,aAAA;AAAA,MACJ,EAAA,EAAI;AAAA;AACR,GACJ;AAAA,EACA,eAAA,EAAiB,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,IAAA;AAC9C,CAAC;AAOM,SAAS,OAAA,CAAQ,EAAE,IAAA,EAAM,KAAA,EAAO,SAAA,GAAY,MAAM,SAAA,EAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAiB;AACpG,EAAA,uBACIL,eAAC,SAAA,EAAA,EAAQ,SAAA,EAAW,GAAG,eAAA,CAAgB,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA,EAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EACpE,QAAA,EAAA,SAAA,mBAAYA,cAAAA,CAAC,SAAI,SAAA,EAAU,eAAA,EAAiB,QAAA,EAAS,CAAA,GAAS,QAAA,EACnE,CAAA;AAER;AAEO,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAAmC;AAC/E,EAAA,uBAAOA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,eAAA,EAAiB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AACtE;AAMO,SAAS,YAAA,CAAa;AAAA,EACzB,SAAA;AAAA,EACA,KAAA,GAAQ,OAAA;AAAA,EACR,MAAA,GAAS,IAAA;AAAA,EACT,QAAA;AAAA,EACA;AACJ,CAAA,EAGG;AACC,EAAA,MAAM,MAAM,EAAA,CAAG,8BAAA,EAAgC,KAAA,KAAU,QAAA,IAAY,oCAAoC,SAAS,CAAA;AAClH,EAAA,OAAO,MAAA,mBACHA,cAAAA,CAAC,MAAA,EAAA,EAAO,WAAW,GAAA,EAAK,KAAA,EACnB,QAAA,EACL,CAAA,mBAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAA,EAAK,OAChB,QAAA,EACL,CAAA;AAER;AC1CO,SAAS,QAAA,CAAS;AAAA,EACrB,OAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA,GAAU,MAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP;AACJ,CAAA,EAAkB;AACd,EAAA,IAAI,YAAY,UAAA,EAAY;AACxB,IAAA,uBACIA,cAAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAM,MAAA,EAAO,WAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA,EAC1E,QAAA,kBAAAA,cAAAA,CAAC,aAAU,SAAA,EAAU,uBAAA,EAAyB,GAAG,EAAE,OAAA,EAAS,KAAA,EAAO,MAAM,IAAA,EAAM,OAAA,EAAQ,EAClF,QAAA,EACL,CAAA,EACJ,CAAA;AAAA,EAER;AACA,EAAA,uBACIA,cAAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAM,MAAA,EAAO,WAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA,EAC1E,0CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,yBAAA,EAA2B,GAAA,IAAO,8BAA8B,CAAA,EAC/E,QAAA,EAAA;AAAA,oBAAAM,eAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,mCAAmC,GAAA,GAAM,eAAA,GAAkB,eAAe,CAAA,EACxF,QAAA,EAAA;AAAA,MAAA,OAAA,mBAAUN,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uBAAA,EAAyB,mBAAQ,CAAA,GAAO,IAAA;AAAA,sBAChEA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,EAAA,CAAG,IAAA,KAAS,IAAA,GAAO,eAAA,GAAkB,eAAA,EAAiB,gCAAgC,CAAA,EAChG,QAAA,EAAA,KAAA,EACL,CAAA;AAAA,MACC,uBAAOA,cAAAA,CAAC,OAAE,SAAA,EAAU,wDAAA,EAA0D,gBAAK,CAAA,GAAO,IAAA;AAAA,MAC1F,uBAAOA,cAAAA,CAAC,OAAE,SAAA,EAAU,uEAAA,EAAyE,gBAAK,CAAA,GAAO,IAAA;AAAA,MACzG,0BAAUA,cAAAA,CAAC,SAAI,SAAA,EAAU,sDAAA,EAAwD,mBAAQ,CAAA,GAAS,IAAA;AAAA,MAClG,2BAAWA,cAAAA,CAAC,SAAI,SAAA,EAAU,wCAAA,EAA0C,UAAS,CAAA,GAAS;AAAA,KAAA,EAC3F,CAAA;AAAA,IACC,sBAAMA,cAAAA,CAAC,SAAI,SAAA,EAAU,+CAAA,EAAiD,eAAI,CAAA,GAAS;AAAA,GAAA,EACxF,CAAA,EACJ,CAAA;AAER;AAMO,SAAS,SAAA,CAAU;AAAA,EACtB,OAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA;AACJ,CAAA,EAAsG;AAClG,EAAA,uCACK,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAC9C,QAAA,EAAA;AAAA,IAAA,OAAA,mBAAUA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uBAAA,EAAyB,mBAAQ,CAAA,GAAO,IAAA;AAAA,oBAChEA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,gDAAgD,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IACnE,uBAAOA,cAAAA,CAAC,OAAE,SAAA,EAAU,UAAA,EAAY,gBAAK,CAAA,GAAO,IAAA;AAAA,IAC5C,uBAAOA,cAAAA,CAAC,OAAE,SAAA,EAAU,uCAAA,EAAyC,gBAAK,CAAA,GAAO,IAAA;AAAA,IACzE,0BAAUA,cAAAA,CAAC,SAAI,SAAA,EAAU,2BAAA,EAA6B,mBAAQ,CAAA,GAAS,IAAA;AAAA,IACvE;AAAA,GAAA,EACL,CAAA;AAER;AAOA,SAAS,iBAAiB,GAAA,EAAmC;AACzD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,IAAIG,cAAAA,CAA6B,GAAA,CAAI,CAAC,CAAC,CAAA;AAC/D,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA;AACxB,EAAAC,gBAAU,MAAM;AACZ,IAAA,MAAM,MAAM,GAAA,CACP,KAAA,CAAM,GAAG,CAAA,CACT,IAAI,CAAC,EAAA,KAAO,QAAA,CAAS,cAAA,CAAe,EAAE,CAAC,CAAA,CACvC,OAAO,CAAC,EAAA,KAA0B,OAAO,IAAI,CAAA;AAClD,IAAA,IAAI,GAAA,CAAI,MAAA,KAAW,CAAA,IAAK,OAAO,yBAAyB,WAAA,EAAa;AACrE,IAAA,MAAM,KAAK,IAAI,oBAAA;AAAA,MACX,CAAC,OAAA,KAAY;AACT,QAAA,MAAM,MAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,kBAAA,CAAmB,GAAA,GAAM,EAAE,kBAAA,CAAmB,GAAG,EAAE,CAAC,CAAA;AACzH,QAAA,IAAI,GAAA,EAAK,SAAA,CAAU,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA;AAAA,MACpC,CAAA;AAAA,MACA,EAAE,YAAY,oBAAA;AAAqB,KACvC;AACA,IAAA,GAAA,CAAI,QAAQ,CAAC,EAAA,KAAO,EAAA,CAAG,OAAA,CAAQ,EAAE,CAAC,CAAA;AAClC,IAAA,OAAO,MAAM,GAAG,UAAA,EAAW;AAAA,EAC/B,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AACR,EAAA,OAAO,MAAA;AACX;AAQO,SAAS,SAAA,CAAU;AAAA,EACtB,GAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACJ,CAAA,EAKG;AACC,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,GAAA,EAAK,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,EAAE,CAAA,IAAK,EAAE,CAAA;AAC3D,EAAA,MAAM,KAAA,GAAQ,MACV,GAAA,EAAK,GAAA,CAAI,CAAC,CAAA,qBACNJ,cAAAA,CAAC,IAAA,EAAA,EACG,QAAA,kBAAAA,cAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACG,IAAA,EAAM,CAAA,CAAA,EAAI,CAAA,CAAE,EAAE,CAAA,CAAA;AAAA,MACd,cAAA,EAAc,MAAA,KAAW,CAAA,CAAE,EAAA,GAAK,UAAA,GAAa,MAAA;AAAA,MAC7C,SAAA,EAAW,EAAA;AAAA,QACP,2EAAA;AAAA,QACA,MAAA,KAAW,CAAA,CAAE,EAAA,GACP,mCAAA,GACA;AAAA,OACV;AAAA,MAEC,QAAA,EAAA,CAAA,CAAE;AAAA;AAAA,GACP,EAAA,EAZK,CAAA,CAAE,EAaX,CACH,CAAA;AACL,EAAA,MAAM,MAAA,GAAS,CAAC,CAAC,GAAA,IAAO,IAAI,MAAA,GAAS,CAAA;AACrC,EAAA,uBACIA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,uBAAuB,MAAA,GAAS,gBAAA,GAAmB,IAAA,EAAM,SAAS,CAAA,EACjF,QAAA,kBAAAM,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,gCAAA;AAAA,QACA,SACM,6FAAA,GACA;AAAA,OACV;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,MAAA,mBAASN,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,UAAU,gBAAA,EAAkB,MAAM,CAAA,EAAI,QAAA,EAAA,MAAA,EAAO,CAAA,GAAS,IAAA;AAAA,QAClF,yBACGM,eAAA,CAAAC,mBAAA,EAAA,EACI,QAAA,EAAA;AAAA,0BAAAD,eAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACG,YAAA,EAAW,cAAA;AAAA,cACX,SAAA,EAAW,EAAA,CAAG,0CAAA,EAA4C,MAAA,IAAU,gBAAgB,CAAA;AAAA,cAEpF,QAAA,EAAA;AAAA,gCAAAN,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kCAAA,EAAmC,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,gCAC5DA,cAAAA,CAAC,IAAA,EAAA,EAAI,QAAA,EAAA,KAAA,EAAM,EAAE;AAAA;AAAA;AAAA,WACjB;AAAA,0BACAM,eAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,oEAAA,EACf,QAAA,EAAA;AAAA,4BAAAN,cAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,qEAAA,EAAsE,QAAA,EAAA,cAAA,EAEzF,CAAA;AAAA,4BACAA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,MAAA,EAAQ,iBAAM,EAAE;AAAA,WAAA,EAClC;AAAA,SAAA,EACJ,CAAA,GACA,IAAA;AAAA,wBACJA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,SAAA,EAAW,MAAA,IAAU,gBAAA,EAAkB,MAAA,IAAU,MAAA,IAAU,gBAAgB,CAAA,EACzF,QAAA,EACL;AAAA;AAAA;AAAA,GACJ,EACJ,CAAA;AAER;ACxLA,IAAM,QAAA,GACF,iIAAA;AAEG,IAAM,aAAA,GAAgBK,0BAAAA;AAAA,EACzB,sIAAA;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,IAAA,EAAM;AAAA,QACF,OAAA,EAAS,uCAAA;AAAA,QACT,KAAA,EAAO,mDAAA;AAAA,QACP,KAAA,EAAO,mGAAA;AAAA,QACP,MAAA,EAAQ,iGAAA;AAAA;AAAA,QAER,OAAA,EAAS,QAAA;AAAA;AAAA;AAAA,QAGT,OAAA,EAAS,mGAAA;AAAA,QACT,IAAA,EAAM,uCAAA;AAAA;AAAA,QAEN,GAAA,EAAK,+FAAA;AAAA,QACL,KAAA,EAAO;AAAA;AACX,KACJ;AAAA,IACA,eAAA,EAAiB,EAAE,IAAA,EAAM,SAAA;AAAU;AAE3C,CAAA;AAIO,SAAS,MAAM,EAAE,SAAA,EAAW,IAAA,EAAM,GAAG,OAAM,EAAe;AAC7D,EAAA,uBAAOL,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAQ,SAAQ,SAAA,EAAW,EAAA,CAAG,aAAA,CAAc,EAAE,MAAM,CAAA,EAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAC/F;AChCO,IAAM,YAAA,GAAeK,2BAAI,mCAAA,EAAqC;AAAA,EACjE,QAAA,EAAU;AAAA,IACN,IAAA,EAAM;AAAA,MACF,OAAA,EAAS,4CAAA;AAAA,MACT,MAAA,EAAQ,6CAAA;AAAA,MACR,GAAA,EAAK,6DAAA;AAAA,MACL,OAAA,EAAS;AAAA,KACb;AAAA,IACA,OAAA,EAAS;AAAA,MACL,IAAA,EAAM,EAAA;AAAA,MACN,EAAA,EAAI,KAAA;AAAA,MACJ,EAAA,EAAI,YAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACR;AAAA,IACA,WAAA,EAAa;AAAA,MACT,IAAA,EAAM,4FAAA;AAAA,MACN,KAAA,EAAO;AAAA;AACX,GACJ;AAAA,EACA,iBAAiB,EAAE,IAAA,EAAM,WAAW,OAAA,EAAS,IAAA,EAAM,aAAa,KAAA;AACpE,CAAC,CAAA;AAIM,IAAM,IAAA,GAAOG,gBAAA,CAAsC,SAASC,KAAAA,CAC/D,EAAE,SAAA,EAAW,IAAA,EAAM,OAAA,EAAS,WAAA,EAAa,GAAG,KAAA,EAAM,EAClD,GAAA,EACF;AACE,EAAA,uBACIT,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAU,SAAA,EAAQ,MAAA,EAAO,WAAW,EAAA,CAAG,YAAA,CAAa,EAAE,IAAA,EAAM,SAAS,WAAA,EAAa,GAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAEzH,CAAC,CAAA;AAOM,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAoC;AAClF,EAAA,uBAAOA,eAAC,MAAA,EAAA,EAAK,SAAA,EAAW,GAAG,mBAAA,EAAqB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAC3E;AAEO,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,OAAM,EAAuC;AACnF,EAAA,uBAAOA,eAAC,IAAA,EAAA,EAAG,SAAA,EAAW,GAAG,+CAAA,EAAiD,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AACrG;AC3BA,IAAM,GAAA,GAAM,CAAC,CAAA,KAAc,MAAA,CAAO,IAAI,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AAEjD,SAAS,SAAS,EAAE,KAAA,EAAO,IAAA,GAAO,OAAA,EAAS,WAAU,EAAkB;AAC1E,EAAA,MAAM,IAAA,GAAO,MAAM,MAAA,IAAU,CAAA,GAAI,mBAAmB,KAAA,CAAM,MAAA,KAAW,IAAI,gBAAA,GAAmB,EAAA;AAC5F,EAAA,uBACIA,eAAC,IAAA,EAAA,EAAG,SAAA,EAAW,GAAG,qBAAA,EAAuB,IAAA,EAAM,SAAS,CAAA,EACnD,QAAA,EAAA,KAAA,CAAM,GAAA;AAAA,IAAI,CAAC,IAAI,CAAA,KACZ,IAAA,KAAS,0BACLM,eAAAA,CAAC,IAAA,EAAA,EAAW,SAAA,EAAU,0BAAA,EAClB,QAAA,EAAA;AAAA,sBAAAN,eAAC,WAAA,EAAA,EAAa,QAAA,EAAA,EAAA,CAAG,OAAA,IAAW,GAAA,CAAI,CAAC,CAAA,EAAE,CAAA;AAAA,sBACnCM,eAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,cAAA,EAChB,QAAA,EAAA;AAAA,QAAA,EAAA,CAAG,KAAA;AAAA,QACH,GAAG,KAAA,mBAAQN,eAAC,KAAA,EAAA,EAAO,QAAA,EAAA,EAAA,CAAG,OAAM,CAAA,GAAW;AAAA,OAAA,EAC5C,CAAA;AAAA,sBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EAA6B,aAAG,IAAA,EAAK;AAAA,KAAA,EAAA,EAN/C,CAOT,CAAA,GACA,IAAA,KAAS,KAAA,mBACTA,cAAAA,CAAC,IAAA,EAAA,EACG,QAAA,kBAAAM,eAAAA,CAAC,QAAK,IAAA,EAAK,KAAA,EAAM,OAAA,EAAQ,IAAA,EAAK,WAAU,QAAA,EACpC,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,oBAAA,EAChB,QAAA,EAAA;AAAA,QAAA,EAAA,CAAG,KAAA;AAAA,QACH,EAAA,CAAG,wBAAQN,cAAAA,CAAC,SAAM,IAAA,EAAK,OAAA,EAAS,QAAA,EAAA,EAAA,CAAG,KAAA,EAAM,CAAA,GAAW;AAAA,OAAA,EACzD,CAAA;AAAA,sBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qDAAA,EAAuD,aAAG,IAAA,EAAK;AAAA,KAAA,EAClF,CAAA,EAAA,EAPK,CAQT,CAAA,mBAEAA,cAAAA,CAAC,IAAA,EAAA,EACG,QAAA,kBAAAM,eAAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,IAAA,EAAK,SAAA,EAAU,4BAAA,EACzB,QAAA,EAAA;AAAA,sBAAAN,eAAC,WAAA,EAAA,EAAa,QAAA,EAAA,EAAA,CAAG,OAAA,IAAW,GAAA,CAAI,CAAC,CAAA,EAAE,CAAA;AAAA,sBACnCM,gBAAC,SAAA,EAAA,EACI,QAAA,EAAA;AAAA,QAAA,EAAA,CAAG,KAAA;AAAA,QACH,GAAG,KAAA,mBAAQN,eAAC,KAAA,EAAA,EAAO,QAAA,EAAA,EAAA,CAAG,OAAM,CAAA,GAAW;AAAA,OAAA,EAC5C,CAAA;AAAA,sBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAY,aAAG,IAAA,EAAK;AAAA,KAAA,EACvC,KARK,CAST;AAAA,GAER,EACJ,CAAA;AAER;ACnDO,SAAS,UAAA,CAAW,EAAE,IAAA,GAAO,aAAA,EAAe,WAAW,cAAA,EAAgB,QAAA,EAAU,GAAG,KAAA,EAAM,EAAoB;AACjH,EAAA,MAAM,GAAA,GAAME,aAAuB,IAAI,CAAA;AACvC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,cAAAA,CAAS,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,CAAA;AAChE,EAAA,MAAM,OAAA,GAAUO,kBAAY,MAAM;AAC9B,IAAA,MAAM,KAAK,GAAA,CAAI,OAAA;AACf,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,MAAM,IAAA,GAAO,GAAG,UAAA,GAAa,CAAA;AAC7B,IAAA,MAAM,QAAQ,EAAA,CAAG,UAAA,GAAa,EAAA,CAAG,WAAA,GAAc,GAAG,WAAA,GAAc,CAAA;AAChE,IAAA,QAAA,CAAS,CAAC,CAAA,KAAO,CAAA,CAAE,IAAA,KAAS,IAAA,IAAQ,CAAA,CAAE,KAAA,KAAU,KAAA,GAAQ,CAAA,GAAI,EAAE,IAAA,EAAM,KAAA,EAAQ,CAAA;AAAA,EAChF,CAAA,EAAG,EAAE,CAAA;AACL,EAAAN,gBAAU,MAAM;AACZ,IAAA,MAAM,KAAK,GAAA,CAAI,OAAA;AACf,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,OAAA,EAAQ;AAER,IAAA,IAAI,OAAO,mBAAmB,WAAA,EAAa;AAC3C,IAAA,MAAM,EAAA,GAAK,IAAI,cAAA,CAAe,OAAO,CAAA;AACrC,IAAA,EAAA,CAAG,QAAQ,EAAE,CAAA;AACb,IAAA,IAAI,EAAA,CAAG,iBAAA,EAAmB,EAAA,CAAG,OAAA,CAAQ,GAAG,iBAAiB,CAAA;AACzD,IAAA,OAAO,MAAM,GAAG,UAAA,EAAW;AAAA,EAC/B,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACZ,EAAA,uBACIE,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,kBAAA,EAAoB,SAAS,CAAA,EAAI,GAAG,KAAA,EACnD,QAAA,EAAA;AAAA,oBAAAN,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,QAAA,EAAU,OAAA,EAAS,WAAW,EAAA,CAAG,sCAAA,EAAwC,cAAc,CAAA,EACjG,QAAA,EACL,CAAA;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACG,aAAA,EAAW,IAAA;AAAA,QACX,SAAA,EAAW,EAAA;AAAA,UACP,mFAAA;AAAA,UACA,KAAA,CAAM,OAAO,aAAA,GAAgB;AAAA,SACjC;AAAA,QACA,KAAA,EAAO,EAAE,UAAA,EAAY,CAAA,0BAAA,EAA6B,IAAI,CAAA,cAAA,CAAA;AAAiB;AAAA,KAC3E;AAAA,oBACAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACG,aAAA,EAAW,IAAA;AAAA,QACX,SAAA,EAAW,EAAA;AAAA,UACP,qFAAA;AAAA,UACA,KAAA,CAAM,QAAQ,aAAA,GAAgB;AAAA,SAClC;AAAA,QACA,KAAA,EAAO,EAAE,UAAA,EAAY,CAAA,yBAAA,EAA4B,IAAI,CAAA,cAAA,CAAA;AAAiB;AAAA;AAC1E,GAAA,EACJ,CAAA;AAER;ACpDO,IAAM,YAAA,GAAeW,mBAAA,CAA0B,EAAE,CAAA;AAEjD,SAAS,aAAA,GAA4B;AACxC,EAAA,OAAOC,iBAAW,YAAY,CAAA;AAClC;ACCO,SAAS,OAAA,CAAQ,EAAE,SAAA,EAAW,KAAA,EAAM,EAA2C;AAClF,EAAA,uBACIN,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,IAAA,EAAM,QAAQ,QAAA,GAAW,MAAA;AAAA,MACzB,YAAA,EAAY,KAAA;AAAA,MACZ,aAAA,EAAa,QAAQ,MAAA,GAAY,IAAA;AAAA,MACjC,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA;AAAA,MAE9C,QAAA,EAAA;AAAA,wBAAAN,cAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,GAAA,EAAI,MAAA,EAAO,cAAA,EAAe,aAAA,EAAc,KAAA,EAAM,aAAY,KAAA,EAAM,CAAA;AAAA,wBAC1FA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,sBAAA,EAAuB,QAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ;AAAA;AAAA;AAAA,GACjG;AAER;AAGO,SAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAAmC;AAC9E,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAQ,UAAA;AAAA,MACR,SAAA,EAAW,EAAA,CAAG,mDAAA,EAAqD,SAAS,CAAA;AAAA,MAC3E,GAAG;AAAA;AAAA,GACR;AAER;AAMO,SAAS,WAAA,CAAY,MAAA,EAAiB,EAAA,GAAK,IAAA,EAAiB;AAC/D,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIG,eAAS,KAAK,CAAA;AAC9C,EAAAC,gBAAU,MAAM;AAKZ,IAAA,MAAM,IAAI,UAAA,CAAW,MAAM,WAAA,CAAY,IAAI,GAAG,EAAE,CAAA;AAChD,IAAA,OAAO,MAAM,aAAa,CAAC,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,MAAA,EAAQ,EAAE,CAAC,CAAA;AACf,EAAA,OAAO,QAAA;AACX;AAEyBI,gBAAAA,CAGvB,SAASK,UAAAA,CAAU,EAAE,SAAA,EAAW,WAAA,GAAc,YAAA,EAAc,UAAA,GAAa,IAAA,EAAM,GAAG,KAAA,IAAS,GAAA,EAAK;AAC9F,EAAA,uBACIb,cAAAA;AAAA,IAAoBc,6BAAA,CAAA,IAAA;AAAA,IAAnB;AAAA,MACG,GAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACP,oBAAA;AAAA,QACA,WAAA,KAAgB,eAAe,aAAA,GAAgB,aAAA;AAAA,QAC/C;AAAA,OACJ;AAAA,MACC,GAAG;AAAA;AAAA,GACR;AAER,CAAC;AC9DM,IAAM,cAAA,GAAiBT,0BAAAA;AAAA,EAC1B;AAAA,IACI,+GAAA;AAAA,IACA,oFAAA;AAAA,IACA,4HAAA;AAAA,IACA,oDAAA;AAAA;AAAA;AAAA,IAGA,wGAAA;AAAA,IACA;AAAA,GACJ;AAAA,EACA;AAAA,IACI,QAAA,EAAU;AAAA,MACN,OAAA,EAAS;AAAA,QACL,OAAA,EAAS,wDAAA;AAAA,QACT,SAAA,EACI,8GAAA;AAAA,QACJ,KAAA,EAAO,yDAAA;AAAA,QACP,KAAA,EAAO,iCAAA;AAAA,QACP,MAAA,EAAQ,oEAAA;AAAA,QACR,IAAA,EAAM,4HAAA;AAAA,QACN,KAAA,EAAO,yCAAA;AAAA,QACP,YAAA,EAAc;AAAA,OAClB;AAAA,MACA,IAAA,EAAM;AAAA,QACF,EAAA,EAAI,kBAAA;AAAA,QACJ,EAAA,EAAI,4BAAA;AAAA,QACJ,EAAA,EAAI,4BAAA;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,SAAA,EAAW;AAAA;AACf,KACJ;AAAA,IACA,kBAAkB,CAAC,EAAE,SAAS,MAAA,EAAQ,SAAA,EAAW,eAAe,CAAA;AAAA,IAChE,eAAA,EAAiB,EAAE,OAAA,EAAS,SAAA,EAAW,MAAM,IAAA;AAAK;AAE1D,CAAA;AAWO,IAAM,SAASG,gBAAAA,CAA2C,SAASO,QACtE,EAAE,SAAA,EAAW,SAAS,IAAA,EAAM,OAAA,GAAU,KAAA,EAAO,OAAA,GAAU,OAAO,QAAA,EAAU,QAAA,EAAU,MAAM,GAAG,KAAA,IAC3F,GAAA,EACF;AACE,EAAA,MAAM,IAAA,GAAO,UAAUC,cAAA,GAAO,QAAA;AAC9B,EAAA,uBACIhB,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,GAAA;AAAA,MACA,SAAA,EAAQ,QAAA;AAAA,MACR,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MAC1D,QAAA,EAAU,OAAA,GAAU,MAAA,GAAY,QAAA,IAAY,OAAA;AAAA,MAC5C,aAAW,OAAA,IAAW,MAAA;AAAA,MACtB,IAAA,EAAM,OAAA,GAAU,MAAA,GAAa,IAAA,IAAQ,QAAA;AAAA,MACpC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,OAAA,GACG,QAAA,mBAEAM,eAAAA,CAAAC,qBAAA,EACK,QAAA,EAAA;AAAA,QAAA,OAAA,mBAAUP,cAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,gBAAe,CAAA,GAAK,IAAA;AAAA,QACjD;AAAA,OAAA,EACL;AAAA;AAAA,GAER;AAER,CAAC,CAAA;ACrDM,SAAS,UAAA,CAAW;AAAA,EACvB,OAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA;AACJ,CAAA,EAOG;AACC,EAAA,MAAM,QAAQ,aAAA,EAAc;AAC5B,EAAA,MAAM,EAAA,GAAK,OAAA,KAAY,MAAA,GAAY,KAAA,CAAM,OAAA,GAAU,OAAA;AACnD,EAAA,uBACIM,eAAAA,CAAC,QAAA,EAAA,EAAO,WAAW,EAAA,CAAG,iEAAA,EAAmE,SAAS,CAAA,EAC9F,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACV,QAAA,EAAA;AAAA,MAAA,EAAA,mBAAKN,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,aAAA,EAAe,cAAG,CAAA,GAAO,IAAA;AAAA,sBAC5CA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,iBAAiB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MACpC,8BAAcA,cAAAA,CAAC,OAAE,SAAA,EAAU,yCAAA,EAA2C,uBAAY,CAAA,GAAO;AAAA,KAAA,EAC9F,CAAA;AAAA,IACC,0BAAUA,cAAAA,CAAC,SAAI,SAAA,EAAU,gEAAA,EAAkE,mBAAQ,CAAA,GAAS;AAAA,GAAA,EACjH,CAAA;AAER;AAIA,IAAM,UAAA,GAAaW,oBAAc,KAAK,CAAA;AAc/B,SAAS,SAAS,EAAE,KAAA,EAAO,KAAA,EAAO,IAAA,EAAM,WAAU,EAAkB;AACvE,EAAA,MAAM,MAAA,GAASC,iBAAW,UAAU,CAAA;AACpC,EAAA,uBACIN,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAQ,MAAA;AAAA,MACR,SAAA,EAAW,EAAA;AAAA,QACP,2DAAA;AAAA;AAAA;AAAA,QAGA,SAAS,2CAAA,GAA8C,qBAAA;AAAA,QACvD;AAAA,OACJ;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAN,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oDAAA,EAAsD,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,wBAE5EA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACG,SAAA,EAAW,EAAA;AAAA,cACP,0FAAA;AAAA,cACA,MAAA,IAAU;AAAA,aACd;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACL;AAAA,QACC,IAAA,mBACGA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,qDAAA,EAAuD,QAAA,EAAA,IAAA,EAAK,CAAA,GAC5E,MAAA,mBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAW,MAAC,CAAA,GAClB;AAAA;AAAA;AAAA,GACR;AAER;AAEA,IAAM,OAAA,GAAkC;AAAA,EACpC,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG;AACP,CAAA;AACA,IAAM,OAAA,GAAkC;AAAA,EACpC,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG;AACP,CAAA;AACA,IAAM,OAAA,GAAkC;AAAA,EACpC,CAAA,EAAG,eAAA;AAAA,EACH,CAAA,EAAG,eAAA;AAAA,EACH,CAAA,EAAG,eAAA;AAAA,EACH,CAAA,EAAG;AACP,CAAA;AACA,IAAM,OAAA,GAAkC;AAAA,EACpC,CAAA,EAAG,eAAA;AAAA,EACH,CAAA,EAAG,eAAA;AAAA,EACH,CAAA,EAAG,eAAA;AAAA,EACH,CAAA,EAAG;AACP,CAAA;AAGA,SAAS,YAAY,CAAA,EAAmB;AACpC,EAAA,IAAI,KAAK,CAAA,EAAG,OAAO,IAAA,CAAK,GAAA,CAAI,GAAG,CAAC,CAAA;AAChC,EAAA,IAAI,CAAA,GAAI,CAAA,KAAM,CAAA,EAAG,OAAO,CAAA;AACxB,EAAA,IAAI,CAAA,GAAI,CAAA,KAAM,CAAA,EAAG,OAAO,CAAA;AACxB,EAAA,OAAO,CAAA;AACX;AAGA,SAAS,QAAA,CAAS,GAAW,IAAA,EAAsB;AAC/C,EAAA,MAAM,OAAO,CAAA,GAAI,IAAA;AACjB,EAAA,OAAO,IAAA,KAAS,CAAA,GAAI,CAAA,GAAI,IAAA,GAAO,IAAA,GAAO,CAAA;AAC1C;AAGO,SAAS,SAAA,CAAU,EAAE,QAAA,EAAU,SAAA,EAAU,EAAgD;AAC5F,EAAA,uBACIA,cAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,oHAAA;AAAA,QACA;AAAA,OACJ;AAAA,MAEC;AAAA;AAAA,GACL;AAER;AAeO,SAAS,QAAA,CAAS,EAAE,OAAA,EAAS,KAAA,EAAO,SAAS,SAAA,EAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAkB;AAChG,EAAA,MAAM,QAAQiB,cAAA,CAAS,OAAA,CAAQ,QAAQ,CAAA,CAAE,OAAOC,oBAAc,CAAA;AAC9D,EAAA,MAAM,IAAI,KAAA,CAAM,MAAA;AAChB,EAAA,MAAM,UACF,CAAA,GAAI,CAAA,IAAK,KAAA,CAAM,KAAA,CAAM,CAAC,EAAA,KAAO,KAAA,IAAS,EAAA,CAAG,KAAA,KAAU,GAAG,KAAA,CAAM,GAAA,KAAQ,KAAK,EAAA,CAAG,KAAA,CAAM,QAAQ,IAAA,CAAK,CAAA;AACnG,EAAA,IAAI,OAAA,IAAW,SAAS,uBAAOlB,eAAC,SAAA,EAAA,EAAU,SAAA,EAAuB,mBAAS,mBAAA,EAAoB,CAAA;AAC9F,EAAA,MAAM,EAAA,GAAK,OAAA,IAAW,WAAA,CAAY,CAAC,CAAA;AAEnC,EAAA,MAAM,EAAA,GAAK,EAAA,GAAK,CAAA,GAAI,CAAA,GAAI,EAAA;AACxB,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,CAAA,EAAG,EAAE,CAAA;AAC7B,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,CAAA,EAAG,EAAE,CAAA;AAC7B,EAAA,uBACIA,cAAAA,CAAC,UAAA,CAAW,UAAX,EAAoB,KAAA,EAAK,MACtB,QAAA,kBAAAA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,qBAAA;AAAA,QACA,CAAA,KAAM,IAAI,aAAA,GAAgB,aAAA;AAAA,QAC1B,QAAQ,EAAE,CAAA;AAAA,QACV,QAAQ,EAAE,CAAA;AAAA,QACV;AAAA,OACJ;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,EAAI,CAAA,KAAM;AAClB,QAAA,IAAI,CAAA,KAAM,CAAA,GAAI,CAAA,EAAG,OAAO,EAAA;AACxB,QAAA,MAAM,IAAA,GAAO,EAAA;AAAA,UACT,CAAA,GAAI,CAAA,KAAM,CAAA,IAAK,CAAA,GAAI,CAAA,IAAK,mBAAA;AAAA,UAAA,CACvB,MAAA,GAAS,CAAA,IAAK,MAAA,GAAS,CAAA,KAAM,QAAQ,MAAM,CAAA;AAAA,UAAA,CAC3C,MAAA,GAAS,CAAA,IAAK,MAAA,GAAS,CAAA,KAAM,QAAQ,MAAM;AAAA,SAChD;AACA,QAAA,OAAO,IAAA,GAAOmB,kBAAA,CAAa,EAAA,EAAI,EAAE,SAAA,EAAW,EAAA,CAAG,EAAA,CAAG,KAAA,CAAM,SAAA,EAAW,IAAI,CAAA,EAAG,CAAA,GAAI,EAAA;AAAA,MAClF,CAAC;AAAA;AAAA,GACL,EACJ,CAAA;AAER;AAUO,SAAS,YAAA,CAAa,EAAE,KAAA,EAAO,SAAA,EAAU,EAAkD;AAC9F,EAAA,uBACInB,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,EAAA,CAAG,yEAAyE,SAAS,CAAA,EAC/F,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,EAAI,CAAA,qBACZM,eAAAA,CAAC,KAAA,EAAA,EAAY,WAAU,wEAAA,EACnB,QAAA,EAAA;AAAA,oBAAAN,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,wDAAA,EAA0D,aAAG,KAAA,EAAM,CAAA;AAAA,oBACjFA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,EAAA,CAAG,sCAAA,EAAwC,EAAA,CAAG,IAAA,IAAQ,2BAA2B,CAAA,EAC3F,QAAA,EAAA,EAAA,CAAG,KAAA,EACR;AAAA,GAAA,EAAA,EAJM,CAKV,CACH,CAAA,EACL,CAAA;AAER;AA6BO,SAAS,SAAA,CAAa;AAAA,EACzB,OAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA,GAAQ,OAAA;AAAA,EACR;AACJ,CAAA,EASG;AACC,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,IAAK,KAAA,yBAAcA,cAAAA,CAAAO,mBAAAA,EAAA,EAAG,QAAA,EAAA,KAAA,EAAM,CAAA;AAChD,EAAA,MAAM,OAAA,GAAU,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,OAAO,CAAA,IAAK,OAAA,CAAQ,CAAC,CAAA;AAC3D,EAAA,MAAM,QAAQ,CAAC,CAAA,KAAiB,CAAA,CAAE,OAAA,IAAW,EAAE,KAAA,KAAU,KAAA;AACzD,EAAA,MAAM,wBACFP,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,gEAAA;AAAA,QACA,UAAU,OAAA,IAAW,eAAA;AAAA,QACrB;AAAA,OACJ;AAAA,MAEA,QAAA,kBAAAA,eAAC,UAAA,EAAA,EAAW,IAAA,EAAK,eACb,QAAA,kBAAAM,eAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,mDAAA,EACZ,QAAA,EAAA;AAAA,QAAA,OAAA,mBAAUN,cAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAW,mBAAQ,CAAA,GAAa,IAAA;AAAA,wBAC9DA,cAAAA,CAAC,OAAA,EAAA,EACG,QAAA,kBAAAA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,wBAAA,EACT,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,qBACVA,cAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YAEG,KAAA,EAAM,KAAA;AAAA,YACN,OAAO,EAAE,KAAA,EAAO,EAAE,KAAA,EAAO,QAAA,EAAU,EAAE,QAAA,EAAS;AAAA,YAC9C,SAAA,EAAW,EAAA;AAAA,cACP,gFAAA;AAAA,cACA,KAAA,CAAM,CAAC,CAAA,IAAK,YAAA;AAAA,cACZ,EAAE,IAAA,IAAQ;AAAA,aACd;AAAA,YAEC,QAAA,EAAA,CAAA,CAAE;AAAA,WAAA;AAAA,UATE,CAAA,CAAE;AAAA,SAWd,GACL,CAAA,EACJ,CAAA;AAAA,wBACAA,cAAAA,CAAC,OAAA,EAAA,EAAM,WAAU,wBAAA,EACZ,QAAA,EAAA,IAAA,CAAK,IAAI,CAAC,CAAA,EAAG,sBACVA,cAAAA,CAAC,QAAsB,SAAA,EAAU,sCAAA,EAC5B,kBAAQ,GAAA,CAAI,CAAC,sBACVA,cAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YAEG,KAAA,EAAO,EAAE,QAAA,EAAU,CAAA,CAAE,QAAA,EAAS;AAAA,YAC9B,SAAA,EAAW,EAAA;AAAA,cACP,0BAAA;AAAA,cACA,KAAA,CAAM,CAAC,CAAA,IAAK,YAAA;AAAA,cACZ,EAAE,OAAA,IAAW,+BAAA;AAAA,cACb,EAAE,IAAA,IAAQ;AAAA,aACd;AAAA,YAEC,QAAA,EAAA,CAAA,CAAE,2BACCA,cAAAA,CAAC,SAAI,SAAA,EAAU,UAAA,EAAW,OAAO,EAAE,QAAA,EAAU,EAAE,KAAA,IAAS,OAAA,IACnD,QAAA,EAAA,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EACb,CAAA,GAEA,CAAA,CAAE,IAAA,CAAK,CAAC;AAAA,WAAA;AAAA,UAdP,CAAA,CAAE;AAAA,SAiBd,CAAA,EAAA,EApBI,MAAA,CAAO,GAAG,CAAC,CAqBpB,CACH,CAAA,EACL;AAAA,OAAA,EACJ,CAAA,EACJ;AAAA;AAAA,GACJ;AAEJ,EAAA,IAAI,KAAA,KAAU,SAAS,OAAO,KAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,QAAQ,MAAA,CAAO,CAAC,MAAM,CAAA,KAAM,OAAA,IAAW,CAAC,CAAA,CAAE,WAAW,CAAA;AAClE,EAAA,uBACIM,eAAAA,CAAAC,mBAAAA,EAAA,EACK,QAAA,EAAA;AAAA,IAAA,KAAA;AAAA,oBACDP,cAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACG,YAAA,EAAY,OAAA;AAAA,QACZ,SAAA,EAAW,EAAA,CAAG,iFAAA,EAAmF,SAAS,CAAA;AAAA,QAEzG,QAAA,EAAA,IAAA,CAAK,IAAI,CAAC,CAAA,EAAG,sBACVM,eAAAA,CAAC,IAAA,EAAA,EAAsB,SAAA,EAAU,iCAAA,EAC7B,QAAA,EAAA;AAAA,0BAAAN,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAoD,QAAA,EAAA,OAAA,EAAS,IAAA,CAAK,CAAC,CAAA,EAAE,CAAA;AAAA,UACnF,KAAK,MAAA,GAAS,CAAA,mBACXA,cAAAA,CAAC,QAAG,SAAA,EAAU,sFAAA,EACT,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,qBACPM,eAAAA,CAAC,KAAA,EAAA,EAAgB,WAAU,UAAA,EACvB,QAAA,EAAA;AAAA,4BAAAN,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uBAAA,EAAyB,YAAE,MAAA,EAAO,CAAA;AAAA,4BAChDA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,CAAA,CAAE,OAAA,IAAW,aAAa,CAAA,EAAI,QAAA,EAAA,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAE;AAAA,WAAA,EAAA,EAF3E,CAAA,CAAE,GAGZ,CACH,CAAA,EACL,CAAA,GACA;AAAA,SAAA,EAAA,EAXC,MAAA,CAAO,CAAA,EAAG,CAAC,CAYpB,CACH;AAAA;AAAA;AACL,GAAA,EACJ,CAAA;AAER;AAIO,SAAS,UAAA,CAAW;AAAA,EACvB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA;AACJ,CAAA,EAOG;AACC,EAAA,uBACIM,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,2HAAA;AAAA,QACA;AAAA,OACJ;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,IAAA,mBACGN,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0GAAA,EACX,gBACL,CAAA,GACA,IAAA;AAAA,wBACJA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,gBAAgB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,QACnC,2BAAWA,cAAAA,CAAC,SAAI,SAAA,EAAU,oCAAA,EAAsC,UAAS,CAAA,GAAS,IAAA;AAAA,QAClF,yBAASA,cAAAA,CAAC,SAAI,SAAA,EAAU,0CAAA,EAA4C,kBAAO,CAAA,GAAS;AAAA;AAAA;AAAA,GACzF;AAER;AASA,IAAM,WAAA,GAAkE;AAAA,EACpE,OAAA,EAAS,SAAA;AAAA,EACT,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT,KAAA,EAAO,OAAA;AAAA,EACP,OAAA,EAAS,OAAA;AAAA,EACT,MAAA,EAAQ;AACZ,CAAA;AAEO,SAAS,MAAA,CAAO;AAAA,EACnB,IAAA,GAAO,SAAA;AAAA,EACP,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACJ,CAAA,EAMG;AACC,EAAA,MAAM,IAAA,GAAO,YAAY,IAAI,CAAA;AAC7B,EAAA,uBACIM,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,IAAA,EAAM,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,YAAY,OAAA,GAAU,MAAA;AAAA,MAC1D,WAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA,QACP,sHAAA;AAAA,QACA,SAAS,QAAA,IAAY,mEAAA;AAAA,QACrB;AAAA,OACJ;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACV,QAAA,EAAA;AAAA,UAAA,IAAA,KAAS,4BACNN,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACG,aAAA,EAAW,IAAA;AAAA,cACX,SAAA,EAAW,EAAA;AAAA,gBACP,2CAAA;AAAA,gBACA,IAAA,KAAS,UAAU,eAAA,GAAkB;AAAA;AACzC;AAAA,WACJ,GACA,IAAA;AAAA,0BACJM,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACV,QAAA,EAAA;AAAA,YAAA,KAAA,mBACGN,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,EAAA,CAAG,8BAAA,EAAgC,IAAA,KAAS,QAAA,IAAY,kBAAkB,CAAA,EACnF,QAAA,EAAA,KAAA,EACL,CAAA,GACA,IAAA;AAAA,YACH,2BAAWA,cAAAA,CAAC,SAAI,SAAA,EAAU,wDAAA,EAA0D,UAAS,CAAA,GAAS;AAAA,WAAA,EAC3G;AAAA,SAAA,EACJ,CAAA;AAAA,QACC,yBAASA,cAAAA,CAAC,SAAI,SAAA,EAAU,UAAA,EAAY,kBAAO,CAAA,GAAS;AAAA;AAAA;AAAA,GACzD;AAER;AAMO,SAAS,YAAA,CAAa;AAAA,EACzB,IAAA,GAAO,CAAA;AAAA,EACP,SAAA,GAAY,IAAA;AAAA,EACZ,OAAA;AAAA,EACA,KAAA,GAAQ,SAAA;AAAA,EACR;AACJ,CAAA,EAMG;AACC,EAAA,MAAM,QAAA,GAAW,WAAA,CAAY,IAAA,EAAM,SAAS,CAAA;AAC5C,EAAA,IAAI,QAAA,EAAU;AACV,IAAA,uBACIA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACG,SAAA;AAAA,QACA,KAAA,EAAM,uCAAA;AAAA,QACN,MAAA,kBACIA,cAAAA,CAAC,MAAA,EAAA,EAAO,MAAK,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,OAAA,EAAS,YAAY,MAAM,MAAA,CAAO,QAAA,CAAS,MAAA,KAAW,QAAA,EAAA,WAAA,EAE5F,CAAA;AAAA,QAEP,QAAA,EAAA;AAAA;AAAA,KAED;AAAA,EAER;AACA,EAAA,uBACIA,cAAAA,CAAC,KAAA,EAAA,EAAI,IAAA,EAAK,QAAA,EAAS,YAAA,EAAY,KAAA,EAAO,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAC/E,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAA,EAAK,EAAG,CAAC,CAAA,EAAG,CAAA,qBAC9BA,cAAAA,CAAC,QAAA,EAAA,EAAiB,SAAA,EAAU,kBAAA,EAAA,EAAb,CAAgC,CAClD,CAAA,EACL,CAAA;AAER;AAIA,SAAS,MAAA,CAAO,CAAA,EAAW,IAAA,EAAc,IAAA,EAAc;AACnD,EAAA,OAAO,EAAE,MAAA,IAAU,IAAA,GAAO,IAAA,GAAO,CAAA,GAAI,IAAI,CAAA,EAAG,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,IAAI,CAAC,CAAA,MAAA,EAAI,EAAE,KAAA,CAAM,CAAC,IAAI,CAAC,CAAA,CAAA;AAClF;AAEO,SAAS,OAAA,CAAQ,YAAY,IAAA,EAAM;AACtC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIG,eAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAA,GAAID,aAA6C,IAAI,CAAA;AAC3D,EAAAE,eAAAA,CAAU,MAAM,MAAM;AAClB,IAAA,IAAI,CAAA,CAAE,OAAA,EAAS,YAAA,CAAa,CAAA,CAAE,OAAO,CAAA;AAAA,EACzC,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,MAAM,IAAA,GAAOM,iBAAAA;AAAA,IACT,OAAO,IAAA,KAAiB;AACpB,MAAA,IAAI;AACA,QAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA;AACxC,QAAA,SAAA,CAAU,IAAI,CAAA;AACd,QAAA,IAAI,CAAA,CAAE,OAAA,EAAS,YAAA,CAAa,CAAA,CAAE,OAAO,CAAA;AACrC,QAAA,CAAA,CAAE,UAAU,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,GAAG,SAAS,CAAA;AAAA,MAC5D,CAAA,CAAA,MAAQ;AACJ,QAAA,SAAA,CAAU,KAAK,CAAA;AAAA,MACnB;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACd;AACA,EAAA,OAAO,EAAE,QAAQ,IAAA,EAAK;AAC1B;AAEO,SAAS,WAAW,EAAE,KAAA,EAAO,KAAA,GAAQ,MAAA,EAAQ,WAAU,EAA0D;AACpH,EAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAK,GAAI,OAAA,EAAQ;AACjC,EAAA,uBACIJ,eAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACG,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,MAAM,KAAK,IAAA,CAAK,KAAK,CAAA;AAAA,MAC9B,YAAA,EAAY,SAAS,QAAA,GAAW,KAAA;AAAA,MAChC,SAAA,EAAW,EAAA;AAAA,QACP,oJAAA;AAAA,QACA;AAAA,OACJ;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,MAAA,mBAASN,cAAAA,CAACoB,iBAAA,EAAA,EAAM,SAAA,EAAU,qBAAA,EAAsB,oBAAKpB,cAAAA,CAACqB,gBAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,wBAC/ErB,eAAC,MAAA,EAAA,EAAK,WAAA,EAAU,UAAS,SAAA,EAAU,SAAA,EAC9B,QAAA,EAAA,MAAA,GAAS,QAAA,GAAW,EAAA,EACzB;AAAA;AAAA;AAAA,GACJ;AAER;AAIO,SAAS,QAAA,CAAS;AAAA,EACrB,KAAA;AAAA,EACA,IAAA,GAAO,CAAA;AAAA,EACP,IAAA,GAAO,CAAA;AAAA,EACP,IAAA,GAAO,IAAA;AAAA,EACP,IAAA;AAAA,EACA;AACJ,CAAA,EAOG;AACC,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,EAAO,IAAA,EAAM,IAAI,CAAA;AACtC,EAAA,MAAM,IAAA,mBACFA,cAAAA,CAAC,MAAA,EAAA,EAAK,OAAO,KAAA,EAAO,SAAA,EAAU,6BACzB,QAAA,EAAA,KAAA,EACL,CAAA;AAEJ,EAAA,uBACIM,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAW,EAAA,CAAG,2CAAA,EAA6C,SAAS,CAAA,EACrE,QAAA,EAAA;AAAA,IAAA,IAAA,mBACGN,cAAAA,CAAC,GAAA,EAAA,EAAE,MAAY,SAAA,EAAU,mFAAA,EACpB,gBACL,CAAA,GAEA,IAAA;AAAA,IAEH,uBAAOA,cAAAA,CAAC,cAAW,KAAA,EAAc,KAAA,EAAM,mBAAkB,CAAA,GAAK;AAAA,GAAA,EACnE,CAAA;AAER;AAYO,SAAS,aAAA,CAAc,EAAE,KAAA,EAAO,SAAA,EAAU,EAAkD;AAC/F,EAAA,uBACIA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAC7C,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM;AACjB,IAAA,MAAM,IAAA,GAAO,CAAA,KAAM,KAAA,CAAM,MAAA,GAAS,CAAA;AAClC,IAAA,uBACIM,eAAAA,CAAC,IAAA,EAAA,EAAW,SAAA,EAAU,oCAAA,EAAqC,gBAAc,CAAA,CAAE,KAAA,KAAU,SAAA,GAAY,MAAA,GAAS,MAAA,EACrG,QAAA,EAAA;AAAA,MAAA,CAAC,uBACEN,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACG,aAAA,EAAW,IAAA;AAAA,UACX,SAAA,EAAW,EAAA;AAAA,YACP,uDAAA;AAAA,YACA,CAAA,CAAE,KAAA,KAAU,MAAA,GAAS,kBAAA,GAAqB;AAAA;AAC9C;AAAA,OACJ,GACA,IAAA;AAAA,sBACJA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACG,SAAA,EAAW,EAAA;AAAA,YACP,sHAAA;AAAA,YACA,CAAA,CAAE,UAAU,MAAA,IAAU,mDAAA;AAAA,YACtB,CAAA,CAAE,UAAU,SAAA,IAAa,0CAAA;AAAA,YACzB,CAAA,CAAE,UAAU,UAAA,IAAc,6CAAA;AAAA,YAC1B,CAAA,CAAE,UAAU,SAAA,IAAa;AAAA,WAC7B;AAAA,UAEC,YAAE,KAAA,KAAU,MAAA,mBAASA,cAAAA,CAACoB,qBAAM,SAAA,EAAU,UAAA,EAAW,WAAA,EAAa,CAAA,EAAG,IAAK,MAAA,CAAO,CAAA,GAAI,CAAC,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG;AAAA;AAAA,OACxG;AAAA,sBACAd,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACX,QAAA,EAAA;AAAA,wBAAAN,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAoB,CAAA,CAAE,KAAA,KAAU,UAAA,GAAa,uBAAA,GAA0B,aAAa,CAAA,EACnG,QAAA,EAAA,CAAA,CAAE,KAAA,EACP,CAAA;AAAA,QACC,CAAA,CAAE,uBAAOA,cAAAA,CAAC,UAAK,SAAA,EAAU,oDAAA,EAAsD,QAAA,EAAA,CAAA,CAAE,IAAA,EAAK,CAAA,GAAU;AAAA,OAAA,EACrG;AAAA,KAAA,EAAA,EA1BK,CA2BT,CAAA;AAAA,EAER,CAAC,CAAA,EACL,CAAA;AAER;AAcO,SAAS,YAAA,CAAa,EAAE,KAAA,EAAO,KAAA,EAAO,WAAU,EAAqE;AACxH,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,IAAK,KAAA,yBAAcA,cAAAA,CAAAO,mBAAAA,EAAA,EAAG,QAAA,EAAA,KAAA,EAAM,CAAA;AACjD,EAAA,uBACIP,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,EAAA,CAAG,uEAAA,EAAyE,SAAS,CAAA,EAC/F,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,KAAO;AACf,IAAA,MAAM,IAAA,mBACFM,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mDAAA,EACX,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACV,QAAA,EAAA;AAAA,QAAA,EAAA,CAAG,OAAA,mBAAUN,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,UAAA,EAAY,QAAA,EAAA,EAAA,CAAG,SAAQ,CAAA,GAAS,IAAA;AAAA,wBAC7DM,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EACX,QAAA,EAAA;AAAA,0BAAAN,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAAA,EAA6B,aAAG,KAAA,EAAM,CAAA;AAAA,UACrD,EAAA,CAAG,uBAAOA,cAAAA,CAAC,UAAK,SAAA,EAAU,iDAAA,EAAmD,QAAA,EAAA,EAAA,CAAG,IAAA,EAAK,CAAA,GAAU;AAAA,SAAA,EACpG;AAAA,OAAA,EACJ,CAAA;AAAA,MACC,EAAA,CAAG,2BAAWA,cAAAA,CAAC,SAAI,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,EAAA,CAAG,QAAA,EAAS,CAAA,GAAS;AAAA,KAAA,EAC9E,CAAA;AAEJ,IAAA,uBACIA,cAAAA,CAAC,IAAA,EAAA,EACI,QAAA,EAAA,EAAA,CAAG,IAAA,mBACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAM,EAAA,CAAG,MAAM,SAAA,EAAU,4CAAA,EACvB,gBACL,CAAA,GAEA,IAAA,EAAA,EANC,GAAG,EAQZ,CAAA;AAAA,EAER,CAAC,CAAA,EACL,CAAA;AAER;AC3pBA,IAAM,IAAA,GAAO;AAAA,EACT,OAAA,EAAS,uBAAA;AAAA,EACT,GAAA,EAAK,mBAAA;AAAA,EACL,IAAA,EAAM;AACV,CAAA;AAEO,SAAS,WAAA,CAAY,EAAE,KAAA,EAAO,SAAA,EAAU,EAAiD;AAC5F,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,sIAAA;AAAA,QACA;AAAA,OACJ;AAAA,MAEC,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,EAAI,CAAA,KAAM;AAElB,QAAA,MAAM,IAAA,mBAAOA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAW,EAAA,CAAG,kBAAA,EAAoB,IAAA,CAAK,EAAA,CAAG,IAAA,IAAQ,SAAS,CAAC,CAAA,EAAI,aAAG,IAAA,EAAK,CAAA;AAC3F,QAAA,uBACIM,eAAAA,CAAC,KAAA,EAAA,EAAY,SAAA,EAAU,+BAAA,EACnB,QAAA,EAAA;AAAA,0BAAAN,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qEAAA,EAAuE,aAAG,KAAA,EAAM,CAAA;AAAA,UAC7F,EAAA,CAAG,IAAA,mBACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,SAAA,EAAU,oFAAA,EACvB,QAAA,EAAA,IAAA,EACL,CAAA,GAEA,IAAA;AAAA,UAEH,GAAG,IAAA,mBACAM,eAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,sDAAA,EACT,QAAA,EAAA;AAAA,4BAAAN,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAW,IAAA,EAAE,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,YACxB,EAAA,CAAG;AAAA,WAAA,EACR,CAAA,GACA;AAAA,SAAA,EAAA,EAdE,CAeV,CAAA;AAAA,MAER,CAAC;AAAA;AAAA,GACL;AAER;AAOO,SAAS,SAAA,CAAU;AAAA,EACtB,IAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,QAAA;AAAA,EACA;AACJ,CAAA,EAOG;AACC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,CAAE,MAAA;AAC/B,EAAA,MAAM,QAAA,GAAW,QAAA,KAAa,MAAA,IAAa,KAAA,GAAQ,QAAA,GAAW,CAAA;AAC9D,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIG,eAAS,KAAK,CAAA;AACtC,EAAA,MAAM,MAAA,GAAS,YAAY,CAAC,IAAA;AAC5B,EAAA,uBACIG,eAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,qGAAA;AAAA,QACA;AAAA,OACJ;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,YAAA,EAAA,EAAW,SAAA,EAAU,+FAAA,EAClB,QAAA,EAAA;AAAA,0BAAAN,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+CAAA,EAAiD,qBAAW,MAAA,EAAO,CAAA;AAAA,UAClF,uBACGA,cAAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACG,KAAA,EAAO,IAAA;AAAA,cACP,KAAA,EAAM,WAAA;AAAA,cACN,SAAA,EAAU;AAAA;AAAA,WACd,GACA;AAAA,SAAA,EACR,CAAA;AAAA,wBACAM,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACX,QAAA,EAAA;AAAA,0BAAAN,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACG,SAAA,EAAW,EAAA,CAAG,MAAA,IAAU,iBAAiB,CAAA;AAAA,cACzC,OAAO,MAAA,GAAS,EAAE,WAAW,CAAA,KAAA,EAAQ,QAAQ,wBAAuB,GAAI,MAAA;AAAA,cAExE,QAAA,kBAAAA,cAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAK,2BACb,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mHACX,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,EAAK,GAChB,CAAA,EACJ;AAAA;AAAA,WACJ;AAAA,UACC,2BACGA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACG,SAAA,EAAW,EAAA;AAAA,gBACP,+BAAA;AAAA,gBACA,MAAA,IAAU;AAAA,eACd;AAAA,cACA,KAAA,EACI,MAAA,GACM,EAAE,UAAA,EAAY,qEAAoE,GAClF,MAAA;AAAA,cAGV,QAAA,kBAAAA,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACG,IAAA,EAAK,QAAA;AAAA,kBACL,SAAS,MAAM,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,kBAChC,SAAA,EAAU,iHAAA;AAAA,kBAET,QAAA,EAAA,IAAA,GAAO,WAAA,GAAc,CAAA,SAAA,EAAY,KAAK,CAAA,MAAA;AAAA;AAAA;AAC3C;AAAA,WACJ,GACA;AAAA,SAAA,EACR;AAAA;AAAA;AAAA,GACJ;AAER;AC1HO,SAAS,QAAA,CAAS;AAAA,EACrB,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACJ,CAAA,EAIG;AACC,EAAA,uBACIM,eAAAA,CAAC,QAAA,EAAA,EAAO,WAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EACjD,QAAA,EAAA;AAAA,IAAA,OAAA,mBAAUN,cAAAA,CAAC,YAAA,EAAA,EAAW,SAAA,EAAU,kBAAA,EAAoB,mBAAQ,CAAA,GAAgB,IAAA;AAAA,oBAC7EA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACV,mBAAS,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACdA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QAEG,SAAA,EAAW,EAAA;AAAA,UACP,2EAAA;AAAA,UACA,CAAA,CAAE,IAAA,KAAS,MAAA,GAAS,uBAAA,GAA0B;AAAA,SAClD;AAAA,QACA,OAAO,EAAE,SAAA,EAAW,CAAA,EAAG,CAAA,CAAE,GAAG,CAAA,CAAA,CAAA,EAAI;AAAA,QAEhC,QAAA,kBAAAM,eAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YAEG,SAAA,EAAU,8EAAA;AAAA,YAET,QAAA,EAAA;AAAA,cAAA,CAAA,CAAE,GAAA;AAAA,cAAI;AAAA;AAAA;AAAA;AACX,OAAA;AAAA,MAZK;AAAA,KAcZ,CAAA,EACL,CAAA;AAAA,oBACAN,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uCACT,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACdM,eAAAA,CAAC,KAAA,EAAA,EAAY,WAAU,6BAAA,EACnB,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,SAAA,EAAW,QAAA,EAAA;AAAA,QAAA,CAAA,CAAE,GAAA;AAAA,QAAI;AAAA,OAAA,EAAC,CAAA;AAAA,sBAChCN,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACG,aAAA,EAAW,IAAA;AAAA,UACX,SAAA,EAAW,EAAA;AAAA,YACP,gEAAA;AAAA,YACA,CAAA,CAAE,IAAA,KAAS,MAAA,GAAS,UAAA,GAAa;AAAA;AACrC;AAAA,OACJ;AAAA,sBACAA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,+BAAA,EAAiC,YAAE,KAAA,EAAM;AAAA,KAAA,EAAA,EATjD,CAUV,CACH,CAAA,EACL;AAAA,GAAA,EACJ,CAAA;AAER;AClDA,IAAM,KAAA,GAAqC;AAAA,EACvC,GAAA,EAAK,KAAA;AAAA,EACL,OAAA,EAAS,YAAA;AAAA,EACT,SAAA,EAAW,SAAA;AAAA,EACX,EAAA,EAAI;AACR,CAAA;AAEA,IAAM,IAAA,GAAoC;AAAA,EACtC,GAAA,EAAK,qBAAA;AAAA,EACL,OAAA,EAAS,iBAAA;AAAA,EACT,SAAA,EAAW,uBAAA;AAAA,EACX,EAAA,EAAI;AACR,CAAA;AAOO,SAAS,UAAA,CAAW;AAAA,EACvB,IAAA;AAAA,EACA,aAAA,GAAgB,QAAA;AAAA,EAChB,WAAA,GAAc,MAAA;AAAA,EACd;AACJ,CAAA,EAKG;AACC,EAAA,uBACIM,eAAAA,CAAAC,mBAAAA,EAAA,EAGI,QAAA,EAAA;AAAA,oBAAAP,cAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACG,SAAA,EAAW,EAAA;AAAA,UACP,oHAAA;AAAA,UACA;AAAA,SACJ;AAAA,QAEC,QAAA,EAAA,IAAA,CAAK,IAAI,CAAC,CAAA,EAAG,sBACVM,eAAAA,CAAC,IAAA,EAAA,EAAW,SAAA,EAAU,mCAAA,EAClB,QAAA,EAAA;AAAA,0BAAAN,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,6BAAA,EAA+B,IAAA,CAAK,CAAA,CAAE,MAAM,CAAC,CAAA,EAAI,QAAA,EAAA,KAAA,CAAM,CAAA,CAAE,MAAM,CAAA,EAAE,CAAA;AAAA,0BACrFA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EAAoC,YAAE,IAAA,EAAK;AAAA,SAAA,EAAA,EAFtD,CAGT,CACH;AAAA;AAAA,KACL;AAAA,oBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,4EAAA,EAA8E,SAAS,CAAA,EACtG,QAAA,kBAAAM,eAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,kEAAA,EACb,QAAA,EAAA;AAAA,sBAAAN,eAAC,OAAA,EAAA,EAAM,SAAA,EAAU,mBAAA,EACb,QAAA,kBAAAM,gBAAC,IAAA,EAAA,EACG,QAAA,EAAA;AAAA,wBAAAN,eAAC,IAAA,EAAA,EAAG,KAAA,EAAM,KAAA,EAAM,SAAA,EAAU,kFACrB,QAAA,EAAA,aAAA,EACL,CAAA;AAAA,wBACAA,cAAAA,CAAC,IAAA,EAAA,EAAG,OAAM,KAAA,EAAM,SAAA,EAAU,wEACrB,QAAA,EAAA,WAAA,EACL;AAAA,OAAA,EACJ,CAAA,EACJ,CAAA;AAAA,sBACAA,cAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,WACZ,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACVM,eAAAA,CAAC,IAAA,EAAA,EAAW,WAAU,WAAA,EAClB,QAAA,EAAA;AAAA,wBAAAN,cAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACG,SAAA,EAAW,EAAA;AAAA,cACP,2DAAA;AAAA,cACA,MAAM,CAAA,IAAK,YAAA;AAAA,cACX,IAAA,CAAK,EAAE,MAAM;AAAA,aACjB;AAAA,YAEC,QAAA,EAAA,KAAA,CAAM,EAAE,MAAM;AAAA;AAAA,SACnB;AAAA,wBACAA,cAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACG,SAAA,EAAW,EAAA;AAAA,cACP,wEAAA;AAAA,cACA,MAAM,CAAA,IAAK;AAAA,aACf;AAAA,YAEC,QAAA,EAAA,CAAA,CAAE;AAAA;AAAA;AACP,OAAA,EAAA,EAjBK,CAkBT,CACH,CAAA,EACL;AAAA,KAAA,EACJ,CAAA,EACJ;AAAA,GAAA,EACJ,CAAA;AAER;ACxFA,IAAM,GAAA,GAAM,IAAI,IAAA,CAAK,YAAA,CAAa,SAAS,EAAE,qBAAA,EAAuB,GAAG,CAAA;AACvE,IAAM,OAAA,GAAU,IAAI,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS,EAAE,QAAA,EAAU,SAAA,EAAW,qBAAA,EAAuB,CAAA,EAAG,CAAA;AAYzF,SAAS,QAAA,CAAS,KAAA,EAAkC,IAAA,GAAwB,EAAC,EAAkB;AAClG,EAAA,IAAI,SAAS,IAAA,IAAQ,CAAC,OAAO,QAAA,CAAS,KAAK,GAAG,OAAO,IAAA;AACrD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC9B,EAAA,MAAM,IAAA,GAAA,CAAQ,KAAK,OAAA,GAAU,OAAA,GAAU,KAAK,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,KAAK,CAAC,CAAA;AAClE,EAAA,MAAM,IAAA,GAAO,QAAQ,CAAA,GAAI,QAAA,GAAM,KAAK,MAAA,IAAU,KAAA,GAAQ,IAAI,GAAA,GAAM,EAAA;AAChE,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,KAAS,MAAA,GAAS,KAAK,KAAA,KAAU,CAAA,IAAK,KAAA,KAAU,EAAA,GAAK,MAAA,GAAS,OAAA;AAChF,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,IAAI,GAAG,IAAI,CAAA,CAAA;AAChC;AAQO,SAAS,IAAA,CAAK,EAAE,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,OAAA,GAAU,QAAA,EAAK,SAAA,EAAW,GAAG,KAAA,EAAM,EAAc;AAClG,EAAA,MAAM,OAAO,QAAA,CAAS,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,EAAS,QAAQ,CAAA;AACtD,EAAA,IAAI,SAAS,IAAA,EAAM;AACf,IAAA,uBACIM,gBAAC,MAAA,EAAA,EAAK,SAAA,EAAW,GAAG,mCAAA,EAAqC,SAAS,CAAA,EAAI,GAAG,KAAA,EACrE,QAAA,EAAA;AAAA,sBAAAN,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAW,IAAA,EAAE,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,sBAC3BA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAU,QAAA,EAAA,SAAA,EAAO;AAAA,KAAA,EACrC,CAAA;AAAA,EAER;AACA,EAAA,uBACIA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,iCAAiC,SAAS,CAAA,EAAI,GAAG,KAAA,EAChE,QAAA,EAAA,IAAA,EACL,CAAA;AAER;AAGO,SAAS,SAAA,CAAU;AAAA,EACtB,IAAA;AAAA,EACA,SAAA;AAAA,EACA;AACJ,CAAA,EAIG;AACC,EAAA,IAAI,IAAA,IAAQ,IAAA,IAAQ,SAAA,IAAa,IAAA,IAAQ,CAAC,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,IAAK,CAAC,MAAA,CAAO,QAAA,CAAS,SAAS,GAAG,OAAO,IAAA;AACvG,EAAA,MAAM,GAAA,GAAO,OAAO,GAAA,GAAO,SAAA;AAE3B,EAAA,MAAM,IAAA,GACF,MAAM,CAAA,IAAK,GAAA,GAAM,OACX,SAAA,GACA,IAAI,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS;AAAA,IAC3B,KAAA,EAAO,UAAA;AAAA,IACP,QAAA,EAAU,KAAA;AAAA,IACV,qBAAA,EAAuB,CAAA;AAAA,IACvB,qBAAA,EAAuB;AAAA,GAC1B,CAAA,CAAE,MAAA,CAAO,GAAG,CAAA;AACvB,EAAA,uBAAOM,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAW,EAAA,CAAG,mCAAA,EAAqC,SAAS,CAAA,EAAG,QAAA,EAAA;AAAA,IAAA,SAAA;AAAA,IAAG;AAAA,GAAA,EAAK,CAAA;AACxF;AAGO,SAAS,UAAA,CAAW;AAAA,EACvB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP;AACJ,CAAA,EAOG;AACC,EAAA,uBACIA,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,uBAAA,EAAyB,SAAS,CAAA,EACjD,QAAA,EAAA;AAAA,oBAAAN,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wCAAA,EAA0C,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAChEM,eAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACG,SAAA,EAAW,EAAA;AAAA,UACP,aAAA;AAAA,UACA,IAAA,KAAS,OACH,+GAAA,GACA;AAAA,SACV;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAN,cAAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAc,IAAA,EAAK,MAAA,EAAO,CAAA;AAAA,0BAChCA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2DAA0D,QAAA,EAAA,MAAA,EAAI;AAAA;AAAA;AAAA,KAClF;AAAA,IACC,uBAAOA,cAAAA,CAAC,UAAK,SAAA,EAAU,uCAAA,EAAyC,gBAAK,CAAA,GAAU;AAAA,GAAA,EACpF,CAAA;AAER;ACrGO,SAAS,UAAA,CAAW,EAAE,SAAA,EAAW,KAAA,EAAO,UAAS,EAAuE;AAC3H,EAAA,uBACIA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA;AAAA;AAAA,QAEP,0FAAA;AAAA,QACA,sFAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACA,KAAA;AAAA,MAEA,QAAA,kBAAAM,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0EAAA,EACX,QAAA,EAAA;AAAA,wBAAAN,cAAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAW,IAAA,EAAC,WAAU,kGAAA,EAAmG,CAAA;AAAA,QAC7H;AAAA,OAAA,EACL;AAAA;AAAA,GACJ;AAER;AAGO,SAAS,YAAA,CAAa;AAAA,EACzB,GAAA,GAAM,UAAA;AAAA,EACN,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACJ,CAAA,EAKG;AACC,EAAA,uBACIM,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,+DAAA;AAAA,QACA,+CAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACA,KAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DAAA,EACX,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAW,IAAA,EAAC,WAAU,cAAA,EACvB,QAAA,EAAA;AAAA,4BAAAN,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EAAqC,CAAA;AAAA,4BACrDA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EAAqC,CAAA;AAAA,4BACrDA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EAAqC;AAAA,WAAA,EACzD,CAAA;AAAA,0BACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uIAAA,EACX,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAY,QAAA,EAAA,GAAA,EAAI,CAAA,EACpC,CAAA;AAAA,0BACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAW,IAAA,EAAC,WAAU,YAAA,EAAa;AAAA,SAAA,EAC7C,CAAA;AAAA,wBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAY,QAAA,EAAS;AAAA;AAAA;AAAA,GACxC;AAER;AAGO,SAAS,SAAA,CAAU;AAAA,EACtB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA,GAAQ,CAAA;AAAA,EACR,SAAA;AAAA,EACA;AACJ,CAAA,EAQG;AACC,EAAA,uBACIM,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,SAAA,EAAW,EAAA;AAAA,QACP,2HAAA;AAAA,QACA,+CAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACA,KAAA,EAAO,EAAE,cAAA,EAAgB,CAAA,EAAG,CAAC,KAAK,CAAA,CAAA,CAAA,EAAK,GAAG,KAAA,EAAM;AAAA,MAE/C,QAAA,EAAA;AAAA,QAAA,IAAA,mBACGN,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qGAAA,EACX,gBACL,CAAA,GACA,IAAA;AAAA,wBACJM,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EACZ,QAAA,EAAA;AAAA,0BAAAN,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2CAAA,EAA6C,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UAClE,yBAASA,cAAAA,CAAC,UAAK,SAAA,EAAU,sDAAA,EAAwD,kBAAO,CAAA,GAAU;AAAA,SAAA,EACvG;AAAA;AAAA;AAAA,GACJ;AAER;AC9FA,IAAM,OAAA,GAAU;AAAA,EACZ;AAAA,IACI,SAAA,EAAW,cAAA;AAAA,IACX,UAAA,EAAY,0EAAA;AAAA,IACZ,GAAA,EAAK;AAAA,GACT;AAAA,EACA;AAAA;AAAA,IAEI,SAAA,EAAW,4CAAA;AAAA,IACX,UAAA,EAAY,+CAAA;AAAA,IACZ,GAAA,EAAK;AAAA,GACT;AAAA,EACA;AAAA,IACI,SAAA,EAAW,cAAA;AAAA,IACX,UAAA,EAAY,oDAAA;AAAA,IACZ,GAAA,EAAK;AAAA;AAEb,CAAA;AAEA,IAAM,KAAA,GAAQ;AAAA,EACV,EAAA,EAAI,0CAAA;AAAA,EACJ,EAAA,EAAI,2CAAA;AAAA,EACJ,EAAA,EAAI;AACR,CAAA;AAGO,SAAS,eAAe,IAAA,EAAsB;AACjD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,eAAe,CAAA;AACxC,EAAA,OAAO,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,mBAAkB,GAAI,MAAA;AAClD;AAGO,SAAS,eAAe,IAAA,EAAsB;AACjD,EAAA,IAAI,CAAA,GAAI,UAAA;AACR,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AAClC,IAAA,CAAA,IAAK,IAAA,CAAK,WAAW,CAAC,CAAA;AACtB,IAAA,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,CAAA,EAAG,QAAU,CAAA;AAAA,EAC/B;AACA,EAAA,OAAA,CAAQ,CAAA,KAAM,KAAK,OAAA,CAAQ,MAAA;AAC/B;AAEO,SAAS,QAAA,CAAS;AAAA,EACrB,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,SAAA;AAAA,EACA;AACJ,CAAA,EAOG;AACC,EAAA,MAAM,MAAA,GAAS,QAAQ,cAAA,CAAe,IAAA,IAAQ,IAAI,CAAC,CAAA,IAAK,QAAQ,CAAC,CAAA;AACjE,EAAA,uBACIM,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACG,aAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA,QACP,qIAAA;AAAA,QACA,MAAM,IAAI,CAAA;AAAA,QACV,MAAA,CAAO,SAAA;AAAA,QACP;AAAA,OACJ;AAAA,MACA,OAAO,EAAE,UAAA,EAAY,MAAA,CAAO,UAAA,EAAY,GAAG,KAAA,EAAM;AAAA,MAEjD,QAAA,EAAA;AAAA,wBAAAN,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACG,SAAA,EAAU,kBAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACH,eAAA,EAAiB,CAAA,wBAAA,EAA2B,MAAA,CAAO,GAAG,CAAA,0BAAA,CAAA;AAAA,cACtD,cAAA,EAAgB,SAAA;AAAA,cAChB,SAAA,EAAW;AAAA;AACf;AAAA,SACJ;AAAA,wBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,UAAA,EAAY,QAAA,EAAA,cAAA,CAAe,IAAI,CAAA,EAAE;AAAA;AAAA;AAAA,GACrD;AAER","file":"components.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\n\n// tailwind-merge would treat `oca-display-1` and `text-foreground` as the same\n// group and drop one; teach it the package's own type utilities.\nconst merge = extendTailwindMerge<'oca-type'>({\n extend: {\n classGroups: {\n 'oca-type': [\n 'oca-display-1',\n 'oca-display-2',\n 'oca-display-3',\n 'oca-title',\n 'oca-title-sm',\n 'oca-eyebrow',\n 'oca-lead',\n 'oca-body',\n 'oca-numeral',\n ],\n },\n },\n});\n\nexport function cn(...inputs: ClassValue[]): string {\n return merge(clsx(inputs));\n}\n","import { createElement, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/** The small orange line above a heading (\"How it works\", \"The honest version\"). */\nexport function Eyebrow({ className, onInk, ...props }: HTMLAttributes<HTMLParagraphElement> & { onInk?: boolean }) {\n return <p className={cn('oca-eyebrow', onInk && 'text-oca-ink-eyebrow', className)} {...props} />;\n}\n\ntype DisplayLevel = 1 | 2 | 3;\n\nexport interface DisplayProps extends HTMLAttributes<HTMLHeadingElement> {\n /** Visual size. The element follows unless `as` says otherwise. */\n level?: DisplayLevel;\n as?: 'h1' | 'h2' | 'h3' | 'p';\n}\n\n/** Headlines: regular weight, tight, balanced. */\nexport function Display({ level = 2, as, className, ...props }: DisplayProps) {\n const tag = as ?? (`h${level}` as const);\n return createElement(tag, { className: cn(`oca-display-${level}`, className), ...props });\n}\n\n/** The one orange word (\"cost something *real*.\"). Display sizes only: as small\n * text this orange would fail contrast. */\nexport function Accent({ children, className }: { children: ReactNode; className?: string }) {\n return <span className={cn('text-oca-accent-display', className)}>{children}</span>;\n}\n\nexport function Lead({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return <p className={cn('oca-lead max-w-[40rem]', className)} {...props} />;\n}\n\n/** Fine print under a section (\"Who holds what today: …\"). */\nexport function Footnote({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return <p className={cn('text-[0.9375rem] text-muted-foreground', className)} {...props} />;\n}\n\n/**\n * Body copy for long-form pages: measured line length, calm rhythm. The\n * spacing rules skip anything inside `.not-prose`, so a Notice or card set in\n * the text keeps its own layout.\n */\nexport function Prose({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n 'max-w-[42rem] text-[1.0625rem] leading-[1.7] text-muted-foreground',\n '[&_h2:not(.not-prose_h2)]:oca-display-3 [&_h2:not(.not-prose_h2)]:mb-4 [&_h2:not(.not-prose_h2)]:mt-14 [&_h2]:scroll-mt-24 [&_h2]:text-foreground',\n '[&_h3:not(.not-prose_h3)]:oca-title [&_h3:not(.not-prose_h3)]:mb-3 [&_h3:not(.not-prose_h3)]:mt-10 [&_h3]:text-foreground',\n '[&_p:not(.not-prose_p)]:my-4 [&_strong]:font-medium [&_strong]:text-foreground',\n '[&_a]:text-foreground [&_a]:underline [&_a]:decoration-foreground/35 [&_a]:underline-offset-4 hover:[&_a]:decoration-foreground',\n '[&_ul:not(.not-prose_ul)]:my-4 [&_ul:not(.not-prose_ul)]:list-disc [&_ul:not(.not-prose_ul)]:pl-5 [&_li:not(.not-prose_li)]:my-1.5 [&_code]:text-foreground',\n className\n )}\n {...props}\n />\n );\n}\n","import {\n createElement,\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type ElementType,\n type ReactNode,\n} from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * Motion that tells the story and then gets out of the way. Everything here is\n * off under prefers-reduced-motion, does nothing without script, and costs\n * nothing while offscreen.\n */\n\nfunction prefersStill(): boolean {\n return typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/** True once the element has been on screen (or immediately without an observer). */\nexport function useInView<T extends Element>(rootMargin = '0px 0px -12% 0px') {\n const ref = useRef<T>(null);\n const [seen, setSeen] = useState(false);\n useEffect(() => {\n const el = ref.current;\n if (!el || seen) return;\n if (typeof IntersectionObserver === 'undefined') {\n setSeen(true);\n return;\n }\n const io = new IntersectionObserver(\n ([e]) => {\n if (e?.isIntersecting) {\n setSeen(true);\n io.disconnect();\n }\n },\n { rootMargin }\n );\n io.observe(el);\n return () => io.disconnect();\n }, [rootMargin, seen]);\n return [ref, seen] as const;\n}\n\n/**\n * Rise into place the first time it scrolls into view. Content already on\n * screen at load is left alone, so nothing above the fold flashes.\n */\nexport function Reveal({\n as = 'div',\n delay = 0,\n className,\n style,\n children,\n}: {\n as?: ElementType;\n /** Milliseconds, for staggering siblings. */\n delay?: number;\n className?: string;\n style?: CSSProperties;\n children: ReactNode;\n}) {\n const ref = useRef<HTMLElement>(null);\n useEffect(() => {\n const el = ref.current;\n if (!el || prefersStill() || typeof IntersectionObserver === 'undefined') return;\n if (el.getBoundingClientRect().top < window.innerHeight * 0.92) return;\n el.dataset.reveal = 'pending';\n const io = new IntersectionObserver(\n ([e]) => {\n if (e?.isIntersecting) {\n el.dataset.reveal = 'shown';\n io.disconnect();\n }\n },\n { rootMargin: '0px 0px -10% 0px' }\n );\n io.observe(el);\n return () => io.disconnect();\n }, []);\n return createElement(\n as,\n { ref, className, style: { ...style, '--reveal-delay': `${delay}ms` } as CSSProperties },\n children\n );\n}\n\n/**\n * A tall section whose content stays pinned while you scroll through it, and\n * sets `--p` from 0 to 1 on the way. Children read the variable in CSS, so the\n * scroll never re-renders React. Without script or with reduced motion, `--p`\n * stays 0 and the section is an ordinary block.\n */\nexport function ScrollStory({\n length = 2,\n className,\n innerClassName,\n children,\n}: {\n /** Height in viewports; the pinned part plays over (length − 1) of them. */\n length?: number;\n className?: string;\n innerClassName?: string;\n children: ReactNode;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n const [pinned, setPinned] = useState(false);\n useEffect(() => {\n const el = ref.current;\n if (!el || prefersStill()) return;\n setPinned(true);\n let raf = 0;\n const update = () => {\n raf = 0;\n const r = el.getBoundingClientRect();\n const travel = r.height - window.innerHeight;\n const p = travel > 0 ? Math.min(1, Math.max(0, -r.top / travel)) : 0;\n el.style.setProperty('--p', p.toFixed(4));\n };\n const on = () => {\n if (!raf) raf = requestAnimationFrame(update);\n };\n update();\n window.addEventListener('scroll', on, { passive: true });\n window.addEventListener('resize', on);\n return () => {\n cancelAnimationFrame(raf);\n window.removeEventListener('scroll', on);\n window.removeEventListener('resize', on);\n };\n }, []);\n return (\n <div ref={ref} className={cn('relative', className)} style={pinned ? { height: `${length * 100}svh` } : undefined}>\n <div className={cn(pinned && 'sticky top-0 flex min-h-svh items-center', innerClassName)}>{children}</div>\n </div>\n );\n}\n\n/** A number that counts up to its value the first time it is seen. */\nexport function Ticker({\n value,\n duration = 1200,\n format = (n) => Math.round(n).toLocaleString('en-US'),\n className,\n}: {\n value: number;\n duration?: number;\n format?: (n: number) => string;\n className?: string;\n}) {\n const [ref, seen] = useInView<HTMLSpanElement>();\n const [shown, setShown] = useState(value);\n // Count only a number that starts below the fold; one already on screen\n // keeps its value rather than flashing it, then zero, then counting.\n const animate = useRef<boolean | null>(null);\n useEffect(() => {\n const el = ref.current;\n if (!el || animate.current !== null) return;\n animate.current = !prefersStill() && el.getBoundingClientRect().top > window.innerHeight * 0.9;\n if (animate.current) setShown(0);\n }, [ref]);\n useEffect(() => {\n if (!seen) return;\n if (!animate.current) {\n setShown(value);\n return;\n }\n let raf = 0;\n const t0 = performance.now();\n const step = (now: number) => {\n const k = Math.min(1, (now - t0) / duration);\n setShown(value * (1 - Math.pow(1 - k, 3)));\n if (k < 1) raf = requestAnimationFrame(step);\n };\n raf = requestAnimationFrame(step);\n return () => cancelAnimationFrame(raf);\n }, [seen, value, duration]);\n return (\n <span ref={ref} className={cn('oca-tabular', className)}>\n {format(shown)}\n </span>\n );\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport type { HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Reveal } from './motion';\n\n/*\n * The deck alternates three grounds: the light canvas, the ink band and the\n * orange band. A section owns its ground edge to edge and its content sits in\n * the container. On the orange band text is ink, never white (2.9:1).\n */\n// overflow-x: clip, not hidden: decoration may not widen the page, and a sticky\n// child still sticks.\nexport const sectionVariants = cva('relative w-full overflow-x-clip', {\n variants: {\n tone: {\n canvas: 'bg-background text-foreground',\n card: 'bg-card text-card-foreground',\n // The band line is transparent in light; in dark it keeps the ink\n // band from melting into the canvas.\n ink: 'border-y border-[var(--oca-band-line)] bg-oca-ink text-oca-ink-foreground',\n brand: 'bg-brand text-brand-foreground',\n },\n space: {\n none: '',\n sm: 'py-12 md:py-16',\n md: 'oca-section',\n lg: 'py-24 md:py-40',\n },\n },\n defaultVariants: { tone: 'canvas', space: 'md' },\n});\n\nexport interface SectionProps extends HTMLAttributes<HTMLElement>, VariantProps<typeof sectionVariants> {\n /** Put children in the standard container. Default true. */\n contained?: boolean;\n}\n\nexport function Section({ tone, space, contained = true, className, children, ...props }: SectionProps) {\n return (\n <section className={cn(sectionVariants({ tone, space }), className)} {...props}>\n {contained ? <div className=\"oca-container\">{children}</div> : children}\n </section>\n );\n}\n\nexport function Container({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('oca-container', className)} {...props} />;\n}\n\n/**\n * Eyebrow + headline + lead, the opening of every deck slide. It rises into\n * place the first time it scrolls into view (`reveal={false}` to keep it still).\n */\nexport function SectionIntro({\n className,\n align = 'start',\n reveal = true,\n children,\n style,\n}: Pick<HTMLAttributes<HTMLDivElement>, 'className' | 'style' | 'children'> & {\n align?: 'start' | 'center';\n reveal?: boolean;\n}) {\n const cls = cn('flex flex-col gap-4 md:gap-5', align === 'center' && 'mx-auto items-center text-center', className);\n return reveal ? (\n <Reveal className={cls} style={style}>\n {children}\n </Reveal>\n ) : (\n <div className={cls} style={style}>\n {children}\n </div>\n );\n}\n","import { useEffect, useState, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Section } from './section';\n\n/*\n * The top of every public page. Two shapes:\n *\n * - `page` (default): the home page's register. Eyebrow, a display headline,\n * one line of lead, actions, and optional art beside it.\n * - `document`: for pages that are read top to bottom (privacy, terms,\n * security, changelog). A centred column with the same eyebrow and a\n * display headline that is always larger than the document's own h2s.\n */\nexport interface PageHeroProps {\n eyebrow?: ReactNode;\n title: ReactNode;\n /** One or two sentences. */\n lead?: ReactNode;\n actions?: ReactNode;\n /** Beside the text from md up; below it on a phone. `page` only. */\n art?: ReactNode;\n /** A line of fine print under the lead (\"Updated 15 October 2026\"). */\n meta?: ReactNode;\n /** Anything else under the actions: a status pill, a stat row. */\n children?: ReactNode;\n variant?: 'page' | 'document';\n /** `xl` is the home page's size; content pages default to `lg`. `page` only. */\n size?: 'lg' | 'xl';\n className?: string;\n}\n\nexport function PageHero({\n eyebrow,\n title,\n lead,\n actions,\n art,\n meta,\n children,\n variant = 'page',\n size = 'lg',\n className,\n}: PageHeroProps) {\n if (variant === 'document') {\n return (\n <Section space=\"none\" className={cn('pb-12 pt-12 md:pb-16 md:pt-20', className)}>\n <DocHeader className=\"mx-auto max-w-[42rem]\" {...{ eyebrow, title, lead, meta, actions }}>\n {children}\n </DocHeader>\n </Section>\n );\n }\n return (\n <Section space=\"none\" className={cn('pb-14 pt-12 md:pb-20 md:pt-20', className)}>\n <div className={cn('grid grid-cols-1 gap-10', art && 'items-center md:grid-cols-12')}>\n <div className={cn('flex flex-col items-start gap-6', art ? 'md:col-span-7' : 'max-w-[52rem]')}>\n {eyebrow ? <p className=\"oca-eyebrow oca-enter\">{eyebrow}</p> : null}\n <h1 className={cn(size === 'xl' ? 'oca-display-1' : 'oca-display-2', 'oca-enter [--enter-delay:70ms]')}>\n {title}\n </h1>\n {lead ? <p className=\"oca-lead oca-enter max-w-[38rem] [--enter-delay:150ms]\">{lead}</p> : null}\n {meta ? <p className=\"oca-enter text-[0.875rem] text-muted-foreground [--enter-delay:190ms]\">{meta}</p> : null}\n {actions ? <div className=\"oca-enter flex flex-wrap gap-3 [--enter-delay:230ms]\">{actions}</div> : null}\n {children ? <div className=\"oca-enter w-full [--enter-delay:270ms]\">{children}</div> : null}\n </div>\n {art ? <div className=\"oca-enter md:col-span-5 [--enter-delay:120ms]\">{art}</div> : null}\n </div>\n </Section>\n );\n}\n\n/**\n * A document's title block. PageHero's `document` variant wraps it in a band;\n * DocLayout's `header` takes it bare, so it lines up with the text below.\n */\nexport function DocHeader({\n eyebrow,\n title,\n lead,\n meta,\n actions,\n children,\n className,\n}: Pick<PageHeroProps, 'eyebrow' | 'title' | 'lead' | 'meta' | 'actions' | 'children' | 'className'>) {\n return (\n <div className={cn('flex flex-col gap-5', className)}>\n {eyebrow ? <p className=\"oca-eyebrow oca-enter\">{eyebrow}</p> : null}\n <h1 className=\"oca-display-2 oca-enter [--enter-delay:70ms]\">{title}</h1>\n {lead ? <p className=\"oca-lead\">{lead}</p> : null}\n {meta ? <p className=\"text-[0.875rem] text-muted-foreground\">{meta}</p> : null}\n {actions ? <div className=\"mt-1 flex flex-wrap gap-3\">{actions}</div> : null}\n {children}\n </div>\n );\n}\n\nexport interface TocItem {\n id: string;\n label: ReactNode;\n}\n\nfunction useActiveHeading(ids: string[]): string | undefined {\n const [active, setActive] = useState<string | undefined>(ids[0]);\n const key = ids.join('|');\n useEffect(() => {\n const els = key\n .split('|')\n .map((id) => document.getElementById(id))\n .filter((el): el is HTMLElement => el !== null);\n if (els.length === 0 || typeof IntersectionObserver === 'undefined') return;\n const io = new IntersectionObserver(\n (entries) => {\n const hit = entries.filter((e) => e.isIntersecting).sort((a, b) => a.boundingClientRect.top - b.boundingClientRect.top)[0];\n if (hit) setActive(hit.target.id);\n },\n { rootMargin: '-80px 0px -65% 0px' }\n );\n els.forEach((el) => io.observe(el));\n return () => io.disconnect();\n }, [key]);\n return active;\n}\n\n/**\n * A readable column for a long document, with its table of contents: a sticky\n * list beside it on desktop, a folded \"On this page\" above it on a phone. The\n * ids are the ids of the document's h2s. Pass the title as `header` (a\n * DocHeader) so it sits on the same column as the text.\n */\nexport function DocLayout({\n toc,\n header,\n children,\n className,\n}: {\n toc?: TocItem[];\n header?: ReactNode;\n children: ReactNode;\n className?: string;\n}) {\n const active = useActiveHeading(toc?.map((t) => t.id) ?? []);\n const links = () =>\n toc?.map((t) => (\n <li key={t.id}>\n <a\n href={`#${t.id}`}\n aria-current={active === t.id ? 'location' : undefined}\n className={cn(\n 'block border-l py-1.5 pl-4 text-[0.875rem] leading-snug transition-colors',\n active === t.id\n ? 'border-foreground text-foreground'\n : 'border-border text-muted-foreground hover:text-foreground'\n )}\n >\n {t.label}\n </a>\n </li>\n ));\n const hasToc = !!toc && toc.length > 0;\n return (\n <div className={cn('oca-container pb-24', header ? 'pt-12 md:pt-20' : null, className)}>\n <div\n className={cn(\n 'mx-auto grid grid-cols-1 gap-8',\n hasToc\n ? 'max-w-[42rem] lg:max-w-[64rem] lg:grid-cols-[13rem_minmax(0,42rem)] lg:gap-x-16 lg:gap-y-10'\n : 'max-w-[42rem]'\n )}\n >\n {header ? <div className={cn(hasToc && 'lg:col-start-2', 'pb-4')}>{header}</div> : null}\n {hasToc ? (\n <>\n <nav\n aria-label=\"On this page\"\n className={cn('sticky top-24 hidden self-start lg:block', header && 'lg:row-start-2')}\n >\n <p className=\"mb-3 text-[0.875rem] font-medium\">On this page</p>\n <ul>{links()}</ul>\n </nav>\n <details className=\"group rounded-2xl border border-border bg-card px-4 py-3 lg:hidden\">\n <summary className=\"cursor-pointer list-none text-[0.9375rem] font-medium marker:hidden\">\n On this page\n </summary>\n <ul className=\"mt-3\">{links()}</ul>\n </details>\n </>\n ) : null}\n <div className={cn('min-w-0', hasToc && 'lg:col-start-2', hasToc && header && 'lg:row-start-2')}>\n {children}\n </div>\n </div>\n </div>\n );\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport type { HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * The small white pill from the deck (\"in testing\", \"on the path\"). Three tones\n * carry meaning: neutral, the orange accent for attention, and red for a real\n * error. Text stays on the token that clears 4.5:1 against its tint.\n */\nconst GOOD_DOT =\n \"border-border bg-card text-foreground before:size-1.5 before:shrink-0 before:rounded-full before:bg-success before:content-['']\";\n\nexport const badgeVariants = cva(\n 'inline-flex h-6 shrink-0 items-center gap-1.5 whitespace-nowrap rounded-full border px-2.5 text-[0.8125rem] font-medium leading-none',\n {\n variants: {\n tone: {\n neutral: 'border-border bg-card text-foreground',\n muted: 'border-transparent bg-muted text-muted-foreground',\n brand: 'border-transparent bg-[color-mix(in_oklab,var(--oca-orange)_12%,var(--card))] text-oca-accent-ink',\n danger: 'border-transparent bg-[color-mix(in_oklab,var(--destructive)_12%,var(--card))] text-destructive',\n // A good state is a neutral pill with a green dot, not a green pill.\n success: GOOD_DOT,\n // Aliases kept so older call sites keep compiling: attention is\n // the brand accent, information is neutral.\n warning: 'border-transparent bg-[color-mix(in_oklab,var(--oca-orange)_12%,var(--card))] text-oca-accent-ink',\n info: 'border-border bg-card text-foreground',\n // Inverted in dark mode, where ink would sit on a card of nearly its own colour.\n ink: 'border-transparent bg-oca-ink text-oca-ink-foreground dark:bg-foreground dark:text-background',\n onInk: 'border-white/15 bg-white/5 text-white/90',\n },\n },\n defaultVariants: { tone: 'neutral' },\n }\n);\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {}\n\nexport function Badge({ className, tone, ...props }: BadgeProps) {\n return <span data-ui=\"badge\" className={cn(badgeVariants({ tone }), className)} {...props} />;\n}\n\n/** A pill with a live dot: where something stands right now (\"In testing · payouts start after\"). */\nexport function StatusPill({\n className,\n children,\n pulse = true,\n ...props\n}: HTMLAttributes<HTMLSpanElement> & { pulse?: boolean }) {\n return (\n <span\n data-ui=\"status-pill\"\n className={cn(\n 'inline-flex min-h-8 w-fit items-center gap-2.5 rounded-full border border-border bg-card py-1 pl-3 pr-3.5 text-[0.875rem] leading-snug text-foreground',\n className\n )}\n {...props}\n >\n <span aria-hidden className=\"relative flex size-2 shrink-0\">\n {pulse ? (\n <span className=\"absolute inset-0 rounded-full bg-oca-orange opacity-50 motion-safe:animate-ping\" />\n ) : null}\n <span className=\"relative size-2 rounded-full bg-oca-orange\" />\n </span>\n {children}\n </span>\n );\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * White on the canvas with one hairline and a generous radius; no shadow. The\n * `ink` card is the deck's #1E1E1E panel, dark in both modes.\n */\nexport const cardVariants = cva('relative rounded-[1.25rem] border', {\n variants: {\n tone: {\n default: 'border-border bg-card text-card-foreground',\n sunken: 'border-transparent bg-muted text-foreground',\n ink: 'border-oca-ink-line bg-oca-ink-card text-oca-ink-foreground',\n outline: 'border-border bg-transparent text-foreground',\n },\n padding: {\n none: '',\n sm: 'p-5',\n md: 'p-6 md:p-8',\n lg: 'p-8 md:p-10',\n },\n interactive: {\n true: 'transition-colors hover:border-oca-hairline-strong focus-within:border-oca-hairline-strong',\n false: '',\n },\n },\n defaultVariants: { tone: 'default', padding: 'md', interactive: false },\n});\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof cardVariants> {}\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n { className, tone, padding, interactive, ...props },\n ref\n) {\n return (\n <div ref={ref} data-ui=\"card\" className={cn(cardVariants({ tone, padding, interactive }), className)} {...props} />\n );\n});\n\nexport function CardHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('flex flex-col gap-2', className)} {...props} />;\n}\n\n/** The small \"01\" above a card title. */\nexport function CardNumeral({ className, ...props }: HTMLAttributes<HTMLSpanElement>) {\n return <span className={cn('oca-numeral block', className)} {...props} />;\n}\n\nexport function CardTitle({ className, ...props }: HTMLAttributes<HTMLHeadingElement>) {\n return <h3 className={cn('oca-title flex flex-wrap items-center gap-2.5', className)} {...props} />;\n}\n\nexport function CardDescription({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return <p className={cn('oca-body', className)} {...props} />;\n}\n\nexport function CardContent({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mt-5', className)} {...props} />;\n}\n\nexport function CardFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mt-6 flex flex-wrap items-center gap-3', className)} {...props} />;\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Badge } from '../primitives/badge';\nimport { Card, CardNumeral, CardTitle } from '../primitives/card';\n\nexport interface StepItem {\n title: ReactNode;\n body: ReactNode;\n /** A small pill beside the title (\"in testing\", \"on the path\"). */\n badge?: ReactNode;\n /** Overrides the automatic 01, 02, 03. */\n numeral?: ReactNode;\n}\n\nexport interface StepGridProps {\n items: StepItem[];\n /**\n * `cards` (white cards, \"Sign in. Earn. Own.\"), `plain` (open columns,\n * \"Ask for something a bot can't fake cheaply.\") or `ink` (dark cards,\n * \"Why partner now\"). Numerals are dropped on `ink`, as the deck does.\n */\n look?: 'cards' | 'plain' | 'ink';\n className?: string;\n}\n\nconst pad = (n: number) => String(n + 1).padStart(2, '0');\n\nexport function StepGrid({ items, look = 'cards', className }: StepGridProps) {\n const cols = items.length >= 3 ? 'md:grid-cols-3' : items.length === 2 ? 'md:grid-cols-2' : '';\n return (\n <ol className={cn('grid gap-4 md:gap-5', cols, className)}>\n {items.map((it, i) =>\n look === 'plain' ? (\n <li key={i} className=\"flex flex-col gap-3 pr-4\">\n <CardNumeral>{it.numeral ?? pad(i)}</CardNumeral>\n <CardTitle className=\"oca-title-sm\">\n {it.title}\n {it.badge ? <Badge>{it.badge}</Badge> : null}\n </CardTitle>\n <div className=\"oca-body text-[0.9375rem]\">{it.body}</div>\n </li>\n ) : look === 'ink' ? (\n <li key={i}>\n <Card tone=\"ink\" padding=\"md\" className=\"h-full\">\n <CardTitle className=\"text-oca-ink-title\">\n {it.title}\n {it.badge ? <Badge tone=\"onInk\">{it.badge}</Badge> : null}\n </CardTitle>\n <div className=\"mt-3 text-[1rem] leading-relaxed text-oca-ink-muted\">{it.body}</div>\n </Card>\n </li>\n ) : (\n <li key={i}>\n <Card padding=\"md\" className=\"flex h-full flex-col gap-3\">\n <CardNumeral>{it.numeral ?? pad(i)}</CardNumeral>\n <CardTitle>\n {it.title}\n {it.badge ? <Badge>{it.badge}</Badge> : null}\n </CardTitle>\n <div className=\"oca-body\">{it.body}</div>\n </Card>\n </li>\n )\n )}\n </ol>\n );\n}\n","import { useCallback, useEffect, useRef, useState, type HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * A horizontal scroller that says when there is more. Content that is wider\n * than its box scrolls instead of being clipped, and a soft edge appears on\n * whichever side hides something. Tables, code and tab bars all use it.\n */\nexport interface ScrollFadeProps extends HTMLAttributes<HTMLDivElement> {\n /** The colour under the scroller, as a CSS value; the edge fades to it. */\n fade?: string;\n /** Classes for the scrolling element itself. */\n innerClassName?: string;\n}\n\nexport function ScrollFade({ fade = 'var(--card)', className, innerClassName, children, ...props }: ScrollFadeProps) {\n const ref = useRef<HTMLDivElement>(null);\n const [edges, setEdges] = useState({ left: false, right: false });\n const measure = useCallback(() => {\n const el = ref.current;\n if (!el) return;\n const left = el.scrollLeft > 1;\n const right = el.scrollLeft + el.clientWidth < el.scrollWidth - 1;\n setEdges((e) => (e.left === left && e.right === right ? e : { left, right }));\n }, []);\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n measure();\n // Without ResizeObserver (old engines, jsdom) the edges still follow scrolling.\n if (typeof ResizeObserver === 'undefined') return;\n const ro = new ResizeObserver(measure);\n ro.observe(el);\n if (el.firstElementChild) ro.observe(el.firstElementChild);\n return () => ro.disconnect();\n }, [measure]);\n return (\n <div className={cn('relative min-w-0', className)} {...props}>\n <div ref={ref} onScroll={measure} className={cn('overflow-x-auto overscroll-x-contain', innerClassName)}>\n {children}\n </div>\n <span\n aria-hidden\n className={cn(\n 'pointer-events-none absolute inset-y-0 left-0 w-8 transition-opacity duration-150',\n edges.left ? 'opacity-100' : 'opacity-0'\n )}\n style={{ background: `linear-gradient(to right, ${fade}, transparent)` }}\n />\n <span\n aria-hidden\n className={cn(\n 'pointer-events-none absolute inset-y-0 right-0 w-10 transition-opacity duration-150',\n edges.right ? 'opacity-100' : 'opacity-0'\n )}\n style={{ background: `linear-gradient(to left, ${fade}, transparent)` }}\n />\n </div>\n );\n}\n","import { createContext, useContext } from 'react';\n\n/** Where the viewer is inside the signed-in shell: its section and page. */\nexport interface ShellPlace {\n section?: string;\n page?: string;\n}\n\nexport const ShellContext = createContext<ShellPlace>({});\n\nexport function useShellPlace(): ShellPlace {\n return useContext(ShellContext);\n}\n","import * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport {\n forwardRef,\n useEffect,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n} from 'react';\nimport { Toaster as SonnerToaster, type ToasterProps } from 'sonner';\n\nimport { cn } from '../lib/cn';\n\nexport function Spinner({ className, label }: { className?: string; label?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n role={label ? 'status' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n className={cn('size-4 animate-spin', className)}\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeOpacity=\"0.2\" strokeWidth=\"2.5\" />\n <path d=\"M21 12a9 9 0 0 0-9-9\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\n/** A placeholder bar, visible on the canvas and on a card in both modes. */\nexport function Skeleton({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-ui=\"skeleton\"\n className={cn('animate-pulse rounded-lg bg-[var(--oca-skeleton)]', className)}\n {...props}\n />\n );\n}\n\n/**\n * True once `active` has stayed true for `ms`. A loading state that never\n * ends reads as a broken page; pass this to show a way out instead.\n */\nexport function useTimedOut(active: boolean, ms = 12_000): boolean {\n const [timedOut, setTimedOut] = useState(false);\n useEffect(() => {\n if (!active) {\n setTimedOut(false);\n return;\n }\n const t = setTimeout(() => setTimedOut(true), ms);\n return () => clearTimeout(t);\n }, [active, ms]);\n return timedOut;\n}\n\nexport const Separator = forwardRef<\n ElementRef<typeof SeparatorPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(function Separator({ className, orientation = 'horizontal', decorative = true, ...props }, ref) {\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-px w-full' : 'h-full w-px',\n className\n )}\n {...props}\n />\n );\n});\n\nexport function Kbd({ className, ...props }: HTMLAttributes<HTMLElement>) {\n return (\n <kbd\n className={cn(\n 'inline-flex h-5 min-w-5 items-center justify-center rounded-md border border-border bg-card px-1.5 font-mono text-[11px] text-muted-foreground',\n className\n )}\n {...props}\n />\n );\n}\n\n/** Live-region status dot: a calm pulse for \"running\", solid otherwise. */\nexport function StatusDot({\n tone = 'neutral',\n pulse = false,\n className,\n}: {\n tone?: 'neutral' | 'success' | 'warning' | 'danger' | 'brand';\n pulse?: boolean;\n className?: string;\n}) {\n const color = {\n neutral: 'bg-oca-subtle',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-destructive',\n brand: 'bg-brand',\n }[tone];\n return (\n <span\n aria-hidden\n className={cn('inline-block size-2 shrink-0 rounded-full', color, pulse && 'oca-animate-pulse-dot', className)}\n />\n );\n}\n\n/** Toasts in the system's type and surfaces. Mount once. */\nexport function Toaster(props: ToasterProps) {\n return (\n <SonnerToaster\n position=\"bottom-right\"\n toastOptions={{\n classNames: {\n toast: 'oca-toast rounded-2xl border border-border bg-popover text-popover-foreground shadow-lg font-sans',\n title: 'text-[0.9375rem] font-medium',\n description: 'text-sm text-muted-foreground',\n actionButton: 'rounded-full bg-primary text-primary-foreground',\n cancelButton: 'rounded-full bg-muted text-foreground',\n },\n }}\n {...props}\n />\n );\n}\n\nexport { toast } from 'sonner';\n","import { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type ButtonHTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Spinner } from './feedback';\n\n/*\n * Pills, as the deck draws them: the black filled pill leads, the white\n * outlined pill follows. `brand` is for the orange band only; `onInk` and\n * `onInkOutline` are the same pair inverted for dark bands.\n */\nexport const buttonVariants = cva(\n [\n 'inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-full font-medium',\n 'transition-[background-color,border-color,color,box-shadow,transform] duration-150',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'active:translate-y-px disabled:pointer-events-none',\n // Disabled is one look for every variant: a quiet grey pill, never a\n // faded black or orange slab that reads as broken.\n 'disabled:border disabled:border-border disabled:bg-muted disabled:text-oca-subtle disabled:shadow-none',\n '[&_svg]:pointer-events-none [&_svg]:size-[1.1em] [&_svg]:shrink-0',\n ],\n {\n variants: {\n variant: {\n primary: 'bg-primary text-primary-foreground hover:bg-primary/85',\n secondary:\n 'border border-border bg-secondary text-secondary-foreground hover:border-oca-hairline-strong hover:bg-accent',\n brand: 'bg-brand text-brand-foreground hover:bg-oca-orange-deep',\n ghost: 'text-foreground hover:bg-accent',\n danger: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n link: 'h-auto rounded-none px-0 text-foreground underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground',\n onInk: 'bg-white text-oca-ink hover:bg-white/90',\n onInkOutline: 'border border-white/20 text-white hover:bg-white/10',\n },\n size: {\n sm: 'h-9 px-4 text-sm',\n md: 'h-11 px-5 text-[0.9375rem]',\n lg: 'h-14 px-7 text-[1.0625rem]',\n icon: 'size-10',\n 'icon-sm': 'size-8',\n },\n },\n compoundVariants: [{ variant: 'link', className: 'h-auto px-0' }],\n defaultVariants: { variant: 'primary', size: 'md' },\n }\n);\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /** Render the child element (a Link, an <a>) with the button's styles. */\n asChild?: boolean;\n /** Shows a spinner and disables the button. */\n loading?: boolean;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n { className, variant, size, asChild = false, loading = false, disabled, children, type, ...props },\n ref\n) {\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp\n ref={ref}\n data-ui=\"button\"\n className={cn(buttonVariants({ variant, size }), className)}\n disabled={asChild ? undefined : disabled || loading}\n aria-busy={loading || undefined}\n type={asChild ? undefined : (type ?? 'button')}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <>\n {loading ? <Spinner className=\"size-[1.1em]\" /> : null}\n {children}\n </>\n )}\n </Comp>\n );\n});\n","import { Check, Copy } from 'lucide-react';\nimport {\n Children,\n cloneElement,\n createContext,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nimport { cn } from '../lib/cn';\nimport { useShellPlace } from '../lib/shell-context';\nimport { Button } from '../primitives/button';\nimport { Skeleton, useTimedOut } from '../primitives/feedback';\nimport { ScrollFade } from '../primitives/scroll-fade';\n\n/* ── Page header ─────────────────────────────────────────────────────── */\n\n/**\n * The top of a signed-in page: section, page title, one sentence, actions.\n * Inside AppShell the eyebrow defaults to the current section, so every page\n * in a section opens at the same height. Pass `eyebrow={null}` to omit it.\n * Public pages use PageHero.\n */\nexport function PageHeader({\n eyebrow,\n title,\n description,\n actions,\n className,\n}: {\n eyebrow?: ReactNode;\n title: ReactNode;\n /** One sentence. Longer explanation belongs in the docs, not the header. */\n description?: ReactNode;\n actions?: ReactNode;\n className?: string;\n}) {\n const place = useShellPlace();\n const eb = eyebrow === undefined ? place.section : eyebrow;\n return (\n <header className={cn('flex flex-col gap-5 md:flex-row md:items-end md:justify-between', className)}>\n <div className=\"flex min-w-0 max-w-[44rem] flex-col gap-2.5\">\n {eb ? <p className=\"oca-eyebrow\">{eb}</p> : null}\n <h1 className=\"oca-display-3\">{title}</h1>\n {description ? <p className=\"oca-body max-w-[40rem] text-[1.0625rem]\">{description}</p> : null}\n </div>\n {actions ? <div className=\"flex flex-wrap items-center gap-2.5 md:shrink-0 md:justify-end\">{actions}</div> : null}\n </header>\n );\n}\n\n/* ── Stats ───────────────────────────────────────────────────────────── */\n\nconst InStatGrid = createContext(false);\n\nexport interface StatCardProps {\n label: ReactNode;\n value: ReactNode;\n hint?: ReactNode;\n /**\n * The number behind `value`, when there is one. StatGrid reads it: a grid\n * whose every `raw` is 0 or null shows one empty line instead of zeros.\n */\n raw?: number | null;\n className?: string;\n}\n\nexport function StatCard({ label, value, hint, className }: StatCardProps) {\n const inGrid = useContext(InStatGrid);\n return (\n <div\n data-ui=\"stat\"\n className={cn(\n 'rounded-[1.25rem] border border-border bg-card p-5 md:p-6',\n // In a grid, label, value and hint each share a row with their\n // neighbours, so values line up whatever wraps above them.\n inGrid ? 'row-span-3 grid grid-rows-subgrid gap-1.5' : 'flex flex-col gap-2',\n className\n )}\n >\n <span className=\"text-[0.875rem] leading-snug text-muted-foreground\">{label}</span>\n {/* Bottom-aligned within a grid row; a lone card keeps it under its label. */}\n <span\n className={cn(\n 'break-words oca-tabular text-[1.5rem] leading-tight tracking-[-0.02em] md:text-[1.75rem]',\n inGrid && 'self-end'\n )}\n >\n {value}\n </span>\n {hint ? (\n <span className=\"text-[0.8125rem] leading-snug text-muted-foreground\">{hint}</span>\n ) : inGrid ? (\n <span aria-hidden />\n ) : null}\n </div>\n );\n}\n\nconst MD_COLS: Record<number, string> = {\n 1: 'md:grid-cols-1',\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-4',\n};\nconst LG_COLS: Record<number, string> = {\n 1: 'lg:grid-cols-1',\n 2: 'lg:grid-cols-2',\n 3: 'lg:grid-cols-3',\n 4: 'lg:grid-cols-4',\n 5: 'lg:grid-cols-5',\n};\nconst MD_SPAN: Record<number, string> = {\n 1: 'md:col-span-1',\n 2: 'md:col-span-2',\n 3: 'md:col-span-3',\n 4: 'md:col-span-4',\n};\nconst LG_SPAN: Record<number, string> = {\n 1: 'lg:col-span-1',\n 2: 'lg:col-span-2',\n 3: 'lg:col-span-3',\n 4: 'lg:col-span-4',\n};\n\n/** Columns for n tiles: as few ragged rows as possible, never more than five. */\nfunction statColumns(n: number): number {\n if (n <= 5) return Math.max(1, n);\n if (n % 4 === 0) return 4;\n if (n % 3 === 0) return 3;\n return 4;\n}\n\n/** How wide the last tile must be to fill its row of `cols`. */\nfunction lastSpan(n: number, cols: number): number {\n const rest = n % cols;\n return rest === 0 ? 1 : cols - rest + 1;\n}\n\n/** One quiet line where a group of numbers would all be zero. */\nexport function EmptyLine({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <p\n className={cn(\n 'rounded-[1.25rem] border border-dashed border-oca-hairline-strong px-5 py-4 text-[0.9375rem] text-muted-foreground',\n className\n )}\n >\n {children}\n </p>\n );\n}\n\nexport interface StatGridProps extends HTMLAttributes<HTMLDivElement> {\n /** Columns from md up. Default: the count up to 4, then 3 or 4. */\n columns?: 1 | 2 | 3 | 4 | 5;\n /** Shown instead of the tiles when the group is empty. */\n empty?: ReactNode;\n /** Force the empty line. Default: every child's `raw` is 0 or null. */\n isEmpty?: boolean;\n}\n\n/**\n * Stat tiles, two to a row on a phone. The last tile stretches to fill its row,\n * so a grid never ends in a hole, and a group of zeros becomes one line.\n */\nexport function StatGrid({ columns, empty, isEmpty, className, children, ...props }: StatGridProps) {\n const items = Children.toArray(children).filter(isValidElement) as ReactElement<StatCardProps>[];\n const n = items.length;\n const allZero =\n n > 0 && items.every((el) => 'raw' in el.props && (el.props.raw === 0 || el.props.raw === null));\n if (isEmpty ?? allZero) return <EmptyLine className={className}>{empty ?? 'Nothing here yet.'}</EmptyLine>;\n const lg = columns ?? statColumns(n);\n // Five across is a desk-width row; a tablet gets three.\n const md = lg > 4 ? 3 : lg;\n const mdSpan = lastSpan(n, md);\n const lgSpan = lastSpan(n, lg);\n return (\n <InStatGrid.Provider value>\n <div\n className={cn(\n 'grid gap-3 md:gap-4',\n n === 1 ? 'grid-cols-1' : 'grid-cols-2',\n MD_COLS[md],\n LG_COLS[lg],\n className\n )}\n {...props}\n >\n {items.map((el, i) => {\n if (i !== n - 1) return el;\n const span = cn(\n n % 2 === 1 && n > 1 && 'max-md:col-span-2',\n (mdSpan > 1 || lgSpan > 1) && MD_SPAN[mdSpan],\n (mdSpan > 1 || lgSpan > 1) && LG_SPAN[lgSpan]\n );\n return span ? cloneElement(el, { className: cn(el.props.className, span) }) : el;\n })}\n </div>\n </InStatGrid.Provider>\n );\n}\n\n/* ── Key / value ─────────────────────────────────────────────────────── */\n\nexport interface KeyValueItem {\n label: ReactNode;\n value: ReactNode;\n mono?: boolean;\n}\n\nexport function KeyValueList({ items, className }: { items: KeyValueItem[]; className?: string }) {\n return (\n <dl className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card', className)}>\n {items.map((it, i) => (\n <div key={i} className=\"flex flex-col gap-1 px-5 py-3.5 sm:flex-row sm:items-baseline sm:gap-6\">\n <dt className=\"shrink-0 text-[0.875rem] text-muted-foreground sm:w-48\">{it.label}</dt>\n <dd className={cn('min-w-0 break-words text-[0.9375rem]', it.mono && 'font-mono text-[0.875rem]')}>\n {it.value}\n </dd>\n </div>\n ))}\n </dl>\n );\n}\n\n/* ── Table ───────────────────────────────────────────────────────────── */\n\nexport interface Column<T> {\n key: string;\n header: ReactNode;\n cell: (row: T) => ReactNode;\n align?: 'start' | 'end';\n /** A number: right-aligned, tabular, never wrapped. */\n numeric?: boolean;\n /** Hide below md in the table (the phone card list still shows it). */\n wide?: boolean;\n /** A CSS width for the column, e.g. '12rem' or '30%'. */\n width?: string;\n /** The narrowest it may get before the table scrolls instead. */\n minWidth?: string;\n /** Cut long content to one line (put the full value in a title or HashChip). */\n truncate?: boolean;\n /** The phone card's title. Defaults to the first column. */\n primary?: boolean;\n /** Leave out of the phone card list. */\n hideOnPhone?: boolean;\n}\n\n/**\n * Rows of data. Wider than its box, the table scrolls with an edge that says\n * so; under 640px it becomes a list of cards that keep every column's label.\n */\nexport function DataTable<T>({\n columns,\n rows,\n rowKey,\n empty,\n caption,\n phone = 'cards',\n className,\n}: {\n columns: Column<T>[];\n rows: T[];\n rowKey: (row: T, i: number) => string;\n empty?: ReactNode;\n caption?: string;\n /** Under 640px: a card per row (default), or the same table scrolling. */\n phone?: 'cards' | 'scroll';\n className?: string;\n}) {\n if (rows.length === 0 && empty) return <>{empty}</>;\n const primary = columns.find((c) => c.primary) ?? columns[0];\n const right = (c: Column<T>) => c.numeric || c.align === 'end';\n const table = (\n <div\n className={cn(\n 'overflow-hidden rounded-[1.25rem] border border-border bg-card',\n phone === 'cards' && 'max-sm:hidden',\n className\n )}\n >\n <ScrollFade fade=\"var(--card)\">\n <table className=\"w-full border-collapse text-left text-[0.9375rem]\">\n {caption ? <caption className=\"sr-only\">{caption}</caption> : null}\n <thead>\n <tr className=\"border-b border-border\">\n {columns.map((c) => (\n <th\n key={c.key}\n scope=\"col\"\n style={{ width: c.width, minWidth: c.minWidth }}\n className={cn(\n 'whitespace-nowrap px-5 py-3 text-[0.8125rem] font-medium text-muted-foreground',\n right(c) && 'text-right',\n c.wide && 'hidden md:table-cell'\n )}\n >\n {c.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {rows.map((r, i) => (\n <tr key={rowKey(r, i)} className=\"transition-colors hover:bg-accent/60\">\n {columns.map((c) => (\n <td\n key={c.key}\n style={{ minWidth: c.minWidth }}\n className={cn(\n 'px-5 py-3.5 align-middle',\n right(c) && 'text-right',\n c.numeric && 'whitespace-nowrap oca-tabular',\n c.wide && 'hidden md:table-cell'\n )}\n >\n {c.truncate ? (\n <div className=\"truncate\" style={{ maxWidth: c.width ?? '16rem' }}>\n {c.cell(r)}\n </div>\n ) : (\n c.cell(r)\n )}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </ScrollFade>\n </div>\n );\n if (phone !== 'cards') return table;\n const rest = columns.filter((c) => c !== primary && !c.hideOnPhone);\n return (\n <>\n {table}\n <ul\n aria-label={caption}\n className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card sm:hidden', className)}\n >\n {rows.map((r, i) => (\n <li key={rowKey(r, i)} className=\"flex flex-col gap-2.5 px-4 py-4\">\n <div className=\"min-w-0 break-words text-[0.9375rem] font-medium\">{primary?.cell(r)}</div>\n {rest.length > 0 ? (\n <dl className=\"grid grid-cols-[minmax(5.5rem,auto)_minmax(0,1fr)] gap-x-4 gap-y-1.5 text-[0.875rem]\">\n {rest.map((c) => (\n <div key={c.key} className=\"contents\">\n <dt className=\"text-muted-foreground\">{c.header}</dt>\n <dd className={cn('min-w-0 break-words', c.numeric && 'oca-tabular')}>{c.cell(r)}</dd>\n </div>\n ))}\n </dl>\n ) : null}\n </li>\n ))}\n </ul>\n </>\n );\n}\n\n/* ── Empty, notice ───────────────────────────────────────────────────── */\n\nexport function EmptyState({\n title,\n children,\n action,\n icon,\n className,\n}: {\n title: ReactNode;\n children?: ReactNode;\n action?: ReactNode;\n /** An icon that says what is missing. None by default: the words carry it. */\n icon?: ReactNode;\n className?: string;\n}) {\n return (\n <div\n className={cn(\n 'flex flex-col items-center gap-3 rounded-[1.25rem] border border-dashed border-oca-hairline-strong px-6 py-10 text-center',\n className\n )}\n >\n {icon ? (\n <span className=\"mb-1 flex size-11 items-center justify-center rounded-full bg-muted text-muted-foreground [&_svg]:size-5\">\n {icon}\n </span>\n ) : null}\n <h3 className=\"oca-title-sm\">{title}</h3>\n {children ? <div className=\"oca-body max-w-md text-[0.9375rem]\">{children}</div> : null}\n {action ? <div className=\"mt-2 flex flex-wrap justify-center gap-3\">{action}</div> : null}\n </div>\n );\n}\n\n/*\n * Three kinds of notice: neutral, the orange accent for something that needs\n * attention, and red for a real error. The old tone names still compile and\n * land on one of the three, so no page can add a fourth colour.\n */\ntype NoticeTone = 'neutral' | 'brand' | 'danger' | 'info' | 'success' | 'warning';\n\nconst NOTICE_KIND: Record<NoticeTone, 'neutral' | 'brand' | 'danger'> = {\n neutral: 'neutral',\n info: 'neutral',\n success: 'neutral',\n brand: 'brand',\n warning: 'brand',\n danger: 'danger',\n};\n\nexport function Notice({\n tone = 'neutral',\n title,\n children,\n action,\n className,\n}: {\n tone?: NoticeTone;\n title?: ReactNode;\n children?: ReactNode;\n action?: ReactNode;\n className?: string;\n}) {\n const kind = NOTICE_KIND[tone];\n return (\n <div\n role={tone === 'danger' || tone === 'warning' ? 'alert' : 'note'}\n data-tone={kind}\n className={cn(\n 'flex flex-col gap-3 rounded-2xl border border-border bg-card px-5 py-4 sm:flex-row sm:items-start sm:justify-between',\n kind === 'danger' && 'border-[color-mix(in_oklab,var(--destructive)_40%,var(--border))]',\n className\n )}\n >\n <div className=\"flex min-w-0 gap-3\">\n {kind !== 'neutral' ? (\n <span\n aria-hidden\n className={cn(\n 'mt-[0.45rem] size-2 shrink-0 rounded-full',\n kind === 'brand' ? 'bg-oca-orange' : 'bg-destructive'\n )}\n />\n ) : null}\n <div className=\"flex min-w-0 flex-col gap-1\">\n {title ? (\n <p className={cn('text-[0.9375rem] font-medium', kind === 'danger' && 'text-destructive')}>\n {title}\n </p>\n ) : null}\n {children ? <div className=\"text-[0.9375rem] leading-relaxed text-muted-foreground\">{children}</div> : null}\n </div>\n </div>\n {action ? <div className=\"shrink-0\">{action}</div> : null}\n </div>\n );\n}\n\n/**\n * Placeholder rows while something loads, and a way out if it never does:\n * after `timeoutMs` the skeleton turns into a message with a retry.\n */\nexport function LoadingBlock({\n rows = 3,\n timeoutMs = 12_000,\n onRetry,\n label = 'Loading',\n className,\n}: {\n rows?: number;\n timeoutMs?: number;\n onRetry?: () => void;\n label?: string;\n className?: string;\n}) {\n const timedOut = useTimedOut(true, timeoutMs);\n if (timedOut) {\n return (\n <Notice\n className={className}\n title=\"This is taking longer than it should.\"\n action={\n <Button size=\"sm\" variant=\"secondary\" onClick={onRetry ?? (() => window.location.reload())}>\n Try again\n </Button>\n }\n >\n Check your connection, then try again.\n </Notice>\n );\n }\n return (\n <div role=\"status\" aria-label={label} className={cn('flex flex-col gap-3', className)}>\n {Array.from({ length: rows }, (_, i) => (\n <Skeleton key={i} className=\"h-16 rounded-2xl\" />\n ))}\n </div>\n );\n}\n\n/* ── Hashes, addresses, ids ──────────────────────────────────────────── */\n\nfunction middle(v: string, head: number, tail: number) {\n return v.length <= head + tail + 1 ? v : `${v.slice(0, head)}…${v.slice(-tail)}`;\n}\n\nexport function useCopy(timeoutMs = 1600) {\n const [copied, setCopied] = useState(false);\n const t = useRef<ReturnType<typeof setTimeout> | null>(null);\n useEffect(() => () => {\n if (t.current) clearTimeout(t.current);\n }, []);\n const copy = useCallback(\n async (text: string) => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n if (t.current) clearTimeout(t.current);\n t.current = setTimeout(() => setCopied(false), timeoutMs);\n } catch {\n setCopied(false);\n }\n },\n [timeoutMs]\n );\n return { copied, copy };\n}\n\nexport function CopyButton({ value, label = 'Copy', className }: { value: string; label?: string; className?: string }) {\n const { copied, copy } = useCopy();\n return (\n <button\n type=\"button\"\n onClick={() => void copy(value)}\n aria-label={copied ? 'Copied' : label}\n className={cn(\n 'inline-flex size-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground',\n className\n )}\n >\n {copied ? <Check className=\"size-4 text-success\" /> : <Copy className=\"size-4\" />}\n <span aria-live=\"polite\" className=\"sr-only\">\n {copied ? 'Copied' : ''}\n </span>\n </button>\n );\n}\n\n/** A long identifier shown as head…tail in mono, with copy. The full value is\n * the title and the copied text, never lost to the truncation. */\nexport function HashChip({\n value,\n head = 8,\n tail = 6,\n copy = true,\n href,\n className,\n}: {\n value: string;\n head?: number;\n tail?: number;\n copy?: boolean;\n href?: string;\n className?: string;\n}) {\n const shown = middle(value, head, tail);\n const text = (\n <span title={value} className=\"font-mono text-[0.875rem]\">\n {shown}\n </span>\n );\n return (\n <span className={cn('inline-flex max-w-full items-center gap-1', className)}>\n {href ? (\n <a href={href} className=\"underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground\">\n {text}\n </a>\n ) : (\n text\n )}\n {copy ? <CopyButton value={value} label=\"Copy full value\" /> : null}\n </span>\n );\n}\n\n/* ── Progress ────────────────────────────────────────────────────────── */\n\nexport type StepState = 'done' | 'current' | 'upcoming' | 'blocked';\n\nexport interface ProgressStep {\n label: ReactNode;\n hint?: ReactNode;\n state: StepState;\n}\n\nexport function ProgressSteps({ steps, className }: { steps: ProgressStep[]; className?: string }) {\n return (\n <ol className={cn('flex flex-col gap-0', className)}>\n {steps.map((s, i) => {\n const last = i === steps.length - 1;\n return (\n <li key={i} className=\"relative flex gap-4 pb-6 last:pb-0\" aria-current={s.state === 'current' ? 'step' : undefined}>\n {!last ? (\n <span\n aria-hidden\n className={cn(\n 'absolute left-[11px] top-7 h-[calc(100%-1.5rem)] w-px',\n s.state === 'done' ? 'bg-foreground/30' : 'bg-border'\n )}\n />\n ) : null}\n <span\n className={cn(\n 'relative z-10 mt-0.5 flex size-6 shrink-0 items-center justify-center rounded-full border text-[0.75rem] oca-tabular',\n s.state === 'done' && 'border-primary bg-primary text-primary-foreground',\n s.state === 'current' && 'border-brand bg-card text-oca-accent-ink',\n s.state === 'upcoming' && 'border-border bg-card text-muted-foreground',\n s.state === 'blocked' && 'border-destructive bg-card text-destructive'\n )}\n >\n {s.state === 'done' ? <Check className=\"size-3.5\" strokeWidth={3} /> : String(i + 1).padStart(2, '0')}\n </span>\n <div className=\"flex min-w-0 flex-col gap-1\">\n <span className={cn('text-[0.9375rem]', s.state === 'upcoming' ? 'text-muted-foreground' : 'font-medium')}>\n {s.label}\n </span>\n {s.hint ? <span className=\"text-[0.875rem] leading-snug text-muted-foreground\">{s.hint}</span> : null}\n </div>\n </li>\n );\n })}\n </ol>\n );\n}\n\n/* ── Activity ────────────────────────────────────────────────────────── */\n\nexport interface ActivityItem {\n id: string;\n title: ReactNode;\n meta?: ReactNode;\n /** A small mark before the text, such as a Monogram. */\n leading?: ReactNode;\n trailing?: ReactNode;\n href?: string;\n}\n\nexport function ActivityList({ items, empty, className }: { items: ActivityItem[]; empty?: ReactNode; className?: string }) {\n if (items.length === 0 && empty) return <>{empty}</>;\n return (\n <ul className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card', className)}>\n {items.map((it) => {\n const body = (\n <div className=\"flex items-center justify-between gap-4 px-5 py-4\">\n <div className=\"flex min-w-0 items-center gap-3\">\n {it.leading ? <div className=\"shrink-0\">{it.leading}</div> : null}\n <div className=\"flex min-w-0 flex-col gap-0.5\">\n <span className=\"truncate text-[0.9375rem]\">{it.title}</span>\n {it.meta ? <span className=\"truncate text-[0.8125rem] text-muted-foreground\">{it.meta}</span> : null}\n </div>\n </div>\n {it.trailing ? <div className=\"shrink-0 text-right\">{it.trailing}</div> : null}\n </div>\n );\n return (\n <li key={it.id}>\n {it.href ? (\n <a href={it.href} className=\"block transition-colors hover:bg-accent/60\">\n {body}\n </a>\n ) : (\n body\n )}\n </li>\n );\n })}\n </ul>\n );\n}\n","import { useState, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { ScrollFade } from '../primitives/scroll-fade';\nimport { CopyButton } from './data';\n\n/*\n * The deck's \"What you get\" panel: a dark card of packages, each a peach title,\n * a coloured identifier and a // comment. The identifier's colour says what it\n * is, the way an editor would: a package, a component tag, a licence link.\n */\nexport interface PackageItem {\n title: ReactNode;\n /** The thing itself: an npm name, a JSX tag, a licence line. */\n code: ReactNode;\n kind?: 'package' | 'tag' | 'link';\n /** Rendered after `// `. */\n note?: ReactNode;\n href?: string;\n}\n\nconst KIND = {\n package: 'text-oca-code-package',\n tag: 'text-oca-code-tag',\n link: 'text-oca-code-link',\n} as const;\n\nexport function PackageCard({ items, className }: { items: PackageItem[]; className?: string }) {\n return (\n <div\n className={cn(\n 'grid gap-x-10 gap-y-7 rounded-[1.25rem] border border-oca-ink-line bg-oca-ink-card p-6 text-oca-ink-foreground md:grid-cols-2 md:p-9',\n className\n )}\n >\n {items.map((it, i) => {\n // Sou sets identifiers in the text face, not mono: they read as names here.\n const code = <span className={cn('text-[0.9375rem]', KIND[it.kind ?? 'package'])}>{it.code}</span>;\n return (\n <div key={i} className=\"flex min-w-0 flex-col gap-1.5\">\n <h3 className=\"text-[1.125rem] font-semibold tracking-[-0.01em] text-oca-ink-title\">{it.title}</h3>\n {it.href ? (\n <a href={it.href} className=\"w-fit underline decoration-transparent underline-offset-4 hover:decoration-current\">\n {code}\n </a>\n ) : (\n code\n )}\n {it.note ? (\n <p className=\"text-[0.9375rem] leading-relaxed text-oca-ink-subtle\">\n <span aria-hidden>{'// '}</span>\n {it.note}\n </p>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n}\n\n/**\n * A block of code: a header with its name and a copy button, then the code on\n * a dark well that scrolls sideways (with an edge that says so) rather than\n * cutting a line off. Past `maxLines` it folds, with a button to show the rest.\n */\nexport function CodeBlock({\n code,\n caption,\n copy = true,\n maxLines,\n className,\n}: {\n code: string;\n /** The file, language or purpose. Defaults to \"Code\". */\n caption?: ReactNode;\n copy?: boolean;\n maxLines?: number;\n className?: string;\n}) {\n const lines = code.split('\\n').length;\n const foldable = maxLines !== undefined && lines > maxLines + 2;\n const [open, setOpen] = useState(false);\n const folded = foldable && !open;\n return (\n <figure\n className={cn(\n 'overflow-hidden rounded-[1.25rem] border border-[var(--oca-code-line)] bg-[var(--oca-code-surface)]',\n className\n )}\n >\n <figcaption className=\"flex h-11 items-center justify-between gap-3 border-b border-[var(--oca-code-line)] pl-5 pr-2\">\n <span className=\"truncate text-[0.8125rem] text-oca-ink-subtle\">{caption ?? 'Code'}</span>\n {copy ? (\n <CopyButton\n value={code}\n label=\"Copy code\"\n className=\"text-oca-ink-subtle hover:bg-white/10 hover:text-white\"\n />\n ) : null}\n </figcaption>\n <div className=\"relative\">\n <div\n className={cn(folded && 'overflow-hidden')}\n style={folded ? { maxHeight: `calc(${maxLines} * 1.625em + 2.5rem)` } : undefined}\n >\n <ScrollFade fade=\"var(--oca-code-surface)\">\n <pre className=\"w-max min-w-full p-5 font-mono text-[0.875rem] leading-[1.625] text-oca-ink-muted [font-variant-ligatures:none]\">\n <code>{code}</code>\n </pre>\n </ScrollFade>\n </div>\n {foldable ? (\n <div\n className={cn(\n 'flex justify-center px-5 pb-4',\n folded && 'absolute inset-x-0 bottom-0 pt-16'\n )}\n style={\n folded\n ? { background: 'linear-gradient(to top, var(--oca-code-surface) 40%, transparent)' }\n : undefined\n }\n >\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className=\"rounded-full border border-white/20 px-4 py-1.5 text-[0.8125rem] text-white transition-colors hover:bg-white/10\"\n >\n {open ? 'Show less' : `Show all ${lines} lines`}\n </button>\n </div>\n ) : null}\n </div>\n </figure>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * Where a payment goes, as one bar: each segment's width is its share. Made for\n * the orange band (\"What it costs\"), where ink and white both clear contrast.\n */\nexport interface SplitSegment {\n pct: number;\n label: ReactNode;\n tone?: 'ink' | 'card';\n}\n\nexport function SplitBar({\n segments,\n caption,\n className,\n}: {\n segments: SplitSegment[];\n caption?: ReactNode;\n className?: string;\n}) {\n return (\n <figure className={cn('flex flex-col gap-5', className)}>\n {caption ? <figcaption className=\"text-[0.9375rem]\">{caption}</figcaption> : null}\n <div className=\"flex h-16 w-full gap-1.5 overflow-hidden rounded-[1.25rem] md:h-20\">\n {segments.map((s, i) => (\n <div\n key={i}\n className={cn(\n 'flex min-w-[4.25rem] items-end rounded-[1rem] px-3 pb-2.5 md:px-4 md:pb-3',\n s.tone === 'card' ? 'bg-white text-oca-ink' : 'bg-oca-ink text-white'\n )}\n style={{ flexBasis: `${s.pct}%` }}\n >\n <span\n // One size for every figure, so they sit on one line; it fits a segment at its min width.\n className=\"oca-tabular text-[1.125rem] leading-none tracking-[-0.02em] md:text-[1.5rem]\"\n >\n {s.pct}%\n </span>\n </div>\n ))}\n </div>\n <dl className=\"grid gap-x-8 gap-y-2 sm:grid-cols-2\">\n {segments.map((s, i) => (\n <div key={i} className=\"flex items-baseline gap-2.5\">\n <dt className=\"sr-only\">{s.pct}%</dt>\n <span\n aria-hidden\n className={cn(\n 'inline-block size-2.5 shrink-0 translate-y-[-1px] rounded-full',\n s.tone === 'card' ? 'bg-white' : 'bg-oca-ink'\n )}\n />\n <dd className=\"text-[0.9375rem] leading-snug\">{s.label}</dd>\n </div>\n ))}\n </dl>\n </figure>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * \"What's true today.\" A two-column table: a status and what it covers. Sou's\n * note on the slide is the brief for this component: say it plainly; being\n * clear about what isn't done yet is part of the pitch. So the statuses are\n * fixed words, never icons, and a row cannot be written without one.\n */\nexport type TruthStatus = 'yes' | 'testing' | 'not-yet' | 'no';\n\nconst LABEL: Record<TruthStatus, string> = {\n yes: 'Yes',\n testing: 'In testing',\n 'not-yet': 'Not yet',\n no: 'No',\n};\n\nconst TONE: Record<TruthStatus, string> = {\n yes: 'text-oca-accent-ink',\n testing: 'text-foreground',\n 'not-yet': 'text-muted-foreground',\n no: 'text-muted-foreground',\n};\n\nexport interface TruthRow {\n status: TruthStatus;\n what: ReactNode;\n}\n\nexport function TruthTable({\n rows,\n statusHeading = 'Status',\n whatHeading = 'What',\n className,\n}: {\n rows: TruthRow[];\n statusHeading?: string;\n whatHeading?: string;\n className?: string;\n}) {\n return (\n <>\n {/* Under 640px a two-column table squeezes the text to a few words a\n line, so each row becomes a status over its sentence. */}\n <ul\n className={cn(\n 'divide-y divide-oca-hairline-strong overflow-hidden rounded-xl border border-oca-hairline-strong bg-card sm:hidden',\n className\n )}\n >\n {rows.map((r, i) => (\n <li key={i} className=\"flex flex-col gap-1.5 px-4 py-3.5\">\n <span className={cn('text-[0.875rem] font-medium', TONE[r.status])}>{LABEL[r.status]}</span>\n <span className=\"text-[0.9375rem] leading-relaxed\">{r.what}</span>\n </li>\n ))}\n </ul>\n <div className={cn('overflow-hidden rounded-xl border border-oca-hairline-strong max-sm:hidden', className)}>\n <table className=\"w-full border-collapse text-left text-[0.9375rem] md:text-[1rem]\">\n <thead className=\"bg-oca-table-head\">\n <tr>\n <th scope=\"col\" className=\"w-[30%] border-b border-oca-hairline-strong px-4 py-3 font-semibold md:w-[22%]\">\n {statusHeading}\n </th>\n <th scope=\"col\" className=\"border-b border-l border-oca-hairline-strong px-4 py-3 font-semibold\">\n {whatHeading}\n </th>\n </tr>\n </thead>\n <tbody className=\"bg-card\">\n {rows.map((r, i) => (\n <tr key={i} className=\"align-top\">\n <td\n className={cn(\n 'border-t border-oca-hairline-strong px-4 py-3 font-medium',\n i === 0 && 'border-t-0',\n TONE[r.status]\n )}\n >\n {LABEL[r.status]}\n </td>\n <td\n className={cn(\n 'border-l border-t border-oca-hairline-strong px-4 py-3 leading-relaxed',\n i === 0 && 'border-t-0'\n )}\n >\n {r.what}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </>\n );\n}\n","import type { HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * Sats, always as whole integers with tabular figures. An amount nobody has\n * measured renders as \"—\" with \"unknown\" for screen readers, never as 0: a\n * missing balance shown as zero is a false statement about someone's money.\n */\n\nconst INT = new Intl.NumberFormat('en-US', { maximumFractionDigits: 0 });\nconst COMPACT = new Intl.NumberFormat('en-US', { notation: 'compact', maximumFractionDigits: 1 });\n\nexport interface SatsTextOptions {\n /** Append \" sats\" (default) or nothing. */\n unit?: 'sats' | 'none';\n /** 1.2K, 3.4M. For dense tables and charts only. */\n compact?: boolean;\n /** Prefix + for positive amounts (credits). */\n signed?: boolean;\n}\n\n/** A sats amount as text. Returns null for an unknown amount. */\nexport function satsText(value: number | null | undefined, opts: SatsTextOptions = {}): string | null {\n if (value == null || !Number.isFinite(value)) return null;\n const whole = Math.trunc(value);\n const body = (opts.compact ? COMPACT : INT).format(Math.abs(whole));\n const sign = whole < 0 ? '−' : opts.signed && whole > 0 ? '+' : '';\n const unit = opts.unit === 'none' ? '' : whole === 1 || whole === -1 ? ' sat' : ' sats';\n return `${sign}${body}${unit}`;\n}\n\nexport interface SatsProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'>, SatsTextOptions {\n value: number | null | undefined;\n /** What to show for an unknown amount. */\n unknown?: string;\n}\n\nexport function Sats({ value, unit, compact, signed, unknown = '—', className, ...props }: SatsProps) {\n const text = satsText(value, { unit, compact, signed });\n if (text === null) {\n return (\n <span className={cn('oca-tabular text-muted-foreground', className)} {...props}>\n <span aria-hidden>{unknown}</span>\n <span className=\"sr-only\">unknown</span>\n </span>\n );\n }\n return (\n <span className={cn('oca-tabular whitespace-nowrap', className)} {...props}>\n {text}\n </span>\n );\n}\n\n/** \"≈ $12.34\" beside an amount, when a price is known. Renders nothing otherwise. */\nexport function UsdApprox({\n sats,\n usdPerBtc,\n className,\n}: {\n sats: number | null | undefined;\n usdPerBtc: number | null | undefined;\n className?: string;\n}) {\n if (sats == null || usdPerBtc == null || !Number.isFinite(sats) || !Number.isFinite(usdPerBtc)) return null;\n const usd = (sats / 1e8) * usdPerBtc;\n // Cents, never fractions of one: under half a cent says so instead of \"$0.0012\".\n const text =\n usd > 0 && usd < 0.005\n ? '< $0.01'\n : new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(usd);\n return <span className={cn('oca-tabular text-muted-foreground', className)}>≈ {text}</span>;\n}\n\n/** A large figure with its label: balances, totals. */\nexport function SatsFigure({\n label,\n value,\n hint,\n size = 'md',\n className,\n}: {\n label: string;\n value: number | null | undefined;\n hint?: React.ReactNode;\n /** lg: the figure a page leads with, well above the tiles beneath it. */\n size?: 'md' | 'lg';\n className?: string;\n}) {\n return (\n <div className={cn('flex flex-col gap-1.5', className)}>\n <span className=\"text-[0.9375rem] text-muted-foreground\">{label}</span>\n <span\n className={cn(\n 'oca-tabular',\n size === 'lg'\n ? 'text-[clamp(3rem,2.2rem+3vw,4.75rem)] leading-[0.95] tracking-[-0.045em] [font-family:var(--oc-font-display)]'\n : 'oca-display-3'\n )}\n >\n <Sats value={value} unit=\"none\" />\n <span className=\"ml-2 text-[0.5em] tracking-normal text-muted-foreground\">sats</span>\n </span>\n {hint ? <span className=\"text-[0.875rem] text-muted-foreground\">{hint}</span> : null}\n </div>\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * The product shown as an object: a phone, a browser window, a card floating\n * beside them. They hold real-looking UI drawn from the system's own parts, so\n * a page shows what a person will see instead of describing it.\n */\n\n/** A phone with an ink bezel and a rounded screen. Children are the screen. */\nexport function PhoneFrame({ className, style, children }: { className?: string; style?: CSSProperties; children: ReactNode }) {\n return (\n <div\n className={cn(\n // A lighter bezel in dark mode, or the phone dissolves into the page.\n 'relative w-[17.5rem] shrink-0 rounded-[2.9rem] bg-[#0b0b0c] p-[0.6rem] dark:bg-[#2a2a2d]',\n 'shadow-[0_50px_100px_-40px_rgb(10_10_10/0.55),0_0_0_1px_rgb(255_255_255/0.06)_inset]',\n className\n )}\n style={style}\n >\n <div className=\"relative aspect-[9/19.2] overflow-hidden rounded-[2.35rem] bg-background\">\n <div aria-hidden className=\"absolute left-1/2 top-2.5 z-10 h-[1.35rem] w-[5.6rem] -translate-x-1/2 rounded-full bg-[#0b0b0c]\" />\n {children}\n </div>\n </div>\n );\n}\n\n/** A browser window with its address. Children are the page. */\nexport function BrowserFrame({\n url = 'ochk.app',\n className,\n style,\n children,\n}: {\n url?: string;\n className?: string;\n style?: CSSProperties;\n children: ReactNode;\n}) {\n return (\n <div\n className={cn(\n 'overflow-hidden rounded-[1.1rem] border border-border bg-card',\n 'shadow-[0_40px_90px_-40px_rgb(10_10_10/0.45)]',\n className\n )}\n style={style}\n >\n <div className=\"flex h-10 items-center gap-3 border-b border-border px-4\">\n <div aria-hidden className=\"flex gap-1.5\">\n <span className=\"size-2.5 rounded-full bg-[#ff5f57]\" />\n <span className=\"size-2.5 rounded-full bg-[#febc2e]\" />\n <span className=\"size-2.5 rounded-full bg-[#28c840]\" />\n </div>\n <div className=\"mx-auto flex h-6 min-w-0 max-w-[60%] flex-1 items-center justify-center rounded-md bg-muted px-3 text-[0.75rem] text-muted-foreground\">\n <span className=\"truncate\">{url}</span>\n </div>\n <span aria-hidden className=\"w-[2.6rem]\" />\n </div>\n <div className=\"relative\">{children}</div>\n </div>\n );\n}\n\n/** A small card that floats beside a picture: one fact, with an icon. */\nexport function FloatChip({\n icon,\n title,\n detail,\n delay = 0,\n className,\n style,\n}: {\n icon?: ReactNode;\n title: ReactNode;\n detail?: ReactNode;\n /** Seconds to offset the drift, so neighbours do not move in step. */\n delay?: number;\n className?: string;\n style?: CSSProperties;\n}) {\n return (\n <div\n className={cn(\n 'oca-animate-drift flex items-center gap-3 rounded-2xl border border-border bg-card/90 py-2.5 pl-2.5 pr-4 backdrop-blur-md',\n 'shadow-[0_24px_50px_-24px_rgb(10_10_10/0.35)]',\n className\n )}\n style={{ animationDelay: `${-delay}s`, ...style }}\n >\n {icon ? (\n <span className=\"flex size-9 shrink-0 items-center justify-center rounded-xl bg-muted text-foreground [&_svg]:size-4\">\n {icon}\n </span>\n ) : null}\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"text-[0.875rem] font-medium leading-tight\">{title}</span>\n {detail ? <span className=\"text-[0.8125rem] leading-tight text-muted-foreground\">{detail}</span> : null}\n </span>\n </div>\n );\n}\n","import type { CSSProperties } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * A project, app or site as a tile: its first letter on one of the deck's three\n * grounds, under a faint dot screen. The ground is picked from the seed, so the\n * same thing keeps the same tile everywhere it appears.\n */\n\nconst GROUNDS = [\n {\n className: 'text-oca-ink',\n background: 'linear-gradient(145deg, var(--oca-orange-light), var(--oca-orange-deep))',\n dot: 'rgb(10 10 10 / 0.22)',\n },\n {\n // Lifted at the top edge so the tile keeps its shape on a dark card.\n className: 'text-white ring-1 ring-inset ring-white/15',\n background: 'linear-gradient(145deg, #3d3d3d, #0d0d0d 70%)',\n dot: 'rgb(255 255 255 / 0.16)',\n },\n {\n className: 'text-oca-ink',\n background: 'linear-gradient(145deg, #fff1df, var(--oca-peach))',\n dot: 'rgb(234 88 11 / 0.22)',\n },\n] as const;\n\nconst SIZES = {\n sm: 'size-9 rounded-[0.7rem] text-[0.9375rem]',\n md: 'size-11 rounded-[0.85rem] text-[1.125rem]',\n lg: 'size-14 rounded-[1.05rem] text-[1.5rem]',\n} as const;\n\n/** The letter a name is known by: its first letter or digit, upper-cased. */\nexport function monogramLetter(name: string): string {\n const match = name.match(/[\\p{L}\\p{N}]/u);\n return match ? match[0].toLocaleUpperCase() : '·';\n}\n\n/** Which ground a seed lands on: FNV-1a, so it is stable across renders and builds. */\nexport function monogramGround(seed: string): number {\n let h = 0x811c9dc5;\n for (let i = 0; i < seed.length; i++) {\n h ^= seed.charCodeAt(i);\n h = Math.imul(h, 0x01000193);\n }\n return (h >>> 0) % GROUNDS.length;\n}\n\nexport function Monogram({\n name,\n seed,\n size = 'md',\n className,\n style,\n}: {\n name: string;\n /** What keeps the tile stable, such as a project key or a domain. Defaults to the name. */\n seed?: string;\n size?: keyof typeof SIZES;\n className?: string;\n style?: CSSProperties;\n}) {\n const ground = GROUNDS[monogramGround(seed ?? name)] ?? GROUNDS[0];\n return (\n <span\n aria-hidden\n className={cn(\n 'relative inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-semibold leading-none tracking-[-0.02em]',\n SIZES[size],\n ground.className,\n className\n )}\n style={{ background: ground.background, ...style }}\n >\n <span\n className=\"absolute inset-0\"\n style={{\n backgroundImage: `radial-gradient(circle, ${ground.dot} 0.9px, transparent 1.2px)`,\n backgroundSize: '6px 6px',\n maskImage: 'radial-gradient(90% 90% at 100% 100%, black, transparent 75%)',\n }}\n />\n <span className=\"relative\">{monogramLetter(name)}</span>\n </span>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/lib/cn.ts","../src/components/typography.tsx","../src/components/motion.tsx","../src/components/section.tsx","../src/components/hero.tsx","../src/primitives/badge.tsx","../src/primitives/card.tsx","../src/components/steps.tsx","../src/primitives/scroll-fade.tsx","../src/lib/shell-context.ts","../src/primitives/feedback.tsx","../src/primitives/button.tsx","../src/components/data.tsx","../src/components/code-card.tsx","../src/components/split-bar.tsx","../src/components/truth-table.tsx","../src/components/money.tsx","../src/components/frames.tsx","../src/components/monogram.tsx","../src/components/error-boundary.tsx"],"names":["extendTailwindMerge","clsx","jsx","createElement","useRef","useState","useEffect","cva","jsxs","Fragment","forwardRef","Card","useCallback","createContext","useContext","Separator","SeparatorPrimitive","Button","Slot","Children","isValidElement","cloneElement","Check","Copy","Component"],"mappings":"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","file":"components.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\n\n// tailwind-merge would treat `oca-display-1` and `text-foreground` as the same\n// group and drop one; teach it the package's own type utilities.\nconst merge = extendTailwindMerge<'oca-type'>({\n extend: {\n classGroups: {\n 'oca-type': [\n 'oca-display-1',\n 'oca-display-2',\n 'oca-display-3',\n 'oca-title',\n 'oca-title-sm',\n 'oca-eyebrow',\n 'oca-lead',\n 'oca-body',\n 'oca-numeral',\n ],\n },\n },\n});\n\nexport function cn(...inputs: ClassValue[]): string {\n return merge(clsx(inputs));\n}\n","import { createElement, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/** The small orange line above a heading (\"How it works\", \"The honest version\"). */\nexport function Eyebrow({ className, onInk, ...props }: HTMLAttributes<HTMLParagraphElement> & { onInk?: boolean }) {\n return <p className={cn('oca-eyebrow', onInk && 'text-oca-ink-eyebrow', className)} {...props} />;\n}\n\ntype DisplayLevel = 1 | 2 | 3;\n\nexport interface DisplayProps extends HTMLAttributes<HTMLHeadingElement> {\n /** Visual size. The element follows unless `as` says otherwise. */\n level?: DisplayLevel;\n as?: 'h1' | 'h2' | 'h3' | 'p';\n}\n\n/** Headlines: regular weight, tight, balanced. */\nexport function Display({ level = 2, as, className, ...props }: DisplayProps) {\n const tag = as ?? (`h${level}` as const);\n return createElement(tag, { className: cn(`oca-display-${level}`, className), ...props });\n}\n\n/** The one orange word (\"cost something *real*.\"). Display sizes only: as small\n * text this orange would fail contrast. */\nexport function Accent({ children, className }: { children: ReactNode; className?: string }) {\n return <span className={cn('text-oca-accent-display', className)}>{children}</span>;\n}\n\nexport function Lead({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return <p className={cn('oca-lead max-w-[40rem]', className)} {...props} />;\n}\n\n/** Fine print under a section (\"Who holds what today: …\"). */\nexport function Footnote({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return <p className={cn('text-[0.9375rem] text-muted-foreground', className)} {...props} />;\n}\n\n/**\n * Body copy for long-form pages: measured line length, calm rhythm. The\n * spacing rules skip anything inside `.not-prose`, so a Notice or card set in\n * the text keeps its own layout.\n */\nexport function Prose({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n 'max-w-[42rem] text-[1.0625rem] leading-[1.7] text-muted-foreground',\n '[&_h2:not(.not-prose_h2)]:oca-display-3 [&_h2:not(.not-prose_h2)]:mb-4 [&_h2:not(.not-prose_h2)]:mt-14 [&_h2]:scroll-mt-24 [&_h2]:text-foreground',\n '[&_h3:not(.not-prose_h3)]:oca-title [&_h3:not(.not-prose_h3)]:mb-3 [&_h3:not(.not-prose_h3)]:mt-10 [&_h3]:text-foreground',\n '[&_p:not(.not-prose_p)]:my-4 [&_strong]:font-medium [&_strong]:text-foreground',\n '[&_a]:text-foreground [&_a]:underline [&_a]:decoration-foreground/35 [&_a]:underline-offset-4 hover:[&_a]:decoration-foreground',\n '[&_ul:not(.not-prose_ul)]:my-4 [&_ul:not(.not-prose_ul)]:list-disc [&_ul:not(.not-prose_ul)]:pl-5 [&_li:not(.not-prose_li)]:my-1.5 [&_code]:text-foreground',\n className\n )}\n {...props}\n />\n );\n}\n","import {\n createElement,\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type ElementType,\n type ReactNode,\n} from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * Motion that tells the story and then gets out of the way. Everything here is\n * off under prefers-reduced-motion, does nothing without script, and costs\n * nothing while offscreen.\n */\n\nfunction prefersStill(): boolean {\n return typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/** True once the element has been on screen (or immediately without an observer). */\nexport function useInView<T extends Element>(rootMargin = '0px 0px -12% 0px') {\n const ref = useRef<T>(null);\n const [seen, setSeen] = useState(false);\n useEffect(() => {\n const el = ref.current;\n if (!el || seen) return;\n if (typeof IntersectionObserver === 'undefined') {\n setSeen(true);\n return;\n }\n const io = new IntersectionObserver(\n ([e]) => {\n if (e?.isIntersecting) {\n setSeen(true);\n io.disconnect();\n }\n },\n { rootMargin }\n );\n io.observe(el);\n return () => io.disconnect();\n }, [rootMargin, seen]);\n return [ref, seen] as const;\n}\n\n/**\n * Rise into place the first time it scrolls into view. Content already on\n * screen at load is left alone, so nothing above the fold flashes.\n */\nexport function Reveal({\n as = 'div',\n delay = 0,\n className,\n style,\n children,\n}: {\n as?: ElementType;\n /** Milliseconds, for staggering siblings. */\n delay?: number;\n className?: string;\n style?: CSSProperties;\n children: ReactNode;\n}) {\n const ref = useRef<HTMLElement>(null);\n useEffect(() => {\n const el = ref.current;\n if (!el || prefersStill() || typeof IntersectionObserver === 'undefined') return;\n if (el.getBoundingClientRect().top < window.innerHeight * 0.92) return;\n el.dataset.reveal = 'pending';\n const io = new IntersectionObserver(\n ([e]) => {\n if (e?.isIntersecting) {\n el.dataset.reveal = 'shown';\n io.disconnect();\n }\n },\n { rootMargin: '0px 0px -10% 0px' }\n );\n io.observe(el);\n return () => io.disconnect();\n }, []);\n return createElement(\n as,\n { ref, className, style: { ...style, '--reveal-delay': `${delay}ms` } as CSSProperties },\n children\n );\n}\n\n/**\n * A tall section whose content stays pinned while you scroll through it, and\n * sets `--p` from 0 to 1 on the way. Children read the variable in CSS, so the\n * scroll never re-renders React. Without script or with reduced motion, `--p`\n * stays 0 and the section is an ordinary block.\n */\nexport function ScrollStory({\n length = 2,\n className,\n innerClassName,\n children,\n}: {\n /** Height in viewports; the pinned part plays over (length − 1) of them. */\n length?: number;\n className?: string;\n innerClassName?: string;\n children: ReactNode;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n const [pinned, setPinned] = useState(false);\n useEffect(() => {\n const el = ref.current;\n if (!el || prefersStill()) return;\n setPinned(true);\n let raf = 0;\n const update = () => {\n raf = 0;\n const r = el.getBoundingClientRect();\n const travel = r.height - window.innerHeight;\n const p = travel > 0 ? Math.min(1, Math.max(0, -r.top / travel)) : 0;\n el.style.setProperty('--p', p.toFixed(4));\n };\n const on = () => {\n if (!raf) raf = requestAnimationFrame(update);\n };\n update();\n window.addEventListener('scroll', on, { passive: true });\n window.addEventListener('resize', on);\n return () => {\n cancelAnimationFrame(raf);\n window.removeEventListener('scroll', on);\n window.removeEventListener('resize', on);\n };\n }, []);\n return (\n <div ref={ref} className={cn('relative', className)} style={pinned ? { height: `${length * 100}svh` } : undefined}>\n <div className={cn(pinned && 'sticky top-0 flex min-h-svh items-center', innerClassName)}>{children}</div>\n </div>\n );\n}\n\n/** A number that counts up to its value the first time it is seen. */\nexport function Ticker({\n value,\n duration = 1200,\n format = (n) => Math.round(n).toLocaleString('en-US'),\n className,\n}: {\n value: number;\n duration?: number;\n format?: (n: number) => string;\n className?: string;\n}) {\n const [ref, seen] = useInView<HTMLSpanElement>();\n const [shown, setShown] = useState(value);\n // Count only a number that starts below the fold; one already on screen\n // keeps its value rather than flashing it, then zero, then counting.\n const animate = useRef<boolean | null>(null);\n useEffect(() => {\n const el = ref.current;\n if (!el || animate.current !== null) return;\n animate.current = !prefersStill() && el.getBoundingClientRect().top > window.innerHeight * 0.9;\n if (animate.current) setShown(0);\n }, [ref]);\n useEffect(() => {\n if (!seen) return;\n if (!animate.current) {\n setShown(value);\n return;\n }\n let raf = 0;\n const t0 = performance.now();\n const step = (now: number) => {\n const k = Math.min(1, (now - t0) / duration);\n setShown(value * (1 - Math.pow(1 - k, 3)));\n if (k < 1) raf = requestAnimationFrame(step);\n };\n raf = requestAnimationFrame(step);\n return () => cancelAnimationFrame(raf);\n }, [seen, value, duration]);\n return (\n <span ref={ref} className={cn('oca-tabular', className)}>\n {format(shown)}\n </span>\n );\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport type { HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Reveal } from './motion';\n\n/*\n * The deck alternates three grounds: the light canvas, the ink band and the\n * orange band. A section owns its ground edge to edge and its content sits in\n * the container. On the orange band text is ink, never white (2.9:1).\n */\n// overflow-x: clip, not hidden: decoration may not widen the page, and a sticky\n// child still sticks.\nexport const sectionVariants = cva('relative w-full overflow-x-clip', {\n variants: {\n tone: {\n canvas: 'bg-background text-foreground',\n card: 'bg-card text-card-foreground',\n // The band line is transparent in light; in dark it keeps the ink\n // band from melting into the canvas.\n ink: 'border-y border-[var(--oca-band-line)] bg-oca-ink text-oca-ink-foreground',\n brand: 'bg-brand text-brand-foreground',\n },\n space: {\n none: '',\n sm: 'py-12 md:py-16',\n md: 'oca-section',\n lg: 'py-24 md:py-40',\n },\n },\n defaultVariants: { tone: 'canvas', space: 'md' },\n});\n\nexport interface SectionProps extends HTMLAttributes<HTMLElement>, VariantProps<typeof sectionVariants> {\n /** Put children in the standard container. Default true. */\n contained?: boolean;\n}\n\nexport function Section({ tone, space, contained = true, className, children, ...props }: SectionProps) {\n return (\n <section className={cn(sectionVariants({ tone, space }), className)} {...props}>\n {contained ? <div className=\"oca-container\">{children}</div> : children}\n </section>\n );\n}\n\nexport function Container({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('oca-container', className)} {...props} />;\n}\n\n/**\n * Eyebrow + headline + lead, the opening of every deck slide. It rises into\n * place the first time it scrolls into view (`reveal={false}` to keep it still).\n */\nexport function SectionIntro({\n className,\n align = 'start',\n reveal = true,\n children,\n style,\n}: Pick<HTMLAttributes<HTMLDivElement>, 'className' | 'style' | 'children'> & {\n align?: 'start' | 'center';\n reveal?: boolean;\n}) {\n const cls = cn('flex flex-col gap-4 md:gap-5', align === 'center' && 'mx-auto items-center text-center', className);\n return reveal ? (\n <Reveal className={cls} style={style}>\n {children}\n </Reveal>\n ) : (\n <div className={cls} style={style}>\n {children}\n </div>\n );\n}\n","import { useEffect, useState, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Section } from './section';\n\n/*\n * The top of every public page. Two shapes:\n *\n * - `page` (default): the home page's register. Eyebrow, a display headline,\n * one line of lead, actions, and optional art beside it.\n * - `document`: for pages that are read top to bottom (privacy, terms,\n * security, changelog). A centred column with the same eyebrow and a\n * display headline that is always larger than the document's own h2s.\n */\nexport interface PageHeroProps {\n eyebrow?: ReactNode;\n title: ReactNode;\n /** One or two sentences. */\n lead?: ReactNode;\n actions?: ReactNode;\n /** Beside the text from md up; below it on a phone. `page` only. */\n art?: ReactNode;\n /** A line of fine print under the lead (\"Updated 15 October 2026\"). */\n meta?: ReactNode;\n /** Anything else under the actions: a status pill, a stat row. */\n children?: ReactNode;\n variant?: 'page' | 'document';\n /** `xl` is the home page's size; content pages default to `lg`. `page` only. */\n size?: 'lg' | 'xl';\n className?: string;\n}\n\nexport function PageHero({\n eyebrow,\n title,\n lead,\n actions,\n art,\n meta,\n children,\n variant = 'page',\n size = 'lg',\n className,\n}: PageHeroProps) {\n if (variant === 'document') {\n return (\n <Section space=\"none\" className={cn('pb-12 pt-12 md:pb-16 md:pt-20', className)}>\n <DocHeader className=\"mx-auto max-w-[42rem]\" {...{ eyebrow, title, lead, meta, actions }}>\n {children}\n </DocHeader>\n </Section>\n );\n }\n return (\n <Section space=\"none\" className={cn('pb-14 pt-12 md:pb-20 md:pt-20', className)}>\n <div className={cn('grid grid-cols-1 gap-10', art && 'items-center md:grid-cols-12')}>\n <div className={cn('flex flex-col items-start gap-6', art ? 'md:col-span-7' : 'max-w-[52rem]')}>\n {eyebrow ? <p className=\"oca-eyebrow oca-enter\">{eyebrow}</p> : null}\n <h1 className={cn(size === 'xl' ? 'oca-display-1' : 'oca-display-2', 'oca-enter [--enter-delay:70ms]')}>\n {title}\n </h1>\n {lead ? <p className=\"oca-lead oca-enter max-w-[38rem] [--enter-delay:150ms]\">{lead}</p> : null}\n {meta ? <p className=\"oca-enter text-[0.875rem] text-muted-foreground [--enter-delay:190ms]\">{meta}</p> : null}\n {actions ? <div className=\"oca-enter flex flex-wrap gap-3 [--enter-delay:230ms]\">{actions}</div> : null}\n {children ? <div className=\"oca-enter w-full [--enter-delay:270ms]\">{children}</div> : null}\n </div>\n {art ? <div className=\"oca-enter md:col-span-5 [--enter-delay:120ms]\">{art}</div> : null}\n </div>\n </Section>\n );\n}\n\n/**\n * A document's title block. PageHero's `document` variant wraps it in a band;\n * DocLayout's `header` takes it bare, so it lines up with the text below.\n */\nexport function DocHeader({\n eyebrow,\n title,\n lead,\n meta,\n actions,\n children,\n className,\n}: Pick<PageHeroProps, 'eyebrow' | 'title' | 'lead' | 'meta' | 'actions' | 'children' | 'className'>) {\n return (\n <div className={cn('flex flex-col gap-5', className)}>\n {eyebrow ? <p className=\"oca-eyebrow oca-enter\">{eyebrow}</p> : null}\n <h1 className=\"oca-display-2 oca-enter [--enter-delay:70ms]\">{title}</h1>\n {lead ? <p className=\"oca-lead\">{lead}</p> : null}\n {meta ? <p className=\"text-[0.875rem] text-muted-foreground\">{meta}</p> : null}\n {actions ? <div className=\"mt-1 flex flex-wrap gap-3\">{actions}</div> : null}\n {children}\n </div>\n );\n}\n\nexport interface TocItem {\n id: string;\n label: ReactNode;\n}\n\nfunction useActiveHeading(ids: string[]): string | undefined {\n const [active, setActive] = useState<string | undefined>(ids[0]);\n const key = ids.join('|');\n useEffect(() => {\n const els = key\n .split('|')\n .map((id) => document.getElementById(id))\n .filter((el): el is HTMLElement => el !== null);\n if (els.length === 0 || typeof IntersectionObserver === 'undefined') return;\n const io = new IntersectionObserver(\n (entries) => {\n const hit = entries.filter((e) => e.isIntersecting).sort((a, b) => a.boundingClientRect.top - b.boundingClientRect.top)[0];\n if (hit) setActive(hit.target.id);\n },\n { rootMargin: '-80px 0px -65% 0px' }\n );\n els.forEach((el) => io.observe(el));\n return () => io.disconnect();\n }, [key]);\n return active;\n}\n\n/**\n * A readable column for a long document, with its table of contents: a sticky\n * list beside it on desktop, a folded \"On this page\" above it on a phone. The\n * ids are the ids of the document's h2s. Pass the title as `header` (a\n * DocHeader) so it sits on the same column as the text.\n */\nexport function DocLayout({\n toc,\n header,\n children,\n className,\n}: {\n toc?: TocItem[];\n header?: ReactNode;\n children: ReactNode;\n className?: string;\n}) {\n const active = useActiveHeading(toc?.map((t) => t.id) ?? []);\n const links = () =>\n toc?.map((t) => (\n <li key={t.id}>\n <a\n href={`#${t.id}`}\n aria-current={active === t.id ? 'location' : undefined}\n className={cn(\n 'block border-l py-1.5 pl-4 text-[0.875rem] leading-snug transition-colors',\n active === t.id\n ? 'border-foreground text-foreground'\n : 'border-border text-muted-foreground hover:text-foreground'\n )}\n >\n {t.label}\n </a>\n </li>\n ));\n const hasToc = !!toc && toc.length > 0;\n return (\n <div className={cn('oca-container pb-24', header ? 'pt-12 md:pt-20' : null, className)}>\n <div\n className={cn(\n 'mx-auto grid grid-cols-1 gap-8',\n hasToc\n ? 'max-w-[42rem] lg:max-w-[64rem] lg:grid-cols-[13rem_minmax(0,42rem)] lg:gap-x-16 lg:gap-y-10'\n : 'max-w-[42rem]'\n )}\n >\n {header ? <div className={cn(hasToc && 'lg:col-start-2', 'pb-4')}>{header}</div> : null}\n {hasToc ? (\n <>\n <nav\n aria-label=\"On this page\"\n className={cn('sticky top-24 hidden self-start lg:block', header && 'lg:row-start-2')}\n >\n <p className=\"mb-3 text-[0.875rem] font-medium\">On this page</p>\n <ul>{links()}</ul>\n </nav>\n <details className=\"group rounded-2xl border border-border bg-card px-4 py-3 lg:hidden\">\n <summary className=\"cursor-pointer list-none text-[0.9375rem] font-medium marker:hidden\">\n On this page\n </summary>\n <ul className=\"mt-3\">{links()}</ul>\n </details>\n </>\n ) : null}\n <div className={cn('min-w-0', hasToc && 'lg:col-start-2', hasToc && header && 'lg:row-start-2')}>\n {children}\n </div>\n </div>\n </div>\n );\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport type { HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * The small white pill from the deck (\"in testing\", \"on the path\"). Three tones\n * carry meaning: neutral, the orange accent for attention, and red for a real\n * error. Text stays on the token that clears 4.5:1 against its tint.\n */\nconst GOOD_DOT =\n \"border-border bg-card text-foreground before:size-1.5 before:shrink-0 before:rounded-full before:bg-success before:content-['']\";\n\nexport const badgeVariants = cva(\n 'inline-flex h-6 shrink-0 items-center gap-1.5 whitespace-nowrap rounded-full border px-2.5 text-[0.8125rem] font-medium leading-none',\n {\n variants: {\n tone: {\n neutral: 'border-border bg-card text-foreground',\n muted: 'border-transparent bg-muted text-muted-foreground',\n brand: 'border-transparent bg-[color-mix(in_oklab,var(--oca-orange)_12%,var(--card))] text-oca-accent-ink',\n danger: 'border-transparent bg-[color-mix(in_oklab,var(--destructive)_12%,var(--card))] text-destructive',\n // A good state is a neutral pill with a green dot, not a green pill.\n success: GOOD_DOT,\n // Aliases kept so older call sites keep compiling: attention is\n // the brand accent, information is neutral.\n warning: 'border-transparent bg-[color-mix(in_oklab,var(--oca-orange)_12%,var(--card))] text-oca-accent-ink',\n info: 'border-border bg-card text-foreground',\n // Inverted in dark mode, where ink would sit on a card of nearly its own colour.\n ink: 'border-transparent bg-oca-ink text-oca-ink-foreground dark:bg-foreground dark:text-background',\n onInk: 'border-white/15 bg-white/5 text-white/90',\n },\n },\n defaultVariants: { tone: 'neutral' },\n }\n);\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {}\n\nexport function Badge({ className, tone, ...props }: BadgeProps) {\n return <span data-ui=\"badge\" className={cn(badgeVariants({ tone }), className)} {...props} />;\n}\n\n/** A pill with a live dot: where something stands right now (\"In testing · payouts start after\"). */\nexport function StatusPill({\n className,\n children,\n pulse = true,\n ...props\n}: HTMLAttributes<HTMLSpanElement> & { pulse?: boolean }) {\n return (\n <span\n data-ui=\"status-pill\"\n className={cn(\n 'inline-flex min-h-8 w-fit items-center gap-2.5 rounded-full border border-border bg-card py-1 pl-3 pr-3.5 text-[0.875rem] leading-snug text-foreground',\n className\n )}\n {...props}\n >\n <span aria-hidden className=\"relative flex size-2 shrink-0\">\n {pulse ? (\n <span className=\"absolute inset-0 rounded-full bg-oca-orange opacity-50 motion-safe:animate-ping\" />\n ) : null}\n <span className=\"relative size-2 rounded-full bg-oca-orange\" />\n </span>\n {children}\n </span>\n );\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * White on the canvas with one hairline and a generous radius; no shadow. The\n * `ink` card is the deck's #1E1E1E panel, dark in both modes.\n */\nexport const cardVariants = cva('relative rounded-[1.25rem] border', {\n variants: {\n tone: {\n default: 'border-border bg-card text-card-foreground',\n sunken: 'border-transparent bg-muted text-foreground',\n ink: 'border-oca-ink-line bg-oca-ink-card text-oca-ink-foreground',\n outline: 'border-border bg-transparent text-foreground',\n },\n padding: {\n none: '',\n sm: 'p-5',\n md: 'p-6 md:p-8',\n lg: 'p-8 md:p-10',\n },\n interactive: {\n true: 'transition-colors hover:border-oca-hairline-strong focus-within:border-oca-hairline-strong',\n false: '',\n },\n },\n defaultVariants: { tone: 'default', padding: 'md', interactive: false },\n});\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof cardVariants> {}\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n { className, tone, padding, interactive, ...props },\n ref\n) {\n return (\n <div ref={ref} data-ui=\"card\" className={cn(cardVariants({ tone, padding, interactive }), className)} {...props} />\n );\n});\n\nexport function CardHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('flex flex-col gap-2', className)} {...props} />;\n}\n\n/** The small \"01\" above a card title. */\nexport function CardNumeral({ className, ...props }: HTMLAttributes<HTMLSpanElement>) {\n return <span className={cn('oca-numeral block', className)} {...props} />;\n}\n\nexport function CardTitle({ className, ...props }: HTMLAttributes<HTMLHeadingElement>) {\n return <h3 className={cn('oca-title flex flex-wrap items-center gap-2.5', className)} {...props} />;\n}\n\nexport function CardDescription({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return <p className={cn('oca-body', className)} {...props} />;\n}\n\nexport function CardContent({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mt-5', className)} {...props} />;\n}\n\nexport function CardFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mt-6 flex flex-wrap items-center gap-3', className)} {...props} />;\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Badge } from '../primitives/badge';\nimport { Card, CardNumeral, CardTitle } from '../primitives/card';\n\nexport interface StepItem {\n title: ReactNode;\n body: ReactNode;\n /** A small pill beside the title (\"in testing\", \"on the path\"). */\n badge?: ReactNode;\n /** Overrides the automatic 01, 02, 03. */\n numeral?: ReactNode;\n}\n\nexport interface StepGridProps {\n items: StepItem[];\n /**\n * `cards` (white cards, \"Sign in. Earn. Own.\"), `plain` (open columns,\n * \"Ask for something a bot can't fake cheaply.\") or `ink` (dark cards,\n * \"Why partner now\"). Numerals are dropped on `ink`, as the deck does.\n */\n look?: 'cards' | 'plain' | 'ink';\n className?: string;\n}\n\nconst pad = (n: number) => String(n + 1).padStart(2, '0');\n\nexport function StepGrid({ items, look = 'cards', className }: StepGridProps) {\n const cols = items.length >= 3 ? 'md:grid-cols-3' : items.length === 2 ? 'md:grid-cols-2' : '';\n return (\n <ol className={cn('grid gap-4 md:gap-5', cols, className)}>\n {items.map((it, i) =>\n look === 'plain' ? (\n <li key={i} className=\"flex flex-col gap-3 pr-4\">\n <CardNumeral>{it.numeral ?? pad(i)}</CardNumeral>\n <CardTitle className=\"oca-title-sm\">\n {it.title}\n {it.badge ? <Badge>{it.badge}</Badge> : null}\n </CardTitle>\n <div className=\"oca-body text-[0.9375rem]\">{it.body}</div>\n </li>\n ) : look === 'ink' ? (\n <li key={i}>\n <Card tone=\"ink\" padding=\"md\" className=\"h-full\">\n <CardTitle className=\"text-oca-ink-title\">\n {it.title}\n {it.badge ? <Badge tone=\"onInk\">{it.badge}</Badge> : null}\n </CardTitle>\n <div className=\"mt-3 text-[1rem] leading-relaxed text-oca-ink-muted\">{it.body}</div>\n </Card>\n </li>\n ) : (\n <li key={i}>\n <Card padding=\"md\" className=\"flex h-full flex-col gap-3\">\n <CardNumeral>{it.numeral ?? pad(i)}</CardNumeral>\n <CardTitle>\n {it.title}\n {it.badge ? <Badge>{it.badge}</Badge> : null}\n </CardTitle>\n <div className=\"oca-body\">{it.body}</div>\n </Card>\n </li>\n )\n )}\n </ol>\n );\n}\n","import { useCallback, useEffect, useRef, useState, type HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * A horizontal scroller that says when there is more. Content that is wider\n * than its box scrolls instead of being clipped, and a soft edge appears on\n * whichever side hides something. Tables, code and tab bars all use it.\n */\nexport interface ScrollFadeProps extends HTMLAttributes<HTMLDivElement> {\n /** The colour under the scroller, as a CSS value; the edge fades to it. */\n fade?: string;\n /** Classes for the scrolling element itself. */\n innerClassName?: string;\n}\n\nexport function ScrollFade({ fade = 'var(--card)', className, innerClassName, children, ...props }: ScrollFadeProps) {\n const ref = useRef<HTMLDivElement>(null);\n const [edges, setEdges] = useState({ left: false, right: false });\n const measure = useCallback(() => {\n const el = ref.current;\n if (!el) return;\n const left = el.scrollLeft > 1;\n const right = el.scrollLeft + el.clientWidth < el.scrollWidth - 1;\n setEdges((e) => (e.left === left && e.right === right ? e : { left, right }));\n }, []);\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n measure();\n // Without ResizeObserver (old engines, jsdom) the edges still follow scrolling.\n if (typeof ResizeObserver === 'undefined') return;\n const ro = new ResizeObserver(measure);\n ro.observe(el);\n if (el.firstElementChild) ro.observe(el.firstElementChild);\n return () => ro.disconnect();\n }, [measure]);\n return (\n <div className={cn('relative min-w-0', className)} {...props}>\n <div\n ref={ref}\n onScroll={measure}\n // While it hides something, a keyboard can reach it to scroll.\n tabIndex={edges.left || edges.right ? 0 : undefined}\n className={cn(\n 'overflow-x-auto overscroll-x-contain rounded-[inherit] outline-none focus-visible:ring-2 focus-visible:ring-ring',\n innerClassName\n )}\n >\n {children}\n </div>\n <span\n aria-hidden\n className={cn(\n 'pointer-events-none absolute inset-y-0 left-0 w-8 transition-opacity duration-150',\n edges.left ? 'opacity-100' : 'opacity-0'\n )}\n style={{ background: `linear-gradient(to right, ${fade}, transparent)` }}\n />\n <span\n aria-hidden\n className={cn(\n 'pointer-events-none absolute inset-y-0 right-0 w-10 transition-opacity duration-150',\n edges.right ? 'opacity-100' : 'opacity-0'\n )}\n style={{ background: `linear-gradient(to left, ${fade}, transparent)` }}\n />\n </div>\n );\n}\n","import { createContext, useContext } from 'react';\n\n/** Where the viewer is inside the signed-in shell: its section and page. */\nexport interface ShellPlace {\n section?: string;\n page?: string;\n}\n\nexport const ShellContext = createContext<ShellPlace>({});\n\nexport function useShellPlace(): ShellPlace {\n return useContext(ShellContext);\n}\n","import * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport {\n forwardRef,\n useEffect,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n} from 'react';\nimport { Toaster as SonnerToaster, type ToasterProps } from 'sonner';\n\nimport { cn } from '../lib/cn';\n\nexport function Spinner({ className, label }: { className?: string; label?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n role={label ? 'status' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n className={cn('size-4 animate-spin', className)}\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeOpacity=\"0.2\" strokeWidth=\"2.5\" />\n <path d=\"M21 12a9 9 0 0 0-9-9\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\n/** A placeholder bar, visible on the canvas and on a card in both modes. */\nexport function Skeleton({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-ui=\"skeleton\"\n className={cn('animate-pulse rounded-lg bg-[var(--oca-skeleton)]', className)}\n {...props}\n />\n );\n}\n\n/**\n * True once `active` has stayed true for `ms`. A loading state that never\n * ends reads as a broken page; pass this to show a way out instead.\n */\nexport function useTimedOut(active: boolean, ms = 12_000): boolean {\n const [timedOut, setTimedOut] = useState(false);\n useEffect(() => {\n if (!active) {\n setTimedOut(false);\n return;\n }\n const t = setTimeout(() => setTimedOut(true), ms);\n return () => clearTimeout(t);\n }, [active, ms]);\n return timedOut;\n}\n\nexport const Separator = forwardRef<\n ElementRef<typeof SeparatorPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(function Separator({ className, orientation = 'horizontal', decorative = true, ...props }, ref) {\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-px w-full' : 'h-full w-px',\n className\n )}\n {...props}\n />\n );\n});\n\nexport function Kbd({ className, ...props }: HTMLAttributes<HTMLElement>) {\n return (\n <kbd\n className={cn(\n 'inline-flex h-5 min-w-5 items-center justify-center rounded-md border border-border bg-card px-1.5 font-mono text-[11px] text-muted-foreground',\n className\n )}\n {...props}\n />\n );\n}\n\n/** Live-region status dot: a calm pulse for \"running\", solid otherwise. */\nexport function StatusDot({\n tone = 'neutral',\n pulse = false,\n className,\n}: {\n tone?: 'neutral' | 'success' | 'warning' | 'danger' | 'brand';\n pulse?: boolean;\n className?: string;\n}) {\n const color = {\n neutral: 'bg-oca-subtle',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-destructive',\n brand: 'bg-brand',\n }[tone];\n return (\n <span\n aria-hidden\n className={cn('inline-block size-2 shrink-0 rounded-full', color, pulse && 'oca-animate-pulse-dot', className)}\n />\n );\n}\n\n/** Toasts in the system's type and surfaces. Mount once. */\nexport function Toaster(props: ToasterProps) {\n return (\n <SonnerToaster\n position=\"bottom-right\"\n toastOptions={{\n classNames: {\n toast: 'oca-toast rounded-2xl border border-border bg-popover text-popover-foreground shadow-lg font-sans',\n title: 'text-[0.9375rem] font-medium',\n description: 'text-sm text-muted-foreground',\n actionButton: 'rounded-full bg-primary text-primary-foreground',\n cancelButton: 'rounded-full bg-muted text-foreground',\n },\n }}\n {...props}\n />\n );\n}\n\nexport { toast } from 'sonner';\n","import { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type ButtonHTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Spinner } from './feedback';\n\n/*\n * Pills, as the deck draws them: the black filled pill leads, the white\n * outlined pill follows. `brand` is for the orange band only; `onInk` and\n * `onInkOutline` are the same pair inverted for dark bands.\n */\nexport const buttonVariants = cva(\n [\n 'inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-full font-medium',\n 'transition-[background-color,border-color,color,box-shadow,transform] duration-150',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'active:translate-y-px disabled:pointer-events-none',\n // Disabled is one look for every variant: a quiet grey pill, never a\n // faded black or orange slab that reads as broken.\n 'disabled:border disabled:border-border disabled:bg-muted disabled:text-oca-subtle disabled:shadow-none',\n '[&_svg]:pointer-events-none [&_svg]:size-[1.1em] [&_svg]:shrink-0',\n ],\n {\n variants: {\n variant: {\n primary: 'bg-primary text-primary-foreground hover:bg-primary/85',\n secondary:\n 'border border-border bg-secondary text-secondary-foreground hover:border-oca-hairline-strong hover:bg-accent',\n brand: 'bg-brand text-brand-foreground hover:bg-oca-orange-deep',\n ghost: 'text-foreground hover:bg-accent',\n danger: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n link: 'h-auto rounded-none px-0 text-foreground underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground',\n onInk: 'bg-white text-oca-ink hover:bg-white/90',\n onInkOutline: 'border border-white/20 text-white hover:bg-white/10',\n },\n size: {\n sm: 'h-9 px-4 text-sm',\n md: 'h-11 px-5 text-[0.9375rem]',\n lg: 'h-14 px-7 text-[1.0625rem]',\n icon: 'size-10',\n 'icon-sm': 'size-8',\n },\n },\n compoundVariants: [{ variant: 'link', className: 'h-auto px-0' }],\n defaultVariants: { variant: 'primary', size: 'md' },\n }\n);\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /** Render the child element (a Link, an <a>) with the button's styles. */\n asChild?: boolean;\n /** Shows a spinner and disables the button. */\n loading?: boolean;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n { className, variant, size, asChild = false, loading = false, disabled, children, type, ...props },\n ref\n) {\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp\n ref={ref}\n data-ui=\"button\"\n className={cn(buttonVariants({ variant, size }), className)}\n disabled={asChild ? undefined : disabled || loading}\n aria-busy={loading || undefined}\n type={asChild ? undefined : (type ?? 'button')}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <>\n {loading ? <Spinner className=\"size-[1.1em]\" /> : null}\n {children}\n </>\n )}\n </Comp>\n );\n});\n","import { Check, Copy } from 'lucide-react';\nimport {\n Children,\n cloneElement,\n createContext,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nimport { cn } from '../lib/cn';\nimport { useShellPlace } from '../lib/shell-context';\nimport { Button } from '../primitives/button';\nimport { Skeleton, useTimedOut } from '../primitives/feedback';\nimport { ScrollFade } from '../primitives/scroll-fade';\n\n/* ── Page header ─────────────────────────────────────────────────────── */\n\n/**\n * The top of a signed-in page: section, page title, one sentence, actions.\n * Inside AppShell the eyebrow defaults to the current section, so every page\n * in a section opens at the same height. Pass `eyebrow={null}` to omit it.\n * Public pages use PageHero.\n */\nexport function PageHeader({\n eyebrow,\n title,\n description,\n actions,\n className,\n}: {\n eyebrow?: ReactNode;\n title: ReactNode;\n /** One sentence. Longer explanation belongs in the docs, not the header. */\n description?: ReactNode;\n actions?: ReactNode;\n className?: string;\n}) {\n const place = useShellPlace();\n const eb = eyebrow === undefined ? place.section : eyebrow;\n return (\n <header className={cn('flex flex-col gap-5 md:flex-row md:items-end md:justify-between', className)}>\n <div className=\"flex min-w-0 max-w-[44rem] flex-col gap-2.5\">\n {eb ? <p className=\"oca-eyebrow\">{eb}</p> : null}\n <h1 className=\"oca-display-3\">{title}</h1>\n {description ? <p className=\"oca-body max-w-[40rem] text-[1.0625rem]\">{description}</p> : null}\n </div>\n {actions ? <div className=\"flex flex-wrap items-center gap-2.5 md:shrink-0 md:justify-end\">{actions}</div> : null}\n </header>\n );\n}\n\n/* ── Stats ───────────────────────────────────────────────────────────── */\n\nconst InStatGrid = createContext(false);\n\nexport interface StatCardProps {\n label: ReactNode;\n value: ReactNode;\n hint?: ReactNode;\n /**\n * The number behind `value`, when there is one. StatGrid reads it: a grid\n * whose every `raw` is 0 or null shows one empty line instead of zeros.\n */\n raw?: number | null;\n className?: string;\n}\n\nexport function StatCard({ label, value, hint, className }: StatCardProps) {\n const inGrid = useContext(InStatGrid);\n return (\n <div\n data-ui=\"stat\"\n className={cn(\n 'rounded-[1.25rem] border border-border bg-card p-5 md:p-6',\n // In a grid, label, value and hint each share a row with their\n // neighbours, so values line up whatever wraps above them.\n inGrid ? 'row-span-3 grid grid-rows-subgrid gap-1.5' : 'flex flex-col gap-2',\n className\n )}\n >\n <span className=\"text-[0.875rem] leading-snug text-muted-foreground\">{label}</span>\n {/* Bottom-aligned within a grid row; a lone card keeps it under its label. */}\n <span\n className={cn(\n 'break-words oca-tabular text-[1.5rem] leading-tight tracking-[-0.02em] md:text-[1.75rem]',\n inGrid && 'self-end'\n )}\n >\n {value}\n </span>\n {hint ? (\n <span className=\"text-[0.8125rem] leading-snug text-muted-foreground\">{hint}</span>\n ) : inGrid ? (\n <span aria-hidden />\n ) : null}\n </div>\n );\n}\n\nconst MD_COLS: Record<number, string> = {\n 1: 'md:grid-cols-1',\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-4',\n};\nconst LG_COLS: Record<number, string> = {\n 1: 'lg:grid-cols-1',\n 2: 'lg:grid-cols-2',\n 3: 'lg:grid-cols-3',\n 4: 'lg:grid-cols-4',\n 5: 'lg:grid-cols-5',\n};\nconst MD_SPAN: Record<number, string> = {\n 1: 'md:col-span-1',\n 2: 'md:col-span-2',\n 3: 'md:col-span-3',\n 4: 'md:col-span-4',\n};\nconst LG_SPAN: Record<number, string> = {\n 1: 'lg:col-span-1',\n 2: 'lg:col-span-2',\n 3: 'lg:col-span-3',\n 4: 'lg:col-span-4',\n};\n\n/** Columns for n tiles: as few ragged rows as possible, never more than five. */\nfunction statColumns(n: number): number {\n if (n <= 5) return Math.max(1, n);\n if (n % 4 === 0) return 4;\n if (n % 3 === 0) return 3;\n return 4;\n}\n\n/** How wide the last tile must be to fill its row of `cols`. */\nfunction lastSpan(n: number, cols: number): number {\n const rest = n % cols;\n return rest === 0 ? 1 : cols - rest + 1;\n}\n\n/** One quiet line where a group of numbers would all be zero. */\nexport function EmptyLine({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <p\n className={cn(\n 'rounded-[1.25rem] border border-dashed border-oca-hairline-strong px-5 py-4 text-[0.9375rem] text-muted-foreground',\n className\n )}\n >\n {children}\n </p>\n );\n}\n\nexport interface StatGridProps extends HTMLAttributes<HTMLDivElement> {\n /** Columns from md up. Default: the count up to 4, then 3 or 4. */\n columns?: 1 | 2 | 3 | 4 | 5;\n /** Shown instead of the tiles when the group is empty. */\n empty?: ReactNode;\n /** Force the empty line. Default: every child's `raw` is 0 or null. */\n isEmpty?: boolean;\n}\n\n/**\n * Stat tiles, two to a row on a phone. The last tile stretches to fill its row,\n * so a grid never ends in a hole, and a group of zeros becomes one line.\n */\nexport function StatGrid({ columns, empty, isEmpty, className, children, ...props }: StatGridProps) {\n const items = Children.toArray(children).filter(isValidElement) as ReactElement<StatCardProps>[];\n const n = items.length;\n const allZero =\n n > 0 && items.every((el) => 'raw' in el.props && (el.props.raw === 0 || el.props.raw === null));\n if (isEmpty ?? allZero) return <EmptyLine className={className}>{empty ?? 'Nothing here yet.'}</EmptyLine>;\n const lg = columns ?? statColumns(n);\n // Five across is a desk-width row; a tablet gets three.\n const md = lg > 4 ? 3 : lg;\n const mdSpan = lastSpan(n, md);\n const lgSpan = lastSpan(n, lg);\n return (\n <InStatGrid.Provider value>\n <div\n className={cn(\n 'grid gap-3 md:gap-4',\n n === 1 ? 'grid-cols-1' : 'grid-cols-2',\n MD_COLS[md],\n LG_COLS[lg],\n className\n )}\n {...props}\n >\n {items.map((el, i) => {\n if (i !== n - 1) return el;\n const span = cn(\n n % 2 === 1 && n > 1 && 'max-md:col-span-2',\n (mdSpan > 1 || lgSpan > 1) && MD_SPAN[mdSpan],\n (mdSpan > 1 || lgSpan > 1) && LG_SPAN[lgSpan]\n );\n return span ? cloneElement(el, { className: cn(el.props.className, span) }) : el;\n })}\n </div>\n </InStatGrid.Provider>\n );\n}\n\n/* ── Key / value ─────────────────────────────────────────────────────── */\n\nexport interface KeyValueItem {\n label: ReactNode;\n value: ReactNode;\n mono?: boolean;\n}\n\nexport function KeyValueList({ items, className }: { items: KeyValueItem[]; className?: string }) {\n return (\n <dl className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card', className)}>\n {items.map((it, i) => (\n <div key={i} className=\"flex flex-col gap-1 px-5 py-3.5 sm:flex-row sm:items-baseline sm:gap-6\">\n <dt className=\"shrink-0 text-[0.875rem] text-muted-foreground sm:w-48\">{it.label}</dt>\n <dd className={cn('min-w-0 break-words text-[0.9375rem]', it.mono && 'font-mono text-[0.875rem]')}>\n {it.value}\n </dd>\n </div>\n ))}\n </dl>\n );\n}\n\n/* ── Table ───────────────────────────────────────────────────────────── */\n\nexport interface Column<T> {\n key: string;\n header: ReactNode;\n cell: (row: T) => ReactNode;\n align?: 'start' | 'end';\n /** A number: right-aligned, tabular, never wrapped. */\n numeric?: boolean;\n /** Hide below md in the table (the phone card list still shows it). */\n wide?: boolean;\n /** A CSS width for the column, e.g. '12rem' or '30%'. */\n width?: string;\n /** The narrowest it may get before the table scrolls instead. */\n minWidth?: string;\n /** Cut long content to one line (put the full value in a title or HashChip). */\n truncate?: boolean;\n /** The phone card's title. Defaults to the first column. */\n primary?: boolean;\n /** Leave out of the phone card list. */\n hideOnPhone?: boolean;\n}\n\n/**\n * Rows of data. Wider than its box, the table scrolls with an edge that says\n * so; under 640px it becomes a list of cards that keep every column's label.\n */\nexport function DataTable<T>({\n columns,\n rows,\n rowKey,\n empty,\n caption,\n phone = 'cards',\n className,\n}: {\n columns: Column<T>[];\n rows: T[];\n rowKey: (row: T, i: number) => string;\n empty?: ReactNode;\n caption?: string;\n /** Under 640px: a card per row (default), or the same table scrolling. */\n phone?: 'cards' | 'scroll';\n className?: string;\n}) {\n if (rows.length === 0 && empty) return <>{empty}</>;\n const primary = columns.find((c) => c.primary) ?? columns[0];\n const right = (c: Column<T>) => c.numeric || c.align === 'end';\n const table = (\n <div\n className={cn(\n 'overflow-hidden rounded-[1.25rem] border border-border bg-card',\n phone === 'cards' && 'max-sm:hidden',\n className\n )}\n >\n <ScrollFade fade=\"var(--card)\">\n <table className=\"w-full border-collapse text-left text-[0.9375rem]\">\n {caption ? <caption className=\"sr-only\">{caption}</caption> : null}\n <thead>\n <tr className=\"border-b border-border\">\n {columns.map((c) => (\n <th\n key={c.key}\n scope=\"col\"\n style={{ width: c.width, minWidth: c.minWidth }}\n className={cn(\n 'whitespace-nowrap px-5 py-3 text-[0.8125rem] font-medium text-muted-foreground',\n right(c) && 'text-right',\n c.wide && 'hidden md:table-cell'\n )}\n >\n {c.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {rows.map((r, i) => (\n <tr key={rowKey(r, i)} className=\"transition-colors hover:bg-accent/60\">\n {columns.map((c) => (\n <td\n key={c.key}\n style={{ minWidth: c.minWidth }}\n className={cn(\n 'px-5 py-3.5 align-middle',\n right(c) && 'text-right',\n c.numeric && 'whitespace-nowrap oca-tabular',\n c.wide && 'hidden md:table-cell'\n )}\n >\n {c.truncate ? (\n <div className=\"truncate\" style={{ maxWidth: c.width ?? '16rem' }}>\n {c.cell(r)}\n </div>\n ) : (\n c.cell(r)\n )}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </ScrollFade>\n </div>\n );\n if (phone !== 'cards') return table;\n const rest = columns.filter((c) => c !== primary && !c.hideOnPhone);\n return (\n <>\n {table}\n <ul\n aria-label={caption}\n className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card sm:hidden', className)}\n >\n {rows.map((r, i) => (\n <li key={rowKey(r, i)} className=\"flex flex-col gap-2.5 px-4 py-4\">\n <div className=\"min-w-0 break-words text-[0.9375rem] font-medium\">{primary?.cell(r)}</div>\n {rest.length > 0 ? (\n <dl className=\"grid grid-cols-[minmax(5.5rem,auto)_minmax(0,1fr)] gap-x-4 gap-y-1.5 text-[0.875rem]\">\n {rest.map((c) => (\n <div key={c.key} className=\"contents\">\n <dt className=\"text-muted-foreground\">{c.header}</dt>\n <dd className={cn('min-w-0 break-words', c.numeric && 'oca-tabular')}>{c.cell(r)}</dd>\n </div>\n ))}\n </dl>\n ) : null}\n </li>\n ))}\n </ul>\n </>\n );\n}\n\n/* ── Empty, notice ───────────────────────────────────────────────────── */\n\nexport function EmptyState({\n title,\n children,\n action,\n icon,\n className,\n}: {\n title: ReactNode;\n children?: ReactNode;\n action?: ReactNode;\n /** An icon that says what is missing. None by default: the words carry it. */\n icon?: ReactNode;\n className?: string;\n}) {\n return (\n <div\n className={cn(\n 'flex flex-col items-center gap-3 rounded-[1.25rem] border border-dashed border-oca-hairline-strong px-6 py-10 text-center',\n className\n )}\n >\n {icon ? (\n <span className=\"mb-1 flex size-11 items-center justify-center rounded-full bg-muted text-muted-foreground [&_svg]:size-5\">\n {icon}\n </span>\n ) : null}\n <h3 className=\"oca-title-sm\">{title}</h3>\n {children ? <div className=\"oca-body max-w-md text-[0.9375rem]\">{children}</div> : null}\n {action ? <div className=\"mt-2 flex flex-wrap justify-center gap-3\">{action}</div> : null}\n </div>\n );\n}\n\n/*\n * Three kinds of notice: neutral, the orange accent for something that needs\n * attention, and red for a real error. The old tone names still compile and\n * land on one of the three, so no page can add a fourth colour.\n */\ntype NoticeTone = 'neutral' | 'brand' | 'danger' | 'info' | 'success' | 'warning';\n\nconst NOTICE_KIND: Record<NoticeTone, 'neutral' | 'brand' | 'danger'> = {\n neutral: 'neutral',\n info: 'neutral',\n success: 'neutral',\n brand: 'brand',\n warning: 'brand',\n danger: 'danger',\n};\n\nexport function Notice({\n tone = 'neutral',\n title,\n children,\n action,\n className,\n}: {\n tone?: NoticeTone;\n title?: ReactNode;\n children?: ReactNode;\n action?: ReactNode;\n className?: string;\n}) {\n const kind = NOTICE_KIND[tone];\n return (\n <div\n role={tone === 'danger' || tone === 'warning' ? 'alert' : 'note'}\n data-tone={kind}\n className={cn(\n 'flex flex-col gap-3 rounded-2xl border border-border bg-card px-5 py-4 sm:flex-row sm:items-start sm:justify-between',\n kind === 'danger' && 'border-[color-mix(in_oklab,var(--destructive)_40%,var(--border))]',\n className\n )}\n >\n <div className=\"flex min-w-0 gap-3\">\n {kind !== 'neutral' ? (\n <span\n aria-hidden\n className={cn(\n 'mt-[0.45rem] size-2 shrink-0 rounded-full',\n kind === 'brand' ? 'bg-oca-orange' : 'bg-destructive'\n )}\n />\n ) : null}\n <div className=\"flex min-w-0 flex-col gap-1\">\n {title ? (\n <p className={cn('text-[0.9375rem] font-medium', kind === 'danger' && 'text-destructive')}>\n {title}\n </p>\n ) : null}\n {children ? <div className=\"text-[0.9375rem] leading-relaxed text-muted-foreground\">{children}</div> : null}\n </div>\n </div>\n {action ? <div className=\"shrink-0\">{action}</div> : null}\n </div>\n );\n}\n\n/**\n * Placeholder rows while something loads, and a way out if it never does:\n * after `timeoutMs` the skeleton turns into a message with a retry.\n */\nexport function LoadingBlock({\n rows = 3,\n timeoutMs = 12_000,\n onRetry,\n label = 'Loading',\n className,\n}: {\n rows?: number;\n timeoutMs?: number;\n onRetry?: () => void;\n label?: string;\n className?: string;\n}) {\n const timedOut = useTimedOut(true, timeoutMs);\n if (timedOut) {\n return (\n <Notice\n className={className}\n title=\"This is taking longer than it should.\"\n action={\n <Button size=\"sm\" variant=\"secondary\" onClick={onRetry ?? (() => window.location.reload())}>\n Try again\n </Button>\n }\n >\n Check your connection, then try again.\n </Notice>\n );\n }\n return (\n <div role=\"status\" aria-label={label} className={cn('flex flex-col gap-3', className)}>\n {Array.from({ length: rows }, (_, i) => (\n <Skeleton key={i} className=\"h-16 rounded-2xl\" />\n ))}\n </div>\n );\n}\n\n/* ── Hashes, addresses, ids ──────────────────────────────────────────── */\n\nfunction middle(v: string, head: number, tail: number) {\n return v.length <= head + tail + 1 ? v : `${v.slice(0, head)}…${v.slice(-tail)}`;\n}\n\nexport function useCopy(timeoutMs = 1600) {\n const [copied, setCopied] = useState(false);\n const t = useRef<ReturnType<typeof setTimeout> | null>(null);\n useEffect(() => () => {\n if (t.current) clearTimeout(t.current);\n }, []);\n const copy = useCallback(\n async (text: string) => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n if (t.current) clearTimeout(t.current);\n t.current = setTimeout(() => setCopied(false), timeoutMs);\n } catch {\n setCopied(false);\n }\n },\n [timeoutMs]\n );\n return { copied, copy };\n}\n\nexport function CopyButton({ value, label = 'Copy', className }: { value: string; label?: string; className?: string }) {\n const { copied, copy } = useCopy();\n return (\n <button\n type=\"button\"\n onClick={() => void copy(value)}\n aria-label={copied ? 'Copied' : label}\n className={cn(\n 'inline-flex size-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground',\n className\n )}\n >\n {copied ? <Check className=\"size-4 text-success\" /> : <Copy className=\"size-4\" />}\n <span aria-live=\"polite\" className=\"sr-only\">\n {copied ? 'Copied' : ''}\n </span>\n </button>\n );\n}\n\n/** A long identifier shown as head…tail in mono, with copy. The full value is\n * the title and the copied text, never lost to the truncation. */\nexport function HashChip({\n value,\n head = 8,\n tail = 6,\n copy = true,\n href,\n className,\n}: {\n value: string;\n head?: number;\n tail?: number;\n copy?: boolean;\n href?: string;\n className?: string;\n}) {\n const shown = middle(value, head, tail);\n const text = (\n <span title={value} className=\"font-mono text-[0.875rem]\">\n {shown}\n </span>\n );\n return (\n <span className={cn('inline-flex max-w-full items-center gap-1', className)}>\n {href ? (\n <a href={href} className=\"underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground\">\n {text}\n </a>\n ) : (\n text\n )}\n {copy ? <CopyButton value={value} label=\"Copy full value\" /> : null}\n </span>\n );\n}\n\n/* ── Progress ────────────────────────────────────────────────────────── */\n\nexport type StepState = 'done' | 'current' | 'upcoming' | 'blocked';\n\nexport interface ProgressStep {\n label: ReactNode;\n hint?: ReactNode;\n state: StepState;\n}\n\nexport function ProgressSteps({ steps, className }: { steps: ProgressStep[]; className?: string }) {\n return (\n <ol className={cn('flex flex-col gap-0', className)}>\n {steps.map((s, i) => {\n const last = i === steps.length - 1;\n return (\n <li key={i} className=\"relative flex gap-4 pb-6 last:pb-0\" aria-current={s.state === 'current' ? 'step' : undefined}>\n {!last ? (\n <span\n aria-hidden\n className={cn(\n 'absolute left-[11px] top-7 h-[calc(100%-1.5rem)] w-px',\n s.state === 'done' ? 'bg-foreground/30' : 'bg-border'\n )}\n />\n ) : null}\n <span\n className={cn(\n 'relative z-10 mt-0.5 flex size-6 shrink-0 items-center justify-center rounded-full border text-[0.75rem] oca-tabular',\n s.state === 'done' && 'border-primary bg-primary text-primary-foreground',\n s.state === 'current' && 'border-brand bg-card text-oca-accent-ink',\n s.state === 'upcoming' && 'border-border bg-card text-muted-foreground',\n s.state === 'blocked' && 'border-destructive bg-card text-destructive'\n )}\n >\n {s.state === 'done' ? <Check className=\"size-3.5\" strokeWidth={3} /> : String(i + 1).padStart(2, '0')}\n </span>\n <div className=\"flex min-w-0 flex-col gap-1\">\n <span className={cn('text-[0.9375rem]', s.state === 'upcoming' ? 'text-muted-foreground' : 'font-medium')}>\n {s.label}\n </span>\n {s.hint ? <span className=\"text-[0.875rem] leading-snug text-muted-foreground\">{s.hint}</span> : null}\n </div>\n </li>\n );\n })}\n </ol>\n );\n}\n\n/* ── Activity ────────────────────────────────────────────────────────── */\n\nexport interface ActivityItem {\n id: string;\n title: ReactNode;\n meta?: ReactNode;\n /** A small mark before the text, such as a Monogram. */\n leading?: ReactNode;\n trailing?: ReactNode;\n href?: string;\n}\n\nexport function ActivityList({ items, empty, className }: { items: ActivityItem[]; empty?: ReactNode; className?: string }) {\n if (items.length === 0 && empty) return <>{empty}</>;\n return (\n <ul className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card', className)}>\n {items.map((it) => {\n const body = (\n <div className=\"flex items-center justify-between gap-4 px-5 py-4\">\n <div className=\"flex min-w-0 items-center gap-3\">\n {it.leading ? <div className=\"shrink-0\">{it.leading}</div> : null}\n <div className=\"flex min-w-0 flex-col gap-0.5\">\n <span className=\"truncate text-[0.9375rem]\">{it.title}</span>\n {it.meta ? <span className=\"truncate text-[0.8125rem] text-muted-foreground\">{it.meta}</span> : null}\n </div>\n </div>\n {it.trailing ? <div className=\"shrink-0 text-right\">{it.trailing}</div> : null}\n </div>\n );\n return (\n <li key={it.id}>\n {it.href ? (\n <a href={it.href} className=\"block transition-colors hover:bg-accent/60\">\n {body}\n </a>\n ) : (\n body\n )}\n </li>\n );\n })}\n </ul>\n );\n}\n","import { useState, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { ScrollFade } from '../primitives/scroll-fade';\nimport { CopyButton } from './data';\n\n/*\n * The deck's \"What you get\" panel: a dark card of packages, each a peach title,\n * a coloured identifier and a // comment. The identifier's colour says what it\n * is, the way an editor would: a package, a component tag, a licence link.\n */\nexport interface PackageItem {\n title: ReactNode;\n /** The thing itself: an npm name, a JSX tag, a licence line. */\n code: ReactNode;\n kind?: 'package' | 'tag' | 'link';\n /** Rendered after `// `. */\n note?: ReactNode;\n href?: string;\n}\n\nconst KIND = {\n package: 'text-oca-code-package',\n tag: 'text-oca-code-tag',\n link: 'text-oca-code-link',\n} as const;\n\nexport function PackageCard({ items, className }: { items: PackageItem[]; className?: string }) {\n return (\n <div\n className={cn(\n 'grid gap-x-10 gap-y-7 rounded-[1.25rem] border border-oca-ink-line bg-oca-ink-card p-6 text-oca-ink-foreground md:grid-cols-2 md:p-9',\n className\n )}\n >\n {items.map((it, i) => {\n // Sou sets identifiers in the text face, not mono: they read as names here.\n const code = <span className={cn('text-[0.9375rem]', KIND[it.kind ?? 'package'])}>{it.code}</span>;\n return (\n <div key={i} className=\"flex min-w-0 flex-col gap-1.5\">\n <h3 className=\"text-[1.125rem] font-semibold tracking-[-0.01em] text-oca-ink-title\">{it.title}</h3>\n {it.href ? (\n <a href={it.href} className=\"w-fit underline decoration-transparent underline-offset-4 hover:decoration-current\">\n {code}\n </a>\n ) : (\n code\n )}\n {it.note ? (\n <p className=\"text-[0.9375rem] leading-relaxed text-oca-ink-subtle\">\n <span aria-hidden>{'// '}</span>\n {it.note}\n </p>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n}\n\n/**\n * A block of code: a header with its name and a copy button, then the code on\n * a dark well that scrolls sideways (with an edge that says so) rather than\n * cutting a line off. Past `maxLines` it folds, with a button to show the rest.\n */\nexport function CodeBlock({\n code,\n caption,\n copy = true,\n maxLines,\n className,\n}: {\n code: string;\n /** The file, language or purpose. Defaults to \"Code\". */\n caption?: ReactNode;\n copy?: boolean;\n maxLines?: number;\n className?: string;\n}) {\n const lines = code.split('\\n').length;\n const foldable = maxLines !== undefined && lines > maxLines + 2;\n const [open, setOpen] = useState(false);\n const folded = foldable && !open;\n return (\n <figure\n className={cn(\n 'overflow-hidden rounded-[1.25rem] border border-[var(--oca-code-line)] bg-[var(--oca-code-surface)]',\n className\n )}\n >\n <figcaption className=\"flex h-11 items-center justify-between gap-3 border-b border-[var(--oca-code-line)] pl-5 pr-2\">\n <span className=\"truncate text-[0.8125rem] text-oca-ink-subtle\">{caption ?? 'Code'}</span>\n {copy ? (\n <CopyButton\n value={code}\n label=\"Copy code\"\n className=\"text-oca-ink-subtle hover:bg-white/10 hover:text-white\"\n />\n ) : null}\n </figcaption>\n <div className=\"relative\">\n <div\n className={cn(folded && 'overflow-hidden')}\n style={folded ? { maxHeight: `calc(${maxLines} * 1.625em + 2.5rem)` } : undefined}\n >\n <ScrollFade fade=\"var(--oca-code-surface)\">\n <pre className=\"w-max min-w-full p-5 font-mono text-[0.875rem] leading-[1.625] text-oca-ink-muted [font-variant-ligatures:none]\">\n <code>{code}</code>\n </pre>\n </ScrollFade>\n </div>\n {foldable ? (\n <div\n className={cn(\n 'flex justify-center px-5 pb-4',\n folded && 'absolute inset-x-0 bottom-0 pt-16'\n )}\n style={\n folded\n ? { background: 'linear-gradient(to top, var(--oca-code-surface) 40%, transparent)' }\n : undefined\n }\n >\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className=\"rounded-full border border-white/20 px-4 py-1.5 text-[0.8125rem] text-white transition-colors hover:bg-white/10\"\n >\n {open ? 'Show less' : `Show all ${lines} lines`}\n </button>\n </div>\n ) : null}\n </div>\n </figure>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * Where a payment goes, as one bar: each segment's width is its share. Made for\n * the orange band (\"What it costs\"), where ink and white both clear contrast.\n */\nexport interface SplitSegment {\n pct: number;\n label: ReactNode;\n tone?: 'ink' | 'card';\n}\n\nexport function SplitBar({\n segments,\n caption,\n className,\n}: {\n segments: SplitSegment[];\n caption?: ReactNode;\n className?: string;\n}) {\n return (\n <figure className={cn('flex flex-col gap-5', className)}>\n {caption ? <figcaption className=\"text-[0.9375rem]\">{caption}</figcaption> : null}\n <div className=\"flex h-16 w-full gap-1.5 overflow-hidden rounded-[1.25rem] md:h-20\">\n {segments.map((s, i) => (\n <div\n key={i}\n className={cn(\n 'flex min-w-[4.25rem] items-end rounded-[1rem] px-3 pb-2.5 md:px-4 md:pb-3',\n s.tone === 'card' ? 'bg-white text-oca-ink' : 'bg-oca-ink text-white'\n )}\n style={{ flexBasis: `${s.pct}%` }}\n >\n <span\n // One size for every figure, so they sit on one line; it fits a segment at its min width.\n className=\"oca-tabular text-[1.125rem] leading-none tracking-[-0.02em] md:text-[1.5rem]\"\n >\n {s.pct}%\n </span>\n </div>\n ))}\n </div>\n <dl className=\"grid gap-x-8 gap-y-2 sm:grid-cols-2\">\n {segments.map((s, i) => (\n <div key={i} className=\"flex items-baseline gap-2.5\">\n <dt className=\"sr-only\">{s.pct}%</dt>\n <span\n aria-hidden\n className={cn(\n 'inline-block size-2.5 shrink-0 translate-y-[-1px] rounded-full',\n s.tone === 'card' ? 'bg-white' : 'bg-oca-ink'\n )}\n />\n <dd className=\"text-[0.9375rem] leading-snug\">{s.label}</dd>\n </div>\n ))}\n </dl>\n </figure>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * \"What's true today.\" A two-column table: a status and what it covers. Sou's\n * note on the slide is the brief for this component: say it plainly; being\n * clear about what isn't done yet is part of the pitch. So the statuses are\n * fixed words, never icons, and a row cannot be written without one.\n */\nexport type TruthStatus = 'yes' | 'testing' | 'not-yet' | 'no';\n\nconst LABEL: Record<TruthStatus, string> = {\n yes: 'Yes',\n testing: 'In testing',\n 'not-yet': 'Not yet',\n no: 'No',\n};\n\nconst TONE: Record<TruthStatus, string> = {\n yes: 'text-oca-accent-ink',\n testing: 'text-foreground',\n 'not-yet': 'text-muted-foreground',\n no: 'text-muted-foreground',\n};\n\nexport interface TruthRow {\n status: TruthStatus;\n what: ReactNode;\n}\n\nexport function TruthTable({\n rows,\n statusHeading = 'Status',\n whatHeading = 'What',\n className,\n}: {\n rows: TruthRow[];\n statusHeading?: string;\n whatHeading?: string;\n className?: string;\n}) {\n return (\n <>\n {/* Under 640px a two-column table squeezes the text to a few words a\n line, so each row becomes a status over its sentence. */}\n <ul\n className={cn(\n 'divide-y divide-oca-hairline-strong overflow-hidden rounded-xl border border-oca-hairline-strong bg-card sm:hidden',\n className\n )}\n >\n {rows.map((r, i) => (\n <li key={i} className=\"flex flex-col gap-1.5 px-4 py-3.5\">\n <span className={cn('text-[0.875rem] font-medium', TONE[r.status])}>{LABEL[r.status]}</span>\n <span className=\"text-[0.9375rem] leading-relaxed\">{r.what}</span>\n </li>\n ))}\n </ul>\n <div className={cn('overflow-hidden rounded-xl border border-oca-hairline-strong max-sm:hidden', className)}>\n <table className=\"w-full border-collapse text-left text-[0.9375rem] md:text-[1rem]\">\n <thead className=\"bg-oca-table-head\">\n <tr>\n <th scope=\"col\" className=\"w-[30%] border-b border-oca-hairline-strong px-4 py-3 font-semibold md:w-[22%]\">\n {statusHeading}\n </th>\n <th scope=\"col\" className=\"border-b border-l border-oca-hairline-strong px-4 py-3 font-semibold\">\n {whatHeading}\n </th>\n </tr>\n </thead>\n <tbody className=\"bg-card\">\n {rows.map((r, i) => (\n <tr key={i} className=\"align-top\">\n <td\n className={cn(\n 'border-t border-oca-hairline-strong px-4 py-3 font-medium',\n i === 0 && 'border-t-0',\n TONE[r.status]\n )}\n >\n {LABEL[r.status]}\n </td>\n <td\n className={cn(\n 'border-l border-t border-oca-hairline-strong px-4 py-3 leading-relaxed',\n i === 0 && 'border-t-0'\n )}\n >\n {r.what}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </>\n );\n}\n","import type { HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * Sats, always as whole integers with tabular figures. An amount nobody has\n * measured renders as \"—\" with \"unknown\" for screen readers, never as 0: a\n * missing balance shown as zero is a false statement about someone's money.\n */\n\nconst INT = new Intl.NumberFormat('en-US', { maximumFractionDigits: 0 });\nconst COMPACT = new Intl.NumberFormat('en-US', { notation: 'compact', maximumFractionDigits: 1 });\n\nexport interface SatsTextOptions {\n /** Append \" sats\" (default) or nothing. */\n unit?: 'sats' | 'none';\n /** 1.2K, 3.4M. For dense tables and charts only. */\n compact?: boolean;\n /** Prefix + for positive amounts (credits). */\n signed?: boolean;\n}\n\n/** A sats amount as text. Returns null for an unknown amount. */\nexport function satsText(value: number | null | undefined, opts: SatsTextOptions = {}): string | null {\n if (value == null || !Number.isFinite(value)) return null;\n const whole = Math.trunc(value);\n const body = (opts.compact ? COMPACT : INT).format(Math.abs(whole));\n const sign = whole < 0 ? '−' : opts.signed && whole > 0 ? '+' : '';\n const unit = opts.unit === 'none' ? '' : whole === 1 || whole === -1 ? ' sat' : ' sats';\n return `${sign}${body}${unit}`;\n}\n\nexport interface SatsProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'>, SatsTextOptions {\n value: number | null | undefined;\n /** What to show for an unknown amount. */\n unknown?: string;\n}\n\nexport function Sats({ value, unit, compact, signed, unknown = '—', className, ...props }: SatsProps) {\n const text = satsText(value, { unit, compact, signed });\n if (text === null) {\n return (\n <span className={cn('oca-tabular text-muted-foreground', className)} {...props}>\n <span aria-hidden>{unknown}</span>\n <span className=\"sr-only\">unknown</span>\n </span>\n );\n }\n return (\n <span className={cn('oca-tabular whitespace-nowrap', className)} {...props}>\n {text}\n </span>\n );\n}\n\n/** \"≈ $12.34\" beside an amount, when a price is known. Renders nothing otherwise. */\nexport function UsdApprox({\n sats,\n usdPerBtc,\n className,\n}: {\n sats: number | null | undefined;\n usdPerBtc: number | null | undefined;\n className?: string;\n}) {\n if (sats == null || usdPerBtc == null || !Number.isFinite(sats) || !Number.isFinite(usdPerBtc)) return null;\n const usd = (sats / 1e8) * usdPerBtc;\n // Cents, never fractions of one: under half a cent says so instead of \"$0.0012\".\n const text =\n usd > 0 && usd < 0.005\n ? '< $0.01'\n : new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(usd);\n return <span className={cn('oca-tabular text-muted-foreground', className)}>≈ {text}</span>;\n}\n\n/** A large figure with its label: balances, totals. */\nexport function SatsFigure({\n label,\n value,\n hint,\n size = 'md',\n className,\n}: {\n label: string;\n value: number | null | undefined;\n hint?: React.ReactNode;\n /** lg: the figure a page leads with, well above the tiles beneath it. */\n size?: 'md' | 'lg';\n className?: string;\n}) {\n return (\n <div className={cn('flex flex-col gap-1.5', className)}>\n <span className=\"text-[0.9375rem] text-muted-foreground\">{label}</span>\n <span\n className={cn(\n 'oca-tabular',\n size === 'lg'\n ? 'text-[clamp(3rem,2.2rem+3vw,4.75rem)] leading-[0.95] tracking-[-0.045em] [font-family:var(--oc-font-display)]'\n : 'oca-display-3'\n )}\n >\n <Sats value={value} unit=\"none\" />\n <span className=\"ml-2 text-[0.5em] tracking-normal text-muted-foreground\">sats</span>\n </span>\n {hint ? <span className=\"text-[0.875rem] text-muted-foreground\">{hint}</span> : null}\n </div>\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * The product shown as an object: a phone, a browser window, a card floating\n * beside them. They hold real-looking UI drawn from the system's own parts, so\n * a page shows what a person will see instead of describing it.\n */\n\n/** A phone with an ink bezel and a rounded screen. Children are the screen. */\nexport function PhoneFrame({ className, style, children }: { className?: string; style?: CSSProperties; children: ReactNode }) {\n return (\n <div\n className={cn(\n // A lighter bezel in dark mode, or the phone dissolves into the page.\n 'relative w-[17.5rem] shrink-0 rounded-[2.9rem] bg-[#0b0b0c] p-[0.6rem] dark:bg-[#2a2a2d]',\n 'shadow-[0_50px_100px_-40px_rgb(10_10_10/0.55),0_0_0_1px_rgb(255_255_255/0.06)_inset]',\n className\n )}\n style={style}\n >\n <div className=\"relative aspect-[9/19.2] overflow-hidden rounded-[2.35rem] bg-background\">\n <div aria-hidden className=\"absolute left-1/2 top-2.5 z-10 h-[1.35rem] w-[5.6rem] -translate-x-1/2 rounded-full bg-[#0b0b0c]\" />\n {children}\n </div>\n </div>\n );\n}\n\n/** A browser window with its address. Children are the page. */\nexport function BrowserFrame({\n url = 'ochk.app',\n className,\n style,\n children,\n}: {\n url?: string;\n className?: string;\n style?: CSSProperties;\n children: ReactNode;\n}) {\n return (\n <div\n className={cn(\n 'overflow-hidden rounded-[1.1rem] border border-border bg-card',\n 'shadow-[0_40px_90px_-40px_rgb(10_10_10/0.45)]',\n className\n )}\n style={style}\n >\n <div className=\"flex h-10 items-center gap-3 border-b border-border px-4\">\n <div aria-hidden className=\"flex gap-1.5\">\n <span className=\"size-2.5 rounded-full bg-[#ff5f57]\" />\n <span className=\"size-2.5 rounded-full bg-[#febc2e]\" />\n <span className=\"size-2.5 rounded-full bg-[#28c840]\" />\n </div>\n <div className=\"mx-auto flex h-6 min-w-0 max-w-[60%] flex-1 items-center justify-center rounded-md bg-muted px-3 text-[0.75rem] text-muted-foreground\">\n <span className=\"truncate\">{url}</span>\n </div>\n <span aria-hidden className=\"w-[2.6rem]\" />\n </div>\n <div className=\"relative\">{children}</div>\n </div>\n );\n}\n\n/** A small card that floats beside a picture: one fact, with an icon. */\nexport function FloatChip({\n icon,\n title,\n detail,\n delay = 0,\n className,\n style,\n}: {\n icon?: ReactNode;\n title: ReactNode;\n detail?: ReactNode;\n /** Seconds to offset the drift, so neighbours do not move in step. */\n delay?: number;\n className?: string;\n style?: CSSProperties;\n}) {\n return (\n <div\n className={cn(\n 'oca-animate-drift flex items-center gap-3 rounded-2xl border border-border bg-card/90 py-2.5 pl-2.5 pr-4 backdrop-blur-md',\n 'shadow-[0_24px_50px_-24px_rgb(10_10_10/0.35)]',\n className\n )}\n style={{ animationDelay: `${-delay}s`, ...style }}\n >\n {icon ? (\n <span className=\"flex size-9 shrink-0 items-center justify-center rounded-xl bg-muted text-foreground [&_svg]:size-4\">\n {icon}\n </span>\n ) : null}\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"text-[0.875rem] font-medium leading-tight\">{title}</span>\n {detail ? <span className=\"text-[0.8125rem] leading-tight text-muted-foreground\">{detail}</span> : null}\n </span>\n </div>\n );\n}\n","import type { CSSProperties } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * A project, app or site as a tile: its first letter on one of the deck's three\n * grounds, under a faint dot screen. The ground is picked from the seed, so the\n * same thing keeps the same tile everywhere it appears.\n */\n\nconst GROUNDS = [\n {\n className: 'text-oca-ink',\n background: 'linear-gradient(145deg, var(--oca-orange-light), var(--oca-orange-deep))',\n dot: 'rgb(10 10 10 / 0.22)',\n },\n {\n // Lifted at the top edge so the tile keeps its shape on a dark card.\n className: 'text-white ring-1 ring-inset ring-white/15',\n background: 'linear-gradient(145deg, #3d3d3d, #0d0d0d 70%)',\n dot: 'rgb(255 255 255 / 0.16)',\n },\n {\n className: 'text-oca-ink',\n background: 'linear-gradient(145deg, #fff1df, var(--oca-peach))',\n dot: 'rgb(234 88 11 / 0.22)',\n },\n] as const;\n\nconst SIZES = {\n sm: 'size-9 rounded-[0.7rem] text-[0.9375rem]',\n md: 'size-11 rounded-[0.85rem] text-[1.125rem]',\n lg: 'size-14 rounded-[1.05rem] text-[1.5rem]',\n} as const;\n\n/** The letter a name is known by: its first letter or digit, upper-cased. */\nexport function monogramLetter(name: string): string {\n const match = name.match(/[\\p{L}\\p{N}]/u);\n return match ? match[0].toLocaleUpperCase() : '·';\n}\n\n/** Which ground a seed lands on: FNV-1a, so it is stable across renders and builds. */\nexport function monogramGround(seed: string): number {\n let h = 0x811c9dc5;\n for (let i = 0; i < seed.length; i++) {\n h ^= seed.charCodeAt(i);\n h = Math.imul(h, 0x01000193);\n }\n return (h >>> 0) % GROUNDS.length;\n}\n\nexport function Monogram({\n name,\n seed,\n size = 'md',\n className,\n style,\n}: {\n name: string;\n /** What keeps the tile stable, such as a project key or a domain. Defaults to the name. */\n seed?: string;\n size?: keyof typeof SIZES;\n className?: string;\n style?: CSSProperties;\n}) {\n const ground = GROUNDS[monogramGround(seed ?? name)] ?? GROUNDS[0];\n return (\n <span\n aria-hidden\n className={cn(\n 'relative inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-semibold leading-none tracking-[-0.02em]',\n SIZES[size],\n ground.className,\n className\n )}\n style={{ background: ground.background, ...style }}\n >\n <span\n className=\"absolute inset-0\"\n style={{\n backgroundImage: `radial-gradient(circle, ${ground.dot} 0.9px, transparent 1.2px)`,\n backgroundSize: '6px 6px',\n maskImage: 'radial-gradient(90% 90% at 100% 100%, black, transparent 75%)',\n }}\n />\n <span className=\"relative\">{monogramLetter(name)}</span>\n </span>\n );\n}\n","'use client';\n\nimport { Component, type ErrorInfo, type ReactNode } from 'react';\n\nimport { Button } from '../primitives/button';\nimport { EmptyState } from './data';\n\ninterface Props {\n children: ReactNode;\n /** Changing it clears a caught error, so the next page renders afresh. Pass the route. */\n resetKey?: unknown;\n /** Told about each caught error, for logging. */\n onError?: (error: Error, info: ErrorInfo) => void;\n /** Replaces the default message. */\n fallback?: (reset: () => void) => ReactNode;\n}\n\ninterface State {\n failed: boolean;\n key: unknown;\n}\n\n/**\n * Keeps one broken part of a page from blanking the whole page. The default\n * says so in a sentence and offers a retry and a reload.\n */\nexport class ErrorBoundary extends Component<Props, State> {\n state: State = { failed: false, key: this.props.resetKey };\n\n static getDerivedStateFromError(): Partial<State> {\n return { failed: true };\n }\n\n static getDerivedStateFromProps(props: Props, state: State): Partial<State> | null {\n return props.resetKey === state.key ? null : { failed: false, key: props.resetKey };\n }\n\n componentDidCatch(error: Error, info: ErrorInfo): void {\n this.props.onError?.(error, info);\n }\n\n reset = (): void => this.setState({ failed: false });\n\n render(): ReactNode {\n if (!this.state.failed) return this.props.children;\n if (this.props.fallback) return this.props.fallback(this.reset);\n return (\n <div className=\"oca-container py-16\">\n <EmptyState\n title=\"Something on this page broke.\"\n action={\n <>\n <Button onClick={this.reset}>Try again</Button>\n <Button variant=\"secondary\" onClick={() => window.location.reload()}>\n Reload the page\n </Button>\n </>\n }\n >\n Nothing you saved is affected. If it keeps happening, tell us at hello@ochk.io.\n </EmptyState>\n </div>\n );\n }\n}\n"]}