/* DD AI Widget Render Bundle v1.0 — single source of truth for preview, cards, and deployed bot.
   Scoped to .dd-* selectors. Loaded by get-started preview, carousel cards, and deployed widget.js. */

/* ============ root + base structure ============ */
.dd-host{
  --dd-primary:#0ea5e9; --dd-secondary:#d4af37; --dd-bg:#ffffff; --dd-bg-solid:#ffffff;
  --dd-bot-msg:#f1f5f9; --dd-client-msg:#0ea5e9;
  --dd-bot-text:#1e293b; --dd-client-text:#ffffff;
  --dd-text:#1e293b; --dd-muted:#64748b; --dd-input-bg:#f8fafc; --dd-border:rgba(0,0,0,.08);
  --dd-radius-win:18px; --dd-radius-bubble:14px;
  --dd-shadow:0 12px 40px rgba(0,0,0,.18);
  --dd-font:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
  --dd-popup-bg:#ffffff; --dd-popup-text:#1e293b; --dd-popup-border:rgba(0,0,0,.08);
  --dd-fx-accent:rgba(14,165,233,0.4); --dd-fx-glint:#fff;
  position:fixed; z-index:2147483600; box-sizing:border-box;
  font-family:var(--dd-font);
}
/* dark-mode-aware overrides: applied when cfg.darkMode === true (JS adds .dd-dark) */
.dd-host.dd-dark{
  --dd-muted:#94a3b8;
  --dd-input-bg:rgba(255,255,255,.06);
  --dd-border:rgba(255,255,255,.08);
  --dd-fx-glint:rgba(156,163,175,.45);
}
.dd-host.dd-dark .dd-persona,.dd-host.dd-dark .dd-social-proof{background:rgba(255,255,255,.04)}
.dd-host.dd-dark .dd-popup .dd-popup-close{background:rgba(255,255,255,.08);color:var(--dd-popup-text)}
.dd-host.dd-dark .dd-popup .dd-popup-close:hover{background:rgba(255,255,255,.16)}
.dd-host.dd-dark .dd-foot .dd-mic:hover,.dd-host.dd-dark .dd-foot .dd-photo:hover{background:rgba(255,255,255,.06)}
.dd-host *,.dd-host *::before,.dd-host *::after{box-sizing:border-box}
.dd-host.dd-pos-br{bottom:max(20px,env(safe-area-inset-bottom));right:max(20px,env(safe-area-inset-right))}
.dd-host.dd-pos-bl{bottom:max(20px,env(safe-area-inset-bottom));left:max(20px,env(safe-area-inset-left))}
.dd-host.dd-pos-tr{top:max(20px,env(safe-area-inset-top));right:max(20px,env(safe-area-inset-right))}
.dd-host.dd-pos-tl{top:max(20px,env(safe-area-inset-top));left:max(20px,env(safe-area-inset-left))}
.dd-host.dd-mode-card{position:relative;inset:auto;width:100%;height:100%;overflow:hidden;border-radius:12px;background:var(--dd-bg);box-shadow:none}
/* R4.3: preview-slot mode — host fills the slot so child positions resolve cleanly + clicks work */
.dd-render-slot{position:relative;overflow:hidden}
.dd-render-slot .dd-host{position:absolute !important;inset:0 !important;width:auto !important;height:auto !important;z-index:1;pointer-events:auto}
.dd-render-slot .dd-window{position:absolute !important;width:calc(100% - 20px) !important;height:calc(100% - 90px) !important;max-height:calc(100% - 90px) !important;bottom:80px !important;right:10px !important;left:auto !important;top:auto !important}
.dd-render-slot .dd-host.dd-pos-bl .dd-window{left:10px !important;right:auto !important}
.dd-render-slot .dd-button{bottom:14px !important;right:14px !important;z-index:3;pointer-events:auto !important}
.dd-render-slot .dd-host.dd-pos-bl .dd-button{left:14px !important;right:auto !important}
.dd-render-slot .dd-popup{right:14px !important;bottom:90px !important;max-width:calc(100% - 28px) !important;z-index:2;pointer-events:auto !important}
.dd-render-slot .dd-host.dd-pos-bl .dd-popup{left:14px !important;right:auto !important}
/* visibility-cascade safety: parent modal forces visibility:visible on all descendants — make sure window respects display:none until opened */
.dd-render-slot .dd-window:not(.dd-open){display:none !important}
.dd-render-slot .dd-window.dd-open{display:flex !important}
.dd-host.dd-mode-card .dd-window{position:relative;inset:auto;width:100%;height:100%;box-shadow:none;border-radius:12px}
.dd-host.dd-mode-card .dd-button,.dd-host.dd-mode-card .dd-popup{display:none}

/* ============ button shapes ============ */
.dd-button{position:absolute;bottom:0;right:0;width:62px;height:62px;background:linear-gradient(135deg,var(--dd-primary),var(--dd-secondary));color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;border:none;box-shadow:0 10px 28px rgba(0,0,0,.28),0 0 0 0 rgba(0,0,0,0);transition:transform .25s cubic-bezier(.34,1.56,.64,1),box-shadow .25s;overflow:hidden;padding:0;outline:none;text-overflow:ellipsis;white-space:nowrap}
.dd-button.dd-btn-circle .dd-btn-label,.dd-button.dd-btn-square .dd-btn-label{display:none !important}
.dd-button:hover{transform:scale(1.06) rotate(-2deg);box-shadow:0 14px 36px rgba(0,0,0,.36)}
.dd-button:active{transform:scale(.96)}
.dd-button.dd-btn-circle{border-radius:50%}
.dd-button.dd-btn-pill{border-radius:32px;width:auto;min-width:64px;height:50px;padding:0 18px;gap:8px}
.dd-button.dd-btn-pill .dd-btn-label{font-size:13px;font-weight:700;letter-spacing:.2px;white-space:nowrap}
.dd-button.dd-btn-square{border-radius:14px}
.dd-button .dd-btn-icon{width:26px;height:26px;flex:0 0 26px;display:flex;align-items:center;justify-content:center;position:relative;z-index:2}
.dd-button .dd-btn-icon svg{width:100%;height:100%}
.dd-host.dd-pos-bl .dd-button,.dd-host.dd-pos-tl .dd-button{left:0;right:auto}
.dd-host.dd-pos-tl .dd-button,.dd-host.dd-pos-tr .dd-button{top:0;bottom:auto}
/* unread badge */
.dd-button .dd-badge{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;border-radius:9px;background:#ef4444;color:#fff;font-size:10px;font-weight:800;display:flex;align-items:center;justify-content:center;padding:0 5px;box-shadow:0 2px 8px rgba(0,0,0,.3);border:2px solid var(--dd-bg-solid,var(--dd-bg));z-index:3}

/* ============ popup (greeting bubble that floats next to button) ============ */
.dd-popup{position:absolute;bottom:80px;right:6px;width:max-content;max-width:min(300px,calc(100vw - 40px));min-width:220px;padding:14px 40px 14px 16px;background:var(--dd-popup-bg);color:var(--dd-popup-text);border-radius:16px;box-shadow:0 16px 40px rgba(0,0,0,.28),0 2px 8px rgba(0,0,0,.1);font-size:13px;line-height:1.45;cursor:pointer;animation:dd-popup-in .45s cubic-bezier(.34,1.56,.64,1) both;border:1px solid var(--dd-popup-border);font-weight:500;font-family:var(--dd-font);white-space:normal;word-wrap:break-word}
.dd-popup::before{content:"";position:absolute;left:24px;bottom:-7px;width:14px;height:14px;background:var(--dd-popup-bg);border-right:1px solid var(--dd-popup-border);border-bottom:1px solid var(--dd-popup-border);transform:rotate(45deg);border-bottom-right-radius:3px}
.dd-host.dd-pos-bl .dd-popup::before,.dd-host.dd-pos-tl .dd-popup::before{left:auto;right:24px}
.dd-popup .dd-popup-close{position:absolute;top:6px;right:8px;background:rgba(0,0,0,.06);border:none;color:var(--dd-popup-text);opacity:.6;font-size:16px;cursor:pointer;width:24px;height:24px;border-radius:50%;line-height:1;display:flex;align-items:center;justify-content:center;padding:0;transition:opacity .15s,background .15s}
.dd-popup .dd-popup-close:hover{background:rgba(0,0,0,.12);opacity:1}
.dd-popup .dd-popup-avatar{display:inline-flex;align-items:center;gap:8px;margin-bottom:6px;font-size:11px;color:var(--dd-popup-text);opacity:.7;font-weight:700;letter-spacing:.2px}
.dd-popup .dd-popup-avatar-dot{width:22px;height:22px;border-radius:50%;background:linear-gradient(135deg,var(--dd-primary),var(--dd-secondary));display:flex;align-items:center;justify-content:center;color:#fff;font-size:10px;font-weight:800;overflow:hidden}
.dd-popup .dd-popup-avatar-img img{width:100%;height:100%;object-fit:cover;display:block}
.dd-popup .dd-popup-msg{margin:0 0 12px;color:var(--dd-popup-text)}
.dd-popup .dd-popup-cta{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:10px 14px;background:linear-gradient(135deg,var(--dd-primary),var(--dd-secondary));color:#fff;border:none;border-radius:10px;font-size:13px;font-weight:700;cursor:pointer;font-family:var(--dd-font);box-shadow:0 6px 18px rgba(0,0,0,.18);transition:transform .15s,box-shadow .15s}
.dd-popup .dd-popup-cta:hover{transform:translateY(-1px);box-shadow:0 10px 24px rgba(0,0,0,.24)}
.dd-popup .dd-popup-cta:active{transform:translateY(0)}
.dd-host.dd-pos-bl .dd-popup,.dd-host.dd-pos-tl .dd-popup{left:6px;right:auto}
@keyframes dd-popup-in{from{opacity:0;transform:translateY(10px) scale(.92)}to{opacity:1;transform:translateY(0) scale(1)}}
/* F-WID-01 2026-06-14: optional popup heading + entrance-animation variants (Intermediate+). The
   .dd-popup.dd-popup-* selectors out-specify the base .dd-popup animation so the chosen anim wins. */
.dd-popup .dd-popup-title{margin:0 0 4px;font-size:13px;font-weight:800;line-height:1.3;color:var(--dd-popup-text)}
.dd-popup.dd-popup-fade{animation:dd-popup-fade .4s ease both}
.dd-popup.dd-popup-slide{animation:dd-popup-slide .42s cubic-bezier(.34,1.56,.64,1) both}
.dd-popup.dd-popup-bounce{animation:dd-popup-bounce .55s cubic-bezier(.34,1.56,.64,1) both}
@keyframes dd-popup-fade{from{opacity:0}to{opacity:1}}
@keyframes dd-popup-slide{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}
@keyframes dd-popup-bounce{0%{opacity:0;transform:translateY(14px) scale(.9)}60%{opacity:1;transform:translateY(-3px) scale(1.02)}100%{opacity:1;transform:translateY(0) scale(1)}}

/* ============ window shapes ============ */
.dd-window{position:absolute;bottom:78px;right:0;width:380px;height:560px;max-height:80vh;background:var(--dd-bg);box-shadow:var(--dd-shadow);display:none;flex-direction:column;overflow:hidden;animation:dd-win-in .3s ease-out both}
.dd-window.dd-open{display:flex}
.dd-window.dd-win-rounded{border-radius:var(--dd-radius-win)}
.dd-window.dd-win-square{border-radius:0}
.dd-window.dd-win-speech{border-radius:var(--dd-radius-win);position:relative}
.dd-window.dd-win-speech::after{content:"";position:absolute;bottom:-12px;right:24px;width:0;height:0;border-left:12px solid transparent;border-right:12px solid transparent;border-top:14px solid var(--dd-bg);filter:drop-shadow(0 6px 4px rgba(0,0,0,.06))}
.dd-host.dd-pos-bl .dd-window,.dd-host.dd-pos-tl .dd-window{left:0;right:auto}
.dd-host.dd-pos-tl .dd-window,.dd-host.dd-pos-tr .dd-window{top:78px;bottom:auto}
@keyframes dd-win-in{from{opacity:0;transform:translateY(20px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}

/* open animations — apply to .dd-host.dd-anim-* on initial mount */
.dd-host.dd-anim-bounce .dd-button{animation:dd-anim-bounce .8s cubic-bezier(.34,1.56,.64,1)}
@keyframes dd-anim-bounce{0%{transform:scale(.3) translateY(20px)}60%{transform:scale(1.1)}100%{transform:scale(1)}}
.dd-host.dd-anim-fade .dd-button{animation:dd-anim-fade .5s ease-out}
@keyframes dd-anim-fade{from{opacity:0}to{opacity:1}}
.dd-host.dd-anim-slide .dd-button{animation:dd-anim-slide .5s ease-out}
@keyframes dd-anim-slide{from{opacity:0;transform:translateY(40px)}to{opacity:1;transform:translateY(0)}}
.dd-host.dd-anim-scale .dd-button{animation:dd-anim-scale .4s ease-out}
@keyframes dd-anim-scale{from{transform:scale(0)}to{transform:scale(1)}}

/* ============ launcher idle states (Lever 1) — set via data-idle on the host ============
   breathe = subtle scale loop (basic+ default); pulse = ring pulse (~pro+ default);
   shimmer = ambient gradient sheen (enterprise default). Only active while window is closed.
   These run continuously via CSS (no JS rAF) and are killed by prefers-reduced-motion. */
.dd-host[data-idle="breathe"] .dd-button{animation:dd-idle-breathe 2.6s ease-in-out infinite}
@keyframes dd-idle-breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.06)}}
.dd-host[data-idle="pulse"] .dd-button{animation:dd-idle-pulse 2.8s ease-out infinite}
@keyframes dd-idle-pulse{0%{box-shadow:0 10px 28px rgba(0,0,0,.28),0 0 0 0 var(--dd-fx-accent,rgba(14,165,233,.5))}70%{box-shadow:0 10px 28px rgba(0,0,0,.28),0 0 0 14px var(--dd-fx-accent-fade,rgba(14,165,233,0))}100%{box-shadow:0 10px 28px rgba(0,0,0,.28),0 0 0 0 var(--dd-fx-accent-fade,rgba(14,165,233,0))}}
.dd-host[data-idle="shimmer"] .dd-button{position:absolute}
.dd-host[data-idle="shimmer"] .dd-button::before{content:"";position:absolute;inset:0;border-radius:inherit;background:linear-gradient(110deg,transparent 40%,rgba(255,255,255,.45) 50%,transparent 60%);background-size:220% 100%;animation:dd-idle-shimmer 3.6s linear infinite;pointer-events:none;z-index:1}
@keyframes dd-idle-shimmer{from{background-position:220% 0}to{background-position:-220% 0}}
/* idle motion stops once the window is open (button hidden behind window anyway, but be tidy) */
.dd-host:has(.dd-window.dd-open)[data-idle] .dd-button{animation:none}

/* action buttons (Pro+ feature) */
.dd-action-btns{display:flex;flex-wrap:wrap;gap:6px;padding:6px 14px 0}
.dd-action-btn{flex:1 1 auto;min-width:0;text-align:center;font-size:12px;font-weight:700;padding:8px 12px;border-radius:10px;background:var(--dd-primary);color:#fff;text-decoration:none;transition:filter .15s}
.dd-action-btn:hover{filter:brightness(1.1)}

/* ============ header ============ */
.dd-header{padding:14px 16px;background:linear-gradient(135deg,var(--dd-primary),var(--dd-secondary));color:#fff;display:flex;align-items:center;gap:10px;position:relative;overflow:hidden;flex:0 0 auto}
.dd-header .dd-avatar{width:36px;height:36px;border-radius:50%;background:rgba(255,255,255,.2);display:flex;align-items:center;justify-content:center;font-size:18px;flex:0 0 36px;overflow:hidden}
.dd-header .dd-avatar img{width:100%;height:100%;object-fit:cover}
.dd-header .dd-titles{flex:1;min-width:0}
.dd-header .dd-title{font-size:15px;font-weight:700;line-height:1.2;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dd-header .dd-sub{font-size:11px;opacity:.85;margin:2px 0 0;line-height:1.2}
.dd-header .dd-close{background:none;border:none;color:#fff;font-size:22px;cursor:pointer;padding:0 4px;opacity:.85}
.dd-header .dd-close:hover{opacity:1}
.dd-header .dd-mute-toggle{background:none;border:none;color:#fff;cursor:pointer;padding:0 4px;opacity:.85;display:flex;align-items:center;justify-content:center}
.dd-header .dd-mute-toggle:hover{opacity:1}
.dd-header .dd-mute-toggle svg{width:18px;height:18px}

/* ============ body / messages ============ */
.dd-body{flex:1;overflow-y:auto;padding:14px 14px 8px;display:flex;flex-direction:column;gap:10px;background:var(--dd-bg);position:relative;scroll-behavior:smooth;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
.dd-msg-row{display:flex;align-items:flex-end;gap:8px;animation:dd-msg-in .28s cubic-bezier(.34,1.56,.64,1) both;max-width:90%}
/* role-differentiated entry: bot slides in from the left, client pops up from the right */
.dd-msg-row.dd-row-bot{align-self:flex-start;animation:dd-bot-in .35s cubic-bezier(.34,1.56,.64,1) both}
.dd-msg-row.dd-row-client{align-self:flex-end;flex-direction:row-reverse;animation:dd-client-in .3s cubic-bezier(.34,1.56,.64,1) both}
@keyframes dd-bot-in{from{opacity:0;transform:translateX(-12px) scale(.95)}to{opacity:1;transform:translateX(0) scale(1)}}
@keyframes dd-client-in{from{opacity:0;transform:translateX(12px) translateY(6px) scale(.9)}60%{transform:scale(1.03)}to{opacity:1;transform:translateX(0) translateY(0) scale(1)}}
.dd-msg-avatar{flex:0 0 26px;width:26px;height:26px;border-radius:50%;background:linear-gradient(135deg,var(--dd-primary),var(--dd-secondary));color:#fff;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;overflow:hidden;box-shadow:0 2px 6px rgba(0,0,0,.15)}
.dd-msg-avatar img{width:100%;height:100%;object-fit:cover}
.dd-msg{padding:10px 14px;font-size:13px;line-height:1.45;word-wrap:break-word;animation:dd-msg-pop .3s cubic-bezier(.34,1.56,.64,1) both;box-shadow:0 2px 6px rgba(0,0,0,.06),0 1px 2px rgba(0,0,0,.04)}
@keyframes dd-msg-pop{from{opacity:0;transform:scale(.92)}60%{transform:scale(1.02)}to{opacity:1;transform:scale(1)}}
.dd-msg.dd-bot{background:var(--dd-bot-msg);color:var(--dd-bot-text)}
.dd-msg.dd-client{background:var(--dd-client-msg);color:var(--dd-client-text)}
.dd-msg-row.dd-row-client .dd-msg{align-self:flex-end}
.dd-msg-col{display:flex;flex-direction:column;gap:2px;min-width:0}
.dd-msg-ts{font-size:10px;color:var(--dd-muted);margin:0 4px;opacity:.7}
@keyframes dd-msg-in{from{opacity:0;transform:translateY(8px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}

/* bubble shapes (apply to .dd-msg) */
.dd-bubble-rounded .dd-msg{border-radius:var(--dd-radius-bubble)}
.dd-bubble-rounded .dd-msg.dd-bot{border-bottom-left-radius:4px}
.dd-bubble-rounded .dd-msg.dd-client{border-bottom-right-radius:4px}
.dd-bubble-square .dd-msg{border-radius:2px}
.dd-bubble-pill .dd-msg{border-radius:999px;padding:8px 16px}
.dd-bubble-asymmetric .dd-msg.dd-bot{border-radius:14px 14px 14px 2px}
.dd-bubble-asymmetric .dd-msg.dd-client{border-radius:14px 14px 2px 14px}
.dd-bubble-speech .dd-msg{border-radius:14px;position:relative}
.dd-bubble-speech .dd-msg.dd-bot::before{content:"";position:absolute;left:-6px;bottom:6px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:8px solid var(--dd-bot-msg)}
.dd-bubble-speech .dd-msg.dd-client::after{content:"";position:absolute;right:-6px;bottom:6px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-left:8px solid var(--dd-client-msg)}

/* per-shape depth/shadow — replaces the barely-visible flat shadow (Lever 4) */
.dd-bubble-rounded .dd-msg{box-shadow:0 2px 6px rgba(0,0,0,.06),0 1px 2px rgba(0,0,0,.04)}
.dd-bubble-rounded .dd-msg.dd-client{box-shadow:0 4px 10px rgba(0,0,0,.1)}
.dd-bubble-square .dd-msg{box-shadow:0 1px 3px rgba(0,0,0,.12),0 0 0 1px rgba(0,0,0,.04)}
.dd-bubble-pill .dd-msg{box-shadow:0 6px 14px rgba(0,0,0,.08),0 2px 4px rgba(0,0,0,.05)}
.dd-bubble-pill .dd-msg.dd-client{box-shadow:0 6px 18px rgba(0,0,0,.12)}
.dd-bubble-asymmetric .dd-msg.dd-bot{box-shadow:-2px 4px 12px rgba(0,0,0,.08)}
.dd-bubble-asymmetric .dd-msg.dd-client{box-shadow:2px 4px 12px rgba(0,0,0,.1)}
.dd-bubble-speech .dd-msg{box-shadow:0 8px 16px rgba(0,0,0,.1)}
.dd-host.dd-dark .dd-msg{box-shadow:0 2px 8px rgba(0,0,0,.4)}

/* ============ typing indicator: 4 shapes x 3 sizes ============ */
.dd-typing{align-self:flex-start;display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--dd-bot-msg);border-radius:14px;color:var(--dd-bot-text);font-size:12px;min-height:28px}
.dd-typing .dd-typing-text{opacity:.7;font-size:11px}
.dd-typing .dd-typing-vis{display:inline-flex;align-items:flex-end;gap:3px;height:14px}
.dd-typing.dd-ti-size-s .dd-typing-vis{height:10px}
.dd-typing.dd-ti-size-l .dd-typing-vis{height:18px}
.dd-typing .dd-typing-vis span{display:inline-block;background:var(--dd-primary);opacity:.7}

/* dots */
.dd-typing.dd-ti-dots .dd-typing-vis span{width:6px;height:6px;border-radius:50%;animation:dd-dot 1.2s infinite ease-in-out both}
.dd-typing.dd-ti-dots.dd-ti-size-s .dd-typing-vis span{width:4px;height:4px}
.dd-typing.dd-ti-dots.dd-ti-size-l .dd-typing-vis span{width:8px;height:8px}
.dd-typing.dd-ti-dots .dd-typing-vis span:nth-child(2){animation-delay:.15s}
.dd-typing.dd-ti-dots .dd-typing-vis span:nth-child(3){animation-delay:.3s}
@keyframes dd-dot{0%,80%,100%{transform:scale(.6);opacity:.4}40%{transform:scale(1);opacity:1}}

/* wave */
.dd-typing.dd-ti-wave .dd-typing-vis span{width:3px;height:14px;border-radius:2px;animation:dd-wave 1s infinite ease-in-out both}
.dd-typing.dd-ti-wave.dd-ti-size-s .dd-typing-vis span{height:10px;width:2px}
.dd-typing.dd-ti-wave.dd-ti-size-l .dd-typing-vis span{height:18px;width:4px}
.dd-typing.dd-ti-wave .dd-typing-vis span:nth-child(2){animation-delay:.1s}
.dd-typing.dd-ti-wave .dd-typing-vis span:nth-child(3){animation-delay:.2s}
.dd-typing.dd-ti-wave .dd-typing-vis span:nth-child(4){animation-delay:.3s}
@keyframes dd-wave{0%,40%,100%{transform:scaleY(.4)}20%{transform:scaleY(1)}}

/* bounce */
.dd-typing.dd-ti-bounce .dd-typing-vis span{width:7px;height:7px;border-radius:50%;animation:dd-bounce 1s infinite ease-in-out both}
.dd-typing.dd-ti-bounce.dd-ti-size-s .dd-typing-vis span{width:5px;height:5px}
.dd-typing.dd-ti-bounce.dd-ti-size-l .dd-typing-vis span{width:9px;height:9px}
.dd-typing.dd-ti-bounce .dd-typing-vis span:nth-child(2){animation-delay:.15s}
.dd-typing.dd-ti-bounce .dd-typing-vis span:nth-child(3){animation-delay:.3s}
@keyframes dd-bounce{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}}

/* pulse */
.dd-typing.dd-ti-pulse .dd-typing-vis span{width:12px;height:12px;border-radius:50%;animation:dd-pulse 1.4s infinite ease-out both;opacity:1}
.dd-typing.dd-ti-pulse.dd-ti-size-s .dd-typing-vis span{width:9px;height:9px}
.dd-typing.dd-ti-pulse.dd-ti-size-l .dd-typing-vis span{width:16px;height:16px}
.dd-typing.dd-ti-pulse .dd-typing-vis span:nth-child(2),.dd-typing.dd-ti-pulse .dd-typing-vis span:nth-child(3){display:none}
@keyframes dd-pulse{0%{transform:scale(.5);opacity:1}100%{transform:scale(1.6);opacity:0}}

/* industry — glyph rotation, 3 SVG glyphs cycle every 600ms with opacity fade.
   The glyph slots are wired by JS via cfg.typing or the iconButton spec; this CSS
   handles the visual cycling. Each span hosts an SVG/glyph; only one visible at a time. */
.dd-typing.dd-ti-industry .dd-typing-vis{position:relative;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;color:var(--dd-primary)}
.dd-typing.dd-ti-industry.dd-ti-size-s .dd-typing-vis{width:14px;height:14px}
.dd-typing.dd-ti-industry.dd-ti-size-l .dd-typing-vis{width:22px;height:22px}
.dd-typing.dd-ti-industry .dd-typing-vis span{position:absolute;inset:0;display:inline-flex;align-items:center;justify-content:center;background:none;border-radius:0;opacity:0;animation:dd-ti-industry 1.8s infinite ease-in-out both;color:var(--dd-primary);font-size:14px;line-height:1}
.dd-typing.dd-ti-industry.dd-ti-size-l .dd-typing-vis span{font-size:18px}
.dd-typing.dd-ti-industry .dd-typing-vis span svg{width:100%;height:100%;fill:var(--dd-primary)}
.dd-typing.dd-ti-industry .dd-typing-vis span:nth-child(1){animation-delay:0s}
.dd-typing.dd-ti-industry .dd-typing-vis span:nth-child(2){animation-delay:.6s}
.dd-typing.dd-ti-industry .dd-typing-vis span:nth-child(3){animation-delay:1.2s}
@keyframes dd-ti-industry{0%,33%,100%{opacity:0;transform:scale(.85)}10%,23%{opacity:1;transform:scale(1)}}

/* pulse-ring — concentric rings expanding from center */
.dd-typing.dd-ti-ring .dd-typing-vis{position:relative;width:18px;height:18px}
.dd-typing.dd-ti-ring.dd-ti-size-s .dd-typing-vis{width:14px;height:14px}
.dd-typing.dd-ti-ring.dd-ti-size-l .dd-typing-vis{width:22px;height:22px}
.dd-typing.dd-ti-ring .dd-typing-vis span{display:none}
.dd-typing.dd-ti-ring .dd-typing-vis::before,.dd-typing.dd-ti-ring .dd-typing-vis::after{content:"";position:absolute;inset:0;border-radius:50%;border:2px solid var(--dd-primary);animation:dd-ti-ring 1.4s cubic-bezier(.2,.6,.4,1) infinite}
.dd-typing.dd-ti-ring .dd-typing-vis::after{animation-delay:.7s}
@keyframes dd-ti-ring{0%{transform:scale(.2);opacity:1}100%{transform:scale(1);opacity:0}}

/* gradient-shift — single color-shifting blob (premium AI vibe) */
.dd-typing.dd-ti-gradient .dd-typing-vis{width:26px;height:8px}
.dd-typing.dd-ti-gradient.dd-ti-size-s .dd-typing-vis{height:6px;width:22px}
.dd-typing.dd-ti-gradient.dd-ti-size-l .dd-typing-vis{height:10px;width:30px}
.dd-typing.dd-ti-gradient .dd-typing-vis span{width:100%;height:100%;border-radius:5px;opacity:1;background:linear-gradient(90deg,var(--dd-primary),var(--dd-secondary),var(--dd-primary));background-size:200% 100%;animation:dd-ti-gradient 1.6s linear infinite}
@keyframes dd-ti-gradient{from{background-position:0% 0}to{background-position:200% 0}}

/* particle-shower — tiny dots falling and respawning */
.dd-typing.dd-ti-particle .dd-typing-vis{width:24px;height:14px;position:relative}
.dd-typing.dd-ti-particle .dd-typing-vis span{position:absolute;bottom:0;width:3px;height:3px;border-radius:50%;background:var(--dd-primary);opacity:1;animation:dd-ti-particle 1.2s ease-in infinite both}
.dd-typing.dd-ti-particle .dd-typing-vis span:nth-child(1){left:2px;animation-delay:0s}
.dd-typing.dd-ti-particle .dd-typing-vis span:nth-child(2){left:10px;animation-delay:.3s}
.dd-typing.dd-ti-particle .dd-typing-vis span:nth-child(3){left:18px;animation-delay:.6s}
@keyframes dd-ti-particle{0%{transform:translateY(-14px);opacity:0}30%{opacity:1}100%{transform:translateY(0);opacity:0}}

/* mascot-thinking — uses the industry mascot SVG (rocks side-to-side while "thinking") */
.dd-typing.dd-ti-mascot .dd-typing-vis{width:auto;height:24px}
.dd-typing.dd-ti-mascot .dd-typing-vis span{background:none;opacity:1}
.dd-typing.dd-ti-mascot .dd-ti-mascot-svg{display:inline-flex;width:24px;height:24px;color:var(--dd-primary);animation:dd-ti-mascot 1.6s ease-in-out infinite}
.dd-typing.dd-ti-mascot .dd-ti-mascot-svg svg{width:100%;height:100%}
@keyframes dd-ti-mascot{0%,100%{transform:rotate(-7deg) translateY(0)}50%{transform:rotate(7deg) translateY(-2px)}}

/* ============ chips (use primary tint, text always centered) ============ */
/* scoped under .dd-host so host-page .dd-chip rules (e.g. dd-upgrade.css) can't bleed into the widget */
.dd-host .dd-chips{display:grid;grid-template-columns:repeat(var(--dd-chip-cols,4),minmax(0,1fr));gap:6px;padding:8px 14px 0}
.dd-host .dd-chip{font-size:var(--dd-chip-font,12px);font-weight:600;padding:6px 8px;border-radius:14px;background:var(--dd-chip-bg,rgba(14,165,233,.1));color:var(--dd-chip-text,var(--dd-primary));border:1px solid var(--dd-chip-border,var(--dd-primary));cursor:pointer;transition:background .15s,transform .15s,box-shadow .15s;display:flex;align-items:center;justify-content:center;text-align:center;line-height:1.15;font-family:inherit;min-height:30px;white-space:normal;word-break:break-word;overflow-wrap:anywhere;hyphens:auto}
.dd-host .dd-chip:hover{background:var(--dd-chip-bg-hover,var(--dd-primary));color:#fff;transform:translateY(-1px);box-shadow:0 4px 12px rgba(0,0,0,.12)}
.dd-host .dd-chip.dd-chip-primary{background:var(--dd-primary);color:#fff;border-color:transparent}
.dd-host .dd-chip.dd-chip-primary:hover{filter:brightness(1.08)}
/* chip click feedback (Lever 1): scale-down on press + radial ripple flash on tap */
.dd-host .dd-chip{position:relative;overflow:hidden}
.dd-host .dd-chip:active{transform:scale(.96)}
.dd-host .dd-chip.dd-chip-rippling::after{content:"";position:absolute;inset:0;background:radial-gradient(circle at center,var(--dd-primary),transparent 70%);opacity:.35;animation:dd-chip-ripple .55s ease-out forwards;pointer-events:none}
@keyframes dd-chip-ripple{from{transform:scale(.3);opacity:.55}to{transform:scale(2.4);opacity:0}}

/* ============ input bar ============ */
.dd-foot{flex:0 0 auto;padding:10px 12px;background:var(--dd-input-bg);border-top:1px solid var(--dd-border);display:flex;align-items:center;gap:8px}
.dd-foot input{flex:1;border:none;background:var(--dd-bg-solid,var(--dd-bg));padding:10px 14px;border-radius:999px;font-size:13px;outline:none;color:var(--dd-text)}
.dd-foot input::placeholder{color:var(--dd-muted)}
.dd-foot .dd-send{background:var(--dd-primary);color:#fff;border:none;width:38px;height:38px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:transform .15s;position:relative;overflow:hidden}
.dd-foot .dd-send.dd-send-wide{width:auto;min-width:38px;height:38px;padding:0 16px;border-radius:999px}
.dd-foot .dd-send:hover{transform:scale(1.08)}
.dd-foot .dd-send:active{transform:scale(.92);transition:transform .08s}
.dd-foot .dd-send svg{width:18px;height:18px}
/* send micro-interaction (Lever 1): brief shimmer burst on send */
.dd-foot .dd-send.dd-just-sent::after{content:"";position:absolute;inset:0;border-radius:50%;background:radial-gradient(circle at center,rgba(255,255,255,.6),transparent 70%);animation:dd-send-shine .42s ease-out forwards;pointer-events:none}
@keyframes dd-send-shine{0%{transform:scale(.4);opacity:1}100%{transform:scale(2.2);opacity:0}}
.dd-foot .dd-mic,.dd-foot .dd-photo{background:none;border:none;color:var(--dd-muted);cursor:pointer;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:50%}
.dd-foot .dd-mic:hover,.dd-foot .dd-photo:hover{background:rgba(0,0,0,.05);color:var(--dd-primary)}
.dd-foot .dd-mic svg,.dd-foot .dd-photo svg{width:18px;height:18px}

/* ============ persona header / social proof footer (Enterprise) ============ */
.dd-persona{padding:6px 14px;background:rgba(0,0,0,.03);font-size:11px;color:var(--dd-muted);text-align:center;border-bottom:1px solid var(--dd-border)}
.dd-social-proof{padding:6px 14px;background:rgba(0,0,0,.03);font-size:10px;color:var(--dd-muted);text-align:center;border-top:1px solid var(--dd-border);display:flex;align-items:center;justify-content:center;gap:4px}
.dd-social-proof svg{width:10px;height:10px;color:#fbbf24}

/* ============ watermark ============ */
.dd-watermark{padding:4px 0;text-align:center;font-size:9px;color:var(--dd-muted);background:var(--dd-bg-solid,var(--dd-bg));border-top:1px solid var(--dd-border)}
.dd-watermark a{color:var(--dd-muted);text-decoration:none}

/* ============ background style (Pro+): gradient / translucent window ============
   --dd-bg holds the resolved background (solid colour | linear-gradient | rgba). --dd-bg-solid
   is always the flat colour for elements that must stay opaque (input bar, watermark, badge ring).
   Body/header are transparent on gradient/translucent so the window background shows through. */
.dd-bg-gradient .dd-body,.dd-bg-translucent .dd-body{background:transparent}
.dd-bg-translucent .dd-window{backdrop-filter:blur(8px) saturate(140%);-webkit-backdrop-filter:blur(8px) saturate(140%)}

/* ============ below-message shortcuts (Pro+): chips rendered under the first bot message ============ */
.dd-below-chips{display:grid;grid-template-columns:repeat(var(--dd-chip-cols,2),1fr);gap:6px;margin-top:8px}
.dd-below-chips .dd-chip,.dd-host .dd-below-chips .dd-chip{font-size:var(--dd-chip-font,12px);font-weight:600;padding:6px 8px;border-radius:14px;background:var(--dd-chip-bg,rgba(14,165,233,.1));color:var(--dd-chip-text,var(--dd-primary));border:1px solid var(--dd-chip-border,var(--dd-primary));cursor:pointer;transition:background .15s,transform .15s,box-shadow .15s;display:flex;align-items:center;justify-content:center;text-align:center;line-height:1.15;font-family:inherit;min-height:30px;white-space:normal;word-break:break-word;overflow-wrap:anywhere;hyphens:auto;position:relative;overflow:hidden}
.dd-below-chips .dd-chip:hover,.dd-host .dd-below-chips .dd-chip:hover{background:var(--dd-chip-bg-hover,var(--dd-primary));color:#fff;transform:translateY(-1px);box-shadow:0 4px 12px rgba(0,0,0,.12)}
.dd-below-chips .dd-chip:active{transform:scale(.96)}
.dd-below-chips .dd-chip.dd-chip-rippling::after{content:"";position:absolute;inset:0;background:radial-gradient(circle at center,var(--dd-primary),transparent 70%);opacity:.35;animation:dd-chip-ripple .55s ease-out forwards;pointer-events:none}

/* ============ EFFECT PRIMITIVES ============ */

/* animatedHeaderGradient — slow rotating gradient between primary+secondary */
.dd-fx-grad .dd-header{background:linear-gradient(135deg,var(--dd-primary),var(--dd-secondary),var(--dd-primary));background-size:300% 300%;animation:dd-grad-shift 12s ease-in-out infinite}
@keyframes dd-grad-shift{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}

/* waterDropletsHeader */
.dd-fx-drops .dd-header::after{content:"";position:absolute;inset:0;pointer-events:none;background-image:radial-gradient(circle at 20% 30%,rgba(255,255,255,.6) 1.5px,transparent 2px),radial-gradient(circle at 60% 70%,rgba(255,255,255,.5) 1.5px,transparent 2px),radial-gradient(circle at 80% 20%,rgba(255,255,255,.4) 1px,transparent 1.5px);background-size:80px 60px,90px 70px,70px 50px;animation:dd-drop 4s linear infinite}
@keyframes dd-drop{from{background-position:0 -60px,0 -70px,0 -50px}to{background-position:0 100%,0 100%,0 100%}}

/* steamFromHeader */
.dd-fx-steam .dd-header::after{content:"";position:absolute;inset:auto 0 -10px 0;height:30px;pointer-events:none;background:radial-gradient(ellipse at 30% 100%,rgba(255,255,255,.5) 0,transparent 60%),radial-gradient(ellipse at 70% 100%,rgba(255,255,255,.4) 0,transparent 60%);animation:dd-steam 6s ease-in-out infinite alternate}
@keyframes dd-steam{from{transform:translateY(0);opacity:.6}to{transform:translateY(-6px);opacity:.9}}

/* sparkleField — uses --dd-fx-glint so dark templates can recolor */
.dd-fx-sparkle .dd-header::after{content:"";position:absolute;inset:0;pointer-events:none;background-image:radial-gradient(circle at 15% 25%,var(--dd-fx-glint,#fff) 1px,transparent 1.5px),radial-gradient(circle at 45% 60%,var(--dd-fx-glint,#fff) 1px,transparent 1.5px),radial-gradient(circle at 75% 30%,var(--dd-fx-glint,#fff) 1px,transparent 1.5px),radial-gradient(circle at 85% 75%,var(--dd-fx-glint,#fff) 1px,transparent 1.5px);animation:dd-sparkle 3s ease-in-out infinite alternate}
@keyframes dd-sparkle{from{opacity:.3}to{opacity:1}}

/* leafFall */
.dd-fx-leaves .dd-header::after{content:"🍃";position:absolute;top:-10px;left:20%;font-size:14px;opacity:.6;animation:dd-leaf 8s linear infinite;pointer-events:none}
.dd-fx-leaves .dd-header::before{content:"🍃";position:absolute;top:-10px;left:70%;font-size:12px;opacity:.5;animation:dd-leaf 9s linear infinite -3s;pointer-events:none}
@keyframes dd-leaf{0%{transform:translateY(0) rotate(0deg)}100%{transform:translateY(120px) rotate(360deg);opacity:0}}

/* pulsingGlow — uses --dd-fx-accent so dark templates can recolor */
.dd-fx-glow .dd-button{box-shadow:0 0 0 0 var(--dd-fx-accent,rgba(14,165,233,.7)),0 8px 24px rgba(0,0,0,.25);animation:dd-glow 2s ease-out infinite}
@keyframes dd-glow{0%{box-shadow:0 0 0 0 var(--dd-fx-accent,rgba(14,165,233,.7)),0 8px 24px rgba(0,0,0,.25)}70%{box-shadow:0 0 0 18px var(--dd-fx-accent-fade,rgba(14,165,233,0)),0 8px 24px rgba(0,0,0,.25)}100%{box-shadow:0 0 0 0 var(--dd-fx-accent-fade,rgba(14,165,233,0)),0 8px 24px rgba(0,0,0,.25)}}

/* rippleOnSend (added by JS as one-shot class) */
.dd-ripple{position:absolute;border-radius:50%;background:var(--dd-primary);opacity:.4;transform:translate(-50%,-50%) scale(0);animation:dd-ripple 600ms ease-out forwards;pointer-events:none}
@keyframes dd-ripple{to{transform:translate(-50%,-50%) scale(4);opacity:0}}

/* breathingAvatar (Enterprise) */
.dd-fx-breathe .dd-avatar{animation:dd-breathe 3s ease-in-out infinite}
@keyframes dd-breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.08)}}

/* backdropPattern (industry-specific URL set via inline style) */
.dd-fx-backdrop .dd-body{position:relative}
.dd-fx-backdrop .dd-body::before{content:"";position:absolute;inset:0;opacity:.04;background-image:var(--dd-backdrop-url);background-size:120px;pointer-events:none}

/* messageTrail (Enterprise polish) — uses --dd-fx-accent so dark templates can recolor */
.dd-fx-trail .dd-msg{transition:box-shadow .8s ease-out;box-shadow:0 0 0 rgba(0,0,0,0)}
.dd-fx-trail .dd-msg.dd-new{box-shadow:0 0 12px var(--dd-fx-accent,rgba(14,165,233,.4))}

/* sparkBurst (electrician) */
.dd-fx-spark .dd-send{position:relative;overflow:visible}
.dd-fx-spark.dd-sending .dd-send::after{content:"";position:absolute;inset:-8px;border-radius:50%;background:radial-gradient(circle,var(--dd-fx-accent,rgba(250,204,21,.8)),transparent 70%);animation:dd-spark .6s ease-out forwards;pointer-events:none}
@keyframes dd-spark{0%{transform:scale(.3);opacity:1}100%{transform:scale(2);opacity:0}}

/* dustParticles (builder) */
.dd-fx-dust .dd-header::after{content:"";position:absolute;inset:0;pointer-events:none;background-image:radial-gradient(circle at 10% 50%,rgba(255,255,255,.4) 1px,transparent 1.5px),radial-gradient(circle at 30% 30%,rgba(255,255,255,.3) 1px,transparent 1.5px),radial-gradient(circle at 60% 60%,rgba(255,255,255,.4) 1px,transparent 1.5px),radial-gradient(circle at 85% 40%,rgba(255,255,255,.3) 1px,transparent 1.5px);animation:dd-dust 8s linear infinite}
@keyframes dd-dust{from{background-position:0 0,0 0,0 0,0 0}to{background-position:100px 50px,80px 30px,60px 40px,40px 60px}}

/* rainfall (roofer) */
.dd-fx-rain .dd-header{position:relative;overflow:hidden}
.dd-fx-rain .dd-header::after{content:"";position:absolute;inset:0;pointer-events:none;background-image:linear-gradient(transparent 70%,rgba(255,255,255,.4) 70%,rgba(255,255,255,.4) 71%,transparent 71%);background-size:8px 20px;animation:dd-rain .6s linear infinite}
@keyframes dd-rain{from{background-position:0 0}to{background-position:0 20px}}

/* paintSplash one-shot */
.dd-fx-paint.dd-sending .dd-send::after{content:"";position:absolute;inset:-6px;border-radius:50%;background:conic-gradient(from 0deg,#f87171,#facc15,#34d399,#60a5fa,#a78bfa,#f87171);animation:dd-paint .5s ease-out forwards;pointer-events:none;opacity:.7}
@keyframes dd-paint{0%{transform:scale(.4) rotate(0deg);opacity:.9}100%{transform:scale(2) rotate(180deg);opacity:0}}

/* sun rays (solar) */
.dd-fx-sun .dd-header::after{content:"";position:absolute;top:50%;left:50%;width:100px;height:100px;background:conic-gradient(transparent 0deg,rgba(255,255,255,.3) 10deg,transparent 20deg,transparent 60deg,rgba(255,255,255,.3) 70deg,transparent 80deg);animation:dd-sun 20s linear infinite;transform-origin:center;border-radius:50%;pointer-events:none;opacity:.5}
@keyframes dd-sun{from{transform:translate(-50%,-50%) rotate(0deg)}to{transform:translate(-50%,-50%) rotate(360deg)}}

/* heartbeat (medical) */
.dd-fx-heart .dd-header::after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:linear-gradient(90deg,transparent 0%,transparent 20%,rgba(255,255,255,.8) 25%,transparent 30%,transparent 40%,rgba(255,255,255,.8) 42%,rgba(255,255,255,.8) 44%,transparent 50%,transparent 100%);background-size:100% 100%;animation:dd-heart 1.2s ease-in-out infinite}
@keyframes dd-heart{0%{background-position:-100% 0}100%{background-position:100% 0}}

/* bubble float (cleaner / cafe) */
.dd-fx-bubbles .dd-header::after{content:"";position:absolute;inset:0;background:radial-gradient(circle at 25% 80%,rgba(255,255,255,.6) 3px,transparent 4px),radial-gradient(circle at 65% 60%,rgba(255,255,255,.5) 4px,transparent 5px),radial-gradient(circle at 85% 80%,rgba(255,255,255,.4) 2px,transparent 3px);animation:dd-bubbles 4s ease-in-out infinite;pointer-events:none}
@keyframes dd-bubbles{0%,100%{transform:translateY(0);opacity:.6}50%{transform:translateY(-8px);opacity:.9}}

/* paw print trail (vet) */
.dd-fx-paw .dd-body::before{content:"🐾";position:absolute;left:10%;top:30%;font-size:18px;opacity:.06;transform:rotate(-15deg)}
.dd-fx-paw .dd-body::after{content:"🐾";position:absolute;right:15%;bottom:30%;font-size:14px;opacity:.05;transform:rotate(20deg)}

/* scales sway (lawyer) */
.dd-fx-scale .dd-header::after{content:"⚖️";position:absolute;top:10px;right:50px;font-size:14px;opacity:.4;animation:dd-scale 4s ease-in-out infinite}
@keyframes dd-scale{0%,100%{transform:rotate(-5deg)}50%{transform:rotate(5deg)}}

/* shield pulse (insurance / pest) */
.dd-fx-shield .dd-header::after{content:"";position:absolute;top:50%;left:50%;width:60px;height:60px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.3) 0%,transparent 70%);animation:dd-shield-pulse 3s ease-out infinite;transform:translate(-50%,-50%);pointer-events:none}
@keyframes dd-shield-pulse{0%{transform:translate(-50%,-50%) scale(.5);opacity:1}100%{transform:translate(-50%,-50%) scale(2);opacity:0}}

/* counting numbers (accountant) */
.dd-fx-count .dd-header::after{content:"123 456 789";position:absolute;inset:0;font-family:monospace;font-size:10px;opacity:.15;letter-spacing:8px;white-space:nowrap;animation:dd-count 8s linear infinite;pointer-events:none;line-height:1;padding-top:18px}
@keyframes dd-count{from{transform:translateX(100%)}to{transform:translateX(-100%)}}

/* breathing header (therapist) */
.dd-fx-breathing .dd-header{animation:dd-breath-header 6s ease-in-out infinite}
@keyframes dd-breath-header{0%,100%{filter:brightness(1)}50%{filter:brightness(1.1)}}

/* flashing light (towing) */
.dd-fx-flash .dd-header{position:relative}
.dd-fx-flash .dd-header::after{content:"";position:absolute;top:8px;right:50px;width:8px;height:8px;border-radius:50%;background:#ef4444;box-shadow:0 0 8px #ef4444;animation:dd-flash 1s ease-in-out infinite}
@keyframes dd-flash{0%,100%{opacity:.3}50%{opacity:1}}

/* hover float houses (real estate) */
.dd-fx-houses .dd-body::before{content:"🏠";position:absolute;left:-20px;top:20%;font-size:32px;opacity:.04;animation:dd-house-float 12s ease-in-out infinite;pointer-events:none}
.dd-fx-houses .dd-body::after{content:"🏡";position:absolute;right:-20px;bottom:30%;font-size:28px;opacity:.04;animation:dd-house-float 15s ease-in-out infinite -5s;pointer-events:none}
@keyframes dd-house-float{0%,100%{transform:translateX(0)}50%{transform:translateX(30px)}}

/* starfield (cosmic customs) — uses --dd-fx-glint so light templates can recolor */
.dd-fx-stars .dd-body::before{content:"";position:absolute;inset:0;background-image:radial-gradient(circle,var(--dd-fx-glint,#fff) 1px,transparent 1.5px);background-size:40px 40px;opacity:.08;animation:dd-stars 60s linear infinite;pointer-events:none}
@keyframes dd-stars{from{background-position:0 0}to{background-position:200px 200px}}
/* on light templates, the default #fff glint disappears; in light mode use a darker glint for stars */
.dd-host:not(.dd-dark) .dd-fx-stars .dd-body::before{background-image:radial-gradient(circle,rgba(30,41,59,.5) 1px,transparent 1.5px)}

/* ============ ambientGlyph primitive — drifting industry glyphs in the chat body bg ============
   Replaces the single-use leafFall / pawPrintTrail / floatingHouses / starfield drift effects.
   JS (FX.ambientGlyph) injects a .dd-fx-ambient layer of .dd-fx-ag spans with per-glyph inline
   left/delay/duration/font-size. Three motion styles: fall, float, tile. Layer sits behind messages. */
.dd-fx-ambient{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:0}
.dd-body{position:relative}
.dd-body>.dd-msg-row,.dd-body>.dd-typing,.dd-body>.dd-msg{position:relative;z-index:1}
.dd-fx-ag{position:absolute;top:-8%;line-height:1;opacity:.12;will-change:transform,opacity;filter:saturate(.9)}
.dd-fx-ambient-fall .dd-fx-ag{animation:dd-ag-fall linear infinite}
.dd-fx-ambient-float .dd-fx-ag{top:auto;bottom:8%;animation:dd-ag-float ease-in-out infinite alternate}
.dd-fx-ambient-tile .dd-fx-ag{opacity:.07;animation:dd-ag-tile ease-in-out infinite alternate}
@keyframes dd-ag-fall{0%{transform:translateY(0) rotate(0deg);opacity:0}10%{opacity:.14}90%{opacity:.14}100%{transform:translateY(420px) rotate(220deg);opacity:0}}
@keyframes dd-ag-float{from{transform:translateY(0) translateX(0)}to{transform:translateY(-26px) translateX(14px)}}
@keyframes dd-ag-tile{from{transform:scale(1) rotate(-4deg);opacity:.05}to{transform:scale(1.12) rotate(4deg);opacity:.1}}
/* dark templates: emoji glyphs clash with monochrome aesthetic — dim + desaturate so they read as texture */
.dd-host.dd-dark .dd-fx-ag{opacity:.07;filter:grayscale(.55) brightness(1.4) saturate(.5)}
.dd-host.dd-dark .dd-fx-ambient-tile .dd-fx-ag{opacity:.045}

/* ============ Lever 4: glassmorphism + animated gradient header (Pro+ / Enterprise) ============ */
/* Animated gradient header — richer 8s drift on premium tiers. A pack's explicit headerOverlay
   (.dd-fx-grad etc.) still wins because it's a more specific/later rule; this is the tier baseline. */
.dd-host.dd-tier-proplus .dd-header,.dd-host.dd-tier-enterprise .dd-header{background:linear-gradient(135deg,var(--dd-primary) 0%,var(--dd-secondary) 50%,var(--dd-primary) 100%);background-size:200% 200%;animation:dd-grad-rich 8s ease-in-out infinite alternate}
@keyframes dd-grad-rich{0%{background-position:0% 0%}100%{background-position:100% 100%}}
/* Glassmorphism — frosted header + chip bar on Pro+ where backdrop-filter is supported */
@supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  .dd-host.dd-tier-proplus .dd-header,.dd-host.dd-tier-enterprise .dd-header{background:linear-gradient(135deg,var(--dd-primary) 0%,var(--dd-secondary) 55%,var(--dd-primary) 100%);background-size:200% 200%;-webkit-backdrop-filter:blur(18px) saturate(170%);backdrop-filter:blur(18px) saturate(170%)}
  .dd-host.dd-tier-proplus .dd-chips,.dd-host.dd-tier-enterprise .dd-chips{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:linear-gradient(180deg,transparent,var(--dd-chip-glass,rgba(255,255,255,.45)));border-top:1px solid var(--dd-border)}
  .dd-host.dd-tier-proplus.dd-dark .dd-chips,.dd-host.dd-tier-enterprise.dd-dark .dd-chips{--dd-chip-glass:rgba(255,255,255,.04)}
}
/* perf: skip blur on low-density mobile screens (it's the most expensive paint) */
@media (max-width:480px) and (max-resolution:1.5dppx){
  .dd-host .dd-header,.dd-host .dd-chips{-webkit-backdrop-filter:none !important;backdrop-filter:none !important}
}

/* ============ Lever 1.10: extra hover states (desktop pointers only) ============ */
@media (hover:hover){
  .dd-header .dd-avatar:hover{transform:scale(1.1);transition:transform .2s}
  .dd-header .dd-close:hover{background:rgba(255,255,255,.16);border-radius:50%}
  .dd-action-btn:hover{transform:translateY(-1px);box-shadow:0 6px 14px rgba(0,0,0,.18)}
}

/* ============ Lever 4.5: theme-aware loading skeleton ============ */
.dd-skeleton{align-self:flex-start;height:32px;max-width:70%;min-width:44%;border-radius:var(--dd-radius-bubble);background:linear-gradient(90deg,var(--dd-bot-msg) 0%,var(--dd-input-bg) 50%,var(--dd-bot-msg) 100%);background-size:200% 100%;animation:dd-skeleton 1.6s linear infinite;box-shadow:0 2px 6px rgba(0,0,0,.05);position:relative;z-index:1}
.dd-skeleton.dd-skeleton-narrow{max-width:42%;min-width:30%}
@keyframes dd-skeleton{from{background-position:200% 0}to{background-position:-200% 0}}

/* ============ industry mascots — animated SVG (Lever 3) ============ */
/* Header slot: shows the mascot at enterprise for the 5 supported industries; empty slot stays hidden. */
.dd-fx-mascot .dd-mascot-slot{display:none}                /* empty (unsupported industry) — reserve hook, no box */
.dd-fx-mascot .dd-mascot-slot.dd-mascot-has{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;flex:0 0 30px;color:#fff}
.dd-mascot-slot .dd-mascot{width:100%;height:100%}
.dd-mascot-slot .dd-mascot svg,.dd-mascot{display:block}
.dd-mascot.dd-mascot-bob{animation:dd-mascot-bob 3.2s ease-in-out infinite}
@keyframes dd-mascot-bob{0%,100%{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-2px) rotate(2deg)}}
.dd-mascot .dd-mascot-eye{transform-box:fill-box;transform-origin:center;animation:dd-mascot-blink 4s infinite}
@keyframes dd-mascot-blink{0%,94%,100%{transform:scaleY(1)}97%{transform:scaleY(.1)}}
.dd-mascot .dd-mascot-spin{animation:dd-mascot-spin 9s linear infinite}
@keyframes dd-mascot-spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}
.dd-mascot .dd-mascot-sparkle{transform-box:fill-box;transform-origin:center;animation:dd-mascot-sparkle 2.6s ease-in-out infinite}
@keyframes dd-mascot-sparkle{0%,100%{opacity:.5;transform:scale(.85)}50%{opacity:1;transform:scale(1.15)}}

/* prefers-reduced-motion: kill non-essential animations (audit: covers ALL Lever 1-4 additions) */
@media (prefers-reduced-motion: reduce){
  .dd-host *,.dd-host *::before,.dd-host *::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important}
  .dd-fx-grad .dd-header,.dd-fx-drops .dd-header::after,.dd-fx-steam .dd-header::after,.dd-fx-sparkle .dd-header::after,.dd-fx-leaves .dd-header::after,.dd-fx-leaves .dd-header::before,.dd-fx-glow .dd-button,.dd-fx-breathe .dd-avatar,.dd-fx-spark.dd-sending .dd-send::after,.dd-fx-dust .dd-header::after,.dd-fx-rain .dd-header::after,.dd-fx-sun .dd-header::after,.dd-fx-heart .dd-header::after,.dd-fx-bubbles .dd-header::after,.dd-fx-shield .dd-header::after,.dd-fx-count .dd-header::after,.dd-fx-flash .dd-header::after,.dd-fx-houses .dd-body::before,.dd-fx-houses .dd-body::after,.dd-fx-stars .dd-body::before,.dd-fx-ag,.dd-typing.dd-ti-industry .dd-typing-vis span,
  /* Wave 5 additions: launcher idle, premium gradient header, new typing variants, send/chip bursts, skeleton, mascots */
  .dd-host[data-idle] .dd-button,.dd-host[data-idle="shimmer"] .dd-button::before,.dd-host.dd-tier-proplus .dd-header,.dd-host.dd-tier-enterprise .dd-header,.dd-typing.dd-ti-ring .dd-typing-vis::before,.dd-typing.dd-ti-ring .dd-typing-vis::after,.dd-typing.dd-ti-gradient .dd-typing-vis span,.dd-typing.dd-ti-particle .dd-typing-vis span,.dd-typing.dd-ti-mascot .dd-ti-mascot-svg,.dd-foot .dd-send.dd-just-sent::after,.dd-host .dd-chip.dd-chip-rippling::after,.dd-skeleton,.dd-mascot,.dd-mascot-bob,.dd-mascot .dd-mascot-eye,.dd-mascot .dd-mascot-spin,.dd-mascot .dd-mascot-sparkle{animation:none !important}
  /* reduced motion: keep ambient glyphs as a faint static texture, no drift */
  .dd-fx-ag{opacity:.08 !important;transform:none !important}
  .dd-typing.dd-ti-industry .dd-typing-vis span:nth-child(1){opacity:1 !important}
  /* keep skeleton visible (flat tint) and the gradient typing blob legible without motion */
  .dd-skeleton{background:var(--dd-bot-msg) !important}
  .dd-typing.dd-ti-gradient .dd-typing-vis span{background:var(--dd-primary) !important}
}

/* focus rings (a11y) */
.dd-host .dd-chip:focus-visible,.dd-button:focus-visible,.dd-send:focus-visible,.dd-mic:focus-visible,.dd-photo:focus-visible,.dd-close:focus-visible,.dd-popup-close:focus-visible,.dd-action-btn:focus-visible{outline:2px solid var(--dd-primary);outline-offset:2px}
.dd-foot input:focus-visible{outline:2px solid var(--dd-primary);outline-offset:1px;border-radius:999px}

/* mobile breakpoints */
@media (max-width:768px){
  .dd-window{width:380px;max-width:calc(100vw - 24px)}
}
@media (max-width:480px){
  .dd-window{width:calc(100vw - 20px);right:10px;max-height:85vh}
  .dd-host.dd-pos-bl .dd-window,.dd-host.dd-pos-tl .dd-window{left:10px}
  .dd-popup{max-width:calc(100vw - 80px)}
  .dd-popup::before{left:18px}
  .dd-host.dd-pos-bl .dd-popup::before,.dd-host.dd-pos-tl .dd-popup::before{right:18px}
  .dd-button.dd-btn-pill{height:46px;min-width:56px}
  .dd-msg{max-width:84%;font-size:13px}
  .dd-header{padding:12px 14px}
  .dd-foot{padding:8px 10px;padding-bottom:max(8px,env(safe-area-inset-bottom))}
}
@media (max-width:360px){
  .dd-chip{padding:5px 11px;font-size:11px}
  .dd-msg{padding:8px 11px}
}

/* touch-device target sizing — 44x44 floor on tappable controls.
   Visual size kept tight with hit-area expansion via transparent border padding. */
@media (pointer: coarse){
  .dd-popup .dd-popup-close{width:44px;height:44px;border:6px solid transparent;background-clip:padding-box;font-size:18px;top:0;right:0;border-radius:50%;background-color:rgba(0,0,0,.06)}
  .dd-popup .dd-popup-close:hover{background-color:rgba(0,0,0,.12)}
  .dd-host.dd-dark .dd-popup .dd-popup-close{background-color:rgba(255,255,255,.08)}
  .dd-host.dd-dark .dd-popup .dd-popup-close:hover{background-color:rgba(255,255,255,.16)}
  .dd-foot .dd-send{width:44px;height:44px}
  .dd-foot .dd-send svg{width:20px;height:20px}
  .dd-foot .dd-mic,.dd-foot .dd-photo{width:44px;height:44px}
  .dd-foot .dd-mic svg,.dd-foot .dd-photo svg{width:20px;height:20px}
  .dd-header .dd-close{min-width:44px;min-height:44px;padding:0 8px;font-size:24px}
  .dd-header .dd-mute-toggle{min-width:44px;min-height:44px;padding:0 6px}
}

/* ===== 2026-06-11 fidelity additions (baked-widget extras; funnel never sets these) ===== */
.dd-consent{padding:5px 14px 0;text-align:center;font-size:8.5px;line-height:1.45;color:var(--dd-muted);background:var(--dd-bg-solid,var(--dd-bg));opacity:.92}
.dd-consent a{color:var(--dd-muted);font-weight:600;text-decoration:none}
.dd-consent a:hover{text-decoration:underline}
.dd-header .dd-hdr-logo{max-height:24px;max-width:90px;object-fit:contain;margin-right:6px;flex:0 0 auto}
.dd-foot .dd-mic.dd-recording{color:#ef4444;animation:ddRecPulse 1s ease-in-out infinite}
@keyframes ddRecPulse{0%,100%{opacity:1}50%{opacity:.4}}

/* ── image replies (chat inline images) — DD-IMGREPLY 2026-06-17 ── */
.dd-img-wrap{display:block;margin-top:8px;max-width:240px;border-radius:12px;overflow:hidden;background:var(--dd-input-bg,#f1f5f9);border:1px solid var(--dd-border);box-shadow:0 4px 14px rgba(0,0,0,.10);cursor:zoom-in;text-decoration:none;line-height:0;position:relative;transition:transform .18s ease,box-shadow .18s ease}
.dd-img-wrap:hover{transform:translateY(-1px);box-shadow:0 8px 22px rgba(0,0,0,.16)}
.dd-img-wrap img{display:block;width:100%;height:auto;max-height:260px;object-fit:cover}
.dd-img-wrap img:not(.dd-img-loaded){min-height:120px;background:linear-gradient(110deg,rgba(0,0,0,.05) 30%,rgba(0,0,0,.10) 50%,rgba(0,0,0,.05) 70%);background-size:200% 100%;animation:dd-img-shim 1.2s linear infinite}
@keyframes dd-img-shim{to{background-position:-200% 0}}
.dd-img-cap{display:block;font-size:11px;line-height:1.35;color:var(--dd-muted);padding:6px 9px;background:var(--dd-bg);border-top:1px solid var(--dd-border)}
.dd-img-wrap.dd-img-broken{cursor:default;max-width:200px}
.dd-img-wrap.dd-img-broken img{display:none}
.dd-img-wrap.dd-img-broken::before{content:"Image unavailable";display:block;padding:14px 12px;font-size:11px;color:var(--dd-muted);text-align:center;line-height:1.3}
.dd-img-lb{position:fixed;inset:0;z-index:2147483600;background:rgba(8,12,20,.88);display:flex;align-items:center;justify-content:center;flex-direction:column;gap:14px;padding:24px;animation:dd-lb-in .2s ease both;cursor:zoom-out;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}
.dd-img-lb img{max-width:92vw;max-height:80vh;width:auto;height:auto;border-radius:12px;box-shadow:0 24px 70px rgba(0,0,0,.55);cursor:default}
.dd-img-lb .dd-img-lb-cap{color:#e5e7eb;font-size:13px;max-width:80vw;text-align:center;font-family:var(--dd-font);line-height:1.4}
.dd-img-lb .dd-img-lb-x{position:absolute;top:16px;right:18px;width:42px;height:42px;border-radius:50%;background:rgba(255,255,255,.16);color:#fff;border:none;font-size:24px;cursor:pointer;display:flex;align-items:center;justify-content:center;line-height:1;transition:background .15s}
.dd-img-lb .dd-img-lb-x:hover{background:rgba(255,255,255,.28)}
@keyframes dd-lb-in{from{opacity:0}to{opacity:1}}
