Parent
#2 (ADR 0001) — the contract this PR implements
What to build
Open a pull request from the fork (raawaa/guizang-ppt-skill) to upstream (op7418/guizang-ppt-skill) on main carrying the Style A + Style B parts of the deck-lock fix. The PR must NOT contain Style C / hongqiao content (Style C is fork-only and doesn't exist upstream).
Branch setup
git fetch upstream
git checkout -b fix/deck-lock-follows-transition upstream/main
Files in the PR (and ONLY these)
The helper snippet:
function deckLockMs() {
const deckEl = document.getElementById('deck');
if (!deckEl) return 60;
const cs = getComputedStyle(deckEl);
const d = cs.transitionDuration || '0s';
let max = 0;
for (const p of d.split(',')) {
const t = p.trim();
if (!t) continue;
if (t.endsWith('ms')) max = Math.max(max, parseFloat(t));
else if (t.endsWith('s')) max = Math.max(max, parseFloat(t) * 1000);
}
return Math.max(60, max);
}
Files explicitly NOT in the PR
docs/adr/0001-deck-lock-follows-transition.md — fork-only decision record; rationale goes in PR description instead
references/checklist.md — fork self-check; not part of upstream
assets/template-hongqiao.html — fork-only Style C
examples/虹桥-2026-Q1汇报/index.html — fork-only example
references/hongqiao-checklist.md — fork-only Style C checklist
references/layouts-hongqiao.md, references/themes-hongqiao.md — fork-only
scripts/validate-hongqiao-deck.mjs — fork-only
CONTEXT.md — fork-only glossary
PR title
fix(go): align deck lock with #deck transition-duration (60ms floor)
PR description (4 sections, in this order)
- Repro — Static mode (B key) → press → rapidly → 1st press eaten, 2nd works. Affects every upstream user.
- Root cause — One paragraph:
go() has a hardcoded 700ms lock; #deck's CSS transition-duration is 0s in static mode and .9s in motion mode. The two are not aligned.
- Fix — Read
getComputedStyle(deck).transitionDuration, take the max across comma-separated components, apply a 60ms floor. Why 60ms: blocks keyboard auto-repeat at ~30ms, doesn't block normal human keypress >120ms. Why CSS-driven (not __lowPowerMode-driven): CSS is the single source of truth for transition length; following the JS flag would duplicate config and break if someone customizes the transition.
- Evidence — Paste agent-browser before/after logs (a 4-press static-mode test where before shows
2/4 advances and after shows 4/4 advances).
Push & open
git push -u origin fix/deck-lock-follows-transition
gh pr create --repo op7418/guizang-ppt-skill \
--base main --head raawaa:fix/deck-lock-follows-transition \
--title "fix(go): align deck lock with #deck transition-duration (60ms floor)" \
--body-file <above-description>
Acceptance criteria
Blocked by
Parent
#2 (ADR 0001) — the contract this PR implements
What to build
Open a pull request from the fork (
raawaa/guizang-ppt-skill) to upstream (op7418/guizang-ppt-skill) onmaincarrying the Style A + Style B parts of the deck-lock fix. The PR must NOT contain Style C / hongqiao content (Style C is fork-only and doesn't exist upstream).Branch setup
Files in the PR (and ONLY these)
assets/template.html—go()change +deckLockMs()helper (from 修 Style A (电子杂志) · deck lock 联动 CSS 过渡,端到端 #4 Style A)assets/template-swiss.html—go()change +deckLockMs()helper (from 修 Style B (瑞士) · deck lock 联动 CSS 过渡,端到端 #5 Style B)The helper snippet:
Files explicitly NOT in the PR
docs/adr/0001-deck-lock-follows-transition.md— fork-only decision record; rationale goes in PR description insteadreferences/checklist.md— fork self-check; not part of upstreamassets/template-hongqiao.html— fork-only Style Cexamples/虹桥-2026-Q1汇报/index.html— fork-only examplereferences/hongqiao-checklist.md— fork-only Style C checklistreferences/layouts-hongqiao.md,references/themes-hongqiao.md— fork-onlyscripts/validate-hongqiao-deck.mjs— fork-onlyCONTEXT.md— fork-only glossaryPR title
fix(go): align deck lock with #deck transition-duration (60ms floor)PR description (4 sections, in this order)
go()has a hardcoded 700mslock;#deck's CSStransition-durationis0sin static mode and.9sin motion mode. The two are not aligned.getComputedStyle(deck).transitionDuration, take the max across comma-separated components, apply a 60ms floor. Why 60ms: blocks keyboard auto-repeat at ~30ms, doesn't block normal human keypress >120ms. Why CSS-driven (not__lowPowerMode-driven): CSS is the single source of truth for transition length; following the JS flag would duplicate config and break if someone customizes the transition.2/4advances and after shows4/4advances).Push & open
Acceptance criteria
fix/deck-lock-follows-transitionis based onupstream/mainassets/template.htmlandassets/template-swiss.htmldocs/adr/,references/checklist.md, any Style C / hongqiao / example fileop7418/guizang-ppt-skill:main(NOT the fork's main)Blocked by