feat: Added @keyframes pageEnter (opacity 0→1, translateY 8→0, 250ms ea…
- "frontend/src/App.css" GSD-Task: S03/T02
This commit is contained in:
parent
4e12689523
commit
ec7e07c705
4 changed files with 129 additions and 1 deletions
|
|
@ -22,7 +22,7 @@ Steps:
|
||||||
- Estimate: 30m
|
- Estimate: 30m
|
||||||
- Files: frontend/src/utils/catSlug.ts, frontend/src/pages/TopicsBrowse.tsx, frontend/src/pages/SubTopicPage.tsx, frontend/src/pages/SearchResults.tsx, frontend/src/App.css
|
- Files: frontend/src/utils/catSlug.ts, frontend/src/pages/TopicsBrowse.tsx, frontend/src/pages/SubTopicPage.tsx, frontend/src/pages/SearchResults.tsx, frontend/src/App.css
|
||||||
- Verify: cd frontend && npx tsc --noEmit && npm run build
|
- Verify: cd frontend && npx tsc --noEmit && npm run build
|
||||||
- [ ] **T02: Add CSS page-enter fade-in transitions to all pages** — Add a subtle CSS-only fade-in animation that triggers when page components mount. No libraries needed — a @keyframes animation applied to page wrapper elements.
|
- [x] **T02: Added @keyframes pageEnter (opacity 0→1, translateY 8→0, 250ms ease-out) applied to all 7 public page wrapper classes via CSS selector list** — Add a subtle CSS-only fade-in animation that triggers when page components mount. No libraries needed — a @keyframes animation applied to page wrapper elements.
|
||||||
|
|
||||||
Steps:
|
Steps:
|
||||||
1. In `frontend/src/App.css`, add a `@keyframes pageEnter` animation: opacity 0→1 and translateY(8px→0) over 250ms ease-out.
|
1. In `frontend/src/App.css`, add a `@keyframes pageEnter` animation: opacity 0→1 and translateY(8px→0) over 250ms ease-out.
|
||||||
|
|
|
||||||
30
.gsd/milestones/M010/slices/S03/tasks/T01-VERIFY.json
Normal file
30
.gsd/milestones/M010/slices/S03/tasks/T01-VERIFY.json
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"taskId": "T01",
|
||||||
|
"unitId": "M010/S03/T01",
|
||||||
|
"timestamp": 1774938366406,
|
||||||
|
"passed": false,
|
||||||
|
"discoverySource": "task-plan",
|
||||||
|
"checks": [
|
||||||
|
{
|
||||||
|
"command": "cd frontend",
|
||||||
|
"exitCode": 0,
|
||||||
|
"durationMs": 8,
|
||||||
|
"verdict": "pass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "npx tsc --noEmit",
|
||||||
|
"exitCode": 1,
|
||||||
|
"durationMs": 842,
|
||||||
|
"verdict": "fail"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "npm run build",
|
||||||
|
"exitCode": 254,
|
||||||
|
"durationMs": 100,
|
||||||
|
"verdict": "fail"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"retryAttempt": 1,
|
||||||
|
"maxRetries": 2
|
||||||
|
}
|
||||||
75
.gsd/milestones/M010/slices/S03/tasks/T02-SUMMARY.md
Normal file
75
.gsd/milestones/M010/slices/S03/tasks/T02-SUMMARY.md
Normal file
|
|
@ -0,0 +1,75 @@
|
||||||
|
---
|
||||||
|
id: T02
|
||||||
|
parent: S03
|
||||||
|
milestone: M010
|
||||||
|
provides: []
|
||||||
|
requires: []
|
||||||
|
affects: []
|
||||||
|
key_files: ["frontend/src/App.css"]
|
||||||
|
key_decisions: ["Applied animation via CSS selector list targeting existing page wrapper classes rather than adding .page-enter className to each TSX file"]
|
||||||
|
patterns_established: []
|
||||||
|
drill_down_paths: []
|
||||||
|
observability_surfaces: []
|
||||||
|
duration: ""
|
||||||
|
verification_result: "TypeScript compilation (tsc --noEmit) and Vite production build both passed with zero errors."
|
||||||
|
completed_at: 2026-03-31T06:27:10.192Z
|
||||||
|
blocker_discovered: false
|
||||||
|
---
|
||||||
|
|
||||||
|
# T02: Added @keyframes pageEnter (opacity 0→1, translateY 8→0, 250ms ease-out) applied to all 7 public page wrapper classes via CSS selector list
|
||||||
|
|
||||||
|
> Added @keyframes pageEnter (opacity 0→1, translateY 8→0, 250ms ease-out) applied to all 7 public page wrapper classes via CSS selector list
|
||||||
|
|
||||||
|
## What Happened
|
||||||
|
---
|
||||||
|
id: T02
|
||||||
|
parent: S03
|
||||||
|
milestone: M010
|
||||||
|
key_files:
|
||||||
|
- frontend/src/App.css
|
||||||
|
key_decisions:
|
||||||
|
- Applied animation via CSS selector list targeting existing page wrapper classes rather than adding .page-enter className to each TSX file
|
||||||
|
duration: ""
|
||||||
|
verification_result: passed
|
||||||
|
completed_at: 2026-03-31T06:27:10.192Z
|
||||||
|
blocker_discovered: false
|
||||||
|
---
|
||||||
|
|
||||||
|
# T02: Added @keyframes pageEnter (opacity 0→1, translateY 8→0, 250ms ease-out) applied to all 7 public page wrapper classes via CSS selector list
|
||||||
|
|
||||||
|
**Added @keyframes pageEnter (opacity 0→1, translateY 8→0, 250ms ease-out) applied to all 7 public page wrapper classes via CSS selector list**
|
||||||
|
|
||||||
|
## What Happened
|
||||||
|
|
||||||
|
Identified outermost wrapper classNames for all 7 public pages (.home, .topics-browse, .subtopic-page, .search-results-page, .creators-browse, .creator-detail, .technique-page). Added @keyframes pageEnter animation and applied it to all classes via a grouped CSS selector at the end of App.css. No TSX files modified — the animation triggers on mount automatically.
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
TypeScript compilation (tsc --noEmit) and Vite production build both passed with zero errors.
|
||||||
|
|
||||||
|
## Verification Evidence
|
||||||
|
|
||||||
|
| # | Command | Exit Code | Verdict | Duration |
|
||||||
|
|---|---------|-----------|---------|----------|
|
||||||
|
| 1 | `cd frontend && npx tsc --noEmit` | 0 | ✅ pass | 2000ms |
|
||||||
|
| 2 | `npm run build` | 0 | ✅ pass | 900ms |
|
||||||
|
|
||||||
|
|
||||||
|
## Deviations
|
||||||
|
|
||||||
|
None. Used the CSS-only approach (plan option #4) to avoid modifying 7 TSX files.
|
||||||
|
|
||||||
|
## Known Issues
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
## Files Created/Modified
|
||||||
|
|
||||||
|
- `frontend/src/App.css`
|
||||||
|
|
||||||
|
|
||||||
|
## Deviations
|
||||||
|
None. Used the CSS-only approach (plan option #4) to avoid modifying 7 TSX files.
|
||||||
|
|
||||||
|
## Known Issues
|
||||||
|
None.
|
||||||
|
|
@ -3728,3 +3728,26 @@ a.app-footer__about:hover,
|
||||||
font-size: 1.5rem;
|
font-size: 1.5rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ── Page-enter transition ────────────────────────────────────────────────── */
|
||||||
|
|
||||||
|
@keyframes pageEnter {
|
||||||
|
from {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(8px);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.home,
|
||||||
|
.topics-browse,
|
||||||
|
.subtopic-page,
|
||||||
|
.search-results-page,
|
||||||
|
.creators-browse,
|
||||||
|
.creator-detail,
|
||||||
|
.technique-page {
|
||||||
|
animation: pageEnter 250ms ease-out;
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue