/**
 * Contact Widget Pro – Front-end styles
 *
 * CSS custom properties are injected by PHP on #cw-widget so they
 * are scoped to the widget and cannot be overridden by theme :root vars.
 * All inner-element selectors are prefixed with .cw-widget to beat
 * theme specificity (e.g. "a { color: #000 }" from theme stylesheets).
 */

/* ============================================================
   CSS Custom Properties — fallback defaults
   (PHP overwrites these on #cw-widget via inline style tag)
   ============================================================ */
:root {
	--cw-primary:      #25D366;
	--cw-accent:       #ffffff;
	--cw-hover:        #1da851;
	--cw-radius:       16px;
	--cw-font:         inherit;
	--cw-z:            99999;
	--cw-panel-w:      340px;
	--cw-trigger-size: 60px;
	--cw-offset:       25px;
	--cw-offset-y:     25px;
	--cw-panel-bg:     #ffffff;
	--cw-header-bg:    var(--cw-primary);
	--cw-text-size:    14px;
	--cw-shadow:       0 5px 20px rgba(0, 0, 0, .22);
	--cw-shadow-sm:    0 2px 8px rgba(0, 0, 0, .14);
	--cw-speed:        .25s;
	--cw-ease:         cubic-bezier(.4, 0, .2, 1);
	--cw-iframe-h:     400px;
	/* v1.3.0 */
	--cw-pulse-dur:    2s;
	--cw-pulse-size:   14px;
	--cw-pulse-color:  color-mix(in srgb, var(--cw-primary) 55%, transparent);
	--cw-fan-gap:      14px;
}

/* ============================================================
   Widget wrapper
   ============================================================ */
.cw-widget {
	position:    fixed;
	bottom:      var(--cw-offset-y, var(--cw-offset));
	z-index:     var(--cw-z);
	font-family: var(--cw-font);
	font-size:   var(--cw-text-size, 14px);
	line-height: 1.5;
	color:       #1a1a1a;
	box-sizing:  border-box;
}

.cw-widget *,
.cw-widget *::before,
.cw-widget *::after {
	box-sizing: inherit;
}

/* Reset theme link/button overrides inside widget */
.cw-widget a,
.cw-widget a:hover,
.cw-widget a:visited,
.cw-widget a:focus,
.cw-widget a:active {
	text-decoration: none;
	box-shadow:      none;
	outline:         none;
}

/* Hard reset all buttons inside widget — prevents theme styles bleeding in.
   Specific button rules below override these defaults. */
.cw-widget button {
	font-family:      var(--cw-font);
	background-color: transparent;
	border-style:     none;
	padding:          0;
	margin:           0;
	color:            inherit;
	cursor:           pointer;
}

.cw-position-right { right: var(--cw-offset); }
.cw-position-left  { left:  var(--cw-offset); }

/* ============================================================
   Trigger button
   ============================================================ */
.cw-widget .cw-trigger {
	display:         flex;
	align-items:     center;
	justify-content: center;
	width:           var(--cw-trigger-size);
	height:          var(--cw-trigger-size);
	border-radius:   50%;
	background:      var(--cw-primary);
	color:           var(--cw-accent) !important;
	border:          none;
	cursor:          pointer;
	box-shadow:      var(--cw-shadow);
	transition:      transform var(--cw-speed) var(--cw-ease),
	                 background var(--cw-speed) var(--cw-ease),
	                 box-shadow var(--cw-speed) var(--cw-ease);
	position:        relative;
	margin-top:      12px;
	outline-offset:  3px;
}

.cw-widget .cw-trigger:hover {
	background:  var(--cw-hover);
	box-shadow:  0 6px 28px rgba(0, 0, 0, .24);
	transform:   scale(1.06);
}

.cw-widget .cw-trigger:focus-visible {
	outline: 2px solid var(--cw-primary);
}

.cw-widget .cw-trigger-icon {
	width:       24px;
	height:      24px;
	flex-shrink: 0;
	transition:  opacity var(--cw-speed) var(--cw-ease),
	             transform var(--cw-speed) var(--cw-ease);
}

/* ============================================================
   Badge
   ============================================================ */
.cw-widget .cw-badge {
	position:       absolute;
	top:            -4px;
	right:          -4px;
	min-width:      20px;
	height:         20px;
	padding:        0 5px;
	border-radius:  10px;
	background:     #e53e3e;
	color:          #fff !important;
	font-size:      11px;
	font-weight:    700;
	line-height:    20px;
	text-align:     center;
	border:         2px solid #fff;
	pointer-events: none;
}

/* ============================================================
   Panel
   ============================================================ */
.cw-widget .cw-panel {
	position:       absolute;
	bottom:         calc(var(--cw-trigger-size) + 12px);
	width:          var(--cw-panel-w);
	background:     var(--cw-panel-bg, #fff);
	border-radius:  var(--cw-radius);
	box-shadow:     var(--cw-shadow);
	overflow:       hidden;

	/* Hidden state */
	opacity:        0;
	transform:      translateY(12px) scale(.97);
	pointer-events: none;
	transition:     opacity var(--cw-speed) var(--cw-ease),
	                transform var(--cw-speed) var(--cw-ease);
}

.cw-position-right .cw-panel { right: 0; }
.cw-position-left  .cw-panel { left:  0; }

.cw-widget .cw-panel.cw-open {
	opacity:        1;
	transform:      translateY(0) scale(1);
	pointer-events: auto;
}

/* ============================================================
   Panel header
   ============================================================ */
.cw-widget .cw-panel__header {
	display:     flex;
	align-items: center;
	gap:         12px;
	padding:     16px;
	background:  var(--cw-header-bg, var(--cw-primary));
	color:       var(--cw-accent) !important;
}

.cw-widget .cw-avatar {
	width:         42px;
	height:        42px;
	border-radius: 50%;
	object-fit:    cover;
	flex-shrink:   0;
	border:        2px solid rgba(255,255,255,.4);
}

.cw-widget .cw-header-info {
	flex:      1;
	min-width: 0;
}

.cw-widget .cw-company-name {
	display:       block;
	font-weight:   700;
	font-size:     15px;
	white-space:   nowrap;
	overflow:      hidden;
	text-overflow: ellipsis;
	color:         var(--cw-accent) !important;
}

.cw-widget .cw-status {
	display:     flex;
	align-items: center;
	gap:         5px;
	font-size:   12px;
	opacity:     .9;
	margin-top:  2px;
	color:       var(--cw-accent) !important;
}

.cw-widget .cw-status-dot {
	width:         8px;
	height:        8px;
	border-radius: 50%;
	flex-shrink:   0;
}

.cw-widget .cw-status--online .cw-status-dot  { background: #48bb78; }
.cw-widget .cw-status--busy .cw-status-dot    { background: #ed8936; }
.cw-widget .cw-status--offline .cw-status-dot { background: #a0aec0; }

/* Close button — always inherits accent color */
.cw-widget .cw-close {
	display:         flex;
	align-items:     center;
	justify-content: center;
	width:           32px;
	height:          32px;
	border-radius:   50%;
	background:      transparent;
	border:          none;
	color:           var(--cw-accent) !important;
	cursor:          pointer;
	opacity:         .8;
	transition:      opacity .15s, background .15s;
	flex-shrink:     0;
	padding:         0;
}

.cw-widget .cw-close:hover {
	opacity:    1;
	background: rgba(0, 0, 0, .18);
}

.cw-widget .cw-close:focus-visible {
	outline:        2px solid var(--cw-accent);
	outline-offset: 2px;
}

/* ============================================================
   Panel body
   ============================================================ */
.cw-widget .cw-panel__body {
	padding:    20px 16px 16px;
	max-height: 440px;
	overflow-y: auto;
	scrollbar-width: thin;
}

/* Remove max-height when iframe is active so it doesn't get clipped */
.cw-widget .cw-panel__body.cw-panel__body--iframe {
	max-height: none;
	overflow-y: visible;
	padding:    12px 16px 16px;
}

.cw-widget .cw-panel__body::-webkit-scrollbar        { width: 4px; }
.cw-widget .cw-panel__body::-webkit-scrollbar-track  { background: transparent; }
.cw-widget .cw-panel__body::-webkit-scrollbar-thumb  { background: #c4c4c4; border-radius: 4px; }

.cw-widget .cw-greeting {
	font-size:   16px;
	font-weight: 700;
	margin:      0 0 6px;
	color:       #1a1a1a;
}

.cw-widget .cw-welcome {
	font-size: 14px;
	color:     #4a4a4a;
	margin:    0 0 16px;
}

/* ============================================================
   Buttons
   ============================================================ */
.cw-widget .cw-buttons {
	display:        flex;
	flex-direction: column;
	gap:            8px;
}

/* Base button — resets AND applies widget styles */
.cw-widget .cw-btn {
	display:         flex;
	align-items:     center;
	gap:             10px;
	width:           100%;
	padding:         11px 16px;
	border-radius:   calc(var(--cw-radius) / 2);
	font-family:     var(--cw-font);
	font-size:       14px;
	font-weight:     500;
	text-decoration: none !important;
	cursor:          pointer;
	transition:      background var(--cw-speed) var(--cw-ease),
	                 color var(--cw-speed) var(--cw-ease),
	                 border-color var(--cw-speed) var(--cw-ease),
	                 box-shadow .15s,
	                 transform .15s;
	border:          2px solid transparent;
	text-align:      left;
	line-height:     1.4;
	box-shadow:      none;
}

.cw-widget .cw-btn:focus-visible {
	outline:        2px solid var(--cw-primary);
	outline-offset: 2px;
}

/* Filled */
.cw-widget .cw-btn--filled {
	background:   var(--cw-primary);
	color:        var(--cw-accent) !important;
	border-color: var(--cw-primary);
}

.cw-widget .cw-btn--filled:hover {
	background:   var(--cw-hover);
	border-color: var(--cw-hover);
	box-shadow:   var(--cw-shadow-sm);
	color:        var(--cw-accent) !important;
}

/* Outline */
.cw-widget .cw-btn--outline {
	background:   transparent;
	color:        var(--cw-primary) !important;
	border-color: var(--cw-primary);
}

.cw-widget .cw-btn--outline:hover {
	background:   var(--cw-primary);
	color:        var(--cw-accent) !important;
	border-color: var(--cw-primary);
}

/* Ghost */
.cw-widget .cw-btn--ghost {
	background:   transparent;
	color:        var(--cw-primary) !important;
	border-color: transparent;
}

.cw-widget .cw-btn--ghost:hover {
	background: rgba(0, 0, 0, .05);
	color:      var(--cw-primary) !important;
}

/* Button icon */
.cw-widget .cw-btn-icon {
	width:       20px;
	height:      20px;
	flex-shrink: 0;
}

/* ============================================================
   Back button (iframe view)
   ============================================================ */
.cw-widget .cw-back-btn {
	display:          flex;
	align-items:      center;
	gap:              6px;
	background:       transparent !important;
	background-color: transparent !important;
	border:           none !important;
	color:            var(--cw-primary) !important;
	font-size:        13px;
	font-weight:      600;
	cursor:           pointer;
	padding:          0;
	margin-bottom:    16px;
	box-shadow:       none !important;
}

.cw-widget .cw-back-btn:hover {
	opacity:    .75;
	background: transparent !important;
}

/* ============================================================
   Iframe view
   ============================================================ */
.cw-widget .cw-iframe-view {
	display:   none;
	animation: cwFadeIn var(--cw-speed) var(--cw-ease);
}

@keyframes cwFadeIn {
	from { opacity: 0; transform: translateX(8px); }
	to   { opacity: 1; transform: translateX(0); }
}

.cw-widget .cw-iframe-frame {
	display:      block;
	width:        100%;
	height:       var(--cw-iframe-h, 400px);
	border:       none;
	border-radius: calc(var(--cw-radius) / 2);
	background:   #f9f9f9;
}

.cw-widget .cw-iframe-loading {
	display:         flex;
	align-items:     center;
	justify-content: center;
	height:          60px;
	color:           #888;
	font-size:       13px;
}

/* ============================================================
   Trigger pulse / ripple animation (v1.2.0)
   ============================================================ */
@keyframes cwPulse {
	0%   { box-shadow: 0 0 0 0 var(--cw-pulse-color, color-mix(in srgb, var(--cw-primary) 55%, transparent)); }
	70%  { box-shadow: 0 0 0 var(--cw-pulse-size, 14px) rgba(0, 0, 0, 0); }
	100% { box-shadow: 0 0 0 0 rgba(0, 0, 0, 0); }
}

.cw-widget.cw-trigger-pulse .cw-trigger,
.cw-widget.cw-trigger-pulse .cw-sidetab-trigger {
	animation: cwPulse var(--cw-pulse-dur, 2s) ease-out infinite;
}

/* ============================================================
   Panel open-animation variants (v1.2.0)
   Default (.cw-anim-slide) reuses the existing translateY+scale.
   ============================================================ */

/* Scale variant */
.cw-widget.cw-anim-scale .cw-panel {
	transform: scale(.85);
}
.cw-widget.cw-anim-scale .cw-panel.cw-open {
	transform: scale(1);
}

/* Fade-only variant */
.cw-widget.cw-anim-fade .cw-panel {
	transform: none;
}
.cw-widget.cw-anim-fade .cw-panel.cw-open {
	transform: none;
}

/* No-animation variant */
.cw-widget.cw-anim-none .cw-panel {
	transition: none;
}

/* ============================================================
   Responsive — mobile
   ============================================================ */
@media (max-width: 480px) {
	:root {
		--cw-panel-w: 100vw;
		--cw-offset:  0px;
	}

	.cw-widget {
		bottom: 0;
	}

	.cw-position-right { right: 16px; }
	.cw-position-left  { left:  16px; }

	.cw-widget .cw-trigger {
		position: fixed;
		bottom:   16px;
	}

	.cw-position-right .cw-trigger { right: 16px; }
	.cw-position-left  .cw-trigger { left:  16px; }

	.cw-widget .cw-panel {
		position:      fixed;
		bottom:        0;
		left:          0;
		right:         0;
		width:         100%;
		max-width:     100%;
		border-radius: var(--cw-radius) var(--cw-radius) 0 0;
		transform:     translateY(20px) scale(1);
	}

	.cw-widget .cw-panel.cw-open {
		transform: translateY(0) scale(1);
	}

	.cw-widget .cw-panel__body {
		max-height: 60vh;
	}
}

/* ============================================================
   Accessibility: reduce motion
   ============================================================ */
@media (prefers-reduced-motion: reduce) {
	.cw-widget .cw-panel,
	.cw-widget .cw-trigger,
	.cw-widget .cw-btn,
	.cw-widget .cw-iframe-view {
		transition: none;
		animation:  none;
	}
}

/* ============================================================
   STYLE A — Contact Card
   Pill-shaped trigger with label text + spacious card panel
   ============================================================ */

/* Pill trigger */
.cw-style-card .cw-trigger {
	width:         auto;
	border-radius: 50px;
	padding:       0 20px 0 14px;
	gap:           10px;
	height:        var(--cw-trigger-size);
}

.cw-style-card .cw-trigger-label {
	font-size:   14px;
	font-weight: 600;
	white-space: nowrap;
	color:       var(--cw-accent) !important;
	line-height: 1;
}

/* Rounded-square avatar in card header */
.cw-style-card .cw-avatar {
	width:         48px;
	height:        48px;
	border-radius: 10px;
}

/* Response time line */
.cw-widget .cw-response-time {
	display:    block;
	font-size:  11px;
	opacity:    .75;
	margin-top: 3px;
	color:      var(--cw-accent) !important;
}

/* ============================================================
   STYLE B — Fan Menu
   Stacked circular icon-buttons that fan out above the trigger
   ============================================================ */

/* Fan container (hidden by default) */
.cw-style-fan .cw-fan-actions {
	position:       absolute;
	bottom:         calc(var(--cw-trigger-size) + var(--cw-fan-gap, 14px));
	right:          0;
	display:        flex;
	flex-direction: column;
	gap:            var(--cw-fan-gap, 14px);
	align-items:    flex-end;
}

.cw-style-fan.cw-position-left .cw-fan-actions {
	right: auto;
	left:  0;
	align-items: flex-start;
}

/* Fan item row (label + icon button) */
.cw-widget .cw-fan-item {
	display:     flex;
	align-items: center;
	gap:         10px;
	opacity:     0;
	transform:   translateY(10px) scale(.88);
	pointer-events: none;
	transition:  opacity var(--cw-speed) var(--cw-ease),
	             transform var(--cw-speed) var(--cw-ease);
}

.cw-style-fan.cw-position-left .cw-fan-item {
	flex-direction: row-reverse;
}

/* Items become visible when fan is open */
.cw-fan-actions.cw-open .cw-fan-item {
	opacity:        1;
	transform:      translateY(0) scale(1);
	pointer-events: auto;
}

/* Staggered entrance — bottom item appears first */
.cw-fan-actions.cw-open .cw-fan-item:nth-child(8) { transition-delay: .00s; }
.cw-fan-actions.cw-open .cw-fan-item:nth-child(7) { transition-delay: .04s; }
.cw-fan-actions.cw-open .cw-fan-item:nth-child(6) { transition-delay: .08s; }
.cw-fan-actions.cw-open .cw-fan-item:nth-child(5) { transition-delay: .12s; }
.cw-fan-actions.cw-open .cw-fan-item:nth-child(4) { transition-delay: .16s; }
.cw-fan-actions.cw-open .cw-fan-item:nth-child(3) { transition-delay: .20s; }
.cw-fan-actions.cw-open .cw-fan-item:nth-child(2) { transition-delay: .24s; }
.cw-fan-actions.cw-open .cw-fan-item:nth-child(1) { transition-delay: .28s; }

/* Floating pill label */
.cw-widget .cw-fan-label {
	background:    rgba(20, 20, 20, .72);
	color:         #fff !important;
	font-size:     12px;
	font-weight:   600;
	padding:       5px 12px;
	border-radius: 50px;
	white-space:   nowrap;
	backdrop-filter: blur(6px);
	-webkit-backdrop-filter: blur(6px);
	pointer-events: none;
}

/* Circular icon button */
.cw-widget .cw-fan-icon-btn {
	display:         flex;
	align-items:     center;
	justify-content: center;
	width:           48px;
	height:          48px;
	border-radius:   50%;
	background:      var(--cw-primary);
	color:           var(--cw-accent) !important;
	border:          none;
	cursor:          pointer;
	box-shadow:      0 3px 12px rgba(0,0,0,.22);
	transition:      transform .15s, box-shadow .15s, background .15s;
	flex-shrink:     0;
	text-decoration: none !important;
}

.cw-widget .cw-fan-icon-btn:hover {
	background:  var(--cw-hover);
	transform:   scale(1.12);
	box-shadow:  0 5px 18px rgba(0,0,0,.28);
	color:       var(--cw-accent) !important;
}

/* Fan panel (for form/iframe actions) — appears above fan */
.cw-style-fan .cw-panel {
	bottom: calc(var(--cw-trigger-size) + var(--cw-fan-gap, 14px));
}

/* Trigger rotates + icon when fan is open */
.cw-style-fan .cw-trigger {
	transition: transform var(--cw-speed) var(--cw-ease),
	            background var(--cw-speed) var(--cw-ease),
	            box-shadow var(--cw-speed) var(--cw-ease);
}

.cw-style-fan .cw-trigger[aria-expanded="true"] {
	background: var(--cw-hover);
	transform:  rotate(45deg);
}

/* ============================================================
   STYLE C — Side Tab
   Vertical tab fixed to the viewport edge
   ============================================================ */

/* Override widget base positioning */
.cw-widget.cw-style-sidetab {
	bottom:    auto;
	top:       50%;
	transform: translateY(-50%);
}

.cw-style-sidetab.cw-position-right {
	right:  0;
	left:   auto;
}

.cw-style-sidetab.cw-position-left {
	left:  0;
	right: auto;
}

/* Vertical tab trigger button */
.cw-widget .cw-sidetab-trigger {
	display:         flex;
	flex-direction:  column;
	align-items:     center;
	justify-content: center;
	gap:             8px;
	width:           44px;
	padding:         18px 0;
	background:      var(--cw-primary);
	color:           var(--cw-accent) !important;
	border:          none;
	cursor:          pointer;
	box-shadow:      var(--cw-shadow);
	transition:      background var(--cw-speed) var(--cw-ease),
	                 box-shadow var(--cw-speed) var(--cw-ease);
	position:        relative;
}

.cw-style-sidetab.cw-position-right .cw-sidetab-trigger {
	border-radius: calc(var(--cw-radius) / 2) 0 0 calc(var(--cw-radius) / 2);
}

.cw-style-sidetab.cw-position-left .cw-sidetab-trigger {
	border-radius: 0 calc(var(--cw-radius) / 2) calc(var(--cw-radius) / 2) 0;
}

.cw-widget .cw-sidetab-trigger:hover {
	background:  var(--cw-hover);
	box-shadow:  -3px 0 16px rgba(0,0,0,.22);
}

.cw-widget .cw-sidetab-icon {
	width:       20px;
	height:      20px;
	color:       var(--cw-accent) !important;
	flex-shrink: 0;
}

.cw-widget .cw-sidetab-label {
	writing-mode:    vertical-lr;
	transform:       rotate(180deg);
	font-size:       11px;
	font-weight:     700;
	letter-spacing:  .08em;
	text-transform:  uppercase;
	color:           var(--cw-accent) !important;
	white-space:     nowrap;
}

/* Side tab panel — slides in from the edge */
.cw-style-sidetab .cw-panel {
	position:   fixed;
	top:        50%;
	bottom:     auto;
	max-height: 80vh;
	overflow-y: auto;
}

.cw-style-sidetab.cw-position-right .cw-panel {
	right:         44px; /* tab width */
	left:          auto;
	border-radius: var(--cw-radius) 0 0 var(--cw-radius);
	transform:     translateX(20px) translateY(-50%) scale(.97);
}

.cw-style-sidetab.cw-position-left .cw-panel {
	left:          44px;
	right:         auto;
	border-radius: 0 var(--cw-radius) var(--cw-radius) 0;
	transform:     translateX(-20px) translateY(-50%) scale(.97);
}

.cw-style-sidetab .cw-panel.cw-open {
	transform: translateX(0) translateY(-50%) scale(1);
}

/* Badge on side tab */
.cw-style-sidetab .cw-badge {
	top:   -6px;
	right: -6px;
}

/* ============================================================
   Responsive overrides for fan + sidetab on mobile
   ============================================================ */
@media (max-width: 480px) {
	/* Fan: extra breathing room between trigger and items on small screens */
	.cw-style-fan .cw-fan-actions {
		bottom: calc(var(--cw-trigger-size) + var(--cw-fan-gap, 14px) + 4px);
	}

	/* Fan: full-width panel when form/iframe opens */
	.cw-style-fan .cw-panel {
		position:      fixed;
		bottom:        0;
		left:          0;
		right:         0;
		width:         100%;
		border-radius: var(--cw-radius) var(--cw-radius) 0 0;
	}

	/* Side tab: move to bottom-right on small screens */
	.cw-widget.cw-style-sidetab {
		top:       auto;
		bottom:    80px;
		transform: none;
	}

	.cw-style-sidetab .cw-panel {
		top:           auto;
		bottom:        0;
		left:          0 !important;
		right:         0 !important;
		width:         100%;
		border-radius: var(--cw-radius) var(--cw-radius) 0 0;
		transform:     translateY(20px) scale(1) !important;
	}

	.cw-style-sidetab .cw-panel.cw-open {
		transform: translateY(0) scale(1) !important;
	}
}
