From e25eb9a0986b95eddc80cec33b3d2ca3a4d685bc Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 2 Sep 2026 20:39:18 +0000 Subject: [PATCH] =?UTF-8?q?fix(gas):=20=E6=AD=A3=E6=9C=AC=E9=85=8D?= =?UTF-8?q?=E5=B8=83=E3=81=A7=E4=BD=9C=E3=82=8A=E7=9B=B4=E3=81=95=E3=82=8C?= =?UTF-8?q?=E3=81=AA=E3=81=8B=E3=81=A3=E3=81=9F=20giga=5Flinks.html=20?= =?UTF-8?q?=E3=82=92=E7=9B=B4=E3=81=97=E3=80=81=E6=AD=A3=E6=9C=AC=E3=81=AE?= =?UTF-8?q?=E5=86=99=E3=81=97=E3=82=92=E6=96=B0=E3=81=97=E3=81=8F=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 何が起きていたか - 2026-08-30 の正本配布で web/giga-app-links.js が変わったのに、GAS へ焼きこむ giga_links.html が作り直されないまま main へ運ばれていた。`node tools/build-app-links.mjs --check` が赤かった - tools/build-sw.mjs の入口判定が `file://${process.argv[1]}` の文字列比較で、空白や日本語を含む パスでは main() が呼ばれず、何も見ないまま exit 0 になっていた(--check の緑が嘘になる) - tools/check-secrets.mjs の入口判定も同じ文字列比較で、パスによっては何も見ずに「秘密の直書きはありません」の側へ倒れていた どう直したか - giga_links.html: web/giga-app-links.js から作り直した(node tools/build-app-links.mjs) - tools/build-sw.mjs: 入口判定を pathToFileURL に直した正本(standards/sw/build-sw-static.mjs)の写し - tools/check-secrets.mjs: 入口判定を pathToFileURL に直した正本(standards/lib/check-secrets.mjs)の写し 正本の側の直しは GIGAyama.github.io の同じ枝(claude/gigayama-system-review-xm7tz1)にある。 ここに在る検査(check-drift・gate・build-sw --check)はすべて通してある。 Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_012McVFkty7uhkRRjq2q4uB1 --- giga-links.html | 50 +++++++++++++++++++++++++++++++++++------ tools/build-sw.mjs | 8 ++++++- tools/check-secrets.mjs | 8 ++++++- 3 files changed, 57 insertions(+), 9 deletions(-) diff --git a/giga-links.html b/giga-links.html index f42cc77..5e85931 100644 --- a/giga-links.html +++ b/giga-links.html @@ -94,6 +94,21 @@ * * 並び順は、書いた順ではなく下の LINKS の順になる。 * + * ── 暗い画面のアプリ ───────────────────────────────── + * + * 既定は端末の設定(prefers-color-scheme)に従う。それで足りるのは、 + * アプリの地の色も端末の設定に従っているときだけ。 + * + * + * window.GIGA_APP_LINKS = { theme: 'dark' }; + * + * ⚠️ 端末の設定が light でも地が暗いアプリがある(しりとりファイターは + * を宣言したうえで + * #170f33 を塗っている)。そこで既定のまま置くと、暗い地に暗い字が + * 載って**リンクがあることに気づけない**。Shadow DOM なのでアプリ側の + * CSS は届かず、アプリの側では直せない。地が固定のアプリは + * theme を明示すること。'light' も同じように書ける。 + * * 置き場所が無ければ、画面のいちばん下に控えめな行として出す。 * **フッターを持たないアプリでも行き先ができる**ようにするため。 * 「フッターに足して」と場所で頼んだせいで 9 本が取り残された、という @@ -215,6 +230,9 @@ return { slug: conf.slug || data.slug || slot.slug || '', links: conf.links || data.links || slot.links || '', + /* 'dark' / 'light' を明示したときだけ、端末の設定より優先する。 + 書かなければ prefers-color-scheme に従う(既定)。 */ + theme: conf.theme || data.theme || slot.theme || '', hostname: window.location && window.location.hostname }; } @@ -260,9 +278,21 @@ /* 絵だけになると、文字が添えられていたときより読み取りにくい。少し大きくする。 */ 'svg{inline-size:18px;block-size:18px}}', /* 暗い画面の端末でも読めるようにする。アプリ側の指定は Shadow DOM で - 届かないので、こちらで両方を持つ */ + 届かないので、こちらで両方を持つ。 + ⚠️ :host(.giga-app-links--light) を外さないこと。地の色が固定で明るい + アプリが theme="light" と書いたとき、端末の設定が dark だと + 明るい地に明るい字が載る。 */ '@media (prefers-color-scheme: dark){', - 'a{color:#c3ccdd}a:hover{background:rgba(150,190,255,.16);color:#eaf1ff}}', + ':host(:not(.giga-app-links--light)) a{color:#c3ccdd}', + ':host(:not(.giga-app-links--light)) a:hover{background:rgba(150,190,255,.16);color:#eaf1ff}}', + /* theme を明示したときは、端末の設定より優先する。 + :host(.…) a のほうが、上の a{} より詳しいので後ろに書かなくても勝つが、 + 読む順で分かるように、こちらも後ろへ置いてある。 */ + ':host(.giga-app-links--dark) a{color:#c3ccdd}', + ':host(.giga-app-links--dark) a:hover{background:rgba(150,190,255,.16);color:#eaf1ff}', + ':host(.giga-app-links--dark) a:focus-visible{outline-color:#8ab4f8}', + ':host(.giga-app-links--light) a{color:#42506b}', + ':host(.giga-app-links--light) a:hover{background:rgba(26,115,232,.10);color:#1a4fa8}', '@media (prefers-reduced-motion: reduce){a{transition:none}}', /* 紙にはリンクを写しても押せない。当たり判定は要らないが、文字は戻す (絵だけが並んだ紙は、あとから読んで何のことか分からない)。 */ @@ -294,11 +324,15 @@ return svg; } - function build(items) { + function build(items, theme) { var host = document.createElement(TAG); var root = host.attachShadow ? host.attachShadow({ mode: 'open' }) : null; if (!root) return null; // Shadow DOM が無い環境では出さない + /* 地の色が端末の設定に従わないアプリだけが書く。書かなければ + prefers-color-scheme のまま(既定)。知らない値は既定に落とす。 */ + if (theme === 'dark' || theme === 'light') host.className = 'giga-app-links--' + theme; + /* ⚠️