diff --git a/.claude/metrics/hooks-metrics.json b/.claude/metrics/hooks-metrics.json index 7e22319e..d779c0cb 100644 --- a/.claude/metrics/hooks-metrics.json +++ b/.claude/metrics/hooks-metrics.json @@ -4010,6 +4010,97 @@ "file": "/home/theflow/projects/tractatus/public/js/i18n-simple.js", "result": "passed", "reason": null + }, + { + "hook": "validate-file-write", + "timestamp": "2025-10-19T02:07:03.827Z", + "file": "/home/theflow/projects/tractatus/public/js/scroll-animations.js", + "result": "passed", + "reason": null + }, + { + "hook": "validate-file-edit", + "timestamp": "2025-10-19T02:07:35.921Z", + "file": "/home/theflow/projects/tractatus/public/css/tractatus-theme.css", + "result": "passed", + "reason": null + }, + { + "hook": "validate-file-edit", + "timestamp": "2025-10-19T02:08:16.604Z", + "file": "/home/theflow/projects/tractatus/public/index.html", + "result": "passed", + "reason": null + }, + { + "hook": "validate-file-edit", + "timestamp": "2025-10-19T02:08:30.655Z", + "file": "/home/theflow/projects/tractatus/public/index.html", + "result": "passed", + "reason": null + }, + { + "hook": "validate-file-edit", + "timestamp": "2025-10-19T02:08:45.352Z", + "file": "/home/theflow/projects/tractatus/public/index.html", + "result": "passed", + "reason": null + }, + { + "hook": "validate-file-edit", + "timestamp": "2025-10-19T02:08:45.605Z", + "file": "/home/theflow/projects/tractatus/public/index.html", + "result": "passed", + "reason": null + }, + { + "hook": "validate-file-edit", + "timestamp": "2025-10-19T02:08:45.945Z", + "file": "/home/theflow/projects/tractatus/public/index.html", + "result": "passed", + "reason": null + }, + { + "hook": "validate-file-edit", + "timestamp": "2025-10-19T02:09:15.776Z", + "file": "/home/theflow/projects/tractatus/public/index.html", + "result": "passed", + "reason": null + }, + { + "hook": "validate-file-edit", + "timestamp": "2025-10-19T02:09:16.028Z", + "file": "/home/theflow/projects/tractatus/public/index.html", + "result": "passed", + "reason": null + }, + { + "hook": "validate-file-edit", + "timestamp": "2025-10-19T02:09:16.225Z", + "file": "/home/theflow/projects/tractatus/public/index.html", + "result": "passed", + "reason": null + }, + { + "hook": "validate-file-edit", + "timestamp": "2025-10-19T02:09:16.443Z", + "file": "/home/theflow/projects/tractatus/public/index.html", + "result": "passed", + "reason": null + }, + { + "hook": "validate-file-edit", + "timestamp": "2025-10-19T02:09:16.645Z", + "file": "/home/theflow/projects/tractatus/public/index.html", + "result": "passed", + "reason": null + }, + { + "hook": "validate-file-edit", + "timestamp": "2025-10-19T02:09:16.865Z", + "file": "/home/theflow/projects/tractatus/public/index.html", + "result": "passed", + "reason": null } ], "blocks": [ @@ -4231,10 +4322,10 @@ } ], "session_stats": { - "total_edit_hooks": 393, + "total_edit_hooks": 405, "total_edit_blocks": 32, - "last_updated": "2025-10-19T02:00:49.318Z", - "total_write_hooks": 180, + "last_updated": "2025-10-19T02:09:16.865Z", + "total_write_hooks": 181, "total_write_blocks": 4 } } \ No newline at end of file diff --git a/public/css/tractatus-theme.css b/public/css/tractatus-theme.css index 498eee47..56f37d69 100644 --- a/public/css/tractatus-theme.css +++ b/public/css/tractatus-theme.css @@ -823,6 +823,112 @@ h3 { letter-spacing: -0.015em; } text-decoration: underline; } +/* ======================================== + * SCROLL ANIMATIONS + * Intersection Observer-based scroll animations + * ======================================== */ + +/* Scroll animation initial states (before visible) */ +.animate-on-scroll { + transition: opacity 0.6s cubic-bezier(0.4, 0, 0.2, 1), + transform 0.6s cubic-bezier(0.4, 0, 0.2, 1); +} + +/* Fade in animation */ +.animate-on-scroll[data-animation="fade-in"] { + opacity: 0; +} + +.animate-on-scroll[data-animation="fade-in"].is-visible { + opacity: 1; +} + +/* Slide up animation */ +.animate-on-scroll[data-animation="slide-up"] { + opacity: 0; + transform: translateY(2rem); +} + +.animate-on-scroll[data-animation="slide-up"].is-visible { + opacity: 1; + transform: translateY(0); +} + +/* Slide down animation */ +.animate-on-scroll[data-animation="slide-down"] { + opacity: 0; + transform: translateY(-2rem); +} + +.animate-on-scroll[data-animation="slide-down"].is-visible { + opacity: 1; + transform: translateY(0); +} + +/* Slide left animation */ +.animate-on-scroll[data-animation="slide-left"] { + opacity: 0; + transform: translateX(2rem); +} + +.animate-on-scroll[data-animation="slide-left"].is-visible { + opacity: 1; + transform: translateX(0); +} + +/* Slide right animation */ +.animate-on-scroll[data-animation="slide-right"] { + opacity: 0; + transform: translateX(-2rem); +} + +.animate-on-scroll[data-animation="slide-right"].is-visible { + opacity: 1; + transform: translateX(0); +} + +/* Scale in animation */ +.animate-on-scroll[data-animation="scale-in"] { + opacity: 0; + transform: scale(0.95); +} + +.animate-on-scroll[data-animation="scale-in"].is-visible { + opacity: 1; + transform: scale(1); +} + +/* Rotate in animation */ +.animate-on-scroll[data-animation="rotate-in"] { + opacity: 0; + transform: rotate(12deg) scale(0.95); +} + +.animate-on-scroll[data-animation="rotate-in"].is-visible { + opacity: 1; + transform: rotate(0deg) scale(1); +} + +/* Default animation if no data-animation specified */ +.animate-on-scroll:not([data-animation]) { + opacity: 0; + transform: translateY(2rem); +} + +.animate-on-scroll:not([data-animation]).is-visible { + opacity: 1; + transform: translateY(0); +} + +/* Respect user's motion preferences for scroll animations */ +@media (prefers-reduced-motion: reduce) { + .animate-on-scroll { + opacity: 1 !important; + transform: none !important; + transition: none !important; + } +} + /* ======================================== * DARK MODE SUPPORT (Future) * Placeholder for dark mode implementation diff --git a/public/index.html b/public/index.html index d25632c3..3eb50b9b 100644 --- a/public/index.html +++ b/public/index.html @@ -86,7 +86,7 @@
-
+

A Starting Point

Instead of hoping AI systems "behave correctly," we propose structural constraints @@ -106,7 +106,7 @@ We recognize this is one small step in addressing AI safety challenges. Explore

- +
For AI safety researchers, academics, and scientists investigating LLM failure modes and governance architectures @@ -154,7 +154,7 @@ Explore the theoretical foundations, architectural constraints, and scholarly co - +
For software engineers, ML engineers, and technical teams building production AI systems @@ -202,7 +202,7 @@ Get hands-on with implementation guides, API documentation, and reference code e - +
For AI executives, research directors, startup founders, and strategic decision makers setting AI safety policy @@ -257,11 +257,11 @@ Navigate the business case, compliance requirements, and competitive advantages
-

Framework Capabilities

+

Framework Capabilities

-
+
-
+
-
+
-
+
-
+
-
+