diff --git a/frontend/app/components/workspace/calendar/lab/CrmCalendarZoomCanvasLab.vue b/frontend/app/components/workspace/calendar/lab/CrmCalendarZoomCanvasLab.vue
index 330474b..92e944d 100644
--- a/frontend/app/components/workspace/calendar/lab/CrmCalendarZoomCanvasLab.vue
+++ b/frontend/app/components/workspace/calendar/lab/CrmCalendarZoomCanvasLab.vue
@@ -1,5 +1,5 @@
@@ -524,21 +497,19 @@ onBeforeUnmount(() => {
-
-
-
+
+ {{ flyLabel }}
+
+
+
+
@@ -629,34 +612,62 @@ onBeforeUnmount(() => {
overflow: hidden;
}
-.canvas-lab-scene {
+.canvas-grid-layer {
position: absolute;
- width: 1400px;
- height: 900px;
- will-change: transform;
+ inset: 0;
}
-/* Outline rects — just borders, no content */
-.canvas-outline-rect {
+.canvas-cell {
position: absolute;
border-radius: 12px;
- border: 1px solid color-mix(in oklab, var(--color-base-content) 22%, transparent);
- background: color-mix(in oklab, var(--color-base-200) 40%, transparent);
- transition: border-color 160ms ease, box-shadow 160ms ease, transform 160ms ease;
+ border: 1px solid color-mix(in oklab, var(--color-base-content) 20%, transparent);
+ background: color-mix(in oklab, var(--color-base-200) 50%, transparent);
+ transition: border-color 140ms ease, box-shadow 140ms ease, transform 140ms ease;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ overflow: hidden;
}
-.canvas-outline-rect:hover {
- border-color: color-mix(in oklab, var(--color-primary) 60%, transparent);
- box-shadow: 0 0 0 2px color-mix(in oklab, var(--color-primary) 24%, transparent) inset;
+.canvas-cell:hover {
+ border-color: color-mix(in oklab, var(--color-primary) 55%, transparent);
+ box-shadow: 0 0 0 2px color-mix(in oklab, var(--color-primary) 20%, transparent) inset;
}
-.canvas-outline-prime {
- transform: scale(1.04);
+.canvas-cell-prime {
+ transform: scale(1.03);
border-color: color-mix(in oklab, var(--color-primary) 80%, transparent);
- box-shadow: 0 0 0 3px color-mix(in oklab, var(--color-primary) 40%, transparent) inset;
+ box-shadow: 0 0 0 3px color-mix(in oklab, var(--color-primary) 36%, transparent) inset;
+}
+
+.canvas-cell-label {
+ font-size: 0.82rem;
+ font-weight: 600;
+ color: color-mix(in oklab, var(--color-base-content) 60%, transparent);
+ pointer-events: none;
+ user-select: none;
+}
+
+.canvas-fly-rect {
+ position: absolute;
+ border-radius: 12px;
+ border: 2px solid color-mix(in oklab, var(--color-primary) 70%, transparent);
+ background: color-mix(in oklab, var(--color-base-200) 60%, transparent);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 10;
+ pointer-events: none;
+ will-change: left, top, width, height;
+}
+
+.canvas-fly-label {
+ font-size: 1rem;
+ font-weight: 700;
+ color: color-mix(in oklab, var(--color-base-content) 70%, transparent);
+ user-select: none;
}
-/* Content overlay — always native scale */
.canvas-content-layer {
position: absolute;
inset: 0;
@@ -664,13 +675,11 @@ onBeforeUnmount(() => {
align-items: center;
justify-content: center;
padding: 24px;
- opacity: 0;
- transition: opacity 180ms ease;
pointer-events: none;
+ z-index: 5;
}
.canvas-content-visible {
- opacity: 1;
pointer-events: auto;
}
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index a2b6f77..ee7d867 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -30,6 +30,7 @@
"daisyui": "^5.5.18",
"graphql": "^16.12.0",
"graphql-tag": "^2.12.6",
+ "gsap": "^3.14.2",
"ioredis": "^5.7.0",
"langfuse": "^3.38.6",
"langsmith": "^0.5.4",
@@ -15131,6 +15132,12 @@
}
}
},
+ "node_modules/gsap": {
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.14.2.tgz",
+ "integrity": "sha512-P8/mMxVLU7o4+55+1TCnQrPmgjPKnwkzkXOK1asnR9Jg2lna4tEY5qBJjMmAaOBDDZWtlRjBXjLa0w53G/uBLA==",
+ "license": "Standard 'no charge' license: https://gsap.com/standard-license."
+ },
"node_modules/guid-typescript": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index 2dde739..dd6cfa3 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -42,6 +42,7 @@
"daisyui": "^5.5.18",
"graphql": "^16.12.0",
"graphql-tag": "^2.12.6",
+ "gsap": "^3.14.2",
"ioredis": "^5.7.0",
"langfuse": "^3.38.6",
"langsmith": "^0.5.4",