@dendelion/paper-camp 0.6.0 → 0.8.0

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.
Files changed (93) hide show
  1. package/dist/app/assets/index-CF8jC3IN.js +2 -0
  2. package/dist/app/assets/index-CF8jC3IN.js.map +1 -0
  3. package/dist/app/assets/index-DGXi8vpJ.js +2 -0
  4. package/dist/app/assets/index-DGXi8vpJ.js.map +1 -0
  5. package/dist/app/assets/main-D66GnCKz.css +1 -0
  6. package/dist/app/assets/main-DJDNx4Xs.js +218 -0
  7. package/dist/app/assets/main-DJDNx4Xs.js.map +1 -0
  8. package/dist/app/assets/sidebar-section-C2j12TzE.js +2 -0
  9. package/dist/app/assets/sidebar-section-C2j12TzE.js.map +1 -0
  10. package/dist/app/img/paper-logo.png +0 -0
  11. package/dist/app/img/paper-logo.svg +7 -0
  12. package/dist/app/index.html +7 -3
  13. package/dist/app/manifest.json +13 -0
  14. package/dist/chunks/{serializer.DbnJzwVr.js → serializer.BfH7zTwv.js} +1687 -1115
  15. package/dist/chunks/serializer.BfH7zTwv.js.map +1 -0
  16. package/dist/cli/index.js +6256 -5731
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/core/git-pr/branch.d.ts +8 -0
  19. package/dist/core/git-pr/branch.d.ts.map +1 -0
  20. package/dist/core/git-pr/index.d.ts +4 -0
  21. package/dist/core/git-pr/index.d.ts.map +1 -0
  22. package/dist/core/git-pr/pr-lookup.d.ts +57 -0
  23. package/dist/core/git-pr/pr-lookup.d.ts.map +1 -0
  24. package/dist/core/git-pr/pr.d.ts +101 -0
  25. package/dist/core/git-pr/pr.d.ts.map +1 -0
  26. package/dist/core/git-pr/pr.test.d.ts +2 -0
  27. package/dist/core/git-pr/pr.test.d.ts.map +1 -0
  28. package/dist/core/git-pr/scopes.d.ts +8 -0
  29. package/dist/core/git-pr/scopes.d.ts.map +1 -0
  30. package/dist/core/index.d.ts +3 -3
  31. package/dist/core/index.d.ts.map +1 -1
  32. package/dist/core/index.js +76 -54
  33. package/dist/core/parse/entity.test.d.ts.map +1 -0
  34. package/dist/core/parse/frontmatter-schemas.d.ts.map +1 -0
  35. package/dist/core/parse/frontmatter.test.d.ts.map +1 -0
  36. package/dist/core/parse/index.d.ts +3 -0
  37. package/dist/core/parse/index.d.ts.map +1 -0
  38. package/dist/core/{parser.d.ts → parse/parser.d.ts} +16 -11
  39. package/dist/core/parse/parser.d.ts.map +1 -0
  40. package/dist/core/parse/parser.test.d.ts.map +1 -0
  41. package/dist/core/{schemas.d.ts → parse/schemas.d.ts} +2 -2
  42. package/dist/core/parse/schemas.d.ts.map +1 -0
  43. package/dist/core/readers.d.ts +18 -2
  44. package/dist/core/readers.d.ts.map +1 -1
  45. package/dist/core/scaffold/index.d.ts +3 -0
  46. package/dist/core/scaffold/index.d.ts.map +1 -0
  47. package/dist/core/scaffold/scaffold.d.ts.map +1 -0
  48. package/dist/core/scaffold/scaffold.test.d.ts.map +1 -0
  49. package/dist/core/scaffold/templates.d.ts.map +1 -0
  50. package/dist/core/{content-hash.d.ts → serialize/content-hash.d.ts} +1 -1
  51. package/dist/core/serialize/content-hash.d.ts.map +1 -0
  52. package/dist/core/serialize/content-hash.test.d.ts.map +1 -0
  53. package/dist/core/serialize/index.d.ts +3 -0
  54. package/dist/core/serialize/index.d.ts.map +1 -0
  55. package/dist/core/{serializer.d.ts → serialize/serializer.d.ts} +20 -8
  56. package/dist/core/serialize/serializer.d.ts.map +1 -0
  57. package/dist/core/status/index.d.ts +2 -0
  58. package/dist/core/status/index.d.ts.map +1 -0
  59. package/dist/core/status/status.d.ts +27 -0
  60. package/dist/core/status/status.d.ts.map +1 -0
  61. package/dist/core/status/status.test.d.ts +2 -0
  62. package/dist/core/status/status.test.d.ts.map +1 -0
  63. package/dist/img/paper-logo.png +0 -0
  64. package/dist/img/paper-logo.svg +7 -0
  65. package/dist/manifest.json +13 -0
  66. package/dist/types/index.d.ts +83 -2
  67. package/dist/types/index.d.ts.map +1 -1
  68. package/dist/types/index.js.map +1 -1
  69. package/package.json +7 -2
  70. package/dist/app/assets/main-CDaKqAAm.js +0 -200
  71. package/dist/app/assets/main-CDaKqAAm.js.map +0 -1
  72. package/dist/app/assets/main-DVU0frJi.css +0 -1
  73. package/dist/chunks/serializer.DbnJzwVr.js.map +0 -1
  74. package/dist/core/content-hash.d.ts.map +0 -1
  75. package/dist/core/content-hash.test.d.ts.map +0 -1
  76. package/dist/core/entity.test.d.ts.map +0 -1
  77. package/dist/core/frontmatter-schemas.d.ts.map +0 -1
  78. package/dist/core/frontmatter.test.d.ts.map +0 -1
  79. package/dist/core/parser.d.ts.map +0 -1
  80. package/dist/core/parser.test.d.ts.map +0 -1
  81. package/dist/core/scaffold.d.ts.map +0 -1
  82. package/dist/core/scaffold.test.d.ts.map +0 -1
  83. package/dist/core/schemas.d.ts.map +0 -1
  84. package/dist/core/serializer.d.ts.map +0 -1
  85. package/dist/core/templates.d.ts.map +0 -1
  86. /package/dist/core/{entity.test.d.ts → parse/entity.test.d.ts} +0 -0
  87. /package/dist/core/{frontmatter-schemas.d.ts → parse/frontmatter-schemas.d.ts} +0 -0
  88. /package/dist/core/{frontmatter.test.d.ts → parse/frontmatter.test.d.ts} +0 -0
  89. /package/dist/core/{parser.test.d.ts → parse/parser.test.d.ts} +0 -0
  90. /package/dist/core/{scaffold.d.ts → scaffold/scaffold.d.ts} +0 -0
  91. /package/dist/core/{scaffold.test.d.ts → scaffold/scaffold.test.d.ts} +0 -0
  92. /package/dist/core/{templates.d.ts → scaffold/templates.d.ts} +0 -0
  93. /package/dist/core/{content-hash.test.d.ts → serialize/content-hash.test.d.ts} +0 -0
@@ -0,0 +1,2 @@
1
+ import{j as e,c as B,u as i,a as $,s as r,d as M,O as W,D as H,l as L,f as T,b,M as F,Z as w,e as J,r as k,Q as E,J as Z,X as U,g as G,h as K,i as _,P as R,k as V,o as N}from"./main-DJDNx4Xs.js";import{S as z}from"./sidebar-section-C2j12TzE.js";const I=({children:t,onClick:l})=>e.jsx("button",{type:"button",onClick:l,style:{background:"none",border:"none",padding:0,color:B.accentAmberDark,cursor:"pointer",textDecoration:"underline",font:"inherit"},children:t}),Y=()=>{const t=i(p=>p.decisions),l=i(p=>p.openQuestions),d=i(p=>p.activeDocTitle),a=i(p=>p.setActiveDocTitle),n=$(),c=t.find(p=>p.title===d);if(!c)return null;const h=l.filter(p=>p.resolvedBy===c.title);return e.jsxs("div",{children:[e.jsx("h2",{style:{...M,margin:`0 0 ${r[3]}`},children:c.title}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:r[2],marginBottom:r[5]},children:[e.jsx("span",{className:"text-sm",style:{opacity:.5},children:c.date}),e.jsx(W,{size:"small",fillColor:H[c.status].fill,textColor:H[c.status].text,children:c.status}),c.supersededBy&&e.jsxs("span",{className:"text-sm",style:{opacity:.5},children:["Superseded by"," ",e.jsx(I,{onClick:()=>a(c.supersededBy),children:c.supersededBy})]}),h.length>0&&e.jsxs("span",{className:"text-sm",style:{opacity:.5},children:[h.length===1?"Resolves":"Resolves all of"," ",h.map((p,x)=>e.jsxs("span",{children:[x>0&&", ",e.jsx(I,{onClick:()=>{n({to:"/docs/$section",params:{section:"questions"}}),a(p.title)},children:p.title})]},p.title))]})]}),e.jsx("div",{style:{fontFamily:b.body,fontSize:T.base,lineHeight:L.relaxed,color:B.textProse},children:e.jsx(F,{children:c.body})})]})},D=(t,l)=>t.toLowerCase().includes(l.toLowerCase()),P=(t,l,d=120)=>{const a=t.toLowerCase().indexOf(l.toLowerCase());if(a===-1)return t.slice(0,d);const n=Math.max(0,a-40),c=Math.min(t.length,a+l.length+40);let h=t.slice(n,c);return n>0&&(h=`…${h}`),c<t.length&&(h=`${h}…`),h},q=({query:t})=>{const l=i(o=>o.decisions),d=i(o=>o.openQuestions),a=i(o=>o.progress),n=i(o=>o.repoDocs),c=i(o=>o.setActiveDocTitle),h=i(o=>o.setDocSearchQuery),p=$(),x=[];for(const o of l)(D(o.title,t)||D(o.body,t))&&x.push({section:"decisions",sectionLabel:"Decisions",title:o.title,snippet:P(o.body||o.title,t)});for(const o of d)(D(o.title,t)||D(o.body,t))&&x.push({section:"questions",sectionLabel:"Open Questions",title:o.title,snippet:P(o.body||o.title,t)});for(const o of a)for(const u of o.items)if(D(u,t)){x.push({section:"progress",sectionLabel:"Progress",title:o.date,snippet:P(u,t)});break}for(const o of n)(D(o.name,t)||D(o.content,t))&&x.push({section:"repo-docs",sectionLabel:"Repo Docs",title:o.name,snippet:P(o.content,t)});const j={};for(const o of x)j[o.section]||(j[o.section]=[]),j[o.section].push(o);const v=(o,u)=>{p({to:"/docs/$section",params:{section:o}}),c(u),h("")};return x.length===0?e.jsxs("p",{style:{opacity:.5},children:['No results found for "',t,'".']}):e.jsxs("div",{children:[e.jsxs("p",{className:"text-sm",style:{opacity:.5,marginBottom:r[3]},children:[x.length," result",x.length===1?"":"s",' for "',t,'"']}),Object.entries(j).map(([o,u])=>e.jsxs("div",{style:{marginBottom:r[6]},children:[e.jsx("h3",{className:"text-xs",style:{fontWeight:600,letterSpacing:"0.1em",textTransform:"uppercase",opacity:.4,margin:`0 0 ${r[2]}`},children:u[0].sectionLabel}),e.jsx("div",{style:{display:"flex",flexDirection:"column",gap:r[1]},children:u.map(m=>e.jsx(w,{variant:"ghost",size:"small",fullWidth:!0,onClick:()=>v(m.section,m.title),style:{justifyContent:"flex-start",padding:`${r[2]} ${r[3]}`},children:e.jsxs("span",{style:{textAlign:"left"},children:[e.jsx("span",{style:{fontFamily:b.serif,fontWeight:600,fontSize:"0.95rem",display:"block",marginBottom:"0.2rem"},children:m.title}),e.jsx("span",{className:"text-sm",style:{opacity:.6},children:m.snippet})]})},`${m.section}-${m.title}`))})]},o))]})},ee=()=>{const t=i(g=>g.openQuestions),l=i(g=>g.activeDocTitle),d=i(g=>g.setActiveDocTitle),a=i(g=>g.loadDecisions),n=i(g=>g.loadOpenQuestions),c=$(),{toast:h}=J(),[p,x]=k.useState(!1),[j,v]=k.useState(""),[o,u]=k.useState(""),[m,Q]=k.useState(!1),f=t.find(g=>g.title===l);if(!f)return null;const S=()=>{f.resolvedBy&&(c({to:"/docs/$section",params:{section:"decisions"}}),d(f.resolvedBy))},C=()=>{v(""),u(""),Q(!1),x(!0)},O=()=>{x(!1)},s=async g=>{if(g.preventDefault(),!(!j.trim()||m)){Q(!0);try{await K(f.title,j.trim(),o.trim()||void 0),x(!1),await Promise.all([a(),n()])}catch(X){Q(!1),h({title:"Resolve failed",description:X.message,variant:"error"})}}};return e.jsxs("div",{children:[e.jsx("h2",{style:{...M,margin:`0 0 ${r[3]}`},children:f.title}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:r[2],marginBottom:r[5]},children:[e.jsx("span",{className:"text-sm",style:{opacity:.5},children:f.raised}),e.jsx(W,{size:"small",fillColor:E[f.status].fill,textColor:E[f.status].text,children:f.status}),f.resolvedBy&&e.jsxs("span",{className:"text-sm",style:{opacity:.5},children:["Resolved by"," ",e.jsx(I,{onClick:S,children:f.resolvedBy})]}),f.status==="open"&&e.jsx(w,{surface:"chalkboard",onClick:C,children:"Resolve"})]}),e.jsx("div",{style:{fontFamily:b.body,fontSize:T.base,lineHeight:L.relaxed,color:B.textProse},children:e.jsx(F,{children:f.body})}),e.jsx(Z,{open:p,onClose:O,title:"Resolve question",size:"small",children:e.jsxs("form",{onSubmit:s,style:{display:"flex",flexDirection:"column",gap:r[4]},children:[e.jsx(U,{label:"Decision",value:j,onChange:g=>v(g.target.value),placeholder:"What was decided?",disabled:m,autoFocus:!0,required:!0}),e.jsx(G,{label:"Rationale",value:o,onChange:g=>u(g.target.value),placeholder:"Optional reasoning…",disabled:m,rows:4}),e.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:r[2]},children:[e.jsx(w,{type:"button",variant:"ghost",onClick:O,disabled:m,children:"Cancel"}),e.jsx(w,{type:"submit",variant:"primary",disabled:!j.trim()||m,children:"Resolve"})]})]})})]})},se=()=>{const t=i(n=>n.progress),l=i(n=>n.activeDocTitle),a=[...l?t.filter(n=>n.date===l):t].sort((n,c)=>c.date.localeCompare(n.date));return a.length===0?e.jsx("p",{style:{opacity:.5},children:"No progress entries found."}):e.jsx("div",{children:a.map(n=>e.jsxs("div",{style:{marginBottom:r[8]},children:[e.jsx("h3",{style:{fontFamily:b.serif,fontWeight:600,fontSize:T.md,margin:`0 0 ${r[3]}`,lineHeight:L.tight,opacity:.8},children:n.date}),e.jsx("ul",{style:{listStyle:"none",padding:0,margin:0,display:"flex",flexDirection:"column",gap:r[2]},children:n.items.map((c,h)=>e.jsx("li",{style:{fontFamily:b.body,fontSize:T.sm,lineHeight:1.55,color:B.textProse,paddingLeft:r[4],borderLeft:"2px solid rgba(0,0,0,0.08)"},children:e.jsx(F,{children:c})},`${n.date}-${h}`))})]},n.date))})},te=()=>{const t=i(n=>n.repoDocs),l=i(n=>n.activeDocTitle),d=t.find(n=>n.name===l);if(!d)return null;const a=d.name.endsWith(".md");return e.jsxs("div",{children:[e.jsx("h2",{style:{...M,margin:`0 0 ${r[4]}`},children:d.name}),a?e.jsx("div",{style:{fontFamily:b.body,fontSize:T.base,lineHeight:L.relaxed,color:B.textProse},children:e.jsx(F,{children:d.content})}):e.jsx("pre",{style:{fontFamily:b.mono,fontSize:T.xs,background:"rgba(0,0,0,0.04)",borderRadius:6,padding:r[4],overflowX:"auto",lineHeight:L.normal,whiteSpace:"pre-wrap"},children:d.content})]})},A=({itemId:t,label:l,onBack:d})=>e.jsx("div",{style:{marginBottom:r[4]},children:e.jsx(V,{items:[{id:"docs",label:"Docs",onClick:d},{id:t,label:l}]})}),le=()=>{const t=i(c=>c.docSearchQuery),l=i(c=>c.activeDocTitle),d=$(),a=_(),n=()=>d({to:"/docs"});return t.trim()?e.jsx("div",{children:e.jsx(q,{query:t})}):a==="decisions"&&l?e.jsxs("div",{children:[e.jsx(A,{itemId:"decision",label:l,onBack:n}),e.jsx(R,{children:"Decisions"}),e.jsx(Y,{})]}):a==="questions"&&l?e.jsxs("div",{children:[e.jsx(A,{itemId:"question",label:l,onBack:n}),e.jsx(R,{children:"Open Questions"}),e.jsx(ee,{})]}):a==="progress"?e.jsxs("div",{children:[e.jsx(A,{itemId:"progress",label:l??"Progress",onBack:n}),e.jsx(R,{children:"Progress"}),e.jsx(se,{})]}):a==="repo-docs"&&l?e.jsxs("div",{children:[e.jsx(A,{itemId:"repo-doc",label:l,onBack:n}),e.jsx(te,{})]}):e.jsxs("div",{children:[e.jsx(R,{children:"Docs"}),e.jsx("p",{style:{opacity:.5},children:"Select a section from the sidebar."})]})},oe=t=>t.charAt(0).toUpperCase()+t.slice(1).toLowerCase(),y=({children:t})=>e.jsx("span",{className:"text-sm",style:{display:"block",padding:`${r[1]} ${r[3]}`,opacity:.35,fontStyle:"italic"},children:t}),ce=()=>{const t=i(s=>s.decisions),l=i(s=>s.openQuestions),d=i(s=>s.progress),a=i(s=>s.repoDocs),n=i(s=>s.decisionsLoading),c=i(s=>s.openQuestionsLoading),h=i(s=>s.progressLoading),p=i(s=>s.repoDocsLoading),x=i(s=>s.loadDecisions),j=i(s=>s.loadOpenQuestions),v=i(s=>s.loadProgress),o=i(s=>s.loadRepoDocs),u=i(s=>s.activeDocTitle),m=i(s=>s.setActiveDocTitle),Q=i(s=>s.docSearchQuery),f=i(s=>s.setDocSearchQuery),S=_(),C=$();k.useEffect(()=>{x(),j(),v(),o()},[x,j,v,o]);const O=s=>{C({to:"/docs/$section",params:{section:"decisions"}}),m(s)};return e.jsxs(e.Fragment,{children:[e.jsx("div",{style:{marginBottom:r[4]},children:e.jsx(U,{size:"small","aria-label":"Search docs",placeholder:"Search docs…",value:Q,onChange:s=>f(s.target.value)})}),e.jsx(z,{label:"Repo Docs",children:p&&a.length===0?e.jsx(y,{children:"Loading…"}):a.length>0?a.map(s=>e.jsx(N,{size:"small",active:S==="repo-docs"&&u===s.name,onClick:()=>{C({to:"/docs/$section",params:{section:"repo-docs"}}),m(s.name)},children:oe(s.name)},s.name)):e.jsx(y,{children:"No repo docs found"})}),e.jsx(z,{label:"Decisions",children:n&&t.length===0?e.jsx(y,{children:"Loading…"}):t.length>0?t.map(s=>e.jsx(N,{size:"small",active:S==="decisions"&&u===s.title,onClick:()=>O(s.title),children:s.title},s.title)):e.jsx(y,{children:"No decisions yet"})}),e.jsx(z,{label:"Open Questions",children:c&&l.length===0?e.jsx(y,{children:"Loading…"}):l.length>0?l.map(s=>e.jsx(N,{size:"small",active:S==="questions"&&u===s.title,onClick:()=>{C({to:"/docs/$section",params:{section:"questions"}}),m(s.title)},children:s.title},s.title)):e.jsx(y,{children:"No open questions"})}),e.jsx(z,{label:"Progress",children:h&&d.length===0?e.jsx(y,{children:"Loading…"}):d.length>0?d.map(s=>e.jsx(N,{size:"small",active:S==="progress"&&u===s.date,onClick:()=>{C({to:"/docs/$section",params:{section:"progress"}}),m(s.date)},children:s.date},s.date)):e.jsx(y,{children:"No progress entries"})})]})};export{le as DocsPage,ce as DocsSidebar};
2
+ //# sourceMappingURL=index-CF8jC3IN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CF8jC3IN.js","sources":["../../../src/app/components/link-button.tsx","../../../src/app/features/docs/components/decision-detail.tsx","../../../src/app/features/docs/components/docs-search.tsx","../../../src/app/features/docs/components/open-question-detail.tsx","../../../src/app/features/docs/components/progress-timeline.tsx","../../../src/app/features/docs/components/repo-doc-detail.tsx","../../../src/app/features/docs/docs-page.tsx","../../../src/app/features/docs/components/docs-sidebar.tsx"],"sourcesContent":["import { color } from '@/app/styles/tokens';\n\ninterface LinkButtonProps {\n children: React.ReactNode;\n onClick: () => void;\n}\n\nexport const LinkButton = ({ children, onClick }: LinkButtonProps) => (\n <button\n type=\"button\"\n onClick={onClick}\n style={{\n background: 'none',\n border: 'none',\n padding: 0,\n color: color.accentAmberDark,\n cursor: 'pointer',\n textDecoration: 'underline',\n font: 'inherit',\n }}\n >\n {children}\n </button>\n);\n","import { LinkButton, Markdown } from '@/app/components';\nimport { detailHeadingStyle } from '@/app/components/detail-heading-style';\nimport { useAppStore } from '@/app/stores/app-store';\nimport { color, fontFamily, fontSize, lineHeight, space } from '@/app/styles/tokens';\nimport { Stamp } from '@dendelion/paper-ui';\nimport { useNavigate } from '@tanstack/react-router';\nimport { DECISION_STATUS_STAMP } from '../../plans/constants';\n\nexport const DecisionDetail = () => {\n const decisions = useAppStore((s) => s.decisions);\n const openQuestions = useAppStore((s) => s.openQuestions);\n const activeDocTitle = useAppStore((s) => s.activeDocTitle);\n const setActiveDocTitle = useAppStore((s) => s.setActiveDocTitle);\n const navigate = useNavigate();\n\n const decision = decisions.find((d) => d.title === activeDocTitle);\n if (!decision) return null;\n\n const resolvedQuestions = openQuestions.filter((q) => q.resolvedBy === decision.title);\n\n return (\n <div>\n <h2 style={{ ...detailHeadingStyle, margin: `0 0 ${space[3]}` }}>{decision.title}</h2>\n\n <div style={{ display: 'flex', alignItems: 'center', gap: space[2], marginBottom: space[5] }}>\n <span className=\"text-sm\" style={{ opacity: 0.5 }}>\n {decision.date}\n </span>\n <Stamp\n size=\"small\"\n fillColor={DECISION_STATUS_STAMP[decision.status].fill}\n textColor={DECISION_STATUS_STAMP[decision.status].text}\n >\n {decision.status}\n </Stamp>\n {decision.supersededBy && (\n <span className=\"text-sm\" style={{ opacity: 0.5 }}>\n Superseded by{' '}\n <LinkButton onClick={() => setActiveDocTitle(decision.supersededBy!)}>\n {decision.supersededBy}\n </LinkButton>\n </span>\n )}\n {resolvedQuestions.length > 0 && (\n <span className=\"text-sm\" style={{ opacity: 0.5 }}>\n {resolvedQuestions.length === 1 ? 'Resolves' : 'Resolves all of'}{' '}\n {resolvedQuestions.map((q, i) => (\n <span key={q.title}>\n {i > 0 && ', '}\n <LinkButton\n onClick={() => {\n navigate({ to: '/docs/$section', params: { section: 'questions' } });\n setActiveDocTitle(q.title);\n }}\n >\n {q.title}\n </LinkButton>\n </span>\n ))}\n </span>\n )}\n </div>\n\n <div\n style={{\n fontFamily: fontFamily.body,\n fontSize: fontSize.base,\n lineHeight: lineHeight.relaxed,\n color: color.textProse,\n }}\n >\n <Markdown>{decision.body}</Markdown>\n </div>\n </div>\n );\n};\n","import { useAppStore } from '@/app/stores/app-store';\nimport { fontFamily, space } from '@/app/styles/tokens';\nimport { Button } from '@dendelion/paper-ui';\nimport { useNavigate } from '@tanstack/react-router';\n\ninterface SearchMatch {\n section: 'decisions' | 'questions' | 'progress' | 'repo-docs';\n sectionLabel: string;\n title: string;\n snippet: string;\n}\n\ninterface DocsSearchProps {\n query: string;\n}\n\nconst searchIn = (text: string, query: string): boolean =>\n text.toLowerCase().includes(query.toLowerCase());\n\nconst snippet = (text: string, query: string, maxLen = 120): string => {\n const idx = text.toLowerCase().indexOf(query.toLowerCase());\n if (idx === -1) return text.slice(0, maxLen);\n const start = Math.max(0, idx - 40);\n const end = Math.min(text.length, idx + query.length + 40);\n let s = text.slice(start, end);\n if (start > 0) s = `…${s}`;\n if (end < text.length) s = `${s}…`;\n return s;\n};\n\nexport const DocsSearch = ({ query }: DocsSearchProps) => {\n const decisions = useAppStore((s) => s.decisions);\n const openQuestions = useAppStore((s) => s.openQuestions);\n const progress = useAppStore((s) => s.progress);\n const repoDocs = useAppStore((s) => s.repoDocs);\n const setActiveDocTitle = useAppStore((s) => s.setActiveDocTitle);\n const setDocSearchQuery = useAppStore((s) => s.setDocSearchQuery);\n const navigate = useNavigate();\n\n const results: SearchMatch[] = [];\n\n for (const d of decisions) {\n if (searchIn(d.title, query) || searchIn(d.body, query)) {\n results.push({\n section: 'decisions',\n sectionLabel: 'Decisions',\n title: d.title,\n snippet: snippet(d.body || d.title, query),\n });\n }\n }\n\n for (const q of openQuestions) {\n if (searchIn(q.title, query) || searchIn(q.body, query)) {\n results.push({\n section: 'questions',\n sectionLabel: 'Open Questions',\n title: q.title,\n snippet: snippet(q.body || q.title, query),\n });\n }\n }\n\n for (const p of progress) {\n for (const item of p.items) {\n if (searchIn(item, query)) {\n results.push({\n section: 'progress',\n sectionLabel: 'Progress',\n title: p.date,\n snippet: snippet(item, query),\n });\n break;\n }\n }\n }\n\n for (const f of repoDocs) {\n if (searchIn(f.name, query) || searchIn(f.content, query)) {\n results.push({\n section: 'repo-docs',\n sectionLabel: 'Repo Docs',\n title: f.name,\n snippet: snippet(f.content, query),\n });\n }\n }\n\n const grouped: Record<string, SearchMatch[]> = {};\n for (const r of results) {\n if (!grouped[r.section]) grouped[r.section] = [];\n grouped[r.section].push(r);\n }\n\n const handleSelect = (section: SearchMatch['section'], title: string) => {\n navigate({ to: '/docs/$section', params: { section } });\n setActiveDocTitle(title);\n setDocSearchQuery('');\n };\n\n if (results.length === 0) {\n return <p style={{ opacity: 0.5 }}>No results found for \"{query}\".</p>;\n }\n\n return (\n <div>\n <p className=\"text-sm\" style={{ opacity: 0.5, marginBottom: space[3] }}>\n {results.length} result{results.length === 1 ? '' : 's'} for \"{query}\"\n </p>\n {Object.entries(grouped).map(([section, matches]) => (\n <div key={section} style={{ marginBottom: space[6] }}>\n <h3\n className=\"text-xs\"\n style={{\n fontWeight: 600,\n letterSpacing: '0.1em',\n textTransform: 'uppercase',\n opacity: 0.4,\n margin: `0 0 ${space[2]}`,\n }}\n >\n {matches[0].sectionLabel}\n </h3>\n <div style={{ display: 'flex', flexDirection: 'column', gap: space[1] }}>\n {matches.map((m) => (\n <Button\n key={`${m.section}-${m.title}`}\n variant=\"ghost\"\n size=\"small\"\n fullWidth\n onClick={() => handleSelect(m.section, m.title)}\n style={{ justifyContent: 'flex-start', padding: `${space[2]} ${space[3]}` }}\n >\n <span style={{ textAlign: 'left' }}>\n <span\n style={{\n fontFamily: fontFamily.serif,\n fontWeight: 600,\n fontSize: '0.95rem',\n display: 'block',\n marginBottom: '0.2rem',\n }}\n >\n {m.title}\n </span>\n <span className=\"text-sm\" style={{ opacity: 0.6 }}>\n {m.snippet}\n </span>\n </span>\n </Button>\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n};\n","import { LinkButton, Markdown } from '@/app/components';\nimport { detailHeadingStyle } from '@/app/components/detail-heading-style';\nimport { resolveOpenQuestion } from '@/app/services/content';\nimport { useAppStore } from '@/app/stores';\nimport { color, fontFamily, fontSize, lineHeight, space } from '@/app/styles/tokens';\nimport { Button, Input, Modal, Stamp, Textarea, useToast } from '@dendelion/paper-ui';\nimport { useNavigate } from '@tanstack/react-router';\nimport { useState } from 'react';\nimport { QUESTION_STATUS_STAMP } from '../../plans/constants';\n\nexport const OpenQuestionDetail = () => {\n const openQuestions = useAppStore((s) => s.openQuestions);\n const activeDocTitle = useAppStore((s) => s.activeDocTitle);\n const setActiveDocTitle = useAppStore((s) => s.setActiveDocTitle);\n const loadDecisions = useAppStore((s) => s.loadDecisions);\n const loadOpenQuestions = useAppStore((s) => s.loadOpenQuestions);\n const navigate = useNavigate();\n const { toast } = useToast();\n\n const [modalOpen, setModalOpen] = useState(false);\n const [decision, setDecision] = useState('');\n const [rationale, setRationale] = useState('');\n const [loading, setLoading] = useState(false);\n\n const question = openQuestions.find((q) => q.title === activeDocTitle);\n if (!question) return null;\n\n const handleResolvedByClick = () => {\n if (question.resolvedBy) {\n navigate({ to: '/docs/$section', params: { section: 'decisions' } });\n setActiveDocTitle(question.resolvedBy);\n }\n };\n\n const handleOpenModal = () => {\n setDecision('');\n setRationale('');\n setLoading(false);\n setModalOpen(true);\n };\n\n const handleClose = () => {\n setModalOpen(false);\n };\n\n const handleResolve = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!decision.trim() || loading) return;\n setLoading(true);\n try {\n await resolveOpenQuestion(question.title, decision.trim(), rationale.trim() || undefined);\n setModalOpen(false);\n await Promise.all([loadDecisions(), loadOpenQuestions()]);\n } catch (err) {\n setLoading(false);\n toast({\n title: 'Resolve failed',\n description: (err as Error).message,\n variant: 'error',\n });\n }\n };\n\n return (\n <div>\n <h2 style={{ ...detailHeadingStyle, margin: `0 0 ${space[3]}` }}>{question.title}</h2>\n\n <div style={{ display: 'flex', alignItems: 'center', gap: space[2], marginBottom: space[5] }}>\n <span className=\"text-sm\" style={{ opacity: 0.5 }}>\n {question.raised}\n </span>\n <Stamp\n size=\"small\"\n fillColor={QUESTION_STATUS_STAMP[question.status].fill}\n textColor={QUESTION_STATUS_STAMP[question.status].text}\n >\n {question.status}\n </Stamp>\n {question.resolvedBy && (\n <span className=\"text-sm\" style={{ opacity: 0.5 }}>\n Resolved by{' '}\n <LinkButton onClick={handleResolvedByClick}>{question.resolvedBy}</LinkButton>\n </span>\n )}\n {question.status === 'open' && (\n <Button surface=\"chalkboard\" onClick={handleOpenModal}>\n Resolve\n </Button>\n )}\n </div>\n\n <div\n style={{\n fontFamily: fontFamily.body,\n fontSize: fontSize.base,\n lineHeight: lineHeight.relaxed,\n color: color.textProse,\n }}\n >\n <Markdown>{question.body}</Markdown>\n </div>\n\n <Modal open={modalOpen} onClose={handleClose} title=\"Resolve question\" size=\"small\">\n <form\n onSubmit={handleResolve}\n style={{ display: 'flex', flexDirection: 'column', gap: space[4] }}\n >\n <Input\n label=\"Decision\"\n value={decision}\n onChange={(e) => setDecision(e.target.value)}\n placeholder=\"What was decided?\"\n disabled={loading}\n autoFocus\n required\n />\n <Textarea\n label=\"Rationale\"\n value={rationale}\n onChange={(e) => setRationale(e.target.value)}\n placeholder=\"Optional reasoning…\"\n disabled={loading}\n rows={4}\n />\n <div style={{ display: 'flex', justifyContent: 'flex-end', gap: space[2] }}>\n <Button type=\"button\" variant=\"ghost\" onClick={handleClose} disabled={loading}>\n Cancel\n </Button>\n <Button type=\"submit\" variant=\"primary\" disabled={!decision.trim() || loading}>\n Resolve\n </Button>\n </div>\n </form>\n </Modal>\n </div>\n );\n};\n","import { Markdown } from '@/app/components/markdown';\nimport { useAppStore } from '@/app/stores/app-store';\nimport { color, fontFamily, fontSize, lineHeight, space } from '@/app/styles/tokens';\n\nexport const ProgressTimeline = () => {\n const progress = useAppStore((s) => s.progress);\n const activeDocTitle = useAppStore((s) => s.activeDocTitle);\n\n const entries = activeDocTitle ? progress.filter((p) => p.date === activeDocTitle) : progress;\n\n const sorted = [...entries].sort((a, b) => b.date.localeCompare(a.date));\n\n if (sorted.length === 0) {\n return <p style={{ opacity: 0.5 }}>No progress entries found.</p>;\n }\n\n return (\n <div>\n {sorted.map((entry) => (\n <div key={entry.date} style={{ marginBottom: space[8] }}>\n <h3\n style={{\n fontFamily: fontFamily.serif,\n fontWeight: 600,\n fontSize: fontSize.md,\n margin: `0 0 ${space[3]}`,\n lineHeight: lineHeight.tight,\n opacity: 0.8,\n }}\n >\n {entry.date}\n </h3>\n <ul\n style={{\n listStyle: 'none',\n padding: 0,\n margin: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: space[2],\n }}\n >\n {entry.items.map((item, i) => (\n <li\n key={`${entry.date}-${i}`}\n style={{\n fontFamily: fontFamily.body,\n fontSize: fontSize.sm,\n lineHeight: 1.55,\n color: color.textProse,\n paddingLeft: space[4],\n borderLeft: '2px solid rgba(0,0,0,0.08)',\n }}\n >\n <Markdown>{item}</Markdown>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n );\n};\n","import { detailHeadingStyle } from '@/app/components/detail-heading-style';\nimport { Markdown } from '@/app/components/markdown';\nimport { useAppStore } from '@/app/stores/app-store';\nimport { color, fontFamily, fontSize, lineHeight, space } from '@/app/styles/tokens';\n\nexport const RepoDocDetail = () => {\n const repoDocs = useAppStore((s) => s.repoDocs);\n const activeDocTitle = useAppStore((s) => s.activeDocTitle);\n\n const file = repoDocs.find((f) => f.name === activeDocTitle);\n if (!file) return null;\n\n const isMarkdown = file.name.endsWith('.md');\n\n return (\n <div>\n <h2 style={{ ...detailHeadingStyle, margin: `0 0 ${space[4]}` }}>{file.name}</h2>\n\n {isMarkdown ? (\n <div\n style={{\n fontFamily: fontFamily.body,\n fontSize: fontSize.base,\n lineHeight: lineHeight.relaxed,\n color: color.textProse,\n }}\n >\n <Markdown>{file.content}</Markdown>\n </div>\n ) : (\n <pre\n style={{\n fontFamily: fontFamily.mono,\n fontSize: fontSize.xs,\n background: 'rgba(0,0,0,0.04)',\n borderRadius: 6,\n padding: space[4],\n overflowX: 'auto',\n lineHeight: lineHeight.normal,\n whiteSpace: 'pre-wrap',\n }}\n >\n {file.content}\n </pre>\n )}\n </div>\n );\n};\n","import { PageTitle } from '@/app/components/page-title';\nimport { useResolvedDocSection } from '@/app/hooks';\nimport { useAppStore } from '@/app/stores/app-store';\nimport { space } from '@/app/styles/tokens';\nimport { Breadcrumb } from '@dendelion/paper-ui';\nimport { useNavigate } from '@tanstack/react-router';\nimport { DecisionDetail } from './components/decision-detail';\nimport { DocsSearch } from './components/docs-search';\nimport { OpenQuestionDetail } from './components/open-question-detail';\nimport { ProgressTimeline } from './components/progress-timeline';\nimport { RepoDocDetail } from './components/repo-doc-detail';\n\n/** Docs / <item> breadcrumb above a doc detail view — the \"Docs\" crumb navigates back. */\nconst DocsBreadcrumb = ({\n itemId,\n label,\n onBack,\n}: {\n itemId: string;\n label: string;\n onBack: () => void;\n}) => (\n <div style={{ marginBottom: space[4] }}>\n <Breadcrumb\n items={[\n { id: 'docs', label: 'Docs', onClick: onBack },\n { id: itemId, label },\n ]}\n />\n </div>\n);\n\nexport const DocsPage = () => {\n const docSearchQuery = useAppStore((s) => s.docSearchQuery);\n const activeDocTitle = useAppStore((s) => s.activeDocTitle);\n const navigate = useNavigate();\n const activeDocSection = useResolvedDocSection();\n\n const handleBackToDocs = () => navigate({ to: '/docs' });\n\n if (docSearchQuery.trim()) {\n return (\n <div>\n <DocsSearch query={docSearchQuery} />\n </div>\n );\n }\n\n if (activeDocSection === 'decisions' && activeDocTitle) {\n return (\n <div>\n <DocsBreadcrumb itemId=\"decision\" label={activeDocTitle} onBack={handleBackToDocs} />\n <PageTitle>Decisions</PageTitle>\n <DecisionDetail />\n </div>\n );\n }\n\n if (activeDocSection === 'questions' && activeDocTitle) {\n return (\n <div>\n <DocsBreadcrumb itemId=\"question\" label={activeDocTitle} onBack={handleBackToDocs} />\n <PageTitle>Open Questions</PageTitle>\n <OpenQuestionDetail />\n </div>\n );\n }\n\n if (activeDocSection === 'progress') {\n return (\n <div>\n <DocsBreadcrumb\n itemId=\"progress\"\n label={activeDocTitle ?? 'Progress'}\n onBack={handleBackToDocs}\n />\n <PageTitle>Progress</PageTitle>\n <ProgressTimeline />\n </div>\n );\n }\n\n if (activeDocSection === 'repo-docs' && activeDocTitle) {\n return (\n <div>\n <DocsBreadcrumb itemId=\"repo-doc\" label={activeDocTitle} onBack={handleBackToDocs} />\n <RepoDocDetail />\n </div>\n );\n }\n\n return (\n <div>\n <PageTitle>Docs</PageTitle>\n <p style={{ opacity: 0.5 }}>Select a section from the sidebar.</p>\n </div>\n );\n};\n","import { useResolvedDocSection } from '@/app/hooks';\nimport { useAppStore } from '@/app/stores/app-store';\nimport { space } from '@/app/styles/tokens';\nimport { Input, ListItem } from '@dendelion/paper-ui';\nimport { useNavigate } from '@tanstack/react-router';\nimport { useEffect } from 'react';\nimport { SidebarSection } from '../../plans/components/sidebar-section';\n\nconst simplecaseLabel = (name: string) =>\n name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();\n\nconst EmptyState = ({ children }: { children: React.ReactNode }) => (\n <span\n className=\"text-sm\"\n style={{\n display: 'block',\n padding: `${space[1]} ${space[3]}`,\n opacity: 0.35,\n fontStyle: 'italic',\n }}\n >\n {children}\n </span>\n);\n\nexport const DocsSidebar = () => {\n const decisions = useAppStore((s) => s.decisions);\n const openQuestions = useAppStore((s) => s.openQuestions);\n const progress = useAppStore((s) => s.progress);\n const repoDocs = useAppStore((s) => s.repoDocs);\n const decisionsLoading = useAppStore((s) => s.decisionsLoading);\n const openQuestionsLoading = useAppStore((s) => s.openQuestionsLoading);\n const progressLoading = useAppStore((s) => s.progressLoading);\n const repoDocsLoading = useAppStore((s) => s.repoDocsLoading);\n const loadDecisions = useAppStore((s) => s.loadDecisions);\n const loadOpenQuestions = useAppStore((s) => s.loadOpenQuestions);\n const loadProgress = useAppStore((s) => s.loadProgress);\n const loadRepoDocs = useAppStore((s) => s.loadRepoDocs);\n const activeDocTitle = useAppStore((s) => s.activeDocTitle);\n const setActiveDocTitle = useAppStore((s) => s.setActiveDocTitle);\n const docSearchQuery = useAppStore((s) => s.docSearchQuery);\n const setDocSearchQuery = useAppStore((s) => s.setDocSearchQuery);\n const activeDocSection = useResolvedDocSection();\n const navigate = useNavigate();\n\n useEffect(() => {\n loadDecisions();\n loadOpenQuestions();\n loadProgress();\n loadRepoDocs();\n }, [loadDecisions, loadOpenQuestions, loadProgress, loadRepoDocs]);\n\n const handleSelectDecision = (title: string) => {\n navigate({ to: '/docs/$section', params: { section: 'decisions' } });\n setActiveDocTitle(title);\n };\n\n return (\n <>\n <div style={{ marginBottom: space[4] }}>\n <Input\n size=\"small\"\n aria-label=\"Search docs\"\n placeholder=\"Search docs…\"\n value={docSearchQuery}\n onChange={(e) => setDocSearchQuery(e.target.value)}\n />\n </div>\n\n <SidebarSection label=\"Repo Docs\">\n {repoDocsLoading && repoDocs.length === 0 ? (\n <EmptyState>Loading…</EmptyState>\n ) : repoDocs.length > 0 ? (\n repoDocs.map((f) => (\n <ListItem\n key={f.name}\n size=\"small\"\n active={activeDocSection === 'repo-docs' && activeDocTitle === f.name}\n onClick={() => {\n navigate({ to: '/docs/$section', params: { section: 'repo-docs' } });\n setActiveDocTitle(f.name);\n }}\n >\n {simplecaseLabel(f.name)}\n </ListItem>\n ))\n ) : (\n <EmptyState>No repo docs found</EmptyState>\n )}\n </SidebarSection>\n\n <SidebarSection label=\"Decisions\">\n {decisionsLoading && decisions.length === 0 ? (\n <EmptyState>Loading…</EmptyState>\n ) : decisions.length > 0 ? (\n decisions.map((d) => (\n <ListItem\n key={d.title}\n size=\"small\"\n active={activeDocSection === 'decisions' && activeDocTitle === d.title}\n onClick={() => handleSelectDecision(d.title)}\n >\n {d.title}\n </ListItem>\n ))\n ) : (\n <EmptyState>No decisions yet</EmptyState>\n )}\n </SidebarSection>\n\n <SidebarSection label=\"Open Questions\">\n {openQuestionsLoading && openQuestions.length === 0 ? (\n <EmptyState>Loading…</EmptyState>\n ) : openQuestions.length > 0 ? (\n openQuestions.map((q) => (\n <ListItem\n key={q.title}\n size=\"small\"\n active={activeDocSection === 'questions' && activeDocTitle === q.title}\n onClick={() => {\n navigate({ to: '/docs/$section', params: { section: 'questions' } });\n setActiveDocTitle(q.title);\n }}\n >\n {q.title}\n </ListItem>\n ))\n ) : (\n <EmptyState>No open questions</EmptyState>\n )}\n </SidebarSection>\n\n <SidebarSection label=\"Progress\">\n {progressLoading && progress.length === 0 ? (\n <EmptyState>Loading…</EmptyState>\n ) : progress.length > 0 ? (\n progress.map((p) => (\n <ListItem\n key={p.date}\n size=\"small\"\n active={activeDocSection === 'progress' && activeDocTitle === p.date}\n onClick={() => {\n navigate({ to: '/docs/$section', params: { section: 'progress' } });\n setActiveDocTitle(p.date);\n }}\n >\n {p.date}\n </ListItem>\n ))\n ) : (\n <EmptyState>No progress entries</EmptyState>\n )}\n </SidebarSection>\n </>\n );\n};\n"],"names":["LinkButton","children","onClick","jsx","color","DecisionDetail","decisions","useAppStore","s","openQuestions","activeDocTitle","setActiveDocTitle","navigate","useNavigate","decision","d","resolvedQuestions","q","detailHeadingStyle","space","Stamp","DECISION_STATUS_STAMP","jsxs","i","fontFamily","fontSize","lineHeight","Markdown","searchIn","text","query","snippet","maxLen","idx","start","end","DocsSearch","progress","repoDocs","setDocSearchQuery","results","p","item","f","grouped","r","handleSelect","section","title","matches","Button","OpenQuestionDetail","loadDecisions","loadOpenQuestions","toast","useToast","modalOpen","setModalOpen","useState","setDecision","rationale","setRationale","loading","setLoading","question","handleResolvedByClick","handleOpenModal","handleClose","handleResolve","e","resolveOpenQuestion","err","QUESTION_STATUS_STAMP","Modal","Input","Textarea","ProgressTimeline","sorted","a","b","entry","RepoDocDetail","file","isMarkdown","DocsBreadcrumb","itemId","label","onBack","Breadcrumb","DocsPage","docSearchQuery","activeDocSection","useResolvedDocSection","handleBackToDocs","PageTitle","simplecaseLabel","name","EmptyState","DocsSidebar","decisionsLoading","openQuestionsLoading","progressLoading","repoDocsLoading","loadProgress","loadRepoDocs","useEffect","handleSelectDecision","Fragment","SidebarSection","ListItem"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{u as T,j as e,P as Z,r as p,m as q,e as X,s as d,n as M,p as W,X as D,O as Q,c as ee,q as F,Z as z,t as I,f as b,$,b as N,v as te,w as se,x as ne,y as ae,A as P,Y as O,z as ie,B as le,o as _}from"./main-DJDNx4Xs.js";import{S as R}from"./sidebar-section-C2j12TzE.js";const oe=async()=>{try{const n=await fetch("/api/config");return n.ok?n.json():null}catch{return null}},U=async n=>{try{return(await fetch("/api/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)})).ok}catch{return!1}},re=async()=>{try{const n=await fetch("/api/configs");return n.ok?(await n.json()).files:[]}catch{return[]}},ce=async n=>{try{const t=await fetch(`/api/configs?name=${encodeURIComponent(n)}`);return t.ok?(await t.json()).content:null}catch{return null}},H=async()=>{try{const n=await fetch("/api/env");return n.ok?await n.json():{exists:!1,exampleExists:!1,entries:[],missingKeys:[]}}catch{return{exists:!1,exampleExists:!1,entries:[],missingKeys:[]}}},de=async n=>{try{return(await fetch("/api/env",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({entries:n})})).ok}catch{return!1}},K=["phase","planDraft","ideaExtend","commitSuggest"],pe={phase:"Phase run",planDraft:"Plan draft",ideaExtend:"Idea extend",commitSuggest:"Commit suggest"},Y=110,J=140,B=160,V=110,he=()=>e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:d[3],paddingBottom:d[1]},children:[e.jsx("span",{style:{width:Y,flexShrink:0,fontSize:b.sm,opacity:.45},children:"Task"}),e.jsx("span",{style:{width:J,flexShrink:0,fontSize:b.sm,opacity:.45},children:"Agent"}),e.jsx("span",{style:{width:B,flexShrink:0,fontSize:b.sm,opacity:.45},children:"Model"}),e.jsx("span",{style:{width:V,flexShrink:0,fontSize:b.sm,opacity:.45},children:"Effort"})]}),ue=({taskKey:n,agentConfig:t,isLast:u,onSave:h})=>{const m=P[t.agent]??P["claude-code"],g=m.model,l=m.effort,[x,y]=p.useState(t.model??"");p.useEffect(()=>{y(t.model??"")},[t.model]);const v=c=>{var C;const f=c,k=P[f],w={agent:f};t.model&&(k.model===null||(C=k.model)!=null&&C.includes(t.model))&&(w.model=t.model),t.effort&&Array.isArray(k.effort)&&(w.effort=t.effort),h(n,w)},A=c=>{h(n,{...t,model:c||void 0})},j=()=>{h(n,{...t,model:x||void 0})},S=c=>{h(n,{...t,effort:c||void 0})};return e.jsxs(e.Fragment,{children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:d[3],paddingBottom:d[2],paddingTop:d[2]},children:[e.jsx("span",{style:{width:Y,flexShrink:0,fontSize:b.sm,opacity:.65},children:pe[n]}),e.jsx(O,{size:"small",width:J,value:t.agent,onChange:v,options:ie.map(c=>({value:c,label:le[c]}))}),Array.isArray(g)?e.jsx(O,{size:"small",width:B,value:t.model??"",onChange:A,options:[{value:"",label:"Default"},...g.map(c=>({value:c,label:c}))]}):g===null?e.jsx(D,{size:"small",style:{width:B},value:x,placeholder:"Default model",onChange:c=>y(c.target.value),onBlur:j}):null,e.jsx("div",{style:{visibility:Array.isArray(l)?"visible":"hidden"},children:e.jsx(O,{size:"small",width:V,value:t.effort??"",onChange:S,options:[{value:"",label:"Default"},...(Array.isArray(l)?l:[]).map(c=>({value:c,label:c}))]})})]}),!u&&e.jsx(F,{})]})},fe=()=>{const n=p.useRef(null),[t,u]=p.useState(void 0),{iconDataUri:h,loading:m}=q(),[g,l]=p.useState(null),x=g??h,[y,v]=p.useState(!1),[A,j]=p.useState(""),[S,c]=p.useState(""),{toast:f}=X();p.useEffect(()=>{oe().then(i=>{u(i),(i==null?void 0:i.port)!==void 0&&j(String(i.port)),(i==null?void 0:i.projectName)!==void 0&&c(i.projectName)})},[]);const k=async(i,a)=>{const s=t==null?void 0:t.defaultAgents,o={phase:(s==null?void 0:s.phase)??I.phase,planDraft:(s==null?void 0:s.planDraft)??I.planDraft,ideaExtend:(s==null?void 0:s.ideaExtend)??I.ideaExtend,commitSuggest:(s==null?void 0:s.commitSuggest)??I.commitSuggest,[i]:a};await U({defaultAgents:o})?(u(E=>E&&{...E,defaultAgents:o}),f({title:"Saved",variant:"success"})):f({title:"Failed to save",variant:"error"})},w=async()=>{const i=Number(A);if(!t||!Number.isInteger(i)||i<=0||i===t.port)return;await U({port:i})?(u(s=>s&&{...s,port:i}),f({title:"Saved",variant:"success"})):f({title:"Failed to save",variant:"error"})},C=async()=>{const i=S.trim();if(!t||!i||i===t.projectName)return;await U({projectName:i})?(u(s=>s&&{...s,projectName:i}),c(i),f({title:"Saved",variant:"success"})):f({title:"Failed to save",variant:"error"})},L=async i=>{var o;const a=(o=i.target.files)==null?void 0:o[0];if(!a)return;v(!0);const s=new FileReader;s.onloadend=async()=>{const r=s.result,E=await ae(r);v(!1),E?(l(r),f({title:"Saved",variant:"success"})):f({title:"Failed to save",variant:"error"})},s.readAsDataURL(a)};return e.jsxs("div",{children:[e.jsx("div",{style:{marginBottom:d[6]},children:e.jsx("h2",{style:{margin:0},children:"Project Info"})}),t===void 0&&e.jsx("p",{children:"Loading…"}),t===null&&e.jsxs(M,{variant:"warning",children:["No papercamp/config.json found — run ",e.jsx("code",{children:"paper-camp init"})," in this directory first."]}),t&&e.jsxs(W,{size:"small",children:[e.jsxs("div",{style:{display:"flex",alignItems:"flex-end",gap:d[3],paddingBottom:d[3]},children:[e.jsx(D,{value:S,onChange:i=>c(i.target.value),onBlur:C,label:"Project Name"}),e.jsxs(Q,{size:"small",fillColor:"rgba(143, 185, 150, 0.25)",textColor:ee.accentGreenDark,children:["v",t.version]})]}),e.jsx(F,{}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:d[3],paddingBottom:d[3],paddingTop:d[3]},children:[x&&e.jsx("img",{src:x,alt:"Project icon",style:{width:40,height:40,objectFit:"contain",flexShrink:0,borderRadius:4}}),e.jsxs("div",{children:[e.jsx("input",{ref:n,type:"file",accept:".svg,.png,.jpg,.jpeg,.gif,.webp",onChange:L,style:{display:"none"}}),e.jsx(z,{variant:"secondary",size:"small",onClick:()=>{var i;return(i=n.current)==null?void 0:i.click()},disabled:y,children:y?"Uploading…":"Choose File"}),m&&e.jsx("p",{className:"text-sm",style:{opacity:.5,margin:`${d[1]} 0 0`},children:"Loading…"}),!m&&!x&&!y&&e.jsx("p",{className:"text-sm",style:{opacity:.45,margin:`${d[1]} 0 0`},children:"No icon set."})]})]}),e.jsx(F,{}),e.jsx("div",{style:{display:"flex",alignItems:"flex-end",gap:d[3],paddingBottom:d[3],paddingTop:d[3]},children:e.jsx(D,{type:"number",value:A,onChange:i=>j(i.target.value),onBlur:w,label:"Port",helperText:"Default for `paper-camp dev`. Does not affect the running server."})}),e.jsx(F,{}),e.jsx(he,{}),K.map((i,a)=>{var s;return e.jsx(ue,{taskKey:i,agentConfig:((s=t.defaultAgents)==null?void 0:s[i])??I[i],isLast:a===K.length-1,onSave:k},i)})]}),e.jsxs("p",{style:{opacity:.45,fontSize:b.sm,marginTop:d[4]},children:[e.jsx("strong",{children:"Initialized:"})," ",t?new Date(t.initializedAt).toLocaleString():"—"]})]})},me=n=>{try{const t=JSON.parse(n);return!t.scripts||typeof t.scripts!="object"?null:Object.entries(t.scripts).map(([u,h])=>({name:u,command:h}))}catch{return null}},ge=({fileName:n})=>{const[t,u]=p.useState(null),[h,m]=p.useState(!0);if(p.useEffect(()=>{m(!0),ce(n).then(l=>{u(l),m(!1)})},[n]),h)return e.jsx("p",{children:"Loading…"});if(t===null)return e.jsxs(M,{variant:"warning",children:["Could not load file — ",n," not found."]});const g=n==="package.json"?me(t):null;return e.jsxs("div",{children:[e.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:d[4]},children:e.jsx("h2",{style:{margin:0},children:n})}),g?e.jsx($,{data:g,columns:[{key:"name",header:"Script",cell:l=>e.jsx("span",{style:{fontFamily:N.mono},children:l.name}),width:4},{key:"command",header:"Command",cell:l=>e.jsx("span",{style:{fontFamily:N.mono},children:l.command})}]}):e.jsx(ne,{code:t,filename:n})]})},G=n=>/key|secret|token|password/i.test(n),xe=()=>{const[n,t]=p.useState(!0),[u,h]=p.useState([]),[m,g]=p.useState([]),[l,x]=p.useState(new Set),[y,v]=p.useState(!1),[A,j]=p.useState(!1),[S,c]=p.useState(null);p.useEffect(()=>{H().then(a=>{h(a.entries),g(a.missingKeys),t(!1)})},[]);const f=(a,s)=>{h(o=>o.map((r,E)=>E===a?{...r,...s}:r))},k=()=>h(a=>[...a,{key:"",value:""}]),w=a=>{h(s=>[...s,{key:a,value:""}]),g(s=>s.filter(o=>o!==a))},C=a=>{h(s=>s.filter((o,r)=>r!==a)),x(s=>{const o=new Set(s);return o.delete(a),o})},L=a=>x(s=>{const o=new Set(s);return o.has(a)?o.delete(a):o.add(a),o}),i=async()=>{const a=u.map(r=>({key:r.key.trim(),value:r.value,isSet:r.isSet})).filter(r=>r.key.length>0);if(new Set(a.map(r=>r.key)).size!==a.length){c("Duplicate keys are not allowed");return}c(null),v(!0);const o=await de(a.map(r=>({key:r.key,value:r.value,keep:!!r.isSet&&r.value===""})));v(!1),o?(h(a.map(r=>({key:r.key,value:"",isSet:!0}))),j(!0),setTimeout(()=>j(!1),2e3)):c("Failed to save .env")};return n?e.jsx("p",{children:"Loading…"}):e.jsxs("div",{children:[e.jsx("h2",{style:{margin:0,marginBottom:d[4]},children:"Environment Variables"}),S&&e.jsxs(M,{variant:"warning",children:["Could not save — ",S]}),m.length>0&&e.jsxs(W,{size:"small",accent:!0,accentColor:"amber",children:[e.jsx("p",{style:{margin:0,fontWeight:600},children:"Missing from .env"}),e.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:d[2],alignItems:"center"},children:[e.jsx("span",{children:"Present in .env.example but not set:"}),m.map(a=>e.jsxs(z,{variant:"secondary",size:"small",onClick:()=>w(a),children:["+ ",a]},a))]})]}),e.jsx($,{data:u,columns:[{key:"key",header:"Key",cell:(a,s)=>e.jsx(D,{value:a.key,placeholder:"KEY",style:{fontFamily:N.mono},onChange:o=>f(s,{key:o.target.value})}),width:6},{key:"value",header:"Value",cell:(a,s)=>{const o=G(a.key)&&!l.has(s);return e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:d[2]},children:[e.jsx(D,{type:o?"password":"text",value:a.value,placeholder:a.isSet?"•••••• set — leave blank to keep":"value",style:{fontFamily:N.mono,flex:1},onChange:r=>f(s,{value:r.target.value})}),G(a.key)&&e.jsx(z,{variant:"ghost",size:"small",onClick:()=>L(s),children:o?"Show":"Hide"})]})}},{key:"actions",header:"",width:2,cell:(a,s)=>e.jsx(te,{icon:e.jsx(se,{}),variant:"ghost",size:"small",label:"Remove variable",onClick:()=>C(s)})}]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:d[3],marginTop:d[4]},children:[e.jsx(z,{variant:"secondary",size:"small",onClick:k,children:"+ Add variable"}),e.jsx(z,{variant:"primary",size:"small",onClick:i,disabled:y,children:y?"Saving…":"Save"}),A&&e.jsx("span",{className:"text-sm",style:{opacity:.6},children:"Saved"})]})]})},je=()=>{const n=T(t=>t.activeSettingsSection);return e.jsxs("div",{children:[e.jsx(Z,{children:"Settings"}),n==="general"&&e.jsx(fe,{}),n==="env"&&e.jsx(xe,{}),n.startsWith("config:")&&e.jsx(ge,{fileName:n.slice(7)})]})},Se=()=>{const n=T(l=>l.activeSettingsSection),t=T(l=>l.setActiveSettingsSection),u=T(l=>l.settingsConfigFiles),h=T(l=>l.setSettingsConfigFiles),[m,g]=p.useState(!1);return p.useEffect(()=>{re().then(h),H().then(l=>g(l.exists||l.exampleExists))},[h]),e.jsxs(e.Fragment,{children:[e.jsx(R,{label:"General",children:e.jsx(_,{size:"small",active:n==="general",onClick:()=>t("general"),children:"Project Info"})}),m&&e.jsx(R,{label:"Environment",children:e.jsx(_,{size:"small",active:n==="env",onClick:()=>t("env"),children:"Env Vars"})}),u.length>0&&e.jsx(R,{label:"Config Files",children:u.map(l=>e.jsx(_,{size:"small",active:n===`config:${l}`,onClick:()=>t(`config:${l}`),children:l},l))})]})};export{je as SettingsPage,Se as SettingsSidebar};
2
+ //# sourceMappingURL=index-DGXi8vpJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DGXi8vpJ.js","sources":["../../../src/app/services/system/config-api.ts","../../../src/app/services/system/config-files-api.ts","../../../src/app/services/system/env-api.ts","../../../src/app/features/settings/settings-page.tsx","../../../src/app/features/settings/components/settings-sidebar.tsx"],"sourcesContent":["import type { AgentId, DefaultAgentsMap, PaperCampConfig } from '@/types/index';\n\nexport const fetchConfig = async (): Promise<PaperCampConfig | null> => {\n try {\n const response = await fetch('/api/config');\n if (!response.ok) return null;\n return response.json();\n } catch {\n return null;\n }\n};\n\nexport const saveConfig = async (updates: {\n port?: number;\n projectName?: string;\n defaultAgent?: AgentId;\n defaultAgents?: DefaultAgentsMap;\n}): Promise<boolean> => {\n try {\n const response = await fetch('/api/config', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(updates),\n });\n return response.ok;\n } catch {\n return false;\n }\n};\n","export const fetchConfigs = async (): Promise<string[]> => {\n try {\n const response = await fetch('/api/configs');\n if (!response.ok) return [];\n const data = (await response.json()) as { files: string[] };\n return data.files;\n } catch {\n return [];\n }\n};\n\nexport const fetchConfigFile = async (name: string): Promise<string | null> => {\n try {\n const response = await fetch(`/api/configs?name=${encodeURIComponent(name)}`);\n if (!response.ok) return null;\n const data = (await response.json()) as { name: string; content: string };\n return data.content;\n } catch {\n return null;\n }\n};\n","import type { EnvEntry } from '@/types/index';\n\nexport interface EnvFile {\n exists: boolean;\n exampleExists: boolean;\n entries: EnvEntry[];\n missingKeys: string[];\n}\n\nexport const fetchEnv = async (): Promise<EnvFile> => {\n try {\n const response = await fetch('/api/env');\n if (!response.ok) return { exists: false, exampleExists: false, entries: [], missingKeys: [] };\n return await response.json();\n } catch {\n return { exists: false, exampleExists: false, entries: [], missingKeys: [] };\n }\n};\n\n/** `keep` preserves a set key's existing value server-side (the client never has\n * it, since GET withholds secret values). */\nexport type EnvEntryInput = { key: string; value: string; keep?: boolean };\n\nexport const saveEnv = async (entries: EnvEntryInput[]): Promise<boolean> => {\n try {\n const response = await fetch('/api/env', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ entries }),\n });\n return response.ok;\n } catch {\n return false;\n }\n};\n","import { PageTitle } from '@/app/components/page-title';\nimport { useProjectIdentity } from '@/app/hooks';\nimport {\n fetchConfig,\n fetchConfigFile,\n fetchEnv,\n saveConfig,\n saveEnv,\n uploadIcon,\n} from '@/app/services/system';\nimport { useAppStore } from '@/app/stores/app-store';\nimport { color, fontFamily, fontSize, space } from '@/app/styles/tokens';\nimport {\n AGENT_IDS,\n AGENT_LABELS,\n AGENT_OPTIONS,\n type AgentConfig,\n type AgentId,\n DEFAULT_AGENTS,\n type DefaultAgentsMap,\n type EnvEntry,\n type PaperCampConfig,\n} from '@/types/index';\nimport {\n Alert,\n Button,\n Card,\n CloseIcon,\n CodeBlock,\n Divider,\n IconButton,\n Input,\n Select,\n Stamp,\n Table,\n useToast,\n} from '@dendelion/paper-ui';\nimport { useEffect, useRef, useState } from 'react';\n\nconst TASK_TYPE_KEYS = ['phase', 'planDraft', 'ideaExtend', 'commitSuggest'] as const;\ntype TaskTypeKey = (typeof TASK_TYPE_KEYS)[number];\n\nconst TASK_TYPE_LABELS: Record<TaskTypeKey, string> = {\n phase: 'Phase run',\n planDraft: 'Plan draft',\n ideaExtend: 'Idea extend',\n commitSuggest: 'Commit suggest',\n};\n\ninterface AgentTaskRowProps {\n taskKey: TaskTypeKey;\n agentConfig: AgentConfig;\n isLast: boolean;\n onSave: (key: TaskTypeKey, config: AgentConfig) => Promise<void>;\n}\n\nconst TASK_COLUMN_WIDTH = 110;\nconst AGENT_COLUMN_WIDTH = 140;\nconst MODEL_COLUMN_WIDTH = 160;\nconst EFFORT_COLUMN_WIDTH = 110;\n\nconst AgentTaskRowHeader = () => (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: space[3],\n paddingBottom: space[1],\n }}\n >\n <span style={{ width: TASK_COLUMN_WIDTH, flexShrink: 0, fontSize: fontSize.sm, opacity: 0.45 }}>\n Task\n </span>\n <span\n style={{ width: AGENT_COLUMN_WIDTH, flexShrink: 0, fontSize: fontSize.sm, opacity: 0.45 }}\n >\n Agent\n </span>\n <span\n style={{ width: MODEL_COLUMN_WIDTH, flexShrink: 0, fontSize: fontSize.sm, opacity: 0.45 }}\n >\n Model\n </span>\n <span\n style={{ width: EFFORT_COLUMN_WIDTH, flexShrink: 0, fontSize: fontSize.sm, opacity: 0.45 }}\n >\n Effort\n </span>\n </div>\n);\n\nconst AgentTaskRow = ({ taskKey, agentConfig, isLast, onSave }: AgentTaskRowProps) => {\n // Fall back if the config carries an unknown agent id — never white-screen the page.\n const opts = AGENT_OPTIONS[agentConfig.agent] ?? AGENT_OPTIONS['claude-code'];\n const modelOpts = opts.model;\n const effortOpts = opts.effort;\n const [localModel, setLocalModel] = useState(agentConfig.model ?? '');\n\n useEffect(() => {\n setLocalModel(agentConfig.model ?? '');\n }, [agentConfig.model]);\n\n const handleAgentChange = (v: string) => {\n const newId = v as AgentId;\n const newOpts = AGENT_OPTIONS[newId];\n const newConfig: AgentConfig = { agent: newId };\n // Only carry the model over if the new agent accepts it: free-text (null) takes\n // anything, an enumerated list must contain it — otherwise a claude model like\n // 'opus' would leak into opencode and fail at launch.\n if (\n agentConfig.model &&\n (newOpts.model === null || newOpts.model?.includes(agentConfig.model))\n ) {\n newConfig.model = agentConfig.model;\n }\n if (agentConfig.effort && Array.isArray(newOpts.effort)) newConfig.effort = agentConfig.effort;\n onSave(taskKey, newConfig);\n };\n\n const handleModelSelectChange = (v: string) => {\n onSave(taskKey, { ...agentConfig, model: v || undefined });\n };\n\n const handleModelInputBlur = () => {\n onSave(taskKey, { ...agentConfig, model: localModel || undefined });\n };\n\n const handleEffortChange = (v: string) => {\n onSave(taskKey, { ...agentConfig, effort: v || undefined });\n };\n\n return (\n <>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: space[3],\n paddingBottom: space[2],\n paddingTop: space[2],\n }}\n >\n <span\n style={{ width: TASK_COLUMN_WIDTH, flexShrink: 0, fontSize: fontSize.sm, opacity: 0.65 }}\n >\n {TASK_TYPE_LABELS[taskKey]}\n </span>\n <Select\n size=\"small\"\n width={AGENT_COLUMN_WIDTH}\n value={agentConfig.agent}\n onChange={handleAgentChange}\n options={AGENT_IDS.map((id) => ({ value: id, label: AGENT_LABELS[id] }))}\n />\n {Array.isArray(modelOpts) ? (\n <Select\n size=\"small\"\n width={MODEL_COLUMN_WIDTH}\n value={agentConfig.model ?? ''}\n onChange={handleModelSelectChange}\n options={[\n { value: '', label: 'Default' },\n ...modelOpts.map((m) => ({ value: m, label: m })),\n ]}\n />\n ) : modelOpts === null ? (\n <Input\n size=\"small\"\n style={{ width: MODEL_COLUMN_WIDTH }}\n value={localModel}\n placeholder=\"Default model\"\n onChange={(e) => setLocalModel(e.target.value)}\n onBlur={handleModelInputBlur}\n />\n ) : null}\n {/* Reserve the effort slot even when the agent has no effort options, so\n switching agents doesn't change the control count and shift the row. */}\n <div style={{ visibility: Array.isArray(effortOpts) ? 'visible' : 'hidden' }}>\n <Select\n size=\"small\"\n width={EFFORT_COLUMN_WIDTH}\n value={agentConfig.effort ?? ''}\n onChange={handleEffortChange}\n options={[\n { value: '', label: 'Default' },\n ...(Array.isArray(effortOpts) ? effortOpts : []).map((e) => ({ value: e, label: e })),\n ]}\n />\n </div>\n </div>\n {!isLast && <Divider />}\n </>\n );\n};\n\nconst GeneralSection = () => {\n const fileRef = useRef<HTMLInputElement>(null);\n const [config, setConfig] = useState<PaperCampConfig | null | undefined>(undefined);\n const { iconDataUri: fetchedIconDataUri, loading: identityLoading } = useProjectIdentity();\n const [uploadedIconDataUri, setUploadedIconDataUri] = useState<string | null>(null);\n const iconDataUri = uploadedIconDataUri ?? fetchedIconDataUri;\n const [uploading, setUploading] = useState(false);\n const [portInput, setPortInput] = useState('');\n const [nameInput, setNameInput] = useState('');\n const { toast } = useToast();\n\n useEffect(() => {\n fetchConfig().then((c) => {\n setConfig(c);\n if (c?.port !== undefined) setPortInput(String(c.port));\n if (c?.projectName !== undefined) setNameInput(c.projectName);\n });\n }, []);\n\n const handleSaveAgentConfig = async (key: TaskTypeKey, newEntry: AgentConfig) => {\n const current = config?.defaultAgents;\n const updated: DefaultAgentsMap = {\n phase: current?.phase ?? DEFAULT_AGENTS.phase,\n planDraft: current?.planDraft ?? DEFAULT_AGENTS.planDraft,\n ideaExtend: current?.ideaExtend ?? DEFAULT_AGENTS.ideaExtend,\n commitSuggest: current?.commitSuggest ?? DEFAULT_AGENTS.commitSuggest,\n [key]: newEntry,\n };\n const ok = await saveConfig({ defaultAgents: updated });\n if (ok) {\n setConfig((prev) => (prev ? { ...prev, defaultAgents: updated } : prev));\n toast({ title: 'Saved', variant: 'success' });\n } else {\n toast({ title: 'Failed to save', variant: 'error' });\n }\n };\n\n const handleSavePort = async () => {\n const port = Number(portInput);\n if (!config || !Number.isInteger(port) || port <= 0 || port === config.port) return;\n const ok = await saveConfig({ port });\n if (ok) {\n setConfig((prev) => (prev ? { ...prev, port } : prev));\n toast({ title: 'Saved', variant: 'success' });\n } else {\n toast({ title: 'Failed to save', variant: 'error' });\n }\n };\n\n const handleSaveName = async () => {\n const projectName = nameInput.trim();\n if (!config || !projectName || projectName === config.projectName) return;\n const ok = await saveConfig({ projectName });\n if (ok) {\n setConfig((prev) => (prev ? { ...prev, projectName } : prev));\n setNameInput(projectName);\n toast({ title: 'Saved', variant: 'success' });\n } else {\n toast({ title: 'Failed to save', variant: 'error' });\n }\n };\n\n const handleFile = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) return;\n setUploading(true);\n const reader = new FileReader();\n reader.onloadend = async () => {\n const dataUri = reader.result as string;\n const ok = await uploadIcon(dataUri);\n setUploading(false);\n if (ok) {\n setUploadedIconDataUri(dataUri);\n toast({ title: 'Saved', variant: 'success' });\n } else {\n toast({ title: 'Failed to save', variant: 'error' });\n }\n };\n reader.readAsDataURL(file);\n };\n\n return (\n <div>\n <div style={{ marginBottom: space[6] }}>\n <h2 style={{ margin: 0 }}>Project Info</h2>\n </div>\n {config === undefined && <p>Loading…</p>}\n {config === null && (\n <Alert variant=\"warning\">\n No papercamp/config.json found — run <code>paper-camp init</code> in this directory first.\n </Alert>\n )}\n {config && (\n <Card size=\"small\">\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-end',\n gap: space[3],\n paddingBottom: space[3],\n }}\n >\n <Input\n value={nameInput}\n onChange={(e) => setNameInput(e.target.value)}\n onBlur={handleSaveName}\n label=\"Project Name\"\n />\n <Stamp\n size=\"small\"\n fillColor=\"rgba(143, 185, 150, 0.25)\"\n textColor={color.accentGreenDark}\n >\n v{config.version}\n </Stamp>\n </div>\n <Divider />\n\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: space[3],\n paddingBottom: space[3],\n paddingTop: space[3],\n }}\n >\n {iconDataUri && (\n <img\n src={iconDataUri}\n alt=\"Project icon\"\n style={{\n width: 40,\n height: 40,\n objectFit: 'contain',\n flexShrink: 0,\n borderRadius: 4,\n }}\n />\n )}\n <div>\n {/* paper-ui has no file-input component, so this raw input is intentional */}\n <input\n ref={fileRef}\n type=\"file\"\n accept=\".svg,.png,.jpg,.jpeg,.gif,.webp\"\n onChange={handleFile}\n style={{ display: 'none' }}\n />\n <Button\n variant=\"secondary\"\n size=\"small\"\n onClick={() => fileRef.current?.click()}\n disabled={uploading}\n >\n {uploading ? 'Uploading…' : 'Choose File'}\n </Button>\n {identityLoading && (\n <p className=\"text-sm\" style={{ opacity: 0.5, margin: `${space[1]} 0 0` }}>\n Loading…\n </p>\n )}\n {!identityLoading && !iconDataUri && !uploading && (\n <p className=\"text-sm\" style={{ opacity: 0.45, margin: `${space[1]} 0 0` }}>\n No icon set.\n </p>\n )}\n </div>\n </div>\n <Divider />\n\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-end',\n gap: space[3],\n paddingBottom: space[3],\n paddingTop: space[3],\n }}\n >\n <Input\n type=\"number\"\n value={portInput}\n onChange={(e) => setPortInput(e.target.value)}\n onBlur={handleSavePort}\n label=\"Port\"\n helperText=\"Default for `paper-camp dev`. Does not affect the running server.\"\n />\n </div>\n <Divider />\n\n <AgentTaskRowHeader />\n {TASK_TYPE_KEYS.map((key, idx) => (\n <AgentTaskRow\n key={key}\n taskKey={key}\n agentConfig={config.defaultAgents?.[key] ?? DEFAULT_AGENTS[key]}\n isLast={idx === TASK_TYPE_KEYS.length - 1}\n onSave={handleSaveAgentConfig}\n />\n ))}\n </Card>\n )}\n\n <p style={{ opacity: 0.45, fontSize: fontSize.sm, marginTop: space[4] }}>\n <strong>Initialized:</strong>{' '}\n {config ? new Date(config.initializedAt).toLocaleString() : '—'}\n </p>\n </div>\n );\n};\n\ninterface ScriptRow {\n name: string;\n command: string;\n}\n\nconst parsePackageScripts = (content: string): ScriptRow[] | null => {\n try {\n const parsed = JSON.parse(content) as { scripts?: Record<string, string> };\n if (!parsed.scripts || typeof parsed.scripts !== 'object') return null;\n return Object.entries(parsed.scripts).map(([name, command]) => ({ name, command }));\n } catch {\n return null;\n }\n};\n\nconst ConfigEditorSection = ({ fileName }: { fileName: string }) => {\n const [content, setContent] = useState<string | null>(null);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n setLoading(true);\n fetchConfigFile(fileName).then((c) => {\n setContent(c);\n setLoading(false);\n });\n }, [fileName]);\n\n if (loading) return <p>Loading…</p>;\n if (content === null) {\n return <Alert variant=\"warning\">Could not load file — {fileName} not found.</Alert>;\n }\n\n const scripts = fileName === 'package.json' ? parsePackageScripts(content) : null;\n\n return (\n <div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: space[4],\n }}\n >\n <h2 style={{ margin: 0 }}>{fileName}</h2>\n </div>\n {scripts ? (\n <Table\n data={scripts}\n columns={[\n {\n key: 'name',\n header: 'Script',\n cell: (row: ScriptRow) => (\n <span style={{ fontFamily: fontFamily.mono }}>{row.name}</span>\n ),\n width: 4,\n },\n {\n key: 'command',\n header: 'Command',\n cell: (row: ScriptRow) => (\n <span style={{ fontFamily: fontFamily.mono }}>{row.command}</span>\n ),\n },\n ]}\n />\n ) : (\n <CodeBlock code={content} filename={fileName} />\n )}\n </div>\n );\n};\n\nconst isSecretKey = (key: string) => /key|secret|token|password/i.test(key);\n\nconst EnvSection = () => {\n const [loading, setLoading] = useState(true);\n const [rows, setRows] = useState<EnvEntry[]>([]);\n const [missingKeys, setMissingKeys] = useState<string[]>([]);\n const [revealed, setRevealed] = useState<Set<number>>(new Set());\n const [saving, setSaving] = useState(false);\n const [saved, setSaved] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n fetchEnv().then((env) => {\n setRows(env.entries);\n setMissingKeys(env.missingKeys);\n setLoading(false);\n });\n }, []);\n\n const updateRow = (index: number, patch: Partial<EnvEntry>) => {\n setRows((prev) => prev.map((row, i) => (i === index ? { ...row, ...patch } : row)));\n };\n\n const handleAddRow = () => setRows((prev) => [...prev, { key: '', value: '' }]);\n\n const handleAddMissingKey = (key: string) => {\n setRows((prev) => [...prev, { key, value: '' }]);\n setMissingKeys((prev) => prev.filter((k) => k !== key));\n };\n\n const handleDeleteRow = (index: number) => {\n setRows((prev) => prev.filter((_, i) => i !== index));\n setRevealed((prev) => {\n const next = new Set(prev);\n next.delete(index);\n return next;\n });\n };\n\n const toggleReveal = (index: number) =>\n setRevealed((prev) => {\n const next = new Set(prev);\n if (next.has(index)) next.delete(index);\n else next.add(index);\n return next;\n });\n\n const handleSave = async () => {\n const trimmed = rows\n .map((row) => ({ key: row.key.trim(), value: row.value, isSet: row.isSet }))\n .filter((row) => row.key.length > 0);\n const keys = new Set(trimmed.map((row) => row.key));\n if (keys.size !== trimmed.length) {\n setError('Duplicate keys are not allowed');\n return;\n }\n setError(null);\n setSaving(true);\n // A set key left blank keeps its existing (withheld) value; a typed value\n // replaces it. The server never received the old secret, so it backfills.\n const ok = await saveEnv(\n trimmed.map((row) => ({\n key: row.key,\n value: row.value,\n keep: !!row.isSet && row.value === '',\n })),\n );\n setSaving(false);\n if (ok) {\n // Everything just saved now exists with a withheld value — reflect that.\n setRows(trimmed.map((row) => ({ key: row.key, value: '', isSet: true })));\n setSaved(true);\n setTimeout(() => setSaved(false), 2000);\n } else {\n setError('Failed to save .env');\n }\n };\n\n if (loading) return <p>Loading…</p>;\n\n return (\n <div>\n <h2 style={{ margin: 0, marginBottom: space[4] }}>Environment Variables</h2>\n {error && <Alert variant=\"warning\">Could not save — {error}</Alert>}\n {missingKeys.length > 0 && (\n <Card size=\"small\" accent accentColor=\"amber\">\n <p style={{ margin: 0, fontWeight: 600 }}>Missing from .env</p>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: space[2], alignItems: 'center' }}>\n <span>Present in .env.example but not set:</span>\n {missingKeys.map((key) => (\n <Button\n key={key}\n variant=\"secondary\"\n size=\"small\"\n onClick={() => handleAddMissingKey(key)}\n >\n + {key}\n </Button>\n ))}\n </div>\n </Card>\n )}\n <Table\n data={rows}\n columns={[\n {\n key: 'key',\n header: 'Key',\n cell: (row: EnvEntry, index: number) => (\n <Input\n value={row.key}\n placeholder=\"KEY\"\n style={{ fontFamily: fontFamily.mono }}\n onChange={(e) => updateRow(index, { key: e.target.value })}\n />\n ),\n width: 6,\n },\n {\n key: 'value',\n header: 'Value',\n cell: (row: EnvEntry, index: number) => {\n const masked = isSecretKey(row.key) && !revealed.has(index);\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: space[2] }}>\n <Input\n type={masked ? 'password' : 'text'}\n value={row.value}\n placeholder={row.isSet ? '•••••• set — leave blank to keep' : 'value'}\n style={{ fontFamily: fontFamily.mono, flex: 1 }}\n onChange={(e) => updateRow(index, { value: e.target.value })}\n />\n {isSecretKey(row.key) && (\n <Button variant=\"ghost\" size=\"small\" onClick={() => toggleReveal(index)}>\n {masked ? 'Show' : 'Hide'}\n </Button>\n )}\n </div>\n );\n },\n },\n {\n key: 'actions',\n header: '',\n width: 2,\n cell: (_row: EnvEntry, index: number) => (\n <IconButton\n icon={<CloseIcon />}\n variant=\"ghost\"\n size=\"small\"\n label=\"Remove variable\"\n onClick={() => handleDeleteRow(index)}\n />\n ),\n },\n ]}\n />\n <div style={{ display: 'flex', alignItems: 'center', gap: space[3], marginTop: space[4] }}>\n <Button variant=\"secondary\" size=\"small\" onClick={handleAddRow}>\n + Add variable\n </Button>\n <Button variant=\"primary\" size=\"small\" onClick={handleSave} disabled={saving}>\n {saving ? 'Saving…' : 'Save'}\n </Button>\n {saved && (\n <span className=\"text-sm\" style={{ opacity: 0.6 }}>\n Saved\n </span>\n )}\n </div>\n </div>\n );\n};\n\nexport const SettingsPage = () => {\n const activeSection = useAppStore((s) => s.activeSettingsSection);\n\n return (\n <div>\n <PageTitle>Settings</PageTitle>\n {activeSection === 'general' && <GeneralSection />}\n {activeSection === 'env' && <EnvSection />}\n {activeSection.startsWith('config:') && (\n <ConfigEditorSection fileName={activeSection.slice('config:'.length)} />\n )}\n </div>\n );\n};\n","import { fetchConfigs, fetchEnv } from '@/app/services/system';\nimport { useAppStore } from '@/app/stores/app-store';\nimport { ListItem } from '@dendelion/paper-ui';\nimport { useEffect, useState } from 'react';\nimport { SidebarSection } from '../../plans/components/sidebar-section';\n\nexport const SettingsSidebar = () => {\n const activeSection = useAppStore((s) => s.activeSettingsSection);\n const setActiveSection = useAppStore((s) => s.setActiveSettingsSection);\n const configFiles = useAppStore((s) => s.settingsConfigFiles);\n const setConfigFiles = useAppStore((s) => s.setSettingsConfigFiles);\n const [showEnv, setShowEnv] = useState(false);\n\n useEffect(() => {\n fetchConfigs().then(setConfigFiles);\n fetchEnv().then((env) => setShowEnv(env.exists || env.exampleExists));\n }, [setConfigFiles]);\n\n return (\n <>\n <SidebarSection label=\"General\">\n <ListItem\n size=\"small\"\n active={activeSection === 'general'}\n onClick={() => setActiveSection('general')}\n >\n Project Info\n </ListItem>\n </SidebarSection>\n\n {showEnv && (\n <SidebarSection label=\"Environment\">\n <ListItem\n size=\"small\"\n active={activeSection === 'env'}\n onClick={() => setActiveSection('env')}\n >\n Env Vars\n </ListItem>\n </SidebarSection>\n )}\n\n {configFiles.length > 0 && (\n <SidebarSection label=\"Config Files\">\n {configFiles.map((name) => (\n <ListItem\n key={name}\n size=\"small\"\n active={activeSection === `config:${name}`}\n onClick={() => setActiveSection(`config:${name}`)}\n >\n {name}\n </ListItem>\n ))}\n </SidebarSection>\n )}\n </>\n );\n};\n"],"names":["fetchConfig","response","saveConfig","updates","fetchConfigs","fetchConfigFile","name","fetchEnv","saveEnv","entries","TASK_TYPE_KEYS","TASK_TYPE_LABELS","TASK_COLUMN_WIDTH","AGENT_COLUMN_WIDTH","MODEL_COLUMN_WIDTH","EFFORT_COLUMN_WIDTH","AgentTaskRowHeader","jsxs","space","jsx","fontSize","AgentTaskRow","taskKey","agentConfig","isLast","onSave","opts","AGENT_OPTIONS","modelOpts","effortOpts","localModel","setLocalModel","useState","useEffect","handleAgentChange","v","newId","newOpts","newConfig","_a","handleModelSelectChange","handleModelInputBlur","handleEffortChange","Fragment","Select","AGENT_IDS","id","AGENT_LABELS","m","Input","e","Divider","GeneralSection","fileRef","useRef","config","setConfig","fetchedIconDataUri","identityLoading","useProjectIdentity","uploadedIconDataUri","setUploadedIconDataUri","iconDataUri","uploading","setUploading","portInput","setPortInput","nameInput","setNameInput","toast","useToast","c","handleSaveAgentConfig","key","newEntry","current","updated","DEFAULT_AGENTS","prev","handleSavePort","port","handleSaveName","projectName","handleFile","file","reader","dataUri","ok","uploadIcon","Alert","Card","Stamp","color","Button","idx","parsePackageScripts","content","parsed","command","ConfigEditorSection","fileName","setContent","loading","setLoading","scripts","Table","row","fontFamily","CodeBlock","isSecretKey","EnvSection","rows","setRows","missingKeys","setMissingKeys","revealed","setRevealed","saving","setSaving","saved","setSaved","error","setError","env","updateRow","index","patch","i","handleAddRow","handleAddMissingKey","k","handleDeleteRow","_","next","toggleReveal","handleSave","trimmed","masked","_row","IconButton","CloseIcon","SettingsPage","activeSection","useAppStore","s","PageTitle","SettingsSidebar","setActiveSection","configFiles","setConfigFiles","showEnv","setShowEnv","SidebarSection","ListItem"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ @charset "UTF-8";*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.bottom-1\/4{bottom:25%}.left-1\/2{left:50%}.left-1\/4{left:25%}.right-1\/4{right:25%}.top-0{top:0}.top-1\/2{top:50%}.top-1\/4{top:25%}.top-28{top:7rem}.z-10{z-index:10}.z-50{z-index:50}.m-2{margin:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-2{margin-left:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.inline-block{display:inline-block}.list-item{display:list-item}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-14{height:3.5rem}.h-20{height:5rem}.h-24{height:6rem}.h-3{height:.75rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-8{height:2rem}.h-96{height:24rem}.h-\[600px\]{height:600px}.max-h-\[calc\(100vh-10rem\)\]{max-height:calc(100vh - 10rem)}.min-h-\[140px\]{min-height:140px}.min-h-\[calc\(100vh-80px\)\]{min-height:calc(100vh - 80px)}.min-h-screen{min-height:100vh}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-20{width:5rem}.w-3{width:.75rem}.w-32{width:8rem}.w-72{width:18rem}.w-96{width:24rem}.w-\[600px\]{width:600px}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:42rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.resize{resize:both}.scroll-mt-24{scroll-margin-top:6rem}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-wrap{flex-wrap:wrap}.justify-end{justify-content:flex-end}.justify-between{justify-content:space-between}.gap-10{gap:2.5rem}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-2{row-gap:.5rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-20>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-ink-100{--tw-border-opacity: 1;border-color:rgb(229 227 223 / var(--tw-border-opacity))}.bg-canvas-200{--tw-bg-opacity: 1;background-color:rgb(240 234 216 / var(--tw-bg-opacity))}.bg-paper-100{--tw-bg-opacity: 1;background-color:rgb(250 248 240 / var(--tw-bg-opacity))}.bg-paper-50{--tw-bg-opacity: 1;background-color:rgb(253 252 248 / var(--tw-bg-opacity))}.bg-canvas-weave{background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='cv'%3E%3CfeTurbulence type='turbulence' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0.62 0 0 0 0 0.60 0 0 0 0 0.52 0 0 0 0.42 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23cv)' opacity='1'/%3E%3C/svg%3E")}.bg-kraft-texture{background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='k'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0.50 0 0 0 0 0.35 0 0 0 0 0.20 0 0 0 0.55 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23k)' opacity='1'/%3E%3C/svg%3E")}.bg-paper-texture{background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.04'/%3E%3C/svg%3E")}.bg-parchment-texture{background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='p'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.7' numOctaves='5' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0.55 0 0 0 0 0.48 0 0 0 0 0.35 0 0 0 0.45 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23p)' opacity='1'/%3E%3C/svg%3E")}.bg-speckle-texture{background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='speckle'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.4' numOctaves='1' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23speckle)' opacity='0.14'/%3E%3C/svg%3E")}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-24{padding-bottom:6rem}.pb-40{padding-bottom:10rem}.pr-5{padding-right:1.25rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-display{font-family:Luminari,Cormorant Garamond,Georgia,serif}.font-handwritten{font-family:Caveat,cursive}.font-mono{font-family:JetBrains Mono,monospace}.font-serif{font-family:Cormorant Garamond,Georgia,serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-5xl{font-size:3rem;line-height:1}.text-7xl{font-size:4.5rem;line-height:1}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.capitalize{text-transform:capitalize}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-black\/60{color:#0009}.text-black\/80{color:#000c}.text-ink-600{--tw-text-opacity: 1;color:rgb(80 76 70 / var(--tw-text-opacity))}.text-ink-900{--tw-text-opacity: 1;color:rgb(26 25 23 / var(--tw-text-opacity))}.text-watercolor-rose{--tw-text-opacity: 1;color:rgb(201 139 139 / var(--tw-text-opacity))}.text-white\/60{color:#fff9}.text-white\/80{color:#fffc}.accent-\[\#8FB996\]{accent-color:#8FB996}.shadow-ink-sm{--tw-shadow: 0 1px 2px rgba(26, 25, 23, .12);--tw-shadow-colored: 0 1px 2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-paper-lg{--tw-shadow: 0 10px 15px rgba(61, 53, 43, .1), 0 4px 6px rgba(61, 53, 43, .08);--tw-shadow-colored: 0 10px 15px var(--tw-shadow-color), 0 4px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-paper-md{--tw-shadow: 0 4px 6px rgba(61, 53, 43, .08), 0 2px 4px rgba(61, 53, 43, .06);--tw-shadow-colored: 0 4px 6px var(--tw-shadow-color), 0 2px 4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-paper-sm{--tw-shadow: 0 1px 2px rgba(61, 53, 43, .08), 0 1px 1px rgba(61, 53, 43, .06);--tw-shadow-colored: 0 1px 2px var(--tw-shadow-color), 0 1px 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-pressed{--tw-shadow: inset 0 2px 4px rgba(61, 53, 43, .15);--tw-shadow-colored: inset 0 2px 4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.blur-3xl{--tw-blur: blur(64px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / .1)) drop-shadow(0 1px 1px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}:root{--pui-bg-base: #FDFCF8;--pui-bg-surface: #FAF8F0;--pui-bg-elevated: #F5F1E6;--pui-text-primary: #1A1917;--pui-text-secondary: #68635C;--pui-sketch-stroke: rgba(61, 53, 43, .32)}body{font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);background-color:#fdfcf8;color:#1a1917;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.04'/%3E%3C/svg%3E");background-repeat:repeat;background-size:200px 200px}@font-face{font-family:Luminari;src:url(/fonts/Luminari-Regular.woff) format("woff");font-weight:400;font-style:normal;font-display:swap;size-adjust:88%}button{font-family:var(--paper-button-font, "Luminari", "Cormorant Garamond", Georgia, serif)}input,select,textarea{font-family:Cormorant Garamond,Georgia,serif}code,pre{font-family:JetBrains Mono,monospace}html,body,#root{height:100%}html{scroll-behavior:smooth}input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active{-webkit-box-shadow:inset 0 0 0px 1000px #F5F1E6!important;-webkit-text-fill-color:#1A1917!important;border:1px solid rgba(61,53,43,.08)!important;border-radius:.75rem!important;-webkit-transition:background-color 5000s ease-in-out 0s!important;transition:background-color 5000s ease-in-out 0s!important}input:-moz-autofill{background-color:#f5f1e6!important;color:#1a1917!important;border:1px solid rgba(61,53,43,.08)!important}input:-webkit-autofill:first-line{color:#1a1917!important;font-family:inherit!important;font-size:inherit!important}.last\:border-0:last-child{border-width:0px}.hover\:opacity-80:hover{opacity:.8}.hover\:shadow-paper-lg:hover{--tw-shadow: 0 10px 15px rgba(61, 53, 43, .1), 0 4px 6px rgba(61, 53, 43, .08);--tw-shadow-colored: 0 10px 15px var(--tw-shadow-color), 0 4px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}@media (min-width: 640px){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:px-10{padding-left:2.5rem;padding-right:2.5rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-6xl{font-size:3.75rem;line-height:1}}@media (min-width: 768px){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.md\:text-7xl{font-size:4.5rem;line-height:1}}@media (min-width: 1024px){.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media (min-width: 1280px){.xl\:grid-cols-\[1fr_330px\]{grid-template-columns:1fr 330px}}.button-module__button___Z331g{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:.5rem;border:none;cursor:pointer;font-family:var(--paper-button-font, var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif));font-weight:600;letter-spacing:.01em;line-height:1.2;color:#1a1917;transition:color .25s ease,filter .25s ease;overflow:visible;background:transparent}.button-module__button___Z331g:focus-visible{outline:2px solid #8A9BA8;outline-offset:2px}.button-module__button___Z331g:disabled{opacity:.5;cursor:not-allowed;filter:none}.button-module__blobBg___QQFzf{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:0;pointer-events:none}.button-module__blobFill___XwLjV{transition:fill .25s ease}.button-module__blobRing___567UW{fill:none;stroke:#3d352b59;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;opacity:0;transition:opacity .35s ease 50ms}.button-module__button___Z331g:hover:not(:disabled) .button-module__blobRing___567UW{opacity:1}.button-module__button___Z331g:active:not(:disabled) .button-module__blobRing___567UW{stroke:#3d352b8c}.button-module__isActive___FXNSJ .button-module__blobRing___567UW{opacity:1}.button-module__primary___ppbyq .button-module__blobFill___XwLjV{fill:#f0ead8}.button-module__primary___ppbyq:hover:not(:disabled) .button-module__blobFill___XwLjV{fill:#e8dec8}.button-module__primary___ppbyq:active:not(:disabled) .button-module__blobFill___XwLjV{fill:#ddd2b8}.button-module__isActive___FXNSJ.button-module__primary___ppbyq .button-module__blobFill___XwLjV{fill:#e8dec8}.button-module__isActive___FXNSJ.button-module__primary___ppbyq:hover .button-module__blobFill___XwLjV{fill:#ddd2b8}.button-module__secondary___esy5L .button-module__blobFill___XwLjV{fill:#faf8f0}.button-module__secondary___esy5L:hover:not(:disabled) .button-module__blobFill___XwLjV{fill:#f5f0e4}.button-module__secondary___esy5L:active:not(:disabled) .button-module__blobFill___XwLjV{fill:#ede6d6}.button-module__isActive___FXNSJ.button-module__secondary___esy5L .button-module__blobFill___XwLjV{fill:#f5f0e4}.button-module__isActive___FXNSJ.button-module__secondary___esy5L:hover .button-module__blobFill___XwLjV{fill:#ede6d6}.button-module__ghost___NisA0{color:#68635c}.button-module__ghost___NisA0 .button-module__blobFill___XwLjV{fill:transparent}.button-module__ghost___NisA0:hover:not(:disabled) .button-module__blobFill___XwLjV{fill:#8fb9961f}.button-module__ghost___NisA0:active:not(:disabled) .button-module__blobFill___XwLjV{fill:#8fb99633}.button-module__ghost___NisA0 .button-module__blobRing___567UW{stroke:#3d352b38}.button-module__isActive___FXNSJ.button-module__ghost___NisA0 .button-module__blobFill___XwLjV{fill:#8fb99640}.button-module__isActive___FXNSJ.button-module__ghost___NisA0:hover .button-module__blobFill___XwLjV{fill:#8fb9964d}.button-module__danger___Wnvuq{color:#9e5e5e}.button-module__danger___Wnvuq .button-module__blobFill___XwLjV{fill:#f0ead8}.button-module__danger___Wnvuq:hover:not(:disabled) .button-module__blobFill___XwLjV{fill:#e8d4d4}.button-module__danger___Wnvuq:active:not(:disabled) .button-module__blobFill___XwLjV{fill:#dec4c4}.button-module__isActive___FXNSJ.button-module__danger___Wnvuq .button-module__blobFill___XwLjV{fill:#e8d4d4}.button-module__isActive___FXNSJ.button-module__danger___Wnvuq:hover .button-module__blobFill___XwLjV{fill:#dec4c4}.button-module__chalkboard___d3Nqb{color:#d4e8cb}.button-module__chalkboard___d3Nqb .button-module__blobFill___XwLjV{display:none}.button-module__chalkboard___d3Nqb .button-module__blobRing___567UW{stroke:#c8d2c373;stroke-width:2.2}.button-module__chalkboard___d3Nqb:active:not(:disabled) .button-module__blobRing___567UW{stroke:#c8d2c3a6}.button-module__chalkboard___d3Nqb.button-module__ghost___NisA0 .button-module__blobRing___567UW{stroke:#c8d2c359}.button-module__chalkboard___d3Nqb.button-module__danger___Wnvuq{color:#e8a0a0}.button-module__small___u7y8a{padding:.5rem 1rem;font-size:1.125rem}.button-module__medium___HBIAj{padding:.75rem 1.5rem;font-size:1.5rem}.button-module__large___RPzNy{padding:1rem 2rem;font-size:1.875rem}.button-module__fullWidth___H0P0F{width:100%}.button-module__iconLeft___s60SZ,.button-module__iconRight___75eFu{display:flex;align-items:center;justify-content:center;flex-shrink:0;position:relative;z-index:1}.button-module__label___pXAyM{position:relative;z-index:1}.sketch-border-module__svg___whV4x{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none;overflow:visible;z-index:2}.sketch-border-module__behind___lgdYV{z-index:0}.sketch-border-module__stroke___vAm-v{fill:none;stroke:var(--sketch-stroke, var(--pui-sketch-stroke, rgba(61, 53, 43, .32)));stroke-linecap:round;stroke-linejoin:round;transition:stroke .15s ease-out}.sketch-border-module__fill___zlpd6{stroke:none;fill:var(--sketch-fill, transparent);transition:fill .15s ease-out}.page-module__page___-uHnG{position:relative;display:flex;flex-direction:column;height:100%;max-width:800px;margin:0 auto;filter:drop-shadow(0 4px 6px rgba(61,53,43,.1)) drop-shadow(0 1px 2px rgba(61,53,43,.06));--sketch-stroke: transparent}.page-module__outlined___Wwtyg{--sketch-stroke: rgba(61, 53, 43, .32)}.page-module__surface___sWfI6{position:relative;z-index:1;flex:1 1 auto;min-height:0;overflow-y:auto;padding:2rem;font-size:1.125rem;line-height:32px;background-color:#fdfcf8;border-radius:11.5587560666px 13.7876681998px 14.3660766968px 9.5423217072px;clip-path:var(--sketch-clip)}.page-module__surface___sWfI6>*+*{margin-top:2rem}.page-module__surface___sWfI6 h1,.page-module__surface___sWfI6 h2,.page-module__surface___sWfI6 h3,.page-module__surface___sWfI6 h4,.page-module__surface___sWfI6 h5,.page-module__surface___sWfI6 h6{line-height:32px}.page-module__withAccent___lsv-m:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;clip-path:var(--sketch-clip);mix-blend-mode:multiply;pointer-events:none;opacity:.08}.page-module__accentBlue___XxbMV:before{background:radial-gradient(300px 300px at calc(100% + 80px) -80px,#AFC6E0 0%,transparent 70%)}.page-module__accentGreen___Ne6Q8:before{background:radial-gradient(300px 300px at calc(100% + 80px) -80px,#B5D4BA 0%,transparent 70%)}.page-module__accentAmber___kLAwa:before{background:radial-gradient(300px 300px at calc(100% + 80px) -80px,#E4C9A8 0%,transparent 70%)}.page-module__accentRose___O9ZbZ:before{background:radial-gradient(300px 300px at calc(100% + 80px) -80px,#DEB5B5 0%,transparent 70%)}.page-module__accentSlate___xCB66:before{background:radial-gradient(300px 300px at calc(100% + 80px) -80px,#B0BEC8 0%,transparent 70%)}.layout-module__layout___O1aWi{display:flex;flex-direction:column;height:100vh;width:100%;overflow:hidden}.layout-module__header___I-kxe{display:flex;align-items:center;justify-content:space-between;height:48px;padding:0 1.5rem;background-color:#faf8f0;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='speckle'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.4' numOctaves='1' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23speckle)' opacity='0.14'/%3E%3C/svg%3E");background-repeat:repeat;background-size:200px 200px;border-bottom:1px solid rgba(61,53,43,.12);box-shadow:0 1px 2px #3d352b14,0 1px 1px #3d352b0f;flex-shrink:0;position:relative;z-index:200}.layout-module__headerLeft___JChJQ,.layout-module__headerTitles___aqSUG{display:flex;align-items:baseline;gap:.75rem}.layout-module__headerTitle___wvr39{font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-size:1.25rem;font-weight:600;color:#1a1917;margin:0;line-height:1;white-space:nowrap}.layout-module__headerSubtitle___6f5BD{font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-size:1rem;font-weight:400;color:#a8a399;margin:0;line-height:1;white-space:nowrap}.layout-module__headerActions___adC12{display:flex;align-items:center;gap:.75rem}.layout-module__mobileToggle___4WpVG{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:12px;background:transparent;border:none;color:#68635c;cursor:pointer;transition:all .15s ease-out}.layout-module__mobileToggle___4WpVG:hover{background-color:#0000000a;color:#1a1917}@media (min-width: 768px){.layout-module__mobileToggle___4WpVG{display:none}}.layout-module__body___tywNf{display:flex;flex:1;min-width:0;position:relative;overflow:hidden}.layout-module__mobileOverlay___tzbBC{position:fixed;top:0;right:0;bottom:0;left:0;width:100%;height:100%;padding:0;border:none;background:#1a191766;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);cursor:default;z-index:250}.layout-module__sidebar___8VKGq{width:240px;flex-shrink:0;padding:32px;position:sticky;top:0;align-self:stretch;height:100%;overflow-y:auto}@media (max-width: 767px){.layout-module__sidebar___8VKGq{position:fixed;top:0;left:0;width:280px;height:100vh;padding:32px;background-color:#fdfcf8;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.04'/%3E%3C/svg%3E");background-repeat:repeat;background-size:200px 200px;box-shadow:0 10px 15px #3d352b1a,0 4px 6px #3d352b14;transform:translate(-100%);transition:transform .3s ease-out;z-index:300}}.layout-module__sidebarOpen___47rtr{transform:translate(0)}.layout-module__sidebarInner___tq2X6{display:flex;flex-direction:column;height:100%}.layout-module__logoArea___RLnC0{height:32px;display:flex;align-items:center;margin-bottom:0;padding-bottom:0}.layout-module__logoText___pAmfV{font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-size:1.25rem;font-weight:700;color:#1a1917;letter-spacing:.02em;line-height:32px}.layout-module__nav___FxcrZ{display:flex;flex-direction:column;gap:0;flex:1;margin-top:32px}.layout-module__main___9z7bu{flex:1;display:flex;flex-direction:column;min-width:0;overflow:hidden}.layout-module__navIslandFixed___H4TwP{position:fixed;bottom:1.5rem;left:50%;z-index:100;transform:translate(-50%);pointer-events:none}.layout-module__navIslandFixed___H4TwP>*{pointer-events:auto}.layout-module__content___jL-VB{flex:1;min-height:0;overflow:hidden;padding:32px;line-height:32px}.layout-module__contentWithPage___vVdfN{flex:1;min-height:0;overflow:hidden;padding:24px 32px;line-height:32px}.layout-module__footer___LyakU{padding:20px 32px;background-color:#faf8f0;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.04'/%3E%3C/svg%3E");background-repeat:repeat;background-size:200px 200px;border-top:1px solid rgba(61,53,43,.12);text-align:center;flex-shrink:0}.layout-module__footerText___8BYxc{font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);color:#a8a399;margin:0}.island-module__island___Yd2ej{position:fixed;bottom:1.5rem;left:50%;transform:translate(-50%);z-index:50;display:inline-flex;align-items:center;gap:1rem;padding:.75rem 1.25rem;border-radius:28px;background-color:#e5dbc4;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='k'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0.50 0 0 0 0 0.35 0 0 0 0 0.20 0 0 0 0.55 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23k)' opacity='1'/%3E%3C/svg%3E");background-repeat:repeat;background-size:200px 200px;border:1px solid rgba(61,53,43,.12);box-shadow:0 10px 15px #3d352b1a,0 4px 6px #3d352b14,inset 0 1px #ffffff80}.island-module__chalkboard___yK6AH{border-color:#c8d2c333;box-shadow:0 10px 15px #00000040,0 4px 6px #0003,inset 0 1px #c8d2c31a}.checkbox-module__wrapper___uLYMI{display:flex;align-items:center;gap:1rem;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.checkbox-module__wrapper___uLYMI:hover .checkbox-module__blobFill___mPJSR{fill:#7c9cc02e}.checkbox-module__wrapper___uLYMI:hover .checkbox-module__input___Ptgt7:checked~.checkbox-module__blobBg___bw3sn .checkbox-module__blobFill___mPJSR,.checkbox-module__wrapper___uLYMI:hover .checkbox-module__input___Ptgt7:indeterminate~.checkbox-module__blobBg___bw3sn .checkbox-module__blobFill___mPJSR{fill:#e8dec8}.checkbox-module__labelLeft___-vAmH{flex-direction:row-reverse}.checkbox-module__input___Ptgt7{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.checkbox-module__input___Ptgt7:focus-visible~.checkbox-module__box___yAh-r{outline:2px dotted #A8A399;outline-offset:2px}.checkbox-module__input___Ptgt7:checked~.checkbox-module__box___yAh-r,.checkbox-module__input___Ptgt7:indeterminate~.checkbox-module__box___yAh-r{--sketch-stroke: rgba(61, 53, 43, .7)}.checkbox-module__input___Ptgt7:checked~.checkbox-module__box___yAh-r .checkbox-module__checkmark___tTyBz,.checkbox-module__input___Ptgt7:indeterminate~.checkbox-module__box___yAh-r .checkbox-module__checkmark___tTyBz{stroke-dashoffset:0}.checkbox-module__input___Ptgt7:checked~.checkbox-module__box___yAh-r .checkbox-module__indeterminateLine___IosI-,.checkbox-module__input___Ptgt7:indeterminate~.checkbox-module__box___yAh-r .checkbox-module__indeterminateLine___IosI-{stroke-dashoffset:0}.checkbox-module__input___Ptgt7:checked~.checkbox-module__blobBg___bw3sn .checkbox-module__blobFill___mPJSR,.checkbox-module__input___Ptgt7:indeterminate~.checkbox-module__blobBg___bw3sn .checkbox-module__blobFill___mPJSR{fill:#f0ead8}.checkbox-module__input___Ptgt7:disabled~.checkbox-module__box___yAh-r{opacity:.4;cursor:not-allowed}.checkbox-module__boxWrapper___byjoS{position:relative;display:flex;align-items:center;justify-content:center;width:40px;height:40px}.checkbox-module__blobBg___bw3sn{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:0;pointer-events:none}.checkbox-module__blobFill___mPJSR{transition:fill .25s ease;fill:transparent}.checkbox-module__box___yAh-r{display:flex;align-items:center;justify-content:center;width:24px;height:24px;background-color:transparent;position:relative;z-index:1;border-radius:6px;--sketch-stroke: rgba(61, 53, 43, .42)}.checkbox-module__box___yAh-r:hover{--sketch-stroke: rgba(61, 53, 43, .6)}.checkbox-module__icon___RO-yn{width:20px;height:20px;color:#1a1917}.checkbox-module__checkmark___tTyBz{stroke-dasharray:36;stroke-dashoffset:36;transition:stroke-dashoffset .2s ease-out}.checkbox-module__indeterminateLine___IosI-{stroke-dasharray:20;stroke-dashoffset:20;transition:stroke-dashoffset .2s ease-out}.checkbox-module__labelText___bAnLr{font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-size:1.125rem;font-weight:400;color:#68635c;line-height:1.5}.checkbox-module__chalkboard___sv6SL .checkbox-module__labelText___bAnLr{color:#a8b5a0}.checkbox-module__chalkboard___sv6SL .checkbox-module__box___yAh-r{--sketch-stroke: rgba(200, 210, 195, .5)}.checkbox-module__chalkboard___sv6SL .checkbox-module__box___yAh-r:hover{--sketch-stroke: #d4e8cb}.checkbox-module__chalkboard___sv6SL .checkbox-module__icon___RO-yn{color:#d4e8cb}.checkbox-module__chalkboard___sv6SL .checkbox-module__blobFill___mPJSR{display:none}.checkbox-module__chalkboard___sv6SL .checkbox-module__input___Ptgt7:focus-visible~.checkbox-module__box___yAh-r{outline-color:#d4e8cb}.checkbox-module__chalkboard___sv6SL .checkbox-module__input___Ptgt7:checked~.checkbox-module__box___yAh-r,.checkbox-module__chalkboard___sv6SL .checkbox-module__input___Ptgt7:indeterminate~.checkbox-module__box___yAh-r{--sketch-stroke: #d4e8cb}.icon-button-module__iconButton___avg6i{position:relative;display:flex;align-items:center;justify-content:center;border:none;cursor:pointer;color:#1a1917;transition:color .25s ease,filter .25s ease;flex-shrink:0;overflow:visible;background:transparent}.icon-button-module__iconButton___avg6i:focus-visible{outline:2px solid #8A9BA8;outline-offset:2px}.icon-button-module__iconButton___avg6i:disabled{opacity:.5;cursor:not-allowed;filter:none}.icon-button-module__blobBg___466Vy{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:0;pointer-events:none}.icon-button-module__blobFill___FTN1g{transition:fill .25s ease}.icon-button-module__blobRing___hRdQb{fill:none;stroke:#3d352b59;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;opacity:0;transition:opacity .35s ease 50ms}.icon-button-module__iconButton___avg6i:hover:not(:disabled) .icon-button-module__blobRing___hRdQb{opacity:1}.icon-button-module__iconButton___avg6i:active:not(:disabled) .icon-button-module__blobRing___hRdQb{stroke:#3d352b8c}.icon-button-module__isActive___XlvtM .icon-button-module__blobRing___hRdQb{opacity:1}.icon-button-module__icon___h204x{position:relative;z-index:1;display:flex;align-items:center;justify-content:center}.icon-button-module__default___9frNR .icon-button-module__blobFill___FTN1g{fill:#f0ead8}.icon-button-module__default___9frNR:hover:not(:disabled) .icon-button-module__blobFill___FTN1g{fill:#e8dec8}.icon-button-module__default___9frNR:active:not(:disabled) .icon-button-module__blobFill___FTN1g{fill:#ddd2b8}.icon-button-module__isActive___XlvtM.icon-button-module__default___9frNR .icon-button-module__blobFill___FTN1g{fill:#e8dec8}.icon-button-module__isActive___XlvtM.icon-button-module__default___9frNR:hover .icon-button-module__blobFill___FTN1g{fill:#ddd2b8}.icon-button-module__ghost___Wbxog{color:#68635c}.icon-button-module__ghost___Wbxog .icon-button-module__blobFill___FTN1g{fill:transparent}.icon-button-module__ghost___Wbxog:hover:not(:disabled) .icon-button-module__blobFill___FTN1g{fill:#8fb9961f}.icon-button-module__ghost___Wbxog:active:not(:disabled) .icon-button-module__blobFill___FTN1g{fill:#8fb99633}.icon-button-module__ghost___Wbxog .icon-button-module__blobRing___hRdQb{stroke:#3d352b38}.icon-button-module__isActive___XlvtM.icon-button-module__ghost___Wbxog .icon-button-module__blobFill___FTN1g{fill:#8fb99640}.icon-button-module__isActive___XlvtM.icon-button-module__ghost___Wbxog:hover .icon-button-module__blobFill___FTN1g{fill:#8fb9964d}.icon-button-module__danger___p0Xz5{color:#9e5e5e}.icon-button-module__danger___p0Xz5 .icon-button-module__blobFill___FTN1g{fill:#f0ead8}.icon-button-module__danger___p0Xz5:hover:not(:disabled) .icon-button-module__blobFill___FTN1g{fill:#e8d4d4}.icon-button-module__danger___p0Xz5:active:not(:disabled) .icon-button-module__blobFill___FTN1g{fill:#dec4c4}.icon-button-module__isActive___XlvtM.icon-button-module__danger___p0Xz5 .icon-button-module__blobFill___FTN1g{fill:#e8d4d4}.icon-button-module__isActive___XlvtM.icon-button-module__danger___p0Xz5:hover .icon-button-module__blobFill___FTN1g{fill:#dec4c4}.icon-button-module__small___bPnCU{width:40px;height:40px}.icon-button-module__small___bPnCU .icon-button-module__icon___h204x{width:20px;height:20px}.icon-button-module__medium___nOxPf{width:48px;height:48px}.icon-button-module__medium___nOxPf .icon-button-module__icon___h204x{width:24px;height:24px}.icon-button-module__large___UBU5z{width:56px;height:56px}.icon-button-module__large___UBU5z .icon-button-module__icon___h204x{width:28px;height:28px}.icon-button-module__chalkboard___mi0sQ{color:#d4e8cb}.icon-button-module__chalkboard___mi0sQ .icon-button-module__blobFill___FTN1g{display:none}.icon-button-module__chalkboard___mi0sQ .icon-button-module__blobRing___hRdQb{stroke:#c8d2c373;stroke-width:2.2}.icon-button-module__chalkboard___mi0sQ:active:not(:disabled) .icon-button-module__blobRing___hRdQb{stroke:#c8d2c3a6}.icon-button-module__chalkboard___mi0sQ.icon-button-module__ghost___Wbxog .icon-button-module__blobRing___hRdQb{stroke:#c8d2c359}.icon-button-module__chalkboard___mi0sQ.icon-button-module__danger___p0Xz5{color:#e8a0a0}.stamp-module__stamp___5qaNY{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:.25rem;font-family:Caveat,cursive;font-weight:500;line-height:1.2}.stamp-module__small___BBlBg{padding:.25rem .75rem;font-size:1.125rem}.stamp-module__medium___HG2YD{padding:.5rem 1rem;font-size:1.5rem}.stamp-module__large___aUT0I{padding:.75rem 1.25rem;font-size:1.875rem}.stamp-module__blobBg___Mdrdd{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:0;pointer-events:none}.stamp-module__blobFill___QyCeB{transition:fill .25s ease}.stamp-module__blobRing___EUDx7{fill:none;stroke-width:1.8}.stamp-module__dot___qZyCR{position:relative;z-index:1;width:6px;height:6px;border-radius:50%;background:currentColor;flex-shrink:0}.stamp-module__label___T89iH{position:relative;z-index:1;white-space:nowrap}.stamp-module__chalkboard___syI4T{color:#d4e8cb}.copy-button-module__copyButton___-hTo4{font-family:JetBrains Mono,monospace;font-size:.75rem;padding:.125rem .5rem;border-radius:.375rem;transition:background-color .15s ease,color .15s ease;background-color:#3d352b0f;color:#68635c;border:1px solid rgba(61,53,43,.12);cursor:pointer}.copy-button-module__copyButton___-hTo4:hover{color:#1a1917;border-color:#3d352b33}.copy-button-module__copyButton___-hTo4:focus-visible{outline:2px solid #8A9BA8;outline-offset:2px}.copy-button-module__dark___O45N-{background-color:#ffffff1a;color:#a8a399;border-color:#ffffff26}.copy-button-module__chalkboard___hW4aw{background-color:#c8dcc31f;color:#a8b5a0;border-color:#c8d2c333;font-family:Courier Prime,monospace;letter-spacing:.02em}.copy-button-module__chalkboard___hW4aw:hover{background-color:#c8dcc333;color:#d4e8cb}.copy-button-module__copied___XlHFr{background-color:#8fb99640;color:#51719b}.code-block-module__codeBlock___dq28o{border-radius:.75rem;overflow:hidden;border:1px solid rgba(61,53,43,.12);width:100%}.code-block-module__header___42Fek{padding:.625rem 1.25rem;font-size:.75rem;font-family:JetBrains Mono,monospace;border-bottom:1px solid rgba(61,53,43,.12);background-color:#f5f1e6;color:#68635c;display:flex;align-items:center;justify-content:space-between}.code-block-module__relative___oO-zy{position:relative}.code-block-module__copyOverlay___PjAuq{position:absolute;top:.5rem;right:.5rem;z-index:10}.code-block-module__pre___zXzLZ{padding:1.25rem;font-size:.875rem;line-height:1.625;overflow-x:auto;background-color:#2b2926;color:#faf8f0;font-family:JetBrains Mono,monospace;white-space:pre;word-wrap:normal}.code-block-module__chalkboard___bdo9J{border-color:#c8d2c333;border-radius:.5rem}.code-block-module__chalkboardHeader___3RiVd{background-color:#142e22;border-bottom-color:#c8d2c333;color:#5e7a68;font-family:Courier Prime,monospace;font-size:.875rem;letter-spacing:.04em}.code-block-module__chalkboardPre___iRBFR{background-color:#142e22;color:#d4e8cb;font-family:Courier Prime,monospace;font-size:1rem;line-height:1.7;padding:1.25rem 1.5rem;opacity:.92}.table-module__tableFrame___KP-90{position:relative;filter:drop-shadow(0 8px 14px rgba(61,53,43,.14));--sketch-stroke: rgba(61, 53, 43, .32)}.table-module__tableWrapper___gc3Y3{position:relative;border-radius:12px;overflow:hidden;clip-path:var(--sketch-clip)}.table-module__toolbar___zhCel{display:flex;align-items:center;justify-content:space-between;gap:1rem;height:64px;padding:0 2rem;background-color:#fdfcf8;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.04'/%3E%3C/svg%3E");background-repeat:repeat;background-size:200px 200px;border-bottom:1px solid rgba(61,53,43,.08);box-sizing:border-box}.table-module__search___zIBk2{position:relative;display:flex;align-items:center;flex:1;max-width:280px;--sketch-fill: #FBF9F4;--sketch-stroke: rgba(61, 53, 43, .32)}.table-module__search___zIBk2:focus-within{--sketch-stroke: rgba(138, 155, 168, .45)}.table-module__searchIcon___ayhK8{position:absolute;left:.75rem;color:#a8a399;pointer-events:none;z-index:1}.table-module__searchInput___PqsEG{-webkit-appearance:none;-moz-appearance:none;appearance:none;position:relative;z-index:1;width:100%;padding:.5rem .75rem .5rem 2rem;color:#1a1917;font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-size:1rem;font-weight:500;line-height:1.2;border:none;outline:none;background:transparent}.table-module__searchInput___PqsEG::-moz-placeholder{color:#a8a399;font-weight:400;font-family:Caveat,cursive;font-size:1.125rem}.table-module__searchInput___PqsEG::placeholder{color:#a8a399;font-weight:400;font-family:Caveat,cursive;font-size:1.125rem}.table-module__searchInput___PqsEG:focus{outline:2px dotted #A8A399;outline-offset:2px}.table-module__toolbarActions___EX6qS{display:flex;align-items:center;gap:.5rem}.table-module__tableScroll___1gvc4{overflow-x:auto}.table-module__table___tdU5g{width:100%;table-layout:fixed;border-collapse:collapse;font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-size:1rem;color:#1a1917}.table-module__th___GQbKk{text-align:left;font-weight:700;color:#1a1917;letter-spacing:.03em;white-space:nowrap;padding:0 2rem;height:64px;box-sizing:border-box;vertical-align:middle;line-height:32px;background-color:#f5f1e6;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.04'/%3E%3C/svg%3E");background-repeat:repeat;background-size:200px 200px;border-bottom:1px solid rgba(61,53,43,.12)}.table-module__td___WktB5{font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);color:#68635c;padding:0 2rem;height:64px;box-sizing:border-box;vertical-align:middle;line-height:32px;border-bottom:1px solid rgba(61,53,43,.08)}.table-module__tr___xeZno:last-child .table-module__td___WktB5{border-bottom:none}.table-module__expandTh___uxkR4,.table-module__expandTd___VoBRC{width:48px;text-align:center;padding:0}.table-module__expandIcon___8V45X{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;border:none;background:transparent;font-size:.65em;color:#68635c;cursor:pointer}.table-module__expandable___R7o2l{cursor:pointer}.table-module__expandable___R7o2l:hover .table-module__td___WktB5{background-color:#00000008}.table-module__expandedRow___1TbTQ .table-module__expandedCell___sKAaD{padding:1rem 2rem;background-color:#e5dbc4;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='k'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0.50 0 0 0 0 0.35 0 0 0 0 0.20 0 0 0 0.55 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23k)' opacity='1'/%3E%3C/svg%3E");background-repeat:repeat;background-size:200px 200px;color:#1a1917;font-family:Caveat,cursive;font-size:1.125rem;line-height:1.5;border-bottom:1px solid rgba(61,53,43,.12)}.table-module__boardScroll___Y1yqm{overflow-x:auto}.table-module__board___kFAI-{display:flex;align-items:flex-start}.table-module__boardColumn___-W9bP{flex:1 0 280px;display:flex;flex-direction:column}.table-module__boardColumn___-W9bP+.table-module__boardColumn___-W9bP{border-left:1px solid rgba(61,53,43,.08)}.table-module__boardColumnHeader___kY3Fj{display:flex;align-items:center;justify-content:space-between;gap:.75rem;height:64px;padding:0 1.5rem;box-sizing:border-box;background-color:#f5f1e6;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.04'/%3E%3C/svg%3E");background-repeat:repeat;background-size:200px 200px;border-bottom:1px solid rgba(61,53,43,.12)}.table-module__boardColumnHeader___kY3Fj.table-module__accentBlue___PEJ1V{border-bottom-color:#51719b}.table-module__boardColumnHeader___kY3Fj.table-module__accentGreen___wJ53r{border-bottom-color:#8fb996}.table-module__boardColumnHeader___kY3Fj.table-module__accentAmber___Iezjv{border-bottom-color:#a67b4f}.table-module__boardColumnHeader___kY3Fj.table-module__accentRose___W8zxc{border-bottom-color:#9e5e5e}.table-module__boardColumnHeader___kY3Fj.table-module__accentSlate___oUZCX{border-bottom-color:#5e7080}.table-module__boardColumnLabel___JBEed{font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-weight:700;font-size:1rem;letter-spacing:.03em;text-transform:uppercase;color:#1a1917}.table-module__boardColumnCount___Pkpiq{display:flex;align-items:center;justify-content:center;min-width:22px;height:22px;padding:0 .25rem;border-radius:9999px;background-color:#faf8f0;border:1px solid rgba(61,53,43,.12);font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-size:.875rem;color:#68635c}.table-module__boardColumnBody___uAgRF{flex:1;display:flex;flex-direction:column;min-height:96px}.table-module__boardRow___C1P60{padding:.75rem 1.5rem;border-bottom:1px solid rgba(61,53,43,.08)}.table-module__boardRow___C1P60:last-child{border-bottom:none}.table-module__boardEmpty___IKv2W{padding:1rem 1.5rem;text-align:center;font-family:Caveat,cursive;font-size:1.125rem;color:#a8a399;font-style:italic}.table-module__chalkboardFrame___xB3N5{filter:drop-shadow(0 8px 14px rgba(0,0,0,.3));--sketch-stroke: rgba(200, 210, 195, .3)}.table-module__chalkboardWrapper___KjY5r .table-module__toolbar___zhCel{background-color:#1e3a2d;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='c'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0.15 0 0 0 0 0.28 0 0 0 0 0.20 0 0 0 0.08 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23c)' opacity='1'/%3E%3C/svg%3E");border-bottom-color:#c8d2c333}.table-module__chalkboardWrapper___KjY5r .table-module__searchIcon___ayhK8{color:#a8b5a0}.table-module__chalkboardWrapper___KjY5r .table-module__searchInput___PqsEG{color:#d4e8cb;font-family:JetBrains Mono,monospace;font-size:.875rem;background-color:#142e2266;background-image:none;border:1px solid rgba(200,210,195,.2);border-radius:8px;box-shadow:1px 1px 2px #00000026}.table-module__chalkboardWrapper___KjY5r .table-module__searchInput___PqsEG::-moz-placeholder{color:#a8b5a0;font-family:Caveat,cursive}.table-module__chalkboardWrapper___KjY5r .table-module__searchInput___PqsEG::placeholder{color:#a8b5a0;font-family:Caveat,cursive}.table-module__chalkboardWrapper___KjY5r .table-module__searchInput___PqsEG:focus{outline:2px dotted #d4e8cb;outline-offset:2px}.table-module__chalkboard___v0m3A{color:#e8e4d9}.table-module__chalkboard___v0m3A .table-module__th___GQbKk{font-family:Caveat,cursive;font-weight:600;font-size:1.125rem;text-transform:uppercase;letter-spacing:.06em;color:#d4e8cb;background-color:#1e3a2d;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='c'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0.15 0 0 0 0 0.28 0 0 0 0 0.20 0 0 0 0.08 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23c)' opacity='1'/%3E%3C/svg%3E");border-bottom-color:#c8d2c333}.table-module__chalkboard___v0m3A .table-module__td___WktB5{color:#e8e4d9;border-bottom-color:#c8d2c333}.table-module__boardColumnHeader___kY3Fj.table-module__chalkboard___v0m3A{font-family:Caveat,cursive;color:#d4e8cb;background-color:#1e3a2d;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='c'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0.15 0 0 0 0 0.28 0 0 0 0 0.20 0 0 0 0.08 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23c)' opacity='1'/%3E%3C/svg%3E");border-bottom-color:#c8d2c333}.table-module__boardRow___C1P60.table-module__chalkboard___v0m3A{color:#e8e4d9;border-bottom-color:#c8d2c333}.table-module__expandIcon___8V45X svg{transition:transform .15s ease-out}.table-module__expandIcon___8V45X[aria-expanded=true] svg{transform:rotate(90deg)}.cells-module__cell___x7DuX{position:relative}.cells-module__toggle___U6zvr{font-family:JetBrains Mono,monospace;font-size:.75rem;padding:2px 10px;border-radius:4px;border:1px solid rgba(61,53,43,.15);background:#3d352b0a;color:#a8a399;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}.cells-module__toggle___U6zvr:hover{background:#3d352b14}.cells-module__toggleActive___B5U1p{background:#8fb99626;border-color:#8fb9964d;color:#3d5a42}.cells-module__chalkToggle___mGnxj{font-size:.75rem;border-color:#c8d2c326;background:#c8d2c30f;color:#a8b5a0}.cells-module__chalkToggleActive___40QxK{background:#d4e8cb1f;border-color:#d4e8cb40;color:#d4e8cb}.cells-module__input___6FtwV{font-family:JetBrains Mono,monospace;font-size:.75rem;padding:2px 8px;border-radius:4px;border:1px solid rgba(61,53,43,.15);background:#faf8f099;color:#1a1917;width:100%;max-width:180px;outline:none;transition:border-color .15s ease,box-shadow .15s ease}.cells-module__input___6FtwV::-moz-placeholder{color:#a8a399}.cells-module__input___6FtwV::placeholder{color:#a8a399}.cells-module__input___6FtwV:focus{border-color:#8fb99680;box-shadow:0 0 0 2px #8fb99626}.cells-module__input___6FtwV[type=number]{max-width:100px}.cells-module__chalkInput___T8jRO{font-size:.75rem;border-color:#c8d2c333;background:#142e2299;color:#d4e8cb}.cells-module__chalkInput___T8jRO::-moz-placeholder{color:#a8b5a0}.cells-module__chalkInput___T8jRO::placeholder{color:#a8b5a0}.cells-module__chalkInput___T8jRO:focus{border-color:#d4e8cb66;box-shadow:0 0 0 2px #d4e8cb1a}.cells-module__dropdownToggle___OPFkY{display:inline-flex;align-items:center;gap:6px;font-family:JetBrains Mono,monospace;font-size:.75rem;color:#8c7d56;background:#8c7d5614;border:1px solid rgba(140,125,86,.2);border-radius:4px;padding:2px 8px 2px 10px;cursor:pointer;transition:background .15s ease,border-color .15s ease}.cells-module__dropdownToggle___OPFkY:hover{background:#8c7d5624;border-color:#8c7d5659}.cells-module__chevron___LosSi{flex-shrink:0;stroke:currentColor;transition:transform .15s ease}.cells-module__chevronOpen___sM4y0{transform:rotate(180deg)}.cells-module__dropdown___8Ov5L{position:absolute;top:calc(100% + 4px);left:0;min-width:100%;background:#faf8f0;border:1px solid rgba(61,53,43,.12);border-radius:6px;box-shadow:0 4px 12px #3d352b1f;z-index:20;padding:4px 0;animation:cells-module__fadeIn___ha0fT .12s ease}@keyframes cells-module__fadeIn___ha0fT{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.cells-module__dropdownItem___3iLvf{font-family:JetBrains Mono,monospace;font-size:.75rem;color:#68635c;padding:6px 12px;cursor:default}.cells-module__dropdownItem___3iLvf:hover{background:#8fb9961f;color:#1a1917}.cells-module__chalkDropdownToggle___o9LTb{font-size:.75rem;color:#d4e8cb;background:#c8d2c314;border-color:#c8d2c326}.cells-module__chalkDropdownToggle___o9LTb:hover{background:#c8d2c326;border-color:#c8d2c340}.cells-module__chalkDropdown___E1y9a{background-color:#1e3a2d;border-color:#c8d2c333;box-shadow:0 4px 16px #0006}.cells-module__chalkDropdownItem___cW122{font-size:.75rem;color:#e8e4d9}.cells-module__chalkDropdownItem___cW122:hover{background:#c8d2c31f;color:#d4e8cb}.prop-table-module__wrapper___AufwJ.prop-table-module__wrapper___AufwJ{overflow:visible}.prop-table-module__codeName___Sa7rq{font-family:JetBrains Mono,monospace;font-size:.875rem;color:#51719b}.prop-table-module__required___4C7Pm{color:#9e5e5e;margin-left:2px}.prop-table-module__desc___QNNO7{font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);color:#68635c;font-size:1rem;line-height:1.5;display:block}.prop-table-module__chalkCodeName___Erzq6{color:#d4e8cb}.prop-table-module__chalkRequired___3Mh-y{color:#e8a0a0}.prop-table-module__chalkDesc___46JCK{color:#e8e4d9}.swatch-module__swatch___Kvyl1{border-radius:.75rem;border:2px solid rgba(61,53,43,.12);transition:all .2s ease;flex-shrink:0;cursor:pointer;background:transparent;padding:0}.swatch-module__active___4ydAA{border-color:#7c9cc0;box-shadow:0 4px 6px #3d352b14;transform:scale(1.1)}.swatch-module__disabled___t3NKC{opacity:.35;filter:grayscale(100%);cursor:not-allowed}.swatch-module__chalkboard___0IL0r{border-color:#c8d2c333}.swatch-module__chalkboard___0IL0r.swatch-module__active___4ydAA{border-color:#d4e8cb;box-shadow:0 4px 6px #00000040}.card-module__borderLayer___WSpJq{position:relative;display:flex;flex-direction:column;overflow:hidden;border-radius:11.5169678154px 14.9006285177px 14.3447165746px 11.8650584308px;--sketch-stroke: rgba(61, 53, 43, .32)}.card-module__default___glPy-{filter:drop-shadow(0 1px 2px rgba(61,53,43,.09))}.card-module__elevated___uhWj9{filter:drop-shadow(0 4px 6px rgba(61,53,43,.1)) drop-shadow(0 1px 2px rgba(61,53,43,.06))}.card-module__textureLayer___Kcofz{position:relative;z-index:1;flex:1 1 auto;padding:2rem;font-size:1.125rem;line-height:32px;background-color:#faf8f0;border-radius:9.1182414025px 13.4348436641px 13.7930822853px 10.0975411767px;clip-path:var(--sketch-clip)}.card-module__textureLayer___Kcofz>*+*{margin-top:2rem}.card-module__small___HXUTr .card-module__textureLayer___Kcofz{padding:.75rem 1rem;font-size:1rem;line-height:1.2}.card-module__small___HXUTr .card-module__textureLayer___Kcofz>*+*{margin-top:.75rem}.card-module__withAccent___2t7bV:before{content:"";position:absolute;width:160px;height:160px;border-radius:50%;top:-40px;right:-40px;filter:blur(40px);mix-blend-mode:multiply;pointer-events:none;z-index:0;opacity:.12}.card-module__accentBlue___a1KIq:before{background:radial-gradient(circle,#AFC6E0 0%,transparent 70%)}.card-module__accentGreen___RNWoA:before{background:radial-gradient(circle,#B5D4BA 0%,transparent 70%)}.card-module__accentAmber___uMhom:before{background:radial-gradient(circle,#E4C9A8 0%,transparent 70%)}.card-module__accentRose___VPI3t:before{background:radial-gradient(circle,#DEB5B5 0%,transparent 70%)}.card-module__accentSlate___-l4jE:before{background:radial-gradient(circle,#B0BEC8 0%,transparent 70%)}.card-module__chalkboard___bQ48O{--sketch-stroke: rgba(200, 210, 195, .3);filter:drop-shadow(0 4px 10px rgba(0,0,0,.28))}.card-module__chalkboard___bQ48O .card-module__textureLayer___Kcofz{color:#e8e4d9;background-color:#142e22}.input-module__wrapper___xaEw6{display:flex;flex-direction:column;gap:.5rem}.input-module__label___lu7R1{font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-size:1rem;font-weight:600;color:#1a1917;letter-spacing:.03em}.input-module__field___khFpX{position:relative;display:block;width:100%;border-radius:8px;--sketch-fill: rgba(61, 53, 43, .05);--sketch-stroke: rgba(61, 53, 43, .32)}.input-module__field___khFpX:hover{--sketch-stroke: rgba(61, 53, 43, .42)}.input-module__field___khFpX:focus-within{outline:2px dotted #A8A399;outline-offset:2px;--sketch-stroke: rgba(138, 155, 168, .45)}.input-module__input___h7K-F{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:block;position:relative;z-index:1;width:100%;border:none;outline:none;background:transparent;color:#1a1917;font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-weight:500;line-height:1.2}.input-module__input___h7K-F::-moz-placeholder{color:#a8a399;font-weight:400;font-family:Caveat,cursive;font-size:1.125rem}.input-module__input___h7K-F::placeholder{color:#a8a399;font-weight:400;font-family:Caveat,cursive;font-size:1.125rem}.input-module__small___SkByh .input-module__input___h7K-F{padding:.5rem .75rem;font-size:.875rem}.input-module__medium___0QPuV .input-module__input___h7K-F{padding:.75rem 1rem;font-size:1rem}.input-module__large___zGwRu .input-module__input___h7K-F{padding:1rem 1.25rem;font-size:1.125rem}.input-module__error___QDqga{--sketch-stroke: rgba(201, 139, 139, .45)}.input-module__error___QDqga:focus-within{--sketch-stroke: rgba(201, 139, 139, .55)}.input-module__disabled___K-5hi{opacity:.55;--sketch-fill: rgba(61, 53, 43, .03);--sketch-stroke: rgba(61, 53, 43, .15)}.input-module__disabled___K-5hi .input-module__input___h7K-F{cursor:not-allowed}.input-module__disabled___K-5hi:hover{--sketch-stroke: rgba(61, 53, 43, .15)}.input-module__helperText___njeLH{font-family:Caveat,cursive;font-size:1rem;color:#a8a399}.input-module__helperError___qDBpD{color:#9e5e5e}.input-module__chalkboard___Xh-5s .input-module__label___lu7R1{color:#d4e8cb}.input-module__chalkboard___Xh-5s .input-module__helperText___njeLH{color:#a8b5a0}.input-module__chalkboard___Xh-5s .input-module__field___khFpX{--sketch-fill: rgba(200, 210, 195, .08);--sketch-stroke: rgba(200, 210, 195, .3)}.input-module__chalkboard___Xh-5s .input-module__field___khFpX:hover{--sketch-stroke: rgba(200, 210, 195, .45)}.input-module__chalkboard___Xh-5s .input-module__field___khFpX:focus-within{outline:2px dotted #d4e8cb;outline-offset:2px;--sketch-stroke: #d4e8cb}.input-module__chalkboard___Xh-5s .input-module__input___h7K-F{color:#d4e8cb}.input-module__chalkboard___Xh-5s .input-module__input___h7K-F::-moz-placeholder{color:#a8b5a0}.input-module__chalkboard___Xh-5s .input-module__input___h7K-F::placeholder{color:#a8b5a0}.input-module__chalkboard___Xh-5s .input-module__disabled___K-5hi{--sketch-fill: rgba(200, 210, 195, .04);--sketch-stroke: rgba(200, 210, 195, .12)}.input-module__chalkboard___Xh-5s .input-module__disabled___K-5hi:hover{--sketch-stroke: rgba(200, 210, 195, .12)}.select-module__wrapper___Hc5F3{display:flex;flex-direction:column;gap:.5rem;position:relative}.select-module__label___ay-3s{font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-size:1rem;font-weight:600;color:#1a1917;letter-spacing:.03em}.select-module__nativeSelect___UA2d-{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;opacity:0}.select-module__trigger___xMYHi{position:relative;-webkit-appearance:none;-moz-appearance:none;appearance:none;display:flex;align-items:center;justify-content:space-between;width:100%;text-align:left;font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-weight:500;line-height:1.2;color:#1a1917;cursor:pointer;background:transparent;border:none;outline:none;border-radius:8px;--sketch-fill: rgba(61, 53, 43, .05);--sketch-stroke: rgba(61, 53, 43, .32)}.select-module__trigger___xMYHi:hover:not(:disabled){--sketch-stroke: rgba(61, 53, 43, .42)}.select-module__trigger___xMYHi.select-module__open___w3mbZ{--sketch-stroke: rgba(138, 155, 168, .45)}.select-module__trigger___xMYHi:focus-visible{outline:2px dotted #A8A399;outline-offset:2px}.select-module__trigger___xMYHi:disabled{opacity:.55;cursor:not-allowed;--sketch-fill: rgba(61, 53, 43, .03);--sketch-stroke: rgba(61, 53, 43, .15)}.select-module__triggerLabel___ihpER{position:relative;z-index:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select-module__placeholder___0VOFP{color:#a8a399;font-family:Caveat,cursive;font-size:1.125rem}.select-module__small___iU9W9{padding:.5rem .75rem;font-size:.875rem}.select-module__small___iU9W9 .select-module__chevron___0dCTg{width:14px;height:14px}.select-module__medium___B-XBN{padding:.75rem 1rem;font-size:1rem}.select-module__large___iII2c{padding:1rem 1.25rem;font-size:1.125rem}.select-module__chevron___0dCTg{position:relative;z-index:1;flex-shrink:0;margin-left:.5rem;color:#a8a399;transition:transform .2s ease-out}.select-module__chevronOpen___cFOYe{transform:rotate(180deg)}.select-module__error___P5RBk{--sketch-stroke: rgba(201, 139, 139, .45)}.select-module__error___P5RBk.select-module__open___w3mbZ{--sketch-stroke: rgba(201, 139, 139, .55)}.select-module__dropdown___Q-uK3{position:absolute;top:calc(100% + 6px);left:0;width:100%;z-index:600;--sketch-fill: #F5F1E6;--sketch-stroke: rgba(61, 53, 43, .32);filter:drop-shadow(0 8px 14px rgba(61,53,43,.12));animation:select-module__slideDown___sT374 .18s ease-out}.select-module__options___HmrQ0{position:relative;z-index:1;padding:.75rem 1rem;max-height:320px;overflow-y:auto}@keyframes select-module__slideDown___sT374{0%{opacity:0;transform:translateY(-4px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}.select-module__option___vNnue{padding:.5rem .75rem;font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-size:1rem;color:#1a1917;cursor:pointer;border-radius:7.4911777876px 8.5484528851px 8.0102437622px 7.7267823582px;transition:background-color .15s ease-out}.select-module__option___vNnue:hover:not(.select-module__optionDisabled___ex2zq){background-image:radial-gradient(circle at 50% 50%,rgba(143,185,150,.22) 0%,transparent 70%);background-color:#8fb9961f}.select-module__optionSelected___tAFjn{font-weight:600;color:#1a1917;background-image:radial-gradient(circle at 50% 50%,rgba(138,155,168,.18) 0%,transparent 70%)}.select-module__optionHighlighted___zYQLq{background-image:radial-gradient(circle at 50% 50%,rgba(143,185,150,.28) 0%,transparent 70%);background-color:#8fb99624}.select-module__optionDisabled___ex2zq{opacity:.45;cursor:not-allowed;text-decoration:line-through}.select-module__helperText___r5gyn{font-family:Caveat,cursive;font-size:1rem;color:#a8a399}.select-module__helperError___ydSPT{color:#9e5e5e}.select-module__chalkboard___sXBw8 .select-module__label___ay-3s{color:#d4e8cb}.select-module__chalkboard___sXBw8 .select-module__helperText___r5gyn{color:#a8b5a0}.select-module__chalkboard___sXBw8 .select-module__trigger___xMYHi{color:#d4e8cb;--sketch-fill: rgba(200, 210, 195, .08);--sketch-stroke: rgba(200, 210, 195, .3)}.select-module__chalkboard___sXBw8 .select-module__trigger___xMYHi:hover:not(:disabled){--sketch-stroke: rgba(200, 210, 195, .45)}.select-module__chalkboard___sXBw8 .select-module__trigger___xMYHi.select-module__open___w3mbZ{--sketch-stroke: #d4e8cb}.select-module__chalkboard___sXBw8 .select-module__trigger___xMYHi:focus-visible{outline:2px dotted #d4e8cb;outline-offset:2px}.select-module__chalkboard___sXBw8 .select-module__trigger___xMYHi:disabled{opacity:.55;--sketch-fill: rgba(200, 210, 195, .04);--sketch-stroke: rgba(200, 210, 195, .12)}.select-module__chalkboard___sXBw8 .select-module__placeholder___0VOFP,.select-module__chalkboard___sXBw8 .select-module__chevron___0dCTg{color:#a8b5a0}.select-module__chalkboard___sXBw8 .select-module__dropdown___Q-uK3{--sketch-fill: #1e3a2d;--sketch-stroke: rgba(200, 210, 195, .3);filter:drop-shadow(0 8px 14px rgba(0,0,0,.3))}.select-module__chalkboard___sXBw8 .select-module__option___vNnue{color:#e8e4d9;border-radius:8px}.select-module__chalkboard___sXBw8 .select-module__option___vNnue:hover:not(.select-module__optionDisabled___ex2zq){background-image:none;background-color:#c8d2c314}.select-module__chalkboard___sXBw8 .select-module__optionSelected___tAFjn{color:#d4e8cb;background-image:none;background-color:#c8d2c31f}.select-module__chalkboard___sXBw8 .select-module__optionHighlighted___zYQLq{background-image:none;background-color:#c8d2c31a}.tabs-module__tabs___UMeM9{display:flex;flex-direction:column}.tabs-module__tabBar___qKukf{display:flex;gap:.25rem}.tabs-module__tabButton___DyC14{flex:0 0 auto}.tabs-module__content___F1vOY{margin-top:.5rem}.alert-module__alert___j7ZRS{position:relative;display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;color:#68635c;filter:drop-shadow(0 1px 2px rgba(61,53,43,.09));--sketch-stroke: rgba(61, 53, 43, .32)}.alert-module__surface___IaVgU{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;border-radius:8px;clip-path:var(--sketch-clip)}.alert-module__iconWrapper___kLoxT{position:relative;z-index:1;flex-shrink:0;display:flex;align-items:center;justify-content:center;width:20px;height:20px}.alert-module__message___klR2U{flex:1;min-width:0;position:relative;z-index:1;font-family:Cormorant Garamond,Georgia,serif;font-size:1rem;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.alert-module__dismiss___f2uoG{position:relative;z-index:1;flex-shrink:0;display:flex;align-items:center;justify-content:center;padding:.25rem;background:transparent;border:none;cursor:pointer;border-radius:7.8594037246px 8.9404002402px 8.1732382044px 7.6201622488px;color:inherit;opacity:.6;transition:opacity .15s ease-out,background .15s ease-out}.alert-module__dismiss___f2uoG:hover{opacity:1;background:#0000000a}.alert-module__dismiss___f2uoG:focus-visible{opacity:1;outline:2px solid #8A9BA8;outline-offset:2px}.alert-module__info___PBo1l{--sketch-stroke: rgba(138, 155, 168, .45)}.alert-module__success___AVBKS{--sketch-stroke: rgba(94, 138, 102, .42)}.alert-module__warning___zkMaJ{--sketch-stroke: rgba(166, 123, 79, .45)}.alert-module__error___cxg96{color:#9e5e5e;--sketch-stroke: rgba(158, 94, 94, .45)}.alert-module__chalkboard___7pgWk{color:#e8e4d9;--sketch-stroke: rgba(200, 210, 195, .4)}.alert-module__chalkboard___7pgWk .alert-module__surface___IaVgU{background-color:#1e3a2d;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='c'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0.15 0 0 0 0 0.28 0 0 0 0 0.20 0 0 0 0.08 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23c)' opacity='1'/%3E%3C/svg%3E");background-repeat:repeat;background-size:200px 200px}.alert-module__chalkboard___7pgWk .alert-module__dismiss___f2uoG{color:#a8b5a0}.alert-module__chalkboard___7pgWk .alert-module__dismiss___f2uoG:hover{background:#c8d2c314}.modal-module__overlay___a52Ni{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;padding:1.5rem;background-color:#1a191738;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.04'/%3E%3C/svg%3E");background-repeat:repeat;background-size:200px 200px;z-index:400;animation:modal-module__fadeIn___5OWd5 .2s ease-out}.modal-module__backdrop___RS4yj{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;padding:0;margin:0;border:none;background:transparent;cursor:default;z-index:400}.modal-module__modal___ZioOV{position:relative;background-color:#faf8f0;border-radius:16.5328403138px 23.7160167004px 23.1612893668px 16.1966133867px;border:1px solid rgba(61,53,43,.12);box-shadow:0 10px 15px #3d352b1a,0 4px 6px #3d352b14;max-height:90vh;overflow-y:auto;animation:modal-module__slideUp___vfFrm .25s ease-out;z-index:500}.modal-module__small___hcxwF{width:100%;max-width:360px}.modal-module__medium___mjbM5{width:100%;max-width:480px}.modal-module__large___1dzyf{width:100%;max-width:640px}.modal-module__header___iP09B{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1.5rem 1.5rem 0;position:relative;z-index:1}.modal-module__title___nj06m{font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-size:1.875rem;font-weight:700;color:#1a1917;line-height:1.2;margin:0}.modal-module__close___gQou9{position:relative;z-index:1;display:flex;align-items:center;justify-content:center;padding:.5rem;background:transparent;border:none;cursor:pointer;border-radius:7.8090156532px 8.1635480299px 8.1630563631px 7.3522614448px;color:#a8a399;transition:color .15s ease-out,background .15s ease-out;flex-shrink:0}.modal-module__close___gQou9:hover{color:#1a1917;background:#0000000a}.modal-module__close___gQou9:focus-visible{outline:2px solid #8A9BA8;outline-offset:2px}.modal-module__body___Y-EdA{padding:1rem 1.5rem 1.5rem;position:relative;z-index:1}.modal-module__chalkboard___qY8qo{background-color:#1e3a2d;border-color:#c8d2c333}.modal-module__chalkboard___qY8qo .modal-module__title___nj06m{color:#d4e8cb}.modal-module__chalkboard___qY8qo .modal-module__close___gQou9{color:#a8b5a0}.modal-module__chalkboard___qY8qo .modal-module__close___gQou9:hover{color:#d4e8cb;background:#c8d2c314}@keyframes modal-module__fadeIn___5OWd5{0%{opacity:0}to{opacity:1}}@keyframes modal-module__slideUp___vfFrm{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion: reduce){.modal-module__overlay___a52Ni,.modal-module__modal___ZioOV{animation:none}}.textarea-module__wrapper___NbiNO{display:flex;flex-direction:column;gap:.5rem}.textarea-module__label___ejhyZ{font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-size:1rem;font-weight:600;color:#1a1917;letter-spacing:.03em}.textarea-module__field___KluQf{position:relative;display:block;width:100%;border-radius:8px;--sketch-fill: rgba(61, 53, 43, .05);--sketch-stroke: rgba(61, 53, 43, .32)}.textarea-module__field___KluQf:hover{--sketch-stroke: rgba(61, 53, 43, .42)}.textarea-module__field___KluQf:focus-within{outline:2px dotted #A8A399;outline-offset:2px;--sketch-stroke: rgba(138, 155, 168, .45)}.textarea-module__textarea___0y-7v{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:block;position:relative;z-index:1;width:100%;min-height:4rem;resize:none;border:none;outline:none;background:transparent;color:#1a1917;font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-weight:500;line-height:1.5}.textarea-module__textarea___0y-7v::-moz-placeholder{color:#a8a399;font-weight:400;font-family:Caveat,cursive;font-size:1.125rem}.textarea-module__textarea___0y-7v::placeholder{color:#a8a399;font-weight:400;font-family:Caveat,cursive;font-size:1.125rem}.textarea-module__resizeGrip___lONlE{position:absolute;right:3px;bottom:3px;z-index:2;display:flex;padding:3px;cursor:ns-resize;color:var(--sketch-stroke, rgba(61, 53, 43, .32));opacity:.75;touch-action:none;transition:opacity .15s ease-out}.textarea-module__resizeGrip___lONlE:hover{opacity:1}.textarea-module__resizeGrip___lONlE svg{width:11px;height:11px;stroke:currentColor;stroke-width:1.4;stroke-linecap:round}.textarea-module__small___yPyr8 .textarea-module__textarea___0y-7v{padding:.5rem .75rem;font-size:.875rem}.textarea-module__medium___ezQxA .textarea-module__textarea___0y-7v{padding:.75rem 1rem;font-size:1rem}.textarea-module__large___xfeKi .textarea-module__textarea___0y-7v{padding:1rem 1.25rem;font-size:1.125rem}.textarea-module__error___EkXKJ{--sketch-stroke: rgba(201, 139, 139, .45)}.textarea-module__error___EkXKJ:focus-within{--sketch-stroke: rgba(201, 139, 139, .55)}.textarea-module__disabled___9CKbb{opacity:.55;--sketch-fill: rgba(61, 53, 43, .03);--sketch-stroke: rgba(61, 53, 43, .15)}.textarea-module__disabled___9CKbb .textarea-module__textarea___0y-7v{cursor:not-allowed}.textarea-module__disabled___9CKbb:hover{--sketch-stroke: rgba(61, 53, 43, .15)}.textarea-module__helperText___l1sPh{font-family:Caveat,cursive;font-size:1rem;color:#a8a399}.textarea-module__helperError___VfTLy{color:#9e5e5e}.textarea-module__chalkboard___zZ0X0 .textarea-module__label___ejhyZ{color:#d4e8cb}.textarea-module__chalkboard___zZ0X0 .textarea-module__helperText___l1sPh{color:#a8b5a0}.textarea-module__chalkboard___zZ0X0 .textarea-module__field___KluQf{--sketch-fill: rgba(200, 210, 195, .08);--sketch-stroke: rgba(200, 210, 195, .3)}.textarea-module__chalkboard___zZ0X0 .textarea-module__field___KluQf:hover{--sketch-stroke: rgba(200, 210, 195, .45)}.textarea-module__chalkboard___zZ0X0 .textarea-module__field___KluQf:focus-within{outline:2px dotted #d4e8cb;outline-offset:2px;--sketch-stroke: #d4e8cb}.textarea-module__chalkboard___zZ0X0 .textarea-module__textarea___0y-7v{color:#d4e8cb}.textarea-module__chalkboard___zZ0X0 .textarea-module__textarea___0y-7v::-moz-placeholder{color:#a8b5a0}.textarea-module__chalkboard___zZ0X0 .textarea-module__textarea___0y-7v::placeholder{color:#a8b5a0}.textarea-module__chalkboard___zZ0X0 .textarea-module__disabled___9CKbb{--sketch-fill: rgba(200, 210, 195, .04);--sketch-stroke: rgba(200, 210, 195, .12)}.textarea-module__chalkboard___zZ0X0 .textarea-module__disabled___9CKbb:hover{--sketch-stroke: rgba(200, 210, 195, .12)}.progress-module__track___a5BMO{position:relative;width:100%;overflow:hidden}.progress-module__svg___3U0-E{display:block;width:100%;height:100%}.list-item-module__listItem___-tw9O{position:relative;display:flex;align-items:center;gap:.5rem;width:100%;font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);color:#1a1917;background:transparent;border:none;border-radius:8px;text-align:left;outline:none}.list-item-module__listItem___-tw9O:focus-visible{outline:2px solid #8A9BA8;outline-offset:2px}.list-item-module__static___qtEX6{cursor:default}.list-item-module__clickable___GLJmd{cursor:pointer}.list-item-module__blobBg___O3Mzh{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:0;pointer-events:none}.list-item-module__blobFill___dXHk1{fill:transparent;transition:fill .25s ease}.list-item-module__blobRing___S9mas{fill:none;stroke:#3d352b38;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;opacity:0;transition:opacity .35s ease 50ms}.list-item-module__clickable___GLJmd:hover .list-item-module__blobFill___dXHk1{fill:#8fb9961f}.list-item-module__clickable___GLJmd:active .list-item-module__blobFill___dXHk1{fill:#8fb99633}.list-item-module__clickable___GLJmd:hover .list-item-module__blobRing___S9mas{opacity:1}.list-item-module__clickable___GLJmd:active .list-item-module__blobRing___S9mas{stroke:#3d352b8c}.list-item-module__active___UsL8O .list-item-module__blobFill___dXHk1{fill:#8fb99640}.list-item-module__active___UsL8O:hover .list-item-module__blobFill___dXHk1{fill:#8fb9964d}.list-item-module__active___UsL8O .list-item-module__blobRing___S9mas{opacity:1}.list-item-module__small___9dphK{padding:.25rem .5rem;font-size:1rem;line-height:1.2}.list-item-module__medium___yGZCr{padding:.5rem .75rem;font-size:1.125rem;line-height:1.2}.list-item-module__icon___2b4wU{position:relative;z-index:1;display:flex;align-items:center;justify-content:center;flex-shrink:0;color:#68635c}.list-item-module__label___SIzJ4{position:relative;z-index:1;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-item-module__action___qGh0-{position:relative;z-index:1;display:flex;align-items:center;flex-shrink:0;margin-left:auto}.list-item-module__chalkboard___qpWuM{color:#e8e4d9}.list-item-module__chalkboard___qpWuM .list-item-module__icon___2b4wU{color:#a8b5a0}.list-item-module__chalkboard___qpWuM .list-item-module__blobRing___S9mas{stroke:#c8d2c359}.list-item-module__chalkboard___qpWuM.list-item-module__clickable___GLJmd:active .list-item-module__blobRing___S9mas{stroke:#c8d2c3a6}.list-item-module__chalkboard___qpWuM:focus-visible{outline:2px solid #d4e8cb;outline-offset:2px}.accordion-module__accordion___mqGl-{width:100%}.accordion-module__header___mLfbd{display:flex;align-items:center;gap:.5rem;width:100%;padding:0;font-family:inherit;font-size:inherit;line-height:inherit;color:inherit;background:transparent;border:none;cursor:pointer;text-align:left}.accordion-module__header___mLfbd:hover .accordion-module__icon___Z90NR{color:#1a1917}.accordion-module__header___mLfbd:focus-visible{outline:2px solid #8A9BA8;outline-offset:2px;border-radius:8px}.accordion-module__icon___Z90NR{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:1em;height:1em;font-size:.65em;color:#68635c;transition:transform .2s ease,color .15s ease-out}.accordion-module__title___HusgG{flex:1}.accordion-module__content___1K0td{margin-top:.5rem;padding-left:calc(1em + .5rem);color:#68635c;font-size:1rem;line-height:1.5}.accordion-module__chalkboard___am8r4 .accordion-module__icon___Z90NR{color:#a8b5a0}.accordion-module__chalkboard___am8r4 .accordion-module__header___mLfbd:hover .accordion-module__icon___Z90NR{color:#d4e8cb}.accordion-module__chalkboard___am8r4 .accordion-module__header___mLfbd:focus-visible{outline:2px solid #d4e8cb;outline-offset:2px}.accordion-module__chalkboard___am8r4 .accordion-module__content___1K0td{color:#a8b5a0}.accordion-module__icon___Z90NR svg{transition:transform .15s ease-out}.accordion-module__expanded___836xG .accordion-module__icon___Z90NR svg{transform:rotate(90deg)}.icon-module__icon___2vrJz{position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;overflow:visible}.icon-module__blobBg___ENPYJ{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:0;pointer-events:none}.icon-module__blobFill___IPbwQ{fill:#f0ead8}.icon-module__blobRing___1awqV{fill:none;stroke:#3d352b59;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;opacity:.5}.icon-module__content___TaZR6{position:relative;z-index:1;display:flex;align-items:center;justify-content:center;color:#1a1917}.icon-module__small___Xp--F{width:36px;height:36px}.icon-module__medium___tCjMB{width:44px;height:44px}.icon-module__large___vBtP7{width:52px;height:52px}.radio-module__group___4RWR9{display:flex;flex-direction:column;gap:.75rem}.radio-module__horizontal___yWjeu{flex-direction:row;flex-wrap:wrap;gap:1.25rem}.radio-module__wrapper___BB05E{display:flex;align-items:center;gap:1rem;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.radio-module__wrapper___BB05E:hover .radio-module__blobFill___p5BX4{fill:#7c9cc02e}.radio-module__labelLeft___ijB93{flex-direction:row-reverse}.radio-module__input___M2nFJ{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.radio-module__input___M2nFJ:focus-visible~.radio-module__box___H7ofS{outline:2px dotted #A8A399;outline-offset:2px}.radio-module__input___M2nFJ:checked~.radio-module__box___H7ofS{--sketch-stroke: rgba(61, 53, 43, .7)}.radio-module__input___M2nFJ:checked~.radio-module__box___H7ofS .radio-module__dot___jVJ-d{transform:scale(1)}.radio-module__input___M2nFJ:disabled~.radio-module__box___H7ofS{opacity:.4;cursor:not-allowed}.radio-module__boxWrapper___Y3qis{position:relative;display:flex;align-items:center;justify-content:center;width:40px;height:40px}.radio-module__blobBg___IR-M5{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:0;pointer-events:none}.radio-module__blobFill___p5BX4{transition:fill .25s ease;fill:transparent}.radio-module__box___H7ofS{display:flex;align-items:center;justify-content:center;width:24px;height:24px;background-color:transparent;position:relative;z-index:1;border-radius:50%;--sketch-stroke: rgba(61, 53, 43, .42)}.radio-module__box___H7ofS:hover{--sketch-stroke: rgba(61, 53, 43, .6)}.radio-module__dot___jVJ-d{width:12px;height:12px;border-radius:50%;background-color:#1a1917;transform:scale(0);transition:transform .2s ease-out}.radio-module__labelText___I-nu3{font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-size:1.125rem;font-weight:400;color:#68635c;line-height:1.5}.radio-module__chalkboard___IIBqI .radio-module__labelText___I-nu3{color:#a8b5a0}.radio-module__chalkboard___IIBqI .radio-module__box___H7ofS{--sketch-stroke: rgba(200, 210, 195, .5)}.radio-module__chalkboard___IIBqI .radio-module__box___H7ofS:hover{--sketch-stroke: #d4e8cb}.radio-module__chalkboard___IIBqI .radio-module__dot___jVJ-d{background-color:#d4e8cb}.radio-module__chalkboard___IIBqI .radio-module__blobFill___p5BX4{display:none}.radio-module__chalkboard___IIBqI .radio-module__input___M2nFJ:focus-visible~.radio-module__box___H7ofS{outline-color:#d4e8cb}.radio-module__chalkboard___IIBqI .radio-module__input___M2nFJ:checked~.radio-module__box___H7ofS{--sketch-stroke: #d4e8cb}.switch-module__wrapper___5-2P1{display:inline-flex;align-items:center;gap:1rem;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.switch-module__labelLeft___WlT-N{flex-direction:row-reverse}.switch-module__input___YKZRj{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.switch-module__input___YKZRj:focus-visible~.switch-module__track___QNvnO{outline:2px solid #8A9BA8;outline-offset:2px}.switch-module__input___YKZRj:checked~.switch-module__track___QNvnO{background-color:#8fb996;--sketch-stroke: #5E8A66}.switch-module__input___YKZRj:checked~.switch-module__track___QNvnO .switch-module__thumb___cunvF{transform:translate(var(--switch-travel));background-color:#fdfcf8}.switch-module__input___YKZRj:disabled~.switch-module__track___QNvnO{opacity:.4;cursor:not-allowed}.switch-module__track___QNvnO{position:relative;flex-shrink:0;box-sizing:border-box;border-radius:9999px;background-color:#3d352b0f;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.04'/%3E%3C/svg%3E");background-repeat:repeat;background-size:200px 200px;transition:background-color .2s ease;--sketch-stroke: rgba(61, 53, 43, .2)}.switch-module__thumb___cunvF{position:absolute;top:3px;left:3px;background-color:#68635c;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.04'/%3E%3C/svg%3E");background-repeat:repeat;background-size:200px 200px;box-shadow:0 1px 2px #1a19171f;transition:transform .2s ease-out,background-color .2s ease}.switch-module__small___WPIxc .switch-module__track___QNvnO{width:34px;height:20px}.switch-module__small___WPIxc .switch-module__thumb___cunvF{width:12px;height:12px;border-radius:5.2592791609px 6.2630602835px 6.9219243044px 5.84131605px}.switch-module__small___WPIxc{--switch-travel: 14px}.switch-module__medium___yPulW .switch-module__track___QNvnO{width:42px;height:24px}.switch-module__medium___yPulW .switch-module__thumb___cunvF{width:16px;height:16px;border-radius:7.5190846238px 8.6333654688px 9.0724773942px 6.6188497444px}.switch-module__medium___yPulW{--switch-travel: 18px}.switch-module__large___VlKV1 .switch-module__track___QNvnO{width:52px;height:30px}.switch-module__large___VlKV1 .switch-module__thumb___cunvF{width:22px;height:22px;border-radius:10.0759303715px 11.2956773966px 12.1120336085px 9.6112685239px}.switch-module__large___VlKV1{--switch-travel: 22px}.switch-module__labelText___9Qg39{font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-size:1.125rem;color:#68635c;line-height:1.5}.switch-module__chalkboard___qKTMz .switch-module__track___QNvnO{background:#c8d2c314;--sketch-stroke: rgba(200, 210, 195, .25)}.switch-module__chalkboard___qKTMz .switch-module__thumb___cunvF{background:#a8b5a0}.switch-module__chalkboard___qKTMz .switch-module__labelText___9Qg39{color:#a8b5a0}.switch-module__chalkboard___qKTMz .switch-module__input___YKZRj:checked~.switch-module__track___QNvnO{background:#3d5a42;--sketch-stroke: #a8c49a}.switch-module__chalkboard___qKTMz .switch-module__input___YKZRj:checked~.switch-module__track___QNvnO .switch-module__thumb___cunvF{background:#d4e8cb}.spinner-module__spinner___FDTk2{display:inline-flex;color:#68635c}.spinner-module__chalkboard___DLE1z{color:#d4e8cb}.spinner-module__svg___JnCWN{overflow:visible}.spinner-module__track___xbnbo{stroke:currentColor;stroke-width:3.4;opacity:.15}.spinner-module__head___j5dWe{stroke:currentColor;stroke-width:4.6;stroke-dasharray:26 74;animation:spinner-module__draw___dZVus 1.1s linear infinite}@keyframes spinner-module__draw___dZVus{to{stroke-dashoffset:-100}}@media (prefers-reduced-motion: reduce){.spinner-module__head___j5dWe{animation-duration:2.4s}}.skeleton-module__skeleton___HCSvg{display:block;animation:skeleton-module__pulse___6eCq1 1.4s ease-in-out infinite}.skeleton-module__svg___OzxGp{display:block;width:100%;height:100%}.skeleton-module__text___v17Nv{width:100%;height:1em;margin:.15em 0}.skeleton-module__rect___wqIJy{width:100%;height:100px}.skeleton-module__circle___RCmyR{width:40px;height:40px}@keyframes skeleton-module__pulse___6eCq1{0%,to{opacity:1}50%{opacity:.45}}@media (prefers-reduced-motion: reduce){.skeleton-module__skeleton___HCSvg{animation:none}}.divider-module__horizontal___tP3rG{display:flex;align-items:center;gap:.75rem;width:100%}.divider-module__line___KnBes{flex:1;height:2px;border-radius:9999px;background:linear-gradient(90deg,transparent,rgba(26,25,23,.18) 12%,rgba(26,25,23,.18) 88%,transparent)}.divider-module__label___WiUwZ{flex-shrink:0;font-family:Caveat,cursive;font-size:1.125rem;color:#a8a399;line-height:1}.divider-module__vertical___wBSrT{display:inline-block;align-self:stretch;width:2px;min-height:1em;border-radius:9999px;background:linear-gradient(180deg,transparent,rgba(26,25,23,.18) 12%,rgba(26,25,23,.18) 88%,transparent)}.divider-module__chalkboard___gXTde .divider-module__line___KnBes{background:linear-gradient(90deg,transparent,rgba(212,232,203,.25) 12%,rgba(212,232,203,.25) 88%,transparent)}.divider-module__chalkboard___gXTde .divider-module__label___WiUwZ{color:#a8b5a0}.divider-module__chalkboard___gXTde.divider-module__vertical___wBSrT{background:linear-gradient(180deg,transparent,rgba(212,232,203,.25) 12%,rgba(212,232,203,.25) 88%,transparent)}.tooltip-module__wrapper___XeVNe{display:inline-block}.tooltip-module__tooltip___e-rkz{position:fixed;z-index:700;max-width:240px;padding:.5rem .75rem;font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-size:.875rem;line-height:1.35;color:#1a1917;background-color:#e5dbc4;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='k'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0.50 0 0 0 0 0.35 0 0 0 0 0.20 0 0 0 0.55 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23k)' opacity='1'/%3E%3C/svg%3E");background-repeat:repeat;background-size:200px 200px;border:1px solid rgba(61,53,43,.15);border-radius:7.3098144943px 10.332942202px 9.3477066319px 5.9812259463px;box-shadow:0 4px 6px #3d352b14,0 2px 4px #3d352b0f;pointer-events:none;animation:tooltip-module__tooltipIn___CZbRw .12s ease-out}.tooltip-module__tooltip___e-rkz:after{content:"";position:absolute;width:9px;height:9px;background-color:#e5dbc4;transform:rotate(45deg);z-index:-1}.tooltip-module__top___78WWU:after{bottom:-4px;left:50%;margin-left:-4.5px}.tooltip-module__bottom___Irl3O:after{top:-4px;left:50%;margin-left:-4.5px}.tooltip-module__left___C1Ec4:after{right:-4px;top:50%;margin-top:-4.5px}.tooltip-module__right___oUA-Z:after{left:-4px;top:50%;margin-top:-4.5px}.tooltip-module__chalkboard___Um6dx{color:#d4e8cb;background-color:#1e3a2d;border:1px solid rgba(200,210,195,.2)}.tooltip-module__chalkboard___Um6dx:after{background-color:#1e3a2d}@keyframes tooltip-module__tooltipIn___CZbRw{0%{opacity:0;transform:scale(.96)}to{opacity:1}}@media (prefers-reduced-motion: reduce){.tooltip-module__tooltip___e-rkz{animation:none}}.toast-module__stack___hDi0s{position:fixed;z-index:800;display:flex;flex-direction:column;gap:.75rem;max-width:calc(100vw - 2rem);pointer-events:none}.toast-module__stack___hDi0s>*{pointer-events:auto}.toast-module__topLeft___Luw-F{top:1.5rem;left:1.5rem}.toast-module__topCenter___N1DwF{top:1.5rem;left:50%;transform:translate(-50%)}.toast-module__topRight___Dtgau{top:1.5rem;right:1.5rem}.toast-module__bottomLeft___Eb2lo{bottom:1.5rem;left:1.5rem;flex-direction:column-reverse}.toast-module__bottomCenter___gs-Yb{bottom:1.5rem;left:50%;transform:translate(-50%);flex-direction:column-reverse}.toast-module__bottomRight___-0e2j{bottom:1.5rem;right:1.5rem;flex-direction:column-reverse}.toast-module__item___RFjtm{width:360px;max-width:100%;animation:toast-module__toastIn___9m9iN .2s ease-out}@keyframes toast-module__toastIn___9m9iN{0%{opacity:0;transform:translateY(8px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}@media (prefers-reduced-motion: reduce){.toast-module__item___RFjtm{animation:none}}.toast-module__card___ZCvJS{position:relative;display:flex;align-items:flex-start;gap:1rem;padding:1.25rem 1.5rem;color:#68635c;filter:drop-shadow(0 8px 14px rgba(61,53,43,.14));--sketch-stroke: rgba(61, 53, 43, .32)}.toast-module__surface___mfMl0{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;border-radius:12px;clip-path:var(--sketch-clip)}.toast-module__iconWrapper___lnjcC{position:relative;z-index:1;flex-shrink:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px;margin-top:2px}.toast-module__content___AlliM{flex:1;min-width:0;position:relative;z-index:1}.toast-module__title___1Oqh8{font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-size:1.25rem;font-weight:700;line-height:1.2;margin-bottom:.25rem}.toast-module__description___eiUSB{font-family:Cormorant Garamond,Georgia,serif;font-size:1rem;line-height:1.5}.toast-module__dismiss___tUGx4{position:relative;z-index:1;flex-shrink:0;display:flex;align-items:center;justify-content:center;padding:.25rem;background:transparent;border:none;cursor:pointer;border-radius:7.1205342889px 8.2885958861px 8.5408387804px 7.1824098445px;color:inherit;opacity:.6;transition:opacity .15s ease-out,background .15s ease-out}.toast-module__dismiss___tUGx4:hover{opacity:1;background:#0000000a}.toast-module__dismiss___tUGx4:focus-visible{opacity:1;outline:2px solid #8A9BA8;outline-offset:2px}.toast-module__info___Nh8S9{--sketch-stroke: rgba(138, 155, 168, .45)}.toast-module__success___hlKLc{--sketch-stroke: rgba(94, 138, 102, .42)}.toast-module__warning___XUMJt{--sketch-stroke: rgba(166, 123, 79, .45)}.toast-module__error___pSFFC{color:#9e5e5e;--sketch-stroke: rgba(158, 94, 94, .45)}.toast-module__chalkboard___c49gt{color:#e8e4d9;filter:drop-shadow(0 8px 14px rgba(0,0,0,.32));--sketch-stroke: rgba(200, 210, 195, .4)}.toast-module__chalkboard___c49gt .toast-module__surface___mfMl0{background-color:#1e3a2d;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='c'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0.15 0 0 0 0 0.28 0 0 0 0 0.20 0 0 0 0.08 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23c)' opacity='1'/%3E%3C/svg%3E");background-repeat:repeat;background-size:200px 200px}.toast-module__chalkboard___c49gt .toast-module__dismiss___tUGx4{color:#a8b5a0}.toast-module__chalkboard___c49gt .toast-module__dismiss___tUGx4:hover{background:#c8d2c314}.avatar-module__avatar___gw6mG{position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-weight:600;color:#1a1917;-webkit-user-select:none;-moz-user-select:none;user-select:none;--avatar-fill: #F5F1E6;--sketch-stroke: rgba(61, 53, 43, .2)}.avatar-module__surface___TYxHH{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;display:flex;align-items:center;justify-content:center;overflow:hidden;background-color:var(--avatar-fill);background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.04'/%3E%3C/svg%3E");background-repeat:repeat;background-size:200px 200px;clip-path:var(--sketch-clip)}.avatar-module__circle___EHI7d .avatar-module__surface___TYxHH{border-radius:50%}.avatar-module__square___Hx-84 .avatar-module__surface___TYxHH{border-radius:7.0405227563px 8.0931059495px 9.6588750957px 6.4379150425px}.avatar-module__small___CPLh1{width:28px;height:28px;font-size:.75rem}.avatar-module__medium___1Nmcy{width:36px;height:36px;font-size:.875rem}.avatar-module__large___1CKR4{width:48px;height:48px;font-size:1.125rem}.avatar-module__xlarge___TY6p6{width:64px;height:64px;font-size:1.5rem}.avatar-module__image___yuWcg{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.avatar-module__blue___HGIn3{--avatar-fill: rgba(124, 156, 192, .18);color:#51719b}.avatar-module__green___ee9-J{--avatar-fill: rgba(143, 185, 150, .2);color:#5e8a66}.avatar-module__amber___A-ih1{--avatar-fill: rgba(212, 163, 115, .2);color:#a67b4f}.avatar-module__rose___eozxi{--avatar-fill: rgba(201, 139, 139, .2);color:#9e5e5e}.avatar-module__slate___bUlWM{--avatar-fill: rgba(138, 155, 168, .18);color:#5e7080}.avatar-module__chalkboard___n2ZKN{color:#d4e8cb;--avatar-fill: rgba(212, 232, 203, .08);--sketch-stroke: rgba(200, 210, 195, .4)}.avatar-module__chalkboard___n2ZKN .avatar-module__surface___TYxHH{background-image:none}.breadcrumb-module__breadcrumb___r-ILp{font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-size:.875rem}.breadcrumb-module__list___V3YFy{display:flex;flex-wrap:wrap;align-items:center;list-style:none;margin:0;padding:0}.breadcrumb-module__item___dDwYf{display:flex;align-items:center;gap:.25rem}.breadcrumb-module__link___CHC9k{color:#68635c;text-decoration:none;border-radius:8px;transition:color .15s ease-out}.breadcrumb-module__link___CHC9k:hover{color:#1a1917;text-decoration:underline;text-underline-offset:2px}.breadcrumb-module__link___CHC9k:focus-visible{outline:2px solid #8A9BA8;outline-offset:2px}.breadcrumb-module__linkButton___XoMW-{background:none;border:none;padding:0;margin:0;font:inherit;cursor:pointer}.breadcrumb-module__current___dprI9{color:#1a1917;font-weight:500}.breadcrumb-module__static___affaf{color:#68635c}.breadcrumb-module__separator___uLhtn{flex-shrink:0;color:#a8a399;margin:0 .25rem}.breadcrumb-module__chalkboard___COJpw .breadcrumb-module__link___CHC9k{color:#a8b5a0}.breadcrumb-module__chalkboard___COJpw .breadcrumb-module__link___CHC9k:hover{color:#d4e8cb}.breadcrumb-module__chalkboard___COJpw .breadcrumb-module__link___CHC9k:focus-visible{outline:2px solid #d4e8cb;outline-offset:2px}.breadcrumb-module__chalkboard___COJpw .breadcrumb-module__current___dprI9{color:#d4e8cb}.breadcrumb-module__chalkboard___COJpw .breadcrumb-module__static___affaf{color:#a8b5a0}.breadcrumb-module__chalkboard___COJpw .breadcrumb-module__separator___uLhtn{color:#5e7a68}.pagination-module__pagination___XUA2y{display:flex;align-items:center;gap:.5rem}.pagination-module__list___20YPz{display:flex;align-items:center;gap:.25rem;list-style:none;margin:0;padding:0}.pagination-module__pageButton___-T5D5{min-width:32px;justify-content:center}.pagination-module__dots___gL2WQ{display:flex;align-items:center;justify-content:center;width:32px;color:#a8a399;font-family:Luminari,Cormorant Garamond,Georgia,serif}.menu-module__wrapper___WCtoy{display:inline-block}.menu-module__menu___i40Wj{position:fixed;z-index:600;min-width:160px;filter:drop-shadow(0 8px 14px rgba(61,53,43,.14));--sketch-stroke: rgba(61, 53, 43, .32);animation:menu-module__menuIn___-OAQJ .16s ease-out}.menu-module__surface___SJbaB{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;background-color:#f5f1e6;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.04'/%3E%3C/svg%3E");background-repeat:repeat;background-size:200px 200px;border-radius:9.0266265697px 14.8513268693px 12.6691442851px 10.658397662px;clip-path:var(--sketch-clip)}.menu-module__list___YjCfD{position:relative;z-index:1;padding:.5rem;max-height:320px;overflow-y:auto;display:flex;flex-direction:column;gap:2px}@keyframes menu-module__menuIn___-OAQJ{0%{opacity:0;transform:translateY(-4px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}@media (prefers-reduced-motion: reduce){.menu-module__menu___i40Wj{animation:none}}.menu-module__item___aqcgg{display:flex;align-items:center;gap:.5rem;width:100%;padding:.5rem .75rem;border:none;background:transparent;font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);font-size:1rem;text-align:left;color:#1a1917;cursor:pointer;border-radius:7.3540710016px 8.2500975499px 8.5662198042px 7.0237455714px;transition:background-color .15s ease-out}.menu-module__item___aqcgg:hover:not(:disabled){background-image:radial-gradient(circle at 50% 50%,rgba(143,185,150,.22) 0%,transparent 70%);background-color:#8fb9961f}.menu-module__item___aqcgg:focus{outline:none;background-image:radial-gradient(circle at 50% 50%,rgba(143,185,150,.28) 0%,transparent 70%);background-color:#8fb99624}.menu-module__item___aqcgg:focus-visible{outline:2px solid #8A9BA8;outline-offset:2px}.menu-module__icon___1qUvA{display:flex;align-items:center;justify-content:center;flex-shrink:0;color:#68635c}.menu-module__label___MtQMh{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.menu-module__danger___p9oZo,.menu-module__danger___p9oZo .menu-module__icon___1qUvA{color:#9e5e5e}.menu-module__danger___p9oZo:hover:not(:disabled),.menu-module__danger___p9oZo:focus{background-image:radial-gradient(circle at 50% 50%,rgba(201,139,139,.22) 0%,transparent 70%);background-color:#c98b8b1f}.menu-module__itemDisabled___HByLP{opacity:.45;cursor:not-allowed}.menu-module__separator___g2uay{height:1px;margin:.25rem .5rem;background:#3d352b26}.menu-module__chalkboard___5jIwI{filter:drop-shadow(0 8px 14px rgba(0,0,0,.3));--sketch-stroke: rgba(200, 210, 195, .3)}.menu-module__chalkboard___5jIwI .menu-module__surface___SJbaB{background-image:none;background-color:#1e3a2d}.menu-module__chalkboard___5jIwI .menu-module__item___aqcgg{color:#e8e4d9}.menu-module__chalkboard___5jIwI .menu-module__item___aqcgg:hover:not(:disabled),.menu-module__chalkboard___5jIwI .menu-module__item___aqcgg:focus{background-image:none;background-color:#c8d2c31a}.menu-module__chalkboard___5jIwI .menu-module__item___aqcgg:focus-visible{outline:2px solid #d4e8cb;outline-offset:2px}.menu-module__chalkboard___5jIwI .menu-module__icon___1qUvA{color:#a8b5a0}.menu-module__chalkboard___5jIwI .menu-module__danger___p9oZo,.menu-module__chalkboard___5jIwI .menu-module__danger___p9oZo .menu-module__icon___1qUvA{color:#e8a0a0}.menu-module__chalkboard___5jIwI .menu-module__danger___p9oZo:hover:not(:disabled),.menu-module__chalkboard___5jIwI .menu-module__danger___p9oZo:focus{background-color:#e8a0a026}.menu-module__chalkboard___5jIwI .menu-module__separator___g2uay{background:#c8d2c333}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.left-0{left:0}.isolate{isolation:isolate}.z-\[290\]{z-index:290}.z-\[300\]{z-index:300}.box-border{box-sizing:border-box}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-full{height:100%}.h-screen{height:100vh}.min-h-0{min-height:0px}.min-w-0{min-width:0px}.flex-1{flex:1 1 0%}.shrink{flex-shrink:1}.grow{flex-grow:1}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-default{cursor:default}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.gap-1{gap:.25rem}.overflow-y-auto{overflow-y:auto}.border{border-width:1px}.border-none{border-style:none}.p-0{padding:0}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[17px\]{font-size:17px}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.uppercase{text-transform:uppercase}.italic{font-style:italic}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-300{transition-duration:.3s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}:root{--paper-font-default: "Cormorant Garamond", Georgia, serif}.stack-card-fill{flex:1;min-height:0;display:flex;flex-direction:column}.stack-card-fill>div{flex:1;display:flex;flex-direction:column;min-height:0;overflow-y:auto}header>div[class*=headerActions]{flex:1;min-width:0}header[class*=layout-module__header___]{height:64px}.stack-check-btn:hover:not(:disabled){transform:translateY(-1px);filter:brightness(1.15)}.stack-check-btn:active:not(:disabled){transform:translateY(0);filter:brightness(.95)}.phase-row-review{background-color:#9b7ab514}.plan-row-highlighted{outline:2px solid rgba(200,154,90,.5);outline-offset:-2px}.plan-rows-grid{display:grid;grid-template-columns:76px minmax(0,1fr) 84px 96px 112px;gap:.625rem;align-items:center}.plan-row-card [class*=textureLayer]{padding:.375rem .875rem}@media (max-width: 1023px){.plan-rows-grid{grid-template-columns:76px minmax(0,1fr) 96px 112px}.plan-rows-cell-updated{display:none}}.idea-rows-grid{display:grid;grid-template-columns:76px minmax(0,1fr) 112px 140px;gap:.625rem;align-items:center}@media (min-width: 1024px){.lg\:sticky{position:sticky}.lg\:inset-auto{inset:auto}.lg\:top-0{top:0}.lg\:z-auto{z-index:auto}.lg\:hidden{display:none}.lg\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\:\[--pc-sidebar-h\:calc\(100vh-128px\)\]{--pc-sidebar-h: calc(100vh - 128px) }}@media (min-width: 1440px){.min-\[1440px\]\:pr-\[480px\]{padding-right:480px}}