Work Text:
"Seonghyeon, I swear if you drink my strawberry milk again, I'm hiding your protein powder where you'll never find it," Keonho whined, flopping onto their shared dorm couch with an exaggerated pout. His bottom lip jutted out just enough to make Seonghyeon's fingers twitch with the urge to pinch it or maybe bite it. Not that he'd ever admit that.
Seonghyeon rolled his eyes, leaning against the mini-fridge they'd crammed between their beds. "You bought, like, ten of them. One won't kill you." He took a deliberately slow sip just to watch Keonho's nose scrunch up in protest.
Keonho kicked at Seonghyeon's shin half-heartedly, missing on purpose. "You're the worst," he huffed, but the corners of his mouth betrayed him, twitching upward. The late afternoon sun streamed through their window, catching the honey-brown strands of Keonho's hair, and Seonghyeon had to look away before he did something stupid like cup Keonho's face and tell him how fucking adorable he was when he pretended to be mad.
Their phones buzzed simultaneously from their group chat. Martin had sent a blurry photo of their other friends mid-argument in the cafeteria, captioned "These idiots are fighting over the last chicken drumstick". Seonghyeon snorted, but Keonho was already typing a rapid-fire response, thumbs flying over his screen.
Seonghyeon tossed his phone onto his bed with a sigh, the familiar itch of frustration creeping under his skin. Keonho was still curled up on the couch, knees tucked to his chest as he giggled at something on his screen, probably James sending another ridiculous meme. The way Keonho's shoulders shook with laughter, the way his fingers brushed his bottom lip absentmindedly, it was all too much. Seonghyeon needed an outlet, something to dull the ache in his chest that had nothing to do with stolen strawberry milk.
Later that night, long after Keonho had fallen asleep with his headphones on (always forgetting to take them off), Seonghyeon sat on his bed on his phone, the glow of the screen casting sharp shadows across his face. He'd been scrolling aimlessly, trying to distract himself, when an ad popped up—PrettyPrincess: LIVE tonight. The thumbnail was... suggestive. Just a tease of soft skin, the curve of a thigh, the barest hint of something pink and wet. Seonghyeon shouldn't have clicked. But he did.
The livestream loaded with a soft chime, revealing a dimly lit room and a figure sprawled across what looked like silk sheets—no face, just the slow, deliberate spread of thighs framing a glistening pink cunt. Seonghyeon's breath hitched. The username PrettyPrincess floated in the corner, followed by a flood of comments from other viewers: so tight, wanna taste, fuck those lips. His thumb hovered over the exit button, but then PrettyPrincess let out a breathy little moan—high-pitched, almost whiny—and something about the sound curled hot in Seonghyeon's gut.
Keonho shifted in his sleep across the room, mumbling something into his pillow, and Seonghyeon nearly threw his phone across the bed. No. Absolutely not. He was not about to start watching some random guy to relieve himself when his roommate was asleep across the room. Well, that's what he tried to convince himself when he reached for his AirPods.
Seonghyeon jammed the AirPods into his ears with a little too much force, wincing as the plastic clicked against his cartilage. The screen dimmed automatically—thank fuck—but the audio still pulsed through him, that same breathy whine from PrettyPrincess threading between his ribs like a hook. He adjusted himself discreetly under the blanket, throat tight. This was fine. Normal. People did this all the time.
Seonghyeon's fingers tightened around his phone as PrettyPrincess arched their hips, the camera angle just obscuring enough to leave everything to the imagination. A donation notification popped up—UserHyeon has tipped 50,000 won—and Seonghyeon barely registered typing the amount before sending it. His face burned. He'd never spent money like this before, let alone on a cam show.
"In my last video, BigDaddy69 tipped the most and asked me to moan his name," PrettyPrincess announced and then let out a high-pitched moan that had the chat exploding.
Seonghyeon's thumb hovered over the tip button again, his pulse thudding unevenly in his ears. The moan lingered in his AirPods, curling around his thoughts like smoke—too sweet, too familiar in a way he couldn't place. BigDaddy69? What kind of idiot name was that? His jaw clenched as he typed another 100,000 won without thinking, the notification flashing bright against the dim screen. UserHyeon has tipped 100,000 won.
PrettyPrincess arched off the sheets, thighs trembling as their fingers worked faster between their legs—Seonghyeon could hear the slick sounds even through his AirPods, the wet, rhythmic squelch making his own grip tighten around his cock beneath the blankets. The camera stayed frustratingly angled just above the action, showing only the flutter of PrettyPrincess's stomach and the way their hips jerked erratically, but Seonghyeon didn't need to see. The sounds were enough. That high, desperate whine as PrettyPrincess gasped, "Close, close—" sent heat licking up his spine, and before he could stop himself, Seonghyeon tipped another 50,000 won just to see the notification flash across the screen. UserHyeon has tipped 50,000 won.
Then—fuck—PrettyPrincess came with a choked-off moan, thighs clamping around their own hand as they shuddered through it, and Seonghyeon bit down hard on his own lip to keep from making noise as he followed, spilling into his fist with a quiet groan. For a second, the dorm room was silent except for his own ragged breathing and the soft, satisfied sighs from PrettyPrincess's stream.
Post-nut clarity hit like a bucket of ice water. Seonghyeon yanked the AirPods out, tossing them onto his nightstand as if they'd burned him. What the fuck was he doing? Jerking off to some random cam boy while Keonho slept right there, innocent and oblivious, his stupidly perfect face half-smushed into his pillow. Seonghyeon dragged a hand down his face, disgusted with himself. He wasn't—he didn't even like guys. Except—except—his traitorous brain supplied the image of Keonho's pouty lips, the way his lashes fluttered when he laughed too hard, and Seonghyeon's stomach twisted.
On screen, PrettyPrincess was lazily stretching, their voice soft and sleepy as they murmured, "Thank you for the tips tonight~ I'll see you all next time!" The way they said it—playful, teasing—made Seonghyeon's ears burn. He slammed his phone face-down onto the mattress before he could do something even more embarrassing, like reply.
Seonghyeon barely slept that night; the ghost of PrettyPrincess's moans tangled in his thoughts every time he closed his eyes. When dawn finally crept through their dorm window, he gave up pretending and rolled onto his side, staring at the back of Keonho's head where his hair stuck up in sleep-mussed tufts. Something sharp and possessive twisted in his chest—how could Keonho look so soft while Seonghyeon was unravelling over pixels on a screen?
The next few days passed in a haze. Seonghyeon caught himself zoning out during lectures, fingertips tapping restlessly against his thigh as his brain replayed the slick sounds from that stream. He tried to ignore it—tried to ignore the way his pulse jumped every time his phone buzzed with a notification from the cam site. But by Friday night, when Keonho announced he was heading home for the weekend ("Mom's birthday, obviously," he'd said, shoving socks into his duffel with that infuriating little frown), Seonghyeon caved. The second the dorm door clicked shut behind Keonho, he pulled up the PrettyPrincess page, his thumb hovering over the LIVE NOW banner.
The stream loaded to the same dim lighting, the same silk sheets—but this time, PrettyPrincess was already fingering themself, two digits working in and out at a languid pace. Seonghyeon's breath caught. They were wearing something today—a delicate lace choker, the kind that would leave marks if you pulled too hard. The chat was already spamming heart-eyes emojis, but Seonghyeon barely registered them, too focused on the way PrettyPrincess's hips stuttered when they crooned, "Last time's top tipper was UserHyeon~"
His name. They'd said his name. Seonghyeon's fingers trembled as he typed out another reckless tip, the amount higher this time. "UserHyeon was so generous," they teased, spreading their legs wider. "But they never left a comment or suggestion. For my next video, tell me in the chat, and I'll dedicate it to you."
Seonghyeon's thumb hovered over the chatbox, his pulse hammering. He'd never interacted beyond tipping—what the hell was he supposed to say? The chat exploded with increasingly ridiculous suggestions: ride a dildo, use ice, spell my name with your tongue. But Seonghyeon didn't know what to pick yet. He was aware that this video wasn't actually live, but it felt like PrettyPrincess was waiting for a response from him. His heart rate increased at the thought of the next video being dedicated to his preferences.
Seonghyeon's fingers hovered over the keyboard, his throat dry. The chat scrolled too fast—squirt for us, princess, wear a skirt next time, let's see those tits—but none of it felt right. His stomach twisted at the thought of anyone else getting what he wanted. Before he could overthink it, he typed: overstimulate yourself until you cry. let yourself cum over and over again.
PrettyPrincess didn't react to Seonghyeon's message—couldn't, really, since the stream wasn't live—but the chat erupted around him. Holy shit, UserHyeon, bro's got TASTE, princess gonna be a mess next vid. Seonghyeon's ears burned as he watched the comments flood in, his own words staring back at him in stark white text. He hadn't meant to type something so… specific. But now that it was out there, he couldn't bring himself to regret it. Not when the image of PrettyPrincess trembling through wave after wave of pleasure lodged itself in his brain like a splinter.
The stream continued, PrettyPrincess arching into their own touch with practised ease, but Seonghyeon barely registered it now. His mind was already spiralling—what if they actually did it? What if they listened? The thought alone was enough to make his breath stutter. He tipped again, another reckless 100,000 won, just to see his username flash across the screen like some kind of claim. UserHyeon has tipped 100,000 won.
Keonho's duffel bag was still half-unpacked by his bed, a sock dangling precariously off the edge. Seonghyeon stared at it, guilt gnawing at his ribs. He shouldn't be doing this. Not when Keonho was probably sitting at his parents' dinner table right now, all soft smiles and polite laughter, completely unaware that Seonghyeon was—
PrettyPrincess moaned again, high and breathy, and Seonghyeon's grip on his phone tightened. Fuck. He couldn't stop now.
Seonghyeon's phone screen dimmed as PrettyPrincess's stream ended with a final, sated sigh. The chat exploded with farewells—see you next time, princess!—but his fingers were already swiping through the tipping history, his stomach twisting at the numbers glaring back at him. Half a million won in two nights. Half a million. He could've bought Keonho a lifetime supply of strawberry milk with that.
He tossed his phone onto the bed like it had burned him, raking both hands through his hair. The dorm was too quiet without Keonho's usual chatter—no dramatic sighs over laundry, no off-key humming in the shower. Just Seonghyeon and the ghost of PrettyPrincess's moans looping in his skull.
His laptop pinged—Martin in the group chat: Who's down for dumplings tomorrow? Seonghyeon barely glanced at it before opening a new tab, his fingers typing PrettyPrincess before he could stop himself. The search results loaded: a Twitter account (@princesspretty), a private Discord server, and a Patreon with tiered rewards. His pulse jumped at the locked content previews—Exclusive: Pillow Riding Audio—but his thumb froze over the payment button.
A notification popped up: Keonho liked a tweet.
Seonghyeon blinked at the notification—Keonho liked a tweet—hovering over his screen like an accusation. His thumb twitched, curiosity warring with the irrational fear that somehow, somehow, Keonho would know what he'd just been watching. He tapped the notification before he could overthink it, and the Twitter app loaded to reveal Keonho's profile—his public profile, because of course Keonho didn't bother with private accounts. The liked tweet was from some K-pop fancam account, a blurry shot of a singer mid-chorus. Seonghyeon exhaled, shoulders slumping with relief. Of course. Just Keonho being Keonho.
Then his eyes caught on the timestamp. Liked 2 minutes ago. Keonho was supposed to be at his parents' house—Mom's birthday, obviously—so why was he scrolling Twitter at… Seonghyeon checked the clock… 11:37 PM? His thumb hovered over the DM button, a dumb half-typed before he deleted it. Keonho didn't owe him an explanation. But the thought nagged at him—where was Keonho actually right now?
His laptop screen dimmed, the PrettyPrincess Patreon page still open. Seonghyeon slammed it shut harder than necessary, the sound loud in the empty dorm. He needed to stop. This was getting out of hand. He grabbed his phone, fully intending to text Martin about those dumplings tomorrow—anything to distract himself—but his fingers betrayed him, opening the cam site instead. The PrettyPrincess: New Upload Coming Soon! banner stared back at him, the preview image just a teasing glimpse of lace-covered thighs. His pulse jumped. Coming soon. Would they really…? His own words from the chat echoed in his head—overstimulate yourself until you cry—and his stomach twisted with something hot and guilty.
A sudden buzz made him nearly drop his phone. Keonho's name flashed on screen—Incoming Call. Seonghyeon fumbled to answer, his voice embarrassingly rough. "You're not at your parents'?"
"Wow, hello to you too," Keonho's voice crackled through the phone, bright with laughter. There was a muffled sound in the background—fabric rustling. "I am, we just finished eating. Why do you sound so... concerned?"
Seonghyeon swallowed hard, his thumb hovering over the cam site tab still open on his phone. "No reason. Just—thought you'd be asleep by now." The lie tasted bitter. Across the line, Keonho giggled—that high, breathy sound that always made Seonghyeon's stomach flip—and something twisted in his chest. It was too familiar. Too close to the moans still replaying in his head.
"Mom made me clean up," Keonho whined, the pout audible in his voice. "And then she made me try on her new skincare. My face is sticky, Seonghyeon." There was another rustle, like he was flopping onto a bed, and Seonghyeon could picture it—Keonho sprawled out, phone pressed to his ear, his stupidly perfect lips pursed in complaint.
Seonghyeon cleared his throat, shifting uncomfortably. "Sounds rough." His voice came out strained. On his phone screen, PrettyPrincess's preview image taunted him—lace, thighs, the barest hint of pink. He swiped it away hastily.
Keonho hummed, the sound vibrating through the speaker. "You okay? You sound... weird."
Seonghyeon's grip tightened around his phone, the plastic casing creaking under the pressure. Weird. That was one word for it. "Fine," he muttered, too quickly. "Just—tired." The lie tasted like ash on his tongue. Across the line, Keonho made a soft, sceptical noise—the same one he used when Seonghyeon claimed he didn't care about losing at Mario Kart.
"Uh-huh." Keonho's voice dripped with amused disbelief. Another rustle, closer this time, like he'd rolled onto his stomach. "You're such a bad liar. Did you eat? Or did you just sit there glaring at the fridge again?"
Seonghyeon's chest constricted. Keonho knew him—knew his stupid habits, the way he'd forget meals when he was stressed. The familiarity of it clawed at his ribs. "I ate," he lied again, staring at the half-eaten protein bar on his nightstand. On his laptop, the Patreon page flickered back to life—PrettyPrincess: Exclusive Content Unlocked for Top Tippers!—and he slammed the lid shut with his free hand.
Keonho gasped dramatically. "Liar. I can hear your stomach growling." There was a pause, then the sound of a zipper—Keonho rummaging through his bag. "Okay, listen. I might have stolen your favourite hoodie before I left. And maybe I'm wearing it right now. So if you want it back—"
Seonghyeon's breath hitched at the mental image—Keonho swimming in his hoodie, the sleeves slipping past his wrists, the fabric draping over his slender frame. "You—" His voice cracked. He cleared his throat, fingers tightening around his phone. "You little thief."
Keonho giggled, the sound muffled like he'd pressed his face into fabric—Seonghyeon's fabric. "It smells like you," he admitted, voice suddenly smaller, softer. "Like your stupid cologne and the gym."
Seonghyeon's stomach flipped. He shouldn't—couldn't—think about Keonho burying his nose in his hoodie, inhaling deeply. His laptop screen blinked back to life, the Patreon page reloading with a ding. UserHyeon: Exclusive Access Granted. He shoved it away violently, the device skidding across the bed.
"You're such a weirdo," Seonghyeon muttered, but his chest ached with something warm and syrupy. Across the line, Keonho sighed dramatically, the sound rustling through the speaker.
Seonghyeon exhaled sharply through his nose, thumb pressing into his temple like he could physically push the image of PrettyPrincess out of his skull. "Just—come home soon," he muttered, then immediately winced at how desperate it sounded.
Keonho gasped—loud, theatrical—and Seonghyeon could picture the way his eyes widened, that infuriatingly perfect pout forming. "Aw, Seonghyeonnie~ Do you miss me?" The tease in his voice was unbearable, high-pitched and lilting. There was a wet sound—Keonho biting his lower lip to stifle a laugh, probably.
"Shut up," Seonghyeon grumbled, but his traitorous pulse jumped anyway.
Keonho hummed, oblivious. "I'll be back tomorrow afternoon. Mom wants to—oh, hold on—" The call muffled suddenly, Keonho's voice distant as he answered someone off-speaker. "Yes, I know, I'll pack the—no, Mom, I wasn't—" A huff. Then, clearer: "Seonghyeon, I gotta go. She's hovering."
Seonghyeon stared at his phone long after the call disconnected, the screen dimming to black. The silence of the dorm pressed in around him—too empty without Keonho's restless energy.
Seonghyeon tossed for what felt like hours, the ghost of Keonho's laughter and PrettyPrincess's moans tangling in his skull like twisted vines. When sleep finally came, it was shallow—fleeting dreams of lace chokers and strawberry milk that left him sweating through his sheets. He woke with a start at dawn, his phone buzzing violently against his chest.
The cam site notification burned into his retinas: PrettyPrincess has uploaded a new video: DEDICATED TO USERHYEON. His throat went dry. They'd actually done it. They'd listened. His thumb hovered over the thumbnail—blurred thighs parted just enough to tease—before he jammed the phone under his pillow like a guilty secret. Not now. Not with Keonho due back in—he checked the clock—fuck, three hours.
He dragged himself to the shower, turning the water ice-cold in a futile attempt to shock the images from his brain. It didn't work. The steam curled around him like phantom fingers, and when he squeezed his eyes shut, all he saw was that damn choker—delicate lace digging into soft skin. Keonho's throat would look like that if—no. He punched the tile, the pain sharp and grounding.
By the time he emerged, towel slung low on his hips, his phone had buzzed seventeen more times. The group chat—Martin spamming dumpling emojis—but his fingers betrayed him, swiping straight to the cam site. The video description taunted him: Special request fulfilled for my newest tipper~ Overstimulation until tears? You got it, UserHyeon. His pulse thundered in his ears. This was his fault. His request.
The first preview image loaded—PrettyPrincess sprawled across silk sheets, thighs glistening—and Seonghyeon nearly dropped his phone. Their wrists were tied with the same damn lace as the choker, pinkened from strain. Fuck. He'd imagined this—dreamt it—but seeing it rendered in high-definition stole the breath from his lungs. His thumb moved without permission, tapping play.
The audio hit first—that same high, breathy whine—and Seonghyeon's knees buckled. He caught himself on Keonho's bedframe, the wood digging into his palm. On screen, PrettyPrincess shuddered through their first orgasm, thighs clamping around a vibrator still buzzing mercilessly. "P-please," they sobbed, the sound wet and broken, "UserHyeon, it's t-too much—"
The dorm door creaked.
Seonghyeon fumbled his phone, the device clattering to the floor as the video continued to play—PrettyPrincess's choked moans echoing off the linoleum. No, no, no. Keonho wasn't supposed to be back until—but there it was again, the unmistakable jingle of keys in the lock. He lunged for his phone, fingers slipping on the screen as he mashed the pause button.
"Seonghyeon?" Keonho's voice carried through the door, bright and questioning. "You awake? I brought—oh my god, why is it so cold in here?"
Seonghyeon's pulse hammered against his ribs as he shoved his phone under Keonho's pillow—his pillow, the one that still smelled like Keonho's shampoo—just as the door swung open. Keonho stood there, arms laden with Tupperware containers, his cheeks pink from the winter air. He blinked at Seonghyeon, still shirtless, still panting. "Did you... run here?" Keonho asked, tilting his head.
Seonghyeon swallowed hard, willing his heartbeat to slow. "Shower," he croaked. "Too hot."
Keonho's nose scrunched in that infuriatingly adorable way. "Right." He kicked the door shut with his heel, dumping the containers onto his desk. "Mom packed you japchae. And—" He paused, eyes narrowing. "Why are you standing like that?"
Seonghyeon froze—how the hell had Keonho noticed his guilty stance? He glanced down and realised his hips were angled awkwardly, one knee slightly bent to hide the unmistakable evidence of what he'd just been watching. His face burned. "Like what?" he snapped too quickly, voice cracking mid-sentence.
Keonho arched one perfect eyebrow, setting down the last Tupperware with deliberate slowness. "Like you're hiding a body," he said, then smirked. "Or a boner."
The directness punched the air from Seonghyeon's lungs. He opened his mouth—to deny, to deflect—when his phone buzzed violently against Keonho's pillow, the vibration loud in the sudden silence. Both their heads snapped toward the sound.
"Martin," Seonghyeon blurted, scrambling for an excuse. "Dumplings. He's—he texted earlier. We're late." The lie tumbled out in a jumbled rush as he lunged for his phone before Keonho could even get near it.
Seonghyeon practically vaulted over Keonho's bed in his haste, nearly tripping on the discarded towel as he snatched a wrinkled shirt from the floor. "We're—shit—we're meeting them at noon," he muttered, yanking the fabric over his head with such force the seams groaned. The scent of Keonho's strawberry shampoo hit him as he brushed past—sweet, cloying, wrong when paired with the phantom moans still echoing in his skull.
Keonho blinked, frozen mid-step with one hand still hovering over the suspiciously vibrating pillow. "...It's 11:17," he said slowly, watching Seonghyeon jam his legs into jeans like a man fleeing a crime scene. "And since when do you care about being early?"
Since never. Seonghyeon had once made Martin wait forty minutes in the rain for bibimbap. He fumbled with his belt buckle, fingers slipping twice before securing it. "Changed my mind," he lied through his teeth, snatching his phone from under the pillow with a white-knuckled grip. The screen lit up—Video Paused at 2:47—and he nearly choked on his own tongue.
Keonho's eyes narrowed. He took a single, deliberate step forward. "You're being weird," he sing-songed, tilting his head until his bangs slid sideways. The movement exposed the delicate column of his throat—bare, no choker, nothing like PrettyPrincess—and Seonghyeon's pulse stuttered anyway. "Did you—"
Keonho's fingers twitched toward the pillow where Seonghyeon's phone had been, his expression shifting from playful suspicion to something sharper. "What were you watching?" The question landed like a blade between Seonghyeon's ribs.
"Nothing," Seonghyeon bit out, shoving the phone deep into his pocket. The lie tasted like battery acid. On screen, PrettyPrincess had been begging—UserHyeon, please—and now Keonho's wide, curious eyes were darting between Seonghyeon's face and his death-grip on the hidden device.
Keonho's lips curled into that infuriating smirk—the one that made Seonghyeon want to throttle him or kiss him, he wasn't sure which. "So," he drawled, stepping closer until the toes of their shoes nearly touched, "you're telling me Seonghyeon, who once slept through a fire drill, suddenly cares about being punctual for dumplings?" His breath ghosted over Seonghyeon's collarbones, warm and teasing.
Seonghyeon's grip on his phone tightened. "People change," he muttered, staring resolutely at the wall over Keonho's shoulder.
"Mhm." Keonho hummed, rocking back on his heels with exaggerated thoughtfulness. "And this sudden change has nothing to do with whatever you were just watching like a guilty teenager?" He fluttered his lashes, the picture of innocence if not for the wicked gleam in his eyes.
Seonghyeon's jaw clenched. "We're leaving in five."
Keonho threw his head back and laughed—bright, unrestrained—and the sound curled around Seonghyeon's ribs like a physical touch. "Fine, fine," he relented, wiping imaginary tears from his eyes. "We'll go early, you weirdo." He grabbed his jacket from the back of his chair, the fabric slipping through his fingers twice before he managed to shrug it on—always so clumsy, always so Keonho.
Seonghyeon exhaled sharply through his nose, shoulders relaxing a fraction. His phone burned a hole in his pocket, the paused video still lurking just a swipe away. Not now. He grabbed his own jacket, fingers brushing against Keonho's by accident, and the contact sent a jolt up his spine.
The autumn wind bit at Seonghyeon's cheeks as they stepped outside, but Keonho barely seemed to notice the cold. He bounced ahead like an overexcited puppy, his breath forming little white puffs as he chattered about his weekend. "—and then Mom made me try this delicious seaweed soup that tasted like—oh!" His foot caught on an uneven pavement tile, sending him lurching forward.
Seonghyeon's arm shot out instinctively, fingers closing around Keonho's elbow before he could faceplant. "Watch it," he grumbled, but didn't let go immediately—his thumb brushing against the soft inner arm where Keonho's sleeve had ridden up. The skin there was warm despite the chill, and Seonghyeon abruptly remembered how PrettyPrincess's thighs had looked in the video preview—glistening, trembling. He released Keonho like he'd been burned.
Keonho blinked up at him, cheeks pink from more than just the cold. "Thanks," he murmured, unusually quiet for a beat before the spark returned to his eyes. He hooked their arms together dramatically. "My hero~"
Seonghyeon stiffened but didn't pull away as Keonho clung to his arm like an overgrown koala, their mismatched footsteps crunching through fallen ginkgo leaves. The dumpling house was already bustling when they arrived—Martin waving furiously from their usual booth, Juhoon and James already halfway through their first round of beer.
"Finally!" Martin crowed, sloshing soju onto the table as he gestured at them. "Thought you'd stand us up again after last time's—ohhhh." His grin turned razor-sharp as he took in Keonho still attached to Seonghyeon's arm. "What's this?"
Keonho squeezed tighter, pressing his cheek against Seonghyeon's bicep. "Seonghyeonnie's being nice today," he announced, as if sharing state secrets.
James choked on his beer. Juhoon's chopsticks hovered mid-air, a dumpling dangling precariously.
Seonghyeon's ears burned as Keonho clung to him like a particularly affectionate barnacle, his grip tightening just enough to make the fabric of Seonghyeon's jacket strain at the seams. "Shut up," he muttered, aiming for gruff but landing somewhere dangerously close to flustered. Martin's smirk widened.
Juhoon recovered first, spearing his dangling dumpling with pointed precision. "Nice?" he repeated, eyebrows climbing toward his hairline. "Did he steal your strawberry milk again?"
Keonho giggled—that high, breathy sound that sent Seonghyeon's pulse skittering—and shook his head, strands of hair brushing against Seonghyeon's shoulder. "Worse," he stage-whispered. "He almost admitted he missed me."
The table erupted. James wheezed into his beer while Martin pounded the table hard enough to rattle the dishes. Seonghyeon contemplated murder. Or spontaneous combustion. Either would suffice.
Seonghyeon exhaled sharply through his nose, the scent of steamed dumplings thick in the air—but all he could focus on was the weight of Keonho still pressed against his side, warm and solid despite his ridiculous clinging. Across the table, Martin's smirk grew impossibly wider as he nudged James's elbow with deliberate slowness. "Oh?" he drawled, tilting his beer bottle toward them. "Seonghyeon missed you?"
Keonho nodded vigorously, fingers tightening around Seonghyeon's sleeve. "He called," he announced, as if this were groundbreaking evidence. "Said—" His voice pitched higher in a terrible imitation of Seonghyeon's gruff tone, "‘Just—come home soon.'" The table exploded into fresh laughter, Juhoon nearly inhaling his kimchi. Seonghyeon considered flipping the table.
Seonghyeon stabbed his chopsticks into a dumpling with unnecessary force, watching as the delicate skin split open—hot broth spilling across the plate like his patience evaporating. Across the table, Keonho leaned into James's space to inspect the menu, their shoulders brushing as James pointed at something with a laugh. Seonghyeon's grip tightened around his utensils. Too close.
"Try the pork belly ones," James suggested, tapping the laminated sheet with his nail—tap tap—right beside Keonho's smaller fingers. "They're your favourite, right?"
Keonho beamed, nodding so enthusiastically his bangs bounced. "You remember!"
Seonghyeon's jaw clenched. Of course, he remembers. Everyone remembers everything about you. Keonho had that effect—bright and impossible to ignore, like sunlight refracting through glass. Martin kicked Seonghyeon's shin under the table, eyebrows waggling when their eyes met. Seonghyeon flipped him off discreetly.
Keonho leaned further toward James—too close, always too close—his shoulder pressing into James' arm as they debated dipping sauces. "Yuzu soy?" Keonho gasped, scandalised. "That's tourist bait!"
James laughed, ruffling Keonho's hair with one careless hand. "Says the guy who puts ketchup on tteokbokki."
Keonho squawked, batting at James' wrist. "It's good! Seonghyeon, tell him—"
Seonghyeon's chopsticks snapped the dumpling in half with a crisp crack. "It's disgusting," he muttered, staring fixedly at the ruined pastry. The table erupted into fresh howls—even Juhoon, usually the stoic one, snorted into his napkin. Keonho pouted, lower lip jutting out in that infuriatingly perfect Seonghyeon-you're-being-mean expression that made his stomach flip.
Seonghyeon's phone buzzed in his pocket like a live grenade—PrettyPrincess: Missed you today, UserHyeon~—and he nearly knocked over his beer reaching to silence it. Keonho, mid-bite into a dumpling dripping with broth down his chin, tilted his head. "Important?" he mumbled around the food, eyes flicking to Seonghyeon's clenched fist around his phone.
"Spam," Seonghyeon gritted out, shoving the device deeper into his jeans. The heat of the screen burned through the fabric, searing the words into his thigh. Martin kicked him again, this time hard enough to leave a bruise.
The conversation lurched forward without him—Juhoon recounting some absurd campus rumour while James added increasingly ridiculous embellishments. Keonho laughed, loud and unguarded, throwing his head back until his throat arched—no choker, no lace, just skin—and Seonghyeon's fingers twitched toward his phone before he caught himself.
The walk back to the dorm was a blur of cold air and half-hearted bickering—Keonho complaining about James' yuzu obsession while Seonghyeon grunted noncommittally every third step.
The dorm door clicked shut behind them with finality, Keonho already toeing off his shoes with a theatrical sigh. "I'm exhausted," he declared, stretching his arms overhead until his sweater rode up—exposing a sliver of pale stomach that Seonghyeon pointedly did not stare at. "Gonna nap for approximately forever."
Seonghyeon grunted, pretending his pulse wasn't hammering against his ribs as Keonho ambled toward his room—pausing only to steal Seonghyeon's half-empty water bottle from the coffee table. "Hey—"
Keonho winked over his shoulder, already unscrewing the cap. "Shared fluids build immunity," he sing-songed, pressing his lips exactly where Seonghyeon's had been moments before. The smack of his exaggerated swallow echoed down the hallway. Seonghyeon's throat went dry.
Then Keonho's door shut with a soft click, leaving Seonghyeon alone in the sudden silence, his fingers already digging into his pocket for his phone. The screen lit up instantly—Video Paused—and his breath hitched.
He locked himself in his own room with unnecessary force, banging his back against the door as he fumbled with the volume slider. The preview image loaded first—PrettyPrincess spread across silk sheets, thighs slick and trembling—and Seonghyeon's knees nearly buckled. The lace—that same delicate pink from his request—tied their wrists to the headboard, the fabric biting into pale skin. Fuck. His thumb hovered over play, guilt and hunger warring in his gut.
The first moan ripped through his headphones like a physical touch—high, breathy, familiar in a way that made his stomach twist. PrettyPrincess arched off the bed, the vibrator between their legs buzzing mercilessly. "UserHyeon," they whimpered, voice cracking on the last syllable—and Seonghyeon's grip on his phone turned white-knuckled. Too close. The cadence, the slight lisp on the s sounds—he'd heard it a thousand times when Keonho complained about early classes.
On screen, PrettyPrincess sobbed through another orgasm, thighs clamping around the vibrator as their hips jerked helplessly. "P-please," they gasped, squirming against the restraints—just like Keonho did when Seonghyeon stole his snacks—"can't—ah—can't take more—"
Seonghyeon's free hand flew to his mouth, biting down on his knuckles to stifle a groan. The video continued—PrettyPrincess overstimulated to tears, just like he'd requested—but all he could see was Keonho's face twisted in pleasure, Keonho's throat bobbing with each whimper, Keonho's—no. He jammed his thumb against the pause button, chest heaving.
Seonghyeon tore the headphones off like they'd burned him, the video freezing mid-frame—PrettyPrincess's glistening thighs trembling, their mouth slack around a silent moan. His own breathing sounded ragged in the sudden silence, each inhale scraping against his ribs. Why am I thinking of Keonho? He flung his phone onto the bed, watching it bounce against the duvet as if that could erase the damning evidence.
The knock came just as Seonghyeon was scrubbing a hand down his face—three sharp raps that sent his pulse skyrocketing. "Seonghyeon?" Keonho's voice muffled through the door, tinged with that particular whine he reserved for when he wanted something. "You have my charger."
Seonghyeon's gaze darted to the tangled cord coiled beside his laptop. Fuck. He lunged for it, nearly tripping over his own feet in his haste to grab it. "Here," he said, opening and shutting the door before Keonho could even react.
Keonho blinked at the charger shoved into his chest, fingers curling around it slowly. He shrugged at Seonghyeon's weird behaviour before heading back to his room.
Seonghyeon exhaled sharply as the lock clicked into place—finally, finally alone. The dorm's thin walls had never felt so oppressive, every creak of Keonho's floorboards sending his pulse skittering like a hunted thing. He sank onto his bed, fingers trembling as he fumbled with his phone. The screen illuminated instantly—PrettyPrincess's glistening thighs frozen mid-tremble, their mouth slack around a silent moan.
His thumb hovered over play, the pad of his finger slick with sweat. This is wrong, hissed the voice in his skull—but the ache in his jeans drowned it out. He tapped the screen.
The video resumed with a gasp—PrettyPrincess arching off the silk sheets, their wrists straining against the pink lace restraints. "UserHyeon," they whimpered, voice cracking on the last syllable—high, breathy, so fucking familiar—and Seonghyeon's stomach twisted. He bit down on his knuckles to stifle a groan as PrettyPrincess's hips jerked helplessly, the vibrator between their legs buzzing mercilessly. "P-please," they sobbed, thighs clamping around the toy, "can't—ah—can't take more—"
Seonghyeon's free hand flew to his own belt buckle, fingers slipping in their haste. On screen, PrettyPrincess dissolved into overstimulated tears—exactly as he'd requested in that drunken tipping spree three nights ago—but all he could see was the way their pussy swallowed the vibrator, the camera angle not allowing for anything more than the view of his folds.
Seonghyeon's breath hitched—the sound embarrassingly loud in his quiet room—as PrettyPrincess's thighs clenched around the vibrator, their moan pitchy and desperate. He palmed himself through his jeans, biting back a groan.
Seonghyeon's fingers trembled as he finally freed himself from his jeans, his cock heavy and aching against his palm. The video played on—PrettyPrincess writhing beneath the camera, their moans muffled by the silk sheets they'd buried their face in. The vibrator pressed insistently against their clit, making their thighs quiver with each merciless pulse.
"UserHyeon," they gasped, voice breaking around his username like a prayer—like they were speaking directly to him.
Seonghyeon bit down on the meat of his palm to stifle a groan, his grip tightening around himself. The cadence of PrettyPrincess's voice sent heat licking up his spine—something about the way they formed the syllables, the slight lisp on the s sounds, the breathy hitch when they were overwhelmed. It was familiar, in a way he couldn't place, and that only made it worse.
On screen, PrettyPrincess arched off the bed, their thighs slick with sweat and arousal as the vibrator buzzed relentlessly. "P-please," they whimpered, twisting against the restraints—just like Keonho did when Seonghyeon stole his snacks—"t-too much—ah!"
Seonghyeon's hips jerked involuntarily, his thumb brushing over the head of his cock in time with PrettyPrincess's stuttered moans. He didn't want to think about Keonho right now—didn't want to acknowledge the way his mind kept superimposing his roommate's face over PrettyPrincess's obscured one. But his traitorous brain supplied the images anyway: Keonho's lips parted around a gasp, Keonho's thighs trembling, Keonho's—
He bit back a groan, pressing the heel of his hand against his mouth. Focus. The video played on—PrettyPrincess writhing beneath the camera, their moans muffled by the silk sheets they'd buried their face in. The vibrator pressed insistently against their clit, making their thighs quiver with each merciless pulse.
Seonghyeon stroked himself in time with PrettyPrincess's jerking hips, his breath coming in ragged pants. He should feel guilty—should feel something other than this all-consuming hunger—but all he could focus on was the way PrettyPrincess's pussy fluttered around the vibrator, the way their thighs clenched with each wave of pleasure.
"UserHyeon," they sobbed, voice cracking—"c-close—"
Seonghyeon's hips stuttered as PrettyPrincess's voice cracked around his username—high, desperate, perfect—and his grip tightened around himself. On screen, their thighs trembled violently, their pussy clenching around the vibrator in rhythmic pulses as they came with a broken sob. "UserHyeon—ah!—please—"
The sound of his own name—his name, not just some random username—ripped through him like a live wire. Seonghyeon's vision whited out as his orgasm hit him like a freight train, his back arching off the bed as he spilled over his fist with a choked groan. He bit down hard on his knuckles to muffle the sound, but it didn't matter—his ears were ringing too loudly to hear anything else anyway.
For a moment, there was nothing but the hazy aftershocks of pleasure and the staticky buzz of the video still playing—PrettyPrincess whimpering through the overstimulation, their thighs twitching with residual sensitivity. Seonghyeon's chest heaved as he tried to catch his breath, his fingers still curled loosely around himself, sticky and spent.
Then reality crashed back in.
Seonghyeon's phone slipped from his grasp, landing face-up on the mattress—the video still playing, PrettyPrincess's oversensitive whimpers tinny through the speakers. He lunged to mute it, pulse hammering against his ribs like a caged thing. The silence that followed was worse.
A floorboard creaked in the hallway.
Seonghyeon froze, his blood turning to ice. Keonho's room is twelve steps away. The bathroom is six. This creak was—
Three knocks. "Seonghyeon?" Keonho's voice, muffled through the door. "You okay? Heard a—uh. A noise."
Seonghyeon's throat went dry. His phone—still displaying PrettyPrincess's flushed thighs—lay face-up on the bed like a damning confession. He snatched it up, fumbling to lock the screen as Keonho's footsteps shuffled closer. "Fine," he croaked, then cleared his throat. "Just—dropped something."
Silence. Then Keonho's laugh—light, airy, suspiciously bright—filtered through the door. "Your dignity?"
Seonghyeon's pulse jumped. He knows. The thought sent panic skittering down his spine. But no—Keonho's tone held its usual playful lilt, nothing sharp or accusatory. Seonghyeon exhaled shakily, scrubbing a hand over his face. "Go away," he muttered, aiming for gruff but landing somewhere dangerously close to breathless.
Another creak—Keonho leaning against the doorframe, probably. "You're weird today," he sing-songed, the wood groaning under his weight. "First the charger thing, now this. Did Martin spike your soju?"
Seonghyeon's fingers twitched around his phone, the screen still warm from his grip. "Go to bed, Keonho," he growled, but the words lacked their usual edge—too breathless, too exposed. The silence stretched, thick with everything unsaid, until Keonho's sigh seeped through the door like steam.
"Fine, fine." A shuffle of socked feet, then—pause. "But if you're watching porn, at least hydrate." The tease dripped with Keonho's trademark mischief.
Seonghyeon's fingers clenched around his phone so hard the case groaned. Keonho's footsteps retreated down the hallway—each creak of the floorboards a countdown to disaster—but the echo of his teasing words lingered like a branding iron. Hydrate. His gaze flicked to the half-empty water bottle on his nightstand, the cap still smudged with Keonho's lip balm from earlier. He swallowed against the sudden dryness in his throat.
Seonghyeon woke to the slow, syrupy awareness of warmth pressed against his ribs—a weight draped over his torso, limbs tangled in his sheets like vines around a trellis. His sleep-fogged brain registered the scent of strawberry shampoo before anything else, and his pulse stuttered.
Keonho.
Keonho, curled against him like a comma, his face smushed into Seonghyeon's shoulder, one leg hooked possessively over his hips. Seonghyeon didn't breathe. Didn't move. The morning light bled through the curtains, painting Keonho's lashes gold against his cheeks, his lips slightly parted—soft, pink, impossibly close.
This shouldn't be happening. Seonghyeon's fingers twitched against the mattress, caught between the urge to push Keonho away and the devastating need to pull him closer. His memories of last night were a blur of shame and frantic, guilty pleasure, but this—this was worse. Keonho's thigh shifted against his hip, the fabric of his sleep shorts riding up, and Seonghyeon's throat went dry.
Seonghyeon's breath caught as Keonho nuzzled deeper against his collarbone, a sleepy murmur escaping those unfairly plush lips. His pulse hammered loud enough that he feared it would wake the other boy—but Keonho only sighed, fingers curling into Seonghyeon's shirt like he was claiming territory in his sleep. The morning light caught on the delicate curve of Keonho's throat, the dip where his pulse fluttered beneath skin so thin Seonghyeon could trace its rhythm with his tongue if he dared.
Fuck. He squeezed his eyes shut, but the image of PrettyPrincess's trembling thighs superimposed itself behind his eyelids—the way their pussy had clenched around the vibrator, the desperate sob of "UserHyeon—"—and now here Keonho was, pressed against him like he belonged there, smelling like stolen strawberry milk and home. The cognitive dissonance made his stomach churn.
A vibration buzzed against his thigh—his phone, still clutched in his hand from last night's shame spiral. The screen lit up with a notification: PrettyPrincess 💖 LIVE in 15 mins! Seonghyeon's thumb hovered over the alert, torn between hunger and self-loathing, when Keonho stirred against him with a soft, questioning noise.
"You're tense," Keonho mumbled, voice thick with sleep, and Seonghyeon froze. Warm fingers brushed his sternum, tentative and drowsy. "Bad dream?"
Seonghyeon's breath hitched. The phone screen dimmed, but the damage was done—PrettyPrincess's notification burned behind his eyelids like a brand. Keonho's fingers curled against his chest, warm and grounding, yet all he could think about was how those same fingers looked in the videos—splayed across trembling thighs, slick with arousal.
"Yeah," he lied, voice rough. "Just—just a dream."
Keonho hummed, nuzzling closer, his knee slotting between Seonghyeon's thighs with terrifying casualness. "Mm. You're all sweaty." His nose scrunched, lips brushing Seonghyeon's collarbone as he spoke. "Gross."
Seonghyeon's pulse thundered. He should push him away. Should laugh it off, call him clingy, anything—but his traitorous hands stayed frozen at his sides.
Seonghyeon's phone buzzed again—insistent, damning—but Keonho's fingers were already plucking it from his lax grip. "Who texts this early?" he yawned, blinking blearily at the screen before Seonghyeon could react. The notification glowed between them: PrettyPrincess 💖 LIVE in 10 mins!
Keonho's nose wrinkled. "Ew, porn?" He tossed the phone back onto Seonghyeon's chest with a dramatic shudder, his knee pressing harder between Seonghyeon's thighs as he stretched. "Didn't peg you as the type to subscribe to camgirls."
The irony punched Seonghyeon in the gut. His fingers clenched around the phone, the edges digging into his palm. You have no idea. "It's—" His voice cracked. "A spam notification."
Keonho rolled his eyes, flopping back onto Seonghyeon's pillow with a huff that sent strawberry-scented air wafting over Seonghyeon's jaw. "Sure, sure." His fingers trailed absently over Seonghyeon's sternum, tracing idle patterns that set his nerves alight. "Just go and deal with your morning wood, I guess."
Seonghyeon's breath caught as Keonho's fingers lingered—innocent, oblivious, killing him—before finally withdrawing. The mattress dipped as Keonho rolled away, stretching like a cat in the morning sun. "Ugh, your pillow smells like stress-sweat," he complained, but made no move to leave, flopping onto his back with his arms splayed wide. The hem of his shirt rode up, exposing a sliver of smooth stomach that Seonghyeon pointedly ignored. Mostly.
The phone buzzed again between them. PrettyPrincess 💖 LIVE in 5 mins! Keonho snorted, kicking Seonghyeon's thigh under the sheets. "Dude, just go. I won't judge." He waggled his eyebrows, the morning light catching the mischief in his eyes. "Much."
Seonghyeon's throat worked. He couldn't—not with Keonho right there, not with the memory of PrettyPrincess's voice still echoing in his skull. He shoved the phone under his pillow like a guilty teenager hiding contraband. "Shut up," he muttered, but there was no heat in it.
Keonho's grin widened. He propped himself up on one elbow, his sleep-mussed hair sticking up in every direction. "You're blushing," he crowed, poking Seonghyeon's cheek. "Oh my god, do you have a crush on this camgirl? Is that why you're—" His eyes flicked downward pointedly, and Seonghyeon nearly combusted.
Seonghyeon snatched the pillow from under his head and smothered Keonho's grinning face with it. "I said shut up," he growled, but the effect was ruined by the way his hips jerked involuntarily when Keonho's knee brushed against him again. Keonho's laughter was muffled against the fabric, his hands flailing to grab at Seonghyeon's wrists—warm, too warm, too close.
The notification buzzed again. PrettyPrincess 💖 LIVE NOW!
Keonho finally wrestled the pillow away, his cheeks flushed and hair even more dishevelled, lips parted around breathless giggles. "Oh my god," he wheezed, wiping at his eyes. "You're so into her." His grin turned wicked as he stretched, deliberately arching his back—just enough for his shirt to ride up further, revealing the delicate dip of his hip bones. Seonghyeon's throat went dry. "What's her name, huh? Is she hot? Does she moan just right—?"
Seonghyeon's fingers twitched against the sheets. The memory of PrettyPrincess's breathy "UserHyeon—" tangled with the sight of Keonho's teasing smirk, and his stomach flipped. He should not be hard right now. He definitely should not be imagining Keonho saying—
Seonghyeon's thumb hovered over the notification—PrettyPrincess 💖 LIVE NOW!—pulse hammering loud enough that he swore Keonho could hear it. The screen lit up when he tapped it, and the video loaded instantly. PrettyPrincess's bare thighs filled the frame, their legs spread wide over a plush pink chair, the camera angle deliberately obscuring their face.
A tinny, breathy giggle crackled through the phone speakers—high-pitched and slightly lisping on the s sounds—and Keonho's fingers froze mid-tease against Seonghyeon's forearm. The laugh cut off abruptly as if choked, and Seonghyeon glanced up just in time to see Keonho's playful smirk stiffen into something unreadable.
"Seonghyeon... What's her name?"
Keonho's fingers dug into Seonghyeon's wrist like a vice, his playful expression wiped clean. The phone screen between them glowed—PrettyPrincess's thighs trembling as they spread wider, their voice dripping through the speakers: "UserHyeon~ You came back for me?"
Seonghyeon's pulse thundered in his ears. Keonho's grip tightened, his nails biting into skin.
"Her name," Keonho repeated, voice unnervingly flat.
The air between them crackled. Seonghyeon's thumb hovered over the exit button, but Keonho snatched the phone first, eyes darting across the screen. His breath hitched—a tiny, damning sound—as PrettyPrincess moaned again, the vibrator buzzing obscenely loud in the quiet room.
Keonho's grip on the phone went white-knuckled. The screen flickered as PrettyPrincess arched into the camera with a breathy moan—that moan, the one Seonghyeon had tipped extra to hear last Thursday, the one that had haunted his dreams.
Silence.
Then Keonho's breath stuttered—a wet, punched-out sound—and Seonghyeon's stomach dropped.
"PrettyPrincess," Keonho whispered, voice cracking on the last syllable. His thumb swiped frantically at the screen, exiting the stream so fast the phone clattered onto the mattress between them. The whites of his eyes gleamed in the dim morning light, wide and panicked.
Seonghyeon's breath stopped altogether. Keonho's chest rose and fell too fast, his fingers twitching against the sheets like he was calculating escape routes. The silence between them was thick enough to choke on.
"You—" Keonho's voice cracked. He swallowed hard, throat bobbing. "You watch—"
The accusation hung unfinished, but Seonghyeon heard it anyway. His pulse hammered against his ribs like a trapped animal. He should deny it. Should laugh it off. But Keonho's knee was still pressed between his thighs, and PrettyPrincess's phantom moans still echoed in his skull, and—
"Only because of you," Seonghyeon blurted.
Keonho's breath hitched—sharp, audible—and Seonghyeon instantly regretted every life choice leading to this moment. The morning light caught the furious pink blooming across Keonho's cheeks. "What do you mean, because of me? D-Do I remind you of her?"
Seonghyeon's mouth moved before his brain could catch up. "No." The lie burned like acid on his tongue. Keonho's eyes—wide, glistening—darted across his face, searching for cracks in the denial. Seonghyeon's pulse roared in his ears. "I mean—"
Keonho's knee shifted against his thigh, the pressure deliciously torturous. The sheets rustled as Keonho sat up abruptly, putting inches of distance between them that felt like miles. His fingers knotted in the fabric of his sleep shorts, twisting nervously. "You're such a bad liar," he whispered, voice trembling. "You always—your left eyebrow twitches."
Seonghyeon's stomach plummeted. He hadn't even noticed. The phone between them buzzed again—another notification—but neither of them moved to check it. Keonho's breath came in shallow bursts, his lower lip caught between his teeth in a way that made Seonghyeon's fingers ache to tug it free.
"You don't remind me of her," Seonghyeon said slowly, watching Keonho's lashes flutter at the rough scrape of his voice. "You—"
Keonho's breath hitched—sharp, audible—as Seonghyeon's thumb brushed against his lower lip, tugging it free from his teeth with deliberate slowness. The morning light painted the wetness there in shimmering relief, and for a heartbeat, neither of them moved.
"I'm sorry, I know it's fucked up. That you're straight. And we're best friends. But PrettyPrincess has been like my outlet for my feelings towards you—"
Keonho's breath stuttered against Seonghyeon's thumb. His lips parted—not in protest, but in a soft, stunned exhale that ghosted hot over Seonghyeon's skin. The silence between them thickened, charged with something seismic, until Keonho's tongue darted out to wet his lips and accidentally grazed Seonghyeon's fingertip.
Seonghyeon jerked back like he'd been burned. "Shit—sorry, I—"
Keonho's fingers tangled in his shirt, yanking him forward with surprising strength. "Shut up," he hissed, his voice cracking mid-syllable. His pupils were blown wide, dark enough to drown in. "You—you idiot—"
Keonho's grip twisted tighter in Seonghyeon's shirt, knuckles pressing white against the fabric. His breath came in shallow bursts, lips parted. "I'm not straight, you dumbass, why would you even think that?"
Seonghyeon's brain short-circuited. The confession hung between them, raw and electric, as Keonho's fingers trembled against his chest. The morning light caught the frantic flutter of Keonho's lashes, the way his throat worked around unspoken words.
"You—" Seonghyeon choked, fingers twitching at his sides. "But you never—"
Keonho's laugh was brittle, his grip tightening. "You never asked."
Seonghyeon's pulse roared in his ears, drowning out everything but the hitch of Keonho's breath. The phone buzzed again between them—PrettyPrincess 💖 missed you!—and Keonho's cheeks flushed crimson, his fingers tightening reflexively in Seonghyeon's shirt.
"Can I show you something?" Keonho whispered, voice cracking.
Seonghyeon's throat went dry at the tremor in Keonho's voice—not teasing now, not playful, just nervous. His fingers twitched against Seonghyeon's shirt, the fabric crumpling under his grip. "Show me what?" Seonghyeon managed, voice rough.
Keonho's fingers hesitated at the hem of his sleep shirt, knuckles brushing against Seonghyeon's stomach where their bodies were still tangled. The morning light caught the tremor in his hands, the way his breath stuttered like a dying engine. "Undress me," he whispered, voice so quiet it barely disturbed the air between them.
Seonghyeon froze. His pulse hammered against his ribs, a frantic bird trapped in a cage of bone. Keonho's gaze flicked up—dark, uncertain—and Seonghyeon realised with a jolt that he was waiting for rejection. That he'd braced for it.
The phone buzzed again between them, ignored it. Seonghyeon's fingers found the fabric of Keonho's shirt, brushing warm skin beneath. He tugged upward, slow, giving Keonho every chance to stop him—but Keonho only arched into the touch, arms lifting obediently. The shirt slipped over his head, catching briefly on his tousled hair before Seonghyeon freed him.
Keonho's chest flushed pink under Seonghyeon's gaze, his nipples pebbling in the cool morning air. A scar curved over his ribcage—a childhood fall from a bike, Seonghyeon knew—and his stomach dipped with each shallow breath. Beautiful. Familiar. Seonghyeon's throat tightened.
Seonghyeon's fingers hovered over the waistband of Keonho's sleep shorts, his pulse hammering so hard his vision blurred at the edges. The morning light caught the fine tremors running through Keonho's thighs, the way his breath hitched when Seonghyeon's knuckles brushed bare skin. "Tell me to stop," Seonghyeon rasped, but Keonho shook his head violently, his fingers fisting in the sheets.
Seonghyeon's fingers curled around the waistband of Keonho's sleep shorts, the fabric damp with nervous sweat. His pulse roared in his ears, drowning out everything but the hitch of Keonho's breath as he peeled the shorts down—slow, so slow—revealing inch after inch of trembling thigh. The morning light caught the golden dusting of hair leading downward, the way Keonho's hips jerked involuntarily when cool air brushed bare skin.
Then Seonghyeon froze. His brain stuttered to a halt, fingers tightening reflexively against Keonho's hipbone. Between Keonho's thighs, where he'd expected to find the familiar contour of his best friend's body, was something impossibly soft—pink and glistening in the low light, already slick with arousal. The air left Seonghyeon's lungs in a rush. His gaze snapped up to Keonho's face—flushed scarlet, lips bitten raw—and found wide, uncertain eyes staring back.
"You—" Seonghyeon choked, fingers twitching against Keonho's skin. His pulse roared in his ears, drowning out all coherent thought. "PrettyPrincess."
Keonho whimpered, a tiny, wounded sound, and tried to squeeze his thighs shut, but Seonghyeon's knee between them kept him spread open. The movement made his hips jerk, his cunt clenching visibly around nothing. "I-I thought you knew," he whispered, voice cracking. "When you said PrettyPrincess was your outlet for—"
Seonghyeon's brain short-circuited. His thumbs brushed the inside of Keonho's thighs on instinct, spreading him wider just to see. The angle was different from the videos—closer, realer, the scent of him thick in the air—but the way Keonho's folds fluttered at the touch was unmistakable. "Fuck," Seonghyeon breathed, dragging his gaze back up Keonho's trembling body. "All this time—"
Keonho's fingers twisted in the sheets, his chest rising and falling too fast. "You were UserHyeon," he blurted, then immediately winced. "I mean—I didn't know, not until—until you said—" His breath hitched when Seonghyeon's thumb brushed his clit, the pad catching on swollen flesh. "Fuck."
Seonghyeon's thumb circled Keonho's clit again, deliberately slow, watching the way his breath stuttered and his thighs tensed—just like in the videos, but real, warm and trembling under his touch. "You knew," Seonghyeon murmured, voice rough with disbelief. "When I tipped—when I asked you to say my name—"
Keonho's hips jerked, a whine catching in his throat. "I didn't," he gasped, fingers scrambling to grip Seonghyeon's wrist. "I thought—I thought it was a coincidence, just some stranger with a similar username—" His words dissolved into a moan as Seonghyeon's fingers dipped lower, tracing the slick heat of his entrance. "Oh fuck—"
Keonho's fingers tightened around Seonghyeon's wrist. "Wait," he breathed, voice trembling. Seonghyeon froze instantly, pulse stuttering at the sudden tension in Keonho's body. "Did I—hurt you?"
Keonho shook his head violently, cheeks flushed dark pink. "N-no, I just—" His teeth dug into his lower lip, eyes darting down to where Seonghyeon's hand hovered between his thighs. The sheets rustled as he shifted, knees pressing together around Seonghyeon's wrist in a way that made his breath hitch. "I want to see you too," he whispered.
Seonghyeon's throat went dry. Keonho's fingers skimmed up his chest, tentative and warm, catching on the hem of his sleep shirt. "Take this off," he murmured, tugging lightly. The request—soft but unmistakable—sent heat pooling low in Seonghyeon's stomach. His hands moved before his brain caught up, dragging the fabric over his head in one rough motion.
Keonho's gaze dropped to Seonghyeon's bare chest, his lips parting around a shaky exhale. His fingers traced the ridges of Seonghyeon's abs—hesitant at first, then bolder, mapping the planes of muscle with a reverence that made Seonghyeon's skin prickle. "You're so—" Keonho swallowed hard, fingertips brushing a scar above Seonghyeon's hipbone. "I've wanted this forever," he admitted, voice so quiet it barely reached Seonghyeon's ears.
Keonho's fingers trembled as they traced downward, ghosting over the waistband of Seonghyeon's boxers—pausing there, his breath audibly catching. Seonghyeon could feel the heat radiating off him, the way his pulse jumped visibly beneath delicate skin. "Can I—?" Keonho whispered, the question fracturing mid-sentence when Seonghyeon's hips jerked involuntarily against his knuckles.
Seonghyeon barely managed a nod before Keonho was hooking fingers into fabric, dragging it down with a clumsy urgency that made them both laugh breathlessly. The sound died the moment Keonho's gaze dropped, his lips parting around a silent oh. Seonghyeon's cock twitched against his stomach, flushed and aching—harder than he'd ever been, just from Keonho.
Keonho's fingers hovered just above Seonghyeon's cock, his breath uneven. "You're—" His throat worked around the words, his pupils blown wide. "I didn't think you'd be this big." The admission came out half-strangled, his fingertips brushing the leaking tip before jerking back like he'd been burned.
Seonghyeon caught his wrist, guiding Keonho's trembling hand back. "Touch me," he murmured, pressing Keonho's palm flat against his length. The contact punched a groan from his chest—hot, slick friction as Keonho's fingers curled tentatively around him. "Just like that."
Keonho's lips parted around a shaky exhale, his grip tightening experimentally. The drag of his calloused palm—so familiar from years of shared meals, stolen pencils, lazy high-fives—now sent lightning up Seonghyeon's spine. "You've done this before," Seonghyeon realised aloud, hips stuttering forward into the touch.
Keonho's cheeks darkened. "Not—not like this," he admitted, thumb swiping clumsily over the head. His hips jerked when Seonghyeon moaned, his own arousal dripping obscenely between his thighs. "Just—with toys. For the streams."
Seonghyeon's breath hitched as Keonho's fingers tightened around him, the rough pads of his fingertips catching on sensitive skin in a way that made his thighs tremble. "Fuck," he gasped, hips jerking forward into the grip. "You—the way you touch yourself in those videos—" The confession spilled out before he could stop it, raw and unfiltered, and Keonho's fingers stuttered mid-stroke.
"I still can't believe you watched those." Keonho's voice cracked, his grip loosening as his free hand flew up to cover his burning face. "Oh my god, which ones—"
"All of them." Seonghyeon caught Keonho's wrist again, pulling his hand away from his face with a desperation that surprised them both. "Every single one. The—the vibrator, the one where you came just from your fingers, god, I can't believe you willingly overstimulated yourself for me—" His voice dropped to a ragged whisper as Keonho's thighs squeezed around nothing, his cunt clenching visibly at the mention.
Seonghyeon's fingers dug into Keonho's hips, his grip almost bruising as he dragged him closer—close enough that the head of his cock bumped against Keonho's slick folds, smearing precum between them. Keonho's breath hitched, his thighs trembling where they bracketed Seonghyeon's waist. "Wait," he gasped, fingers scrambling against Seonghyeon's shoulders. "I've never—not with a real—"
The admission punched through Seonghyeon's haze of arousal like a bucket of ice water. He froze instantly, pupils dilating as he took in Keonho's flushed face, the nervous bite of his teeth into his lower lip. "You're a virgin?" The words came out rougher than intended, laced with something possessive and awed.
Keonho's laugh was shaky, his hips twitching involuntarily against Seonghyeon's. "Technically? Yeah." His fingers traced the line of Seonghyeon's collarbone, his touch featherlight. "The—the toys don't count, right?"
Seonghyeon's throat worked as he swallowed hard, suddenly hyperaware of every point of contact between them—the heat of Keonho's thighs against his hips, the way his breath hitched whenever Seonghyeon shifted even slightly. "We don't have to—"
Keonho's fingers tightened abruptly in Seonghyeon's hair, yanking him close enough that their foreheads bumped. "Shut up," he hissed, breath hot and unsteady against Seonghyeon's lips. His hips rocked up instinctively, dragging Seonghyeon's cock through slick folds with a gasp. "I want this. Want you—just—" His voice cracked as the head caught against his entrance, his entire body shuddering. Slow. Please."
Seonghyeon's grip on Keonho's hips turned bruising, his muscles locking to keep himself from thrusting down into that impossible heat. Every nerve screamed at him to move, to take, but Keonho's whispered plea anchored him. He exhaled sharply through his nose, watching the way Keonho's lashes fluttered at the sensation of being stretched—so slowly—around him.
Seonghyeon's hands trembled as he pressed forward—inch by aagonisinginch—feeling Keonho's body yield around him in slow, shuddering waves. The choked-off whine that spilled from Keonho's lips sent heat lancing down Seonghyeon's spine, his grip tightening reflexively on Keonho's thighs. "Still okay?" he managed, voice scraped raw.
Keonho nodded frantically, fingers digging into Seonghyeon's shoulders hard enough to leave crescent marks. His thighs quivered with the effort of staying spread, his breath coming in shallow gasps that hitched whenever Seonghyeon shifted even slightly. "Y-yeah, just—fuck—you're so big—" The complaint dissolved into a moan as Seonghyeon bottomed out, their hips flush, Keonho's body fully sheathing him for the first time.
Seonghyeon froze, sweat beading along his temples as he fought the urge to move. The heat surrounding him was unbearable—tight and wet and Keonho, his best friend, his secret obsession, gasping beneath him with tears clinging to his lashes. "You feel—" Seonghyeon broke off, swallowing hard. His thumb brushed a stray tear from Keonho's cheekbone, smearing it across flushed skin. "You're taking me so well."
Keonho's answering laugh was breathless, his hips shifting experimentally—just a tiny roll—and both of them groaned at the sensation. "I-I practised," he admitted, cheeks darkening further when Seonghyeon's eyes flashed. "For the streams. B-but it's different with you—oh—" His words fractured as Seonghyeon pulled back slightly, just enough to thrust back in with careful precision.
Keonho's nails raked down Seonghyeon's back as he arched beneath him, a sharp gasp escaping his lips with each slow thrust. The glide was slick, effortless—Keonho's body opening for him like it was made to, his thighs trembling where they bracketed Seonghyeon's hips. Seonghyeon could feel every flutter of Keonho's cunt around him, the way his muscles clenched rhythmically as if trying to pull him deeper.
"Faster," Keonho panted, his voice wrecked already, his hips lifting to meet Seonghyeon's movements. His fingers twisted in the sheets, knuckles white. "Please, I can—ah—I can take it."
Seonghyeon groaned, his forehead dropping to press against Keonho's. "You sure?" His voice was rough, strained with the effort of holding back. He could feel the way Keonho's breath hitched against his lips, the way his body tightened around him in response.
Keonho nodded frantically, his hips jerking up impatiently. "Yes, yes, just—fuck me—"
Seonghyeon's restraint snapped. He drove into Keonho hard enough to make the bedframe slam against the wall, swallowing Keonho's startled cry with his mouth. The angle shifted—deeper, rougher—and Keonho's back arched off the mattress, his fingernails scoring red trails down Seonghyeon's shoulders. "Ohgodrightthere—"
The broken syllables punched from Keonho's throat in time with each thrust, his legs hooking around Seonghyeon's waist to drag him closer. Seonghyeon could feel the moment Keonho's body stopped resisting and started chasing, his hips rolling up to meet every snap of Seonghyeon's pelvis with desperate precision.
"Look at you," Seonghyeon rasped, thumb brushing the swell of Keonho's lower lip. His other hand slid between their sweat-slick bodies, fingers finding Keonho's clit with unerring accuracy—just like in the videos, but real, trembling under his touch. "Taking me so well. Couldn't stop watching you—fuck—wanted this for so long—"
Keonho sobbed, his thighs clamping around Seonghyeon's hips as his orgasm hit—sudden and violent, his cunt fluttering around Seonghyeon's cock in rhythmic pulses. The sight alone nearly undid him: Keonho coming apart beneath him, tears streaking his flushed cheeks, his mouth open around silent pleas.
Seonghyeon watched, transfixed, as Keonho's body arched off the mattress—every muscle taut, his toes curling against Seonghyeon's lower back. The high, broken noise he made was nothing like the practised moans from his streams; this was raw, unfiltered, real. Seonghyeon's hips stuttered, his rhythm faltering as Keonho's cunt squeezed him tighter with each pulsing wave of his climax.
"Look at you," Seonghyeon gasped, thumb smearing the wetness between Keonho's thighs higher, rubbing circles into his oversensitive clit just to watch him twitch. Keonho whined, his hips jerking away instinctively, but Seonghyeon followed, relentless. "You came just from my cock—fuck, just like in your videos—"
Keonho's hands flew up to cover his face, his chest heaving. "S-Stop talking—" he choked out, but his legs trembled wider, inviting.
Seonghyeon didn't stop. He leaned down, pressing open-mouthed kisses along Keonho's sternum, tasting salt and sweat. "You wanted me to watch, didn't you?" he murmured against damp skin, thrusting shallowly to prolong the aftershocks. "All those times you touched yourself—thinking about me—"
Keonho's fingers scrambled against Seonghyeon's shoulders, blunt nails digging in as another shudder wracked his oversensitive body. "I didn't—" His protest dissolved into a gasp when Seonghyeon's hips rolled deeper, the angle shifting just enough to brush something that made his vision whiten at the edges. "Oh fuck, I didn't know it'd be you—"
Seonghyeon's laugh was dark, breathless. His teeth grazed Keonho's collarbone, leaving behind a reddening mark that would bloom purple by evening. "Liar." He punctuated the accusation with a sharp thrust that punched the air from Keonho's lungs. "The way you'd say my username—'thank you, UserHyeon'—fuck—like you knew exactly how to wreck me."
Keonho's thighs trembled violently around Seonghyeon's waist, his cunt fluttering with aftershocks that made Seonghyeon's rhythm stutter. The mattress creaked beneath them, sheets tangled around Keonho's ankles like restraints. "I didn't," Keonho insisted again, voice cracking when Seonghyeon's thumb found his clit once more. His hips jerked, oversensitive flesh twitching under the rough caress. "I just—ah—I liked the way it sounded—"
Seonghyeon's fingers tightened in Keonho's hair, tilting his head back to expose the frantic jump of his pulse. "Say it now." His voice dropped to a growl, hips snapping forward to emphasise the demand. "Say my name like you did on stream."
Keonho's breath hitched, his lips parting around a soundless gasp as Seonghyeon's thrusts turned erratic—deep, uneven snaps of his hips that left them both trembling. The drag of Seonghyeon's cock inside him was almost too much now, oversensitive flesh clenching around each desperate movement. "Say it," Seonghyeon demanded again, his voice cracking under the strain of holding back. His fingers tightened in Keonho's hair, pulling just enough to arch his throat in a way that made Keonho's pulse flutter visibly beneath his skin.
"Seonghyeon," Keonho whimpered—and it was nothing like the polished, breathy purr of his streams. This was raw, broken, his voice fraying at the edges as Seonghyeon's pace stuttered. The sound of his own name, wrecked beyond recognition, shattered whatever restraint Seonghyeon had left.
Heat coiled low in Seonghyeon's stomach, a tightness building until it was unbearable. His hips jerked forward one final time, burying himself to the hilt as his orgasm ripped through him, white-hot and blinding. Keonho gasped beneath him, fingers scrabbling at Seonghyeon's shoulders as he felt the first pulse of warmth deep inside. "Oh—oh," Keonho choked out, his thighs clamping around Seonghyeon's waist instinctively, as if he could keep him there forever.
Seonghyeon groaned, his forehead dropping against Keonho's collarbone as his body shuddered through the aftershocks. He could feel Keonho's cunt fluttering around him, still twitching with residual pleasure, milking every last drop from him. The sensation was almost too much—overwhelming in its intimacy, in the way Keonho's breath hitched each time Seonghyeon's hips gave another shallow thrust, chasing the last remnants of his climax.
Seonghyeon collapsed next to Keonho, his breathing ragged against sweat-slick skin.
Keonho's fingers trembled against Seonghyeon's chest, tracing the rapid rise and fall of his ribs as they both struggled to catch their breath. The air between them was thick with the scent of sex and sweat, the weight of what they'd just done pressing down on them harder than Seonghyeon's body had pressed into the mattress moments before.
"You—" Keonho's voice cracked as he turned his head, his nose brushing Seonghyeon's shoulder. "You really watched all of them?" The question was barely audible, muffled against damp skin, but Seonghyeon felt it like a physical touch.
"Every single one." Seonghyeon's hand found Keonho's hip beneath the tangled sheets, his thumb brushing the sharp bone there. "Even the—" He swallowed hard, the memory of Keonho writhing on screen, begging some faceless viewer for permission to come, making his pulse jump. "Especially the ones where you called out my name."
Keonho made a strangled noise, burying his face deeper against Seonghyeon's shoulder. "Oh my god," he groaned, the heat of his blush radiating against Seonghyeon's skin. "I hate you."
Seonghyeon's laugh rumbled through his chest, fingers tightening around Keonho's waist as he pulled him closer. Keonho's skin was still fever-hot against his own, every exhale shaky against his collarbone. "Liar," he murmured, lips brushing the damp curve of Keonho's ear. "You don't hate me when you're clenching around me like that."
"Shut up," Keonho hissed, but the effect was ruined by the way his breath hitched when Seonghyeon's cock slipped free, leaving him twitching at the sudden emptiness. A trickle of warmth slid down his thigh—Seonghyeon's release, already leaking out—and Keonho's stomach clenched at the visceral proof of what they'd done. His fingers scrabbled for the sheets to cover himself, but Seonghyeon caught his wrist mid-motion, pinning it to the mattress with effortless strength.
Seonghyeon propped himself up on one elbow, his gaze dark and intent as it tracked the slow drip of fluid down Keonho's inner thigh. His free hand followed the trail, fingertips smearing the wetness higher, dragging a choked whimper from Keonho's throat. "Don't hide," Seonghyeon murmured, his thumb brushing the swollen furl of Keonho's cunt, still flushed pink and sensitive from overstimulation. "I want to see."
Keonho's thighs trembled, his hips jerking involuntarily when Seonghyeon's fingers pressed deeper, gathering the mess he'd left behind. Seonghyeon brought his glistening fingers to his own mouth, tongue flicking out to taste Keonho's arousal mixed with his own release. The groan that followed was obscenely loud in the quiet room, Seonghyeon's eyelids fluttering at the flavour. "Fuck. You even taste sweet."
"You're so mean," Keonho whined, but the way his hips arched betrayed him. His fingers twisted in the sheets, knuckles whitening when Seonghyeon's thumb brushed his swollen clit once, twice, just enough to make his breath stutter. "A-aftercare first," he managed, voice cracking. "Then—then you can be gross again."
Seonghyeon chuckled, low and rough against Keonho's temple, but his fingers gentled immediately—sliding up to cradle Keonho's jaw instead, thumb brushing the delicate skin beneath his eye. "Okay," he murmured, softer now, his other arm looping around Keonho's waist to pull him flush against his chest. The sheets were tangled around their legs, sticky in places, but Seonghyeon didn't seem to care, nuzzling into Keonho's hair with a sigh that carried the weight of months—years—of pent-up want. "What do you need?"
Keonho hesitated, his fingers flexing against Seonghyeon's ribs. He'd never gotten this far in his fantasies, never let himself imagine the quiet after, where Seonghyeon's hands could be tender instead of demanding. "Water," he blurted, throat dry. "And... you."
Seonghyeon's breath hitched—just slightly—at the raw vulnerability in Keonho's voice. He pressed a kiss to the crown of Keonho's head before disentangling their limbs, the cold air hitting their sweat-slicked skin as he rolled off the mattress. Keonho made a small, wounded noise at the loss of contact, his fingers twitching toward Seonghyeon's retreating form like he wanted to pull him back.
The water bottle was half-crushed under a discarded hoodie near the foot of the bed. Seonghyeon snatched it up, twisting the cap off with one hand while his other smoothed over Keonho's trembling thigh. "Here." He tipped the bottle gently against Keonho's lips, watching the way his throat worked with each swallow, the way a stray droplet trailed down his chin. Seonghyeon caught it with his thumb, swiping it away before it could drip onto the sheets.
Keonho's lashes fluttered, his fingers curling around Seonghyeon's wrist to steady himself. "You're staring," he mumbled, cheeks flushing under the intensity of Seonghyeon's gaze.
"Yeah." Seonghyeon didn't deny it. He set the bottle aside and crawled back onto the bed, bracketing Keonho's hips with his knees. His palms slid up Keonho's ribs, mapping the rise and fall of his breath, the rapid flutter of his pulse beneath warm skin. "You're so fucking beautiful like this."
Keonho's breath hitched when Seonghyeon's fingers traced the sweat-damp curve of his waist, skimming higher to brush the peaked nubs of his nipples. The touch was featherlight, and it made Keonho squirm, oversensitive skin prickling with fresh heat. "Not fair," he mumbled, tilting his chin up in a silent demand for kisses. "You're supposed to be nice now."
Seonghyeon obliged easily, his mouth slanting over Keonho's with a tenderness that made his toes curl. The kiss was slow—nothing like the frantic clash of teeth from earlier—just the soft press of lipsand the faint taste of water lingering between them. Keonho sighed into it, his fingers threading through Seonghyeon's hair to keep him close, anchoring himself in the warmth of Seonghyeon's body above him.
"Better?" Seonghyeon murmured against his mouth, thumb brushing the damp corner of Keonho's eye where tears had smeared earlier.
Keonho nodded, but his grip tightened when Seonghyeon shifted like he might pull away. "More," he whispered, lips brushing Seonghyeon's with each syllable.
Seonghyeon huffed a laugh, but he didn't tease, just kissed him again, deeper this time, his tongue sliding against Keonho's in a lazy mimicry of what they'd done moments before. Keonho melted into it, his body arching off the mattress instinctively, seeking friction where their skin still touched.
Seonghyeon's fingers traced idle patterns down Keonho's spine, his touch featherlight where it skirted the reddened marks he'd left earlier. The room smelled like sex and the faint citrus of Keonho's shampoo, the air thick with the weight of everything unsaid between them. Keonho shivered when Seonghyeon's palm settled at the small of his back, pressing him closer until their foreheads touched.
"You okay?" Seonghyeon murmured. His thumb brushed the curve of Keonho's hip where the sheet had slipped low, exposing the fading imprint of his grip.
Keonho nodded, but his fingers tightened around Seonghyeon's wrist like he was afraid he'd vanish. "Just... thinking." His voice was small, the way it got when he was trying not to sound as vulnerable as he felt.
Seonghyeon exhaled through his nose, nudging Keonho's knee apart to slot their legs together. "About?"
Keonho's fingers traced the ridge of Seonghyeon's collarbone. "About how this could have been so much easier for both of us."
Seonghyeon's breath caught—half-laugh, half-sigh—as he pressed his forehead harder against Keonho's. The warmth between them was dizzying, skin still feverish where their bodies touched. "Easier?" His thumb brushed the dip of Keonho's waist, tracing the crescent marks left by his own nails. "You think I would've believed you if you'd just told me? 'Hey, by the way, I'm the cam boy you're obsessed with—'"
Keonho's knee jerked up, smacking Seonghyeon's thigh. "Shut up." His voice cracked, but the way his fingers curled into Seonghyeon's hair betrayed his embarrassment. "I tried hinting! You're just—" He huffed, the movement making their noses bump. "Dense."
"Dense?" Seonghyeon nipped at Keonho's lower lip, grinning when he yelped. "You filmed yourself moaning my username and called it hinting?"
The pillow hit Seonghyeon's face with surprising force. Keonho squirmed beneath him, his thighs clamping around Seonghyeon's hips instinctively. "I was flirting," he hissed, face burning. "You can ask any of our friends, and they'd agree with me."
Seonghyeon caught the pillow before it could smack him again, pinning Keonho's wrists to the mattress with a grin that bordered on smug. "Flirting," he repeated, dragging the word out like he was savouring it. "By moaning my username while fingering yourself on camera? That's your idea of subtle?" His thumbs brushed the delicate bones of Keonho's wrists, feeling the rabbit-quick pulse beneath his skin.
Keonho's breath hitched, but he lifted his chin defiantly. "Yes," he insisted, squirming under Seonghyeon's weight. "And it worked, didn't it? You're here." His voice wavered on the last word, vulnerability seeping through the bravado.
Seonghyeon's expression softened. He loosened his grip, fingers trailing down to lace with Keonho's. "Yeah," he admitted quietly. "I'm here." He ducked his head, pressing a kiss to the inside of Keonho's wrist where his pulse fluttered. "Still think you could've just told me, though."
Keonho exhaled sharply, his free hand tangling in the sheets. "And say what? ‘Hey, by the way, I'm not actually straight, and also I have a—'" He gestured vaguely between his legs, cheeks flushing. "—situation? And also, I've been in love with you since we met?" His voice cracked on the last syllable, and he turned his face away, suddenly fascinated by the wall.
Seonghyeon's breath stuttered. He caught Keonho's chin, tilting his face back with fingers that trembled—just slightly—against damp skin. "Say that again," he demanded, voice rough.
Keonho's lips parted, then pressed into a thin line. His lashes fluttered, refusing to meet Seonghyeon's gaze. "Which part?"
"All of it." Seonghyeon's thumb brushed Keonho's lower lip, smearing the words into his skin.
A beat of silence. Then—
Keonho's breath hitched—sharp and audible—as Seonghyeon's thumb pressed insistently against his bottom lip. The weight of the unspoken confession hung between them, thick as the sweat still cooling on their skin.
"You love me?" Seonghyeon's voice was raw, stripped of its usual teasing edge. His fingers tightened around Keonho's wrist, not enough to hurt, but enough to make the pulse beneath his fingertips leap.
Keonho squeezed his eyes shut, throat working around a swallow. "Obviously," he muttered, the word cracking halfway through. "Why else would I—" He gestured weakly between them, at the mess of sheets and the bite marks blooming along his collarbone. "—this?"
Seonghyeon exhaled—a shuddering, uneven thing—and dropped his forehead against Keonho's. His breath ghosted over Keonho's lips, warm and unsteady. "Fuck," he whispered, like the word had been punched out of him. "Say it properly."
Keonho's breath stuttered, his fingers tightening in Seonghyeon's hair. The sheets were sticky beneath him, the air thick with the scent of sex and something unbearably tender. "I love you," he whispered, voice fraying at the edges. "Even when you're—ah—" Seonghyeon's thumb pressed harder against his lip, smearing the words into silence.
Seonghyeon's laugh was rough, his hips rolling against Keonho's thigh in an instinctive grind. "Even when I'm what?" he prompted, teeth grazing Keonho's jaw.
"An asshole," Keonho gasped, arching when Seonghyeon's hand slid down to squeeze his hip. His skin was oversensitive, every touch electric, but he couldn't stop chasing it—couldn't stop pressing closer until their sweat-slick chests slid together.
Seonghyeon hummed, nosing along the column of Keonho's throat. "Say it again."
Keonho's breath hitched as Seonghyeon's teeth grazed the tender skin beneath his ear—a deliberate scrape that made his toes curl. "I hate you," he gasped, but the way his thighs fell open betrayed him. His fingers tangled in Seonghyeon's hair, tugging hard enough to make him groan.
"Liar." Seonghyeon's laughter vibrated against his pulse point, warm and rough. His palm slid up Keonho's inner thigh, pausing just shy of where he was still flushed and sticky. "Say it properly this time, or I stop."
The threat was empty—they both knew it—but Keonho whined anyway, hips jerking off the mattress. "Fine," he gritted out, cheeks burning. "I love you, you jerk—"
Seonghyeon kissed him before he could finish, swallowing the rest of the insult with a satisfied hum. His tongue swept into Keonho's mouth, slow and filthy, mapping the shape of his surrender. When he finally pulled back, Keonho was panting, lips swollen and damp.
"Now say it back," Keonho demanded, though a hint of vulnerability bled into his voice.
Seonghyeon's breath stuttered—a soft, broken sound—before he buried his face in the crook of Keonho's neck, lips pressed to the frantic pulse there. "I love you," he murmured, the words muffled against damp skin. "So fucking much it hurts." His teeth grazed Keonho's collarbone, not hard enough to mark, just enough to make him shiver. "Even when you're a brat."
Keonho's laugh was breathless, his fingers tightening in Seonghyeon's hair. "Prove it," he challenged, tilting his hips up in silent demand. The movement made Seonghyeon groan, his cock twitching where it lay heavy against Keonho's thigh.
"You're insatiable," Seonghyeon muttered, but his hands were already sliding down, thumbs brushing the sensitive crease of Keonho's thighs. He paused when Keonho flinched, oversensitive flesh still pink and swollen from earlier. "...Too much?"
Keonho shook his head, but his thighs trembled when Seonghyeon's fingers traced lower, skimming the slick mess between his legs. "Just be gentle," he breathed, arching into the touch. "Please, I want you inside again."
Seonghyeon's fingers stilled at Keonho's plea, his breath hitching as he took in the flushed, wrecked state of him—the way his cunt still glistened with their shared mess, the way his thighs trembled at even the lightest touch. "You sure?" he murmured, thumb brushing featherlight over Keonho's swollen clit, grinning when he jolted. "You're sensitive."
Keonho whined, hips jerking off the mattress. "Yes, I'm sure—fuck—" His voice cracked as Seonghyeon's fingers dipped lower, teasing his entrance with slow, maddening circles. "No, no, no—don't tease, I won't last—just put it in."
Seonghyeon chuckled at Keonho's impatience, his fingers still tracing lazy circles around his entrance, deliberately avoiding the pressure Keonho was desperately seeking. "You say that like I didn't just fuck you senseless ten minutes ago," he murmured, leaning down to nip at Keonho's earlobe. "What's the rush?"
Keonho's fingers dug into Seonghyeon's shoulders, his breath coming in ragged bursts. "Because I want you," he gasped, thighs shaking as Seonghyeon's thumb brushed his clit again—light enough to tease, not enough to satisfy. "Please, I want to feel you in so badly—you can skip the fingers, please—"
Seonghyeon exhaled through his nose, watching the way Keonho's lashes fluttered when he nudged the blunt head of his cock to his entrance. "Skip the fingers?" he repeated, slipping it between his folds just enough to make Keonho gasp.
Keonho's hips jerked forward instinctively, seeking friction, but Seonghyeon held him down with a firm grip on his waist. "Ah—don't—just fuck me already," Keonho whined, his voice cracking on the last word. His thighs trembled, still slick with sweat and cum, his cunt clenching around nothing as Seonghyeon teased him with the barest pressure.
Seonghyeon's breath hitched, his control fraying at the edges as he watched Keonho unravel beneath him. "You're impatient," he murmured, dragging the head of his cock through Keonho's folds, smearing the wetness between them. "What happened to ‘be gentle'?"
Keonho's fingers clawed at Seonghyeon's back, his nails leaving faint crescents in their wake. "I changed my mind," he gasped, arching off the mattress when Seonghyeon's thumb brushed his clit again. "Please—I can't—fuck—"
Seonghyeon relented with a groan, sliding into him in one slow, relentless push. Keonho's breath stuttered, his body stretching around Seonghyeon's cock, still loose from earlier but sensitive enough to make his toes curl. "God—you're so tight," Seonghyeon gritted out, hips rolling forward until their bodies were flush.
Keonho's back arched off the mattress, a ragged cry tearing from his throat as Seonghyeon bottomed out inside him. His thighs trembled with the effort of staying still, every nerve ending alight with oversensitive pleasure. "M-move," he gasped, fingers scrabbling against Seonghyeon's sweat-slick shoulders. "Please, please—"
Seonghyeon groaned, forehead dropping to press against Keonho's as he began to move—slow, deliberate thrusts that had Keonho seeing stars. The slide was effortless, their bodies still slick, but the drag of Seonghyeon's cock against his oversensitive walls made Keonho whimper with every movement. "Fuck," Seonghyeon muttered, his breath hot against Keonho's lips. "You're clenching around me like you don't want me to pull out."
Keonho's breath hitched—sharp and ragged—as Seonghyeon's hips rolled against his, the slow, deep thrusts dragging a broken whine from his throat. His thighs trembled where they bracketed Seonghyeon's waist, toes curling into the rumpled sheets. "I don't," he gasped, fingers clutching at Seonghyeon's shoulders like he might vanish if Keonho let go. "Fuck, don't stop—"
Seonghyeon growled low in his throat, his hands sliding down to grip Keonho's hips, fingers digging into the soft flesh there. "You feel too good," he muttered, teeth grazing Keonho's collarbone as he snapped his hips forward harder, wrenching a startled cry from Keonho's lips. "Gonna make you come again—just like this—"
Keonho's head thrashed against the pillow, his nails scraping down Seonghyeon's back as his cock hit that spot inside him—the one that made his vision whiten at the edges. "Ah—ah—there—" His voice cracked, hips jerking up to meet Seonghyeon's thrusts, desperate for more friction, more pressure, more—
Seonghyeon's rhythm faltered, his breath coming in ragged bursts as Keonho clenched around him, his cunt pulsing tight and wet with every thrust. "Fuck—fuck—you're gonna make me—" He barely got the words out before Keonho's thighs tightened around his waist, his back arching off the mattress as his orgasm crashed over him with a broken sob.
Seonghyeon groaned, hips stuttering as Keonho's cunt squeezed around him in rhythmic pulses, the wet heat dragging him over the edge with a hoarse cry. He buried his face in Keonho's neck, teeth scraping skin as he spilled inside him, his thrusts slowing to shallow, uneven rolls that drew whimpers from Keonho's oversensitive body.
When Seonghyeon finally lifted his head, Keonho was staring up at him with dazed, half-lidded eyes, his lips parted around ragged breaths. "You—ah—you're still inside," he slurred, thighs trembling where they bracketed Seonghyeon's hips.
Seonghyeon smirked, grinding his hips just enough to make Keonho's breath hitch. "Problem?" His thumb brushed the tears clinging to Keonho's lashes, smearing them across flushed cheeks.
Keonho whined, his fingers flexing against Seonghyeon's shoulders. "Sensitive," he protested weakly, but his hips tilted up instinctively, seeking friction even as his body shuddered with oversensitivity.
Seonghyeon chuckled, pressing a kiss to Keonho's damp temple before reluctantly pulling out, both of them wincing at the slick, messy sound. Keonho's thighs fell open bonelessly, his chest rising and falling in uneven hitches as Seonghyeon traced the flushed, swollen skin between his legs with reverent fingertips. "Look at you," he murmured, thumb brushing over Keonho's oversensitive clit just to watch him jerk and whimper. "Ruined."
Keonho kicked weakly at his shoulder, but his legs were trembling too much to muster any real force. "Shut up," he mumbled, dragging an arm over his eyes to hide the way his cheeks flushed darker. "You're the one who—ah—" His complaint dissolved into a gasp as Seonghyeon's fingers slid lower, smearing their mingled release back into his twitching entrance.
"Who what?" Seonghyeon prompted, grinning when Keonho's hips twitched up into the touch despite his protests. His fingers pressed in shallowly, just enough to make Keonho's breath stutter, before withdrawing to drag sticky-wet trails up his inner thighs. "Tell me."
Keonho's fingers curled into the sheets, his voice fraying at the edges. "Who fucked me stupid," he admitted, swallowing hard when Seonghyeon's thumb circled his clit again, slow and teasing. "Stop—I can't—fuck—"
Keonho's protest dissolved into a whine as Seonghyeon's thumb pressed harder against his clit, the slow circles just shy of unbearable. His thighs trembled, still spread wide where Seonghyeon had left them, oversensitive and slick. "I can't go again," he gasped.
Seonghyeon chuckled, relenting only to press a kiss to the inside of Keonho's trembling thigh. "Liar," he murmured, lips brushing damp skin. "You could, but I'll be nice."
