<<set $tool = "">><<widget "scene" container>>
<div class="storybook-scene">
<figure class="illustration"><img @src="'assets/images/' + _args[0] + '.webp'" @alt="_args[2]" width="1024" height="768" fetchpriority="high"></figure>
<section class="story-copy">
<p class="eyebrow"><<if tags().includes('ending')>>A little ending, all your own<<elseif passage() === 'Start'>>A woodland choose-your-own adventure<<else>>Pip's woodland adventure<</if>></p>
<h1 tabindex="-1"><<print _args[1]>></h1>
<div class="narrative"><<print _contents>></div>
</section>
</div>
<</widget>><div class="book-shell">
<header class="book-header">
<div class="book-brand"><span class="brand-mark" aria-hidden="true">✦</span><span>PIP & THE LANTERN TREE<small>A StoryQuest Kids adventure.</small></span></div>
<nav class="book-tools" aria-label="Story controls">
<button type="button" id="listen" class="listen"><span aria-hidden="true">♫</span> Listen</button>
<button type="button" id="pause" disabled>Pause</button>
<button type="button" id="resume" disabled>Resume</button>
<button type="button" id="replay" disabled>Replay</button>
<button type="button" id="stop" disabled>Stop</button>
<label class="speed-control" for="speed">Speed <select id="speed" aria-label="Narration speed"><option value="0.75">0.75×</option><option value="1" selected>1×</option><option value="1.25">1.25×</option></select></label>
<button type="button" id="back-choice" disabled>Back a page</button>
<button type="button" id="saves">Bookmarks</button>
<button type="button" id="restart">Start again</button>
<button type="button" id="parents" aria-label="Help for grown-ups">Help</button>
<a class="library-link" href="/stories/">Story library</a>
</nav>
</header>
<div class="reading-progress"><span>Read Together · about 10 minutes</span><span id="endings-found" role="status">Endings found: 0 of 3</span></div>
<div class="book-content"><div id="passages"></div></div>
<footer class="book-footer"><span id="save-state" role="status"></span><span id="audio-state" role="status" aria-live="polite"></span><span class="footer-note">Take your time. Every path has a little magic.</span></footer>
<audio id="narrator" preload="none"></audio>
</div><<scene "cover" "Pip and the<br>Lantern Tree" "Pip, an orange fox in a teal scarf, looks up at a glowing lantern tree above a cozy woodland village.">>
<p>A tiny fox. A sleepy tree. A pocket full of possibilities.</p>
<p>Help Pip find a little light for the village picnic. Choose where to wander, who to help, and how your adventure ends.</p>
<p>Read together, or tap <strong>Listen</strong> to hear the story. There is no hurry.</p>
<div class="choices">
<<if !setup.ephemeral && Save.browser.size > 0>><<button "Continue your adventure">><<run setup.continueStory()>><</button>><</if>>
[[Begin the adventure →->Cottage]]
</div>
<p class="story-note">For ages 6–9 · Read or listen · Three gentle endings</p>
<</scene>><<scene "cottage" "Something for the journey" "Pip stands beside a moss-roof cottage. A golden bell and a yellow ribbon lie on a garden bench.">>
<p>The village lantern tree has curled up its leaves. It is having a very long nap!</p>
<p>“Perhaps a moonseed will wake it,” says Gran Rabbit. “Look near its roots. I'll bring the picnic.”</p>
<p>Pip puts a bun in a satchel. There is room for one more thing: a little bell, or a long yellow ribbon.</p>
<div class="choices">
[[Take the little bell->Crossroads][$tool = "bell"]]
[[Take the yellow ribbon->Crossroads][$tool = "ribbon"]]
</div>
<</scene>><<scene "cottage" "Which way shall we wander?" "Pip leaves the cottage garden for a winding path through the sunny woodland.">>
<p>Beyond the garden, the path splits in two. One way follows a sparkling brook. The other climbs a soft green hill.</p>
<p>Pip can hear splashing below and wind chimes above. Either path reaches the lantern tree.</p>
<p>“A good adventure,” says Pip, “has room for a little surprise.”</p>
<div class="choices">
<<if $tool is "bell">>
[[Follow the sparkling brook->BrookBell]]
[[Climb the breezy hill->HillBell]]
<<else>>
[[Follow the sparkling brook->BrookRibbon]]
[[Climb the breezy hill->HillRibbon]]
<</if>>
</div>
<</scene>><<scene "brook" "A ding across the water" "A small ferry waits on a calm brook. Pip and a friendly otter stand safely on opposite grassy banks.">>
<p>A little ferry rests on the far bank. The sign shows a bell, but its bell is missing.</p>
<p>Pip takes the little bell from the satchel. Ding, ding!</p>
<p>Olive Otter looks up. “That's our ferry song!” She brings the boat across, helps Pip aboard, and steers gently between the water lilies. What a useful thing to pack.</p>
<div class="choices">[[Thank Olive and step ashore->OtterChoice]]</div>
<</scene>><<scene "brook" "A yellow hello" "Pip waits beside a peaceful brook while Olive Otter brings a little wooden ferry across the water.">>
<p>The ferry is on the far bank. Olive Otter is humming, too far away to hear Pip's small voice.</p>
<p>Pip stays on the grass and waves the yellow ribbon. It curls like a bright little sunbeam.</p>
<p>“Hello over there!” calls Olive. She brings the ferry across and helps Pip aboard. Together, they glide past the sleepy water lilies.</p>
<div class="choices">[[Thank Olive and step ashore->OtterChoice]]</div>
<</scene>><<scene "otter" "Leaves and little songs" "Pip and Olive Otter sit beside leaf lanterns and tall musical reeds on the sunny bank.">>
<p>Olive has a basket of leaf lanterns for the picnic. Their strings have become one enormous knot.</p>
<p>Nearby, three reeds whistle a curious tune: low, high, low.</p>
<p>“The tree used to hum that,” Olive says. “You could learn its song. Or help me with these lanterns, and we can visit the tree together.”</p>
<div class="choices">
[[Help Olive untangle the lanterns->OtterFriend]]
[[Listen to the singing reeds->ReedSong]]
</div>
<</scene>><<scene "otter" "Two pairs of paws" "Pip and Olive work together on a garland of round leaf lanterns beside the brook.">>
<p>Pip holds one string while Olive loosens another. Soon the knot becomes a long, lovely line of lanterns.</p>
<p>“Many paws make light work,” says Olive. Pip giggles. “Especially lantern work!”</p>
<p>They share the bun and set off together. Olive knows how to carry a little glow a very long way. That might be useful at the tree.</p>
<div class="choices">[[Walk to the tree with Olive->TreeFriend]]</div>
<</scene>><<scene "otter" "The brook's secret tune" "Three tall reeds bend beside Pip and Olive on a quiet, flower-filled bank.">>
<p>Pip sits still and listens. Low, high, low. A pause. Then a little rising note, like a bubble finding the sky.</p>
<p>Pip hums it back. The reeds sway as if they are nodding.</p>
<p>“You've remembered it!” says Olive. “I'll finish here and meet you at the picnic.” Pip walks on, carrying a song that needs no pocket.</p>
<div class="choices">[[Carry the waking song to the tree->TreeSong]]</div>
<</scene>><<scene "hill" "The listening gate" "Pip approaches a low garden gate on a soft green hill with bells and ribbon streamers.">>
<p>A low gate stands across the hill path. Its wooden latch is shaped like a sleepy ear.</p>
<p>Pip gives the little bell a gentle shake. Ding!</p>
<p>The gate gives a happy creak and swings open. Beyond it, flowers nod in the breeze and a tiny yellow kite bobs above a bush. Someone up there could use a hand.</p>
<div class="choices">[[Follow the little yellow kite->MothChoice]]</div>
<</scene>><<scene "hill" "A dance for the gate" "Pip stands at a garden gate decorated with bright yellow streamers on a sunny hill.">>
<p>A low gate stands across the hill path. Its wooden latch is shaped like a sleepy ear, but Pip has no bell.</p>
<p>Then Pip notices the gate's ribbon streamers. Perhaps it likes dancing too!</p>
<p>Pip twirls the yellow ribbon. The gate sways, chuckles, and opens. Beyond it, a tiny kite bobs above a flowering bush.</p>
<div class="choices">[[Follow the little yellow kite->MothChoice]]</div>
<</scene>><<scene "moth" "A kite and a tune" "Pip meets a friendly lavender moth with a yellow kite near a flowering bush and wooden wind chimes.">>
<p>Mallow Moth is trying to free a kite string from a bush. The kite is quite happy there. Mallow is less sure.</p>
<p>Above them, wind chimes play a tune: low, high, low.</p>
<p>“That's the lantern tree's old song,” says Mallow. “You could learn it. Or help me free my kite, and I'll come with you.”</p>
<div class="choices">
[[Help Mallow free the kite->MothFriend]]
[[Listen to the wind chimes->WindSong]]
</div>
<</scene>><<scene "moth" "A friend on the breeze" "Pip and Mallow Moth gently free a little kite in a sunny hilltop garden.">>
<p>Pip gently lifts a twig. Mallow pulls the string, a little at a time. At last, the kite floats free.</p>
<p>“Thank you for being patient,” says Mallow. “I'll bring my kite to the tree. It is wonderful at carrying things through the air.”</p>
<p>They share the bun and follow the path, with the yellow kite floating above them.</p>
<div class="choices">[[Walk to the tree with Mallow->TreeFriend]]</div>
<</scene>><<scene "moth" "A song without a pocket" "Wooden wind chimes sway above Pip and Mallow in a peaceful flower garden.">>
<p>Pip closes both eyes and listens. Low, high, low. A pause. Then a little rising note, like a kite catching the breeze.</p>
<p>Pip hums the tune until it feels familiar.</p>
<p>“Lovely,” says Mallow. “I'll finish here and meet you at the picnic.” Pip follows the path, carrying the waking song all the way down the hill.</p>
<div class="choices">[[Carry the waking song to the tree->TreeSong]]</div>
<</scene>><<scene "tree" "A small light to share" "Pip finds one warm, glowing moonseed nestled between the roots of the old lantern tree.">>
<p>Under the lantern tree, a moonseed glows between two roots. It is warm as a sunlit stone.</p>
<p>The tree rustles. “I can share my light, even while I rest.”</p>
<p>Pip's new friend smiles. Together, they could carry little lights through the village. Or they could plant the seed by Pip's cottage and invite everyone to a cozy picnic.</p>
<div class="choices">
[[Share the glow with our friends->LanternParade]]
[[Plant a little light near home->CozyGrove]]
</div>
<</scene>><<scene "tree" "A song for a moonseed" "Pip kneels beside a golden moonseed under the resting lantern tree, surrounded by moss and tiny flowers.">>
<p>Under the lantern tree, a moonseed glows between two roots. It is warm as a sunlit stone.</p>
<p>The tree rustles. “Your song could wake the flowers around me.”</p>
<p>Pip remembers every note. Singing might turn this clearing into a star garden. Or Pip could plant the seed near home and invite everyone to a cozy picnic.</p>
<div class="choices">
[[Sing the waking song->StarGarden]]
[[Plant a little light near home->CozyGrove]]
</div>
<</scene>><<scene "parade" "The Lantern Parade" "Pip, an otter, a moth, a rabbit and a hedgehog carry glowing magical lanterns through their cozy village.">>
<p>Pip's friend calls the neighbours. Together, they touch each leaf lantern to the moonseed. One little glow becomes many.</p>
<p>Soon a golden parade winds through the village. Gran Rabbit brings strawberry buns. Even the tree opens one sleepy leaf to watch.</p>
<p>Pip smiles. The light reached everyone because everyone helped carry it.</p>
<p class="ending-note">Your adventure grew into a celebration of friendship.</p>
<div class="choices"><<button "Try another path">><<run UI.restart()>><</button>></div>
<</scene>><<scene "garden" "The Star Garden" "Pip sits beneath the tree among glowing star-shaped flowers while woodland neighbours gather for a picnic.">>
<p>Pip sings: low, high, low. A pause. Then a bright little rising note.</p>
<p>The moonseed shivers with delight. Around the tree, golden flowers open like tiny stars. The neighbours arrive with blankets and strawberry buns.</p>
<p>“What a lovely place to rest,” whispers the tree. Pip smiles. A little careful listening has made room for something wonderful.</p>
<p class="ending-note">Your adventure bloomed into a garden of discovery.</p>
<div class="choices"><<button "Try another path">><<run UI.restart()>><</button>></div>
<</scene>><<scene "grove" "The Cozy Grove" "Pip and woodland friends share a picnic beside a tiny glowing lantern sapling outside Pip's cottage.">>
<p>Pip plants the moonseed beside the cottage and gives it a little water. Up peeks a tiny tree with three golden lanterns.</p>
<p>Pip invites everyone over. There are blankets, strawberry buns, and just enough glow for a cozy picnic.</p>
<p>The old tree can rest tonight. Tomorrow, Pip will visit again. Small beginnings can make a lovely home for big happiness.</p>
<p class="ending-note">Your adventure planted a little place of belonging.</p>
<div class="choices"><<button "Try another path">><<run UI.restart()>><</button>></div>
<</scene>><p><strong>A gentle adventure for ages 6–9.</strong> Read together or use Listen. Choose a bell or ribbon, explore the brook or hill, and discover three positive endings. There are no timers or wrong answers.</p>
<p><strong>Bookmarks:</strong> your place is saved after each story page in this browser. Refresh to keep reading. On a later visit, use Continue your adventure. Bookmarks also offers three manual slots and the engine's file export/import controls for a grown-up. Clearing browser data removes local saves; private browsing may not retain them. Saves do not automatically move between devices or website addresses.</p>
<p><strong>Reading aloud:</strong> Listen starts only when tapped, then reads each new page after a choice. Pause and Resume keep your place. Replay starts the current page again, Stop turns read-aloud off, and Speed changes the pace. The highlighted sentence follows the recording approximately because word-level timestamps are unavailable. Back a page lets you change a choice.</p>
<p><strong>Trying another path:</strong> Start again asks before restarting. The endings-found count stays in this browser after a restart when storage is available. Discoveries are not shared between devices. Your old bookmark stays available on the title page until a new adventure begins.</p>
<p><strong>Privacy:</strong> no accounts, chat, microphone, advertisements, or requests for personal information. On StoryQuest Kids, the library counts finished adventures without asking for names. The story contains only fixed text, images, and recordings; it does not contact AI services while playing.</p>
<p><strong>Credits:</strong> an original story created for this experiment. Illustrations generated locally with Draw Things and FLUX.2 Klein 4B; narration with Kokoro, af_sarah. Powered by Twine's SugarCube 2.37.3 story format, compiled with Tweego 2.1.1. Third-party notices are included with the release.</p>