From 757ef2f34b795888fae8020b9f0accf30d5f15f1 Mon Sep 17 00:00:00 2001 From: dtoro Date: Mon, 3 Aug 2026 22:03:24 +0200 Subject: [PATCH] feat(web): adopt cyberspace terminal aesthetic + dithered images Rebrand light/dark themes to the cyberspace.online look: warm cream-on-black palette (light/dark are exact inverses), self-hosted JetBrains Mono + VT323, square corners, border-driven surfaces with no soft shadows. Adds a terminal design-system CSS layer (DOS double-border modals with hatched corner, fg focus, inversion-on-hover), a theme-aware (Atkinson-dithered canvas with img fallback), and unifies desktop icons, taskbar, window controls, pills and links under one idiom. Pins window titlebars to a fixed height and switches chat auto-scroll off scrollIntoView to avoid titlebar reflow. VERSION 0.15.1 -> 0.16.0 --- VERSION | 2 +- web/index.html | 6 - web/public/fonts/JetBrainsMono-Bold.woff2 | Bin 0 -> 21908 bytes web/public/fonts/JetBrainsMono-Regular.woff2 | Bin 0 -> 21168 bytes web/public/fonts/VT323-Regular.woff2 | Bin 0 -> 17936 bytes web/src/app.css | 374 ++++++++++++++---- web/src/lib/components/ChatThread.svelte | 11 +- .../lib/components/ConfigBackground.svelte | 6 +- web/src/lib/components/FleetMap.svelte | 11 +- web/src/lib/components/RasterImage.svelte | 206 ++++++++++ .../desktop-shell/DesktopIcon.svelte | 19 +- .../components/desktop-shell/Taskbar.svelte | 24 +- .../desktop-shell/WindowLayer.svelte | 12 +- .../components/knowledge/WikiOverview.svelte | 2 +- .../components/knowledge/WikiReader.svelte | 2 +- web/src/lib/stores/theme.svelte.ts | 4 +- web/src/pages/Config.svelte | 8 +- web/src/pages/Overview.svelte | 6 +- 18 files changed, 554 insertions(+), 139 deletions(-) create mode 100644 web/public/fonts/JetBrainsMono-Bold.woff2 create mode 100644 web/public/fonts/JetBrainsMono-Regular.woff2 create mode 100644 web/public/fonts/VT323-Regular.woff2 create mode 100644 web/src/lib/components/RasterImage.svelte diff --git a/VERSION b/VERSION index e815b86..04a373e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.15.1 +0.16.0 diff --git a/web/index.html b/web/index.html index 63aff8c..578fefc 100644 --- a/web/index.html +++ b/web/index.html @@ -4,12 +4,6 @@ Oikos - - - diff --git a/web/public/fonts/JetBrainsMono-Bold.woff2 b/web/public/fonts/JetBrainsMono-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3a4e333fc9316f9989e16af6788bf1fc788c7084 GIT binary patch literal 21908 zcmV)HK)t_rPew8T0RR9109BL#5C8xG0O5oH097vl0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/web/public/fonts/JetBrainsMono-Regular.woff2 b/web/public/fonts/JetBrainsMono-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..585887339efd032b6b715466ae72d86e306bec79 GIT binary patch literal 21168 zcmV)FK)=6tPew8T0RR9108+335C8xG0O80008&f<0RR9100000000000000000000 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 T=ND-DucNQ`tADQ-AuI&|D5jKI literal 0 HcmV?d00001 diff --git a/web/public/fonts/VT323-Regular.woff2 b/web/public/fonts/VT323-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..fd760b5bad0f5b31d4b47b8e3bf333b16f4a69eb GIT binary patch literal 17936 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 let scrolledUp = $state(false) let container = $state(null) @@ -150,12 +149,17 @@ } // Auto-scroll to bottom on new messages (or a freshly-raised question) — - // unless user scrolled up to read. + // unless user scrolled up to read. Sets scrollTop on the messages container + // directly instead of `scrollIntoView`, which walks ancestors and forces a + // reflow that can momentarily perturb the window titlebar height. $effect(() => { void messages void question if (streaming || !scrolledUp) { - setTimeout(() => messagesEnd?.scrollIntoView({ behavior: 'smooth' }), 50) + setTimeout( + () => container?.scrollTo({ top: container.scrollHeight, behavior: 'smooth' }), + 50 + ) } }) @@ -326,7 +330,6 @@ {#if question} {/if} -
diff --git a/web/src/lib/components/ConfigBackground.svelte b/web/src/lib/components/ConfigBackground.svelte index 55fb7e1..6835210 100644 --- a/web/src/lib/components/ConfigBackground.svelte +++ b/web/src/lib/components/ConfigBackground.svelte @@ -106,7 +106,7 @@ // pulse brightness const alpha = p.pulse * (0.35 + 0.15 * Math.sin(t * 1.2 + p.phase)) - ctx.fillStyle = dark ? `rgba(140,175,230,${alpha})` : `rgba(60,90,140,${alpha})` + ctx.fillStyle = dark ? `rgba(168,153,132,${alpha})` : `rgba(58,58,58,${alpha})` ctx.beginPath() ctx.arc(p.x, p.y, p.r, 0, Math.PI * 2) ctx.fill() @@ -123,7 +123,7 @@ const dist = dx * dx + dy * dy if (dist < CONNECT_DIST * CONNECT_DIST) { const alpha = (1 - Math.sqrt(dist) / CONNECT_DIST) * 0.18 - ctx.strokeStyle = dark ? `rgba(140,175,230,${alpha})` : `rgba(60,90,140,${alpha})` + ctx.strokeStyle = dark ? `rgba(168,153,132,${alpha})` : `rgba(58,58,58,${alpha})` ctx.beginPath() ctx.moveTo(a.x, a.y) ctx.lineTo(b.x, b.y) @@ -136,7 +136,7 @@ const cx = w / 2, cy = h / 2 const scrim = ctx.createRadialGradient(cx, cy, 0, cx, cy, Math.hypot(cx, cy)) - const base = dark ? '13,17,23' : '255,255,255' + const base = dark ? '0,0,0' : '239,229,192' scrim.addColorStop(0, `rgba(${base},0.72)`) scrim.addColorStop(0.35, `rgba(${base},0.40)`) scrim.addColorStop(0.65, `rgba(${base},0.08)`) diff --git a/web/src/lib/components/FleetMap.svelte b/web/src/lib/components/FleetMap.svelte index b2e8422..fb069ec 100644 --- a/web/src/lib/components/FleetMap.svelte +++ b/web/src/lib/components/FleetMap.svelte @@ -1101,7 +1101,7 @@ font-size: 12px; font-weight: 500; border: 1px solid var(--border); - border-radius: 999px; + border-radius: 0; background: transparent; color: var(--muted-foreground); cursor: pointer; @@ -1114,9 +1114,12 @@ border-color: var(--primary); } .chip.on { - color: var(--foreground); - background: var(--secondary); - border-color: var(--primary); + color: var(--background); + background: var(--foreground); + border-color: var(--foreground); + } + .chip.on b { + color: var(--background); } .chip .dot { width: 8px; diff --git a/web/src/lib/components/RasterImage.svelte b/web/src/lib/components/RasterImage.svelte new file mode 100644 index 0000000..964b1ff --- /dev/null +++ b/web/src/lib/components/RasterImage.svelte @@ -0,0 +1,206 @@ + + + + +
+ {#if showSkeleton} + + {/if} + {#if !plain} + + {/if} + { + tainted = true + loaded = true + }} + /> +
+ + diff --git a/web/src/lib/components/desktop-shell/DesktopIcon.svelte b/web/src/lib/components/desktop-shell/DesktopIcon.svelte index fa6be89..e0fc510 100644 --- a/web/src/lib/components/desktop-shell/DesktopIcon.svelte +++ b/web/src/lib/components/desktop-shell/DesktopIcon.svelte @@ -80,25 +80,30 @@ diff --git a/web/src/lib/components/desktop-shell/Taskbar.svelte b/web/src/lib/components/desktop-shell/Taskbar.svelte index 285033d..3fda2a8 100644 --- a/web/src/lib/components/desktop-shell/Taskbar.svelte +++ b/web/src/lib/components/desktop-shell/Taskbar.svelte @@ -53,10 +53,10 @@ } -
+
- {VERSION} + {VERSION}
diff --git a/web/src/lib/components/desktop-shell/WindowLayer.svelte b/web/src/lib/components/desktop-shell/WindowLayer.svelte index 9255f07..4eeb28c 100644 --- a/web/src/lib/components/desktop-shell/WindowLayer.svelte +++ b/web/src/lib/components/desktop-shell/WindowLayer.svelte @@ -67,18 +67,18 @@
{win.title} -
+