diff --git a/packages/core/src/lint/rules/gsap.test.ts b/packages/core/src/lint/rules/gsap.test.ts
index 4ec961842..5dd6e2e5e 100644
--- a/packages/core/src/lint/rules/gsap.test.ts
+++ b/packages/core/src/lint/rules/gsap.test.ts
@@ -806,6 +806,24 @@ describe("GSAP rules", () => {
expect(finding).toBeUndefined();
});
+ it("does NOT error when gsap.fromTo({opacity:0}, {opacity:1}) — destination overrides CSS", () => {
+ const html = `
+
+
+
+`;
+ const result = lintHyperframeHtml(html);
+ const finding = result.findings.find((f) => f.code === "gsap_from_opacity_noop");
+ expect(finding).toBeUndefined();
+ });
+
it("does NOT error when gsap.to() uses opacity:0 (exit animation)", () => {
const html = `
diff --git a/packages/core/src/lint/rules/gsap.ts b/packages/core/src/lint/rules/gsap.ts
index 76ac506ca..7c28aaa4f 100644
--- a/packages/core/src/lint/rules/gsap.ts
+++ b/packages/core/src/lint/rules/gsap.ts
@@ -875,7 +875,7 @@ export const gsapRules: Array<(ctx: LintContext) => HyperframeLintFinding[]> = [
const windows = extractGsapWindows(script.content);
for (const win of windows) {
- if (win.method !== "from" && win.method !== "fromTo") continue;
+ if (win.method !== "from") continue;
if (!win.properties.includes("opacity")) continue;
const sel = win.targetSelector;
const cssKey = sel.startsWith("#") || sel.startsWith(".") ? sel : `#${sel}`;