From bc7d5106dccdd23c6d38b9a709f5635ac101de6a Mon Sep 17 00:00:00 2001 From: Cameron Custer Date: Sat, 19 Apr 2025 15:07:02 -0700 Subject: [PATCH] modern theme --- src/app.css | 116 +++++++++++++++++-------- src/lib/components/Header.svelte | 19 ++-- src/lib/components/ProblemTable.svelte | 38 ++++---- src/lib/components/TopicSidebar.svelte | 26 +++--- tailwind.config.js | 46 ++++++++++ 5 files changed, 168 insertions(+), 77 deletions(-) create mode 100644 tailwind.config.js diff --git a/src/app.css b/src/app.css index 14a18ea..89899b1 100644 --- a/src/app.css +++ b/src/app.css @@ -1,34 +1,38 @@ @import '@fontsource/fira-mono'; +/* Import fonts */ +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&display=swap'); + @import 'tailwindcss'; @layer theme { :root { /* Fonts */ --font-sans: - Arial, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, + 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; - --font-mono: 'Fira Mono', monospace; + --font-mono: 'JetBrains Mono', 'Fira Mono', monospace; - /* Colors */ + /* Colors - Clean White Theme with Sleek Accents */ --color-white: oklch(1 0 0); - --color-black: oklch(0 0 0); - --color-primary: oklch(0.12 0 0); - --color-secondary: oklch(0.19 0 0); - --color-tertiary: oklch(0.28 0 0); - --color-accent: oklch(0.65 0.26 296.88); - --color-heading: oklch(1 0 0 / 0.87); - --color-text: oklch(1 0 0 / 0.6); - --color-text-muted: oklch(1 0 0 / 0.4); - --color-background: oklch(0.19 0 0 / 0.7); - --color-border: oklch(0.44 0 0); - --color-link: oklch(0.65 0.26 296.88); - --color-link-subtle: oklch(0.8 0.1 296.88); - --color-link-nav: oklch(1 0 0 / 0.8); - --color-username: oklch(0.65 0.26 296.88); /* Purple color for usernames */ + --color-black: oklch(0.15 0 0); + --color-primary: oklch(0.99 0.005 250); /* Pure white background */ + --color-secondary: oklch(1 0 0); /* White for cards */ + --color-tertiary: oklch(0.97 0.01 250); /* Very light gray for hover states */ + --color-accent: oklch(0.5 0.2 250); /* Blue accent */ + --color-heading: oklch(0.15 0 0 / 0.95); /* Near black text for headings */ + --color-text: oklch(0.25 0 0 / 0.9); /* Dark text for better readability */ + --color-text-muted: oklch(0.45 0 0 / 0.6); /* Muted text */ + --color-background: oklch(0.99 0.005 250); /* Pure white background */ + --color-border: oklch(0.9 0.01 250); /* Very light gray border */ + --color-link: oklch(0.5 0.2 250); /* Blue for links */ + --color-link-subtle: oklch(0.6 0.1 250); /* Lighter blue for subtle links */ + --color-link-nav: oklch(0.25 0 0 / 0.9); /* Dark text for nav links */ + --color-username: oklch(0.5 0.2 250); /* Blue for usernames */ --color-solved-row: color-mix( in oklab, - rgb(34 197 94) 15%, + rgb(34 197 94) 12%, transparent ); /* Light green for solved rows */ @@ -48,18 +52,19 @@ --spacing: 0.25rem; /* Shadows */ - --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); - --shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); - --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1); - --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); + --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.03); + --shadow: 0 1px 3px rgba(0, 0, 0, 0.05); + --shadow-md: 0 2px 4px rgba(0, 0, 0, 0.06); + --shadow-lg: 0 4px 8px rgba(0, 0, 0, 0.08); + --shadow-accent: 0 2px 8px rgba(0, 100, 255, 0.1); /* Border radius */ --rounded-sm: 0.125rem; - --rounded: 0.25rem; - --rounded-md: 0.375rem; - --rounded-lg: 0.5rem; - --rounded-xl: 0.75rem; - --rounded-2xl: 1rem; + --rounded: 0.125rem; + --rounded-md: 0.25rem; + --rounded-lg: 0.25rem; + --rounded-xl: 0.375rem; + --rounded-2xl: 0.5rem; --rounded-full: 9999px; } } @@ -74,6 +79,8 @@ body { background-color: var(--color-primary); color: var(--color-text); overscroll-behavior: none; + font-family: var(--font-sans); + line-height: 1.6; } #app { @@ -111,12 +118,13 @@ h2 { pre { font-size: 1rem; font-family: var(--font-mono); - background-color: color-mix(in oklab, black 30%, transparent); - border-radius: 0.25rem; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); - padding: 0.5rem; + background-color: color-mix(in oklab, var(--color-tertiary) 80%, transparent); + border-radius: 0.5rem; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); + padding: 1rem; overflow-x: auto; color: var(--color-heading); + border: 1px solid var(--color-border); } input, @@ -128,7 +136,10 @@ button { a { color: var(--color-text); text-decoration: none; - transition: color 0.2s ease; + transition: + color 0.2s ease, + transform 0.2s ease; + position: relative; } a:hover { @@ -141,6 +152,7 @@ a.link-accent, .content a, nav.main-nav a { color: var(--color-accent); + position: relative; } a.link-accent:hover, @@ -149,6 +161,20 @@ nav.main-nav a:hover { color: color-mix(in oklab, var(--color-accent) 80%, white); } +/* Simple hover effect for accent links */ +a.link-accent, +.content a { + text-decoration: none; + border-bottom: 1px solid transparent; + transition: border-color 0.2s ease; +} + +a.link-accent:hover, +.content a:hover { + border-bottom: 1px solid var(--color-accent); + text-decoration: none; +} + /* Table links - more subtle styling for dense information displays */ .table a, table a { @@ -190,10 +216,16 @@ img { /* Component styles */ .card { background-color: var(--color-secondary); - border-radius: 0.5rem; + border-radius: var(--rounded); padding: 1.5rem; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); margin-bottom: 1rem; + border: 1px solid var(--color-border); + transition: box-shadow 0.2s ease; +} + +.card:hover { + box-shadow: 0 3px 8px rgba(0, 0, 0, 0.08); } .table { @@ -204,25 +236,33 @@ img { .table th { text-align: left; padding: 0.75rem; - border-bottom: 1px solid var(--color-tertiary); + border-bottom: 1px solid var(--color-border); color: var(--color-heading); + font-weight: 600; } .table td { padding: 0.75rem; - border-bottom: 1px solid var(--color-tertiary); + border-bottom: 1px solid var(--color-border); } .table tr:hover { background-color: var(--color-tertiary); + transition: background-color 0.2s ease; } .badge { display: inline-block; - padding: 0.25rem 0.5rem; - border-radius: 0.25rem; + padding: 0.25rem 0.75rem; + border-radius: var(--rounded); font-size: 0.75rem; font-weight: 600; + box-shadow: var(--shadow-sm); + transition: box-shadow 0.2s ease; +} + +.badge:hover { + box-shadow: var(--shadow); } .badge-easy { diff --git a/src/lib/components/Header.svelte b/src/lib/components/Header.svelte index bf7cbd1..b10be2d 100644 --- a/src/lib/components/Header.svelte +++ b/src/lib/components/Header.svelte @@ -123,7 +123,9 @@ $: if ($page) { } -
+
{:else} {:else}