fix(avocet): ball escapes overflow clip, floats above header/footer with z-index + transparency
This commit is contained in:
parent
be3b52f150
commit
e03d91ece9
2 changed files with 22 additions and 2 deletions
|
|
@ -230,6 +230,7 @@ const cardStyle = computed(() => {
|
|||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: flex-start;
|
||||
overflow: visible; /* ball must escape the collapsed stack bounds */
|
||||
}
|
||||
|
||||
.card-stack.bucket-mode .card-shadow {
|
||||
|
|
@ -269,6 +270,10 @@ const cardStyle = computed(() => {
|
|||
}
|
||||
.card-wrapper.is-held {
|
||||
cursor: grabbing;
|
||||
/* Override bucket-mode clip and opacity so the held ball renders cleanly */
|
||||
clip-path: none !important;
|
||||
opacity: 1 !important;
|
||||
pointer-events: auto !important;
|
||||
}
|
||||
|
||||
/* Dismissal animations — dismiss class is only applied during the motion.rich await window,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<div class="label-view">
|
||||
<!-- Header bar -->
|
||||
<header class="lv-header">
|
||||
<header class="lv-header" :class="{ 'is-held': isHeld }">
|
||||
<span class="queue-count">
|
||||
<span v-if="loading" class="queue-status">Loading…</span>
|
||||
<template v-else-if="store.totalRemaining > 0">
|
||||
|
|
@ -54,7 +54,7 @@
|
|||
>→</div>
|
||||
</Transition>
|
||||
|
||||
<div class="card-stack-wrapper">
|
||||
<div class="card-stack-wrapper" :class="{ 'is-held': isHeld }">
|
||||
<EmailCardStack
|
||||
:item="store.current"
|
||||
:is-bucket-mode="isHeld"
|
||||
|
|
@ -329,6 +329,11 @@ onUnmounted(() => {
|
|||
justify-content: space-between;
|
||||
gap: 0.75rem;
|
||||
flex-wrap: wrap;
|
||||
transition: opacity 200ms ease;
|
||||
}
|
||||
.lv-header.is-held {
|
||||
opacity: 0.2;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.queue-count {
|
||||
|
|
@ -422,6 +427,14 @@ onUnmounted(() => {
|
|||
min-height: 0; /* allow flex child to shrink — default auto prevents this */
|
||||
overflow-y: auto;
|
||||
padding-bottom: 0.5rem;
|
||||
transition: opacity 200ms ease;
|
||||
}
|
||||
/* When held: escape the overflow clip so the ball floats freely,
|
||||
and rise above the footer (z-index 10) so the ball is visible. */
|
||||
.card-stack-wrapper.is-held {
|
||||
overflow: visible;
|
||||
position: relative;
|
||||
z-index: 20;
|
||||
}
|
||||
|
||||
/* Bucket grid stays pinned to the bottom of the viewport while the email card
|
||||
|
|
@ -432,10 +445,12 @@ onUnmounted(() => {
|
|||
padding: 0.5rem 0 0.75rem;
|
||||
z-index: 10;
|
||||
transition: transform 250ms cubic-bezier(0.34, 1.56, 0.64, 1),
|
||||
opacity 200ms ease,
|
||||
background 200ms ease;
|
||||
}
|
||||
.bucket-grid-footer.grid-active {
|
||||
transform: translateY(-8px);
|
||||
opacity: 0.45; /* semi-transparent so ball aura is visible through it */
|
||||
}
|
||||
|
||||
/* ── Toss edge zones ── */
|
||||
|
|
|
|||
Loading…
Reference in a new issue