/* LeadVolt UI/performance batch (candidate). Loaded after mobile-layout.css; overrides only, so it can be removed by deleting one <link>.
   Source of each rule: MASTER-UI-ANIMATION-AUDIT-REPORT.md item numbers. */

/* --- Long text: page overflow (1.1 / 3.V1) ------------------------------------------------------------------------ */
/* index.html:471 sets .src-wrap{grid-template-columns:1fr} on phones; 1fr is minmax(auto,1fr), so one long source name widened the page to 617px. */
@media (max-width:620px){.src-wrap{grid-template-columns:minmax(0,1fr)}}
.src-top .r{min-width:0}
/* Show the whole source name (wrap) instead of an ellipsis that only a desktop hover could reveal (1.11). */
.src .n{white-space:normal;overflow-wrap:anywhere;text-overflow:clip}

/* --- Table containment (1.2 / 1.3) -------------------------------------------------------------------------------- */
/* index.html:358 makes every cell nowrap, so one long lead name or task title pushed the other columns and the row actions off-screen.
   Names and titles now wrap to two lines inside a bounded column; the full text is one tap away in the lead preview / task editor. */
/* Tags under the name wrap inside the same column (two lines); the lead preview lists every tag. */
table.tbl td .who .tdot{display:flex;flex-wrap:wrap;gap:3px;max-width:300px;max-height:33px;overflow:hidden;margin:3px 0 0}
table.tbl td .who .lead-link{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;white-space:normal;overflow-wrap:anywhere;min-width:9em;max-width:300px;text-align:left}
/* Source / sub-source (unbounded fields) and plain-text cells such as the agent name wrap within bounded columns.
   The min-widths keep ordinary values ("Agent 02 Synthetic", "Bayut") on one line; only genuinely long values wrap. */
table.tbl td .two{max-width:180px}
table.tbl td .two > b:not([class]){min-width:8.5em}
table.tbl td .two b,table.tbl td .two small{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;white-space:normal;overflow-wrap:anywhere}
table.tbl td .two small{-webkit-line-clamp:1}
/* Agent name cell (rendered as <span style="font-weight:500"> in the leads columns). */
table.tbl tbody td > span[style="font-weight:500"]{display:inline-block;min-width:8.5em;max-width:160px;white-space:normal}
.ttbl .tname{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;white-space:normal;overflow-wrap:anywhere;max-width:360px;text-align:left}
@media (min-width:641px){.ttbl td:nth-child(3){white-space:normal;min-width:220px;max-width:380px}.ttbl td:nth-child(3) small .lead-link{overflow-wrap:anywhere}}

/* --- Replaying animations (2.2 / 2.3 / 2.4 / 2.5) ----------------------------------------------------------------- */
/* Rows replayed their entrance on every search keystroke, sort and page change. */
table.tbl tbody tr{animation:none}
/* Pages keep their entrance on the first visit; return visits appear at once (ui-perf.js adds .lv-seen when a page is hidden). */
.page.lv-seen,.page.lv-seen .panel,.page.lv-seen .kpi,.page.lv-seen .lead,.page.lv-seen .tl li{animation:none}
/* A drawer that replaces an already-open drawer (after a save, or ‹ ›) does not slide in again (ui-perf.js adds .lv-no-enter). */
#layer .lv-no-enter{animation:none!important}
/* The Ctrl+K palette is keyboard-driven: appear instantly. */
#layer .palette,#layer .veil:has(+ .palette){animation:none}

/* --- Continuous decoration becomes brief feedback (2.1 / 2.10 / 3.P5 / 3.P6) -------------------------------------- */
/* Same keyframes, theme and logo; they now play a few times and settle instead of running forever. Even counts on alternating loops end where they started. */
.icon-round .dot,.btn-clock .live,.shift .live,.unas::before,.icard .lv::before,.miles span.now::before,.radar::before,.radar::after{animation-iteration-count:3}
.lv-untouched,.lv-untouched::before,.lv-untouched::after{animation-iteration-count:2}
.wn::before,.wn .gl{animation-iteration-count:2}
.wn svg{animation-iteration-count:2}
.rocket{animation-iteration-count:4}
.rocket .flame{animation-iteration-count:20}
.wave path{animation-iteration-count:2}
.beam i{animation-iteration-count:3}
.focus::before{animation-iteration-count:2}
.dial .ring,.founder .ph::after{animation-iteration-count:1}
.rev-total::after{animation-iteration-count:2}
.soon .orb{animation-iteration-count:4}
/* Nothing animates while the tab is hidden (ui-perf.js toggles .lv-hidden). */
html.lv-hidden *,html.lv-hidden *::before,html.lv-hidden *::after{animation-play-state:paused!important}

/* --- Touch (3.T1 – T4; the stuck lead hover card) ------------------------------------------------------------------ */
html{-webkit-tap-highlight-color:transparent}
/* No double-tap-to-zoom delay on controls. Pinch zoom is unaffected (manipulation keeps pinch). */
button,a,[role="button"],label,select,.lead-link,.tabbar button{touch-action:manipulation}
/* Controls are not selectable text; content stays selectable. */
button,[role="button"],.tabbar button,.chip,.fchip,.pill,.seg button,.seg2 button{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
/* Brief press feedback where touch had none. */
.tabbar button{transition:transform 160ms var(--ease),color .2s ease,background-color .2s ease}
.rbtn:active,.tcheck:active,.tabbar button:active,.icon-round:active,.icon-btn:active,#lpBar button:active,.fchip:active,.lead-link:active{transform:scale(.97)}
@media (prefers-reduced-motion:reduce){.rbtn:active,.tcheck:active,.tabbar button:active,.icon-round:active,.icon-btn:active,#lpBar button:active,.fchip:active,.lead-link:active{transform:none;filter:brightness(.94)}}
/* The lead hover card is a mouse-only preview; on touch it opened from a tap and stayed stuck above the drawer. */
@media (hover:none){.hovercard{display:none!important}}

/* --- Keyboard (3.V2) ------------------------------------------------------------------------------------------------ */
/* iOS zooms into inputs under 16px and does not zoom back. Scoped by touch capability, not width (iPad / landscape were missed). */
@media (pointer:coarse){input:not([type="checkbox"]):not([type="radio"]):not([type="range"]),textarea,select{font-size:16px}}

/* --- Scroll (3.V4 – V6) --------------------------------------------------------------------------------------------- */
.lp-body,#layer .drawer,#layer .modal,#layer .palette{overscroll-behavior:contain}
/* On touch screens the page behind an open drawer or dialog no longer scrolls. */
@media (pointer:coarse){html:has(#layer .veil){overflow:hidden}}
/* Installed app: no whole-shell rubber band behind the fixed top bar and tab bar. */
@media (display-mode:standalone){html,body{overscroll-behavior:none}}
@supports (height:100dvh){.chat{height:calc(100dvh - var(--top-h) - 150px)}.ped{max-height:calc(100dvh - var(--top-h) - 40px)}}
