/* ============================================================
   Indygo — pixel-art maskotka Geoboard.ai
   Animacje: czyste CSS @keyframes na transformach + opacity.
   Stany: idle / wave / point / thinking / celebrate.
   ============================================================ */

/* ─── A: Logo (header) — pixel head + wordmark ─── */

.geoboard-logo {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	color: var(--ink);
}

.geoboard-logo__head {
	flex-shrink: 0;
}

.geoboard-logo__wordmark {
	display: inline-flex;
	align-items: baseline;
	gap: 1px;
	line-height: 1;
}

.geoboard-logo__name {
	font-family: var(--font-tight);
	font-weight: 700;
	font-size: 22px;
	letter-spacing: -0.025em;
}

.geoboard-logo__tld {
	font-family: var(--font-mono);
	font-weight: 500;
	font-size: 18px;
	letter-spacing: -0.01em;
	color: var(--accent);
}

/* ─── B: Sprite — base sprite struktura ─── */

.indygo {
	position: relative;
	pointer-events: none;
}

.indygo-shadow {
	background: rgba(0, 0, 0, 0.45);
	border-radius: 50%;
	filter: blur(2px);
}

.indygo-body {
	transform-origin: 50% 80%;
}

/* Eye overlays — wszystkie 4 warianty w DOM, pokazujemy aktywny */
.indygo-eyes {
	display: none;
}

.indygo-sprite[data-state="idle"] .indygo-eyes--open       { display: block; }
.indygo-sprite[data-state="idle"].is-blinking .indygo-eyes--open  { display: none; }
.indygo-sprite[data-state="idle"].is-blinking .indygo-eyes--blink { display: block; }

.indygo-sprite[data-state="wave"]      .indygo-eyes--open      { display: block; }
.indygo-sprite[data-state="point"]     .indygo-eyes--open      { display: block; }
.indygo-sprite[data-state="thinking"]  .indygo-eyes--thinking  { display: block; }
.indygo-sprite[data-state="celebrate"] .indygo-eyes--celebrate { display: block; }

/* Arms — show only in matching state */
.indygo-arm {
	display: none;
}
.indygo-sprite[data-state="wave"]  .indygo-arm--wave  { display: block; }
.indygo-sprite[data-state="point"] .indygo-arm--point { display: block; }

/* Thought bubble — only when thinking */
.indygo-thought {
	display: none;
}
.indygo-sprite[data-state="thinking"] .indygo-thought { display: block; }

/* Confetti layer — only when celebrating */
.indygo-confetti-layer {
	display: none;
	position: absolute;
	inset: 0;
	pointer-events: none;
}
.indygo-sprite[data-state="celebrate"] .indygo-confetti-layer { display: block; }

.indygo-confetti {
	display: block;
	opacity: 0;
	animation: indygo-confetti 1.4s ease-out infinite;
}

/* ─── C: Keyframes — per state ─── */

/* idle: gentle bob */
.indygo-sprite[data-state="idle"] .indygo-body {
	animation: indygo-bob 2.4s ease-in-out infinite;
}
@keyframes indygo-bob {
	0%, 100% { transform: translateY(0); }
	50%      { transform: translateY(-3px); }
}

/* wave: bigger bob + arm wave */
.indygo-sprite[data-state="wave"] .indygo-body {
	animation: indygo-bob 1.4s ease-in-out infinite;
}
.indygo-sprite[data-state="wave"] .indygo-arm--wave {
	animation: indygo-wave 0.9s ease-in-out infinite;
}
@keyframes indygo-wave {
	0%, 100% { transform: rotate(-10deg); }
	50%      { transform: rotate(25deg); }
}

/* point: body lean + arm pulse */
.indygo-sprite[data-state="point"] .indygo-body {
	animation: indygo-lean 1.6s ease-in-out infinite;
}
@keyframes indygo-lean {
	0%, 100% { transform: translateX(0) translateY(0); }
	50%      { transform: translateX(2px) translateY(-2px); }
}
.indygo-sprite[data-state="point"] .indygo-arm--point {
	animation: indygo-point-pulse 1.2s ease-in-out infinite;
}
@keyframes indygo-point-pulse {
	0%, 100% { transform: translateX(0); }
	50%      { transform: translateX(3px); }
}

/* thinking: head tilt + thought bubble */
.indygo-sprite[data-state="thinking"] .indygo-body {
	animation: indygo-tilt 3.2s ease-in-out infinite;
	transform-origin: 50% 80%;
}
@keyframes indygo-tilt {
	0%, 100% { transform: rotate(-3deg); }
	50%      { transform: rotate(3deg); }
}
.indygo-sprite[data-state="thinking"] .indygo-thought {
	animation: indygo-thought 2.8s ease-in-out infinite;
}
@keyframes indygo-thought {
	0%, 100% { opacity: 0.4; transform: translateY(0); }
	50%      { opacity: 1;   transform: translateY(-2px); }
}

/* celebrate: bouncy + confetti rise */
.indygo-sprite[data-state="celebrate"] .indygo-body {
	animation: indygo-bounce 0.5s ease-in-out infinite;
}
@keyframes indygo-bounce {
	0%, 100% { transform: translateY(0) scale(1, 1); }
	40%      { transform: translateY(-6px) scale(0.95, 1.05); }
	60%      { transform: translateY(-6px) scale(1.05, 0.95); }
}
@keyframes indygo-confetti {
	0%   { transform: translateY(0)   rotate(0deg);   opacity: 0; }
	20%  { opacity: 1; }
	100% { transform: translateY(-32px) rotate(180deg); opacity: 0; }
}

/* ─── D: Sticky widget ─── */

.indygo-widget {
	position: fixed;
	bottom: 24px;
	right: 24px;
	z-index: 60;
	display: flex;
	flex-direction: column;
	align-items: flex-end;
	gap: 8px;
	pointer-events: auto;

	/* pop-in: hidden by default, JS adds .is-visible after 2s */
	opacity: 0;
	transform: scale(0.6) translateY(16px);
	transition:
		opacity 0.4s var(--ease, cubic-bezier(0.4, 0, 0.2, 1)),
		transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
}

.indygo-widget.is-visible {
	opacity: 1;
	transform: scale(1) translateY(0);
}

.indygo-widget.is-hidden {
	opacity: 0;
	transform: scale(0.4) translateY(20px);
	pointer-events: none;
}

.indygo-stage {
	position: relative;
	cursor: pointer;
	pointer-events: auto;
	padding: 8px;
	border-radius: 50%;
	transition: filter 0.2s ease;
}

.indygo-stage:hover {
	filter: brightness(1.1) drop-shadow(0 0 8px rgba(200, 222, 60, 0.4));
}

.indygo-stage:focus-visible {
	outline: 2px solid var(--accent);
	outline-offset: 4px;
}

/* ─── E: Speech bubble ─── */

.indygo-bubble {
	position: relative;
	max-width: 280px;
	background: var(--ink, #14130f);
	color: var(--bg, #faf8f3);
	padding: 14px 36px 14px 16px;
	border-radius: 16px;
	font-family: var(--font-sans);
	font-size: 14px;
	line-height: 1.45;
	box-shadow: 0 12px 32px rgba(20, 19, 15, 0.25);
	transform-origin: bottom right;
	animation: indygo-bubble-in 0.35s cubic-bezier(0.34, 1.56, 0.64, 1);
}

.indygo-bubble[hidden] {
	display: none !important;
}

.indygo-bubble::after {
	content: "";
	position: absolute;
	right: 32px;
	bottom: -8px;
	width: 16px;
	height: 16px;
	background: var(--ink, #14130f);
	transform: rotate(45deg);
	border-radius: 0 0 4px 0;
}

.indygo-bubble__text {
	margin: 0;
}

.indygo-bubble__close {
	position: absolute;
	top: 6px;
	right: 6px;
	width: 24px;
	height: 24px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: transparent;
	border: none;
	color: rgba(250, 248, 243, 0.6);
	cursor: pointer;
	border-radius: 50%;
	transition: background 0.15s ease, color 0.15s ease;
}

.indygo-bubble__close:hover,
.indygo-bubble__close:focus-visible {
	background: rgba(250, 248, 243, 0.1);
	color: var(--bg);
	outline: none;
}

@keyframes indygo-bubble-in {
	0%   { opacity: 0; transform: scale(0.7) translateY(8px); }
	100% { opacity: 1; transform: scale(1) translateY(0); }
}

/* ─── F: Controls (sound + close) ─── */

.indygo-controls {
	display: flex;
	gap: 4px;
	padding: 4px;
	background: rgba(20, 19, 15, 0.85);
	backdrop-filter: blur(8px);
	-webkit-backdrop-filter: blur(8px);
	border-radius: 10px;
	opacity: 0;
	transform: translateY(-4px);
	transition: opacity 0.2s ease, transform 0.2s ease;
}

.indygo-widget:hover .indygo-controls,
.indygo-widget:focus-within .indygo-controls,
.indygo-widget.has-bubble .indygo-controls {
	opacity: 1;
	transform: translateY(0);
}

.indygo-control {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 26px;
	height: 26px;
	background: transparent;
	border: none;
	color: rgba(250, 248, 243, 0.7);
	cursor: pointer;
	border-radius: 6px;
	padding: 0;
	transition: background 0.15s ease, color 0.15s ease;
}

.indygo-control:hover,
.indygo-control:focus-visible {
	background: rgba(250, 248, 243, 0.12);
	color: var(--bg);
	outline: none;
}

.indygo-control--sound .indygo-icon--on  { display: none; }
.indygo-control--sound[aria-pressed="true"] .indygo-icon--off { display: none; }
.indygo-control--sound[aria-pressed="true"] .indygo-icon--on  { display: inline; }

/* ─── G: Revive button (gdy user zamknął Indygo) ─── */

.indygo-revive {
	position: fixed;
	bottom: 16px;
	right: 16px;
	z-index: 60;
	width: 40px;
	height: 40px;
	background: var(--ink);
	border: none;
	border-radius: 50%;
	cursor: pointer;
	box-shadow: 0 4px 12px rgba(20, 19, 15, 0.3);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	padding: 0;
	transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.indygo-revive[hidden] { display: none; }

.indygo-revive:hover,
.indygo-revive:focus-visible {
	transform: scale(1.1);
	box-shadow: 0 6px 16px rgba(20, 19, 15, 0.4);
	outline: none;
}

.indygo-revive svg {
	transform: scale(0.65);
}

/* ─── H: Mobile — bottom-left (zamiast right, żeby nie kolizja z chat widgets) ─── */

@media (max-width: 640px) {
	.indygo-widget {
		bottom: 16px;
		right: auto;
		left: 16px;
		align-items: flex-start;
	}

	.indygo-bubble {
		transform-origin: bottom left;
	}

	.indygo-bubble::after {
		right: auto;
		left: 32px;
	}

	.indygo-revive {
		right: auto;
		left: 16px;
	}

	/* Mniejszy sprite na mobile (mniej miejsca) */
	.indygo-stage .indygo-sprite {
		transform: scale(0.7);
		transform-origin: bottom left;
	}
}

/* ─── I: Reduced motion — wyłącza wszystkie animacje sprite ─── */

@media (prefers-reduced-motion: reduce) {
	.indygo-sprite [class*="indygo-"],
	.indygo-confetti,
	.indygo-bubble {
		animation: none !important;
		transition: none !important;
	}
	.indygo-widget {
		transition: opacity 0.2s ease;
		transform: none;
	}
	.indygo-widget.is-visible {
		transform: none;
	}
}
