feat(web): hide light/dark toggle in Frutiger Aero mode (v2.2.21)

This commit is contained in:
Martin Dvořák 2026-10-15 23:43:15 +02:00
commit e4530afd98
9 changed files with 32 additions and 24 deletions

View file

@ -56,7 +56,7 @@ frosted-glass **web** site, and an alternate KDE/Plasma **desktop simulation**
utilities in the components (Tailwind is present via PostCSS but the look is utilities in the components (Tailwind is present via PostCSS but the look is
hand-written CSS). hand-written CSS).
- Path alias: `@/*` → `src/*`. - Path alias: `@/*` → `src/*`.
- Version: `2.2.20` (see `package.json`). - Version: `2.2.21` (see `package.json`).
### Scripts ### Scripts
```bash ```bash
@ -180,7 +180,8 @@ Themes: `web` = default frosted-glass website (sidebar + content, light/dark),
website background switches to `public/frutigerbackground.png`, floating glossy website background switches to `public/frutigerbackground.png`, floating glossy
bubbles (`.web-aero-bubbles` / `.web-aero-bubble`) rise across the backdrop, and bubbles (`.web-aero-bubbles` / `.web-aero-bubble`) rise across the backdrop, and
all `.glass` panels and interactive controls become crystal-clear 3D bevel-rimmed all `.glass` panels and interactive controls become crystal-clear 3D bevel-rimmed
liquid glass. The two remaining feature panels (`.web-split`) stretch liquid glass (the `.web-ctl-scheme` light/dark switch is hidden in aero mode —
it's a fixed bright-sky look). The two remaining feature panels (`.web-split`) stretch
to equal height and share a fixed `16 / 10` `.fw` window (the `FeatureWindow` to equal height and share a fixed `16 / 10` `.fw` window (the `FeatureWindow`
component) — decorative, **asset-free CSS mock-ups** rather than screenshots: component) — decorative, **asset-free CSS mock-ups** rather than screenshots:
Revival Inc. is a little necromancy game scene (night sky, moon, tombstones, Revival Inc. is a little necromancy game scene (night sky, moon, tombstones,

View file

@ -47,7 +47,8 @@ more.
`freezmo_aero.png` and transforms the web shell into a Frutiger Aero theme: `freezmo_aero.png` and transforms the web shell into a Frutiger Aero theme:
`frutigerbackground.png` as the full-screen backdrop, floating glossy water/soap bubbles `frutigerbackground.png` as the full-screen backdrop, floating glossy water/soap bubbles
across the viewport, and crystal-clear 3D bevel-rimmed liquid-glass panels and buttons across the viewport, and crystal-clear 3D bevel-rimmed liquid-glass panels and buttons
(leaving the desktop mode untouched). with subtle cyan refractive rims. The light/dark switch is hidden while the mode is
active (it's a fixed bright-sky look), and the desktop mode is left untouched.
- **Draggable desktop icons** — free placement that snaps to a measured grid, one icon per - **Draggable desktop icons** — free placement that snaps to a measured grid, one icon per
cell, with a follow-the-cursor drag ghost. Icons shrink on cramped viewports so they never cell, with a follow-the-cursor drag ghost. Icons shrink on cramped viewports so they never
collide. collide.
@ -92,7 +93,7 @@ more.
icons (`public/freezmo.png`, `public/freezmo_aero.png`), the Frutiger Aero wallpaper icons (`public/freezmo.png`, `public/freezmo_aero.png`), the Frutiger Aero wallpaper
(`public/frutigerbackground.png`), the Joker easter egg and the Gentoo mark; all cards, (`public/frutigerbackground.png`), the Joker easter egg and the Gentoo mark; all cards,
feature/app previews and the desktop wallpaper are CSS. feature/app previews and the desktop wallpaper are CSS.
- **Version:** `2.2.20` (see `package.json`) - **Version:** `2.2.21` (see `package.json`)
- **Dependencies:** `npm audit` reports **0 vulnerabilities**. `next` is kept at a patched - **Dependencies:** `npm audit` reports **0 vulnerabilities**. `next` is kept at a patched
release (`>=16.3.6`) for the `next/og` RCE, and `brace-expansion` is force-upgraded via release (`>=16.3.6`) for the `next/og` RCE, and `brace-expansion` is force-upgraded via
`overrides`. `braces` (a transitive ESLint/`fast-glob` dependency) has **no upstream fix**, `overrides`. `braces` (a transitive ESLint/`fast-glob` dependency) has **no upstream fix**,

View file

@ -1,7 +1,7 @@
# Graph Report - dvorakmortonxd.dev (2026-10-15) # Graph Report - dvorakmortonxd.dev (2026-10-15)
## Corpus Check ## Corpus Check
- 43 files · ~319,246 words - 43 files · ~319,284 words
- Verdict: corpus is large enough that graph structure adds value. - Verdict: corpus is large enough that graph structure adds value.
- Unclassified: 19 file(s) not represented in the graph (top: (none) 6, .ttf 3, .css 3) - Unclassified: 19 file(s) not represented in the graph (top: (none) 6, .ttf 3, .css 3)
@ -11,7 +11,7 @@
- Token cost: 0 input · 0 output - Token cost: 0 input · 0 output
## Graph Freshness ## Graph Freshness
- Built from commit: `20f67910` - Built from commit: `15ef4db7`
- Run `git rev-parse HEAD` and compare to check if the graph is stale. - Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost). - Run `graphify update .` after code changes (no API cost).

File diff suppressed because one or more lines are too long

View file

@ -24,9 +24,9 @@
"semantic_hash": "03388a201be8750ddcddb14dfbc34411" "semantic_hash": "03388a201be8750ddcddb14dfbc34411"
}, },
"package.json": { "package.json": {
"mtime": 1792100351.2297838, "mtime": 1792100566.4931674,
"seen": 1792100379.3572893, "seen": 1792100581.439811,
"ast_hash": "b6d9db3bc88cf741e18ae6bb444680c5", "ast_hash": "fceb2aeaea53cfa26e74f36ec2cf4e7c",
"semantic_hash": "" "semantic_hash": ""
}, },
"postcss.config.mjs": { "postcss.config.mjs": {
@ -114,9 +114,9 @@
"semantic_hash": "20e25c727b4bb982e5a22d65efece143" "semantic_hash": "20e25c727b4bb982e5a22d65efece143"
}, },
"src/app/components/WebLayout.tsx": { "src/app/components/WebLayout.tsx": {
"mtime": 1792100354.0578282, "mtime": 1792100566.4931674,
"seen": 1792100379.3573277, "seen": 1792100581.4398491,
"ast_hash": "ff608f378e130581fd55f76c25a4acbf", "ast_hash": "4c5f105a49587f804c8a59d17029e263",
"semantic_hash": "" "semantic_hash": ""
}, },
"src/app/components/WinWindow.tsx": { "src/app/components/WinWindow.tsx": {
@ -240,9 +240,9 @@
"semantic_hash": "b81dea2175efa2b0b6c38451ab5a4bbd" "semantic_hash": "b81dea2175efa2b0b6c38451ab5a4bbd"
}, },
"README.md": { "README.md": {
"mtime": 1792100354.619837, "mtime": 1792100566.5121677,
"seen": 1792100379.3573804, "seen": 1792100581.439904,
"ast_hash": "f4315ab30a159fdebb81ec7f56ccaa23", "ast_hash": "374e4ca7cda87fbbe327cd53df378839",
"semantic_hash": "" "semantic_hash": ""
}, },
"public/llms.txt": { "public/llms.txt": {
@ -366,9 +366,9 @@
"semantic_hash": "6f69e16823f10d9c7af1625eff2b32e8" "semantic_hash": "6f69e16823f10d9c7af1625eff2b32e8"
}, },
"AGENTS.md": { "AGENTS.md": {
"mtime": 1792100355.2478468, "mtime": 1792100572.9662693,
"seen": 1792100379.3573759, "seen": 1792100581.439899,
"ast_hash": "48b0f3195cfda4678fd15ea5a3c86883", "ast_hash": "13b85d5f3f9e7e69a7c3ec4862c4326d",
"semantic_hash": "" "semantic_hash": ""
}, },
"public/freezmo_aero.png": { "public/freezmo_aero.png": {

4
package-lock.json generated
View file

@ -1,12 +1,12 @@
{ {
"name": "dvorakmortonxd", "name": "dvorakmortonxd",
"version": "2.2.20", "version": "2.2.21",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "dvorakmortonxd", "name": "dvorakmortonxd",
"version": "2.2.20", "version": "2.2.21",
"dependencies": { "dependencies": {
"next": "^16.3.8", "next": "^16.3.8",
"react": "^19.3.0", "react": "^19.3.0",

View file

@ -1,6 +1,6 @@
{ {
"name": "dvorakmortonxd", "name": "dvorakmortonxd",
"version": "2.2.20", "version": "2.2.21",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "node scripts/dev-server.mjs", "dev": "node scripts/dev-server.mjs",

View file

@ -242,7 +242,7 @@ export default function WebLayout() {
<div className="web-controls"> <div className="web-controls">
<button <button
type="button" type="button"
className="web-ctl" className="web-ctl web-ctl-scheme"
onClick={toggleScheme} onClick={toggleScheme}
aria-pressed={dark} aria-pressed={dark}
title="Toggle light / dark mode" title="Toggle light / dark mode"
@ -421,7 +421,7 @@ export default function WebLayout() {
</Section> </Section>
<footer className="web-footer glass"> <footer className="web-footer glass">
<span className="web-footer-label">v2.2.20</span> <span className="web-footer-label">v2.2.21</span>
© 2025-2026 Martin Dvořák. All rights reserved (not really I dont care, just © 2025-2026 Martin Dvořák. All rights reserved (not really I dont care, just
follow the GPL3.0 License) follow the GPL3.0 License)
</footer> </footer>

View file

@ -2017,6 +2017,12 @@ html[data-theme="web"][data-aero="true"] body {
0 2px 8px rgba(0, 16, 42, 0.45); 0 2px 8px rgba(0, 16, 42, 0.45);
} }
/* Frutiger Aero is a fixed bright-sky look — the light/dark switch has no
meaning there, so it's hidden while the mode is active. */
html[data-theme="web"][data-aero="true"] .web-ctl-scheme {
display: none;
}
html[data-theme="web"][data-aero="true"] .web-bg { html[data-theme="web"][data-aero="true"] .web-bg {
background: background:
radial-gradient(56rem 38rem at 86% 6%, rgba(255, 255, 255, 0.16), transparent 65%), radial-gradient(56rem 38rem at 86% 6%, rgba(255, 255, 255, 0.16), transparent 65%),