/* Small paper-world interactions. All animation names stay in this namespace. */
.garden-companion {
	--buddy-paper: #fffdf3;
	--buddy-ink: #2d5047;
	--buddy-muted: #677469;
	--buddy-line: #d4dbc8;
	--buddy-leaf: #839d67;
	--cursor-core: #4e785e;
	--cursor-mint: #8eb49a;
	--cursor-gold: #c5a265;
	--cursor-rim: #fffdf3;
	position: fixed;
	inset: 0;
	z-index: 10004;
	pointer-events: none;
	font: 13px/1.6 -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", sans-serif;
	color: var(--buddy-ink);
}
.garden-companion *, .garden-companion *::before, .garden-companion *::after { box-sizing: border-box; }
.garden-companion button { font: inherit; color: inherit; cursor: pointer; -webkit-tap-highlight-color: transparent; }
.garden-companion button:focus-visible { outline: 2px solid #35665a; outline-offset: 4px; }
.garden-companion [hidden] { display: none !important; }
.garden-pet {
	position: absolute;
	top: 0;
	left: 0;
	width: var(--pet-size, 136px);
	height: calc(var(--pet-size, 136px) + 24px);
	pointer-events: none;
	transform: translate3d(var(--pet-x, 22px), var(--pet-y, calc(100vh - 176px)), 0);
	transition: transform .16s ease;
	user-select: none;
}
.garden-pet-body { position: absolute; inset: 0 0 24px; width: var(--pet-size, 136px); height: var(--pet-size, 136px); padding: 0; border: 0; border-radius: 48% 48% 10% 10%; background: transparent; touch-action: none; pointer-events: auto; -webkit-touch-callout: none; }
.garden-pet-facing { position: absolute; inset: 0; display: block; transform-origin: 50% 50%; transition: transform .3s ease; }
.garden-pet.is-facing-left .garden-pet-facing { transform: scaleX(-1); }
/* MeteorNOX v0.4.2 rebound curve and fixed footpoint, retained by the garden adapter. */
.garden-pet-art { position: relative; display: block; width: 100%; height: 100%; transform-origin: 50% 100%; transition: transform .22s cubic-bezier(.34, 1.56, .64, 1); }
.garden-pet-placeholder { position: absolute; inset: 35%; display: grid; place-items: center; border: 1px solid var(--buddy-line); border-radius: 12px 12px 12px 3px; background: var(--buddy-paper); font: italic 24px/1 Georgia, serif; }
.garden-pet-sprite { position: absolute; inset: 0; display: block; opacity: 0; pointer-events: none; transform-origin: 50% 100%; }
.garden-pet-sprite img { display: block; width: 100%; height: 100%; max-width: none; max-height: none; margin: 0; padding: 0; border: 0; border-radius: 0; object-fit: contain; pointer-events: none; user-select: none; -webkit-user-drag: none; }
.garden-pet.has-sprite .garden-pet-placeholder { display: none; }
.garden-pet.has-sprite .garden-pet-sprite { opacity: 1; }
.garden-pet-name { position: absolute; left: 50%; bottom: 0; transform: translateX(-50%); display: flex; align-items: center; gap: 5px; width: max-content; padding: 1px 9px; border: 1px solid var(--buddy-line); border-radius: 8px 8px 8px 2px; background: var(--buddy-paper); color: var(--buddy-ink); font: 12px/1.5 "Songti SC", "SimSun", Georgia, serif; letter-spacing: .12em; pointer-events: none; }
.garden-pet-sleep { position: absolute; top: 12px; right: 0; display: none; padding: 0 5px; border-radius: 8px; background: var(--buddy-paper); color: var(--buddy-ink); font: italic 15px/1.4 Georgia, serif; letter-spacing: 3px; pointer-events: none; }
.garden-pet.is-resting .garden-pet-sleep { display: block; }
.garden-pet-music { display: none; align-items: center; gap: 2px; height: 10px; }
.garden-pet.is-listening:not(.is-resting) .garden-pet-music { display: flex; }
.garden-pet-music i { width: 2px; height: 8px; background: #728563; animation: gardenMusicBeat 1s ease-in-out infinite alternate; }
.garden-pet-music i:nth-child(2) { animation-delay: -.6s; height: 5px; }
.garden-pet-music i:nth-child(3) { animation-delay: -.3s; height: 7px; }
.garden-pet-menu {
	position: absolute;
	right: -7px;
	top: -2px;
	display: grid;
	place-items: center;
	width: 44px;
	height: 44px;
	padding: 10px;
	border: 0;
	border-radius: 50%;
	background: transparent;
	touch-action: manipulation;
	pointer-events: auto;
}
.garden-pet-menu > svg { width: 23px; height: 23px; padding: 3px; border: 1px solid var(--buddy-line); border-radius: 50%; background: var(--buddy-paper); fill: #92ad7c; stroke: #5c7f5b; stroke-width: 1.1; transition: transform .16s ease; }
.garden-pet-menu:hover > svg, .garden-pet-menu[aria-expanded="true"] > svg { transform: rotate(14deg) scale(1.08); }
.garden-pet.is-dragging { transition: none; }
.garden-pet.is-dragging .garden-pet-body, .garden-pet.is-pressed .garden-pet-body { cursor: grabbing; }
.garden-pet[data-action="feed"]:not(.is-pressed) .garden-pet-sprite { animation: gardenWhaleNibble 1.1s ease both; }
.garden-pet[data-action="pop"]:not(.is-pressed) .garden-pet-sprite { animation: gardenWhaleHop .65s ease both; }
.garden-pet-affection { position: absolute; right: -4px; top: 7px; width: 28px; height: 28px; fill: #c98683; opacity: 0; pointer-events: none; }
.garden-pet[data-action="pet"] .garden-pet-affection { animation: gardenWhaleKindness .8s ease both; }
.garden-pet-snack { position: absolute; width: 27px; height: 27px; left: 45%; top: 67%; fill: #e4bc72; stroke: #906f45; stroke-width: 1.3; opacity: 0; pointer-events: none; }
.garden-pet-snack circle { fill: #906f45; stroke: none; }
.garden-pet[data-action="feed"] .garden-pet-snack { animation: gardenSnack 1.6s ease both; }
.garden-pet-speech {
	position: absolute;
	left: 13px;
	bottom: calc(var(--pet-size, 136px) + 30px);
	width: max-content;
	max-width: min(224px, calc(100vw - 44px));
	padding: 12px 17px;
	border: 1px solid var(--buddy-line);
	border-radius: 24px 24px 24px 9px;
	background: var(--buddy-paper);
	box-shadow: 0 5px 18px #284d4020;
	font-size: 12px;
	line-height: 1.7;
	white-space: normal;
	opacity: 0;
	visibility: hidden;
	transform: translateY(5px);
	transition: opacity .16s ease, transform .16s ease, visibility .16s;
	pointer-events: none;
}
.garden-pet-speech.is-visible { opacity: 1; visibility: visible; transform: none; }
.garden-pet:has(.garden-pet-menu[aria-expanded="true"]) .garden-pet-speech { opacity: 0; visibility: hidden; }
.garden-pet-speech.is-below { bottom: auto; top: calc(var(--pet-size, 136px) + 30px); }
.garden-pet-speech.is-left { left: auto; right: 10px; }
.garden-pet.is-collapsed { width: 48px; height: 48px; }
.garden-pet.is-collapsed .garden-pet-menu, .garden-pet.is-collapsed .garden-pet-name, .garden-pet.is-collapsed .garden-pet-speech, .garden-pet.is-collapsed .garden-pet-sleep { display: none; }
.garden-pet.is-collapsed .garden-pet-body { inset: 0; width: 48px; height: 48px; padding: 3px; border: 1px solid #ccd7c3; border-radius: 50%; background: var(--buddy-paper); box-shadow: 0 4px 14px #24493f20; }
.garden-pet.is-collapsed .garden-pet-facing { inset: 5px; overflow: hidden; border-radius: 50%; }
.garden-pet.is-collapsed .garden-pet-affection, .garden-pet.is-collapsed .garden-pet-snack { display: none; }
.garden-pet-panel {
	position: absolute;
	width: min(286px, calc(100vw - 24px));
	max-height: calc(100dvh - 32px);
	overflow: auto;
	padding: 20px;
	border: 1px solid var(--buddy-line);
	border-radius: 16px 16px 16px 5px;
	background: var(--buddy-paper);
	box-shadow: 0 14px 40px #24473c24;
	pointer-events: auto;
}
.garden-pet-panel-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; }
.garden-pet-panel h2 { margin: 5px 0 0; color: var(--buddy-ink); font: 500 24px/1.4 "Songti SC", "SimSun", Georgia, serif; }
.garden-pet-eyebrow { color: #607354; font: 10px/1.5 Consolas, monospace; letter-spacing: .12em; }
.garden-pet-close { display: grid; place-items: center; flex: 0 0 44px; width: 44px; height: 44px; margin: -10px -10px 0 0; border: 0; border-radius: 50%; background: transparent; }
.garden-pet-close:hover { background: #edf0e3; }
.garden-pet-close svg { width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 1.7; }
.garden-pet-intro { margin: 12px 0 16px; color: var(--buddy-muted); font-size: 12px; line-height: 1.8; }
.garden-pet-journey { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-bottom: 14px; }
.garden-pet-journey button { min-height: 44px; padding: 8px 5px; border: 1px solid var(--buddy-line); border-radius: 6px 6px 6px 2px; background: #f0f2e5; color: var(--buddy-ink); font-size: 12px; }
.garden-pet-journey button:hover { background: #e1e9d1; }
.garden-pet-journey button:last-child { background: #365e49; color: #fffef5; border-color: #365e49; }
.garden-pet-memory { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; padding: 11px 0; margin-bottom: 14px; border-block: 1px dashed var(--buddy-line); color: var(--buddy-muted); font-size: 12px; }
.garden-pet-memory strong { color: var(--buddy-ink); font-weight: 500; }
.garden-pet-actions { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.garden-pet-actions button { display: grid; justify-items: center; align-content: center; gap: 7px; min-width: 0; min-height: 76px; padding: 10px 3px; border: 1px solid #d8dfcd; border-radius: 10px; background: #f5f5e9; font-size: 12px; touch-action: manipulation; transition: background .15s, transform .15s, border-color .15s; }
.garden-pet-actions svg { width: 23px; height: 23px; fill: none; stroke: #648273; stroke-width: 1.45; stroke-linecap: round; stroke-linejoin: round; }
.garden-pet-actions button:hover { background: #e9efdd; border-color: #b7c5a9; transform: translateY(-1px); }
.garden-pet-actions button:active { transform: translateY(1px) scale(.97); }
.garden-pet-settings { display: grid; grid-template-columns: 1fr 1fr; gap: 3px 8px; margin-top: 13px; }
.garden-pet-settings button { min-height: 44px; padding: 7px 0; border: 0; border-radius: 5px; background: transparent; color: #546b5a; font-size: 12px; text-align: left; }
.garden-pet-settings button:hover { color: #244b3b; background: #eef1e5; }
.garden-pet-settings button:disabled { cursor: default; opacity: .65; }
.garden-pet-size { display: grid; grid-template-columns: auto 1fr 3em; align-items: center; gap: 9px; margin-top: 15px; font-size: 12px; color: var(--buddy-muted); }
.garden-pet-size input { width: 100%; min-width: 0; height: 44px; margin: 0; padding: 0; accent-color: #426c55; cursor: pointer; }
.garden-pet-size input:focus-visible { outline: 2px solid #35665a; outline-offset: 2px; }
.garden-pet-size output { text-align: right; }
.garden-pet-hint { margin: 9px 0 0; color: var(--buddy-muted); font-size: 11px; line-height: 1.7; }
.garden-pet-credit { display: flex; align-items: center; justify-content: space-between; min-height: 44px; margin-top: 6px; padding-top: 5px; border-top: 1px dashed var(--buddy-line); color: var(--buddy-muted); font-size: 11px; text-decoration: none; }
.garden-pet-credit:hover { color: var(--buddy-ink); text-decoration: underline; }
.garden-pet-credit:focus-visible { outline: 2px solid #35665a; outline-offset: 2px; }
.garden-game-bubble { position: absolute; display: grid; place-items: center; width: 52px; height: 52px; padding: 0; border: 1px solid #6eafb8; border-radius: 50%; background: #e3f5efee; box-shadow: inset 4px 4px 0 #ffffffaa, 0 4px 12px #2e62651c; pointer-events: auto; touch-action: manipulation; animation: gardenBubbleIn .2s ease both; }
.garden-game-bubble::before { content: ""; position: absolute; width: 10px; height: 5px; top: 9px; left: 12px; border-radius: 50%; background: #fff; transform: rotate(-35deg); }
.garden-game-bubble span { font: 12px/1 Consolas, monospace; color: #2e636b; }
.garden-game-bubble:active { transform: scale(.9); }
/* Stardust, recoloured like sunlight through the garden. No idle animation loop. */
body[data-station-page="夏日花园"] .garden-companion,
:root[data-theme="night"] .garden-companion { --cursor-core: #fff0bf; --cursor-mint: #b3dbc1; --cursor-gold: #e4c482; --cursor-rim: #385e51; }
.garden-cursor { position: fixed; inset: 0; z-index: 110000; pointer-events: none; opacity: 0; transition: opacity .12s; }
.garden-cursor.is-visible { opacity: 1; }
.garden-cursor-star {
	position: absolute; left: 0; top: 0;
	width: calc(17px - var(--i) * 2.5px); height: calc(17px - var(--i) * 2.5px);
	color: var(--cursor-core); opacity: 0;
	transform: translate3d(var(--cursor-x, -100px), var(--cursor-y, -100px), 0) translate(-50%, -50%);
	transition: transform calc(.09s + var(--i) * .065s) cubic-bezier(.2, .65, .3, 1), opacity .28s;
	filter: drop-shadow(0 0 1px var(--cursor-rim)) drop-shadow(0 0 3px #8baf8238);
}
.garden-cursor-star::before { content: ""; position: absolute; inset: 0; background: currentColor; clip-path: polygon(50% 0, 61% 39%, 100% 50%, 61% 61%, 50% 100%, 39% 61%, 0 50%, 39% 39%); transform: rotate(0) scale(1); transition: transform .22s cubic-bezier(.22, 1, .36, 1), background .18s; }
.garden-cursor-star:first-child { opacity: 1; transition-duration: 0s; }
.garden-cursor-star:nth-child(even) { color: var(--cursor-mint); }
.garden-cursor-star:nth-child(3) { color: var(--cursor-gold); }
.garden-cursor.is-moving .garden-cursor-star:not(:first-child) { opacity: calc(.82 - var(--i) * .13); }
.garden-cursor.is-moving .garden-cursor-star:not(:first-child)::before { animation: gardenCursorTwinkle .9s ease-in-out infinite alternate; animation-delay: calc(var(--i) * -.12s); }
.garden-cursor.is-link .garden-cursor-star:first-child::before { background: var(--cursor-gold); transform: rotate(90deg) scale(1.35); }
.garden-cursor.is-down .garden-cursor-star:first-child::before { transform: rotate(45deg) scale(.65); }
.garden-cursor.is-placing .garden-cursor-star { transition: none; }
.garden-cursor-burst { position: fixed; z-index: 109999; width: 0; height: 0; pointer-events: none; }
.garden-cursor-burst::before { content: ""; position: absolute; left: -12px; top: -12px; width: 24px; height: 24px; border: 1px solid var(--cursor-mint); border-radius: 50%; animation: gardenCursorRipple .58s ease-out both; }
.garden-cursor-burst.is-link::before { border-style: dashed; border-color: var(--cursor-gold); }
.garden-cursor-burst i { position: absolute; left: -3px; top: -3px; width: 6px; height: 6px; background: var(--cursor-gold); clip-path: polygon(50% 0, 62% 38%, 100% 50%, 62% 62%, 50% 100%, 38% 62%, 0 50%, 38% 38%); animation: gardenCursorSeed .65s cubic-bezier(.16, .7, .3, 1) both; animation-delay: var(--delay); }
.garden-cursor-burst i:nth-child(3n) { width: 5px; height: 8px; background: var(--cursor-mint); clip-path: none; border-radius: 0 75% 0 75%; }
.garden-cursor-burst i:nth-child(4n) { background: var(--cursor-core); }
.garden-companion.is-obscured { visibility: hidden; }
.station-booting .garden-companion, .route-is-leaving .garden-companion, body.page-transitioning .garden-companion { visibility: hidden; }
.station-booting .garden-companion *, .garden-companion.is-obscured * { animation-play-state: paused !important; }
.garden-companion.is-page-hidden *, .garden-companion.is-page-hidden *::before { animation-play-state: paused !important; }
.garden-companion.is-page-hidden .garden-cursor { opacity: 0; }
:root[data-theme="night"] .garden-companion { --buddy-paper: #263b31; --buddy-ink: #edf0de; --buddy-muted: #bfccb7; --buddy-line: #536650; }
:root[data-theme="night"] .garden-pet-eyebrow, :root[data-theme="night"] .garden-pet-settings button { color: #bed0ad; }
:root[data-theme="night"] .garden-pet-actions button { background: #30483a; border-color: #566c50; }
:root[data-theme="night"] .garden-pet-actions svg { stroke: #b2cba7; }
:root[data-theme="night"] .garden-pet-actions button:hover, :root[data-theme="night"] .garden-pet-settings button:hover, :root[data-theme="night"] .garden-pet-close:hover { background: #3c5542; color: #edf0de; }
:root[data-theme="night"] .garden-companion button:focus-visible { outline-color: #d7e6b6; }
@keyframes gardenMusicBeat { from { transform: scaleY(.45); } to { transform: scaleY(1); } }
@keyframes gardenSnack { 0% { opacity: 0; transform: translateY(9px) scale(.5); } 20%, 60% { opacity: 1; transform: none; } 100% { opacity: 0; transform: translateY(-5px) scale(.2); } }
@keyframes gardenWhaleNibble { 0%, 100% { transform: none; } 25%, 60% { transform: scale(1.04, .95) rotate(2deg); } 42%, 77% { transform: scale(.99, 1.02) rotate(-1deg); } }
@keyframes gardenWhaleHop { 0%, 100% { transform: none; } 45% { transform: translateY(-10px) rotate(-4deg); } }
@keyframes gardenWhaleKindness { 0% { opacity: 0; transform: translateY(4px) scale(.6); } 30% { opacity: 1; } 100% { opacity: 0; transform: translateY(-15px) scale(1.1); } }
@keyframes gardenBubbleIn { from { opacity: 0; transform: scale(.75); } to { opacity: 1; transform: none; } }
@keyframes gardenCursorTwinkle { to { transform: scale(.58) rotate(55deg); } }
@keyframes gardenCursorRipple { from { transform: scale(.3); opacity: .65; } to { transform: scale(2.5); opacity: 0; } }
@keyframes gardenCursorSeed { 0% { opacity: 0; transform: translate3d(0, 0, 0) rotate(0) scale(.35); } 18% { opacity: .85; transform: translate3d(calc(var(--dx) * .3), calc(var(--dy) * .3), 0) rotate(0) scale(1); } 100% { opacity: 0; transform: translate3d(var(--dx), var(--dy), 0) rotate(var(--turn)) scale(.2); } }
@media (hover: hover) and (pointer: fine) and (prefers-reduced-motion: no-preference) {
	html.garden-pointer-active:not([data-garden-reading]):not(.journey-is-open):not(.station-booting):not(.route-is-leaving) :is(body:not(.page-transitioning), body:not(.page-transitioning) *) { cursor: none !important; }
	.garden-companion .garden-pet-body { cursor: grab; }
	.garden-pet.is-dragging .garden-pet-body, .garden-pet.is-pressed .garden-pet-body { cursor: grabbing; }
}
@media (hover: none), (pointer: coarse) {
	.garden-cursor, .garden-cursor-burst { display: none !important; }
}
@media (max-width: 540px) {
	.garden-pet-panel { padding: 17px; }
	.garden-pet-speech { max-width: min(206px, calc(100vw - 40px)); }
	.garden-pet-panel h2 { font-size: 22px; }
}
@media (prefers-reduced-motion: reduce) {
	.garden-companion *, .garden-companion *::before { animation: none !important; transition: none !important; }
	.garden-cursor, .garden-cursor-burst { display: none !important; }
	.garden-pet[data-action="pet"] .garden-pet-affection, .garden-pet[data-action="feed"] .garden-pet-snack { opacity: 1; }
}
