stashes 0.1.34 → 0.1.36

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/cli.js CHANGED
@@ -851,8 +851,14 @@ ${truncatedDiff}`;
851
851
  }
852
852
  function buildScreenshotPrompt(port, diff, screenshotDir, stashId) {
853
853
  return [
854
- "You are a screenshot assistant. A developer made UI changes to a web app.",
855
- "Your job: navigate the running app, find the pages affected by the changes, and take screenshots.",
854
+ "You are a screenshot assistant. Your ONLY job is to take screenshots of a running web app using Playwright MCP tools.",
855
+ "",
856
+ "IMPORTANT RULES:",
857
+ "- ONLY use these Playwright MCP tools: mcp__playwright__browser_navigate, mcp__playwright__browser_take_screenshot, mcp__playwright__browser_click, mcp__playwright__browser_snapshot",
858
+ "- Do NOT use any other tools (no Bash, Read, Grep, Agent, ToolSearch, etc.)",
859
+ "- Do NOT start any sessions or call useai tools",
860
+ "- Do NOT read or analyze code files \u2014 the diff below tells you everything",
861
+ "- Be fast \u2014 you have a strict time limit",
856
862
  "",
857
863
  `## The app is running at: http://localhost:${port}`,
858
864
  "",
@@ -861,22 +867,18 @@ function buildScreenshotPrompt(port, diff, screenshotDir, stashId) {
861
867
  diff,
862
868
  "```",
863
869
  "",
864
- "## Instructions:",
865
- "1. Analyze the diff to identify which components/pages changed",
866
- "2. Determine the URL routes where these changes are visible",
867
- "3. For each route:",
868
- " - Navigate to it using browser_navigate",
869
- " - If the change is behind an interaction (tab, modal, accordion), perform that interaction",
870
- " - Wait for the page to settle",
871
- " - Take a screenshot using browser_take_screenshot",
872
- "4. Decide which screenshot shows the MOST visually significant change \u2014 mark it as primary",
870
+ "## Steps:",
871
+ `1. Call mcp__playwright__browser_navigate with url "http://localhost:${port}" to open the app`,
872
+ "2. From the diff, determine which page/route shows the changed components",
873
+ "3. If the change is on a different route, navigate to it",
874
+ "4. If the change is behind an interaction (tab click, modal open), perform it with mcp__playwright__browser_click",
875
+ `5. Call mcp__playwright__browser_take_screenshot to capture the page`,
876
+ "6. Respond with the JSON below",
873
877
  "",
874
- `## Screenshot save paths:`,
875
- `- Primary: ${join6(screenshotDir, `${stashId}.png`)}`,
876
- `- Additional: ${join6(screenshotDir, `${stashId}-1.png`)}, ${join6(screenshotDir, `${stashId}-2.png`)}, etc.`,
878
+ `## Screenshot save directory: ${screenshotDir}`,
879
+ `Use filename "${stashId}.png" for the primary screenshot.`,
877
880
  "",
878
- "## Output format (after all screenshots are taken):",
879
- "Respond with ONLY this JSON (no markdown fences):",
881
+ "## After taking screenshots, respond with ONLY this JSON:",
880
882
  "{",
881
883
  ' "screenshots": [',
882
884
  " {",
@@ -1113,9 +1115,9 @@ async function generate(opts) {
1113
1115
  await wtGit.commit(`stashes: stash ${stashId}`);
1114
1116
  } catch {}
1115
1117
  await worktreeManager.removeGeneration(stashId);
1116
- const readyStash = { ...stash, status: "ready" };
1117
- completedStashes.push(readyStash);
1118
- persistence.saveStash(readyStash);
1118
+ const generatedStash = { ...stash, status: "screenshotting" };
1119
+ completedStashes.push(generatedStash);
1120
+ persistence.saveStash(generatedStash);
1119
1121
  } catch (error) {
1120
1122
  const errorMsg = error instanceof Error ? error.message : "Unknown error";
1121
1123
  persistence.saveStash({ ...stash, status: "error", error: errorMsg });
@@ -1155,7 +1157,7 @@ async function generate(opts) {
1155
1157
  model: opts.screenshotModel,
1156
1158
  timeout: opts.screenshotTimeout
1157
1159
  });
1158
- const updatedStash = { ...stash, screenshotUrl: primary, screenshots };
1160
+ const updatedStash = { ...stash, status: "ready", screenshotUrl: primary, screenshots };
1159
1161
  persistence.saveStash(updatedStash);
1160
1162
  const idx = completedStashes.indexOf(stash);
1161
1163
  completedStashes[idx] = updatedStash;
@@ -1168,6 +1170,7 @@ async function generate(opts) {
1168
1170
  logger.error("generation", `screenshot failed for ${stash.id}`, {
1169
1171
  error: err instanceof Error ? err.message : String(err)
1170
1172
  });
1173
+ persistence.saveStash({ ...stash, status: "ready" });
1171
1174
  emit(onProgress, { type: "ready", stashId: stash.id, screenshotPath: "" });
1172
1175
  }
1173
1176
  }
@@ -1259,6 +1262,7 @@ async function vary(opts) {
1259
1262
  await wtGit.commit(`stashes: vary ${stashId} from ${sourceStashId}`);
1260
1263
  } catch {}
1261
1264
  await worktreeManager.removeGeneration(stashId);
1265
+ persistence.saveStash({ ...stash, status: "screenshotting" });
1262
1266
  emit2(onProgress, { type: "screenshotting", stashId });
1263
1267
  let screenshotPath = "";
1264
1268
  let screenshots = [];
package/dist/mcp.js CHANGED
@@ -733,8 +733,14 @@ ${truncatedDiff}`;
733
733
  }
734
734
  function buildScreenshotPrompt(port, diff, screenshotDir, stashId) {
735
735
  return [
736
- "You are a screenshot assistant. A developer made UI changes to a web app.",
737
- "Your job: navigate the running app, find the pages affected by the changes, and take screenshots.",
736
+ "You are a screenshot assistant. Your ONLY job is to take screenshots of a running web app using Playwright MCP tools.",
737
+ "",
738
+ "IMPORTANT RULES:",
739
+ "- ONLY use these Playwright MCP tools: mcp__playwright__browser_navigate, mcp__playwright__browser_take_screenshot, mcp__playwright__browser_click, mcp__playwright__browser_snapshot",
740
+ "- Do NOT use any other tools (no Bash, Read, Grep, Agent, ToolSearch, etc.)",
741
+ "- Do NOT start any sessions or call useai tools",
742
+ "- Do NOT read or analyze code files \u2014 the diff below tells you everything",
743
+ "- Be fast \u2014 you have a strict time limit",
738
744
  "",
739
745
  `## The app is running at: http://localhost:${port}`,
740
746
  "",
@@ -743,22 +749,18 @@ function buildScreenshotPrompt(port, diff, screenshotDir, stashId) {
743
749
  diff,
744
750
  "```",
745
751
  "",
746
- "## Instructions:",
747
- "1. Analyze the diff to identify which components/pages changed",
748
- "2. Determine the URL routes where these changes are visible",
749
- "3. For each route:",
750
- " - Navigate to it using browser_navigate",
751
- " - If the change is behind an interaction (tab, modal, accordion), perform that interaction",
752
- " - Wait for the page to settle",
753
- " - Take a screenshot using browser_take_screenshot",
754
- "4. Decide which screenshot shows the MOST visually significant change \u2014 mark it as primary",
752
+ "## Steps:",
753
+ `1. Call mcp__playwright__browser_navigate with url "http://localhost:${port}" to open the app`,
754
+ "2. From the diff, determine which page/route shows the changed components",
755
+ "3. If the change is on a different route, navigate to it",
756
+ "4. If the change is behind an interaction (tab click, modal open), perform it with mcp__playwright__browser_click",
757
+ `5. Call mcp__playwright__browser_take_screenshot to capture the page`,
758
+ "6. Respond with the JSON below",
755
759
  "",
756
- `## Screenshot save paths:`,
757
- `- Primary: ${join5(screenshotDir, `${stashId}.png`)}`,
758
- `- Additional: ${join5(screenshotDir, `${stashId}-1.png`)}, ${join5(screenshotDir, `${stashId}-2.png`)}, etc.`,
760
+ `## Screenshot save directory: ${screenshotDir}`,
761
+ `Use filename "${stashId}.png" for the primary screenshot.`,
759
762
  "",
760
- "## Output format (after all screenshots are taken):",
761
- "Respond with ONLY this JSON (no markdown fences):",
763
+ "## After taking screenshots, respond with ONLY this JSON:",
762
764
  "{",
763
765
  ' "screenshots": [',
764
766
  " {",
@@ -995,9 +997,9 @@ async function generate(opts) {
995
997
  await wtGit.commit(`stashes: stash ${stashId}`);
996
998
  } catch {}
997
999
  await worktreeManager.removeGeneration(stashId);
998
- const readyStash = { ...stash, status: "ready" };
999
- completedStashes.push(readyStash);
1000
- persistence.saveStash(readyStash);
1000
+ const generatedStash = { ...stash, status: "screenshotting" };
1001
+ completedStashes.push(generatedStash);
1002
+ persistence.saveStash(generatedStash);
1001
1003
  } catch (error) {
1002
1004
  const errorMsg = error instanceof Error ? error.message : "Unknown error";
1003
1005
  persistence.saveStash({ ...stash, status: "error", error: errorMsg });
@@ -1037,7 +1039,7 @@ async function generate(opts) {
1037
1039
  model: opts.screenshotModel,
1038
1040
  timeout: opts.screenshotTimeout
1039
1041
  });
1040
- const updatedStash = { ...stash, screenshotUrl: primary, screenshots };
1042
+ const updatedStash = { ...stash, status: "ready", screenshotUrl: primary, screenshots };
1041
1043
  persistence.saveStash(updatedStash);
1042
1044
  const idx = completedStashes.indexOf(stash);
1043
1045
  completedStashes[idx] = updatedStash;
@@ -1050,6 +1052,7 @@ async function generate(opts) {
1050
1052
  logger.error("generation", `screenshot failed for ${stash.id}`, {
1051
1053
  error: err instanceof Error ? err.message : String(err)
1052
1054
  });
1055
+ persistence.saveStash({ ...stash, status: "ready" });
1053
1056
  emit(onProgress, { type: "ready", stashId: stash.id, screenshotPath: "" });
1054
1057
  }
1055
1058
  }
@@ -1141,6 +1144,7 @@ async function vary(opts) {
1141
1144
  await wtGit.commit(`stashes: vary ${stashId} from ${sourceStashId}`);
1142
1145
  } catch {}
1143
1146
  await worktreeManager.removeGeneration(stashId);
1147
+ persistence.saveStash({ ...stash, status: "screenshotting" });
1144
1148
  emit2(onProgress, { type: "screenshotting", stashId });
1145
1149
  let screenshotPath = "";
1146
1150
  let screenshots = [];
@@ -0,0 +1 @@
1
+ /*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-100:oklch(93.6% .032 17.717);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-700:oklch(55.5% .163 48.998);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-purple-400:oklch(71.4% .203 305.504);--color-neutral-900:oklch(20.5% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--aspect-video:16 / 9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}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;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.collapse{visibility:collapse}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.top-1\/2{top:50%}.top-2\.5{top:calc(var(--spacing) * 2.5)}.-right-1{right:calc(var(--spacing) * -1)}.right-0{right:calc(var(--spacing) * 0)}.right-2\.5{right:calc(var(--spacing) * 2.5)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-2\.5{bottom:calc(var(--spacing) * 2.5)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-full{bottom:100%}.-left-1{left:calc(var(--spacing) * -1)}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.left-2\.5{left:calc(var(--spacing) * 2.5)}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing) * 1)}.my-1\.5{margin-block:calc(var(--spacing) * 1.5)}.my-2{margin-block:calc(var(--spacing) * 2)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-10{margin-bottom:calc(var(--spacing) * 10)}.-ml-1{margin-left:calc(var(--spacing) * -1)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-7{margin-left:calc(var(--spacing) * 7)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.flex{display:flex}.grid{display:grid}.inline-flex{display:inline-flex}.aspect-video{aspect-ratio:var(--aspect-video)}.h-1{height:calc(var(--spacing) * 1)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-full{height:100%}.h-screen{height:100vh}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-screen{min-height:100vh}.w-1{width:calc(var(--spacing) * 1)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-16{width:calc(var(--spacing) * 16)}.w-32{width:calc(var(--spacing) * 32)}.w-full{width:100%}.w-px{width:1px}.w-screen{width:100vw}.max-w-5xl{max-width:var(--container-5xl)}.max-w-\[280px\]{max-width:280px}.max-w-\[680px\]{max-width:680px}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[130px\]{min-width:130px}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-0\.5{--tw-translate-y:calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-1{--tw-translate-y:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.animate-bounce{animation:var(--animate-bounce)}.animate-pulse{animation:var(--animate-pulse)}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-\[var\(--stashes-border\)\]{border-color:var(--stashes-border)}.border-\[var\(--stashes-primary\)\]{border-color:var(--stashes-primary)}.border-red-900\/40{border-color:#82181a66}@supports (color:color-mix(in lab,red,red)){.border-red-900\/40{border-color:color-mix(in oklab,var(--color-red-900) 40%,transparent)}}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.border-white\/60{border-color:#fff9}@supports (color:color-mix(in lab,red,red)){.border-white\/60{border-color:color-mix(in oklab,var(--color-white) 60%,transparent)}}.bg-\[var\(--stashes-bg\)\]{background-color:var(--stashes-bg)}.bg-\[var\(--stashes-border\)\]{background-color:var(--stashes-border)}.bg-\[var\(--stashes-code-bg\)\]{background-color:var(--stashes-code-bg)}.bg-\[var\(--stashes-primary\)\],.bg-\[var\(--stashes-primary\)\]\/80{background-color:var(--stashes-primary)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--stashes-primary\)\]\/80{background-color:color-mix(in oklab,var(--stashes-primary) 80%,transparent)}}.bg-\[var\(--stashes-primary-dim\)\]{background-color:var(--stashes-primary-dim)}.bg-\[var\(--stashes-surface\)\]{background-color:var(--stashes-surface)}.bg-\[var\(--stashes-text-muted\)\]{background-color:var(--stashes-text-muted)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-black\/70{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.bg-black\/70{background-color:color-mix(in oklab,var(--color-black) 70%,transparent)}}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/10{background-color:color-mix(in oklab,var(--color-emerald-500) 10%,transparent)}}.bg-neutral-900\/90{background-color:#171717e6}@supports (color:color-mix(in lab,red,red)){.bg-neutral-900\/90{background-color:color-mix(in oklab,var(--color-neutral-900) 90%,transparent)}}.bg-red-100{background-color:var(--color-red-100)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-red-900\/40{background-color:#82181a66}@supports (color:color-mix(in lab,red,red)){.bg-red-900\/40{background-color:color-mix(in oklab,var(--color-red-900) 40%,transparent)}}.bg-red-950\/30{background-color:#4608094d}@supports (color:color-mix(in lab,red,red)){.bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950) 30%,transparent)}}.bg-transparent{background-color:#0000}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[var\(--stashes-primary\)\]{--tw-gradient-from:var(--stashes-primary);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-purple-400{--tw-gradient-to:var(--color-purple-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.object-cover{object-fit:cover}.object-top{object-position:top}.p-1{padding:calc(var(--spacing) * 1)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-3\.5{padding:calc(var(--spacing) * 3.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.85em\]{font-size:.85em}.text-\[8px\]{font-size:8px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[15px\]{font-size:15px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-all{word-break:break-all}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--stashes-primary\)\]{color:var(--stashes-primary)}.text-\[var\(--stashes-text\)\]{color:var(--stashes-text)}.text-\[var\(--stashes-text-muted\)\]{color:var(--stashes-text-muted)}.text-amber-400{color:var(--color-amber-400)}.text-amber-400\/70{color:#fcbb00b3}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/70{color:color-mix(in oklab,var(--color-amber-400) 70%,transparent)}}.text-amber-700{color:var(--color-amber-700)}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-700{color:var(--color-emerald-700)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-700{color:var(--color-red-700)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-80{opacity:.8}.opacity-100{opacity:1}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-\[var\(--stashes-ring\)\]{--tw-ring-color:var(--stashes-ring)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-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-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}@media(hover:hover){.group-hover\:translate-y-0:is(:where(.group):hover *){--tw-translate-y:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-hover\:scale-\[1\.02\]:is(:where(.group):hover *){scale:1.02}.group-hover\:border-\[var\(--stashes-primary\)\]:is(:where(.group):hover *){border-color:var(--stashes-primary)}.group-hover\:text-\[var\(--stashes-primary\)\]:is(:where(.group):hover *){color:var(--stashes-primary)}.group-hover\:text-\[var\(--stashes-text\)\]:is(:where(.group):hover *){color:var(--stashes-text)}.group-hover\:opacity-0:is(:where(.group):hover *){opacity:0}.group-hover\:opacity-40:is(:where(.group):hover *){opacity:.4}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-\[var\(--stashes-text-muted\)\]::placeholder{color:var(--stashes-text-muted)}.first\:mt-0:first-child{margin-top:calc(var(--spacing) * 0)}.last\:mb-0:last-child{margin-bottom:calc(var(--spacing) * 0)}.focus-within\:border-\[var\(--stashes-primary\)\]:focus-within{border-color:var(--stashes-primary)}.focus-within\:ring-1:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\:ring-\[var\(--stashes-ring\)\]:focus-within{--tw-ring-color:var(--stashes-ring)}@media(hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:border-\[var\(--stashes-border-hover\)\]:hover{border-color:var(--stashes-border-hover)}.hover\:border-\[var\(--stashes-primary\)\]:hover{border-color:var(--stashes-primary)}.hover\:border-white:hover{border-color:var(--color-white)}.hover\:bg-\[var\(--stashes-bg\)\]:hover{background-color:var(--stashes-bg)}.hover\:bg-\[var\(--stashes-primary\)\]:hover{background-color:var(--stashes-primary)}.hover\:bg-\[var\(--stashes-primary-dim\)\]:hover{background-color:var(--stashes-primary-dim)}.hover\:bg-\[var\(--stashes-primary-hover\)\]:hover{background-color:var(--stashes-primary-hover)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.hover\:text-\[var\(--stashes-primary\)\]:hover{color:var(--stashes-primary)}.hover\:text-\[var\(--stashes-text\)\]:hover{color:var(--stashes-text)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.active\:bg-\[var\(--stashes-primary\)\]:active{background-color:var(--stashes-primary)}@media(min-width:48rem){.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\:p-10{padding:calc(var(--spacing) * 10)}}@media(min-width:64rem){.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:p-12{padding:calc(var(--spacing) * 12)}}@media(min-width:80rem){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(prefers-color-scheme:dark){.dark\:border-red-900\/40{border-color:#82181a66}@supports (color:color-mix(in lab,red,red)){.dark\:border-red-900\/40{border-color:color-mix(in oklab,var(--color-red-900) 40%,transparent)}}.dark\:bg-amber-500\/15{background-color:#f99c0026}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-500\/15{background-color:color-mix(in oklab,var(--color-amber-500) 15%,transparent)}}.dark\:bg-emerald-500\/15{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.dark\:bg-emerald-500\/15{background-color:color-mix(in oklab,var(--color-emerald-500) 15%,transparent)}}.dark\:bg-red-500\/15{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-500\/15{background-color:color-mix(in oklab,var(--color-red-500) 15%,transparent)}}.dark\:bg-red-950\/30{background-color:#4608094d}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950) 30%,transparent)}}.dark\:text-amber-400{color:var(--color-amber-400)}.dark\:text-emerald-400{color:var(--color-emerald-400)}.dark\:text-red-400{color:var(--color-red-400)}}}:root{--stashes-primary:#16a34a;--stashes-primary-hover:#15803d;--stashes-primary-dim:#16a34a0f;--stashes-bg:#f8f8f7;--stashes-surface:#fff;--stashes-surface-hover:#fafaf9;--stashes-border:#e8e8e5;--stashes-border-hover:#d4d4d0;--stashes-text:#1c1c1c;--stashes-text-muted:#8b8b8b;--stashes-code-bg:#0000000a;--stashes-shadow-sm:0 1px 2px #0000000a;--stashes-shadow:0 2px 8px #0000000f, 0 1px 2px #0000000a;--stashes-shadow-lg:0 8px 24px #0000001a, 0 2px 6px #0000000a;--stashes-ring:#16a34a4d}@media(prefers-color-scheme:dark){:root{--stashes-primary:#22c55e;--stashes-primary-hover:#4ade80;--stashes-primary-dim:#22c55e14;--stashes-bg:#0c0c0c;--stashes-surface:#161616;--stashes-surface-hover:#1e1e1e;--stashes-border:#2a2a2a;--stashes-border-hover:#3a3a3a;--stashes-text:#e8e8e8;--stashes-text-muted:#737373;--stashes-code-bg:#ffffff0d;--stashes-shadow-sm:0 1px 2px #0003;--stashes-shadow:0 2px 8px #0000004d, 0 1px 2px #0003;--stashes-shadow-lg:0 8px 24px #0006, 0 2px 6px #0003;--stashes-ring:#22c55e4d}}body{background:var(--stashes-bg);color:var(--stashes-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-feature-settings:"cv01","cv02","cv03","cv04";margin:0;font-family:Inter,system-ui,-apple-system,sans-serif;font-size:14px;line-height:1.5}*{scrollbar-width:thin;scrollbar-color:var(--stashes-border) transparent}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--stashes-border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--stashes-border-hover)}:focus-visible{outline:2px solid var(--stashes-ring);outline-offset:2px}textarea:focus-visible{outline:none}::selection{background:var(--stashes-primary-dim);color:var(--stashes-text)}.stash-shadow{box-shadow:var(--stashes-shadow-sm);transition:box-shadow .2s,transform .2s}.stash-shadow:hover{box-shadow:var(--stashes-shadow-lg)}.stash-shadow-md{box-shadow:var(--stashes-shadow);transition:box-shadow .2s,transform .2s}.stash-shadow-md:hover{box-shadow:var(--stashes-shadow-lg)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}