@dendelion/paper-camp 0.16.0 → 0.17.1
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.
- package/dist/app/assets/index-BXRfFWnQ.js +4 -0
- package/dist/app/assets/index-BXRfFWnQ.js.map +1 -0
- package/dist/app/assets/index-BrriNOla.js +2 -0
- package/dist/app/assets/{index-Bz4Df_iX.js.map → index-BrriNOla.js.map} +1 -1
- package/dist/app/assets/{index-Cm3hzD0z.js → index-C4T8Gzjs.js} +2 -2
- package/dist/app/assets/{index-Cm3hzD0z.js.map → index-C4T8Gzjs.js.map} +1 -1
- package/dist/app/assets/{index-BiDION9V.js → index-CSl9MOCi.js} +3 -3
- package/dist/app/assets/{index-BiDION9V.js.map → index-CSl9MOCi.js.map} +1 -1
- package/dist/app/assets/{index-CGtPCj1V.js → index-D0gBw6x1.js} +3 -3
- package/dist/app/assets/{index-CGtPCj1V.js.map → index-D0gBw6x1.js.map} +1 -1
- package/dist/app/assets/index-DJwR0UyW.js +2 -0
- package/dist/app/assets/index-DJwR0UyW.js.map +1 -0
- package/dist/app/assets/index-_tpcAf-k.js +2 -0
- package/dist/app/assets/index-_tpcAf-k.js.map +1 -0
- package/dist/app/assets/main-Ll-lvqgh.css +1 -0
- package/dist/app/assets/main-Zb7gEID9.js +207 -0
- package/dist/app/assets/main-Zb7gEID9.js.map +1 -0
- package/dist/app/assets/{sidebar-section-B3aJWLXB.js → sidebar-section-DxUjM4Rm.js} +2 -2
- package/dist/app/assets/{sidebar-section-B3aJWLXB.js.map → sidebar-section-DxUjM4Rm.js.map} +1 -1
- package/dist/app/index.html +2 -2
- package/dist/app/toolbar.js +4050 -4100
- package/dist/app/toolbar.js.map +1 -1
- package/dist/chunks/{parked-questions.DZYZgrSZ.js → phase-progress.DsBJvd_o.js} +1224 -1095
- package/dist/chunks/phase-progress.DsBJvd_o.js.map +1 -0
- package/dist/cli/index.js +7783 -7627
- package/dist/cli/index.js.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +98 -91
- package/dist/core/phase-progress.d.ts +16 -0
- package/dist/core/phase-progress.d.ts.map +1 -0
- package/dist/core/phase-progress.test.d.ts +2 -0
- package/dist/core/phase-progress.test.d.ts.map +1 -0
- package/dist/core/phase-run.d.ts +17 -0
- package/dist/core/phase-run.d.ts.map +1 -0
- package/dist/core/phase-run.test.d.ts +2 -0
- package/dist/core/phase-run.test.d.ts.map +1 -0
- package/dist/core/rate-limit.d.ts +4 -0
- package/dist/core/rate-limit.d.ts.map +1 -0
- package/dist/core/rate-limit.test.d.ts +2 -0
- package/dist/core/rate-limit.test.d.ts.map +1 -0
- package/dist/core/sections.d.ts.map +1 -1
- package/dist/core/stats.d.ts +5 -1
- package/dist/core/stats.d.ts.map +1 -1
- package/dist/types/index.d.ts +59 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +2 -1
- package/dist/app/assets/index-0BzPyUVh.js +0 -2
- package/dist/app/assets/index-0BzPyUVh.js.map +0 -1
- package/dist/app/assets/index-Bz4Df_iX.js +0 -2
- package/dist/app/assets/index-C6vBW0wx.js +0 -4
- package/dist/app/assets/index-C6vBW0wx.js.map +0 -1
- package/dist/app/assets/index-Dtdlcmro.js +0 -2
- package/dist/app/assets/index-Dtdlcmro.js.map +0 -1
- package/dist/app/assets/main-Ba3mXsWY.js +0 -207
- package/dist/app/assets/main-Ba3mXsWY.js.map +0 -1
- package/dist/app/assets/main-CIoBIAYG.css +0 -1
- package/dist/chunks/parked-questions.DZYZgrSZ.js.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{c as m,r as o,j as e,P as u,X as i,Y as h,N as j,Z as r,_ as p,U as d,$ as g,a0 as v,w as N}from"./main-Zb7gEID9.js";import{c}from"./tokens-C3C44lLs.js";const f=async()=>{const s=await fetch(m("/api/stats"));if(!s.ok)throw new Error(`Failed to fetch stats: ${s.status}`);return s.json()},y=["open",...h],T={...j,open:"Open"},b=s=>`${Math.round(s*100)}%`,l=({title:s,children:a})=>e.jsx("div",{className:"flex-[1_1_260px] max-w-[360px] max-[480px]:flex-[1_1_100%] max-[480px]:max-w-none",children:e.jsx(N,{size:"small",texture:"kraft",className:"h-full",children:e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx("span",{className:"font-handwritten text-xs font-semibold opacity-[0.55]",children:s}),a]})})}),n=({label:s,value:a})=>e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"opacity-70",children:s}),e.jsx("span",{className:"font-semibold",children:a})]}),S=({comments:s})=>e.jsxs(l,{title:"Comment ratio",children:[e.jsx(i,{value:s.ratio*100,color:c.accentSlate}),e.jsx(n,{label:"Ratio",value:b(s.ratio)}),e.jsx(n,{label:"Comment lines",value:s.commentLines}),e.jsx(n,{label:"Source lines",value:s.sourceLines})]}),C=({testCoveragePct:s})=>e.jsx(l,{title:"Test coverage",children:s===null?e.jsx("p",{className:"opacity-50 m-0",children:"Run `pnpm test` to generate a coverage report."}):e.jsxs(e.Fragment,{children:[e.jsx(i,{value:s,color:c.accentGreen}),e.jsx(n,{label:"Line coverage",value:`${Math.round(s)}%`})]})}),w=({sourceLines:s,testLines:a})=>e.jsxs(l,{title:"Codebase size",children:[e.jsx(n,{label:"Source lines",value:s}),e.jsx(n,{label:"Test lines",value:a})]}),L=({entitiesByStatus:s})=>e.jsxs(l,{title:"Entities by status",children:[y.filter(a=>s[a]).map(a=>e.jsx(n,{label:T[a],value:s[a]},a)),Object.keys(s).length===0&&e.jsx("p",{className:"opacity-50 m-0",children:"No entities yet."})]}),A=({openQuestions:s,decisions:a})=>e.jsxs(l,{title:"Notes",children:[e.jsx(n,{label:"Open questions",value:s}),e.jsx(n,{label:"Decisions",value:a})]}),M=({tasksPerWeek:s})=>{const a=Math.max(1,...s.map(t=>t.count));return e.jsxs(l,{title:"Tasks per week",children:[s.length===0&&e.jsx("p",{className:"opacity-50 m-0",children:"No tasks run yet."}),s.map(t=>e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx(n,{label:t.week,value:t.count}),e.jsx(i,{value:t.count,max:a,color:c.accentAmber,height:4})]},t.week))]})},E=({usagePerWeek:s})=>{const a=Math.max(1,...s.map(t=>t.agentMinutes));return e.jsxs(l,{title:"Usage per week",children:[s.length===0&&e.jsx("p",{className:"opacity-50 m-0",children:"No usage recorded yet."}),s.map(t=>e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx(n,{label:t.week,value:`${t.agentMinutes}m`}),e.jsx(i,{value:t.agentMinutes,max:a,color:c.accentAmber,height:4}),e.jsxs("span",{className:"text-2xs opacity-50",children:[r(t.inputTokens)," in · ",r(t.outputTokens)," out"]})]},t.week))]})},k=({medianPhaseDurationMs:s})=>e.jsx(l,{title:"Median phase duration",children:s===null?e.jsx("p",{className:"opacity-50 m-0",children:"No phase runs recorded yet."}):e.jsx(n,{label:"Median",value:p(s)})}),_=({mostExpensiveIdeas:s})=>e.jsxs(l,{title:"Most expensive ideas",children:[s.length===0&&e.jsx("p",{className:"opacity-50 m-0",children:"No usage recorded yet."}),s.map(a=>e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsx(n,{label:a.planId,value:`${r(a.inputTokens)} in · ${r(a.outputTokens)} out`}),e.jsx("span",{className:"text-2xs opacity-50 truncate",children:a.planTitle})]},a.planId))]}),D={allowed:"success",warning:"warning",rejected:"error"},P=({capacity:s})=>{const[a,t]=o.useState(()=>Date.now());return o.useEffect(()=>{const x=setInterval(()=>t(Date.now()),3e4);return()=>clearInterval(x)},[]),e.jsx(l,{title:"Claude capacity",children:s===null?e.jsx("p",{className:"opacity-50 m-0",children:"No agent run has reported capacity yet."}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(d,{size:"small",variant:D[g(s.snapshot.status)],children:s.snapshot.status}),s.snapshot.overage&&e.jsx(d,{size:"small",variant:"warning",children:"overage"})]}),s.snapshot.rateLimitType&&e.jsx(n,{label:"Window",value:s.snapshot.rateLimitType}),s.snapshot.resetsAt!==void 0&&e.jsx(n,{label:"Resets",value:new Date(v(s.snapshot.resetsAt)).toLocaleTimeString()}),e.jsxs("span",{className:"text-2xs opacity-50",children:["as of last agent run,"," ",p(Math.max(0,a-Date.parse(s.capturedAt)))," ago"]})]})})},R=()=>{const[s,a]=o.useState(null),[t,x]=o.useState(!1);return o.useEffect(()=>{f().then(a).catch(()=>x(!0))},[]),e.jsxs("div",{children:[e.jsx(u,{children:"Stats"}),e.jsx("p",{className:"opacity-50 mb-6",children:"A read-only look at project health — every number here is informational, none of them gate anything."}),t&&e.jsx("p",{className:"opacity-50",children:"Couldn't load stats."}),!t&&!s&&e.jsx("p",{className:"opacity-50",children:"Loading…"}),s&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-wrap items-start gap-2.5",children:[e.jsx(S,{comments:s.comments}),e.jsx(C,{testCoveragePct:s.testCoveragePct}),e.jsx(w,{sourceLines:s.comments.sourceLines,testLines:s.testLines}),e.jsx(L,{entitiesByStatus:s.entitiesByStatus}),e.jsx(A,{openQuestions:s.openQuestions,decisions:s.decisions}),e.jsx(M,{tasksPerWeek:s.tasksPerWeek}),e.jsx(E,{usagePerWeek:s.usagePerWeek}),e.jsx(k,{medianPhaseDurationMs:s.medianPhaseDurationMs}),e.jsx(_,{mostExpensiveIdeas:s.mostExpensiveIdeas}),e.jsx(P,{capacity:s.capacity})]}),e.jsxs("p",{className:"opacity-[0.4] text-2xs mt-6",children:["Generated ",new Date(s.generatedAt).toLocaleString()]})]})]})};export{R as StatsPage};
|
|
2
|
+
//# sourceMappingURL=index-DJwR0UyW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DJwR0UyW.js","sources":["../../../src/app/services/content/stats-api.ts","../../../src/app/features/stats/stats-page.tsx"],"sourcesContent":["import type { ProjectStats } from '@/types/index';\nimport { apiUrl } from '../api-base';\n\nexport const fetchStats = async () => {\n const res = await fetch(apiUrl('/api/stats'));\n if (!res.ok) throw new Error(`Failed to fetch stats: ${res.status}`);\n return res.json() as Promise<ProjectStats>;\n};\n","import { PageTitle } from '@/app/components/page-title';\nimport { STATUS_LABEL } from '@/app/features/plans/constants';\nimport { fetchStats } from '@/app/services/content';\nimport { color } from '@/app/styles/tokens';\nimport { formatDuration, formatTokens } from '@/core/phase-run';\nimport { capacityLevel, resetsAtMs } from '@/core/rate-limit';\nimport { type EntityStatus, PLAN_STATUSES, type ProjectStats } from '@/types/index';\nimport { Card, Progress, Stamp } from '@dendelion/paper-ui';\nimport { useEffect, useState } from 'react';\n\nconst ENTITY_STATUS_ORDER: EntityStatus[] = ['open', ...PLAN_STATUSES];\n\nconst ENTITY_STATUS_LABEL: Record<EntityStatus, string> = { ...STATUS_LABEL, open: 'Open' };\n\nconst pct = (value: number) => `${Math.round(value * 100)}%`;\n\nconst StatCard = ({ title, children }: { title: string; children: React.ReactNode }) => (\n <div className=\"flex-[1_1_260px] max-w-[360px] max-[480px]:flex-[1_1_100%] max-[480px]:max-w-none\">\n <Card size=\"small\" texture=\"kraft\" className=\"h-full\">\n <div className=\"flex flex-col gap-3\">\n <span className=\"font-handwritten text-xs font-semibold opacity-[0.55]\">{title}</span>\n {children}\n </div>\n </Card>\n </div>\n);\n\nconst StatRow = ({ label, value }: { label: string; value: React.ReactNode }) => (\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"opacity-70\">{label}</span>\n <span className=\"font-semibold\">{value}</span>\n </div>\n);\n\nconst CommentRatioCard = ({ comments }: { comments: ProjectStats['comments'] }) => (\n <StatCard title=\"Comment ratio\">\n <Progress value={comments.ratio * 100} color={color.accentSlate} />\n <StatRow label=\"Ratio\" value={pct(comments.ratio)} />\n <StatRow label=\"Comment lines\" value={comments.commentLines} />\n <StatRow label=\"Source lines\" value={comments.sourceLines} />\n </StatCard>\n);\n\nconst TestCoverageCard = ({ testCoveragePct }: { testCoveragePct: number | null }) => (\n <StatCard title=\"Test coverage\">\n {testCoveragePct === null ? (\n <p className=\"opacity-50 m-0\">Run `pnpm test` to generate a coverage report.</p>\n ) : (\n <>\n <Progress value={testCoveragePct} color={color.accentGreen} />\n <StatRow label=\"Line coverage\" value={`${Math.round(testCoveragePct)}%`} />\n </>\n )}\n </StatCard>\n);\n\nconst CodebaseSizeCard = ({\n sourceLines,\n testLines,\n}: { sourceLines: number; testLines: number }) => (\n <StatCard title=\"Codebase size\">\n <StatRow label=\"Source lines\" value={sourceLines} />\n <StatRow label=\"Test lines\" value={testLines} />\n </StatCard>\n);\n\nconst EntitiesByStatusCard = ({\n entitiesByStatus,\n}: { entitiesByStatus: ProjectStats['entitiesByStatus'] }) => (\n <StatCard title=\"Entities by status\">\n {ENTITY_STATUS_ORDER.filter((status) => entitiesByStatus[status]).map((status) => (\n <StatRow key={status} label={ENTITY_STATUS_LABEL[status]} value={entitiesByStatus[status]} />\n ))}\n {Object.keys(entitiesByStatus).length === 0 && (\n <p className=\"opacity-50 m-0\">No entities yet.</p>\n )}\n </StatCard>\n);\n\nconst NotesCard = ({ openQuestions, decisions }: { openQuestions: number; decisions: number }) => (\n <StatCard title=\"Notes\">\n <StatRow label=\"Open questions\" value={openQuestions} />\n <StatRow label=\"Decisions\" value={decisions} />\n </StatCard>\n);\n\nconst TasksPerWeekCard = ({ tasksPerWeek }: { tasksPerWeek: ProjectStats['tasksPerWeek'] }) => {\n const max = Math.max(1, ...tasksPerWeek.map((w) => w.count));\n return (\n <StatCard title=\"Tasks per week\">\n {tasksPerWeek.length === 0 && <p className=\"opacity-50 m-0\">No tasks run yet.</p>}\n {tasksPerWeek.map((week) => (\n <div key={week.week} className=\"flex flex-col gap-1\">\n <StatRow label={week.week} value={week.count} />\n <Progress value={week.count} max={max} color={color.accentAmber} height={4} />\n </div>\n ))}\n </StatCard>\n );\n};\n\nconst UsagePerWeekCard = ({ usagePerWeek }: { usagePerWeek: ProjectStats['usagePerWeek'] }) => {\n const max = Math.max(1, ...usagePerWeek.map((w) => w.agentMinutes));\n return (\n <StatCard title=\"Usage per week\">\n {usagePerWeek.length === 0 && <p className=\"opacity-50 m-0\">No usage recorded yet.</p>}\n {usagePerWeek.map((week) => (\n <div key={week.week} className=\"flex flex-col gap-1\">\n <StatRow label={week.week} value={`${week.agentMinutes}m`} />\n <Progress value={week.agentMinutes} max={max} color={color.accentAmber} height={4} />\n <span className=\"text-2xs opacity-50\">\n {formatTokens(week.inputTokens)} in · {formatTokens(week.outputTokens)} out\n </span>\n </div>\n ))}\n </StatCard>\n );\n};\n\nconst MedianPhaseDurationCard = ({\n medianPhaseDurationMs,\n}: { medianPhaseDurationMs: number | null }) => (\n <StatCard title=\"Median phase duration\">\n {medianPhaseDurationMs === null ? (\n <p className=\"opacity-50 m-0\">No phase runs recorded yet.</p>\n ) : (\n <StatRow label=\"Median\" value={formatDuration(medianPhaseDurationMs)} />\n )}\n </StatCard>\n);\n\nconst MostExpensiveIdeasCard = ({\n mostExpensiveIdeas,\n}: { mostExpensiveIdeas: ProjectStats['mostExpensiveIdeas'] }) => (\n <StatCard title=\"Most expensive ideas\">\n {mostExpensiveIdeas.length === 0 && <p className=\"opacity-50 m-0\">No usage recorded yet.</p>}\n {mostExpensiveIdeas.map((idea) => (\n <div key={idea.planId} className=\"flex flex-col gap-0.5\">\n <StatRow\n label={idea.planId}\n value={`${formatTokens(idea.inputTokens)} in · ${formatTokens(idea.outputTokens)} out`}\n />\n <span className=\"text-2xs opacity-50 truncate\">{idea.planTitle}</span>\n </div>\n ))}\n </StatCard>\n);\n\nconst CAPACITY_STAMP = {\n allowed: 'success',\n warning: 'warning',\n rejected: 'error',\n} as const;\n\nconst ClaudeCapacityCard = ({ capacity }: { capacity: ProjectStats['capacity'] }) => {\n const [now, setNow] = useState(() => Date.now());\n useEffect(() => {\n const id = setInterval(() => setNow(Date.now()), 30_000);\n return () => clearInterval(id);\n }, []);\n return (\n <StatCard title=\"Claude capacity\">\n {capacity === null ? (\n <p className=\"opacity-50 m-0\">No agent run has reported capacity yet.</p>\n ) : (\n <>\n <div className=\"flex items-center gap-2\">\n <Stamp size=\"small\" variant={CAPACITY_STAMP[capacityLevel(capacity.snapshot.status)]}>\n {capacity.snapshot.status}\n </Stamp>\n {capacity.snapshot.overage && (\n <Stamp size=\"small\" variant=\"warning\">\n overage\n </Stamp>\n )}\n </div>\n {capacity.snapshot.rateLimitType && (\n <StatRow label=\"Window\" value={capacity.snapshot.rateLimitType} />\n )}\n {capacity.snapshot.resetsAt !== undefined && (\n <StatRow\n label=\"Resets\"\n value={new Date(resetsAtMs(capacity.snapshot.resetsAt)).toLocaleTimeString()}\n />\n )}\n <span className=\"text-2xs opacity-50\">\n as of last agent run,{' '}\n {formatDuration(Math.max(0, now - Date.parse(capacity.capturedAt)))} ago\n </span>\n </>\n )}\n </StatCard>\n );\n};\n\nexport const StatsPage = () => {\n const [stats, setStats] = useState<ProjectStats | null>(null);\n const [loadFailed, setLoadFailed] = useState(false);\n\n useEffect(() => {\n fetchStats()\n .then(setStats)\n .catch(() => setLoadFailed(true));\n }, []);\n\n return (\n <div>\n <PageTitle>Stats</PageTitle>\n <p className=\"opacity-50 mb-6\">\n A read-only look at project health — every number here is informational, none of them gate\n anything.\n </p>\n {loadFailed && <p className=\"opacity-50\">Couldn't load stats.</p>}\n {!loadFailed && !stats && <p className=\"opacity-50\">Loading…</p>}\n {stats && (\n <>\n <div className=\"flex flex-wrap items-start gap-2.5\">\n <CommentRatioCard comments={stats.comments} />\n <TestCoverageCard testCoveragePct={stats.testCoveragePct} />\n <CodebaseSizeCard\n sourceLines={stats.comments.sourceLines}\n testLines={stats.testLines}\n />\n <EntitiesByStatusCard entitiesByStatus={stats.entitiesByStatus} />\n <NotesCard openQuestions={stats.openQuestions} decisions={stats.decisions} />\n <TasksPerWeekCard tasksPerWeek={stats.tasksPerWeek} />\n <UsagePerWeekCard usagePerWeek={stats.usagePerWeek} />\n <MedianPhaseDurationCard medianPhaseDurationMs={stats.medianPhaseDurationMs} />\n <MostExpensiveIdeasCard mostExpensiveIdeas={stats.mostExpensiveIdeas} />\n <ClaudeCapacityCard capacity={stats.capacity} />\n </div>\n <p className=\"opacity-[0.4] text-2xs mt-6\">\n Generated {new Date(stats.generatedAt).toLocaleString()}\n </p>\n </>\n )}\n </div>\n );\n};\n"],"names":["fetchStats","res","apiUrl","ENTITY_STATUS_ORDER","PLAN_STATUSES","ENTITY_STATUS_LABEL","STATUS_LABEL","pct","value","StatCard","title","children","jsx","Card","jsxs","StatRow","label","CommentRatioCard","comments","Progress","color","TestCoverageCard","testCoveragePct","Fragment","CodebaseSizeCard","sourceLines","testLines","EntitiesByStatusCard","entitiesByStatus","status","NotesCard","openQuestions","decisions","TasksPerWeekCard","tasksPerWeek","max","w","week","UsagePerWeekCard","usagePerWeek","formatTokens","MedianPhaseDurationCard","medianPhaseDurationMs","formatDuration","MostExpensiveIdeasCard","mostExpensiveIdeas","idea","CAPACITY_STAMP","ClaudeCapacityCard","capacity","now","setNow","useState","useEffect","id","Stamp","capacityLevel","resetsAtMs","StatsPage","stats","setStats","loadFailed","setLoadFailed","PageTitle"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{c as K,r as d,k as _,j as e,l as M,U as P,w as F,J as f,p as v,e as V,g as X,h as te,m as ae,s as D,u as T,V as Q,n as ne,a as Z,q as ee,P as le,t as ie,o as B,D as z,v as oe,A as O,x as q,z as re,B as ce,i as L}from"./main-Zb7gEID9.js";import{c as de}from"./tokens-C3C44lLs.js";import{S as W}from"./sidebar-section-DxUjM4Rm.js";const me=async()=>{try{const s=await fetch(K("/api/merge-policy"));return s.ok?await s.json():null}catch{return null}},pe=async()=>{try{const s=await fetch(K("/api/merge-policy/apply"),{method:"POST"});return s.ok?await s.json():null}catch{return null}},se={allowSquashMerge:!0,allowMergeCommit:!1,allowRebaseMerge:!1,squashMergeCommitTitle:"PR_TITLE",squashMergeCommitMessage:"PR_BODY"},G=[{key:"allowSquashMerge",label:"Allow squash merge"},{key:"allowMergeCommit",label:"Allow merge commit"},{key:"allowRebaseMerge",label:"Allow rebase merge"},{key:"squashMergeCommitTitle",label:"Squash commit title"},{key:"squashMergeCommitMessage",label:"Squash commit message"}];function $(s){return typeof s=="boolean"?s?"Yes":"No":s}function he(s){return G.every(t=>s[t.key]===se[t.key])}const ue=({label:s,current:t,recommended:r,isLast:l})=>{const p=t===r;return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex items-center gap-3 pb-2 pt-2",children:[e.jsx("span",{className:"flex-1",children:s}),e.jsx("span",{className:p?"opacity-[0.65] font-normal":"font-semibold",children:$(t)}),!p&&e.jsxs("span",{className:"opacity-[0.45]",children:["→ ",$(r)]})]}),!l&&e.jsx(v,{})]})},xe=()=>{const[s,t]=d.useState(void 0),[r,l]=d.useState(!1),{toast:p}=_();d.useEffect(()=>{me().then(t)},[]);const u=async()=>{l(!0);const n=await pe();l(!1),(n==null?void 0:n.status)==="ok"?(t(n),p({title:"Merge policy applied",variant:"success"})):p({title:"Failed to apply merge policy",description:(n==null?void 0:n.status)==="unavailable"?n.reason:void 0,variant:"error"})},h=(s==null?void 0:s.status)==="ok"&&he(s.policy);return e.jsxs("div",{children:[e.jsxs("div",{className:"mb-6",children:[e.jsx("h2",{className:"m-0",children:"Merge Policy"}),e.jsx("p",{className:"opacity-50 mt-1",children:"Paper Camp's canonical policy: squash-only merges, with the commit title and body taken from the PR."})]}),s===void 0&&e.jsx("p",{children:"Loading…"}),s===null&&e.jsx(M,{variant:"warning",children:"Failed to load merge policy."}),(s==null?void 0:s.status)==="unavailable"&&e.jsx(M,{variant:"warning",children:s.reason}),(s==null?void 0:s.status)==="ok"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex items-center gap-3 mb-3",children:[e.jsx("span",{className:"font-medium",children:s.repo}),e.jsx(P,{size:"small",fillColor:h?"rgba(143, 185, 150, 0.25)":"rgba(212, 163, 115, 0.25)",textColor:h?"#5E8A66":"#A67B4F",children:h?"Matches recommended policy":"Differs from recommended policy"})]}),e.jsx(F,{size:"small",texture:"kraft",children:G.map((n,c)=>e.jsx(ue,{label:n.label,current:s.policy[n.key],recommended:se[n.key],isLast:c===G.length-1},n.key))}),e.jsx("div",{className:"mt-4",children:e.jsx(f,{size:"small",onClick:u,disabled:r||h,children:r?"Applying…":"Apply recommended policy"})})]})]})},je=2e3,ge="agent:claude-code",fe=["claude auth login","claude setup-token"],be=()=>e.jsxs("div",{className:"mt-2 flex flex-col gap-2",children:[e.jsx("p",{className:"opacity-[0.65] text-sm m-0",children:"The in-app relay couldn't complete. Run one of these in a terminal instead:"}),fe.map(s=>e.jsx(Q,{code:s},s)),e.jsxs("p",{className:"opacity-50 text-sm m-0",children:["Alternatively, set ",e.jsx("code",{children:"ANTHROPIC_API_KEY"})," in the server's environment — that bills as API usage rather than your Max subscription, so treat it as a fallback, not the default."]})]}),ve=({onSignedIn:s})=>{const t=T(c=>c.loginRelay),r=T(c=>c.startLoginRelay),l=T(c=>c.loadLoginRelayStatus),p=T(c=>c.cancelLoginRelay),{toast:u}=_(),h=d.useRef(null),n=t==null?void 0:t.phase;return d.useEffect(()=>{if(n!=="starting"&&n!=="awaiting-authorization")return;const c=window.setInterval(()=>l(),je);return()=>window.clearInterval(c)},[n,l]),d.useEffect(()=>{const c=t==null?void 0:t.authorizeUrl;n!=="awaiting-authorization"||!c||h.current===c||(h.current=c,window.open(c,"_blank","noopener,noreferrer"))},[n,t==null?void 0:t.authorizeUrl]),d.useEffect(()=>{n==="success"?(u({title:"Signed in",variant:"success"}),s()):n==="error"&&u({title:"Sign-in failed",description:t==null?void 0:t.error,variant:"error"})},[n]),n==="starting"?e.jsx(f,{size:"small",disabled:!0,children:"Starting…"}):n==="awaiting-authorization"?e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(f,{size:"small",onClick:()=>(t==null?void 0:t.authorizeUrl)&&window.open(t.authorizeUrl,"_blank","noopener,noreferrer"),children:"Reopen sign-in tab"}),e.jsx(f,{size:"small",onClick:()=>p(),children:"Cancel"})]}):e.jsxs("div",{children:[e.jsx(f,{size:"small",onClick:()=>r(),children:"Sign in"}),n==="error"&&e.jsx(be,{})]})},ye={ok:{fill:"rgba(143, 185, 150, 0.25)",text:"#5E8A66",label:"Ready"},warn:{fill:"rgba(212, 163, 115, 0.25)",text:"#A67B4F",label:"Needs attention"},missing:{fill:"rgba(201, 139, 139, 0.25)",text:"#6E3A3A",label:"Missing"}},Ne=({connection:s,onConnect:t,connecting:r})=>{const{connect:l}=s;return l?l.kind==="command"&&l.runnable?e.jsx(f,{size:"small",onClick:()=>t(s.id),disabled:r,children:r?"Running…":`Run \`${l.command}\``}):l.kind==="command"?e.jsx("div",{className:"mt-2",children:e.jsx(Q,{code:l.command})}):l.kind==="link"?e.jsx(f,{size:"small",onClick:()=>window.open(l.url,"_blank","noopener,noreferrer"),children:l.label}):e.jsx("p",{className:"opacity-[0.65] text-sm mt-2 mx-0 mb-0",children:l.message}):null},Se=({connection:s,isLast:t,onRecheck:r,rechecking:l,onConnect:p,connecting:u})=>{const h=ye[s.status];return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"pb-3 pt-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"flex-1 font-medium",children:s.label}),s.authenticated===!1&&e.jsx(te,{content:"Installed, but not signed in",children:e.jsx(P,{size:"small",variant:"warning",children:"Not signed in"})}),e.jsx(P,{size:"small",fillColor:h.fill,textColor:h.text,children:h.label}),e.jsx(f,{size:"small",onClick:()=>r(s.id),disabled:l,children:l?"Checking…":"Recheck"})]}),e.jsxs("p",{className:"opacity-[0.65] text-sm mt-1 mx-0 mb-0",children:["Unlocks: ",s.unlocks]}),e.jsx("p",{className:"opacity-50 text-sm mt-1 mx-0 mb-0",children:s.detail}),e.jsx("div",{className:"mt-2",children:s.id===ge&&s.authenticated===!1?e.jsx(ve,{onSignedIn:()=>r(s.id)}):e.jsx(Ne,{connection:s,onConnect:p,connecting:u})})]}),!t&&e.jsx(v,{})]})},ke=()=>{const[s,t]=d.useState(null),[r,l]=d.useState(!1),[p,u]=d.useState(null),[h,n]=d.useState(null),[c,S]=d.useState(!1),{toast:y}=_(),N=d.useCallback(i=>{if(i===null){l(!0);return}l(!1),t(i)},[]);d.useEffect(()=>{V().then(N),X().then(i=>S((i==null?void 0:i.setupDismissed)??!1))},[N]);const A=async i=>{u(i),N(await V()),u(null)},m=async i=>{n(i);const b=await ae(i);b?t(C=>(C==null?void 0:C.map(R=>R.id===i?b:R))??C):y({title:"Failed to connect",variant:"error"}),n(null)},x=async()=>{const i=!c,{ok:b}=await D({setupDismissed:i});b?(S(i),y({title:"Saved",variant:"success"})):y({title:"Failed to save",variant:"error"})},k=(s==null?void 0:s.every(i=>i.status==="ok"))??!0;return e.jsxs("div",{children:[e.jsx("div",{className:"mb-6",children:e.jsx("h2",{className:"m-0",children:"Setup"})}),s===null&&!r&&e.jsx("p",{children:"Loading…"}),r&&e.jsx("div",{className:"mb-4",children:e.jsx(M,{variant:"warning",children:"Failed to load connections. Try refreshing."})}),s&&e.jsxs(e.Fragment,{children:[!k&&e.jsx("div",{className:"mb-4",children:e.jsx(M,{variant:"warning",children:"Some connections are incomplete — features that depend on them stay disabled until fixed. Run the connect command below, then recheck."})}),e.jsx(F,{size:"small",texture:"kraft",children:s.map((i,b)=>e.jsx(Se,{connection:i,isLast:b===s.length-1,onRecheck:A,rechecking:p===i.id,onConnect:m,connecting:h===i.id},i.id))}),e.jsx("div",{className:"mt-4",children:e.jsx(f,{size:"small",onClick:x,children:c?"Show Setup on open again":"Don't show Setup on open"})})]})]})},we=()=>{const{subjects:s,loading:t,available:r}=ne(),l=Z();return e.jsxs("div",{children:[e.jsxs("div",{className:"mb-6",children:[e.jsx("h2",{className:"m-0",children:"Subjects"}),e.jsx("p",{className:"opacity-50 mt-1",children:"Subjects are the roadmap's bets and standing concerns. Edit the vocabulary on the Roadmap page."})]}),t&&e.jsx("p",{children:"Loading…"}),!t&&!r&&e.jsx("p",{className:"opacity-60 m-0",children:"Couldn't load subjects — check the server config."}),!t&&r&&e.jsxs(F,{size:"small",texture:"kraft",children:[s.length===0&&e.jsx("p",{className:"opacity-[0.45] m-0 pb-2",children:"No subjects yet."}),s.map((p,u)=>e.jsxs("div",{children:[e.jsx("div",{className:"pb-2 pt-2",children:p}),u<s.length-1&&e.jsx(v,{})]},p)),s.length>0&&e.jsx(v,{}),e.jsx("div",{className:"pt-3",children:e.jsx(f,{size:"small",onClick:()=>l({to:"/roadmap"}),children:"Go to Roadmap"})})]})]})},J=["phase","planDraft","ideaExtend","commitSuggest","feedback"],Ae={phase:"Phase run",planDraft:"Plan draft",ideaExtend:"Idea extend",commitSuggest:"Commit suggest",feedback:"Scout chat"},Ce=140,Ee=160,Ie=110,ze=()=>e.jsxs("div",{className:"flex items-center gap-3 pb-1",children:[e.jsx("span",{className:"w-[110px] shrink-0 text-sm opacity-[0.45]",children:"Task"}),e.jsx("span",{className:"w-[140px] shrink-0 text-sm opacity-[0.45]",children:"Agent"}),e.jsx("span",{className:"w-[160px] shrink-0 text-sm opacity-[0.45]",children:"Model"}),e.jsx("span",{className:"w-[110px] shrink-0 text-sm opacity-[0.45]",children:"Effort"})]}),De=({taskKey:s,agentConfig:t,isLast:r,onSave:l})=>{const p=O[t.agent]??O["claude-code"],u=p.model,h=p.effort,[n,c]=d.useState(t.model??"");d.useEffect(()=>{c(t.model??"")},[t.model]);const S=m=>{var b;const x=m,k=O[x],i={agent:x};t.model&&(k.model===null||(b=k.model)!=null&&b.includes(t.model))&&(i.model=t.model),t.effort&&Array.isArray(k.effort)&&(i.effort=t.effort),l(s,i)},y=m=>{l(s,{...t,model:m||void 0})},N=()=>{l(s,{...t,model:n||void 0})},A=m=>{l(s,{...t,effort:m||void 0})};return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex items-center gap-3 pb-2 pt-2",children:[e.jsx("span",{className:"w-[110px] shrink-0 text-sm opacity-[0.65]",children:Ae[s]}),e.jsx(q,{size:"small",width:Ce,value:t.agent,onChange:S,options:re.map(m=>({value:m,label:ce[m]}))}),Array.isArray(u)?e.jsx(q,{size:"small",width:Ee,value:t.model??"",onChange:y,options:[{value:"",label:"Default"},...u.map(m=>({value:m,label:m}))]}):u===null?e.jsx(B,{size:"small",className:"w-[160px]",value:n,placeholder:"Default model",onChange:m=>c(m.target.value),onBlur:N}):null,e.jsx("div",{className:Array.isArray(h)?"visible":"invisible",children:e.jsx(q,{size:"small",width:Ie,value:t.effort??"",onChange:A,options:[{value:"",label:"Default"},...(Array.isArray(h)?h:[]).map(m=>({value:m,label:m}))]})})]}),!r&&e.jsx(v,{})]})},Me=()=>{var Y,H;const s=d.useRef(null),[t,r]=d.useState(void 0),{iconDataUri:l,loading:p}=ie(),[u,h]=d.useState(null),n=u??l,[c,S]=d.useState(!1),[y,N]=d.useState(""),[A,m]=d.useState(""),{toast:x}=_();d.useEffect(()=>{X().then(a=>{r(a),(a==null?void 0:a.port)!==void 0&&N(String(a.port)),(a==null?void 0:a.projectName)!==void 0&&m(a.projectName)})},[]);const k=async(a,g)=>{const o=t==null?void 0:t.defaultAgents,j={phase:(o==null?void 0:o.phase)??z.phase,planDraft:(o==null?void 0:o.planDraft)??z.planDraft,ideaExtend:(o==null?void 0:o.ideaExtend)??z.ideaExtend,commitSuggest:(o==null?void 0:o.commitSuggest)??z.commitSuggest,feedback:(o==null?void 0:o.feedback)??z.feedback,[a]:g},{ok:w,error:E}=await D({defaultAgents:j});w?(r(I=>I&&{...I,defaultAgents:j}),x({title:"Saved",variant:"success"})):x({title:"Failed to save",description:E,variant:"error"})},i=async()=>{const a=Number(y);if(!t||!Number.isInteger(a)||a<=0||a===t.port)return;const{ok:g,error:o}=await D({port:a});g?(r(j=>j&&{...j,port:a}),x({title:"Saved",description:"Restart `paper-camp dev` to apply the new port.",variant:"success"})):x({title:"Failed to save",description:o,variant:"error"})},b=async()=>{var w,E,I;if(!t)return;const a=!(((E=(w=t.integration)==null?void 0:w.toolbar)==null?void 0:E.enabled)??!0),g={...t.integration,toolbar:{...(I=t.integration)==null?void 0:I.toolbar,enabled:a}},{ok:o,error:j}=await D({integration:g});o?(r(U=>U&&{...U,integration:g}),x({title:"Saved",variant:"success"})):x({title:"Failed to save",description:j,variant:"error"})},C=async()=>{const a=A.trim();if(!t||!a||a===t.projectName)return;const{ok:g,error:o}=await D({projectName:a});g?(r(j=>j&&{...j,projectName:a}),m(a),x({title:"Saved",variant:"success"})):x({title:"Failed to save",description:o,variant:"error"})},R=async a=>{var j;const g=(j=a.target.files)==null?void 0:j[0];if(!g)return;S(!0);const o=new FileReader;o.onloadend=async()=>{const w=o.result,E=await oe(w);S(!1),E?(h(w),x({title:"Saved",variant:"success"})):x({title:"Failed to save",variant:"error"})},o.readAsDataURL(g)};return e.jsxs("div",{children:[e.jsx("div",{className:"mb-6",children:e.jsx("h2",{className:"m-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(F,{size:"small",texture:"kraft",children:[e.jsxs("div",{className:"flex items-end gap-3 pb-3",children:[e.jsx(B,{value:A,onChange:a=>m(a.target.value),onBlur:C,label:"Project Name"}),e.jsxs(P,{size:"small",fillColor:"rgba(143, 185, 150, 0.25)",textColor:de.accentGreenDark,children:["v",t.version]})]}),e.jsx(v,{}),e.jsxs("div",{className:"flex items-center gap-3 pb-3 pt-3",children:[n&&e.jsx("img",{src:n,alt:"Project icon",className:"w-10 h-10 object-contain shrink-0 rounded"}),e.jsxs("div",{children:[e.jsx("input",{ref:s,type:"file",accept:".svg,.png,.jpg,.jpeg,.gif,.webp",onChange:R,className:"hidden"}),e.jsx(f,{size:"small",onClick:()=>{var a;return(a=s.current)==null?void 0:a.click()},disabled:c,children:c?"Uploading…":"Choose File"}),p&&e.jsx("p",{className:"text-sm opacity-50 mt-1 mx-0 mb-0",children:"Loading…"}),!p&&!n&&!c&&e.jsx("p",{className:"text-sm opacity-[0.45] mt-1 mx-0 mb-0",children:"No icon set."})]})]}),e.jsx(v,{}),e.jsx("div",{className:"flex items-end gap-3 pb-3 pt-3",children:e.jsx(B,{type:"number",value:y,onChange:a=>N(a.target.value),onBlur:i,label:"Port",helperText:"Default for `paper-camp dev`. Restart the server to apply a change."})}),e.jsx(v,{}),e.jsxs("div",{className:"flex items-center justify-between gap-3 pb-3 pt-3",children:[e.jsxs("div",{children:[e.jsx("p",{className:"m-0",children:"In-app dev toolbar"}),e.jsx("p",{className:"opacity-[0.45] text-sm mt-1 mx-0 mb-0",children:"Inject the paper-camp toolbar into this project's dev server via the Vite plugin."})]}),e.jsx(f,{size:"small",onClick:b,children:((H=(Y=t.integration)==null?void 0:Y.toolbar)==null?void 0:H.enabled)??!0?"Disable":"Enable"})]}),e.jsx(v,{}),e.jsx(ze,{}),J.map((a,g)=>{var o;return e.jsx(De,{taskKey:a,agentConfig:((o=t.defaultAgents)==null?void 0:o[a])??z[a],isLast:g===J.length-1,onSave:k},a)})]}),e.jsxs("p",{className:"opacity-[0.45] text-sm mt-4",children:[e.jsx("strong",{children:"Initialized:"})," ",t?new Date(t.initializedAt).toLocaleString():"—"]})]})},Pe=()=>{const s=ee();return e.jsxs("div",{children:[e.jsx(le,{children:"Settings"}),s==="subjects"?e.jsx(we,{}):s==="setup"?e.jsx(ke,{}):s==="merge-policy"?e.jsx(xe,{}):e.jsx(Me,{})]})},_e=()=>{const s=ee(),t=Z();return e.jsxs(e.Fragment,{children:[e.jsxs(W,{label:"General",children:[e.jsx(L,{size:"small",active:s===null,onClick:()=>t({to:"/settings"}),children:"Project Info"}),e.jsx(L,{size:"small",active:s==="setup",onClick:()=>t({to:"/settings/$section",params:{section:"setup"}}),children:"Setup"}),e.jsx(L,{size:"small",active:s==="merge-policy",onClick:()=>t({to:"/settings/$section",params:{section:"merge-policy"}}),children:"Merge Policy"})]}),e.jsx(W,{label:"Ideas",children:e.jsx(L,{size:"small",active:s==="subjects",onClick:()=>t({to:"/settings/$section",params:{section:"subjects"}}),children:"Subjects"})})]})};export{Pe as SettingsPage,_e as SettingsSidebar};
|
|
2
|
+
//# sourceMappingURL=index-_tpcAf-k.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-_tpcAf-k.js","sources":["../../../src/app/services/system/merge-policy-api.ts","../../../src/app/features/settings/components/merge-policy-section.tsx","../../../src/app/features/settings/components/setup-section.tsx","../../../src/app/features/settings/components/subjects-section.tsx","../../../src/app/features/settings/settings-page.tsx","../../../src/app/features/settings/components/settings-sidebar.tsx"],"sourcesContent":["import type { MergePolicyResult } from '@/types/index';\nimport { apiUrl } from '../api-base';\n\nexport const fetchMergePolicy = async (): Promise<MergePolicyResult | null> => {\n try {\n const response = await fetch(apiUrl('/api/merge-policy'));\n if (!response.ok) return null;\n return (await response.json()) as MergePolicyResult;\n } catch {\n return null;\n }\n};\n\nexport const applyMergePolicy = async (): Promise<MergePolicyResult | null> => {\n try {\n const response = await fetch(apiUrl('/api/merge-policy/apply'), { method: 'POST' });\n if (!response.ok) return null;\n return (await response.json()) as MergePolicyResult;\n } catch {\n return null;\n }\n};\n","import { applyMergePolicy, fetchMergePolicy } from '@/app/services/system';\nimport type { MergePolicy, MergePolicyResult } from '@/types/index';\nimport { Alert, Button, Card, Divider, Stamp, useToast } from '@dendelion/paper-ui';\nimport { useEffect, useState } from 'react';\n\nconst RECOMMENDED: MergePolicy = {\n allowSquashMerge: true,\n allowMergeCommit: false,\n allowRebaseMerge: false,\n squashMergeCommitTitle: 'PR_TITLE',\n squashMergeCommitMessage: 'PR_BODY',\n};\n\nconst POLICY_ROWS: { key: keyof MergePolicy; label: string }[] = [\n { key: 'allowSquashMerge', label: 'Allow squash merge' },\n { key: 'allowMergeCommit', label: 'Allow merge commit' },\n { key: 'allowRebaseMerge', label: 'Allow rebase merge' },\n { key: 'squashMergeCommitTitle', label: 'Squash commit title' },\n { key: 'squashMergeCommitMessage', label: 'Squash commit message' },\n];\n\nfunction formatValue(value: boolean | string): string {\n return typeof value === 'boolean' ? (value ? 'Yes' : 'No') : value;\n}\n\nfunction matchesRecommended(policy: MergePolicy): boolean {\n return POLICY_ROWS.every((row) => policy[row.key] === RECOMMENDED[row.key]);\n}\n\ninterface PolicyRowProps {\n label: string;\n current: boolean | string;\n recommended: boolean | string;\n isLast: boolean;\n}\n\nconst PolicyRow = ({ label, current, recommended, isLast }: PolicyRowProps) => {\n const matches = current === recommended;\n return (\n <>\n <div className=\"flex items-center gap-3 pb-2 pt-2\">\n <span className=\"flex-1\">{label}</span>\n <span className={matches ? 'opacity-[0.65] font-normal' : 'font-semibold'}>\n {formatValue(current)}\n </span>\n {!matches && <span className=\"opacity-[0.45]\">→ {formatValue(recommended)}</span>}\n </div>\n {!isLast && <Divider />}\n </>\n );\n};\n\nexport const MergePolicySection = () => {\n const [result, setResult] = useState<MergePolicyResult | null | undefined>(undefined);\n const [applying, setApplying] = useState(false);\n const { toast } = useToast();\n\n useEffect(() => {\n fetchMergePolicy().then(setResult);\n }, []);\n\n const handleApply = async () => {\n setApplying(true);\n const applied = await applyMergePolicy();\n setApplying(false);\n if (applied?.status === 'ok') {\n setResult(applied);\n toast({ title: 'Merge policy applied', variant: 'success' });\n } else {\n toast({\n title: 'Failed to apply merge policy',\n description: applied?.status === 'unavailable' ? applied.reason : undefined,\n variant: 'error',\n });\n }\n };\n\n const upToDate = result?.status === 'ok' && matchesRecommended(result.policy);\n\n return (\n <div>\n <div className=\"mb-6\">\n <h2 className=\"m-0\">Merge Policy</h2>\n <p className=\"opacity-50 mt-1\">\n Paper Camp's canonical policy: squash-only merges, with the commit title and body taken\n from the PR.\n </p>\n </div>\n {result === undefined && <p>Loading…</p>}\n {result === null && <Alert variant=\"warning\">Failed to load merge policy.</Alert>}\n {result?.status === 'unavailable' && <Alert variant=\"warning\">{result.reason}</Alert>}\n {result?.status === 'ok' && (\n <>\n <div className=\"flex items-center gap-3 mb-3\">\n <span className=\"font-medium\">{result.repo}</span>\n <Stamp\n size=\"small\"\n fillColor={upToDate ? 'rgba(143, 185, 150, 0.25)' : 'rgba(212, 163, 115, 0.25)'}\n textColor={upToDate ? '#5E8A66' : '#A67B4F'}\n >\n {upToDate ? 'Matches recommended policy' : 'Differs from recommended policy'}\n </Stamp>\n </div>\n <Card size=\"small\" texture=\"kraft\">\n {POLICY_ROWS.map((row, idx) => (\n <PolicyRow\n key={row.key}\n label={row.label}\n current={result.policy[row.key]}\n recommended={RECOMMENDED[row.key]}\n isLast={idx === POLICY_ROWS.length - 1}\n />\n ))}\n </Card>\n <div className=\"mt-4\">\n <Button size=\"small\" onClick={handleApply} disabled={applying || upToDate}>\n {applying ? 'Applying…' : 'Apply recommended policy'}\n </Button>\n </div>\n </>\n )}\n </div>\n );\n};\n","import { connectService, fetchConfig, fetchConnections, saveConfig } from '@/app/services/system';\nimport { useAppStore } from '@/app/stores/app-store';\nimport type { CapabilityStatus, ConnectionResult } from '@/types/index';\nimport {\n Alert,\n Button,\n Card,\n CodeBlock,\n Divider,\n Stamp,\n Tooltip,\n useToast,\n} from '@dendelion/paper-ui';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nconst RELAY_POLL_MS = 2000;\n\n// Only claude-code exposes `auth login`/`auth status` (see agentAuthenticated in server/services.ts).\nconst RELAY_CONNECTION_ID: ConnectionResult['id'] = 'agent:claude-code';\n\n// Same two commands the relay drives interactively — shown as copy-paste fallback\n// when the relay itself can't run (no PTY, offline, unsupported CLI version).\nconst AUTH_FIX_COMMANDS = ['claude auth login', 'claude setup-token'] as const;\n\nconst RelayFallbackGuide = () => (\n <div className=\"mt-2 flex flex-col gap-2\">\n <p className=\"opacity-[0.65] text-sm m-0\">\n The in-app relay couldn't complete. Run one of these in a terminal instead:\n </p>\n {AUTH_FIX_COMMANDS.map((cmd) => (\n <CodeBlock key={cmd} code={cmd} />\n ))}\n <p className=\"opacity-50 text-sm m-0\">\n {/* paper-ui has no inline-code component, only the block-level CodeBlock */}\n Alternatively, set <code>ANTHROPIC_API_KEY</code> in the server's environment — that bills as\n API usage rather than your Max subscription, so treat it as a fallback, not the default.\n </p>\n </div>\n);\n\nconst SignInAction = ({ onSignedIn }: { onSignedIn: () => void }) => {\n const loginRelay = useAppStore((s) => s.loginRelay);\n const startLoginRelay = useAppStore((s) => s.startLoginRelay);\n const loadLoginRelayStatus = useAppStore((s) => s.loadLoginRelayStatus);\n const cancelLoginRelay = useAppStore((s) => s.cancelLoginRelay);\n const { toast } = useToast();\n const openedUrlRef = useRef<string | null>(null);\n const phase = loginRelay?.phase;\n\n useEffect(() => {\n if (phase !== 'starting' && phase !== 'awaiting-authorization') return;\n const id = window.setInterval(() => loadLoginRelayStatus(), RELAY_POLL_MS);\n return () => window.clearInterval(id);\n }, [phase, loadLoginRelayStatus]);\n\n useEffect(() => {\n const url = loginRelay?.authorizeUrl;\n if (phase !== 'awaiting-authorization' || !url || openedUrlRef.current === url) return;\n openedUrlRef.current = url;\n window.open(url, '_blank', 'noopener,noreferrer');\n }, [phase, loginRelay?.authorizeUrl]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: keyed on phase transitions only — toast/onSignedIn aren't stable across renders, and including them would refire on every relay poll\n useEffect(() => {\n if (phase === 'success') {\n toast({ title: 'Signed in', variant: 'success' });\n onSignedIn();\n } else if (phase === 'error') {\n toast({ title: 'Sign-in failed', description: loginRelay?.error, variant: 'error' });\n }\n }, [phase]);\n\n if (phase === 'starting') {\n return (\n <Button size=\"small\" disabled>\n Starting…\n </Button>\n );\n }\n if (phase === 'awaiting-authorization') {\n return (\n <div className=\"flex items-center gap-2\">\n <Button\n size=\"small\"\n onClick={() =>\n loginRelay?.authorizeUrl &&\n window.open(loginRelay.authorizeUrl, '_blank', 'noopener,noreferrer')\n }\n >\n Reopen sign-in tab\n </Button>\n <Button size=\"small\" onClick={() => cancelLoginRelay()}>\n Cancel\n </Button>\n </div>\n );\n }\n return (\n <div>\n <Button size=\"small\" onClick={() => startLoginRelay()}>\n Sign in\n </Button>\n {phase === 'error' && <RelayFallbackGuide />}\n </div>\n );\n};\n\nconst STATUS_STAMP: Record<CapabilityStatus, { fill: string; text: string; label: string }> = {\n ok: { fill: 'rgba(143, 185, 150, 0.25)', text: '#5E8A66', label: 'Ready' },\n warn: { fill: 'rgba(212, 163, 115, 0.25)', text: '#A67B4F', label: 'Needs attention' },\n missing: { fill: 'rgba(201, 139, 139, 0.25)', text: '#6E3A3A', label: 'Missing' },\n};\n\nconst ConnectActionView = ({\n connection,\n onConnect,\n connecting,\n}: {\n connection: ConnectionResult;\n onConnect: (id: string) => void;\n connecting: boolean;\n}) => {\n const { connect } = connection;\n if (!connect) return null;\n if (connect.kind === 'command' && connect.runnable) {\n return (\n <Button size=\"small\" onClick={() => onConnect(connection.id)} disabled={connecting}>\n {connecting ? 'Running…' : `Run \\`${connect.command}\\``}\n </Button>\n );\n }\n if (connect.kind === 'command') {\n return (\n <div className=\"mt-2\">\n <CodeBlock code={connect.command} />\n </div>\n );\n }\n if (connect.kind === 'link') {\n return (\n <Button\n size=\"small\"\n onClick={() => window.open(connect.url, '_blank', 'noopener,noreferrer')}\n >\n {connect.label}\n </Button>\n );\n }\n return <p className=\"opacity-[0.65] text-sm mt-2 mx-0 mb-0\">{connect.message}</p>;\n};\n\nconst ConnectionRow = ({\n connection,\n isLast,\n onRecheck,\n rechecking,\n onConnect,\n connecting,\n}: {\n connection: ConnectionResult;\n isLast: boolean;\n onRecheck: (id: string) => void;\n rechecking: boolean;\n onConnect: (id: string) => void;\n connecting: boolean;\n}) => {\n const stamp = STATUS_STAMP[connection.status];\n return (\n <>\n <div className=\"pb-3 pt-3\">\n <div className=\"flex items-center gap-3\">\n <span className=\"flex-1 font-medium\">{connection.label}</span>\n {connection.authenticated === false && (\n <Tooltip content=\"Installed, but not signed in\">\n <Stamp size=\"small\" variant=\"warning\">\n Not signed in\n </Stamp>\n </Tooltip>\n )}\n <Stamp size=\"small\" fillColor={stamp.fill} textColor={stamp.text}>\n {stamp.label}\n </Stamp>\n <Button size=\"small\" onClick={() => onRecheck(connection.id)} disabled={rechecking}>\n {rechecking ? 'Checking…' : 'Recheck'}\n </Button>\n </div>\n <p className=\"opacity-[0.65] text-sm mt-1 mx-0 mb-0\">Unlocks: {connection.unlocks}</p>\n <p className=\"opacity-50 text-sm mt-1 mx-0 mb-0\">{connection.detail}</p>\n <div className=\"mt-2\">\n {connection.id === RELAY_CONNECTION_ID && connection.authenticated === false ? (\n <SignInAction onSignedIn={() => onRecheck(connection.id)} />\n ) : (\n <ConnectActionView\n connection={connection}\n onConnect={onConnect}\n connecting={connecting}\n />\n )}\n </div>\n </div>\n {!isLast && <Divider />}\n </>\n );\n};\n\nexport const SetupSection = () => {\n const [connections, setConnections] = useState<ConnectionResult[] | null>(null);\n const [loadFailed, setLoadFailed] = useState(false);\n const [reloadingId, setReloadingId] = useState<string | null>(null);\n const [connectingId, setConnectingId] = useState<string | null>(null);\n const [setupDismissed, setSetupDismissed] = useState(false);\n const { toast } = useToast();\n\n const applyConnections = useCallback((result: ConnectionResult[] | null) => {\n if (result === null) {\n setLoadFailed(true);\n return;\n }\n setLoadFailed(false);\n setConnections(result);\n }, []);\n\n useEffect(() => {\n fetchConnections().then(applyConnections);\n fetchConfig().then((c) => setSetupDismissed(c?.setupDismissed ?? false));\n }, [applyConnections]);\n\n const handleRecheck = async (id: string) => {\n setReloadingId(id);\n applyConnections(await fetchConnections());\n setReloadingId(null);\n };\n\n const handleConnect = async (id: string) => {\n setConnectingId(id);\n const updated = await connectService(id);\n if (updated) {\n setConnections((prev) => prev?.map((c) => (c.id === id ? updated : c)) ?? prev);\n } else {\n toast({ title: 'Failed to connect', variant: 'error' });\n }\n setConnectingId(null);\n };\n\n const handleDismissToggle = async () => {\n const next = !setupDismissed;\n const { ok } = await saveConfig({ setupDismissed: next });\n if (ok) {\n setSetupDismissed(next);\n toast({ title: 'Saved', variant: 'success' });\n } else {\n toast({ title: 'Failed to save', variant: 'error' });\n }\n };\n\n const allOk = connections?.every((c) => c.status === 'ok') ?? true;\n\n return (\n <div>\n <div className=\"mb-6\">\n <h2 className=\"m-0\">Setup</h2>\n </div>\n {connections === null && !loadFailed && <p>Loading…</p>}\n {loadFailed && (\n <div className=\"mb-4\">\n <Alert variant=\"warning\">Failed to load connections. Try refreshing.</Alert>\n </div>\n )}\n {connections && (\n <>\n {!allOk && (\n <div className=\"mb-4\">\n <Alert variant=\"warning\">\n Some connections are incomplete — features that depend on them stay disabled until\n fixed. Run the connect command below, then recheck.\n </Alert>\n </div>\n )}\n <Card size=\"small\" texture=\"kraft\">\n {connections.map((c, idx) => (\n <ConnectionRow\n key={c.id}\n connection={c}\n isLast={idx === connections.length - 1}\n onRecheck={handleRecheck}\n rechecking={reloadingId === c.id}\n onConnect={handleConnect}\n connecting={connectingId === c.id}\n />\n ))}\n </Card>\n <div className=\"mt-4\">\n <Button size=\"small\" onClick={handleDismissToggle}>\n {setupDismissed ? 'Show Setup on open again' : \"Don't show Setup on open\"}\n </Button>\n </div>\n </>\n )}\n </div>\n );\n};\n","import { useSubjectVocabulary } from '@/app/hooks';\nimport { Button, Card, Divider } from '@dendelion/paper-ui';\nimport { useNavigate } from '@tanstack/react-router';\n\nexport const SubjectsSection = () => {\n const { subjects, loading, available } = useSubjectVocabulary();\n const navigate = useNavigate();\n\n return (\n <div>\n <div className=\"mb-6\">\n <h2 className=\"m-0\">Subjects</h2>\n <p className=\"opacity-50 mt-1\">\n Subjects are the roadmap's bets and standing concerns. Edit the vocabulary on the Roadmap\n page.\n </p>\n </div>\n {loading && <p>Loading…</p>}\n {!loading && !available && (\n <p className=\"opacity-60 m-0\">Couldn't load subjects — check the server config.</p>\n )}\n {!loading && available && (\n <Card size=\"small\" texture=\"kraft\">\n {subjects.length === 0 && <p className=\"opacity-[0.45] m-0 pb-2\">No subjects yet.</p>}\n {subjects.map((name, idx) => (\n <div key={name}>\n <div className=\"pb-2 pt-2\">{name}</div>\n {idx < subjects.length - 1 && <Divider />}\n </div>\n ))}\n {subjects.length > 0 && <Divider />}\n <div className=\"pt-3\">\n <Button size=\"small\" onClick={() => navigate({ to: '/roadmap' })}>\n Go to Roadmap\n </Button>\n </div>\n </Card>\n )}\n </div>\n );\n};\n","import { PageTitle } from '@/app/components/page-title';\nimport { useActiveSettingsSection, useProjectIdentity } from '@/app/hooks';\nimport { fetchConfig, saveConfig, uploadIcon } from '@/app/services/system';\nimport { color } 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 PaperCampConfig,\n} from '@/types/index';\nimport { Alert, Button, Card, Divider, Input, Select, Stamp, useToast } from '@dendelion/paper-ui';\nimport { useEffect, useRef, useState } from 'react';\nimport { MergePolicySection } from './components/merge-policy-section';\nimport { SetupSection } from './components/setup-section';\nimport { SubjectsSection } from './components/subjects-section';\n\nconst TASK_TYPE_KEYS = ['phase', 'planDraft', 'ideaExtend', 'commitSuggest', 'feedback'] 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 feedback: 'Scout chat',\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 className=\"flex items-center gap-3 pb-1\">\n <span className=\"w-[110px] shrink-0 text-sm opacity-[0.45]\">Task</span>\n <span className=\"w-[140px] shrink-0 text-sm opacity-[0.45]\">Agent</span>\n <span className=\"w-[160px] shrink-0 text-sm opacity-[0.45]\">Model</span>\n <span className=\"w-[110px] shrink-0 text-sm opacity-[0.45]\">Effort</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 — otherwise a claude\n // model like '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 className=\"flex items-center gap-3 pb-2 pt-2\">\n <span className=\"w-[110px] shrink-0 text-sm opacity-[0.65]\">\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 className=\"w-[160px]\"\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 className={Array.isArray(effortOpts) ? 'visible' : 'invisible'}>\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 feedback: current?.feedback ?? DEFAULT_AGENTS.feedback,\n [key]: newEntry,\n };\n const { ok, error } = 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', description: error, 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, error } = await saveConfig({ port });\n if (ok) {\n setConfig((prev) => (prev ? { ...prev, port } : prev));\n toast({\n title: 'Saved',\n description: 'Restart `paper-camp dev` to apply the new port.',\n variant: 'success',\n });\n } else {\n toast({ title: 'Failed to save', description: error, variant: 'error' });\n }\n };\n\n const handleToggleIntegration = async () => {\n if (!config) return;\n const next = !(config.integration?.toolbar?.enabled ?? true);\n const integration = {\n ...config.integration,\n toolbar: { ...config.integration?.toolbar, enabled: next },\n };\n const { ok, error } = await saveConfig({ integration });\n if (ok) {\n setConfig((prev) => (prev ? { ...prev, integration } : prev));\n toast({ title: 'Saved', variant: 'success' });\n } else {\n toast({ title: 'Failed to save', description: error, 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, error } = 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', description: error, 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 className=\"mb-6\">\n <h2 className=\"m-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\" texture=\"kraft\">\n <div className=\"flex items-end gap-3 pb-3\">\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 className=\"flex items-center gap-3 pb-3 pt-3\">\n {iconDataUri && (\n <img\n src={iconDataUri}\n alt=\"Project icon\"\n className=\"w-10 h-10 object-contain shrink-0 rounded\"\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 className=\"hidden\"\n />\n <Button size=\"small\" onClick={() => fileRef.current?.click()} disabled={uploading}>\n {uploading ? 'Uploading…' : 'Choose File'}\n </Button>\n {identityLoading && <p className=\"text-sm opacity-50 mt-1 mx-0 mb-0\">Loading…</p>}\n {!identityLoading && !iconDataUri && !uploading && (\n <p className=\"text-sm opacity-[0.45] mt-1 mx-0 mb-0\">No icon set.</p>\n )}\n </div>\n </div>\n <Divider />\n\n <div className=\"flex items-end gap-3 pb-3 pt-3\">\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`. Restart the server to apply a change.\"\n />\n </div>\n <Divider />\n\n <div className=\"flex items-center justify-between gap-3 pb-3 pt-3\">\n <div>\n <p className=\"m-0\">In-app dev toolbar</p>\n <p className=\"opacity-[0.45] text-sm mt-1 mx-0 mb-0\">\n Inject the paper-camp toolbar into this project's dev server via the Vite plugin.\n </p>\n </div>\n <Button size=\"small\" onClick={handleToggleIntegration}>\n {(config.integration?.toolbar?.enabled ?? true) ? 'Disable' : 'Enable'}\n </Button>\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 className=\"opacity-[0.45] text-sm mt-4\">\n <strong>Initialized:</strong>{' '}\n {config ? new Date(config.initializedAt).toLocaleString() : '—'}\n </p>\n </div>\n );\n};\n\nexport const SettingsPage = () => {\n const section = useActiveSettingsSection();\n return (\n <div>\n <PageTitle>Settings</PageTitle>\n {section === 'subjects' ? (\n <SubjectsSection />\n ) : section === 'setup' ? (\n <SetupSection />\n ) : section === 'merge-policy' ? (\n <MergePolicySection />\n ) : (\n <GeneralSection />\n )}\n </div>\n );\n};\n","import { useActiveSettingsSection } from '@/app/hooks';\nimport { ListItem } from '@dendelion/paper-ui';\nimport { useNavigate } from '@tanstack/react-router';\nimport { SidebarSection } from '../../plans/components/sidebar-section';\n\nexport const SettingsSidebar = () => {\n const section = useActiveSettingsSection();\n const navigate = useNavigate();\n\n return (\n <>\n <SidebarSection label=\"General\">\n <ListItem\n size=\"small\"\n active={section === null}\n onClick={() => navigate({ to: '/settings' })}\n >\n Project Info\n </ListItem>\n <ListItem\n size=\"small\"\n active={section === 'setup'}\n onClick={() => navigate({ to: '/settings/$section', params: { section: 'setup' } })}\n >\n Setup\n </ListItem>\n <ListItem\n size=\"small\"\n active={section === 'merge-policy'}\n onClick={() =>\n navigate({ to: '/settings/$section', params: { section: 'merge-policy' } })\n }\n >\n Merge Policy\n </ListItem>\n </SidebarSection>\n <SidebarSection label=\"Ideas\">\n <ListItem\n size=\"small\"\n active={section === 'subjects'}\n onClick={() => navigate({ to: '/settings/$section', params: { section: 'subjects' } })}\n >\n Subjects\n </ListItem>\n </SidebarSection>\n </>\n );\n};\n"],"names":["fetchMergePolicy","response","apiUrl","applyMergePolicy","RECOMMENDED","POLICY_ROWS","formatValue","value","matchesRecommended","policy","row","PolicyRow","label","current","recommended","isLast","matches","jsxs","Fragment","jsx","Divider","MergePolicySection","result","setResult","useState","applying","setApplying","toast","useToast","useEffect","handleApply","applied","upToDate","Alert","Stamp","Card","idx","Button","RELAY_POLL_MS","RELAY_CONNECTION_ID","AUTH_FIX_COMMANDS","RelayFallbackGuide","cmd","CodeBlock","SignInAction","onSignedIn","loginRelay","useAppStore","s","startLoginRelay","loadLoginRelayStatus","cancelLoginRelay","openedUrlRef","useRef","phase","id","url","STATUS_STAMP","ConnectActionView","connection","onConnect","connecting","connect","ConnectionRow","onRecheck","rechecking","stamp","Tooltip","SetupSection","connections","setConnections","loadFailed","setLoadFailed","reloadingId","setReloadingId","connectingId","setConnectingId","setupDismissed","setSetupDismissed","applyConnections","useCallback","fetchConnections","fetchConfig","c","handleRecheck","handleConnect","updated","connectService","prev","handleDismissToggle","next","ok","saveConfig","allOk","SubjectsSection","subjects","loading","available","useSubjectVocabulary","navigate","useNavigate","name","TASK_TYPE_KEYS","TASK_TYPE_LABELS","AGENT_COLUMN_WIDTH","MODEL_COLUMN_WIDTH","EFFORT_COLUMN_WIDTH","AgentTaskRowHeader","AgentTaskRow","taskKey","agentConfig","onSave","opts","AGENT_OPTIONS","modelOpts","effortOpts","localModel","setLocalModel","handleAgentChange","v","newId","newOpts","newConfig","_a","handleModelSelectChange","handleModelInputBlur","handleEffortChange","Select","AGENT_IDS","AGENT_LABELS","Input","e","GeneralSection","fileRef","config","setConfig","fetchedIconDataUri","identityLoading","useProjectIdentity","uploadedIconDataUri","setUploadedIconDataUri","iconDataUri","uploading","setUploading","portInput","setPortInput","nameInput","setNameInput","handleSaveAgentConfig","key","newEntry","DEFAULT_AGENTS","error","handleSavePort","port","handleToggleIntegration","_b","integration","_c","handleSaveName","projectName","handleFile","file","reader","dataUri","uploadIcon","color","SettingsPage","section","useActiveSettingsSection","PageTitle","SettingsSidebar","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}.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}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-16{margin-bottom:4rem}.ml-2{margin-left:.5rem}.mt-8{margin-top:2rem}.inline-block{display:inline-block}.list-item{display:list-item}.h-14{height:3.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-14{width:3.5rem}.w-16{width:4rem}.w-3{width:.75rem}.w-32{width:8rem}.w-72{width:18rem}.w-96{width:24rem}.w-\[600px\]{width:600px}.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}.-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))}.gap-10{gap:2.5rem}.gap-12{gap:3rem}.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}.rounded-2xl{border-radius:1rem}.rounded-lg{border-radius:.5rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.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-5{padding:1.25rem}.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-4{padding-top:1rem;padding-bottom:1rem}.pb-24{padding-bottom:6rem}.pb-40{padding-bottom:10rem}.pr-5{padding-right:1.25rem}.text-right{text-align:right}.font-display{font-family:Luminari,Cormorant Garamond,Georgia,serif}.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-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.capitalize{text-transform:capitalize}.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:var(--pui-btn-primary, #F0EAD8)}.button-module__primary___ppbyq:hover:not(:disabled) .button-module__blobFill___XwLjV{fill:var(--pui-btn-primary-hover, #E8DEC8)}.button-module__primary___ppbyq:active:not(:disabled) .button-module__blobFill___XwLjV{fill:var(--pui-btn-primary-active, #DDD2B8)}.button-module__isActive___FXNSJ.button-module__primary___ppbyq .button-module__blobFill___XwLjV{fill:var(--pui-btn-primary-hover, #E8DEC8)}.button-module__isActive___FXNSJ.button-module__primary___ppbyq:hover .button-module__blobFill___XwLjV{fill:var(--pui-btn-primary-active, #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:10.7598636039px 14.8447766636px 14.1620571738px 9.5924137517px;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__flat___HlOaY .page-module__surface___sWfI6{border-radius:12px}.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:52px;box-sizing:border-box;vertical-align:middle;line-height:32px;background-color:var(--pui-texture-shade, #F5F1E6);background-image:var(--pui-texture-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;position:relative}.table-module__th___GQbKk:after{content:"";position:absolute;left:0;right:0;bottom:-1.5px;height:3px;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='64' height='3' preserveAspectRatio='none' viewBox='0 0 64 3'%3E%3Cpath d='M0 1.6 C 8 0.7 14 2.3 22 1.5 C 30 0.8 38 2.2 46 1.5 C 54 0.9 60 2.1 64 1.5' fill='none' stroke='%233d352b' stroke-opacity='0.3' stroke-width='1' stroke-linecap='round'/%3E%3C/svg%3E") repeat-x left center;background-size:64px 3px;pointer-events:none}.table-module__td___WktB5{font-family:var(--paper-font-default, "Luminari", "Cormorant Garamond", Georgia, serif);color:#68635c;padding:0 2rem;height:52px;box-sizing:border-box;vertical-align:middle;line-height:32px;position:relative}.table-module__td___WktB5:after{content:"";position:absolute;left:0;right:0;bottom:-1.5px;height:3px;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='64' height='3' preserveAspectRatio='none' viewBox='0 0 64 3'%3E%3Cpath d='M0 1.6 C 8 0.7 14 2.3 22 1.5 C 30 0.8 38 2.2 46 1.5 C 54 0.9 60 2.1 64 1.5' fill='none' stroke='%233d352b' stroke-opacity='0.3' stroke-width='1' stroke-linecap='round'/%3E%3C/svg%3E") repeat-x left center;background-size:64px 3px;pointer-events:none}.table-module__tr___xeZno:last-child .table-module__td___WktB5:after{display: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:9.5586549026px 12.1178869371px 13.5950763649px 9.5737208337px;--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:10.8668632362px 13.5031343197px 14.0075485823px 11.3667973191px;clip-path:var(--sketch-clip)}.card-module__textureLayer___Kcofz>*+*{margin-top:2rem}.card-module__flat___KnG5z,.card-module__flat___KnG5z .card-module__textureLayer___Kcofz{border-radius:12px}.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.3484973351px 8.7349986709px 8.641200783px 7.2566744661px;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.8868799551px 8.5137532835px 8.7668669877px 7.5142692276px;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:18.8268658997px 21.8355931564px 22.6424848528px 18.6218914341px;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.2103682815px 8.6863985472px 8.808178037px 7.5742212215px;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.7157969777px 6.183935817px 6.0661642643px 5.7674269056px}.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.2545824173px 8.6595202127px 8.3629512633px 6.5601968304px}.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.2831610015px 11.4336457944px 11.4245317475px 10.9099233368px}.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.6125938006px 10.4802581224px 9.7883197161px 6.8101036151px;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.1277401835px 8.5844594826px 8.1518030305px 7.4524034787px;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:6.5401037401px 8.5216913872px 9.6252662969px 7.9132114804px}.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:10.9511173032px 12.3142193947px 13.8491466203px 9.9637500346px;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.2497073318px 8.8469110851px 8.6064130463px 7.566726793px;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}.absolute{position:absolute}.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}.right-0{right:0}.top-4{top:1rem}.top-\[var\(--pc-stack-toggle-top\,50\%\)\]{top:var(--pc-stack-toggle-top,50%)}.z-\[290\]{z-index:290}.z-\[300\]{z-index:300}.m-0{margin:0}.mx-0{margin-left:0;margin-right:0}.mx-auto{margin-left:auto;margin-right:auto}.-ml-8{margin-left:-2rem}.-mr-8{margin-right:-2rem}.-mt-5{margin-top:-1.25rem}.-mt-8{margin-top:-2rem}.mb-0{margin-bottom:0}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mb-\[0\.2rem\]{margin-bottom:.2rem}.mb-\[0\.35rem\]{margin-bottom:.35rem}.mb-\[0\.4rem\]{margin-bottom:.4rem}.ml-0{margin-left:0}.ml-5{margin-left:1.25rem}.mr-0{margin-right:0}.mr-2{margin-right:.5rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.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-1\.5{height:.375rem}.h-10{height:2.5rem}.h-2{height:.5rem}.h-20{height:5rem}.h-7{height:1.75rem}.h-\[18px\]{height:18px}.h-\[20px\]{height:20px}.h-\[28px\]{height:28px}.h-\[64px\]{height:64px}.h-\[9px\]{height:9px}.h-\[var\(--pc-sidebar-h\,100\%\)\]{height:var(--pc-sidebar-h,100%)}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[320px\]{max-height:320px}.max-h-page{max-height:calc(100vh - 64px)}.min-h-0{min-height:0px}.min-h-11{min-height:2.75rem}.min-h-\[calc\(100vh-160px\)\]{min-height:calc(100vh - 160px)}.min-h-page{min-height:calc(100vh - 64px)}.w-10{width:2.5rem}.w-2{width:.5rem}.w-20{width:5rem}.w-24{width:6rem}.w-7{width:1.75rem}.w-\[110px\]{width:110px}.w-\[140px\]{width:140px}.w-\[160px\]{width:160px}.w-\[18px\]{width:18px}.w-\[20px\]{width:20px}.w-\[224px\]{width:224px}.w-\[288px\]{width:288px}.w-\[28px\]{width:28px}.w-\[9px\]{width:9px}.w-\[min\(480px\,100vw\)\]{width:min(480px,100vw)}.w-full{width:100%}.min-w-0{min-width:0px}.max-w-\[360px\]{max-width:360px}.max-w-\[85\%\]{max-width:85%}.max-w-none{max-width:none}.flex-1{flex:1 1 0%}.flex-\[0_0_36px\]{flex:0 0 36px}.flex-\[0_1_800px\]{flex:0 1 800px}.flex-\[1_1_0\%\]{flex:1 1 0%}.flex-\[1_1_260px\]{flex:1 1 260px}.flex-auto{flex:1 1 auto}.flex-none{flex:none}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.basis-\[9\.25rem\]{flex-basis:9.25rem}.-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))}.rotate-90{--tw-rotate: 90deg;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))}@keyframes pc-spin{to{transform:rotate(360deg)}}.animate-pc-spin{animation:pc-spin .8s linear infinite}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.scroll-mt-4{scroll-margin-top:1rem}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-\[20px_116px_minmax\(0\,1fr\)_88px_150px_72px\]{grid-template-columns:20px 116px minmax(0,1fr) 88px 150px 72px}.grid-cols-\[76px_minmax\(0\,1fr\)_84px_1fr\]{grid-template-columns:76px minmax(0,1fr) 84px 1fr}.grid-cols-\[76px_minmax\(0\,1fr\)_84px_96px_112px\]{grid-template-columns:76px minmax(0,1fr) 84px 96px 112px}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.self-start{align-self:flex-start}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.rounded{border-radius:.25rem}.rounded-\[10px\]{border-radius:10px}.rounded-\[3px\]{border-radius:3px}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-l-4{border-left-width:4px}.border-l-\[3px\]{border-left-width:3px}.border-solid{border-style:solid}.border-none{border-style:none}.border-black\/10{border-color:#0000001a}.border-black\/\[15\%\]{border-color:#00000026}.border-black\/\[8\%\]{border-color:#00000014}.border-desk-border{border-color:#c8d2c326}.border-paper-950\/\[12\%\]{border-color:#3d352b1f}.bg-\[rgba\(155\,122\,181\,0\.08\)\]{background-color:#9b7ab514}.bg-\[var\(--pui-bg-base\)\]{background-color:var(--pui-bg-base)}.bg-black\/\[0\.08\]{background-color:#00000014}.bg-black\/\[4\%\]{background-color:#0000000a}.bg-black\/\[6\%\]{background-color:#0000000f}.bg-chalk-fail-text{--tw-bg-opacity: 1;background-color:rgb(214 160 160 / var(--tw-bg-opacity, 1))}.bg-desk-bg{--tw-bg-opacity: 1;background-color:rgb(30 58 45 / var(--tw-bg-opacity, 1))}.bg-ink-900\/\[40\%\]{background-color:#1a191766}.bg-transparent{background-color:transparent}.bg-watercolor-green{--tw-bg-opacity: 1;background-color:rgb(143 185 150 / var(--tw-bg-opacity, 1))}.bg-watercolor-green\/\[18\%\]{background-color:#8fb9962e}.bg-watercolor-green\/\[30\%\]{background-color:#8fb9964d}.bg-watercolor-rose-dark{--tw-bg-opacity: 1;background-color:rgb(158 94 94 / var(--tw-bg-opacity, 1))}.bg-watercolor-rose\/\[18\%\]{background-color:#c98b8b2e}.bg-watercolor-rose\/\[30\%\]{background-color:#c98b8b4d}.bg-chalkboard{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"),linear-gradient(135deg,#264a3a,#1e3a2d 60%)}.bg-none{background-image:none}.object-contain{-o-object-fit:contain;object-fit:contain}.p-0{padding:0}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.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}.px-\[0\.35em\]{padding-left:.35em;padding-right:.35em}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-\[0\.1em\]{padding-top:.1em;padding-bottom:.1em}.pb-0{padding-bottom:0}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-\[var\(--pc-content-pad-bottom\,32px\)\]{padding-bottom:var(--pc-content-pad-bottom,32px)}.pl-1{padding-left:.25rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pl-6{padding-left:1.5rem}.pl-8{padding-left:2rem}.pl-\[1\.4rem\]{padding-left:1.4rem}.pr-1{padding-right:.25rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-5{padding-top:1.25rem}.text-left{text-align:left}.text-center{text-align:center}.font-display-luminari{font-family:Luminari,Cormorant Garamond,Georgia,serif}.font-handwritten{font-family:Caveat,cursive}.font-mono{font-family:JetBrains Mono,Fira Code,monospace}.text-2xs{font-size:.75rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[0\.85em\]{font-size:.85em}.text-\[0\.95rem\]{font-size:.95rem}.text-\[1\.1rem\]{font-size:1.1rem}.text-\[1\.3rem\]{font-size:1.3rem}.text-\[1\.75rem\]{font-size:1.75rem}.text-\[17px\]{font-size:17px}.text-base{font-size:1.125rem}.text-lg{font-size:1.5rem}.text-md{font-size:1.25rem}.text-sm{font-size:1rem}.text-xs{font-size:.875rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-4{line-height:1rem}.leading-\[1\.1\]{line-height:1.1}.leading-\[1\.2\]{line-height:1.2}.leading-\[1\.7\]{line-height:1.7}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-\[0\.08em\]{letter-spacing:.08em}.text-\[\#7B5E9E\]{--tw-text-opacity: 1;color:rgb(123 94 158 / var(--tw-text-opacity, 1))}.text-chalk-pass-text{--tw-text-opacity: 1;color:rgb(181 214 181 / var(--tw-text-opacity, 1))}.text-desk-chalk{--tw-text-opacity: 1;color:rgb(212 232 203 / var(--tw-text-opacity, 1))}.text-desk-text{--tw-text-opacity: 1;color:rgb(232 228 217 / var(--tw-text-opacity, 1))}.text-desk-text-muted{--tw-text-opacity: 1;color:rgb(168 181 160 / var(--tw-text-opacity, 1))}.text-inherit{color:inherit}.text-ink-300{--tw-text-opacity: 1;color:rgb(168 163 153 / var(--tw-text-opacity, 1))}.text-ink-500{--tw-text-opacity: 1;color:rgb(104 99 92 / var(--tw-text-opacity, 1))}.text-ink-900{--tw-text-opacity: 1;color:rgb(26 25 23 / var(--tw-text-opacity, 1))}.text-state-danger{--tw-text-opacity: 1;color:rgb(160 96 96 / var(--tw-text-opacity, 1))}.text-state-success{--tw-text-opacity: 1;color:rgb(106 155 114 / var(--tw-text-opacity, 1))}.text-watercolor-amber-dark{--tw-text-opacity: 1;color:rgb(166 123 79 / var(--tw-text-opacity, 1))}.text-watercolor-green-dark{--tw-text-opacity: 1;color:rgb(94 138 102 / var(--tw-text-opacity, 1))}.text-watercolor-rose-dark{--tw-text-opacity: 1;color:rgb(158 94 94 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.opacity-100{opacity:1}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-\[0\.35\]{opacity:.35}.opacity-\[0\.45\]{opacity:.45}.opacity-\[0\.4\]{opacity:.4}.opacity-\[0\.55\]{opacity:.55}.opacity-\[0\.65\]{opacity:.65}.opacity-\[0\.75\]{opacity:.75}.opacity-\[0\.85\]{opacity:.85}.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)}.shadow-\[-2px_0_8px_rgba\(0\,0\,0\,0\.15\)\]{--tw-shadow: -2px 0 8px rgba(0,0,0,.15);--tw-shadow-colored: -2px 0 8px 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-\[0_0_6px_rgba\(214\,160\,160\,0\.9\)\]{--tw-shadow: 0 0 6px rgba(214,160,160,.9);--tw-shadow-colored: 0 0 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-\[2px_0_12px_rgba\(0\,0\,0\,0\.15\)\]{--tw-shadow: 2px 0 12px rgba(0,0,0,.15);--tw-shadow-colored: 2px 0 12px 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-\[inset_0_0_0_1px_rgba\(214\,160\,160\,0\.6\)\]{--tw-shadow: inset 0 0 0 1px rgba(214,160,160,.6);--tw-shadow-colored: inset 0 0 0 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-\[inset_0_0_0_1px_rgba\(214\,196\,160\,0\.6\)\]{--tw-shadow: inset 0 0 0 1px rgba(214,196,160,.6);--tw-shadow-colored: inset 0 0 0 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}.outline-2{outline-width:2px}.outline-offset-\[-2px\]{outline-offset:-2px}.outline-\[rgba\(200\,154\,90\,0\.5\)\]{outline-color:#c89a5a80}.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)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.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-150{transition-duration:.15s}.duration-300{transition-duration:.3s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[background-repeat\:repeat\,no-repeat\]{background-repeat:repeat,no-repeat}.\[background-size\:200px_200px\,auto\]{background-size:200px 200px,auto}.\[cursor\:inherit\]{cursor:inherit}.\[font\:inherit\]{font:inherit}.\[phase\:1\]{phase:1}:root{--paper-font-default: "Cormorant Garamond", Georgia, serif;--pui-btn-primary: rgba(143, 185, 150, .25);--pui-btn-primary-hover: rgba(143, 185, 150, .3);--pui-btn-primary-active: rgba(143, 185, 150, .3)}header>div[class*=headerActions]{flex:1;min-width:0}header[class*=layout-module__header___]{height:64px}header[class*=layout-module__header___]{background-color:transparent;background-image:none;border-bottom:none;box-shadow:none}.plan-row-card [class*=textureLayer]{padding:.375rem .875rem}.stack-task-card [class*=textureLayer]{padding:.5rem .875rem}@media (max-width: 480px){.phase-table-phone [class*=tableScroll]{overflow-x:visible}.phase-table-phone table,.phase-table-phone thead,.phase-table-phone tbody,.phase-table-phone tr,.phase-table-phone th,.phase-table-phone td{display:block;width:auto}.phase-table-phone thead{display:none}.phase-table-phone tr{padding:.5rem 0;border-bottom:1px solid rgba(0,0,0,.08)}.phase-table-phone tr:last-child{border-bottom:none}.phase-table-phone td{height:auto;padding:.125rem 1rem;border-bottom:none}}.phase-running-row{background-image:linear-gradient(to right,var(--pui-btn-primary) 0,var(--pui-btn-primary) var(--phase-fill, 0%),transparent var(--phase-fill, 0%))}@media (max-width: 480px){button[class*=iconButton][class*=small],label[class*=wrapper] [class*=boxWrapper]{width:44px;height:44px}}@media (max-width: 480px){.plan-row-card [class*=textureLayer]{padding-top:.75rem;padding-bottom:.75rem}}:root{--pc-content-pad-bottom: 32px}@media (max-width: 480px){:root{--pc-content-pad-bottom: 96px}}:root{--pc-stack-toggle-top: 50%}@media (max-width: 480px){:root{--pc-stack-toggle-top: 70%}}.last\:border-b-0:last-child{border-bottom-width:0px}.hover\:underline:hover{text-decoration-line:underline}.enabled\:hover\:-translate-y-px:hover:enabled{--tw-translate-y: -1px;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))}.enabled\:hover\:brightness-\[1\.15\]:hover:enabled{--tw-brightness: brightness(1.15);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)}.enabled\:active\:translate-y-0:active:enabled{--tw-translate-y: 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))}.enabled\:active\:brightness-\[0\.95\]:active:enabled{--tw-brightness: brightness(.95);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)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group[aria-expanded=true] .group-aria-expanded\:rotate-90{--tw-rotate: 90deg;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))}@media (prefers-reduced-motion: reduce){.motion-reduce\:animate-none{animation:none}}@media not all and (min-width: 1024px){.max-lg\:hidden{display:none}.max-lg\:grid-cols-\[20px_116px_minmax\(0\,1fr\)_88px_72px\]{grid-template-columns:20px 116px minmax(0,1fr) 88px 72px}.max-lg\:grid-cols-\[76px_minmax\(0\,1fr\)_96px_112px\]{grid-template-columns:76px minmax(0,1fr) 96px 112px}}@media (max-width: 480px){.max-\[480px\]\:fixed{position:fixed}.max-\[480px\]\:bottom-0{bottom:0}.max-\[480px\]\:left-0{left:0}.max-\[480px\]\:right-0{right:0}.max-\[480px\]\:z-\[250\]{z-index:250}.max-\[480px\]\:flex{display:flex}.max-\[480px\]\:hidden{display:none}.max-\[480px\]\:max-w-none{max-width:none}.max-\[480px\]\:flex-\[1_1_100\%\]{flex:1 1 100%}.max-\[480px\]\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-\[480px\]\:items-stretch{align-items:stretch}.max-\[480px\]\:justify-around{justify-content:space-around}.max-\[480px\]\:gap-1{gap:.25rem}.max-\[480px\]\:border-t{border-top-width:1px}.max-\[480px\]\:border-black\/10{border-color:#0000001a}.max-\[480px\]\:bg-\[var\(--pui-bg-base\,\#fff\)\]{background-color:var(--pui-bg-base,#fff)}.max-\[480px\]\:px-2{padding-left:.5rem;padding-right:.5rem}.max-\[480px\]\:py-2{padding-top:.5rem;padding-bottom:.5rem}.max-\[480px\]\:shadow-\[0_-2px_8px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow: 0 -2px 8px rgba(0,0,0,.08);--tw-shadow-colored: 0 -2px 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.max-\[480px\]\:\[padding-bottom\:calc\(0\.5rem\+env\(safe-area-inset-bottom\)\)\]{padding-bottom:calc(.5rem + env(safe-area-inset-bottom))}}@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-160px\)\]{--pc-sidebar-h: calc(100vh - 160px) }}@media (min-width: 1440px){.min-\[1440px\]\:pr-\[480px\]{padding-right:480px}}
|