)}
diff --git a/apps/web/src/components/Toasts.tsx b/apps/web/src/components/Toasts.tsx
index f6dba36..1ca69b3 100644
--- a/apps/web/src/components/Toasts.tsx
+++ b/apps/web/src/components/Toasts.tsx
@@ -136,7 +136,7 @@ export function Toasts() {
dropOverflow();
void navigate("/logbook");
}}
- className="pointer-events-auto self-end rounded-full border border-space-600 bg-space-900/95 px-3 py-1 font-display text-xs tracking-wide text-ink-200 shadow-panel"
+ className="pointer-events-auto self-end rounded-full border border-space-600 bg-space-900/95 px-3 py-1 font-display text-xs text-ink-200 shadow-panel"
>
+{more} more
diff --git a/apps/web/src/components/Welcome.tsx b/apps/web/src/components/Welcome.tsx
index e005b9b..9d876a2 100644
--- a/apps/web/src/components/Welcome.tsx
+++ b/apps/web/src/components/Welcome.tsx
@@ -87,17 +87,11 @@ export function WelcomeCards({
}}
className="w-full max-w-md overflow-hidden rounded-t-2xl border border-amber-400/50 bg-space-900/95 p-6 pb-[max(1.5rem,env(safe-area-inset-bottom))] shadow-panel sm:rounded-2xl"
>
-
-
+
{card.title}
{welcomeBody(card.body)}
diff --git a/apps/web/src/index.css b/apps/web/src/index.css
index f2dfad0..2594946 100644
--- a/apps/web/src/index.css
+++ b/apps/web/src/index.css
@@ -40,10 +40,68 @@
--color-problem: #ff8d7a; /* Something needs attention. */
--color-on-problem: #2a0a05;
- --shadow-glow-amber: 0 0 0 1px rgb(251 191 36 / 0.45), 0 0 22px -4px rgb(251 191 36 / 0.6);
- --shadow-glow-cyan: 0 0 0 1px rgb(34 211 238 / 0.4), 0 0 22px -4px rgb(34 211 238 / 0.55);
- --shadow-glow-emerald: 0 0 0 1px rgb(52 211 153 / 0.4), 0 0 22px -4px rgb(52 211 153 / 0.55);
- --shadow-panel: inset 0 1px 0 0 rgb(255 255 255 / 0.05), 0 12px 32px -12px rgb(0 0 0 / 0.8);
+ /* Accent scales in the role hues: amber action, blue flight, mint earned, coral problem. */
+ --color-amber-50: #fff8e8;
+ --color-amber-100: #fff0d1;
+ --color-amber-200: #ffe2a8;
+ --color-amber-300: #ffd27a;
+ --color-amber-400: #ffc04d;
+ --color-amber-500: #f5a623;
+ --color-amber-600: #c97f10;
+ --color-amber-700: #9c620f;
+ --color-amber-800: #7a4d10;
+ --color-amber-900: #5c3b10;
+ --color-amber-950: #2e1c04;
+ --color-cyan-50: #eef6ff;
+ --color-cyan-100: #dcedff;
+ --color-cyan-200: #bddcff;
+ --color-cyan-300: #93c9ff;
+ --color-cyan-400: #68aef5;
+ --color-cyan-500: #4690e0;
+ --color-cyan-600: #2f74c2;
+ --color-cyan-700: #2a5c98;
+ --color-cyan-800: #244a78;
+ --color-cyan-900: #1f3d61;
+ --color-cyan-950: #122540;
+ --color-sky-50: #eef6ff;
+ --color-sky-100: #dcedff;
+ --color-sky-200: #bddcff;
+ --color-sky-300: #93c9ff;
+ --color-sky-400: #68aef5;
+ --color-sky-500: #4690e0;
+ --color-sky-600: #2f74c2;
+ --color-sky-700: #2a5c98;
+ --color-sky-800: #244a78;
+ --color-sky-900: #1f3d61;
+ --color-sky-950: #122540;
+ --color-emerald-50: #eafbf3;
+ --color-emerald-100: #d0f6e4;
+ --color-emerald-200: #aaf0cf;
+ --color-emerald-300: #84e3b5;
+ --color-emerald-400: #5ed09a;
+ --color-emerald-500: #3db680;
+ --color-emerald-600: #2c9367;
+ --color-emerald-700: #267553;
+ --color-emerald-800: #215d44;
+ --color-emerald-900: #1c4c39;
+ --color-emerald-950: #0e2c21;
+ --color-rose-50: #fff2ef;
+ --color-rose-100: #ffe2db;
+ --color-rose-200: #ffc8bb;
+ --color-rose-300: #ffa896;
+ --color-rose-400: #ff8d7a;
+ --color-rose-500: #f56f5a;
+ --color-rose-600: #dc5340;
+ --color-rose-700: #b54232;
+ --color-rose-800: #8f372b;
+ --color-rose-900: #732f26;
+ --color-rose-950: #3f1610;
+
+ /* Selection rings, without the old neon blur. */
+ --shadow-glow-amber: 0 0 0 1px rgb(255 192 77 / 0.55);
+ --shadow-glow-cyan: 0 0 0 1px rgb(147 201 255 / 0.5);
+ --shadow-glow-emerald: 0 0 0 1px rgb(132 227 181 / 0.5);
+ --shadow-panel: 0 10px 30px -14px rgb(0 0 0 / 0.7);
--animate-rise: rise 0.35s cubic-bezier(0.2, 0.8, 0.2, 1) both;
--animate-glow: glow 2.4s ease-in-out infinite;
diff --git a/apps/web/src/layout/Layout.tsx b/apps/web/src/layout/Layout.tsx
index 4926011..ff7810e 100644
--- a/apps/web/src/layout/Layout.tsx
+++ b/apps/web/src/layout/Layout.tsx
@@ -33,10 +33,8 @@ export function Layout({
{/* The wordmark only fits beside the chips from 640 px; on phones the mark alone. */}
-
- DEADHEAD
-
-
+ DEADHEAD
+
Space Freight
@@ -131,15 +129,13 @@ function NavTab({
{badge > 9 ? "9+" : badge}
)}
-
- {label}
-
+
{label}
>
)}
diff --git a/apps/web/src/map/MapCanvas.tsx b/apps/web/src/map/MapCanvas.tsx
index 171cec5..49c3cb3 100644
--- a/apps/web/src/map/MapCanvas.tsx
+++ b/apps/web/src/map/MapCanvas.tsx
@@ -166,7 +166,7 @@ export function MapCanvas({
{loading && (
Loading map…
diff --git a/apps/web/src/screens/Dashboard.tsx b/apps/web/src/screens/Dashboard.tsx
index 7bda6a1..69bab8d 100644
--- a/apps/web/src/screens/Dashboard.tsx
+++ b/apps/web/src/screens/Dashboard.tsx
@@ -113,7 +113,7 @@ export function Dashboard() {
{state.tutorial && (
-
+
Contract pilot
Flying for {content.tutorialCompanyName}
@@ -140,10 +140,7 @@ export function Dashboard() {
aria-labelledby="on-jobs-title"
tone={onJobs.length ? "cyan" : "default"}
>
-
+
Ships on jobs
{onJobs.length === 0 ? (
@@ -186,7 +183,7 @@ export function Dashboard() {
-
+
Pilots resting: {resting.length}
{resting[0] ? (
@@ -204,7 +201,7 @@ export function Dashboard() {
{inShop.length > 0 && (
-
+
In the shop: {inShop.length}
@@ -227,7 +224,7 @@ export function Dashboard() {
{!state.tutorial && (
-
+
Logbook
@@ -258,7 +255,7 @@ function YourShip({ className = "" }: { className?: string }) {
if (mine.kind === "none") {
return (
-
+
Your ship
You're not flying a ship right now.
@@ -285,7 +282,6 @@ function YourShip({ className = "" }: { className?: string }) {
@@ -301,7 +297,7 @@ function YourShip({ className = "" }: { className?: string }) {
Your ship
-
{name}
+
{name}
{dispatch ? (
In flight
@@ -365,10 +361,8 @@ function YourShip({ className = "" }: { className?: string }) {
aria-label="Your ship low fuel"
className="mt-2 rounded-lg border border-rose-400/40 bg-rose-950/30 px-3 py-2 text-sm text-rose-200"
>
-
- Low fuel
- {" "}
- · {locationName(low.destinationId)} needs {formatFu(low.fuelFu)}
+ Low fuel ·{" "}
+ {locationName(low.destinationId)} needs {formatFu(low.fuelFu)}
)}
@@ -440,7 +434,7 @@ function Alerts() {
Alerts
diff --git a/apps/web/src/screens/DevTools.tsx b/apps/web/src/screens/DevTools.tsx
index cb8af6b..6783841 100644
--- a/apps/web/src/screens/DevTools.tsx
+++ b/apps/web/src/screens/DevTools.tsx
@@ -113,7 +113,7 @@ export function DevTools() {
{state.pilots.length > 0 && (
- Pilot
+ Pilot
0 && (
- Ship
+ Ship
-
- {option.shipName}
-
+ {option.shipName}
{option.modelName} · {option.pilotName ?? "no pilot"}
@@ -537,7 +535,7 @@ export function DispatchSheet({ contract, onClose }: { contract: Contract; onClo
function Cell({ label, value, good }: { label: string; value: string; good?: boolean }) {
return (
-
{label}
+ {label}
diff --git a/apps/web/src/screens/Fleet.tsx b/apps/web/src/screens/Fleet.tsx
index 7578115..7b24fea 100644
--- a/apps/web/src/screens/Fleet.tsx
+++ b/apps/web/src/screens/Fleet.tsx
@@ -118,9 +118,7 @@ function ShipRow(props: {
-
- {ship.name}
-
+
{ship.name}
{dispatch ? (
In flight
@@ -170,7 +168,7 @@ function ShipRow(props: {
aria-label={`${ship.name} low fuel`}
className="flex items-center gap-2 rounded-lg border border-rose-400/40 bg-rose-950/30 px-3 py-2 text-sm text-rose-200"
>
- Low fuel
+ Low fuel
{locationName(low.destinationId)} needs {formatFu(low.fuelFu)}
@@ -383,9 +381,7 @@ export function DeadheadPicker({ ship, onClose }: { ship: Ship; onClose: () => v
{sprite && }
-
- {locationName(option.id)}
-
+ {locationName(option.id)}
{formatCredits(option.fuelCost)} fuel used · {formatDuration(option.tripMs)}
@@ -425,7 +421,7 @@ export function HullGauge({ ship }: { ship: Ship }) {
const tone = pct < needsRepairBelowPct ? "rose" : pct < noDangerousBelowPct ? "amber" : "emerald";
return (
-
+
Hull
{Math.round(pct)}%
@@ -436,7 +432,7 @@ export function HullGauge({ ship }: { ship: Ship }) {
aria-label={`${ship.name} needs repair`}
className="mt-2 flex items-center gap-2 rounded-lg border border-rose-400/40 bg-rose-950/30 px-3 py-2 text-sm text-rose-200"
>
-
Needs repair
+
Needs repair
Repair it at an HQ
)}
diff --git a/apps/web/src/screens/HQs.tsx b/apps/web/src/screens/HQs.tsx
index 799153f..3302026 100644
--- a/apps/web/src/screens/HQs.tsx
+++ b/apps/web/src/screens/HQs.tsx
@@ -58,7 +58,7 @@ function HqCard({ bay }: { bay: Bay }) {
);
return (
-
+
{location && (
)}
-
{name}
+
{name}
Fuel:
diff --git a/apps/web/src/screens/LocationBoards.tsx b/apps/web/src/screens/LocationBoards.tsx
index dfbe4a1..e6ddf7d 100644
--- a/apps/web/src/screens/LocationBoards.tsx
+++ b/apps/web/src/screens/LocationBoards.tsx
@@ -116,7 +116,7 @@ export function LocationBoards({ onSelect }: { onSelect?: (contract: Contract) =
type="button"
aria-pressed={id === locationId}
onClick={() => setParams({ location: id }, { replace: true })}
- className="flex shrink-0 items-center gap-2 rounded-full border border-space-600 bg-space-900/70 py-1 pr-3 pl-1 font-display text-sm font-semibold tracking-wide text-ink-300 backdrop-blur transition hover:border-space-500 hover:text-ink-50 aria-pressed:border-amber-400 aria-pressed:bg-amber-500/15 aria-pressed:text-amber-100 aria-pressed:shadow-glow-amber"
+ className="flex shrink-0 items-center gap-2 rounded-full border border-space-600 bg-space-900/70 py-1 pr-3 pl-1 font-display text-sm font-semibold text-ink-300 backdrop-blur transition hover:border-space-500 hover:text-ink-50 aria-pressed:border-amber-400 aria-pressed:bg-amber-500/15 aria-pressed:text-amber-100 aria-pressed:shadow-glow-amber"
>
{sprite ?
: null}
{locationName(id)}
@@ -176,7 +176,7 @@ function LocationBoard({
const refresh = (
New contracts in{" "}
@@ -186,7 +186,7 @@ function LocationBoard({
{fresh.size > 0 && (
New contracts posted
@@ -222,11 +222,10 @@ function LocationBoard({
as="li"
key={contract.id}
tone={contract.firstContact ? "amber" : "default"}
- feature={contract.firstContact}
className={`flex flex-col gap-2 ${fresh.has(contract.id) ? "animate-rise" : ""}`}
>
-
+
{locationName(contract.originId)} → {locationName(contract.destinationId)}
@@ -234,7 +233,7 @@ function LocationBoard({
-
+
{goodName(contract)}
diff --git a/apps/web/src/screens/Locations.tsx b/apps/web/src/screens/Locations.tsx
index b30bb1b..ccb66e4 100644
--- a/apps/web/src/screens/Locations.tsx
+++ b/apps/web/src/screens/Locations.tsx
@@ -52,9 +52,7 @@ export function Locations() {
/>
-
- {location.name}
-
+
{location.name}
Undiscovered — deliver here to unlock.
@@ -76,16 +74,14 @@ export function Locations() {
/>
-
- {location.name}
-
+
{location.name}
{hasBay && (
HQ
)}
-
+
{location.id === "earth"
? "Home"
: `${formatMillionKm(distanceAt("earth", location.id))} from Earth`}
@@ -93,25 +89,15 @@ export function Locations() {
-
- Type
-
+ Type
{TYPE_LABELS[location.type]}
-
- Landing
-
+ Landing
{LANDING_LABELS[location.landingRequirement]}
-
- Produces
-
+ Produces
{location.cargoClassMix.produces.map(cargoName).join(", ") || "—"}
-
- Demands
-
+ Demands
{location.cargoClassMix.demands.map(cargoName).join(", ") || "—"}
-
- Fuel
-
+ Fuel
diff --git a/apps/web/src/screens/MapScreen.tsx b/apps/web/src/screens/MapScreen.tsx
index bec1643..9736d30 100644
--- a/apps/web/src/screens/MapScreen.tsx
+++ b/apps/web/src/screens/MapScreen.tsx
@@ -74,7 +74,7 @@ function Panel({
{art}
-
{title}
+
{title}
{
const affordable = state.company.credits >= model.price;
return (
-
+
-
{model.name}
+
{model.name}
@@ -124,7 +124,7 @@ function Spec(props: { icon: IconName; label: string; value: string; share?: num
return (
-
+
{props.label}
@@ -162,7 +162,7 @@ function Reach({ model }: { model: ShipModel }) {
if (parts.length === 0) return null;
return (
- Reach
+ Reach
{parts.join(" · ")}
);
diff --git a/apps/web/src/screens/Pilots.tsx b/apps/web/src/screens/Pilots.tsx
index 64d4ae8..5d9addc 100644
--- a/apps/web/src/screens/Pilots.tsx
+++ b/apps/web/src/screens/Pilots.tsx
@@ -53,7 +53,7 @@ function HirePilot() {
const hasBay = state.bays.some((b) => b.locationId === bay);
return (
-
+
{state.bays.length === 0 ? (
Lease a bay to hire pilots there.
) : (
@@ -62,9 +62,7 @@ function HirePilot() {
-
- Hire at
-
+ Hire at
{initials}
-
+
{pilot.level}
-
+
{pilot.name}
{pilot.isAvatar && (you) }
-
+
Level {pilot.level}
@@ -172,7 +170,7 @@ function PilotCard({ pilot }: { pilot: Pilot }) {
0 ? "text-amber-300" : "text-ink-400"}`}
+ className={`font-display text-xs ${pilot.skillPointsAvailable > 0 ? "text-amber-300" : "text-ink-400"}`}
>
Skill points:{" "}
{pilot.skillPointsAvailable}
@@ -268,7 +266,7 @@ function Duty({ pilot, canRest }: { pilot: Pilot; canRest: boolean }) {
const used = Math.min(pilot.dutyHours, pilot.dutyLimit);
return (
-
+
Duty
{formatGameHours(pilot.dutyHours)} of {formatGameHours(pilot.dutyLimit)}
diff --git a/apps/web/src/screens/Settings.tsx b/apps/web/src/screens/Settings.tsx
index 1bb2472..04f7a1e 100644
--- a/apps/web/src/screens/Settings.tsx
+++ b/apps/web/src/screens/Settings.tsx
@@ -118,7 +118,7 @@ function Section({ title, children }: { title: string; children: ReactNode }) {
const id = `settings-${title.toLowerCase()}`;
return (
-
+
{title}
{children}
diff --git a/apps/web/src/screens/ShipUpgrades.tsx b/apps/web/src/screens/ShipUpgrades.tsx
index 5b23de8..a9c7a69 100644
--- a/apps/web/src/screens/ShipUpgrades.tsx
+++ b/apps/web/src/screens/ShipUpgrades.tsx
@@ -86,7 +86,7 @@ function HullRepair({ shipId, atHq }: { shipId: string; atHq: boolean }) {
className="mt-4 rounded-xl border border-space-600 bg-space-900/60 p-3 text-sm"
>
- Hull
+ Hull
{Math.round(pct)}%
{pct >= 100 ? (
@@ -143,9 +143,7 @@ export function ShipUpgrades({ shipId, onClose }: { shipId: string; onClose: ()
{/* Booked from anywhere; the work starts at the HQ (CR-027). */}
{state.tutorial === null && }
-
- Upgrades
-
+ Upgrades
{content.upgrades.map((upgrade) => {
const level = ship.upgrades[upgrade.id] ?? 0;
@@ -176,7 +174,7 @@ export function ShipUpgrades({ shipId, onClose }: { shipId: string; onClose: ()
className="rounded-xl border border-space-600 bg-space-900/60 p-3 text-sm"
>
- {upgrade.name}
+ {upgrade.name}
Level {level}/{max}
diff --git a/apps/web/src/screens/StartScreen.tsx b/apps/web/src/screens/StartScreen.tsx
index bc88fb1..a1fe413 100644
--- a/apps/web/src/screens/StartScreen.tsx
+++ b/apps/web/src/screens/StartScreen.tsx
@@ -39,12 +39,10 @@ export function StartScreen() {
-
+
DEADHEAD
-
- Space Freight Tycoon
-
+
Space Freight Tycoon
Fly company runs between Earth and the Moon, save up for your own ship, and build a freight
diff --git a/apps/web/src/screens/TutorialBoard.tsx b/apps/web/src/screens/TutorialBoard.tsx
index 4620a30..1813ff5 100644
--- a/apps/web/src/screens/TutorialBoard.tsx
+++ b/apps/web/src/screens/TutorialBoard.tsx
@@ -46,7 +46,7 @@ export function TutorialBoard() {
return (
{firstRun && !introDismissed && (
-
+
@@ -106,11 +106,10 @@ export function TutorialBoard() {
data-suggested={suggested || undefined}
data-scripted={scripted ? true : undefined}
tone={scripted ? "fuchsia" : suggested ? "amber" : "default"}
- feature={Boolean(scripted) || suggested}
className={`flex flex-col gap-2 ${suggested ? "shadow-glow-amber" : ""}`}
>
-
+
{scripted ? (
{scripted.name}
) : (
@@ -143,9 +142,7 @@ export function TutorialBoard() {
-
- Pay
-
+ Pay
-
- Time
-
+ Time
{formatDuration(tripMs)}
-
- XP
-
+
XP
= {
- primary:
- "bg-linear-to-b from-amber-300 to-amber-500 text-space-950 shadow-glow-amber hover:from-amber-200 hover:to-amber-400",
- secondary:
- "border border-space-500 bg-space-800/80 text-ink-50 hover:border-amber-400/60 hover:bg-space-700",
- ghost: "text-ink-300 hover:bg-white/5 hover:text-ink-50",
- success:
- "bg-linear-to-b from-emerald-300 to-emerald-500 text-space-950 shadow-glow-emerald hover:from-emerald-200 hover:to-emerald-400",
- danger: "border border-rose-500/60 bg-rose-500/15 text-rose-200 hover:bg-rose-500/25",
+ primary: "bg-action text-on-action hover:brightness-110",
+ secondary: "border border-glass-line bg-white/6 text-ink-50 hover:bg-white/12",
+ ghost: "text-ink-300 hover:bg-white/6 hover:text-ink-50",
+ success: "bg-earned text-space-950 hover:brightness-110",
+ danger: "border border-problem/60 bg-problem/12 text-problem hover:bg-problem/20",
};
const SIZES: Record = {
- sm: "min-h-9 px-3 text-xs",
- md: "min-h-11 px-4 text-sm",
+ sm: "min-h-11 px-3 text-sm",
+ md: "min-h-12 px-4 text-[15px]",
lg: "min-h-13 px-6 text-base",
};
@@ -27,7 +24,7 @@ export function buttonClass(
block = false,
): string {
return [
- "inline-flex items-center justify-center gap-2 rounded-lg font-display font-semibold uppercase tracking-wider",
+ "inline-flex items-center justify-center gap-2 rounded-xl text-center leading-tight font-semibold",
"transition duration-150 select-none active:translate-y-px active:scale-[0.98]",
"disabled:pointer-events-none disabled:opacity-40 disabled:shadow-none disabled:saturate-50",
VARIANTS[variant],
diff --git a/apps/web/src/ui/Panel.tsx b/apps/web/src/ui/Panel.tsx
index 3f5f383..01c2f85 100644
--- a/apps/web/src/ui/Panel.tsx
+++ b/apps/web/src/ui/Panel.tsx
@@ -3,72 +3,37 @@ import type { ElementType, HTMLAttributes, ReactNode } from "react";
export type Tone = "default" | "amber" | "cyan" | "emerald" | "rose" | "fuchsia" | "muted";
const TONES: Record = {
- default: "border-space-600/70 bg-space-900/75",
- muted: "border-space-700/70 bg-space-900/45",
- amber: "border-amber-400/45 bg-amber-950/40",
- cyan: "border-cyan-400/40 bg-cyan-950/40",
- emerald: "border-emerald-400/40 bg-emerald-950/40",
- rose: "border-rose-500/45 bg-rose-950/40",
- fuchsia: "border-fuchsia-400/50 bg-fuchsia-950/40",
-};
-
-const BRACKETS: Record = {
- default: "border-cyan-300/60",
- muted: "border-ink-500",
- amber: "border-amber-300",
- cyan: "border-cyan-300",
- emerald: "border-emerald-300",
- rose: "border-rose-300",
- fuchsia: "border-fuchsia-300",
+ default: "border-glass-line bg-white/5",
+ muted: "border-glass-line bg-transparent",
+ amber: "border-action/45 bg-action/8",
+ cyan: "border-flight/35 bg-flight/7",
+ emerald: "border-earned/35 bg-earned/7",
+ rose: "border-problem/45 bg-problem/9",
+ fuchsia: "border-fuchsia-400/45 bg-fuchsia-400/8",
};
export interface PanelProps extends HTMLAttributes {
as?: ElementType;
tone?: Tone;
- /** Corner brackets, for panels that should stand out. */
- feature?: boolean;
children?: ReactNode;
}
-/** A translucent HUD panel (decision 0.5.47). */
+/** A card inside a glass panel (decision 0.5.165). */
export function Panel({
as: Tag = "div",
tone = "default",
- feature = false,
className = "",
children,
...rest
}: PanelProps) {
return (
-
- {feature && }
+
{children}
);
}
-function Brackets({ tone }: { tone: Tone }) {
- const c = `pointer-events-none absolute size-3 ${BRACKETS[tone]}`;
- return (
-
-
-
-
-
-
- );
-}
-
-/** A small uppercase label above a value or section. */
+/** A small label above a value or section. */
export function Eyebrow({ children, className = "" }: { children: ReactNode; className?: string }) {
- return (
-
- {children}
-
- );
+ return {children}
;
}
diff --git a/apps/web/src/ui/Sheet.tsx b/apps/web/src/ui/Sheet.tsx
index 5b4282f..acaee8d 100644
--- a/apps/web/src/ui/Sheet.tsx
+++ b/apps/web/src/ui/Sheet.tsx
@@ -40,26 +40,22 @@ export function Sheet({
}) {
return createPortal(
- {eyebrow && (
-
- {eyebrow}
-
- )}
+ {eyebrow &&
{eyebrow}
}
{title}
diff --git a/apps/web/src/ui/bits.tsx b/apps/web/src/ui/bits.tsx
index 42ebd0b..f0c7b96 100644
--- a/apps/web/src/ui/bits.tsx
+++ b/apps/web/src/ui/bits.tsx
@@ -4,12 +4,12 @@ import { Icon, type IconName } from "./icons";
import type { Tone } from "./Panel";
const PILL_TONES: Record
= {
- default: "border-space-500 bg-space-800 text-ink-200",
- muted: "border-space-600 bg-space-900 text-ink-400",
- amber: "border-amber-400/50 bg-amber-500/15 text-amber-200",
- cyan: "border-cyan-400/50 bg-cyan-500/15 text-cyan-200",
- emerald: "border-emerald-400/50 bg-emerald-500/15 text-emerald-200",
- rose: "border-rose-400/50 bg-rose-500/15 text-rose-200",
+ default: "border-glass-line bg-white/6 text-ink-200",
+ muted: "border-glass-line bg-transparent text-ink-400",
+ amber: "border-action/50 bg-action/12 text-action",
+ cyan: "border-flight/45 bg-flight/12 text-flight",
+ emerald: "border-earned/45 bg-earned/12 text-earned",
+ rose: "border-problem/50 bg-problem/12 text-problem",
fuchsia: "border-fuchsia-400/50 bg-fuchsia-500/15 text-fuchsia-200",
};
@@ -27,7 +27,7 @@ export function Pill({
}) {
return (
{icon && }
{children}
@@ -36,11 +36,12 @@ export function Pill({
}
const METER_FILLS: Partial> = {
- amber: "from-amber-500 to-amber-300 shadow-[0_0_10px] shadow-amber-400/60",
- cyan: "from-cyan-500 to-sky-300 shadow-[0_0_10px] shadow-cyan-400/60",
- emerald: "from-emerald-500 to-emerald-300 shadow-[0_0_10px] shadow-emerald-400/60",
- rose: "from-rose-600 to-rose-400 shadow-[0_0_10px] shadow-rose-500/60",
- fuchsia: "from-fuchsia-500 to-fuchsia-300",
+ amber: "bg-action",
+ cyan: "bg-flight",
+ emerald: "bg-earned",
+ rose: "bg-problem",
+ fuchsia: "bg-fuchsia-300",
+ default: "bg-ink-300",
};
/** A labelled `progressbar`. `label` is its accessible name. */
@@ -69,10 +70,10 @@ export function Meter({
aria-valuemin={min}
aria-valuemax={max}
aria-valuenow={value}
- className={`overflow-hidden rounded-full bg-space-950/80 ring-1 ring-space-600/60 ${size === "sm" ? "h-1.5" : "h-2.5"} ${className}`}
+ className={`overflow-hidden rounded-full bg-white/12 ${size === "sm" ? "h-1" : "h-1.5"} ${className}`}
>
@@ -104,16 +105,14 @@ export function StatTile({
className?: string;
}) {
return (
-
-
+
+
{icon && }
{label}
{value}
@@ -138,20 +137,10 @@ export function ScreenHeader({
return (
- {icon && (
-
-
-
- )}
+ {icon &&
}
- {eyebrow && (
-
- {eyebrow}
-
- )}
-
- {title}
-
+ {eyebrow &&
{eyebrow}
}
+
{title}
{subtitle &&
{subtitle}
}