┌─────────────────────────────┐
│ New stage │ <- White button with white text (unreadable!)
│ Create stage │ <- White button with white text
│ Cancel Create stage │ <- White buttons (hard to see)
└─────────────────────────────┘
┌─────────────────────────────┐
│ 🟠 New stage │ <- Blood orange button with white text (readable!)
│ 🟠 Create stage │ <- Blood orange button with white text
│ [Cancel] 🟠 Create stage │ <- Orange primary, outlined secondary
└─────────────────────────────┘
Color Applied: bg-orange-600 (Tailwind's orange-600 = #ea580c)
User clicks Release dropdown:
┌─────────────────────┐
│ ["release-abc123"] │ <- Shows as array, looks broken!
│ Select release │ <- Placeholder shows after selection?
└─────────────────────┘
After selecting "my-release-v1.0":
Form data: createForm.releaseId = ["my-release-v1.0"] ❌ Array instead of string!
API call fails because it expects a string, not an array.
User clicks Release dropdown:
┌────────────────────┐
│ my-release-v1.0 │ <- Shows selected value correctly
│ my-release-v1.1 │
│ my-release-v2.0 │
└────────────────────┘
After selecting "my-release-v1.0":
Form data: createForm.releaseId = "my-release-v1.0" ✅ Correct string value!
API call succeeds with proper data.
- default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
+ default: "bg-orange-600 text-white shadow-xs hover:bg-orange-700 active:bg-orange-800",Created a new component that bridges the gap between Svelte's bind:value expectations and bits-ui's onValueChange callback:
// User code (unchanged API)
<Select bind:value={createForm.releaseId}>
<SelectTrigger>...</SelectTrigger>
<SelectContent>
{#each releases as release}
<SelectItem value={release.id}>{release.label}</SelectItem>
{/each}
</SelectContent>
</Select>
// Now works correctly!
// createForm.releaseId = "my-release-v1.0" (string, not array)The blood orange theme uses Tailwind's built-in orange scale:
- Default:
bg-orange-600- Primary action color - Hover:
bg-orange-700- Darker on hover for feedback - Active:
bg-orange-800- Darkest for active state - Text:
text-white- High contrast white text
This matches the OpenHack brand and provides excellent visibility on the dark background (#050505).