The sun had dipped below the horizon, painting the sky in hues of lavender, burnt orange, and deepening blue. It cast a warm afterglow over the city skyline as the arcade lights flickered behind them, buzzing like fireflies in a neon dream. The group made their way up the mall's narrow metal stairs toward the rooftop one last stop before the day ended, and somehow, it felt like the moment they'd all been waiting for without realizing it. The air up there was cooler, thinner. The rooftop overlooked the city in scattered fragments glowing neon signs, greasy fast food joints, the distant hum of car horns, and the soft buzz of teenagers on skateboards weaving through the parking lot below. It was the kind of view you didn't expect from a mall. Kind of gritty. Kind of cinematic. The kind of place where movie characters said things that changed everything. Jasmine was the first to say it. She tilted her head, smirking like she knew something the rest of them didn't. "Y'know, this is exactly the kind of place people make out in teen dramas."
Axel huffed, leaning against the cool concrete railing. "You would say that."
She shrugged, completely unbothered. "I only speak facts."
Luca dropped onto the metal bench near Amy, his legs crossing effortlessly as he giggled about the claw machine disaster near the pizza stand. "I swear, that thing hates me on purpose."
"I told you not to go for the sparkly octopus," Amy said, tossing a fry into her mouth. "It was buried under, like, four dinosaurs."
"Sparkly octopus needed me," Luca said with mock drama. "It was fate. I failed him."
Jasmine cracked up, and even Javier who'd been sitting on the railing, arms crossed let out a reluctant laugh. The group was loose, buzzing, riding the high of a full day spent together without too many awkward moments. But not everyone was laughing. Noah stayed standing, arms tucked into his jacket, jaw tight. And Axel... Axel hadn't moved from the edge of the railing since they got up there. His fingers tapped an anxious rhythm along the stone. He was half-listening to the banter behind him, but his eyes kept trailing the streets below. Anything to keep from looking at Noah. Jasmine noticed. Of course she did. Her eyes darted between the two boys like she was watching a slow-burn rom-com unfold in real time.
She leaned toward Luca and whispered, "Watch this."
"I swear if you make it awkward " Noah started, already sensing danger.
But Jasmine was grinning wickedly. "Awkward? Never."
She turned to Noah, eyes wide and faux-innocent. "So... Noe, how's your love life?"
Noah groaned, flipping her off without missing a beat.
Luca giggled. "You two are so dramatic. Are you sure you're not related?"
Noah rolled his eyes and muttered something under his breath that sounded suspiciously like "kill me," but Axel didn't miss how Noah kept glancing his way. Like he was waiting. For something. Anything. They'd barely spoken all afternoon. Not about what mattered. Not after the tension. Not after Amy's clinginess or the stupid way Axel had looked away every time Noah's eyes lingered too long. After a few more minutes of scattered chatter and laughter, Luca stood, brushing crumbs from his colorful shorts. "Alright, I gotta bounce. My mom thinks I'm doing something productive, and this doesn't count unless I lie really well."
"Tell her you were emotionally supporting a group of chaotic teens," Jasmine said, waving.
"Group hug!" Luca shouted before anyone could escape.
He wrapped Amy up first her shriek of protest quickly melting into a grin. Then Jasmine, who hugged him back with a wink. Then Javier, who tensed at first but didn't pull away. It was soft. Casual. Natural. When he reached Axel, he grinned. "Thanks for letting me tag along. You're cool... in a 'definitely punches people' kinda way."
Axel cracked the first genuine smile he'd had in hours. "Anytime, glitter boy."
Luca stepped toward Noah last. "You've got good taste," he said.
Noah blinked. "Huh?"
Luca winked. "Just saying." And then, like a spark vanishing into the night, he bounded down the rooftop stairs, disappearing into the noise below. Amy promised to text Axel later, her arm brushing his as she said goodbye. Javier and Jasmine bickered their way down next, arguing over whose playlist was better for the ride home. Their laughter echoed faintly as they disappeared, too. And then there were two. Axel didn't turn. His back stayed fixed to the city. But he heard Noah's footsteps behind him, the soft crunch of gravel under sneakers.
"You're doing it again," Noah said, voice quiet and calm. Not angry. Just tired.
Axel closed his eyes. "Doing what?"
"Avoiding me," Noah replied. "Shutting down. Acting like none of this... matters."
"I'm not," Axel muttered.
Even he didn't believe it.
Noah stepped closer. His presence was steady. Unshaken. "We've kissed. You looked at me like I mattered. Then you disappear. Again."
Axel's breath caught.
"You act like nothing happened," Noah continued, every word carefully chosen. "Like it's just something I made up."
"It's not like that."
"Then what's it like?" Noah's tone wasn't cruel. It was frustrated. Raw. "Because I keep getting pieces of you. And I'm tired of guessing which part's real."
The rooftop felt too quiet all of a sudden. Axel's heartbeat was so loud in his ears it drowned out the rest of the city.
His fists clenched.
"I'm not good at this," he admitted, and the words felt like they scraped their way out of his throat.
"I never asked you to be perfect," Noah said gently. "I asked you to show up. To stop pretending you don't care."
"I do care," Axel snapped sharper than he meant to. His voice cracked, and it made him flinch.
Noah didn't flinch at all.
"Then why are you pushing me away?"
Axel finally looked at him.
The pain in his chest twisted, something clawing at the inside of his ribs. Noah's eyes weren't angry. They were... soft. Open. Like he was still giving Axel a chance, even now.
"Because if I let you in..." Axel's voice dropped, almost a whisper. "You'll leave. Everyone does."
The words just sat there.
Noah didn't move for a long moment. Then carefully, no big gestures, no drama he reached out and took Axel's hand. Just held it. Warm. Real.
"I'm still here," he said.
Axel looked down at their joined fingers like they were something sacred. "I don't know how to do this."
"Then let's figure it out together."
And then slow, deliberate, with all the softness in the world Noah leaned in.
Axel didn't stop him.
Their lips met.
It wasn't rushed this time. It wasn't angry or messy or full of sparks they couldn't control. It was slow. Steady. Certain. It was real. And it scared Axel more than anything. Because it made things feel possible. Like maybe this wasn't a mistake. Like maybe he could be wanted not for the version of himself he pretended to be, but for the one he was learning to be. When they pulled apart, Axel's heart was pounding so hard it shook his whole body.
Noah smiled at him crooked and soft and knowing. "You're thinking too much."
Axel let out a breath. "Yeah."
They didn't talk after that. They just stood there, side by side, watching the stars come out.
Eventually, they made their way back down the stairs. Their shoulders brushed. So did their hands. But they didn't hold them again.
They didn't need to.
At the bottom, Noah stopped. "You'll text me?"
Axel nodded. "I will."
Noah gave him one last look a soft smile, a kind of promise before walking off into the parking lot. Axel stood there long after he was gone, alone in the warm echo of it all. Something had shifted tonight. And for the first time in a long time, he didn't know if he was terrified... or ready.