aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/components/Button.svelte23
-rw-r--r--src/lib/components/ScoreBadge.svelte35
-rw-r--r--src/lib/components/SectionTitle.svelte23
-rw-r--r--src/lib/components/StatusBadge.svelte48
4 files changed, 109 insertions, 20 deletions
diff --git a/src/lib/components/Button.svelte b/src/lib/components/Button.svelte
index 30e9fc2..27b9b7f 100644
--- a/src/lib/components/Button.svelte
+++ b/src/lib/components/Button.svelte
@@ -15,7 +15,7 @@
onclick,
children,
}: {
- variant?: 'primary' | 'accent' | 'ghost' | 'done';
+ variant?: 'primary' | 'accent' | 'ghost' | 'done' | 'outline';
type?: 'button' | 'submit' | 'reset';
disabled?: boolean;
name?: string;
@@ -143,6 +143,27 @@
font-size: 0.9375rem;
}
+ .outline {
+ width: 3rem;
+ height: 3rem;
+ flex-shrink: 0;
+ padding: 0;
+ border-radius: 0.75rem;
+ background: var(--surface);
+ color: var(--text-secondary);
+ border: 1.5px solid var(--border);
+ font-size: 1.25rem;
+ font-weight: 500;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+
+ .outline:hover:not(:disabled) {
+ border-color: var(--accent);
+ color: var(--text);
+ }
+
.block {
align-self: stretch;
width: 100%;
diff --git a/src/lib/components/ScoreBadge.svelte b/src/lib/components/ScoreBadge.svelte
index 6384667..ae11918 100644
--- a/src/lib/components/ScoreBadge.svelte
+++ b/src/lib/components/ScoreBadge.svelte
@@ -1,13 +1,32 @@
<script lang="ts">
let { score }: { score: number } = $props();
- const className = $derived(
- score >= 80
- ? 'score bg-success'
- : score >= 50
- ? 'score bg-accent'
- : 'score bg-danger',
- );
+ const level = $derived(score >= 80 ? 'high' : score >= 50 ? 'mid' : 'low');
</script>
-<span class={className}>{score}</span>
+<span class="score {level}">{score}</span>
+
+<style>
+ .score {
+ flex-shrink: 0;
+ min-width: 2.75rem;
+ padding: 0.25rem 0.5rem;
+ border-radius: 9999px;
+ text-align: center;
+ font-size: 0.875rem;
+ font-weight: 700;
+ color: var(--white);
+ }
+
+ .high {
+ background: var(--success);
+ }
+
+ .mid {
+ background: var(--accent);
+ }
+
+ .low {
+ background: var(--danger);
+ }
+</style>
diff --git a/src/lib/components/SectionTitle.svelte b/src/lib/components/SectionTitle.svelte
new file mode 100644
index 0000000..be77a46
--- /dev/null
+++ b/src/lib/components/SectionTitle.svelte
@@ -0,0 +1,23 @@
+<script lang="ts">
+ import type { Snippet } from 'svelte';
+
+ let { level = 2, children }: { level?: 2 | 3; children: Snippet } = $props();
+</script>
+
+<svelte:element this={level === 2 ? 'h2' : 'h3'}>
+ {@render children()}
+</svelte:element>
+
+<style>
+ h2,
+ h3 {
+ font-size: 0.75rem;
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 0.08em;
+ color: var(--accent);
+ margin: 1.25rem 0 0.5rem;
+ padding-left: 0.5rem;
+ border-left: 3px solid var(--accent);
+ }
+</style>
diff --git a/src/lib/components/StatusBadge.svelte b/src/lib/components/StatusBadge.svelte
index 4c149d2..2bbdf5a 100644
--- a/src/lib/components/StatusBadge.svelte
+++ b/src/lib/components/StatusBadge.svelte
@@ -9,16 +9,6 @@
overdueDays = 0,
}: { status: RoutineStatus; overdueDays?: number } = $props();
- const className = $derived(
- status === 'ok'
- ? 'status bg-success text-white'
- : status === 'due'
- ? 'status bg-accent-soft text-accent'
- : status === 'late'
- ? 'status bg-accent text-white'
- : 'status bg-danger text-white',
- );
-
const icon = $derived(
status === 'ok'
? '✓'
@@ -36,5 +26,41 @@
);
</script>
-<span class={className} role="img" aria-label={label} title={label}>{icon}</span
+<span class="status {status}" role="img" aria-label={label} title={label}
+ >{icon}</span
>
+
+<style>
+ .status {
+ flex-shrink: 0;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ width: 1.5rem;
+ height: 1.5rem;
+ border-radius: 0.375rem;
+ font-size: 0.875rem;
+ font-weight: 700;
+ line-height: 1;
+ }
+
+ .ok {
+ background: var(--success);
+ color: var(--white);
+ }
+
+ .due {
+ background: var(--shadow-accent);
+ color: var(--accent);
+ }
+
+ .late {
+ background: var(--accent);
+ color: var(--white);
+ }
+
+ .veryLate {
+ background: var(--danger);
+ color: var(--white);
+ }
+</style>