From 0a01845db95621a02051221979f7f85ec7ea63d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Thu, 8 Oct 2026 23:59:12 -0400 Subject: [PATCH] Site: props text on one level, GitHub links --- site/e2e/touch.spec.ts | 6 ++---- site/src/main.ts | 10 +++++++--- site/src/style.css | 6 ++++++ .../edit/__pycache__/edit.cpython-314.pyc | Bin 14683 -> 14677 bytes site/video/edit/edit.py | 14 +++++++------- 5 files changed, 22 insertions(+), 14 deletions(-) diff --git a/site/e2e/touch.spec.ts b/site/e2e/touch.spec.ts index a98d9eb..8004b30 100644 --- a/site/e2e/touch.spec.ts +++ b/site/e2e/touch.spec.ts @@ -59,8 +59,7 @@ test("six links in reading order; reduced motion skips growth", async ({ page }) test("focus lifts one cell, shows the name, survives the mouse", async ({ page }) => { const rest = await top(page, "ElyDoc"); - await page.keyboard.press("Tab"); - await page.keyboard.press("Tab"); + for (let i = 0; i < 3; i++) await page.keyboard.press("Tab"); await expect(page.locator(".doors a").first()).toBeFocused(); expect(rest - (await top(page, "ElyDoc"))).toBeCloseTo(CELL, 0); await expect(caption(page, "ElyDoc")).toHaveCSS("opacity", "1"); @@ -132,8 +131,7 @@ test("a primary press sinks one cell; only a click starting on it opens", async test("holding Enter sinks the focused building until release", async ({ page }) => { const rest = await top(page, "ElyDoc"); - await page.keyboard.press("Tab"); - await page.keyboard.press("Tab"); + for (let i = 0; i < 3; i++) await page.keyboard.press("Tab"); await page.keyboard.down("Enter"); expect(await top(page, "ElyDoc")).toBeCloseTo(rest, 0); await expect(page).toHaveURL(/#elydoc$/); diff --git a/site/src/main.ts b/site/src/main.ts index 24bced4..f0976f1 100644 --- a/site/src/main.ts +++ b/site/src/main.ts @@ -7,7 +7,8 @@ import { touch } from "./touch.ts"; import { regions, reveal } from "./regions.ts"; import { said, speak, type Lang } from "./text.ts"; -const RELEASE = "https://github.com/ZacharyZhang-NY/ElyOffice/releases/download/v0.1.0"; +const REPO = "https://github.com/ZacharyZhang-NY/ElyOffice"; +const RELEASE = `${REPO}/releases/download/v0.1.0`; const app = document.querySelector("#app"); if (!app) throw new Error("index.html has no #app"); @@ -27,7 +28,10 @@ const svg = stage(built.flat()); svg.classList.add("grow", "seen"); svg.setAttribute("aria-hidden", "true"); host.append(svg); -hero.append(title, said("p", "tagline"), said("p", "platforms"), host); +const github = document.createElement("a"); +github.href = REPO; +github.textContent = "GitHub"; +hero.append(title, said("p", "tagline"), said("p", "platforms"), github, host); touch(host, svg, parts); const sections = regions(); @@ -46,7 +50,7 @@ for (const p of apps) { list.append(li); } const source = said("a", "source"); -source.href = `${RELEASE}/ElyOffice-0.1.0-source.tar.gz`; +source.href = REPO; const li = document.createElement("li"); li.append(source); list.append(li); diff --git a/site/src/style.css b/site/src/style.css index edc159e..c47dbe1 100644 --- a/site/src/style.css +++ b/site/src/style.css @@ -54,6 +54,10 @@ button:focus-visible { text-align: center; } +.hero a { + font-size: 1.0625rem; +} + .hero .model { margin-top: 6rem; } @@ -126,7 +130,9 @@ button:focus-visible { .prop { display: grid; + grid-template-rows: 1fr auto; justify-items: center; + align-items: end; gap: 2rem; text-align: center; } diff --git a/site/video/edit/__pycache__/edit.cpython-314.pyc b/site/video/edit/__pycache__/edit.cpython-314.pyc index c0505636e9095a153e2e4085168fe25284c56951..64e68f300965af74ccf1c65d92e4e82cdc274348 100644 GIT binary patch delta 167 zcmcazbhU_An~#@^0SE%qPGsqC&Qk~VWudeUYSr4mN|>#r-b?1fD3q5R`c#EB8WX-i5sU51cHV Rg`2Nxn(;FxPUf-n2LSWiJO2Ox delta 173 zcmcawbi0UGn~#@^0SG>(p2#xU$ZN*J!CszNl$V*8KG~C{K`8V{@)_k5C5Q7a2!~#X zO}x&MwD~rRx-4VhWM(C8mc-JM{LO|+C5-$z7jg?O$-(N;d>ZOjY57IDi6yomeUo>qZ(~f{T%_T~C=qZWFz7-+@P**43)y)WvhpwF W7kuDk;VjyGUek=9F?lkZr9S{EEkC3H diff --git a/site/video/edit/edit.py b/site/video/edit/edit.py index 4426a76..ab3a327 100644 --- a/site/video/edit/edit.py +++ b/site/video/edit/edit.py @@ -19,7 +19,7 @@ RGB_IN = "scale=in_color_matrix=bt709:in_range=tv,format=rgb24" def run(args): print("+", " ".join(str(a) for a in args[:6]), "...", flush=True) - subprocess.run(["ffmpeg", "-hide_banner", "-v", "warning", "-y", *map(str, args)], check=True) + subprocess.run(["ffmpeg", "-hide_banner", "-v", "error", "-y", *map(str, args)], check=True) def lerp(points, x): @@ -58,7 +58,7 @@ def piece_chain(label, piece, start, f0, f1, out): f"[{label}:v]trim=start={u0:.4f}:end={u1:.4f},setpts=PTS-STARTPTS," f"setpts='({pts}-{f0 / FPS:.6f})/TB',fps={FPS}:start_time=0," f"trim=end_frame={n},tpad=stop_mode=clone:stop={n},trim=end_frame={n},setpts=N/{FPS}/TB," - f"{RGB_IN}[{out}]" + f"{RGB_IN},setsar=1[{out}]" ) @@ -108,8 +108,8 @@ def plate_chain(scene, rec, k, out): ) return ( f"{rec},scale=800:450:flags=area,scale=1912:1072:flags=bicubic,format=rgba," - f"pad=1920:1080:4:4:color=black@0,perspective={pins}:sense=destination:eval=frame:interpolation=cubic" - f"{fades}[pin];[{k}:v]format=rgba[bg];[bg][pin]overlay=format=auto:shortest=1,format=rgb24,setsar=1[{out}]" + f"pad=1920:1080:4:4:color=black@0,setsar=1,perspective={pins}:sense=destination:eval=frame:interpolation=cubic" + f"{fades}[pin];[{k}:v]format=rgba[bg];[bg][pin]overlay=format=rgb:shortest=1,format=rgb24,setsar=1[{out}]" ) @@ -126,10 +126,10 @@ def full_chain(s, plan, rec, n, k, out): rise = "round(12*pow(max(0,1-t/0.2),2))" return ( f"{rec},perspective={quad}:sense=source:eval=frame:interpolation=cubic," - f"scale={w['w']}:{w['h']}:flags=lanczos,pad=1920:1080:{w['x']}:{w['y']}:color=0xfbfbfa,format=rgba[lb];" - f"[{k + 1}:v]format=rgba[fr];[lb][fr]overlay=format=auto:shortest=0[lf];" + f"scale={w['w']}:{w['h']}:flags=lanczos,pad=1920:1080:{w['x']}:{w['y']}:color=0xfbfbfa,setsar=1,format=rgba[lb];" + f"[{k + 1}:v]format=rgba[fr];[lb][fr]overlay=format=rgb:shortest=0[lf];" f"[{k + 2}:v]format=rgba,fade=in:st=0:d=0.2:alpha=1[cap];" - f"[lf][cap]overlay=x=0:y='{rise}':format=auto:eval=frame,trim=end_frame={n},format=rgb24,setsar=1[{out}]" + f"[lf][cap]overlay=x=0:y='{rise}':format=rgb:eval=frame,trim=end_frame={n},format=rgb24,setsar=1[{out}]" )