/* ============================================================
   Fortune Dream — Staff UI Enhancement Layer  (enhance.css)
   Purely ADDITIVE polish: animations, shadows, depth, labels.
   ------------------------------------------------------------
   TO UNDO EVERYTHING:
     1. Delete the <link ... enhance.css> line in staff/index.html
     2. Delete this file (enhance.css)
   Nothing in styles.css / redesign.css / app.js is touched, so
   removing this file restores the exact previous look.
   ============================================================ */

:root{
  --ez:cubic-bezier(.22,.61,.36,1);
  --ez-out:cubic-bezier(.16,1,.3,1);
  --ez-pop:cubic-bezier(.34,1.56,.64,1);
  --dur:.18s;
  --lift:0 6px 18px rgba(0,0,0,.12);
  --lift-lg:0 14px 34px rgba(0,0,0,.20);
  --glow:0 6px 18px color-mix(in srgb,var(--primary) 42%,transparent);
}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]){--lift:0 8px 22px rgba(0,0,0,.45);--lift-lg:0 16px 40px rgba(0,0,0,.60)}}
:root[data-theme="dark"]{--lift:0 8px 22px rgba(0,0,0,.45);--lift-lg:0 16px 40px rgba(0,0,0,.60)}

/* ---- global smooth transitions -------------------------------------- */
button,select,input,textarea,a,
.conversation-card,.icon-button,.composer-button,.tap-button,
.header-avatar,.label-chip,.pane-tabs button,.media-filter button,
.theme-card,.send-button,dialog{
  transition:background-color var(--dur) var(--ez),color var(--dur) var(--ez),
             border-color var(--dur) var(--ez),box-shadow var(--dur) var(--ez),
             transform .2s var(--ez-out),filter var(--dur) var(--ez);
}

/* ---- keyframes ------------------------------------------------------- */
@keyframes dialogIn{from{opacity:0;transform:translateY(14px) scale(.97)}to{opacity:1;transform:none}}
@keyframes sheetIn{from{opacity:0;transform:translateY(40px)}to{opacity:1;transform:none}}
@keyframes slideDown{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
@keyframes toastIn{from{opacity:0;transform:translate(-50%,18px) scale(.95)}to{opacity:1;transform:translate(-50%,0) scale(1)}}
@keyframes popIn{0%{opacity:0;transform:scale(.4)}60%{transform:scale(1.12)}100%{opacity:1;transform:scale(1)}}
@keyframes tipIn{from{opacity:0;transform:translate(-50%,4px)}to{opacity:1;transform:translate(-50%,0)}}
@keyframes shimmer{100%{background-position:200% 0}}
@keyframes softPulse{0%,100%{box-shadow:0 0 0 0 color-mix(in srgb,var(--primary) 40%,transparent)}50%{box-shadow:0 0 0 6px transparent}}

/* ---- structural depth ----------------------------------------------- */
.sidebar{box-shadow:4px 0 24px rgba(0,0,0,.05)}
.details-panel{box-shadow:-4px 0 24px rgba(0,0,0,.05)}
.conversation-header{box-shadow:0 3px 14px rgba(0,0,0,.05);position:relative;z-index:3}
.composer{box-shadow:0 -3px 16px rgba(0,0,0,.06);position:relative;z-index:2}
.toolbar{position:relative;z-index:2}
.pane-tabs{box-shadow:0 2px 8px rgba(0,0,0,.04)}

/* ---- generic buttons: give every button a bit of life --------------- */
/* Press feedback for normal buttons only. Buttons that rely on a transform
   for POSITIONING (the funnel, the scroll-to-latest button) are excluded, or
   this would clobber their centering and move them out from under the cursor. */
button:not(:disabled):not(.filter-toggle):not(.scroll-latest):not(.hover-reply-button):active{transform:translateY(1px) scale(.985)}
/* The reply icon centers itself with translateY(-50%); like the funnel and the
   scroll-to-latest button, it must never be moved/resized by press or hover, or
   the click lands off it. Lock its centering transform in every state. */
.hover-reply-button,
.hover-reply-button:hover,
.hover-reply-button:active,
.hover-reply-button:focus,
.hover-reply-button:focus-visible{transform:translateY(-50%)!important}
button:disabled{opacity:.55;cursor:not-allowed}

/* primary / accent buttons: gradient + colored glow + hover lift ------ */
.primary-button,.record-send{
  background:linear-gradient(135deg,color-mix(in srgb,var(--primary) 88%,#fff 12%),var(--primary));
  box-shadow:var(--glow);border:none;font-weight:700;letter-spacing:.2px;
}
.primary-button:hover,.record-send:hover{transform:translateY(-2px);box-shadow:0 10px 26px color-mix(in srgb,var(--primary) 50%,transparent);filter:brightness(1.05)}
.primary-button:active,.record-send:active{transform:translateY(0)}

/* danger buttons */
.danger-button,.remove-filters{transition:transform .18s var(--ez-out),box-shadow .18s var(--ez),filter .18s}
.danger-button:hover{transform:translateY(-1px);box-shadow:0 8px 20px color-mix(in srgb,var(--danger) 34%,transparent);filter:brightness(1.03)}

/* details-panel + menu action buttons: hover slide + shadow ----------- */
.details-panel section button,.menu-section button,.dialog-actions button{
  border-radius:11px;
}
.details-panel section button:hover,.menu-section button:hover{
  transform:translateX(3px);box-shadow:var(--lift);
  border-color:color-mix(in srgb,var(--primary) 45%,var(--line));
}

/* ---- icon buttons: circular hover halo + press ---------------------- */
.icon-button{position:relative;border-radius:11px}
.icon-button:hover{background:color-mix(in srgb,var(--primary) 12%,transparent);color:var(--primary);transform:translateY(-1px)}
.icon-button:active{transform:scale(.92)}
.alerts-button:hover{transform:translateY(-1px) rotate(-8deg)}

/* ---- BUTTON LABELS ------------------------------------------------- */
/* All header nav buttons (Alerts, Menu, Find, Details) are icon-only. */

/* ---- composer buttons: playful hover + instant tooltip from title --- */
.composer-button{position:relative;border-radius:12px}
.composer-button:hover{background:color-mix(in srgb,var(--primary) 14%,transparent);color:var(--primary);transform:translateY(-2px) scale(1.06)}
.composer-button:active{transform:scale(.9)}
#cameraButton:hover,#galleryButton:hover{transform:translateY(-2px) scale(1.08) rotate(-6deg)}
#voiceButton:hover{transform:translateY(-2px) scale(1.08) rotate(6deg)}
.composer-button[title]:hover::after{
  content:attr(title);position:absolute;bottom:calc(100% + 9px);left:50%;
  transform:translateX(-50%);background:var(--text);color:var(--panel);
  padding:5px 9px;border-radius:8px;font-size:11px;font-weight:600;white-space:nowrap;
  pointer-events:none;box-shadow:var(--lift);z-index:40;animation:tipIn .14s var(--ez-out);
}

/* send button: gradient orb that pops on hover ------------------------ */
.send-button{background:linear-gradient(135deg,color-mix(in srgb,var(--primary) 85%,#fff 15%),var(--primary))!important;box-shadow:var(--glow)}
.send-button:hover{transform:translateY(-2px) scale(1.08);box-shadow:0 10px 26px color-mix(in srgb,var(--primary) 55%,transparent)}
.send-button:active{transform:scale(.94)}

/* ---- conversation cards: modern hover lift + active accent ---------- */
.conversation-card{border-radius:13px;margin:3px 7px;will-change:transform}
.conversation-card:hover{transform:translateX(3px);box-shadow:var(--lift);background:var(--hover)}
.conversation-card.active{box-shadow:inset 3px 0 0 var(--primary),var(--lift)}
.conversation-card.unread-card{box-shadow:inset 3px 0 0 var(--primary)}
.conversation-card.unread-card:hover{box-shadow:inset 3px 0 0 var(--primary),var(--lift)}

/* ---- filter panel reveal ------------------------------------------- */
#filterPanel:not(.hidden){animation:slideDown .22s var(--ez-out)}
/* Lock the funnel's vertical centering in EVERY state. Otherwise the global
   button-press transform (or any :active rule) overrides translateY(-50%) and
   drops the funnel ~20px, so the pointer ends up off it and the click is lost.
   The 180° flip lives on the child <svg>, so the button itself never moves. */
.filter-toggle,
.filter-toggle:hover,
.filter-toggle:active,
.filter-toggle:focus,
.filter-toggle:focus-visible,
.filter-toggle.active{transform:translateY(-50%)!important}
.filter-toggle svg{transition:transform .25s var(--ez-pop)}
.filter-toggle.active svg{transform:rotate(180deg)}
.filter-active-dot{animation:popIn .3s var(--ez-pop)}
#removeFiltersButton:not(.hidden){animation:slideDown .2s var(--ez-out)}

/* ---- pane tabs: animated active underline --------------------------- */
.pane-tabs button{position:relative;overflow:hidden}
.pane-tabs button::after{content:"";position:absolute;left:50%;right:50%;bottom:0;height:3px;border-radius:3px 3px 0 0;background:var(--primary);transition:left .25s var(--ez-out),right .25s var(--ez-out)}
.pane-tabs button.active::after{left:14%;right:14%}
.pane-tabs button:hover::after{left:32%;right:32%}

/* ---- dialogs: entrance + elevated shadow + blurred backdrop --------- */
dialog[open]{animation:dialogIn .22s var(--ez-out);box-shadow:var(--lift-lg)}
dialog.action-sheet[open]{animation:sheetIn .24s var(--ez-out)}
dialog::backdrop{background:rgba(15,20,30,.42);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px)}
dialog header button[data-close]{border-radius:9px;transition:transform .2s var(--ez-out),background-color .2s}
dialog header button[data-close]:hover{transform:rotate(90deg);background:color-mix(in srgb,var(--danger) 16%,transparent);color:var(--danger)}

/* search results / list rows in dialogs */
.search-result:hover,.referrer-picker .search-result:hover{transform:translateX(3px);box-shadow:var(--lift)}

/* ---- toast ---------------------------------------------------------- */
.toast:not(.hidden){animation:toastIn .28s var(--ez-out);box-shadow:var(--lift-lg)}

/* ---- floating "scroll to latest" button ----------------------------- */
/* The base centers this with left:50% + transform:translateX(-50%). If ANY
   state changes that transform (a lift, a shrink, or an off-center appear
   frame) the button shifts out from under the pointer and the click is lost.
   So we LOCK the transform to the centering in every state (incl. the shared
   .tap-button:active) and only ever change shadow/brightness. The appear
   animation fades opacity only and never touches transform. Result: the button
   never moves or resizes, so a click always lands on it. */
.scroll-latest,
.scroll-latest:hover,
.scroll-latest:active,
.scroll-latest:focus,
.scroll-latest:focus-visible,
.scroll-latest.tap-button:active{transform:translateX(-50%)!important}
@keyframes scrollLatestIn{from{opacity:0}to{opacity:1}}
.scroll-latest:not(.hidden){animation:scrollLatestIn .18s ease}
.scroll-latest{box-shadow:var(--lift);transition:box-shadow var(--dur) var(--ez),filter var(--dur) var(--ez),background-color var(--dur) var(--ez)}
.scroll-latest:hover{box-shadow:var(--lift-lg);filter:brightness(1.03)}
.scroll-latest:active{filter:brightness(.92)}

/* ---- inputs & selects: focus glow + gentle lift --------------------- */
.search-wrap input:focus,.filter-row select:focus,.toolbar input:focus,
input:focus,textarea:focus,select:focus{box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 20%,transparent),var(--lift)!important}
.search-wrap:focus-within svg{color:var(--primary)}

/* ---- avatars: subtle ring + hover pop ------------------------------- */
.header-avatar{transition:transform .2s var(--ez-out),box-shadow .2s}
.header-avatar:hover{transform:scale(1.05)}
.online-dot{box-shadow:0 0 0 2px var(--panel)}
.online-dot:not(.hidden){animation:softPulse 2.4s var(--ez) infinite}

/* ---- typing indicator glow ----------------------------------------- */
.typing-indicator:not(.hidden){animation:slideDown .2s var(--ez-out)}

/* ---- loading shimmer for skeleton/edge loaders --------------------- */
.edge-loader:not(.hidden){animation:slideDown .2s var(--ez-out)}

/* ---- viewer (image lightbox) arrows -------------------------------- */
.viewer-arrow:hover{transform:scale(1.12)}
.viewer-close:hover{transform:rotate(90deg)}

/* ---- respect reduced-motion ---------------------------------------- */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}
}

/* ---- games & site balance (details panel + connect dialog) ------------ */
.staff-wallet-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;margin-bottom:8px;
  border-radius:12px;background:var(--hover)}
.staff-wallet-row span{color:var(--muted);font-size:12.5px;text-transform:uppercase;letter-spacing:.04em}
.staff-wallet-row strong{font-size:19px;font-weight:800}
.staff-game-list{display:flex;flex-direction:column;gap:6px;margin-bottom:8px}
.staff-game-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--line);border-radius:10px}
.staff-game-label{display:flex;flex-direction:column;gap:1px;flex:1;min-width:0}
.staff-game-label strong{font-size:13.5px}
.staff-game-label small{color:var(--muted);font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.staff-game-label small.ok{color:#15803d}
.staff-game-label small.warn{color:#b45309}
.staff-game-balance{font-weight:700;font-size:13.5px;white-space:nowrap}
.link-button{background:none;border:none;color:var(--primary);font-size:12.5px;cursor:pointer;padding:2px 4px}
.game-connect-list{display:flex;flex-direction:column;gap:8px;padding:12px 14px}
.game-connect-row{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid var(--line);border-radius:12px}
.game-connect-row .primary-button{width:auto;padding:8px 16px;white-space:nowrap}
#gameConnectForm{display:flex;flex-direction:column;gap:10px;padding:0 14px 16px}
#gameConnectName{margin:0;font-weight:700}
.game-connect-note{margin:0;color:var(--muted);font-size:12.5px}
.game-captcha{align-self:flex-start;height:52px;border-radius:8px;background:#fff;border:1px solid var(--line)}
.inline-error{margin:0;color:#d92d20;font-size:13px;font-weight:600}

/* ---- games: bigger captcha, history rows, mini refresh ---------------- */
.game-captcha{align-self:center;height:96px;image-rendering:crisp-edges;border-radius:10px;background:#fff;
  border:1px solid var(--line);padding:4px}
#gameCaptchaInput{font-size:20px;letter-spacing:.28em;text-align:center;font-weight:700}
.mini-refresh{margin-left:auto;background:none;border:none;color:var(--primary);font-size:16px;cursor:pointer;
  padding:2px 6px;border-radius:8px;line-height:1}
.mini-refresh:hover{background:var(--hover)}
.staff-history-list{display:flex;flex-direction:column;gap:6px;padding:12px 14px;max-height:60vh;overflow-y:auto}
.staff-history-row{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:10px}
.staff-history-row.voided{opacity:.55}
.staff-history-row.voided strong,.staff-history-row.voided .staff-history-amount{text-decoration:line-through}
.staff-history-amount{font-weight:800;font-size:14px;white-space:nowrap}
.staff-history-amount.in{color:#15803d}
.staff-history-amount.out{color:#b42318}
.link-button.danger{color:#b42318}

/* ---- game disconnect banner (all staff see it at once) ---------------- */
.game-alert-banner{position:fixed;top:0;left:0;right:0;z-index:60;display:block;width:100%;padding:11px 16px;border:none;
  background:#b45309;color:#fff;font-size:13.5px;font-weight:700;text-align:center;cursor:pointer;
  box-shadow:0 2px 10px rgba(0,0,0,.25)}
.game-alert-banner:hover{background:#92400e}

/* ---- team chat: seen-by avatars + message info ----------------------- */
.team-seen-row{display:flex;gap:4px;justify-content:flex-end;padding:2px 12px 6px;flex-wrap:wrap}
.seen-avatar{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;
  background:linear-gradient(135deg,var(--primary),color-mix(in srgb,var(--primary) 55%,#000));
  color:#fff;font-size:9.5px;font-weight:800;letter-spacing:.02em;flex:0 0 auto;box-shadow:0 1px 3px rgba(0,0,0,.25)}
.info-section-head{margin:14px 0 6px;font-size:13px;font-weight:800;color:var(--text)}
.info-muted{margin:2px 0;color:var(--muted);font-size:12.5px}
.info-person{display:flex;align-items:center;gap:8px;padding:5px 0}
.info-person .seen-avatar{width:24px;height:24px;font-size:10.5px}
.info-person-name{flex:1;font-size:13.5px}
.info-person-time{color:var(--muted);font-size:12px;white-space:nowrap}

/* ---- staff reactions: "+" opens full emoji picker -------------------- */
.quick-reactions .more-reactions{font-size:20px;font-weight:700;line-height:1;color:var(--muted);
  min-width:38px;display:inline-flex;align-items:center;justify-content:center}
.quick-reactions .more-reactions:hover{color:var(--primary)}
.reaction-picker-sheet{border:none;border-radius:16px;padding:0;max-width:420px;width:92vw;
  background:var(--panel);color:var(--text)}
.reaction-picker-sheet header{display:flex;align-items:center;justify-content:space-between;
  padding:12px 16px;border-bottom:1px solid var(--line)}
.reaction-picker-sheet header button{background:none;border:0;font-size:20px;color:var(--muted);cursor:pointer}
.reaction-picker-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:2px;padding:12px;
  max-height:52vh;overflow-y:auto}
.reaction-picker-grid button{font-size:23px;background:none;border:0;border-radius:9px;padding:6px 0;cursor:pointer}
.reaction-picker-grid button:hover{background:var(--hover)}
@media(max-width:520px){.reaction-picker-grid{grid-template-columns:repeat(6,1fr)}}

/* ---- staff who-reacted popover (long-press a reaction chip) ----------- */
.reaction-info-sheet{border:none;border-radius:16px;padding:0;max-width:380px;width:90vw;
  background:var(--panel);color:var(--text)}
.reaction-info-sheet header{display:flex;align-items:center;justify-content:space-between;
  padding:12px 16px;border-bottom:1px solid var(--line)}
.reaction-info-sheet header button{background:none;border:0;font-size:20px;color:var(--muted);cursor:pointer}
.reaction-info-list{padding:6px 0 12px;max-height:56vh;overflow-y:auto}
.reaction-info-row{display:flex;align-items:center;gap:13px;padding:10px 18px;border-bottom:1px solid var(--line)}
.reaction-info-row:last-child{border-bottom:0}
.reaction-info-emoji{font-size:26px;line-height:1;filter:drop-shadow(0 2px 2px rgba(0,0,0,.28))}
.reaction-info-copy{display:flex;flex-direction:column;gap:2px}
.reaction-info-copy strong{font-size:14.5px}
.reaction-info-copy small{color:var(--muted);font-size:12.5px}
.reaction-chip{cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}

/* ---- monitoring mode: small floating draggable bubble ---------------- */
.monitor-bubble{position:fixed;z-index:80;display:inline-flex;align-items:center;gap:7px;
  padding:6px 8px 6px 12px;border-radius:999px;background:rgba(29,78,216,.68);
  -webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px);color:#fff;font-size:12px;font-weight:700;
  white-space:nowrap;cursor:grab;user-select:none;-webkit-user-select:none;touch-action:none;
  box-shadow:0 6px 18px rgba(0,0,0,.28);animation:monitorFloat 3.6s ease-in-out infinite}
.monitor-bubble.monitor-away{background:rgba(180,83,9,.72)}
.monitor-bubble.dragging{cursor:grabbing;animation:none;box-shadow:0 10px 26px rgba(0,0,0,.4)}
.monitor-bubble button{background:rgba(255,255,255,.24);border:0;color:#fff;width:19px;height:19px;
  border-radius:50%;font-size:14px;line-height:1;cursor:pointer;display:grid;place-items:center;flex:0 0 auto}
.monitor-bubble button:hover{background:rgba(255,255,255,.4)}
@keyframes monitorFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
@media(prefers-reduced-motion:reduce){.monitor-bubble{animation:none}}
.monitor-employee-list{display:flex;flex-direction:column;gap:6px;padding:6px 4px 12px;max-height:56vh;overflow-y:auto}
.monitor-employee-row{display:flex;flex-direction:column;gap:2px;text-align:left;padding:11px 13px;
  border:1px solid var(--line);border-radius:12px;background:var(--panel);color:var(--text);cursor:pointer}
.monitor-employee-row:hover{background:var(--hover)}
.monitor-employee-row strong{font-size:14px}
.monitor-employee-row small{color:var(--muted);font-size:12px}

/* ---- customer details: grouped, icon-led, animated ---------------------- */
.details-panel>#detailsBody{padding:12px;border-bottom:0;display:grid;gap:10px}
.details-panel .identity-card{display:flex;align-items:center;gap:12px;padding:14px 13px;border:1px solid var(--line);border-bottom:1px solid var(--line);border-radius:16px;position:relative;overflow:hidden;background:linear-gradient(135deg,color-mix(in srgb,var(--primary),transparent 90%),var(--panel) 62%);box-shadow:0 2px 4px rgba(0,0,0,.04),0 18px 34px -24px rgba(0,0,0,.65)}
.identity-card:before{content:"";position:absolute;top:-60%;left:0;width:55%;height:220%;pointer-events:none;background:linear-gradient(90deg,transparent,rgba(255,255,255,.22),transparent);animation:identitySheen 7.5s ease-in-out infinite}
@keyframes identitySheen{0%,72%{transform:translateX(-140%) rotate(18deg)}100%{transform:translateX(330%) rotate(18deg)}}
.identity-avatar{position:relative;width:52px;height:52px;flex:none;border-radius:50%;display:grid;place-items:center;background:#dbeafe;color:#0759bd;font-weight:700;font-size:21px;box-shadow:0 4px 14px rgba(0,0,0,.22),inset 0 1px 0 rgba(255,255,255,.55)}
.identity-avatar img{width:100%;height:100%;border-radius:50%;object-fit:cover}
.identity-dot{position:absolute;right:0;bottom:2px;width:13px;height:13px;border-radius:50%;border:2px solid var(--panel);background:var(--muted)}
.identity-dot.online{background:#31a24c;animation:identityPulse 2.8s ease-in-out infinite}
@keyframes identityPulse{0%,100%{box-shadow:0 0 0 0 rgba(49,162,76,.5)}50%{box-shadow:0 0 0 7px rgba(49,162,76,0)}}
.identity-copy{display:grid;gap:2px;min-width:0;position:relative}
.identity-copy strong{font-size:16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.identity-copy span{font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.detail-chips{display:flex;flex-wrap:wrap;gap:6px}
.detail-chip{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;border-radius:999px;border:1px solid var(--line);background:var(--panel2);font-size:12px;font-weight:600;cursor:default;box-shadow:0 1px 2px rgba(0,0,0,.05);transition:transform .32s cubic-bezier(.34,1.56,.64,1),box-shadow .32s ease}
.detail-chip:hover{transform:translateY(-2px);box-shadow:0 7px 16px -7px rgba(0,0,0,.5)}
.detail-chip i{font-style:normal;font-size:13px;filter:drop-shadow(0 1px 1px rgba(0,0,0,.25))}
.detail-chip.good{color:#15803d;border-color:color-mix(in srgb,#15803d,transparent 70%);background:color-mix(in srgb,#15803d,transparent 92%)}
.detail-chip.muted{color:var(--muted)}

.details-panel .detail-group{padding:0;border:1px solid var(--line);border-radius:14px;background:var(--panel);overflow:hidden;box-shadow:0 1px 2px rgba(0,0,0,.04),0 12px 26px -20px rgba(0,0,0,.55);transition:box-shadow .38s ease,border-color .38s ease}
.details-panel>.detail-group{margin:10px 12px}
.details-panel .detail-group:hover{border-color:color-mix(in srgb,var(--primary),var(--line) 62%)}
.details-panel .detail-group.open{box-shadow:0 2px 5px rgba(0,0,0,.05),0 20px 38px -24px rgba(0,0,0,.62)}
/* .details-panel button already sets a flat background, so these need the extra
   specificity or the header gradient silently loses. */
.details-panel .detail-group-head{position:relative;display:flex;align-items:center;gap:9px;width:100%;margin:0;padding:11px 12px;border:0;border-radius:0;background:linear-gradient(180deg,color-mix(in srgb,var(--panel2),transparent 25%),var(--panel));text-align:left;font-weight:700;font-size:13.5px;min-height:46px;transition:background .3s ease}
.details-panel .detail-group-head:hover{background:var(--hover)}
.detail-group-head:after{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--primary);opacity:0;transition:opacity .38s ease}
.detail-group.open .detail-group-head:after{opacity:1}
.dg-icon{font-size:16px;line-height:1;filter:drop-shadow(0 1px 2px rgba(0,0,0,.3));transition:transform .45s cubic-bezier(.34,1.56,.64,1)}
.detail-group.open .dg-icon{transform:scale(1.16) rotate(-6deg)}
.dg-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dg-badge{flex:none;min-width:20px;padding:1px 7px;border-radius:999px;background:color-mix(in srgb,var(--primary),transparent 86%);color:var(--primary);font-size:11px;font-weight:700;text-align:center}
.dg-caret{flex:none;color:var(--muted);font-size:12px;transition:transform .4s cubic-bezier(.4,0,.2,1)}
.detail-group.open .dg-caret{transform:rotate(180deg)}
.detail-group-body{display:grid;grid-template-rows:0fr;transition:grid-template-rows .42s cubic-bezier(.4,0,.2,1)}
.detail-group.open .detail-group-body{grid-template-rows:1fr}
.dg-inner{overflow:hidden;min-height:0;padding:0 12px;opacity:0;transform:translateY(-5px);transition:opacity .32s ease .05s,transform .38s ease .05s,padding .42s cubic-bezier(.4,0,.2,1)}
.detail-group.open .dg-inner{opacity:1;transform:none;padding:2px 12px 12px}
.dg-inner>button,.dg-inner>input{width:100%;margin:4px 0}
.dg-row{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin:0;padding:6px 0;border-bottom:1px dashed color-mix(in srgb,var(--line),transparent 45%);font-size:13px}
.dg-row:last-child{border-bottom:0}
.dg-row-label{flex:none;color:var(--muted)}
.dg-row-value{text-align:right;font-weight:600;overflow-wrap:anywhere}
.contact-card{padding:8px 0;border-bottom:1px dashed color-mix(in srgb,var(--line),transparent 45%)}
.contact-card:last-child{border-bottom:0}
.contact-card strong{display:block;font-size:13px;overflow-wrap:anywhere}
@media(prefers-reduced-motion:reduce){
  .identity-card:before,.identity-dot.online{animation:none}
  .detail-group-body,.dg-inner,.dg-caret,.dg-icon,.detail-chip,.detail-group{transition-duration:.01ms}
}

/* Pinned messages sits with the search control, not in the tab cluster: it
   takes over the margin-left:auto so the pair stays right-aligned together. */
.pane-tabs #staffPinnedButton{margin-left:auto;width:36px;height:36px;min-height:36px;padding:0;border-radius:9px;display:grid;place-items:center;background:var(--panel2);font-size:16px;line-height:1;transition:transform .3s cubic-bezier(.34,1.56,.64,1),background .25s ease}
.pane-tabs #staffPinnedButton:hover{background:var(--hover);transform:translateY(-1px) rotate(-12deg)}
.pane-tabs #staffPinnedButton+#conversationSearchButton{margin-left:6px}

/* Search scope: names by default, messages/notes one tap away. */
.search-scope{display:flex;align-items:center;flex-wrap:wrap;gap:5px;padding:2px 1px 0;font-size:12px;animation:slideDown .22s var(--ez-out)}
.search-scope>span{color:var(--muted);margin-right:2px}
.search-scope button{min-height:26px;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:600;color:var(--muted);background:var(--panel2);border:1px solid var(--line)}
.search-scope button:hover{color:var(--primary);border-color:color-mix(in srgb,var(--primary) 45%,var(--line))}
.search-scope button.active{color:var(--primary);background:color-mix(in srgb,var(--primary) 14%,var(--panel));border-color:color-mix(in srgb,var(--primary) 45%,var(--line))}
