Chapter Text

1
Yeosang was five when a new family moved in next door.
He sat on the front porch, carefully tracing the outline of a small bird in his sketchbook, the warm Melburnian sun casting soft shadows on the page, the smell of eucalyptus drifting in with the breeze.
His dad waved cheerfully over at the new neighbours unloading a trailer full of boxes while Yeosang avoided making eye contact with any of the unfamiliar people.
“They’ve got a boy around your age,” his mum had said later, like that’s supposed to be a gift.
Yeosang frowned into his juice cup. He’d already made peace with solitude. Quiet was better than company. Drawing was peaceful — the gentle scratch of pencil on paper, the quiet chorus of birds overhead, the jacaranda shedding purple confetti onto his shoes.
He liked order, like the precise curves of the feathers he was sketching, and had no interest in sharing his space. He liked things quiet.
He didn’t need a boy his age. He already had pencils in every colour and a personal collection of interesting rocks.
So, when a few days later when the house next door throbbed with party music and the smell of too many sausage rolls, Yeosang stayed firmly on his side of the yard, colouring the tips of the galah’s feathers a slightly incorrect but still respectable blue.
That’s when he arrived.
“HEY!”
Yeosang looked up.
A kid about his size stood just beyond the fence, hair sticking up like he’d just woken up in a tornado. He was wearing a lopsided party hat and holding two cupcakes, both clearly meant for himself.
“I’m San!” the boy announced, through a mouthful of icing. “You wanna see our trampoline?”
Yeosang blinked. “No.”
San handed him the spare cupcake anyway. It had a little sugar star on top.
From the patio, Yeosang’s mum appeared with the smile she used when she was being very patient. “Be nice, Yeosang.”
“Yeosang,” his mum warned from the adjacent backyard, arms folded. “Be nice to San.”
Then she was gone, sucked back into the chaos of the housewarming party where everyone is laughing too loud and smelling like sunscreen and wine.
Yeosang hated parties.
San agreed. For now.
Yeosang would find out later that San will grow into the sort of person who invented excuses to throw barbecues, who befriended DJs, who learned how to sabre champagne. While Yeosang would remain the guy who sat in the corner sipping his beer as he judged everyone’s music choices.
But that’s much later.
Yeosang peeled the wrapper off the cupcake. It was sticky. San was already climbing over the fence.
He landed with a thump, smearing chocolate frosting on his shorts.
Yeosang scooted over, protectively curling around his sketchbook.
“What’s that?” San asked, peering down.
“A galah,” Yeosang muttered.
“It looks mad.”
“It is mad,” Yeosang said, a little pleased.
San plopped down beside him with the messy confidence of someone who never thought about consequences.
“I tried to draw a cat once,” San announced suddenly, kicking at a clump of grass. “But it looked like a potato. With legs.”
Yeosang didn’t look up. He carefully traced a feather on his galah’s wing. “Okay.”
“It had whiskers. But I drew them coming out of its forehead. And the tail was also a snake.”
Yeosang blinked. “Why was it a snake?”
San shrugged, unfazed. “I thought it looked cool.”
Silence. Birds chirped. A fly buzzed past.
“Mum still put it on the fridge,” San added proudly. “Right next to the macaroni snail I made. Except it broke and now it’s just macaroni.”
Yeosang adjusted another truck. “Sounds like your fridge is a mess.”
San grinned, gap-toothed. “Yeah. It’s art.”
Yeosang glanced at him. Briefly. Then back to his trucks. “You’re weird.”
“Thanks,” San chirped, as if it were a compliment.
Yeosang decided that San was good enough company for now.
They sat for a bit, chewing quietly, letting the grown-up noises fade into the background. Somewhere, someone dropped a plate. Someone else cheered. A dog barked exactly four times.
San leaned over. “If I pretend I’m asleep, d’you think they’ll stop the party?”
Yeosang shook his head. “They’d just take funny pictures of you.”
San sighed. “Figures.”
They finished their cupcakes. San licked the icing off his fingers and wiped the rest on his shirt.
Yeosang eyed him sideways. “You’re four, huh?”
San grinned, gap-toothed. “Yeah?”
“I’m five,” Yeosang said, smugly. “I’m basically in charge.”
San’s face went pink with indignation. “I turn five next month!” he huffed. “I’m practically already five!”
Yeosang hummed, clearly unimpressed. “Still four today, though.”
San crossed his arms and pouted, the tiniest storm cloud. “Well, when I’m six, you’ll be seven, so it won’t even matter!”
Yeosang considered this advanced math and decided it’s fair enough.
Eventually, the trucks lose their charm, and their eyes drifted upward — to the giant tree looming at the edge of the backyard. A smooth-barked gum with twisted limbs and dreams of being conquered.
“We should climb it,” San declared, standing dramatically. “And build a tree house, it’ll be our secret base!”
“You’re too small,” Yeosang replied, sizing him up.
“I’m fast,” San argued, despite being visibly out of breath from standing up too quickly.
They engineered a plan that involved stacking an empty planter, a bucket, and a squashed bean bag. San gave it a go. He hopped. He scrambled. He slapped at the bark.
Two buttons flew off his shirt in quick succession. One pinged off a pot. The other vanished forever into the hedge.
San didn’t care. He jumped again — and fell.
He landed hard on his bum, a comical oof escaping his lips before he went very still. Then his lower lip trembled. The tears came fast and hot, silently at first, then with a high, warbly hiccup.
Yeosang choked midway on his laugh when he saw the cut. Not the scratchy ones on San’s chest from the tree bark, but a single clean slice across his finger. It was already welling red.
“Come with me,” Yeosang said, suddenly full of purpose.
He grabbed San’s hand — careful, like he was handling glass — and led him into the house. Through the back door, past the smell of meat pies and chatter, into the kitchen where the light was soft and golden.
Yeosang clambered onto the stool and retrieved the first-aid box from the cupboard above the sink. He spread out the band-aids on the table like rare treasures.
They studied the band-aids like scholars. Dinosaurs. Spaceships. A disturbingly cheerful sun.
But San’s eyes settled on a simple white one with a small, smug-looking cat in the corner.
“That one,” he said, wiping his nose with the sleeve of his now-buttonless shirt.
Yeosang nodded. He turned on the tap and gently held San’s finger beneath it.
“Cold water gets the dirt out,” he explained. “And the sting’s just the monsters dying.”
San gasped. “There’s monsters?”
“Tiny ones. Germs. My mum said they tried to build houses in your blood.”
San’s face screwed up with horror. “Yuck.”
Yeosang patted his hand dry with a tea towel and carefully wrapped the cat band-aid around the wound. He pressed the edges flat and smoothed it twice, even after it was perfectly in place.
They examined the band-aid together.
The cat stared back smugly, as if it knew it had done a good job.
San was very quiet. Then, in the softest voice: “You saved my life.”
Yeosang glanced up.
San’s cheeks were pink and tear-streaked. He looked embarrassed to be crying, but proud of the band-aid.
“You’re m’hero.”
Yeosang felt something warm and fluttery settle behind his ribs. It was soft, like brownie batter and warm sun. He decided he didn't mind San climbing over the fence after all.
Before Yeosang could say anything, San leaned in and planted a kiss on his cheek — quick, sticky, and a little wet.
Yeosang froze.
His face burned. But he didn’t wipe it away.
San hid his face in Yeosang’s shoulder. The kiss still tingled on his cheek.
When the adults eventually found them — half-panicked, half-scolding — they were sitting cross-legged beneath the kitchen table, band-aid wrappers scattered like confetti.
San's cheek was sticky from his tears, and his kiss had left a damp, tiny mark on Yeosang’s skin. Yeosang didn’t rub it off.
He held San’s uninjured hand tighter and thought, quietly, that heroes probably got in trouble a lot. But that was okay.
2
San had always believed he was destined for greatness — or at least a heroic death. Something involving dragons, or an alien invasion, or being the youngest person ever to eat fifty marshmallows in one sitting.
Instead, it was a heat rash that got him.
The betrayal was immense.
“I'm dying,” San announced, voice hoarse with imagined doom, eyes watery and red from all the rubbing.
He clutched the top of his blanket like a shroud and wriggled dramatically against the pillows stacked behind him, as if being six and afflicted with heat rash were the gravest fate known to mankind.
Yeosang, ten and very much aware that San was not dying, hummed noncommittally and continued scribbling out his math homework at the foot of the bed. “Tell me where to send the flowers,” he muttered under his breath as he noted six times seven in his workbook.
He was halfway through memorizing the seven times table and was determined not to be distracted. Again.
“It’s not fair,” San sniffled. “My skin’s on fire. It feels like — like ants were living in my shirt.”
“It’s just heat rash,” Yeosang replied without looking up, tongue poking out of the corner of his mouth as he wrote down seven times five. “You get it in summer. You were running around in the sun without a hat again, weren’t you?”
San said nothing. Which was, of course, a confession.
Yeosang sighed. He wanted to get this done quickly. Jamie Zhou from class 5B got full marks on last week’s pop quiz and wouldn’t stop bragging about it.
Yeosang had been gunning to beat him ever since — not that he would admit it out loud. Jamie was good at maths, sure, but Yeosang was better. He just needed more practice.
Ten minutes later, the shuffling and huffing resumed. San groaned dramatically and tossed his blanket off with a whoosh, only to whimper when the ceiling fan blew on his flushed skin.
“Sangaaah,” he moaned, drawing out the name like a deathbed wish. “I’m itchy. And bored. And still dying. And Mum’s pink cream smells like expired strawberry yoghurt.”
Yeosang sighed again, pinching the bridge of his nose like he's forty-five. “You're not gonna die, San. You're just being annoying.”
“I’m sick,” San countered, voice wobbling with betrayal. “You’re supposed to love me.”
Yeosang ignored him. For about three seconds.
Then San tugged on the back of his collar. Hard. Like a drowning man grabbing a lifeline.
Yeosang clenched his pencil and counted to five through his nose. No one should ever yell at a sick person, not even one with a flair for theatrics and damp eyebrows.
With a long-suffering sigh that’s far too dramatic for a ten-year-old, Yeosang tossed his homework into his backpack. He muttered something under his breath about Jamie having no soul, and clambered onto the bed.
San immediately curled into him like a koala, soft and sticky and miserable. His skin was blotchy and warm under his oversized t-shirt, and his cheeks were puffed out like he’s storing acorns.
Yeosang patted him on the back. “Are you going to sleep now? Like your mum said?”
San pressed his face against Yeosang’s shirt and shook his head. “Don’t wanna.”
“You’re tired.”
“What if I don’t wake up?” San whispered, like it’s the biggest, scariest question in the world.
Yeosang didn't know what to say to that. The words felt too big, too important for an eleven-year-old to carry. So instead, he pressed a hand to the top of San’s head and said firmly, “Then I’ll wake you up. Promise.”
San sniffed. “Okay.”
He asked, breathing warm against Yeosang’s shoulder. “Would you miss me?”
Yeosang shifted, uncomfortable, not with the question but with how serious it sounded. The honest answer felt too heavy to speak aloud — that sometimes when San wasn't around, the world felt a little greyer. That doing homework alone wasn't the same. That he'd started saving the interesting rocks he found to show San later, even though he used to keep them all for himself.
San was... San was everywhere. In the morning when Yeosang's mum asked if he wanted to invite “his friend” over for breakfast. In the gaps between homework problems when Yeosang's mind wandered. In the space beside him that felt wrong when it was empty.
“Yeah,” he said after a beat, and it came out quieter than he meant it to. “Duh.”
San hummed and curled in tighter, a faint eucalyptus scent from his chest rub drifting up between them. “You sell like maths and disappointment,” he murmured, half-asleep.
“And you smell like a grandma’s handbag.”
They laid there in silence for a moment, the fan ticking softly overhead. Then:
“You’re gonna beat Jamie anyway, you know,” San mumbled, voice muffled against Yeosang’s chest.
Yeosang blinked, caught off-guard. “…I wasn’t even thinking about Jamie.”
“You were totally thinking about Jamie.”
Yeosang frowned. “He’s just annoying.”
“You're more annoying. But smarter,” San said wisely. “You’re probably the smartest kid in our whole year.”
Yeosang lifted an eyebrow. “Probably?”
“Okay, definitely,” San amended grandly. “But don’t let it go to your head or you’ll turn into a Jamie.”
Yeosang laughed — quietly, carefully — and shifted them both until they were lying back-to-back in a tangle of sheets, limbs, and heat-flushed cheeks. After a moment, he started mumbling the times table under his breath — a soft, sleepy chant from one to ten.
San made a soft, whimpery noise and clutched the hem of Yeosang’s jumper like it’s a lifeline. Somewhere during the six times table, Yeosang’s hand found San’s messy curls and stroked them absently. The gesture was instinctive — something he wouldn’t admit to even under torture.
By eight times two, he was drifting. San’s cheek was squished against his ribcage, one little arm tucked under Yeosang’s shirt like a sleepy octopus, already snoring softly.
San’s mum found them like that an hour later, tangled up in faded blue bedsheets and smelling like summer heat and lavender talc. She snapped a quick photo on her phone, heart full.
That photo would end up framed on their living room wall after the boys move in together, and it’d be proudly shown again during their joint eighteenth birthday party — then once more, projected larger-than-life behind them at their wedding reception, where San would lean over, kiss Yeosang’s cheek, and whisper, “Told you I was dying.”
But for now, they slumbered on, Yeosang’s cheek pressed against San’s sweaty hair, the room quiet except for the distant sound of the evening news and the soft hum of a desk fan spinning lazily in the corner.
3
Yeosang’s pencil hovered over question seventeen. Binary logic gates. Easy stuff. If A equals 1 and B equals 0, then —
Ping.
The sound was subtle, a faint vibration from inside his blazer pocket, but it hit him like a jolt. Phones weren’t even allowed in mock exams, and his was on silent, but the faint buzz still rattled him like a warning siren.
He glanced sideways at Mrs. Saunders.
No movement. The terrifying head of Computer Science was perched at her desk like a gargoyle with a coffee addiction, flipping through a folder with the solemnity of a judge in a capital trial.
Yeosang slowly, cautiously, slid one hand into his pocket and peeked at his screen.
One message from San.
It's Kyungmi. I need you.
That was all it took. Yeosang’s stomach dropped. No emoji, no “lol”, no string of chaotic exclamation marks — just a short, plain text, enough to make his fingers tremble and his ears ring.
He didn’t even finish reading the logic gate question. His pencil clattered onto the desk as he started packing up his things, breath shallow, movements jerky.
San needed him. Nothing else existed after that.
From beside him, Sierra Davis glanced up. “Uh, hey,” she whispered, a little amused, a little confused. “What are you doing?”
Yeosang zipped up his bag with shaky hands. “I have to go.”
“During a mock?” she asked, brows high. “You’ll get, like, six demerit points. Minimum. Saunders will eat you alive.”
Yeosang stood. “Worth it.”
Sierra blinked. “Are you okay? Did someone die or —”
“I’m fine,” he said quickly. Too quickly.
Yeosang made for the door.
“You’re seriously leaving?!”
“I have to,” he whispered harshly.
Sierra reached out, catching his sleeve. “Over what? A text? What could possibly —”
Then, with the tragic timing of someone who'd just flushed all his social momentum down the toilet, he snapped: “JUST DROP IT, SIERRA.”
The classroom went dead silent.
Mrs. Saunders looked up from her mug of judgment. A single eyebrow arched. Someone in the back gasped like it was a soap opera.
Yeosang froze for half a second. He hadn’t meant to yell. Or use her name like a scolding dad. But his brain was in freefall and his mouth had apparently taken over emergency operations.
Sierra's face fell, and something in Yeosang's chest twisted. Three months of careful friendship, of exchanging physics notes and library duty laughs — incinerated. But his legs were already moving toward the door.
“Mr. Kang, we are in the middle of a mock, sit down —!”
“I need to leave,” Yeosang said in a voice that cracked midway through, already reaching for the door. “It’s—it’s personal. Emergency.”
“Mr. Kang,” Mrs. Saunders began, slowly rising from her chair like an ancient cryptid awakening from slumber, “if you set foot outside this classroom —”
But Yeosang was already gone.
He burst into the corridor like a kid fleeing a haunted house, shoes squeaking, backpack thumping. His heart was pounding for reasons that had nothing to do with cardio (which, by the way, he avoided at all costs—Yeosang was not a runner, he was a walker with intentions).
Behind him, Mrs. Saunders' voice echoed faintly. “YEOSANG KANG, YOU GET BACK HERE—”
No chance.
“KANG!”
Yeosang skidded around a corner just in time to spot the Discipline Master himself, Mr. Aldridge, materializing like a vengeful storm cloud from the geography corridor.
“I SAID STOP RUNNING!”
Yeosang didn’t stop. His legs moved of their own accord — panic-induced, noodle-legged propulsion. If he was going to get tackled by a man who wore his lanyard like a badge of honour, then so be it. He needed to get to San.
Behind him: the thunderous clomp of loafers and the unmistakable wrath of white male authority.
Inside him: a deep, gut-churning oh god I yelled at Sierra Davis.
Because of course she heard it. Everyone heard it. She probably thought he was a psycho. Or worse — rude.
The long game was ruined.
The game that started months ago when she recommended him an anime in passing (ReLIFE — solid choice). The one where he let her borrow his manga, and she laughed at his jokes (kind of), and he decided to become the quiet, thoughtful, slightly mysterious guy who makes you playlists and knows when you’re faking a smile.
That was the plan.
His long game. His perfect strategy. The slow-build friendship, the anime recs, the laughs during library duty. And he had just detonated it. All blown to smithereens in two seconds flat.
But none of that mattered because then his phone buzzed again in his pocket, and the panic came rushing back in.
San came first.
All that flashed through his head was San. His best friend. His person. The only human being on Earth who knew all the lyrics to Yeosang’s shamefully long K-drama playlist and didn’t judge him for crying during Tangled. If San needed him, then nothing else mattered. Not exams. Not detentions. Not crushes.
San needed him.
And Yeosang would blow up every friendship, academic record, and anime-fuelled crush he had if it meant getting to him faster.
Behind him, Mr. Aldridge was wheezing.
Yeosang smirked grimly. He might not be a track star, but panic had one hell of a sprint boost.
And because the universe had a sense of humour, one of his shoelaces had come undone — flapping wildly with every stride like a deranged ribbon — and he nearly ate pavement dirt right in front of a gaggle of Year 7s gathered near the vending machines.
“Go, Yeosang!” one of them shrieked like he’s in a Netflix movie. Another hummed the Chariots of Fire theme. Kids these days had no respect for their seniors.
Yeosang nearly flipped them off.
Instead, he vaulted past, red-faced and slightly wheezing, and told himself he’ll die of second-hand embarrassment before the discipline master ever caught him.
Thanks to lean legs and the coffee coursing through his veins — the yelling started to fade behind him.
That man could project, but he couldn’t run for shit.
Still, it’s not like Yeosang was going to blend into a crowd anytime soon; his summer dye job hadn’t entirely faded yet, so he was still stuck with faint honey-blond curls that acted like a flashing beacon of rebellion.
He rounded the corner and bolted into the entrance lounge.
“— I told you; I’m not leaving without Yeosang!” San was yelling at Ms. Miura, the school’s long-suffering receptionist. His face was blotchy, shiny with tears and snot, shoulders heaving with every breath. He looked like a pissed-off kitten about to claw someone’s face off.
“Hey, I’m here,” Yeosang panted out, and before he could even finish, San barrelled into him. The air whooshed out of Yeosang’s lungs like a popped balloon.
“I knew you’d come,” San sobbed, flinging himself into Yeosang’s arms. “I told Ms. Miura you’re like the main character of a manga.”
Yeosang stumbled back a step under the force of it, clutching San tightly as he huffed, “I'm here, okay. Let’s go.”
Ms. Miura ushered them into the waiting taxi, looking like she wanted to cry too. “I’ll talk to your teachers, Yeosang. And your coach. You’re not off the hook,” she warned, though her voice was gentler than usual. “But I’ll see what I can do.”
“Stop that boy!”
“And him too,” she added with a grim smile as she slammed the door shut, blocking out the very red-faced discipline master in mid-charge.
Yeosang flashed her a sheepish, grateful look as the cab pulled away.
He’ll probably still get chewed out, but if anyone could convince Mr. Aldridge to reduce his punishment to something less life-ruining, it’d the woman he’d been nursing a crush on for five years. Bless her.
Hope Ms. Miura puts in a good word, he thought darkly, or I’m cleaning algae out of the bio pond until graduation.
San curled into himself as the car sped toward the hospital, his face blotchy and wet, fingers white-knuckling his phone. His thumb kept flicking the fraying edge of his jumper sleeve like he was trying to keep grounded.
Every few seconds, he muttered under his breath — Yeosang recognized the words. “Breathe in, breathe out, like mum says. No storm lasts forever.” His voice cracked halfway through the second repetition.
The weight of the situation started to sink in as the car winded through the suburbs.
Kyungmi was at the hospital.
San’s older sister. The same Kyungmi who used to bake them cookies after school, even when they forgot to do the dishes. The same Kyungmi who ran interference every time one of their pranks went too far, who stood between them and every frustrated parent-teacher conference with a calm voice and innocent smile. Kind to a fault, always putting herself second.
Yeosang swallowed the lump in his throat and reached across the seat to quietly tug San’s school bag out of his lap, setting it beside his own. He didn’t say anything. He never did, not when San is like this.
That was the rule between them: when one falls apart, the other carries the weight.
They got to the hospital in a blur of antiseptic and fluorescent lights.
Kyungmi had taken a bad fall down the stairs earlier that afternoon. A back injury, concussion, maybe worse. The words still didn’t feel real.
When they finally reached the ward, San took off like a bullet fired. He disappeared into the room, voice cracking into sobs as he flung himself at Kyungmi’s side.
Yeosang let him go. He hung back outside the door, heart pounding, hands jammed in his jacket pockets. The waiting was the worst part.
Mr. Choi showed up with a cup of awful hospital coffee, and Yeosang accepted it like it’s a peace offering from the gods.
He didn’t sit, not right away. He paced. Sipped. Waited.
Through the small window in the door, he could see San hunched over Kyungmi's bed, his shoulders shaking. Kyungmi's hand — pale against the white sheets — curled tightly in his own.
Yeosang's chest tightened.
Yeosang remembered when they were eight and Kyungmi pulled them both out of trouble for flooding the kitchen with dish soap. Or when they were twelve and tried to sneak out to the arcade, and she covered for them so hard their parents believed she’d invented a new science project just to keep them busy.
Yeosang remembered being twelve, remembered Kyungmi standing between them and San's furious mother after they'd tracked mud through the house. “It was my idea,” she'd taken the blame smoothly, “I asked them to help me with some gardening.” The lie had been so effortless, so protective, that Yeosang had wanted to hug her.
Now she was the one who needed protecting, and there was nothing he could do but wait.
Kyungmi wasn’t supposed to be in a hospital bed. She was the one who’d stand in front of San like a human shield when things got bad at home. The one who slipped Yeosang extra snacks when he forgot his lunch. The one who always laughed at their dumb inside jokes even when she was clearly too old to care.
Kyungmi always had their backs. Seeing her in that bed, quiet and pale, rattled something deep inside.
She wasn’t supposed to break.
When the doctor finally stepped into the ward and said, “She’s stable. She’ll wake up soon,” San let out a sound that’s part laugh, part sob. He flung himself into Kyungmi’s arms, crying so hard his knees nearly buckled.
And even in that moment, even with his sister out of any possible danger and relief crashing through him, San’s hand stretched blindly behind him, reaching back toward the doorway.
Toward Yeosang.
Yeosang crossed the room in two steps and pressed their fingers together. It was the smallest thing, but it seemed to anchor San instantly.
They stayed at the hospital long after visiting hours, waiting for San’s parents to finish signing paperwork and asking questions. Eventually, the two boys ended up sitting outside Kyungmi’s ward, backs against a cold wall, exhaustion settling like dust.
Yeosang glanced sideways and blinked.
They’re sitting so close their shoulders are practically fused — and now that he’s really noticing, San had grown. He used to be shorter. Yeosang remembered teasing him about it once, smug and four centimetres taller.
But now?
They were almost the same height.
San leaned so far into Yeosang that Yeosang had to shift his weight to keep them from toppling sideways entirely.
“You’re heavy,” he muttered, but there was no real bite in it.
His thumb brushed over San’s knuckles once. Then again.
San sighed, quiet and shaky. “I’m glad you’re here.”
Yeosang didn’t answer.
He just leaned his head against San’s,
Yeosang’s never been more sure of where he’s meant to be, than in that moment.
4
The night had been going surprisingly well — for once.
Hongjoong and Seonghwa had bickered over pizza toppings like an old married couple, Mingi’s terrible Spotify playlist had been tolerated with only minor grumbling, and the birthday cake hadn’t caught fire despite Jongho trying to flambé the icing.
Their tiny apartment was glowing with soft light, the air full of citrusy-sweet candle smoke, the kind that clung to sweaters and made everything feel warm.
There were paper streamers draped off their thrifted bookshelf, a few half-deflated balloons on the floor, and an abandoned party hat perched atop a framed childhood photo of San and Yeosang in matching overalls, mid-scream on a rollercoaster.
It was dumb. It was cozy. It was home.
And then Camden opened his mouth and cracked the night wide open.
Yeosang had never liked Camden.
He couldn't put his finger on why—Camden was objectively fine. Polite to their friends. Successful. Good-looking in that boring, symmetrical way. He said the right things at parties, laughed at the right jokes, knew how to work a room.
But something about the way he looked at San bothered Yeosang. Like San was a trophy. A novelty. Something to show off at parties and then put away.
Or maybe Yeosang just didn't like sharing.
That thought had been coming up more often lately, unwelcome and confusing. He'd shoved it down, the way he shoved down most things he didn't want to examine. Told himself it was just protectiveness. San was his best friend. Of course he'd be cautious about who San dated.
That was normal.
Right?
The birthday party was already in full swing. Too many people crammed into their apartment, the bass from the Bluetooth speaker rattling the windows and someone had already knocked over a lamp.
Yeosang posted up near the kitchen with a beer he didn't really want, watching the crowd.
And San —
San was across the room with Camden, laughing at something Jongho said. He looked good. Happy. The kitchen light caught his profile just right, and for a moment Yeosang forgot to look away.
Then Camden's hand settled on San's lower back, possessive and casual, and something hot and ugly twisted in Yeosang's chest.
Camden wasn't even looking at San. He was checking his phone, thumb scrolling, barely present while San's whole face was lit up with genuine joy.
Yeosang turned away, headed for another drink, told himself he needed air. Told himself that's all it was.
The hallway was only half-lit, tucked off from the main room where the party had wound down to soft music and sleepy conversation. Yeosang had gone to get another drink from the kitchen when he heard the tone first — sharp, bored, a little cruel.
Camden stood in the doorway to San's bedroom, one hand sloppily tucked into his jacket pocket, the other gesturing lazily like San's feelings were something to be swept aside.
“You're just too clingy, San,” Camden said, his voice loud enough to carry now. “It's exhausting. I can't breathe with you hovering. It's like dating a lost puppy.”
Yeosang stopped.
San didn't say anything at first. Just stood there with his mouth slightly parted, eyes blinking fast like he was trying to keep the tears from winning. It was his default defense — freeze, absorb, try not to make it worse.
He was wearing the stupid party crown Hongjoong had shoved on his head earlier, now slightly askew. It made him look so young again. Too young for this.
And suddenly, Yeosang was thirteen again, standing behind the school gym, fists clenched, while San wiped at his eyes because someone had called him “too much” for crying over a baby bird that had fallen out of a nest.
Camden was mid-eye roll, sneering out something else — “I'm doing you a favour, hones—”
Yeosang didn't even remember moving. Just the dull crack of his fist connecting with Camden's face. A sickening pop, sharp and final, as cartilage gave under bone. The jolt up his arm was like lightning, and his knuckles instantly screamed in protest.
The sound was wet and sharp, followed by the hollow thud of Camden stumbling back into the doorframe. For a split second, there was silence — just the fizz of adrenaline in Yeosang's ears and the searing, white-hot ache blooming up his knuckles.
“Holy — shit,” Camden hissed, cupping his face. Blood started to bloom between his fingers, seeping from a clearly broken nose. He tried to laugh, tried to push it off with swagger, but his eyes were wild, confused. “You punched me?”
Yeosang's chest heaved. His hand pulsed. He wasn't even sure what he'd done until the aftershock hit.
“I warned you,” he snapped, voice cracking, “not to hurt him.”
From somewhere behind him came a choked sound — San, still frozen, staring at Yeosang like he didn't know whether to cry harder or laugh.
Camden staggered toward the door, sputtering curses and wiping at his bloody face. Nobody stopped him.
Not even Hongjoong, who poked his head out of the bathroom to snort in gleeful disbelief, “Dude, did you just deck that guy?!” while Seonghwa hissed behind him, “Don't encourage violence!”
It was chaos. It was ridiculous.
The front door slammed. For a moment, Yeosang just stood there, hand throbbing, arm hanging limp at his side. It felt like his shoulder had been dislocated, but he couldn't bring himself to move.
Someone guided him to the kitchen — Seonghwa, maybe — and stuck his hand under the cold tap. The shock of the water jolted him back to reality. Hongjoong was barking orders in the background, telling the last few guests to get lost. The place cleared out in record time.
Yeosang stared at the water swirling pink down the drain and didn't say anything until San found him again.
“You didn't have to punch him, you know.”
San's voice was quiet, his posture folded in on itself. His cheeks were still blotchy, his eyes rimmed red. He was fiddling with the hem of his hoodie — Yeosang's old hoodie, stolen years ago and never returned —twisting the fabric around his fingers.
Yeosang wanted to say a thousand things.
That he didn't like Camden from the start — something about him always rubbed him the wrong way, like his smiles were just a show for strangers.
That it had stung, really stung; to see San looking at Camden like he hung the moon.
That no one should get to make San cry on his birthday. That he didn't care how stupid or impulsive it was, he'd do it again.
Instead, he rasped out, “I wrecked your party.”
Then, after a pause: “Camden's a fucking dick.”
San let out a low, exhausted laugh. “Okay, one: my dumb ex wrecked the party, not you — and it was pretty much over anyway. And two: yeah, he was a massive tool.”
He stepped closer, looking at Yeosang's swelling knuckles with concern.
“But you got hurt,” San said softly. “You got hurt because of me.”
Yeosang blinked. His hand did hurt — a lot — but that wasn't the point.
San moved forward, his arms folding around Yeosang's middle almost without thinking. His face pressed into Yeosang's chest, voice muffled as he repeated, “You got hurt.”
Yeosang froze.
He could feel San's heartbeat through the fabric, could smell the faint vanilla of his shampoo. The hug wasn't new — they'd always been physical, had always clung to each other through everything, but something about it now felt... different. Softer. Heavier.
He pressed his chin lightly to San's hair.
“Someone's gotta protect you,” he murmured, his voice barely audible. “You're too much of a pacifist.”
San let out a wet laugh, half-broken and half-hysterical.
“You used to say your arm was a noodle,” he said.
Yeosang huffed a breath. “It was. I couldn't lift a chair until last year.”
San didn't reply. He just stayed there, arms wound tight around Yeosang's waist, breathing in sync.
They'd always been close, but lately, Yeosang had started noticing things he didn't before.
Like the way San looked at him a second too long when he thought Yeosang wasn't watching. Or how his laugh always landed a little softer when it was just the two of them.
Or how, somewhere in the last year, San had had a ridiculous growth spurt and ended up just slightly taller and broader than Yeosang — but still somehow remained the gentler one between them. The one who never fought back. The one who forgave way too easily.
For a moment, Yeosang was hyper-aware of everything — the warmth of San's hands against his back, the tremble in his fingers, the soft, uncertain press of cheek to shoulder.
When San finally pulled back just enough to look up at him, their faces were too close. His palm lingered at Yeosang's wrist, thumb brushing a swollen knuckle.
“You didn't have to hit him,” he said quietly.
Yeosang swallowed. “He was a douche.”
San's brow lifted.
Yeosang blurted, more bitterly than he meant to, “What did you see in him anyway?”
San blinked.
Neither of them said anything for a while.
Behind them, the apartment had started to fall back into its usual gentle mess — someone turned the music back on at a low volume, and the fairy lights strung across the curtain rod flickered lazily.
There was frosting smeared on the arm of the couch, a half-eaten cupcake abandoned beside their stacked collection of DVDs from childhood — Treasure Planet, Spirited Away, Shrek 2.
On the windowsill, the cactus San had named Coco tilted to one side, propped up by a rock Yeosang had found during their first hiking trip sophomore year.
It was their space. Their home. No one else's.
San's eyes softened as he looked around. Then he looked back at Yeosang.
Yeosang's hand still throbbed. San's face was still wet.
He figured neither of them had any idea what to do next.
So he grinned, lopsided. “Happy birthday, by the way.”
San groaned and shoved him lightly. “You are the worst.”
But he didn't let go.
And Yeosang didn't mind.
The party had mostly dissolved by midnight, leaving behind the usual wreckage — half-drunk soda bottles, crumpled napkins, a string of lights dangling like someone had tried to swing on them (they probably had), and what smelled suspiciously like spilled soju on the carpet.
Yunho was on trash duty, wearing bright yellow rubber gloves he insisted helped him “get in the zone.”
Mingi had commandeered the vacuum and was gleefully running away from Hongjoong with it, who was holding a broom like a sword and yelling, “Face me, coward!”
Yeosang was slumped sideways on the couch, his hand in a bag of frozen peas and a lazy smile spreading across his flushed face.
“That was so dumb,” Seonghwa muttered from the armrest, pressing antiseptic wipes to Yeosang’s knuckles like he was scolding a particularly stupid child. “You could’ve fractured something.”
“I didn’t, though,” Yeosang grinned. “I won.”
“You punched someone and then almost passed out from adrenaline,” San added, kneeling beside the couch with a very serious frown on his face. “You’re a lightweight.”
Yeosang raised a finger. “Correction: I am a gentleman. Who had, like, two and a half shots of peach soju. Maybe three. Definitely four. But in my defence, I was provoked.”
“Once he left, you called Camden a ‘walking LinkedIn profile with a superiority complex and bad shoes,’” San said.
“Was I wrong?”
San bit his lip to keep from smiling. Seonghwa rolled his eyes and gently pushed a mug of water into Yeosang’s hand.
In the corner, Wooyoung and Jongho were still arguing over karaoke.
“Celine Dion is a classic,” Wooyoung insisted, waving the mic like a dagger.
Jongho snorted. “You can’t scream-sing ‘My Heart Will Go On’ like it’s screamo. Give me the mic — I can do Elvis.”
“You sound like a dying cat when you do Elvis.”
“That's offensive to cats.”
Yeosang watched them with a crooked smile, the water sloshing in his cup.
“You know,” he said thoughtfully, “Professor Varma is never going to believe I missed Thursday’s seminar because I got into a fistfight defending the honour of my college roommate slash platonic soulmate.”
San sputtered. “Soulmate — what —”
Yeosang raised a solemn hand. “I’ll just tell him I tripped on a scented candle and fell directly into a time vortex. That feels on brand for Varma. He assigned five Virginia Woolf essays in one week.”
Seonghwa sighed, finally done with the first-aid kit, and stood up. “I’m done with you two,” he said, pointing at both of them. “Don’t get blood on the couch.”
San tugged the throw off the backrest and tucked it over Yeosang gently, his brow still furrowed.
“Hey,” Yeosang said suddenly, voice quieter.
San paused, his hand lingering by Yeosang’s shoulder.
Yeosang looked up at him with that soft, drunk honesty that only came out when his guard was down and the world was blurry around the edges.
“I’m glad it was me,” he murmured. “You know. That was there.”
San’s lips parted, a flush creeping into his cheeks. “Yeosang —”
“Because I’d do it again,” he added, blinking slow. “Even if I do have noodles for arms.”
San didn’t say anything for a while.
He smoothed the throw a little more, taking a hold of Yeosang’s uninjured hand, and whispered, “Thanks for looking after me, idiot.”
“S'what friends are for,” Yeosang slurred in reply and then immediately passed out with a quiet snore, one arm flung over his eyes like a tragic Victorian maiden.
5
The party was already half a blur — too many people, too much punch that tasted like melted strawberry lollies and regret. The bass from the Bluetooth speaker thudded deep in Yeosang’s chest, a rhythm too loud to feel like his own heartbeat.
Lights strobed from the living room, spilling over throngs of swaying bodies like sun flares across a tide. The air smelled like sweat, cheap cologne, and that fruity candle Hongjoong always insisted on lighting.
In the background, Hongjoong and Seonghwa were squabbling over the right way to stack paper cups, Yunho was getting way too into a dance battle with some girl, and someone — probably Wooyoung — was belting the lyrics completely wrong to an early 2000s karaoke hit in the corner.
Yeosang stood off to the side, mostly nursing the same lukewarm beer for the last twenty minutes, the condensation slick in his palm. He wasn’t much for crowds or parties or any gathering that involved shouting over overplayed dance remixes.
But San was having fun — currently doing some ridiculous synchronized routine with Jongho and Mingi in the middle of the room — so Yeosang was tolerating it. That was pretty much his intention for the whole night. Tolerate and stay out of the way.
“You look like you’re dying in slow motion,” a voice said, warm and amused.
Yeosang blinked and turned, startled, to find a guy he didn’t recognize standing beside him. Tall. Sharp jaw. Crooked grin. Hair like it belonged in a shampoo ad. He looked like a lost model who’d stumbled into the wrong house party.
“I’m Theo,” the guy added, extending a hand. “And I’m guessing you’re Yeosang?”
Yeosang shook his hand, a little confused. “Uh… yeah. Sorry, have we met?”
Theo laughed, easy and smooth. “Nah. Hongjoong told me about you earlier. Said you’re cool. You don’t look thrilled to be here, though.”
Yeosang gave a faint shrug. “Not really my thing.”
“Well, mine either, most of the time,” Theo said, leaning against the wall beside him like they were old friends. “But every now and then, something — or someone — makes it worthwhile.”
Yeosang smiled politely, unsure what to say. He glanced toward the living room, where San had abandoned the mock dance battle and now stood near the sliding doors, drink in hand. He was nodding half-heartedly at something Jongho was saying, his usual life-of-the-party spark dulled.
“You wanna dance?” Theo asked suddenly, nudging Yeosang with his elbow.
“What? Oh—no, I’m good,” Yeosang said quickly, awkwardly waving his beer. “I don’t really—”
“C’mon,” Theo said, grinning. “One dance won’t kill you. Unless you’re tied down to someone?” He raised a brow.
Yeosang’s stomach flipped, just briefly, at the wording — and at the memory of San’s grin when they’d arrived together earlier. But that didn’t mean anything. Not officially. Definitely not anything that required permission.
“I guess not,” he muttered.
Theo took his hand and pulled him gently but firmly toward the makeshift dancefloor. Yeosang followed, out of curiosity or boredom or inertia — he couldn’t quite tell. The lights spun above them, painting streaks of colour across Theo’s cheekbones.
To his credit, Theo was funny. He kept up a steady stream of witty asides and intentionally terrible dance moves, until Yeosang — despite himself — cracked a laugh. A real one.
“There it is,” Theo said, triumphant. “I knew you had a smile in there somewhere.”
Yeosang rolled his eyes but let himself enjoy the moment — just a little.
Then, without much warning, Theo stepped closer. His hands slid to Yeosang’s waist, pulling him flush against his chest. The rhythm changed — slower, heavier — and Theo’s hips rolled against Yeosang’s in time with the beat.
It was too much. Too close. Too intimate for someone Yeosang had known for all of eight minutes. Before he could figure out how to react, Theo leaned in, lips brushing against Yeosang’s neck. Then came the kiss. And the press of teeth. And the unmistakable sting of a hickey blooming into place.
Yeosang froze.
Not visibly. Not enough for anyone to notice. But something inside him coiled.
It wasn’t disgust. It wasn’t even nerves.
It was the quiet wrongness.
Like putting your shirt on backwards and not realizing why it felt weird until halfway through the day. Like eating food that tasted fine but somehow made his stomach turn anyway.
It wasn't right. None of it was right.
He pushed Theo back, muttering a quick, “Sorry,” and ducked away into the crowd before Theo could respond.
He found a corner near the kitchen, trying to steady his breathing. His skin still tingled, but not in a good way.
His heart should be racing, shouldn’t it? Instead, it stumbled and then steadied — flat, unimpressed.
He looked around automatically, like maybe San saw that. Like maybe San would’ve —
What? What was he looking for?
Yeosang glanced back to where San had been, but the space was empty now. The sliding door was half open.
As he leaned against the fridge, Yunho passed by with two cups of punch and shot him a wink.
“Didn’t know you had it in you,” he teased, nodding toward the dancefloor.
Yeosang didn’t answer. His gaze had already drifted toward the sliding doors, where San had been standing moments ago.
And suddenly, the noise of the party felt even louder.
Yunho paused when he spotted the look on Yeosang’s face. “Yo. San left like ten minutes ago. Didn’t say bye, just bolted. Kinda looked upset.”
Yeosang’s chest dipped. “Upset?”
Yunho shrugged. “No clue. Maybe Mingi’s song choices finally killed him.”
Yeosang frowned, but his mouth was already dry. “Right.”
He scanned the room again, more urgent now, and only found a vague trail of chaos — an overturned stool near the hallway, someone’s scarf dropped by the door. The same knot in his stomach from earlier tightened.
He was already heading for the door before he realized his feet are moving.
Outside, the air was thick with leftover warmth from the day, the pavement radiating heat beneath his sneakers.
Yeosang walked too fast, shirt half-buttoned, fingers fiddling with the metal tab. His mind was fogged and fizzy, thoughts crashing into each other like waves against rocks.
San hadn't said goodbye.
San always said goodbye. Even when he was mad. Even when they fought about laundry or the last slice of pizza or whether Mingi's music taste was a crime against humanity.
That twist in Yeosang's stomach was starting to feel a lot like guilt. A lot like panic.
He thought about the last few weeks — how San's smiles had been shorter, smaller, like he was conserving energy. How he'd started spending more time in his room with the door closed. Not cold, exactly. Just... quieter. Distant in a way that felt like he was slipping through Yeosang's fingers, and Yeosang hadn't known how to hold on.
A memory surfaced, sharp and sudden:
Last week. The kitchen. Yeosang had been ranting about a coding bug that was driving him insane, hands gesturing wildly, barely pausing for breath. He'd been so focused on his screen he hadn't noticed San walk in.
But when he finally glanced up, San was just... watching. Standing in the doorway with two mugs of tea, his expression soft and unreadable. Almost sad.
“You okay?” Yeosang had asked.
San had blinked, like he was coming back from somewhere far away. “Yeah. Just — yeah.”
He'd set the tea down without a word and left the room.
Yeosang hadn't said thank you. Hadn't asked what was wrong. Hadn't thought about why San looked at him like that — like he was memorizing something he was afraid to lose.
He thought about it now.
Another memory: two weeks ago. They'd been grocery shopping, arguing about whether they needed more instant ramen (they didn't, but San always bought it anyway). Yeosang had made some dumb joke, and San had laughed—but it hadn't reached his eyes. The sound had been hollow, performative.
Yeosang had noticed but hadn't said anything. Told himself San was just tired.
Another: a month ago. Movie night. San had fallen asleep on the couch, head tipped onto Yeosang's shoulder, breathing soft and even. Yeosang had stayed perfectly still for two hours, afraid to move, afraid to wake him. His arm had gone numb, but he hadn't cared.
When San finally stirred and pulled away, mumbling an apology, Yeosang's shoulder had felt cold. Empty.
He'd wanted to pull him back.
He hadn't let himself think about why.
Now, running down the sidewalk, the city humming around him — trams clicking in the distance, neon signs buzzing, streetlamps casting long shadows — Yeosang finally let himself think about it.
The wrongness of Theo's kiss.
The way his heart had stuttered and died when San left without saying goodbye.
The way San's laugh used to light up Yeosang's entire day, and how the absence of it now felt like walking around with a piece of himself missing.
The way he'd been finding excuses to touch San lately; a hand on his shoulder, fingers brushing when they passed each other coffee, sitting too close on the couch even when there was plenty of room.
The way his chest ached when San smiled at other people but felt like it might burst when San smiled at him.
Oh.
Oh no.
Oh shit.
Yeosang's breath caught, his steps faltering for just a moment.
When did it happen? When did “San is my best friend” become “San is everything”?
Or had it always been that way, and he'd just been too stupid — too scared — to see it?
He reached the corner where they usually cut across the tram line. The glowing diner sign flickered pink across a puddle even though it hadn't rained in hours, just the evening humidity settling like dew.
He checked his phone again — no messages.
And then he was running again, breath catching, heart thudding, chest tight with the realization that he'd been running toward San his entire life without ever knowing it.
He found San two blocks down, walking past a convenience store, shoulders hunched, hands shoved deep in his pockets.
“San!” Yeosang's voice cut through the night, sharp and desperate.
San didn't stop walking.
Yeosang jogged the last few steps and grabbed his arm. “Hey, where are you —”
“Don't.” San jerked his arm free, spinning to face him.
And Yeosang's heart shattered.
San's eyes were wet — not quite crying, but close. Too close. His jaw was clenched tight, like he was physically holding himself together. His hands were shaking.
Yeosang had never seen him like this. San, who smiled through everything. San, who forgave everyone. San, who made the world softer just by existing in it.
San looked broken.
“I was looking for you,” Yeosang said, breathless, the words tumbling out. “You just left without saying anything, and I—”
San laughed, and it was the worst sound Yeosang had ever heard. Sharp and broken and so, so tired.
“Yeah? Were you looking for me before or after you let him mark you up in the middle of the damn living room?”
Yeosang flinched like he'd been slapped.
“I didn't —” His hands lifted uselessly, reaching for something he didn't know how to grasp. “It wasn't — I didn't even want —”
“Then why?” San's voice cracked, splintering down the middle. “Why do you —”
He stopped. Swallowed hard. His hands curled into fists at his sides, knuckles white.
That's when Yeosang saw it. Blood, dried and dark, smeared across San's right hand. A gash near his thumb, still seeping red.
“What happened to your hand?”
“Nothing.” San's voice was flat, empty. “I wasn't looking where I was going. Hit a cabinet on the way out.”
“San…”
“Just forget it, Yeosang.”
“No.” Yeosang stepped closer, and San stepped back. It felt like a knife twisting in his chest. “No, I'm not going to forget it. Talk to me. Please.”
For a long moment, neither of them moved.
The city hummed around them — distant traffic, cicadas singing their endless summer song, someone's muffled music bleeding through an open window. The streetlamp above them flickered once, twice, casting unsteady shadows across San's face.
San's shoulders sagged. All the fight seemed to drain out of him at once, leaving him smaller somehow. Tired.
When he spoke again, his voice was barely above a whisper.
“I can't keep doing this.”
Yeosang's blood ran cold. “Doing what?”
“Pretending.” San's eyes finally met his, and they were devastated. Stripped bare. Raw in a way that made Yeosang want to wrap him up and hide him from the world. “Pretending that watching you with other people doesn't kill me. That I don't —”
He cut himself off, shaking his head sharply. His jaw clenched again.
“Forget it,” he said, turning away. “Just — forget I said anything.”
“San, wait —”
“I need to go.”
Panic clawed up Yeosang's throat. San was leaving. San was walking away, and if Yeosang let him go now, something between them would break that he didn't know how to fix.
He grabbed San's wrist — the uninjured one — and held on.
“Don't,” Yeosang said, and his voice came out desperate, pleading. “Don't go. Please.”
San stopped but didn't turn around. His shoulders were rigid, trembling slightly.
“Let me go, Yeosang.”
“No.”
“Yeosang —”
“What do you want me to say?” The words ripped out of him, raw and unfiltered. “That I hated it? That it felt wrong the entire time? That all I could think about was finding you?”
San went very, very still.
Yeosang's heart was hammering against his ribs so hard he thought it might break through. His hands were shaking. Everything was shaking.
“Because I did,” he continued, his voice cracking now. “I do. That kiss — it felt wrong because it wasn't —”
He stopped. Breathed. Let himself say it.
“It wasn't you.”
San turned slowly, like he was afraid any sudden movement might shatter whatever fragile thing was forming between them.
His eyes were wide, disbelieving. “What?”
Yeosang took a shaky breath. And another. His whole life was balanced on the edge of this moment, and he was terrified, but he couldn't stop now.
“I've been so stupid,” he whispered. “I've been so — God, San, I didn't see it. I didn't let myself see it. But it's always been you.”
San's lips parted. No sound came out.
“Last week, when you brought me tea and just — looked at me like that. I didn't understand why it made my chest hurt. Or a month ago, when you fell asleep on my shoulder and I didn't want you to move. Ever. Or —or every time you smile at me and it feels like the sun coming out.”
Yeosang's eyes were burning now. His voice was shaking so badly he could barely get the words out.
“I thought — I thought I was just protective of you. That you were my best friend and that's why I hated seeing you with Camden. That's why I couldn't stand watching you pull away from me these past few weeks. But it's not — it was never just that.”
He stepped closer. San didn't move away this time.
“I'm in love with you,” Yeosang said, and the words felt like jumping off a cliff. Like free-falling with no idea if there was anything to catch him. “I think I've been in love with you for so long I don't remember what it feels like not to be. I'm sorry it took me this long to figure it out. I'm sorry I'm slow and stupid and —”
“You're not stupid,” San interrupted, his voice wrecked.
Yeosang looked up.
San was crying now — really crying. Tears streaming down his face, catching the light from the streetlamp above them.
“You're not stupid,” San said again, softer. “You're — God, Yeosang, do you have any idea —”
His voice broke completely.
“How long?” Yeosang whispered. “How long have you —”
“Years,” San choked out. “Since… I don't even know. Since you punched Camden, maybe. Or before that. Since you stayed up all night with me when Kyungmi was in the hospital. Since we were kids and you put a band-aid on my finger like it was the most important thing in the world.”
He laughed — wet and broken and so full of everything he'd been holding back.
“Maybe always,” he whispered. “Maybe it's always been you too.”
The space between them felt electric. Charged. Like the air before lightning strikes.
Yeosang's hands were trembling. His whole body was trembling.
“I was so scared,” San said quietly. “You're my best friend. You're — you're everything, Yeosang. I couldn't lose you. I thought if I told you, you'd —”
“You could never lose me,” Yeosang said fiercely. “San, you —”
He didn't know how to say it. Didn't know how to put into words the way San had been woven into every part of his life since they were five years old. The way he couldn't imagine a world where San wasn't in it.
So he didn't say it.
He closed the distance between them and kissed him.
For a heartbeat, San went completely still — shocked into immobility.
Then he made a sound — something small and broken and relieved — and kissed back.
It was neither gentle nor careful.
It was years of wanting compressed into a single point of contact.
San's hands came up to cup Yeosang's face, firm and trembling and reverent, and pulled him closer. His lips were soft and salt-tinged from tears and tasted like everything Yeosang had been missing without knowing it.
Yeosang gasped against his mouth, and San used the opportunity to deepen the kiss, his tongue sweeping against Yeosang's in a way that sent electricity racing down his spine.
Yeosang's knees went weak.
His hands fisted in San's shirt, pulling him impossibly closer, trying to eliminate every atom of space between them. San was solid and warm and real against him, and Yeosang wanted to crawl inside his ribcage and live there.
San's fingers slid into his hair, tilting his head to change the angle, and Yeosang made a sound he'd be embarrassed about later, something between a whimper and a moan.
But San seemed to like it, because he smiled against Yeosang's lips and kissed him harder.
One of San's hands dropped to Yeosang's waist, fingers spreading wide, thumb pressing against his hip bone through his shirt. The touch was possessive and grounding all at once, and Yeosang felt like he might dissolve into light.
They broke apart for air, just barely, just enough, foreheads pressed together, breathing hard into the tiny space between them.
Yeosang's eyes fluttered open.
San was looking at him like he'd hung the moon and stars. Like Yeosang was something precious and impossible and finally, finally within reach.
“Hi,” San whispered, his voice wrecked.
Yeosang let out a breathless laugh. “Hi.”
“I've wanted to do that for so long.”
“Me too,” Yeosang said, and then realized it was true. He had wanted this. He'd wanted it in every moment he'd never let himself examine too closely. Every time San smiled at him. Every time their hands brushed. Every time he'd told himself that the way his heart raced around San was just normal friendship things.
“I'm sorry it took me so long to catch up,” Yeosang whispered.
San shook his head, thumbs stroking Yeosang's cheekbones with devastating gentleness. “You're here now. That's all that matters.”
And then he kissed him again.
This time it was slower. Deeper.
San kissed like he was trying to memorize the shape of Yeosang's mouth, the way he tasted, the small sounds he made when San's teeth caught his bottom lip. His hands were everywhere — cupping Yeosang's jaw, threading through his hair, sliding down his back to pull him flush against his chest.
Yeosang felt like he was drowning in the best possible way.
He let San guide him, let himself be led, let himself fall into this with his whole heart. His fingers curled into the fabric of San's shirt at the small of his back, holding on like San was the only solid thing in a tilting world.
San's tongue swept against his again, slow and deliberate and absolutely devastating, and Yeosang's brain short-circuited. He made another one of those embarrassing sounds, and San swallowed it, kissed it right out of him.
When they finally broke apart again—reluctantly, necessarily, lungs screaming for air—Yeosang was pretty sure his legs had stopped working entirely.
San seemed to realize this at the same moment, because his arms tightened around Yeosang's waist, holding him upright.
“You okay?” San murmured against his temple.
Yeosang laughed — breathless and dazed and so utterly gone for this boy. “No. Yes. I don't know. My brain stopped working.”
San grinned, and it was the smile Yeosang loved most—the one that was all soft edges and genuine joy. “Yeah?”
“Yeah.”
They stood like that for a while, wrapped up in each other under the flickering streetlamp, the city breathing softly around them. San's hands were still cradling Yeosang's face like he was something infinitely precious. Yeosang's fingers were still twisted in San's shirt, unwilling to let go.
“I can't believe this is real,” San whispered.
Yeosang kissed him again — just a soft press of lips, sweet and simple. “It's real.”
“Promise?”
“Promise.”
San let out a shaky breath and pulled Yeosang back in, burying his face in the crook of his neck. Yeosang wrapped his arms around him and held on tight, feeling San's heartbeat thundering against his own chest.
“I love you,” San said into his shoulder, muffled but unmistakable. “I love you so much it scares me.”
Yeosang's eyes burned. He pressed his lips to San's hair and breathed him in—familiar and warm and home.
“I love you too,” he whispered back. “I'm sorry I took so long to figure it out, but I love you. I think I always have.”
San made a sound that was half-laugh, half-sob. His arms tightened around Yeosang's waist.
They stayed like that for a long moment — just holding each other, breathing each other in, letting the reality of it settle into their bones.
When they finally pulled back, San's eyes were wet again, but he was smiling. Really, truly smiling.
“Can I kiss you again?” he asked softly.
Yeosang pretended to think about it. “Hmm. I guess.”
San laughed and kissed him anyway — quick and playful and sweet.
Then again, slower.
Then once more, just because he could.
“We should probably go home,” Yeosang said eventually, though he made no move to step away.
San nodded but didn't let go either. “Yeah. Probably.”
Neither of them moved.
The moment stretched, warm and perfect and theirs.
Finally, San took Yeosang's hand, the uninjured one, and laced their fingers together.
“Okay,” he said. “Now we can go.”
They walked home side by side, hands clasped between them, shoulders brushing with every step.
The city was still wide awake around them. The hum of late-night traffic, the cicadas, the low drone of music leaking from bars tucked down side streets — all of it buzzed softly, familiar and comforting.
Everything looked the same.
Everything felt different
Yeosang kicked at a stray bottle cap and grins when San did the same a beat later, like muscle memory.
They turned a corner, passing the graffiti-covered brick wall by the old corner café — the same one they used to dare each other in front of back in first year. The mural was still there, faded neon swirls behind a half-sketched portrait of someone who might’ve been Prince or just some guy with fabulous hair.
Yeosang pointed at it with a smirk. “You remember the night you sang Bohemian Rhapsody in front of that wall because I bet you wouldn’t?”
San chuckled, “Well, I got free coffee for a week after that, so… worth it.”
They fell into laughter again, the kind that bubbles up from somewhere deep. They hadn’t laughed like this together in weeks. Months, maybe. Yeosang felt the gap between them closing with every step they take.
“Think Wooyoung’s still fighting over karaoke?” San asked after a pause.
Yeosang snorted. “Jongho won’t let him win. You know how he is. King of passive-aggressive duets.”
San mimicked Jongho’s serious voice: “You think you can out-sing me? Bitch, I am Glee.”
They dissolved into another round of breathless, giddy laughter, nearly tripping over each other as they passed a blinking pedestrian crossing. It was easy, too easy, how quickly they fell back into step. Like no time has passed. Like this has always been waiting for them.
Yeosang glanced over and saw San’s smile framed in the yellow light of a shop sign. And God, he looked — home. Just like this. Like his.
And found him already looking back, a soft smile playing at the corners of his mouth.
“What?” Yeosang asked.
“Nothing. Just —” San squeezed his hand. “I'm really happy right now.”
Yeosang's chest felt too full. Like his heart had expanded three sizes and was pressing against his ribs, trying to make room for everything he was feeling.
“Me too,” he said quietly.
“Hey,” San said suddenly. “What are you thinking about?”
Yeosang looked at him — really looked. At the soft curve of his mouth. At the way his eyes crinkled when he smiled. At the boy who'd been next to him for as long as he could remember, who'd always been there, who'd always been home.
“That I've been an idiot,” Yeosang said honestly.
San laughed. “Yeah, kind of.”
“But I'm your idiot now.”
“You were always my idiot,” San said, tugging him closer. “Now I just get to kiss you about it.”
And he did — right there on the sidewalk, under the glow of the neon café sign, soft and sweet and perfect.
When they finally made it back to their building, San unlocked the door like it was second nature — no hesitation, no awkwardness. Just the soft click of the key, the nudge of a hip to push it open, and then the familiar creak of hinges they kept saying they'd oil.
The apartment smelled faintly of the citrus candle Yeosang had forgotten to blow out that morning. San kicked off his shoes. Yeosang followed him inside, still buzzing with the unreality of it all.
San turned to look at him, and something in his expression shifted. Went soft and vulnerable.
“I know I already said it,” San started, “but I need you to know, I really do love you. This isn't just — I don't want you to think this is just because of tonight, or because I was upset about Camden. I've loved you for years, Yeosang. I've loved you so long I forgot what it felt like not to.”
Yeosang's throat tightened. He crossed the space between them and took San's face in his hands.
“I know,” he said softly. “I believe you. And I —” He paused, making sure San could see the truth in his eyes. “I love you too. I'm all in. Completely. Terrifyingly. All in.”
San's eyes went bright with unshed tears. He leaned in and kissed Yeosang again, slow and thorough and full of promise.
When they broke apart, Yeosang noticed the cut on San's hand again. Still raw, still bleeding slightly.
“Come here,” he said, tugging San toward the couch. “Let me fix that.”
San followed, a little dazed, a little overwhelmed.
Yeosang disappeared into the bathroom and came back with antiseptic and a band-aid. A cat-shaped one.
San let out a wet laugh when he saw it. “Seriously?”
“You love cats.”
“You love cats.”
“Shut up and give me your hand.”
San offered it, and Yeosang cleaned the cut with the same careful gentleness he'd had when they were five and San fell from the tree. When he pressed the band-aid into place, smoothing it down once, twice, making sure it was secure, San caught his wrist.
“Thank you,” San said quietly.
Yeosang looked up. Their faces were close again, San's eyes soft in the dim light of their living room.
“For what?”
“For coming after me. For…” San's voice caught. “For choosing me.”
Yeosang's heart clenched. He leaned forward and pressed their foreheads together, breathing in the familiar scent of San's shampoo, the warmth of his skin.
“Always,” he whispered. “It'll always be you.”
Outside, a tram glided past with a soft electric whine. Inside, everything was still.
San's hand found his, fingers slotting together like they'd always belonged there.
Like coming home.
Like finally, finally being exactly where they were meant to be.
