OC Flight Blocker

Prevents travel when an Organized Crime is imminent and insults you for trying.

Você precisará instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Você precisará instalar uma extensão como o Tampermonkey para instalar este script.

Você precisará instalar um gerenciador de scripts de usuário para instalar este script.

(Eu já tenho um gerenciador de scripts de usuário, me deixe instalá-lo!)

Advertisement:

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

(Eu já possuo um gerenciador de estilos de usuário, me deixar fazer a instalação!)

Advertisement:

// ==UserScript==
// @name         OC Flight Blocker
// @namespace    https://www.torn.com/
// @version      1.0.4
// @description  Prevents travel when an Organized Crime is imminent and insults you for trying.
// @author       BBSmalls [3908857]
// @match        https://www.torn.com/page.php?sid=travel*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    // =========================================================
    // EARLY CACHE — must run before anything else
    // =========================================================

    let ocReadyAtCached = null;
    try {
        const _c = JSON.parse(localStorage.getItem('ocfb_ocCache'));
        if (_c?.ready_at) ocReadyAtCached = _c.ready_at;
    } catch(e) {}

    // Load toggle state immediately so blocking checks respect it from the start
    let isBlockingEnabled = true;
    const _savedToggle = localStorage.getItem('ocfb_toggle_enabled');
    if (_savedToggle !== null) isBlockingEnabled = (_savedToggle === 'true');

    // =========================================================
    // CONSTANTS & CONFIG
    // =========================================================

    const LAYOVER_BUFFER_MIN = 300; // Allow a 30 minute buffer in case you land and get mugged
    const CACHE_TTL_MS       = 12 * 60 * 60 * 1000; // only check the oc timer every 12 hours
    const PENDING_CACHE_TTL_MS = 2 * 60 * 1000; // once ready_at has passed, poll pending OCs every 2 minutes
    const SCRIPT_NAME        = 'OC Flight Blocker';
    const LS_API_KEY         = 'ocfb_apiKey';
    const LS_OC_CACHE        = 'ocfb_ocCache';
    const LS_TOGGLE_STATE    = 'ocfb_toggle_enabled';
    const API_ENDPOINT       = 'https://api.torn.com/v2/user/organizedcrime';
    const BTN_SELECTOR       = 'button[aria-controls^="travel-country"], button.torn-btn[aria-label^="Travel to"]';
    const IN_FLIGHT_SELECTOR = '[class*="remainingTime"], [class*="flightTime"], [class*="remaining-flight"]';

    // =========================================================
    // INSULT ARRAY - Total Count: 806
    // =========================================================

    const OC_INSULTS = [
        "Are you stupid, or just allergic to winning? Stay here.",
        "Attempting to flee the country before your OC? That's not wanderlust. That's cowardice with a carry-on.",
        "Bold move trying to fly out right before your OC. Your crewmates are sharpening the knives and your name is on the handle.",
        "Bold of you to assume your vacation is more important than everyone else's hard work.",
        "Close the goddamn travel tab. Your faction didn't recruit a fucking tourist.",
        "Close the page. You're done traveling. The script has spoken.",
        "Close the travel page, unclench, and go be useful for once in your chaotic, unreliable little life.",
        "Close your legs and close the travel tab. You're not going anywhere, sweetheart.",
        "Closing this tab and going to the OC screen is the smartest thing you'll do today.",
        "Congratulations, you've found a new way to disappoint everyone who trusted you.",
        "Even your passport is embarrassed for you right now. That's how bad this is.",
        "Every destination on that list will still exist after your OC. I promise.",
        "Every second you spend staring at that flight is a second you're actively failing your crew.",
        "Every time you bail, you make the next bail easier. Break the cycle. Tonight. Stay.",
        "Every time you eyeball the travel page, your faction's respect for you evaporates a little more.",
        "Everything your faction has built could come apart because of you right now. That's an absurd amount of power. Use it wisely.",
        "Get back to the OC screen. We haven't got all day and apparently neither do you.",
        "Going anywhere right now would be a masterclass in how to lose friends and alienate factions.",
        "I didn't realize we'd recruited this level of chaos. Good to know. Stay put.",
        "I don't give a flying fuck if you're bored. Be bored in the city like the rest of us, you restless idiot.",
        "I don't know what's bigger: your ego or your apparent lack of functioning brain cells.",
        "I hope you enjoy staring at the tarmac, because that's the only travel you're getting today.",
        "I'd tell you to grow up, but clearly that ship has sailed. Sit down.",
        "If your faction could send you a strongly worded letter right now, they would. Consider this it.",
        "I'm blocking the gate because you clearly can't manage your own schedule or your own brain.",
        "I'm not blocking your flight because I care about you. I'm blocking it because you're a nuisance.",
        "Imagine being this useless. It's almost a talent. Stay put.",
        "I've seen better commitment from a goldfish. At least it stays in its bowl.",
        "I've seen better timing from a broken clock. Sit the hell down.",
        "I've seen smarter decisions made by a drunk raccoon in a dumpster. Stay the fuck put.",
        "Keep staring at that exit and you'll find yourself booted faster than a budget airline.",
        "Leaving before your OC is criminal. And not the fun kind. The kind that gets you kicked to the curb.",
        "Leaving now is the criminal equivalent of finishing first and rolling over. Don't be that selfish.",
        "Leaving now would be peak self-destruction wrapped in a boarding pass.",
        "Nobody likes a deserter. And buddy, you are flirting hard with that title right now.",
        "Not all heroes wear capes. Some of them just stay home when their faction needs them.",
        "Not today, globetrotter. Your OC needs warm bodies, not useless postcards from someone who bailed.",
        "Nothing says 'I am a massive disappointment' quite like trying to catch a flight during your own faction's OC.",
        "Nothing says 'I have the loyalty of a feral cat' quite like bailing on your faction right before the OC.",
        "Oh look, the village idiot wants to go on a trip. The village needs you here, being useless closer to home where we can watch you.",
        "Oh, we're flying now? Didn't realize your primary role in this faction was 'useless vacation goblin.'",
        "Oh, you're trying to fly? How cute. Your whole faction can see your activity, genius.",
        "One day you'll look back on this moment and think 'thank god that script cockblocked my idiotic vacation plan.'",
        "Put the suitcase away, you magnificent dumbass. Crime waits for no one, but it IS waiting for your sorry self.",
        "Put your passport away before someone shoves it somewhere that'll make customs very uncomfortable.",
        "Sir, this is a criminal enterprise, not a gap year program. Get back to work.",
        "Sit down, you degenerate little shit. The OC is imminent and you're out here cosplaying as a world traveler.",
        "Sit here. Stew in it. Then go do the crime.",
        "Sit your horny little passport DOWN. Your OC isn't going to do itself, jackass.",
        "Sneaking off before an OC is the kind of move that gets whispered about in faction chat for years.",
        "Some lessons are learned the hard way. This doesn't have to be one of them. Stay.",
        "Some people are clutch. Some people are not. You have a once-in-a-session chance to be clutch. Don't blow it.",
        "Some people choke under pressure. Others run from it. You're apparently a runner with terrible timing.",
        "Somewhere out there your faction leader is stress-eating because of you specifically.",
        "Stay. Complete the OC. Then go wherever you want. It's really not that complicated.",
        "Stop being a coward and face this OC like a functioning adult.",
        "Stop being a selfish goblin and drag your ass to the crime screen before someone does it for you.",
        "Stop checking departure times and start checking your goddamn notifications, you oblivious disaster.",
        "Stop looking for exits and start looking for ways to contribute something.",
        "The audacity is so thick I could choke on it. Put the passport down before I make you.",
        "The audacity of someone with your track record trying to bail on yet another commitment is genuinely breathtaking.",
        "The audacity of trying to dip out now is giving massive 'I'll just put the tip in' energy. No. All the way in. On the OC.",
        "The audacity of your mediocre, flaky, unreliable ass trying to peace out before an OC is genuinely spectacular.",
        "The audacity. The sheer, pants-shitting audacity of trying to fly right now. Unbelievable.",
        "The bar for you was already on the floor and you're out here with a shovel trying to bury it. Stay.",
        "The departure board is dark for you today, sweetheart. Sit your ass down and accept it.",
        "The departure board shows one destination today: the OC screen. Everything else is cancelled.",
        "The difference between you and a useful faction member is currently one decision. Make the right one.",
        "The disappointment in your faction right now is not fresh. It has been accumulating for a long time. Stop adding to it.",
        "The distance between being a liability and being an asset is one decision: stay for the OC. Make it.",
        "The fact that a script had to stop you from abandoning your faction before an OC tells you everything about where you are.",
        "The fact that you're even capable of opening that travel page right now is a stunning indictment of your character.",
        "The fact that you're even considering leaving right now tells your entire faction everything they suspected about you.",
        "The gap between who your faction thought they recruited and who you've actually been is genuinely depressing.",
        "The hero of this story stays home and completes the OC. Be the hero.",
        "The irony of a criminal trying to run from responsibility before an Organized Crime is not lost on anyone.",
        "The kindest thing your crewmates have ever done is not say out loud what they actually think about your reliability.",
        "The look your faction lead is giving your profile right now would strip paint off a battleship.",
        "The moment you click that button, you become the cautionary tale new recruits get told on day one.",
        "The moment your faction realizes you tried to leave right now is going to be a very bad moment for your standing.",
        "The number of times your faction has given you the benefit of the doubt and received nothing in return is staggering.",
        "The OC fires whether you're there or not. Be there.",
        "The OC has a seat reserved with your name on it. Don't leave it empty.",
        "The OC is for real players. Go play dress-up somewhere else after it's done.",
        "The OC is happening with or without you. Make sure it's with you.",
        "The OC is live. The window is open. Your excuses are expired. Get. In. The. Game.",
        "The OC is the priority. The travel page is the distraction. Eliminate the distraction.",
        "The OC is the thing. You are a part of the thing. Parts don't leave before the thing is finished.",
        "The OC needs everyone. Including the one person trying to sneak out the back. That's you.",
        "The OC needs you more than Hawaii needs your money. Stay.",
        "The OC window is closing and you're standing at an airport gate. Think about your life choices.",
        "The OC won't run itself, and apparently neither will your common sense.",
        "The only acceptable ending to this situation is you closing the travel page and doing your job. Nothing else is acceptable.",
        "The only acceptable response to your faction needing you right now is to be where they need you. Be there.",
        "The only adventure you're having today is the one where you stay and do your job.",
        "The only baggage worth carrying tonight is your contribution to this OC. Pack that instead.",
        "The only check-in that matters today is the one where you check in with your faction. Do it.",
        "The only destination worth flying toward is the successful completion of this OC. Navigate there.",
        "The only express lane open to you right now leads directly to the OC screen. Take it.",
        "The only flight plan that makes sense right now has one destination: staying exactly where you are.",
        "The only flight worth catching right now is the one where your faction's OC takes off successfully.",
        "The only frequent flyer points that matter are the ones you earn by showing up for your faction. Earn them.",
        "The only layover happening today is you, laying over on the couch, waiting for your OC.",
        "The only legacy move you can make right now is staying. Everything else is just more evidence against you.",
        "The only member of your faction getting properly screwed today is you, if you leave.",
        "The only miles you're racking up today are the ones between you and being a decent teammate. Close the gap.",
        "The only person who benefits from you leaving right now is nobody. Including you. Especially you.",
        "The only person who thinks leaving right now is a good idea is you. Everyone else — including this script — disagrees.",
        "The only place you need to be right now is here. Not there. Not anywhere else. Here.",
        "The only seat you should be taking right now is the one at the OC table. Sit in it.",
        "The only stamp your passport needs today is the one that says 'stayed home like a responsible faction member.'",
        "The only thing blowing today should be everyone's minds when this OC lands perfectly. Be there for it.",
        "The only thing getting a one-way ticket today is your credibility, if you leave.",
        "The only thing getting a smooth landing today is your faction's reputation, if you stay and earn it.",
        "The only thing getting any action today is your OC. Not you. Not your passport. The OC.",
        "The only thing getting deported today is your good standing in this faction, if you leave.",
        "The only thing getting grounded today is you. Grounded. Here. Present. For the OC.",
        "The only thing getting lei'd today is your travel plans. Hawaii can wait.",
        "The only thing getting turbulence today is your faction's trust in you, if you leave.",
        "The only thing more tragic than missing your OC is knowing you chose to miss it. Don't make that choice.",
        "The only thing standing between you and a completed OC is your own bad judgment. Fix it.",
        "The only thing standing between you and being permanently sidelined in this faction is making the right call right now.",
        "The only thing standing between your faction's success and failure tonight might literally be you. Stand on the right side.",
        "The only thing that should be taking off right now is this OC, not your spineless ass to the airport.",
        "The only thing worse than a bad criminal is a flaky one. You're out here being both simultaneously.",
        "The only thing you should be going down on right now is the OC completion screen.",
        "The only trip worth taking today is the one to your OC screen. Start walking.",
        "The only turbulence today is going to be in your faction chat if you click that button. Avoid it.",
        "The only upgrade you should be chasing right now is an upgrade in your commitment level.",
        "The only visa you need today is a visa to the OC completion screen. It's already approved.",
        "The only way you can redeem your shaky, unreliable, borderline embarrassing track record is to stay. So stay.",
        "The only worthwhile move you can make in the next sixty seconds is closing this tab. Make it.",
        "The pattern here is undeniable. Every time it counts, you find a reason to be somewhere else. Not today.",
        "The planet will still be there after your OC. Your faction's patience and your roster spot will not.",
        "The problem isn't that you're selfish. The problem is you're selfish and you don't even feel bad about it.",
        "The saddest part isn't that you're trying to leave. It's that nobody is even surprised anymore.",
        "The sheer volume of times your crew has covered for you should make this an easy decision. Stay and return the favor.",
        "The silence from your faction right now isn't acceptance. It's the specific silence of people who are done being surprised.",
        "The thing about being consistently unreliable is that eventually people stop being surprised. They've stopped. Stay anyway.",
        "The thing your crimemates say about you when you're not there would genuinely ruin your evening. Stay and change it.",
        "The travel agency will be here tomorrow. Your faction's trust won't be if you bail.",
        "The travel page is a fantasy. The OC is reality. Pick reality, you delusional little liability.",
        "The travel page is a symptom of a bigger problem. The bigger problem is your commitment to this faction. Fix it.",
        "The travel page is not your friend. Your faction is your friend. Act like it.",
        "The travel page is not your personal escape hatch. Close it.",
        "The travel page will be there tomorrow. Your spot in this operation will not be if you walk out now.",
        "The trust deficit you've built up in this faction is enormous. Every time you stay when it counts, you chip away at it.",
        "The universe has given you a clear opportunity to not be a massive disappointment. Please take it.",
        "The universe is telling you to stay. That universe is this script. Listen to it.",
        "The version of you that actually gives a damn about your faction is somewhere in there. Find them. Now.",
        "The version of you that your faction recruited is not the version that's been showing up. Find that person. Stay.",
        "The world will still be out there after the OC fires. Your faction might not be if you leave.",
        "The worst part isn't that you're unreliable. It's that everyone already knew you were unreliable and you keep proving them right.",
        "The worst thing about you is not the bailing. It's that you don't even seem to understand why it's a problem.",
        "There is not a single person in your faction who is surprised right now. That should bother you more than it does.",
        "There's a time and a place for travel. This is neither.",
        "This is an Organized Crime, not a fucking holiday retreat. Get your priorities straight, you absolute clown.",
        "This is not the time for personal enrichment through international travel. Sit.",
        "This OC has your name on it. Not symbolically. Literally. You're on the list. Be on the list.",
        "Today is literally the lowest possible bar: show up, don't flee, do your job. You're struggling with that. Think about it.",
        "Tonight everything your faction has worked for either lands or doesn't. Make sure you're there when it lands.",
        "Tonight is not a drill. The OC is real. Your responsibility is real. Be real. Stay.",
        "Tonight is not complicated. Stay. Do the OC. Don't be the reason it fails. That's it. That's the whole ask.",
        "Tonight is not the night to be the person your faction regrets recruiting. They're not sure yet. Don't confirm it.",
        "Tonight is not the time to be the version of you that always finds somewhere else to be. Be the other version.",
        "Tonight is one of those faction moments that gets remembered. Be in the memory as someone who stayed.",
        "Tonight is simple arithmetic: your faction's OC needs bodies. You are a body. Add yourself to the tally.",
        "Tonight is simple: be where you're supposed to be, do what you're supposed to do. Stop overcomplicating it.",
        "Tonight is the night everything your faction built either pays off or doesn't. Make it pay off.",
        "Tonight is the night you either justify your place in this faction or confirm everyone's worst suspicions. Choose.",
        "Tonight is the night your faction finds out who you really are. Make sure it's someone worth keeping.",
        "Tonight is the night your faction remembers. Be in it for the right reasons.",
        "Tonight is the one time your faction needs you to not be yourself — the yourself that runs. Be someone else. Stay.",
        "Tonight is the simplest thing your faction has ever asked of you. Don't complicate it.",
        "Tonight is the simplest version of doing your job: don't leave. You can not-leave. Do that.",
        "Tonight is the test your faction has been waiting for you to pass. Pass it by not leaving.",
        "Tonight isn't about being great. It's about being present. You can be present. Be present.",
        "Tonight the ask is simple: stay, show up, do your job. Three things. You can do three things.",
        "Tonight the only acceptable action is staying. Everything else is a version of failure.",
        "Tonight the only acceptable output from you is your presence in the right place at the right time. Produce that output.",
        "Tonight the only thing standing between your faction and success is time. Don't add 'your absence' to that list.",
        "Tonight the score is your faction vs. the OC. Pick a side. Pick your faction.",
        "Tonight you don't need to be good. You need to be there. Those are different things. Just be there.",
        "Tonight you either make your faction proud or you make them tired of you. Pick one.",
        "Tonight you get to be the one who stayed. Tomorrow you get to be the one who was there. Those are worth more than you think.",
        "Tonight you get to be the teammate nobody had to chase down. Be that teammate.",
        "Tonight you have a simple choice: be part of the faction's success, or be the reason it fails. The first option is staying.",
        "Tonight your faction doesn't care about your past. They care about your next ten minutes. Make those minutes count.",
        "Tonight your faction doesn't need more of your chaos. They need your cooperation. Cooperate by staying.",
        "Tonight your faction doesn't need your best performance. They need your attendance. Attend.",
        "Tonight your faction doesn't need your enthusiasm. They don't need your passion. They need your ass here.",
        "Tonight your faction doesn't need your explanation, your apology, or your excuses. They need your presence.",
        "Tonight your faction either wins with you or loses because of you. Control that variable.",
        "Tonight your faction has everything it needs except one thing. You're the one thing. Be the one thing.",
        "Tonight your faction is asking for reliability. You've been allergic to reliability. Take an antihistamine and stay.",
        "Tonight your faction is asking for your best. Your best is staying. Give your best.",
        "Tonight your faction is asking you to do one thing: not leave. That's it. One thing. Do it.",
        "Tonight your faction is counting on the roster it put together. Be the roster it put together.",
        "Tonight your faction is either whole or it isn't. Be the part that makes it whole.",
        "Tonight your faction is firing on all cylinders. Be a cylinder. Cylinders are here.",
        "Tonight your faction is going for it. Go for it with them. Going for it means being here.",
        "Tonight your faction is going for the win. Go for the win with them. Going for the win starts with being here.",
        "Tonight your faction is making a move. You're either on the move or you're in the way. Get on the move. Stay.",
        "Tonight your faction is making history. People who make history don't sneak out to the travel page first.",
        "Tonight your faction is whole or broken depending on your next decision. Don't break it.",
        "Tonight your faction is winning or losing based on who shows up. Show up.",
        "Tonight your faction makes its move. You're either part of the move or part of the problem. Move correctly.",
        "Tonight your faction needs 100% from everyone. You've been giving 40%. Give the 100% tonight.",
        "Tonight your faction needs a complete performance from a complete team. Complete the team.",
        "Tonight your faction needs a soldier. You can be a soldier. Put the passport down and be the soldier.",
        "Tonight your faction needs one more confirmation that you belong on this roster. Confirm it. Stay.",
        "Tonight your faction needs one more person in the right place. You are that person. Get in the right place.",
        "Tonight your faction needs one simple thing from you and it's the one simple thing you keep failing to provide: presence.",
        "Tonight your faction needs operational compliance from all members. All members includes you. Comply.",
        "Tonight your faction needs operational discipline. Discipline yourself. The discipline is staying.",
        "Tonight your faction needs six things from you: don't. Leave. Before. The. OC. Fires.",
        "Tonight your faction needs soldiers, not tourists. Hang up the khakis and pick up the weapons.",
        "Tonight your faction needs to be complete. Incomplete factions fail. Don't make the faction incomplete.",
        "Tonight your faction needs you to be a functioning part of a whole. Function. Be whole. Stay.",
        "Tonight your faction needs you to be slightly better than you've been. That's not a high bar. Clear it.",
        "Tonight your faction needs you to be the person they thought they were recruiting. Be that person.",
        "Tonight your faction needs you to not make tonight about you. Make it about them. Stay for them.",
        "Tonight your faction needs your name to be a solution, not a problem. Put it in the solution column.",
        "Tonight your faction wins or loses with your name attached to the result either way. Make it a win.",
        "Tonight your faction wins with a full roster. Be on the full roster. Stay on the full roster.",
        "Tonight your faction's clock is ticking. Every second you spend on the travel page is a second you can't get back.",
        "Tonight your faction's future and your place in it depends on this moment. Make the moment count.",
        "Tonight your faction's future is being written. Write yourself into it. As someone who stayed.",
        "Tonight your faction's momentum is everything. Don't break the momentum by being absent.",
        "Tonight your faction's number is up — in a good way. Make sure your number is in their count.",
        "Tonight your faction's OC window opens and closes. Be inside the window when it opens.",
        "Tonight your faction's operation depends on everyone being where they're supposed to be. Be where you're supposed to be.",
        "Tonight your faction's operation fires. Be in the line of fire. In a good way. Here.",
        "Tonight your faction's operation is live. Go live with it. Live means present.",
        "Tonight your faction's outcome depends on who was there. Be in the 'who was there' category.",
        "Tonight your faction's story writes itself based on who shows up. Write yourself into the story.",
        "Tonight your faction's success is something you can either be part of or watch from somewhere else. Be part of it.",
        "Tonight your faction's success or failure has your fingerprints on it whether you stay or go. Leave good fingerprints.",
        "Tonight your faction's trust in you is the only thing being tested. Pass the test.",
        "Tonight your faction's trust is the thing. You're either building it or burning it. Build it. Stay.",
        "Tonight your faction's window is small. Don't spend any of it looking at a travel page.",
        "Tonight your presence is the difference between a full squad and a gap. Don't be the gap.",
        "Tonight your presence is the smallest possible contribution you can make. Make it.",
        "Travel is broadening, they say. Not as broadening as getting kicked from your faction though.",
        "Trying to dip out before your OC? Your faction is going to roast your sorry ass like a Sunday brisket and serve you cold.",
        "Trying to ditch the crew for a vacation? Bold strategy, dipshit. Let's see how that plays out for your faction standing.",
        "Trying to sneak out before the OC is some real 'fake your own death to dodge child support' energy.",
        "We don't negotiate with flight-risk goofballs.",
        "We're in the middle of a heist and you're out here checking airline prices. Incredible.",
        "Where the hell do you think you're going? Your faction needs you more than that duty-free rum, you greedy bastard.",
        "You absolute clown shoes — the OC is about to pop off and you're browsing flights like a divorced dad planning his first solo trip.",
        "You absolute disaster of a human being — your OC is about to pop and you're shopping for flights.",
        "You absolute liability in human form — your OC slot doesn't fill itself and neither does your faction's patience.",
        "You absolute muppet — your faction didn't plan an OC so you could go sip cocktails and scratch your ass on a beach.",
        "You are a faction member. Faction members show up for faction operations. Show up.",
        "You are actively making your faction worse by existing in it the way you do. Today, exist differently. Stay.",
        "You are being watched by every single member of this faction right now. Give them something to actually respect.",
        "You are exactly the kind of person that gives faction leaders stress ulcers. Sit down and stop being a medical incident.",
        "You are genuinely one of the most unreliable people in this faction's entire history and that is saying something.",
        "You are genuinely the worst kind of teammate — the kind that ghosts right when the stakes are highest.",
        "You are in a faction, not a subscription service you can pause when inconvenient. It doesn't work like that.",
        "You are inches from being the person your faction tells people to avoid when they ask for references. Don't go those inches.",
        "You are measurably, demonstrably, historically the least reliable person in this operation. Change the data point.",
        "You are not a backup option for this OC. You are the plan. The plan doesn't get on a plane.",
        "You are not special enough to be the exception to the rule that everyone shows up. You show up too.",
        "You are objectively the weakest link right now and the weakest link does not get to go on vacation.",
        "You are one bad tap away from cementing a legacy of being the person who bailed on the big OC. Don't cement that.",
        "You are one selfish, passport-humping disaster and your faction has tolerated it long enough. Stay.",
        "You are one step away from being a legend in your faction — the legend of the guy who bailed on the big OC. Don't be that legend.",
        "You are precisely the kind of faction member that makes everyone question why they bother recruiting anyone.",
        "You are running out of second chances faster than you seem to realize. This one matters. Don't blow it.",
        "You are the faction equivalent of a participation trophy that keeps asking for its own trophy case.",
        "You are the faction member that everyone mentally prepares for disappointment from. Break the pattern. Stay.",
        "You are the faction member that other faction members warn new recruits about. Fix that. Start now. Stay.",
        "You are the faction wild card. Wild cards don't get to leave before the hand is played.",
        "You are the faction's biggest ongoing question mark and right now you're answering in the worst possible way.",
        "You are the liability this faction keeps insuring against. Tonight, stop being the liability.",
        "You are the living, breathing reason that faction applications should include a loyalty screening.",
        "You are the member this faction debates keeping at every strategy meeting. Tonight, make the debate easy. Stay.",
        "You are the person who gets blamed when things go wrong. Tonight, give them no reason to blame you. Stay.",
        "You are the predictable problem in an otherwise functional operation. Be unpredictable. Stay.",
        "You are the reason faction leaders develop trust issues. Stay and start being the solution for once.",
        "You are the reason post-OC debriefs have a 'what went wrong' section. Tonight, don't be what went wrong.",
        "You are the reason this faction has contingency plans. They planned around your unreliability. Surprise them. Stay.",
        "You are the reason this faction needs a backup plan. For once in your digital life, be the plan.",
        "You are the single most predictable failure in this faction and you're proving it in real time right now.",
        "You are the textbook definition of a faction anchor — not the good kind. The kind that drags everything down.",
        "You are the weakest link in this operation and you don't even have the self-awareness to be embarrassed about it.",
        "You are, objectively, the member of this faction least entitled to walk away right now. So don't.",
        "You are, statistically, the most flight-risk member of this operation. Beat the statistic. Stay.",
        "You came this close to being useful. Don't ruin it now.",
        "You couldn't be more of a disappointment if you tried and the scary part is you're not even trying.",
        "You had one job. ONE. And you're trying to outsource it to the travel agency.",
        "You have a reputation in this faction and it is not a good one. Today is a chance to chip away at it. Stay.",
        "You have been a source of frustration, disappointment, and extra work for your faction for too long. Change direction.",
        "You have been many things in this faction. Tonight you can be the one who came through. Be that.",
        "You have been testing your faction's patience for so long it has turned to stone. Don't push past stone. Stay.",
        "You have been the unreliable one for long enough. Tonight you get to be reliable. Take that.",
        "You have been the wildcard in this faction's deck for too long. Tonight, play a straightforward card. Stay.",
        "You have burned this faction's goodwill before and they rebuilt it. You are about to burn it again. Think about that.",
        "You have contributed approximately nothing to this faction and you want to make it worse by bailing on the OC. No.",
        "You have contributed the bare minimum to this faction for far too long. Today is not the day to contribute even less.",
        "You have exactly one chance to not be the worst part of this operation. This is it. Take it.",
        "You have made your faction work harder, worry more, and trust less. The least you can do is stay for this one thing.",
        "You have never once in your time here made the hard choice when it mattered. Today is your chance. Don't waste it.",
        "You have the attention span of a crackhead at a fireworks show. Stay in the fucking country.",
        "You have the moral backbone of a wet noodle and the decision-making skills to match. Stay.",
        "You horny little traveler — the only trip you're taking is straight to the bottom of the roster if you ditch this OC.",
        "You know what's a great souvenir? Successfully completing your OC. Go get that instead.",
        "You signed up for a faction, not a solo adventure. Act accordingly.",
        "You want a vacation? Help win the OC first, then go beg for time off.",
        "You want to see the world? Great. See it after you've pulled your weight, you freeloading bastard.",
        "You were recruited because someone believed in you. That someone is watching right now. Don't embarrass them.",
        "Your absence right now would be felt like a missing tooth. Don't be the missing tooth.",
        "Your attempt to flee is as transparent as your loyalty record and about as impressive.",
        "Your crew didn't grind to get here just for you to peace out at the last second.",
        "Your crew has bent over backwards for you more times than anyone should have to. Bend back. Stay.",
        "Your crew has carried you, covered for you, and kept faith in you. The interest on that debt is payable right now. Stay.",
        "Your crew put in the work. The least you can do is put in the presence.",
        "Your crewmates already think you're unreliable. Don't confirm it for them.",
        "Your crewmates are about to deliver. Be there for the delivery.",
        "Your crewmates are about to execute something they've been building for weeks. Don't be the thing that unravels it.",
        "Your crewmates are about to go to war and they need every soldier. Even the shaky ones. Especially the shaky ones.",
        "Your crewmates are about to make history and you want to be somewhere else for it. That's not wanderlust, that's rank cowardice.",
        "Your crewmates are about to make something happen. Be part of the something that happens.",
        "Your crewmates are about to make your faction proud and you want to make them furious instead.",
        "Your crewmates are all dialed in. Dial in. Dialing in starts with not dialing up a travel page.",
        "Your crewmates are all in. The hand is dealt. You either play or you fold. Don't fold.",
        "Your crewmates are all pulling in the same direction. You're currently pulling toward a departure gate. Turn around.",
        "Your crewmates are all pulling the same rope. Pull the rope. Don't drop it and walk away.",
        "Your crewmates are all pushing toward the same goal. Push with them. From here.",
        "Your crewmates are all showing up and you want to show off by being conspicuously, infuriatingly absent.",
        "Your crewmates are all squared away. Square yourself away. Squared away means present and accounted for.",
        "Your crewmates are battle-ready and battle-hardened. Be battle-present. Stay.",
        "Your crewmates are carrying the weight of this operation. You don't have to carry much. Just carry yourself here.",
        "Your crewmates are committing fully. Commit something. Commit to staying.",
        "Your crewmates are counting on completion. Complete the squad by staying.",
        "Your crewmates are counting on you like a designated driver. Don't leave their drunk asses stranded in a ditch.",
        "Your crewmates are counting this as strike three, four, or five depending on who you ask. Don't make it the last one.",
        "Your crewmates are covering every angle of this OC. Cover yours. Your angle is being present.",
        "Your crewmates are covering every angle. Cover yours. Your angle is present, engaged, and not leaving.",
        "Your crewmates are depending on numbers. You're one of those numbers. Don't make the math fail.",
        "Your crewmates are doing the heavy lifting. You don't have to lift heavy. Just don't leave.",
        "Your crewmates are doing the thing. Do the thing with them. The thing happens here.",
        "Your crewmates are executing at a level that doesn't include space for your absence. There is no space. Fill it.",
        "Your crewmates are executing the plan. The plan has you in it. You're not optional. You're load-bearing. Stay.",
        "Your crewmates are executing with precision and you want to be a blunt instrument that's not even in the room.",
        "Your crewmates are finalizing positions. Finalize yours. Your position is here.",
        "Your crewmates are giving everything they've got and you want to give them nothing but an empty chair.",
        "Your crewmates are giving this their all. Give it your enough. Enough starts with not leaving.",
        "Your crewmates are going all out. Match the energy. Start by not leaving.",
        "Your crewmates are going for it. Go for it with them. Go for it here.",
        "Your crewmates are going to remember who showed up and who tried to slip out the back. Be on the right list.",
        "Your crewmates are going to win or lose tonight. Make sure they win. That starts with not abandoning them.",
        "Your crewmates are grinding through the finish line. Grind with them.",
        "Your crewmates are in full execution mode and you're in full excuse mode. Switch modes.",
        "Your crewmates are in it to win it. Be in it. That starts with not leaving.",
        "Your crewmates are in position. Get in yours. That position is not at an airport.",
        "Your crewmates are in the zone. Get in the zone. The zone is here. Not at an airport.",
        "Your crewmates are locked and loaded and you're trying to get lei'd in Hawaii. Absolutely not today.",
        "Your crewmates are locked and loaded. Be loaded. At minimum, be locked. Stay.",
        "Your crewmates are locked in like professionals. You're out here acting like a horny tourist with a death wish.",
        "Your crewmates are locked in like their lives depend on it. Lock in like your faction standing depends on it. It does.",
        "Your crewmates are operating at full capacity. You've been operating at about 30%. Tonight, at least show up. That's 15% more.",
        "Your crewmates are out here giving everything and you're giving nothing. As usual. Stay and break the pattern.",
        "Your crewmates are out here with their whole chest and you're trying to vanish like a fart in the wind.",
        "Your crewmates are polished, ready, and deserve better than the chaos you bring to every situation. For once, be better.",
        "Your crewmates are pouring everything into this moment. You're out here trying to pour yourself onto a plane.",
        "Your crewmates are ready to deliver. Deliver yourself to the right location. Here.",
        "Your crewmates are ready to execute. Be part of the execution. Not the thing that gets executed.",
        "Your crewmates are ready to fight for this OC. Pick up your weapon. That weapon is your commitment. Use it.",
        "Your crewmates are ready to go balls to the wall and you want to bail right before impact. Shameful.",
        "Your crewmates are sharp as razors and twice as dangerous. Don't be the blunt edge that ruins the set.",
        "Your crewmates are sharper, more committed, and more reliable than you in every measurable way. Try to keep up.",
        "Your crewmates are showing up for you tonight by running this OC. Show up for them. It's that simple.",
        "Your crewmates are staking their reputation on this going right. Don't be the reason it goes wrong.",
        "Your crewmates are sweating bullets and you're trying to catch flights. Pull your head out of your ass.",
        "Your crewmates are too professional to say what they really think about your reliability. This script has no such restraint.",
        "Your crewmates are trusting the plan and each other. Trust them back. Trust means staying.",
        "Your crewmates are trusting you. That trust is not nothing. Don't make it nothing.",
        "Your crewmates bled, sweated, and probably cried a little to get here. The least you can do is show up conscious.",
        "Your crewmates bleed this game. You browse travel pages. One of those is about to change. Guess which one.",
        "Your crewmates didn't prep and plan and sacrifice just to watch you waddle your ass toward the departure gate.",
        "Your crewmates don't need a hero tonight. They need a teammate. You can be a teammate. Try.",
        "Your crewmates don't talk about it but they notice every time you pull this kind of thing. They notice. Every time.",
        "Your crewmates have been all in since day one. Get all in. Day one was then. Now is now.",
        "Your crewmates have been battle-tested and committed. Get tested and committed. Starting with staying.",
        "Your crewmates have been clutch when clutch was needed. Be clutch. Clutch is staying.",
        "Your crewmates have been consistent when you haven't been. Tonight, be consistent with them.",
        "Your crewmates have been covering for your useless ass for weeks and this is how you repay them. Incredible.",
        "Your crewmates have been doing right by this faction. Do right by this faction. Stay.",
        "Your crewmates have been doing the hard work. Hard work is staying when you don't want to. Do the hard work.",
        "Your crewmates have been edging toward this OC for days and you want to leave right before the finish. Unforgivable.",
        "Your crewmates have been everything this faction needed. Be something this faction needs. Stay.",
        "Your crewmates have been fighting for this faction's success every single day. Fight with them. Tonight. Here.",
        "Your crewmates have been giving 100% to a faction that includes you. Give 100% back. 100% means not leaving.",
        "Your crewmates have been grinding. Join the grind. It starts with not going anywhere.",
        "Your crewmates have been model members. Model them. Model members don't flee before OCs.",
        "Your crewmates have been models of reliability. Model yourself after them. Start with staying.",
        "Your crewmates have been nothing but loyal and you've been nothing but a liability with a pulse. Stay.",
        "Your crewmates have been nothing but solid and you want to be the one soft spot that caves. Don't cave.",
        "Your crewmates have been operating without complaint while you've been a source of complaints. Tonight, be zero complaints. Stay.",
        "Your crewmates have been quiet about their frustrations with you. Don't make them stop being quiet.",
        "Your crewmates have been quietly furious and loudly supportive. They deserve the reverse from you. Stay.",
        "Your crewmates have been quietly furious with your inconsistency for weeks. Tonight is their night. Give it to them.",
        "Your crewmates have been reliable to a fault. Match their fault. Be reliable. Stay.",
        "Your crewmates have been rock solid. Be a rock tonight. Rocks don't board planes.",
        "Your crewmates have been running on trust that you'd show up when it mattered. Tonight it matters. Show up.",
        "Your crewmates have been showing up for every hard moment. This is a hard moment. Show up.",
        "Your crewmates have been showing up. Show up. It's your turn to show up.",
        "Your crewmates have been solid since day one. Be solid on this day. Today. Now.",
        "Your crewmates have been solid. Be solid for once. Starting now. Starting here.",
        "Your crewmates have been the definition of showing up. Define yourself similarly. Show up.",
        "Your crewmates have been the heart of this faction. Be a working organ. Stay.",
        "Your crewmates have been the reliable engine of this faction. Be a fuel source, not a drain.",
        "Your crewmates have been the team you wish you were. Tonight be the team. Stay.",
        "Your crewmates have been waiting for you to be the teammate they thought they were getting. Tonight's the chance.",
        "Your crewmates have been writing the story of this faction's success. Don't write yourself out.",
        "Your crewmates have been your safety net more times than you know. Be their safety net tonight.",
        "Your crewmates have bet everything on this OC and you want to fold your hand before the cards are dealt.",
        "Your crewmates have bled for this faction's reputation. Don't be the one who makes them bleed for nothing.",
        "Your crewmates have carried the emotional and operational weight of this faction. Pick up a corner.",
        "Your crewmates have done the work. Show up to collect on it with them.",
        "Your crewmates have earned a full squad for this moment. Squad up. That means staying.",
        "Your crewmates have earned every bit of this moment. Earn your moment. It starts now. Stay.",
        "Your crewmates have earned the right to succeed. You've earned the right to witness it by staying.",
        "Your crewmates have earned their spot in this operation. You've been given yours. Earn it by showing up.",
        "Your crewmates have fought for this faction's reputation. Don't cost them that reputation. Stay.",
        "Your crewmates have given this faction everything. Give this faction tonight. That's all. Just tonight.",
        "Your crewmates have kept this faction alive through hard moments. This is a hard moment. Stay alive in it.",
        "Your crewmates have never needed you more than they need you right now. Be needed. Be here.",
        "Your crewmates have pulled their weight and yours for too long. Pull your own tonight.",
        "Your crewmates have pulled this faction through worse with less. Tonight they need your less to show up. Show up.",
        "Your crewmates have quietly absorbed every single one of your failures. They're full. Stop adding. Stay.",
        "Your crewmates have swallowed their frustration with you more times than you know. Today they need action, not more patience.",
        "Your crewmates have taken every hard call and made it look easy. Take this easy call and make it: stay.",
        "Your crewmates need every available asset right now. You are an asset. Be available.",
        "Your crewmates need one thing from you: your ass in the right place at the right time. Ass. Right place. Now.",
        "Your crewmates need the version of you that actually gives a damn. They exist. Find them.",
        "Your crewmates need the version of you that gives a damn. That version exists. Deploy it.",
        "Your crewmates sacrificed sleep, nerve, and probably their sanity for this OC. The least you can do is show up conscious.",
        "Your crewmates trust the plan. Trust the plan. The plan says you stay.",
        "Your crewmates trust you with their OC success rate. That's not nothing. Stop treating it like nothing.",
        "Your crewmates went all in on this faction. Go all in with them. All in starts with not leaving.",
        "Your crewmates went all in. The minimum you can do is not fold. Don't fold.",
        "Your crimemates are about to absolutely wreck this OC in the best possible way and you want to miss the wreckage.",
        "Your crimemates are about to cash out on months of investment. Be part of the portfolio.",
        "Your crimemates are about to do something great. Being adjacent to something great requires physical proximity. Be physically proximate.",
        "Your crimemates are about to execute flawlessly and you want to be the one preventable flaw. Unacceptable.",
        "Your crimemates are about to find out if this faction can execute. Execute with them.",
        "Your crimemates are about to go full send and you want to go full missing in action. Unacceptable.",
        "Your crimemates are about to light it up. Don't be the one who walked out before the lights came on.",
        "Your crimemates are about to make this faction legendary. Legends remember who was there. Be there.",
        "Your crimemates are about to make your faction's best move. Don't be the reason it's their worst night.",
        "Your crimemates are about to need you and you're trying to not be there. That says everything.",
        "Your crimemates are about to prove this faction's worth. Prove yours. Proof: don't leave.",
        "Your crimemates are all firing on all cylinders. Fire on your cylinders. Your cylinders are here, not at an airport.",
        "Your crimemates are all here for this. Be here for this.",
        "Your crimemates are all in like a Vegas high roller on a hot streak. Don't fold the fucking hand now.",
        "Your crimemates are all in the right place. Get in the right place. The right place is here.",
        "Your crimemates are all in. Folding right now would be the single most embarrassing thing you've ever done in this game.",
        "Your crimemates are all in. Pot committed. You want to fold right before the river card. Absolutely not.",
        "Your crimemates are all locked in. Be the last lock. Close and stay.",
        "Your crimemates are all playing the same game. Play the game. The game is here.",
        "Your crimemates are all present and accounted for except you. Present yourself. Account for yourself. Stay.",
        "Your crimemates are banking on you. Don't be an overdraft.",
        "Your crimemates are battle-hardened and ready. Pick up a weapon and join them. Figuratively. Stay.",
        "Your crimemates are cashing in months of hard work tonight. You don't get to cash out early.",
        "Your crimemates are charging toward the finish. Charge with them. Charge from here.",
        "Your crimemates are committed to each other and to this OC. Commit to them. That means staying.",
        "Your crimemates are committed to the mission. Commit to the mission. Missions need all agents.",
        "Your crimemates are committed to the outcome. Commit to being where the outcome happens.",
        "Your crimemates are committed to the outcome. Commit to being where the outcome is determined.",
        "Your crimemates are counting on you like oxygen. Don't suffocate them. Stay.",
        "Your crimemates are depending on the roster to hold. You are part of the roster. Hold.",
        "Your crimemates are doing the work. Do the work. The work is being here.",
        "Your crimemates are executing a plan that accounts for your presence. Account for your own presence. Stay.",
        "Your crimemates are executing at full power. Be any percentage of power. Be present.",
        "Your crimemates are executing flawlessly. Be flawlessly present. That's the only flawless required of you.",
        "Your crimemates are executing something your faction will talk about for months. Be in that story.",
        "Your crimemates are executing the game plan. You are in the game plan. Execute.",
        "Your crimemates are executing the plan and you're trying to execute your right to be completely useless.",
        "Your crimemates are executing with discipline. Discipline yourself to stay.",
        "Your crimemates are executing with everything they have. Execute with what you have. You have the ability to stay.",
        "Your crimemates are firing and ready. Fire and be ready. Be ready here.",
        "Your crimemates are fully committed. Commit to something. Commit to the next sixty minutes. Stay.",
        "Your crimemates are fully committed. You're halfway out the door. That gap is the whole problem. Close it.",
        "Your crimemates are giving it everything they've got. Give everything you've got. Start with your location.",
        "Your crimemates are giving it their full commitment. Give it your minimal commitment. Minimal means staying.",
        "Your crimemates are giving the OC everything. Give the OC your location. Here.",
        "Your crimemates are giving this everything. Give it something. Give it your presence.",
        "Your crimemates are giving this their full commitment. Your full commitment is the minimum required. Give it.",
        "Your crimemates are grinding to the wire. Grind with them. From here. Without leaving.",
        "Your crimemates are in it for the long haul. Haul yourself back from the travel page and commit.",
        "Your crimemates are in lockstep. Get in step. Lock in. Stay.",
        "Your crimemates are locked and ready. Get locked. Get ready. Do it here.",
        "Your crimemates are locked in and committed. Lock in. Commit. Here.",
        "Your crimemates are locked in and executing. You're browsing. There is one acceptable response to that asymmetry: stop browsing.",
        "Your crimemates are locked in and logged on and you're trying to log off permanently. Not today.",
        "Your crimemates are locked in for the finish. Lock in with them. Stay.",
        "Your crimemates are locked in for the long game. Play the long game with them.",
        "Your crimemates are locked in like guided missiles and you're trying to fly commercial in the opposite direction.",
        "Your crimemates are locked in tighter than a pickle jar and you're trying to unscrew yourself from the plan.",
        "Your crimemates are looking at the roster right now and hoping your name isn't about to be the problem. Don't be the problem.",
        "Your crimemates are making their move. Make your move. Your move is staying.",
        "Your crimemates are operating on trust and discipline. Apply both. Trust that staying is right. Discipline yourself to do it.",
        "Your crimemates are out here loading weapons and you're trying to catch a flight? Sit your ass down before I sit it down for you.",
        "Your crimemates are poised and ready. Poise yourself. Be ready. Be here.",
        "Your crimemates are pouring it all out for this OC. Show up to catch some of it.",
        "Your crimemates are putting everything on the line and you want to draw a line at the departure gate.",
        "Your crimemates are ready to blow this thing wide open and you want to blow your only chance to matter.",
        "Your crimemates are relying on the roster being complete. Complete the roster. Stay.",
        "Your crimemates are riding this wave all the way to shore and you want to bail off the board early.",
        "Your crimemates are running at full capacity and they need you at any capacity. Any. Be at some capacity. Here.",
        "Your crimemates are running out of grace for your particular pattern of behavior. Break the pattern. Tonight.",
        "Your crimemates are running the play. Run the play. The play involves you being here.",
        "Your crimemates are showing up for each other. Show up for them. It's your turn.",
        "Your crimemates are showing up in full force and you want to show up as a no-show. Rethink that.",
        "Your crimemates are the reason this faction functions. Be a reason, not a drain.",
        "Your crimemates are tightening up for the final push. You need to tighten up too. Starting with closing that tab.",
        "Your crimemates are trusting the plan. Trust the plan. The plan involves you being here.",
        "Your crimemates are trusting the system to work. You are part of the system. Work.",
        "Your crimemates aren't asking for perfection. They're asking for presence. That's the lowest possible ask. Meet it.",
        "Your crimemates built something here. Don't be the thing that knocks it over on the way out the door.",
        "Your crimemates deserve a partner who shows up. Be that. Close the tab and grow a spine.",
        "Your crimemates deserve your best. Tonight your best is just showing up. Manage that.",
        "Your crimemates didn't bleed for this OC so you could go soak up sun somewhere. Plant your feet.",
        "Your crimemates didn't bust their ass to get to this point so you could bust out of the country.",
        "Your crimemates didn't drag this OC across the finish line just for you to faceplant on the way out the door.",
        "Your crimemates didn't get their hands dirty for you to keep yours clean on a beach chair.",
        "Your crimemates didn't get this far by being flaky little deserters. Take notes. Stay put.",
        "Your crimemates didn't go through all this for you to clock out right before the punchline.",
        "Your crimemates didn't hustle this hard for you to walk out the door right before payday.",
        "Your crimemates didn't put in all this work so you could go play grab-ass on a beach somewhere warm.",
        "Your crimemates don't need words. They don't need apologies. They need a warm body with your name on it. Be that.",
        "Your crimemates fought to get this OC to the starting line. Don't trip on the way to the finish.",
        "Your crimemates have been all gas, no brakes on this OC. Don't be the brakes.",
        "Your crimemates have been building toward this like pros. Be a pro. Stay.",
        "Your crimemates have been consistent. Be consistent. Just once. Starting right now.",
        "Your crimemates have been doing the heavy lifting. Grab a corner. Stay.",
        "Your crimemates have been eating, sleeping, and bleeding this OC. You're out here breathing recycled airplane air. No.",
        "Your crimemates have been grinding harder than a 3am closing time and you want to tap out now. Disgusting.",
        "Your crimemates have been grinding since before you were paying attention. Pay attention now. Stay.",
        "Your crimemates have been holding down the fort. Reinforce the fort. Don't abandon it.",
        "Your crimemates have been patient, professional, and prepared. Be one of those three things. Be prepared to stay.",
        "Your crimemates have been professional, dedicated, and long-suffering. Return two of those three. At minimum, be dedicated tonight.",
        "Your crimemates have been running this operation with the precision of surgeons. You're out here being the infection.",
        "Your crimemates have been the backbone of this faction while you've been the funny bone — occasionally useful, mostly just painful.",
        "Your crimemates have been the constant in every equation. Be a constant tonight. Stay.",
        "Your crimemates have been your team. Be their teammate. Teammates don't vanish before the big game.",
        "Your crimemates have earned a complete team for this OC. Complete the team.",
        "Your crimemates have earned a full roster tonight. Fill your spot on the roster.",
        "Your crimemates have earned this moment through sacrifice. Show up to honor the sacrifice.",
        "Your crimemates have earned this moment. You've earned nothing. Participate anyway. They need the body count.",
        "Your crimemates have earned tonight through work you didn't fully contribute to. Contribute now. Stay.",
        "Your crimemates have extended you courtesy after courtesy. Tonight they need execution. Execute.",
        "Your crimemates have operated around your gaps and flaws for long enough. Fill one gap. Stay for this OC.",
        "Your crimemates have put faith in you that you haven't fully earned. Start earning it. Tonight. Here.",
        "Your crimemates have put their credibility on the line for you before. Tonight they need you to put yours on the line for them.",
        "Your crimemates have skin in the game. Get some skin in the game. Stay.",
        "Your crimemates have their game faces on. Put yours on too. Starting with closing the travel page.",
        "Your crimemates have their heads in the game. Get your head in the game. Your head belongs here.",
        "Your crimemates have your back in every situation. Have theirs in this one. Just this one. Stay.",
        "Your crimemates have your back in this game. Have theirs by being present when the game is live.",
        "Your crimemates have your back when it counts. Tonight it counts. Have theirs.",
        "Your crimemates have zero patience left for your disappearing act. Do not perform it.",
        "Your crimemates have zero tolerance left for your particular brand of nonsense. Tonight, don't bring the nonsense.",
        "Your crimemates know exactly who you are. They invited you anyway. Honor that.",
        "Your crimemates need a body, a pulse, and a commitment to not fleeing. You have two of those. Find the third.",
        "Your crimemates need you to be functional, present, and reliable for approximately the next hour. That's all. You can do an hour.",
        "Your crimemates need you to be someone they can count on. You've been someone they can barely tolerate. Change that.",
        "Your crimemates rehearsed for this. Your faction strategized for this. You apparently planned to skip it entirely.",
        "Your crimemates trained for this exact moment. Were you even training? Doesn't matter. Show up anyway.",
        "Your faction built a roster. The roster requires participants. Participate.",
        "Your faction built something real and you're trying to walk away from it before it pays off.",
        "Your faction built something. Don't be the thing that breaks it.",
        "Your faction built this OC around having you available. Surprise them by actually being available.",
        "Your faction built this OC brick by brick and you want to be the brick that goes AWOL. Don't.",
        "Your faction deserves a full send. Not a half-assed departure from someone with commitment issues.",
        "Your faction didn't build this OC around a hole where you used to be. Fill it.",
        "Your faction didn't build you up for months so you could fold like a lawn chair the second the sun gets hot.",
        "Your faction didn't carry your dead weight this far to watch you sprint toward an airport.",
        "Your faction didn't come this far to watch you swan dive into irrelevance from the fucking travel page.",
        "Your faction didn't negotiate, plan, and sacrifice so you could be mysteriously unavailable when it matters.",
        "Your faction didn't recruit a backup plan. They recruited you. Be you. Not the version that bails.",
        "Your faction didn't recruit a quitter. They recruited you. Don't turn those into the same thing.",
        "Your faction didn't recruit a travel blogger. They recruited a criminal. Act like one.",
        "Your faction didn't sign up to get screwed without dinner. Don't leave them hanging like this.",
        "Your faction didn't survive this long by letting members bail before OCs. Don't be the first.",
        "Your faction doesn't need a perfect version of you. They need a present version. Show up.",
        "Your faction doesn't need a superhero. They need a warm body that doesn't flee. Be that.",
        "Your faction gave you a seat at the table. Don't push the chair back and leave mid-meal.",
        "Your faction has a gap where you're supposed to be. Fill the gap. Gaps don't fill themselves.",
        "Your faction has absorbed your nonsense with grace. That grace has an expiration date. It's tonight.",
        "Your faction has been building to this. You've been building to this. Don't bail at the summit.",
        "Your faction has been carrying dead weight. Be living weight. Be useful. Be here.",
        "Your faction has been patient with your nonsense for a long time. You are tap-dancing on the last nerve.",
        "Your faction has done everything right. Don't be the one thing that goes wrong.",
        "Your faction has everything it needs. Including you. Especially you. Keep it that way. Stay.",
        "Your faction has exactly zero use for a member who's physically somewhere else right now. Be here.",
        "Your faction has faith in you. That faith is currently being stress-tested by your proximity to the travel page.",
        "Your faction has faith that borders on irrational given your track record. Reward that faith for once.",
        "Your faction has given you more rope than you've deserved and you keep trying to use it to hang them with. Stop.",
        "Your faction has invested in you and received remarkably poor returns. Today is a chance to start paying dividends.",
        "Your faction has one ask of you tonight. One. And it's the lowest possible bar. Don't trip over it.",
        "Your faction has one request: be present. Honor the one request.",
        "Your faction has operated around your absences before. Tonight there's no operating around it. Fill the gap.",
        "Your faction has propped you up and covered for you more times than anyone should have to. Return the favor. Stay.",
        "Your faction has too much riding on tonight for one person's wanderlust to derail it. Don't derail it.",
        "Your faction has your back. The least you can do is have theirs. Stay.",
        "Your faction invested in you and you want to divest right before the stock peaks. Hold your goddamn position.",
        "Your faction is a contract. You signed it. Contracts don't have 'unless I feel like leaving' clauses.",
        "Your faction is a crew. Crews don't work when one person decides they'd rather be on vacation.",
        "Your faction is a machine that requires all its parts. You're a part. Function.",
        "Your faction is a machine. You're a cog. Cogs don't get up and wander off. Stay in the machine.",
        "Your faction is a symphony in the final movement and you want to be the musician who packs up early. Disgraceful.",
        "Your faction is a team of people who've decided to trust each other. Don't be the reason that trust was misplaced.",
        "Your faction is a team that wins together. Win together. Together requires you being here.",
        "Your faction is a unit and you're trying to be a loose cannon that rolls off the ship. Stay on the ship.",
        "Your faction is a unit that requires all its units. Be a unit. Units don't leave mid-operation.",
        "Your faction is a well-oiled machine and you're the sand someone threw in the gears. Stop being sand.",
        "Your faction is about to cook something legendary and you want to leave before the meal hits the table.",
        "Your faction is about to do something legendary and you're trying to be elsewhere for it. That's weaponized stupidity.",
        "Your faction is about to execute something that will define their season. You're about to define yourself. Choose carefully.",
        "Your faction is about to find out if you're worth keeping. Give them a good answer.",
        "Your faction is about to find out what you're made of. Make sure it's not disappointment and airline miles.",
        "Your faction is about to make something happen. Be part of the something.",
        "Your faction is about to write one of its best stories. Be a character in it, not the one who didn't show.",
        "Your faction is asking for one thing. One. Don't leave. Honor the one thing.",
        "Your faction is at the edge of something. Don't push it off that edge by being absent. Pull it back. Stay.",
        "Your faction is counting heads. Make sure yours is one of them.",
        "Your faction is counting on a specific number of people being ready. Be the specific number.",
        "Your faction is depending on a body count and you're trying to subtract from it. Add to it instead.",
        "Your faction is depending on you to not be the version of yourself that always finds a reason to disappear. Don't be that version.",
        "Your faction is doing something that matters. Be part of something that matters.",
        "Your faction is executing a plan that required you to be present. Be present.",
        "Your faction is executing at a level you've never reached. The least you can do is stand next to it.",
        "Your faction is executing its most important operation. Be part of the execution.",
        "Your faction is going all in on this OC. Match the energy or get out of the way — but first, stay.",
        "Your faction is hot right now and you want to cool things off by being completely absent. Don't.",
        "Your faction is in execution mode. Execute. The execution is staying and doing your job.",
        "Your faction is locked, loaded, and lethal. Be one of those three things. Start with present.",
        "Your faction is on the edge of something great and you're on the edge of being the worst member they've ever had.",
        "Your faction is one committed teammate away from everything going right. Be that teammate.",
        "Your faction is one competent member short of perfection. You're that member. Be competent. Stay.",
        "Your faction is one OC away from something significant. Don't be the speed bump.",
        "Your faction is one smooth operation away from glory and you want to be a wrench in the gears.",
        "Your faction is one warm body short of a perfect crime right now and that body is yours, you useless deserter.",
        "Your faction is operating at maximum capability and needs you operating at any capability. Operate. Here.",
        "Your faction is peak performance right now and you want to be peak absent. Disrespectful.",
        "Your faction is primed and ready and you're sitting here fondling the travel page like it owes you something.",
        "Your faction is primed for success. Be part of the priming. Stay primed. Stay here.",
        "Your faction is primed to execute. Be part of the execution. Executions require all participants.",
        "Your faction is pulling off a heist and you're trying to pull off a disappearing act like a cowardly little shit.",
        "Your faction is running on fumes of patience with you specifically. Don't drain the last drop.",
        "Your faction is sweating bullets and you're trying to dodge them by leaving the country. Coward.",
        "Your faction is this close to glory and you want to be this close to a departure gate. Pick glory.",
        "Your faction is this close to pulling off something legendary and you want to be legendarily absent. No.",
        "Your faction is three steps from something great and you're trying to be a hundred miles from all of it.",
        "Your faction is tightening up for the final push. Tighten up with them. Don't loosen by leaving.",
        "Your faction lead didn't sign you up to be a ghost. Stop haunting the edges and get in the fight.",
        "Your faction lead has been patient with you in ways that deserve a medal. Don't make the medal meaningless.",
        "Your faction lead is going to have opinions about this. Strong ones. Give them the right ones to have.",
        "Your faction lead vouched for you when others didn't. That voucher is being redeemed tonight. Don't bounce it.",
        "Your faction leader has a very specific face they make when you pull this kind of thing. You know the face. Don't make them make it.",
        "Your faction leader is already rage-typing your removal and you're making it easier by the second.",
        "Your faction made a plan. You're in the plan. Plans don't have opt-out clauses. Stay.",
        "Your faction needs a closer. Be the fucking closer. Stay and close this thing out properly.",
        "Your faction needs a complete team. Teams are only complete when everyone is present. Be present.",
        "Your faction needs a full squad tonight. You're part of the squad. Show up like it.",
        "Your faction needs a reliable partner right now. Be that. Close the travel page.",
        "Your faction needs all hands on deck. Hands on deck. Now. Including yours.",
        "Your faction needs bodies more than it needs excuses. You have a body. Donate it to the cause.",
        "Your faction needs every available piece in place before this thing fires. You're a piece. Get in place.",
        "Your faction needs every single piece in place. You're a piece. Get in place.",
        "Your faction needs warm bodies and yours is currently trying to board a plane. Ground it.",
        "Your faction needs you exactly where you are. Don't move. Stay exactly where you are.",
        "Your faction needs you exactly where you are. Not anywhere else. Exactly here. Stay exactly here.",
        "Your faction needs you here. Not in Mexico. Not in Japan. Not in the UAE. Here.",
        "Your faction needs you to be a net positive. Leaving makes you a net negative. Do the math.",
        "Your faction needs you to be a present, functional, non-fleeing member for approximately one OC window. You've got this.",
        "Your faction needs your name on the active list. Keep your name on the active list. Stay active. Stay.",
        "Your faction operates as a unit. A unit has no use for a component that tries to leave mid-operation. Stay.",
        "Your faction operates on the assumption that everyone shows up. You're the asterisk on that assumption. Remove the asterisk.",
        "Your faction operates on trust. You've been overdrawn on that account for months. Don't bounce another check.",
        "Your faction put a ring on this OC and you're out here swiping on travel apps like a cheating bastard.",
        "Your faction put blood, sweat, and Torn energy into this OC. You're about to piss on all three. Don't.",
        "Your faction put everything into tonight. Put yourself into tonight.",
        "Your faction put in the foreplay. You owe them the finish. Don't be the guy who leaves early every time.",
        "Your faction put their ass on the line for this OC and you want to put yours on a beach chair. No.",
        "Your faction put you in the lineup. Lineups play. Play.",
        "Your faction put you on the roster, not on a travel itinerary. Stay.",
        "Your faction recruited what they thought was an asset. You've been a liability from day one. Prove them wrong. Stay.",
        "Your faction runs tight ships. You've been the leak. Patch yourself. Stay.",
        "Your faction runs tight. You've been the loose thread. Tonight, don't unravel anything. Stay.",
        "Your faction sees you on the travel page right now and they are not fucking impressed.",
        "Your faction spent weeks building this OC around the assumption you'd show up. Prove that assumption wasn't catastrophically wrong.",
        "Your faction trusted you with a role in this OC. You should be embarrassed that this script had to stop you.",
        "Your faction trusted you with a slot in this operation. Slots have names. Your name is on one. Fill it.",
        "Your faction worked for months to get here. The least you can do is work for the next hour.",
        "Your faction worked hard to set this OC up. Don't be the wet blanket that suffocates it right before ignition.",
        "Your faction worked themselves raw for this OC and you want to just leave? Grow a fucking spine.",
        "Your faction's clock is ticking. Spend the time you have left in the right place.",
        "Your faction's credibility is built on everyone showing up. Contribute to the credibility. Show up.",
        "Your faction's credibility is on the line with this OC. Yours has been on the line for a while. Shore it up. Stay.",
        "Your faction's credibility is on the line. Your credibility is on the line. Save both. Stay.",
        "Your faction's endgame is right here right now. End somewhere else and you miss the game entirely.",
        "Your faction's faith in you is hanging by a thread. You're holding scissors. Put them down.",
        "Your faction's group chat is already typing your eulogy. Do NOT make them finish that message.",
        "Your faction's investment in you is about to pay off or wash out. Make it pay off.",
        "Your faction's margin for error is zero right now. You are not zero margin. You're negative. Fix it by staying.",
        "Your faction's moment is arriving and they need everyone present for it. Everyone includes you.",
        "Your faction's moment is now. Your moment to not be a disappointment is also now. Align them.",
        "Your faction's moment is right now. Your moment to not blow it is also right now. Use them both.",
        "Your faction's moment of truth is right now. Tell the truth. The truth is you're staying.",
        "Your faction's narrative tonight is either 'we all showed up' or 'everyone except that one person.' Don't be that person.",
        "Your faction's next message to you is either 'great job' or 'you're out.' Your call.",
        "Your faction's OC doesn't need perfection from you. It needs presence. Give it presence.",
        "Your faction's OC has a very specific need: you, here, now. Meet the need.",
        "Your faction's OC is a commitment they made together. Honor the commitment you made when you joined.",
        "Your faction's OC is live and active and needs you. Be live, active, and available.",
        "Your faction's OC needs everyone in the room. Get in the room.",
        "Your faction's OC needs you like a car needs wheels. You can't roll without wheels. Don't make the faction a wheelless car.",
        "Your faction's OC slot with your name on it is either filled or empty. Fill it.",
        "Your faction's OC window is closing faster than your chances of being forgiven if you bail right now.",
        "Your faction's operation is a machine. Machines don't work when parts go missing. Don't go missing.",
        "Your faction's operation is dependent on everyone doing their part. Your part is being here. Be here.",
        "Your faction's operation is running. Run with it. From here.",
        "Your faction's operation is timed to the minute. Don't waste their minutes by forcing a recount.",
        "Your faction's operation needs everyone present and accounted for. Present and account for yourself. Stay.",
        "Your faction's patience has been extraordinary given your history. Don't exhaust the last of it tonight.",
        "Your faction's patience is renewable. Your reputation isn't. Stay.",
        "Your faction's patience with you is a renewable resource that is running dangerously close to empty.",
        "Your faction's plan has your name in it. Don't cross your name out.",
        "Your faction's plan is airtight except for the part where you're browsing travel pages. Fix that part.",
        "Your faction's play is in motion. Stay in motion with it. In the right direction. Here.",
        "Your faction's play is in progress. Don't stop the play. Run it with them.",
        "Your faction's success rate is about to drop by exactly one idiot if you click that button.",
        "Your faction's success story tonight either has you in it or it has you as the cautionary footnote. Choose.",
        "Your faction's success tonight has your name built into the foundation. Don't pull a foundation block.",
        "Your faction's success tonight is directly tied to you not being somewhere else. Don't be somewhere else.",
        "Your faction's trust in you is an ongoing experiment. Tonight the results come in. Make them positive.",
        "Your faction's trust is a finite resource and you are running it dangerously low. Stop drawing from it. Stay.",
        "Your faction's window closes soon. Close the travel tab instead.",
        "Your faction's window for this OC is measured in minutes. Don't use those minutes to check departure times.",
        "Your faction's window is closing. Windows that close don't reopen on your schedule. Go through it now.",
        "Your faction's window is measured in minutes. Spend those minutes here, not at a departure gate.",
        "Your flight is a physical manifestation of your failure as a teammate.",
        "Your OC slot has your name on it. Not a placeholder. Yours. Be there.",
        "Your OC slot isn't a suggestion. It's a responsibility. Honor it or enjoy the walk of shame out of the faction.",
        "Your passport is not more important than your faction's success. Put it away.",
        "Your reputation in this game is whatever you do in the next few minutes. Choose accordingly.",
        "Your wandering spirit is admirable. Your timing is catastrophic. Stay.",
        "You're a blight on the roster. Stay and be useful for once in your digital life.",
        "You're a criminal mastermind, apparently, except for the part where you manage your own schedule.",
        "You're a key piece of this OC. Act like one instead of a runaway puzzle piece.",
        "You're about to be the reason this OC goes sideways. Your faction will never let you forget it. Never.",
        "You're about to ghost your faction harder than a bad Tinder date who borrowed money. Don't.",
        "You're about to make a decision you'll spend a long time explaining in faction chat.",
        "You're about to screw over your entire faction. And not in the fun, consensual way.",
        "You're about to trade your faction's respect for a souvenir. Is it worth it?",
        "You're acting like someone who calls in sick on the day of the big presentation they helped build. Gutless. Stay.",
        "You're acting like the guy who leaves a party right before it gets legendary. Stick around, dipstick.",
        "You're acting like the intern who leaves at 4:59 on the most important day of the fiscal year. Don't.",
        "You're giving off 'I'll just pop out for milk' energy and everyone knows that's never just milk. Stay.",
        "You're giving off serious 'I'll pull out before it matters' energy right now. We both know how that ends. Stay.",
        "You're giving your entire faction blue balls right now. Finish what you started, for everyone's sake.",
        "You're giving your faction the same energy as someone who RSVPs yes and cancels via text at midnight. You said yes.",
        "You're not a bad person. You're just consistently, reliably, predictably useless at the wrong moments.",
        "You're not a free agent. You're a faction member. Act like it.",
        "You're not a free spirit. You're a liability with a passport. Put it down.",
        "You're not a lone wolf. You're part of a pack. Packs don't ditch each other.",
        "You're not a traveler. You're a flight risk that needs to be sat down.",
        "You're not big enough to be this entitled. Stay in your lane.",
        "You're not Indiana Jones. You don't need to go anywhere. Stay.",
        "You're not just leaving — you're leaving your crew holding the bag. Classy.",
        "You're not 'taking a break,' you're actively kneecapping your team. Sit the fuck down.",
        "You're one bad decision away from becoming the villain of your own faction story.",
        "You're one selfish tap away from destroying every ounce of goodwill you've built in this faction.",
        "You're out here acting like this OC is someone else's problem. It's not. It's yours. Own it.",
        "You're out here auditioning for 'worst teammate of the year' and you're absolutely nailing the audition. Stop.",
        "You're out here flirting with the departure board like it's going to buy you a drink. It's not. Stay.",
        "You're out here shopping for flights like a man in a midlife crisis. Put the metaphorical motorcycle down.",
        "You're out here trying to ghost your faction mid-heist. That's not a vibe, that's a capital offense.",
        "You're out here trying to make like a tree and leave. Trees don't leave. They stay rooted. Be a tree.",
        "You're playing a team sport and you're trying to leave at halftime. Unacceptable.",
        "You're the Judas of this OC and you haven't even left yet. Close. The. Tab.",
        "You're the kind of person who leaves before the check comes and lets everyone else split your portion.",
        "You're the reason people hate joining factions with randoms. You specifically. You're the reason.",
        "You're treating this OC like fine print at the bottom of a contract you didn't read. It matters. Stay.",
        "You're treating this OC like optional extra credit. It's the final exam, asshole. Show the fuck up.",
        "You're treating your faction like a booty call you can leave right after. They deserve better than your flaky ass.",
        "You're treating your faction like a one-night stand you're trying to sneak away from. They're awake. They see you.",
        "You're treating your faction like a subscription service you forgot to cancel. They notice. They're pissed.",
        "You're treating your faction's trust like a carry-on you keep forgetting to bring. Bring it. Stay.",
        "You're trying to be elsewhere for the most important moment your faction has seen in a while. Choose better.",
        "You're trying to be the one that got away from your faction mid-operation. That's not romantic. That's desertion.",
        "You're trying to dip out like a one-night stand who heard a car in the driveway. Your faction sees you. Stay.",
        "You're trying to disappear faster than a one-pump chump who hears footsteps. Embarrassing. Stay.",
        "You're trying to Irish exit your own faction's biggest moment. They will find out. They always find out.",
        "You're trying to leave like a magician — now you see me, now you don't. Your faction is not impressed by the trick.",
        "You're trying to opt out of the one thing you were specifically signed on for. That's not confusion. That's betrayal.",
        "You're trying to opt out of your own commitments again. This faction is tired of renegotiating with you. Stay.",
        "You're trying to pull a Houdini on your faction right before the trick lands. No escaping. Stay.",
        "You're trying to sneak out of your own faction's big moment like a guy sneaking out of consequences he created.",
        "You've been a half-committed member of a fully committed faction for too long. Fully commit. Tonight.",
        "You've been a liability on paper. Tonight, get off paper and get in the game. Stay.",
        "You've been a liability so long it's practically your job title. Change your job title. Stay.",
        "You've been a liability, a wildcard, and a headache. Tonight you can be none of those things. Just stay.",
        "You've been a passenger in this faction for too long. Tonight you're required to be a driver. Stay and drive.",
        "You've been a problem this faction has been solving around. Tonight, stop being the problem.",
        "You've been a problem this faction has chosen to keep. Don't make them regret that choice tonight.",
        "You've been a question mark in this faction's plans. Answer the question. With your presence.",
        "You've been a recurring error in this faction's system. Tonight, debug yourself. Stay.",
        "You've been a recurring headache for this faction. Tonight, be the aspirin.",
        "You've been a theoretical asset in this faction for too long. Be a practical one. Practically, that means staying.",
        "You've been a thorn in productivity before but this is a new low even for you. Stay.",
        "You've been absent when it mattered before. You know how that story ends. Write a different ending this time.",
        "You've been an inconsistency in this faction's formula. Tonight the formula needs to balance. Stay and balance it.",
        "You've been borrowing credibility from this faction for months. The loan is due. Pay it back by staying.",
        "You've been carried by this faction longer than you'd like to admit. Carry your goddamn weight for once.",
        "You've been circling the drain of this faction's patience for a while now. Stop swimming toward it.",
        "You've been coasting in this faction for a while now. Tonight you pedal. Stay and pedal.",
        "You've been coasting on 'potential' for too long. Potential doesn't complete OCs. Presence does.",
        "You've been given chance after chance to be a real part of this faction and right now you're blowing another one.",
        "You've been on thin ice with this faction for longer than anyone's told you. Tonight's ice is thinner.",
        "You've been skating by in this faction on goodwill and others' hard work. The bill is due. Pay it by staying.",
        "You've been the asterisk on this faction's roster long enough. Tonight, be the headline.",
        "You've been the black hole of this faction's energy. Give some back. Start by staying for the OC.",
        "You've been the faction chaos gremlin for too long. Put the chaos down. Pick up your OC responsibilities.",
        "You've been the faction footnote for too long. Be the headline. The headline tonight is 'everyone showed up.'",
        "You've been the faction liability for long enough. Liabilities get cut. Don't force the cut. Stay.",
        "You've been the faction member everyone has to plan around. Tonight, be the one they plan with. Stay.",
        "You've been the faction member everyone silently accommodates. Tonight there's no accommodation available. Show up.",
        "You've been the faction member people apologize for. Stop being someone people apologize for. Stay.",
        "You've been the faction member that everyone mentally assigns a replacement for. Make the replacement unnecessary.",
        "You've been the faction member that everyone whispers about. Give them something different to whisper. Stay and deliver.",
        "You've been the faction member that exists in quotation marks. Exist for real. Tonight. Here.",
        "You've been the faction member that makes recruiters question their judgment. Make them feel vindicated. Stay.",
        "You've been the faction member that people hope shows up. Show up. Stop making them hope.",
        "You've been the faction member who always has somewhere else to be. Tonight you don't. You're here. Stay here.",
        "You've been the faction member who needs to be managed. Tonight, manage yourself. Manage yourself onto the team. Stay.",
        "You've been the faction question that nobody wants to ask out loud. Answer the question before it's asked. Stay.",
        "You've been the faction wild card. Wild cards are unpredictable. Predict your own decision. Stay.",
        "You've been the faction's background drama. Be foreground support tonight. Support looks like staying.",
        "You've been the faction's background noise. Tonight become foreground signal. Signal: staying.",
        "You've been the faction's constant question mark. Punctuate yourself correctly. End with a period. Stay.",
        "You've been the faction's dirty little secret: the member everyone accommodates but nobody trusts. Change the trust part.",
        "You've been the faction's flighty member for long enough. Ground yourself. Tonight. Here.",
        "You've been the faction's floating variable. Anchor yourself. The anchor is staying.",
        "You've been the faction's gamble that hasn't paid off yet. Pay off. Tonight. Here.",
        "You've been the faction's lingering problem. Stop lingering and stop being a problem. Stay.",
        "You've been the faction's margin of error. Tonight there is no margin of error. Stay.",
        "You've been the faction's maybe. Tonight there is no maybe. There is only yes. Say yes. Stay.",
        "You've been the faction's missing piece. Stop missing. Be present. Be the piece.",
        "You've been the faction's most unpredictable element. Be predictably present for once.",
        "You've been the faction's ongoing concern. Resolve the concern. Be here.",
        "You've been the faction's open question. Close the question. The answer is staying.",
        "You've been the faction's open wound. Close up. Healing starts with staying.",
        "You've been the faction's passive member. Be active. Activity starts with staying.",
        "You've been the faction's perpetual 'maybe.' Tonight there is no maybe. There is only here or gone. Be here.",
        "You've been the faction's perpetual project. Projects eventually get finished or abandoned. Finish yourself. Stay.",
        "You've been the faction's problem child long enough. Grow up. Tonight. Here.",
        "You've been the faction's recurring complication. Uncomplicate things. Stay for the OC.",
        "You've been the faction's recurring nightmare. Tonight, be the dream: someone who shows up when it counts.",
        "You've been the faction's recurring problem. Recur differently. As a solution. Tonight.",
        "You've been the faction's repeated headache. Take your own aspirin. Stay and end the headache.",
        "You've been the faction's risk variable. Reduce the risk. Stay.",
        "You've been the faction's slow leak. Patch the leak. The patch is staying for this OC.",
        "You've been the faction's trailing edge. Lead from here. Lead by not leaving.",
        "You've been the faction's unanswered question. Answer it tonight. The answer is staying.",
        "You've been the faction's uncertainty. Be certain tonight. Certainty: you're staying.",
        "You've been the faction's unfinished business. Finish something. Start with staying.",
        "You've been the faction's unreliable narrator. Tonight the story needs reliable facts. The fact is: you stay.",
        "You've been the faction's unresolved issue. Resolve yourself. Resolution: stay for the OC.",
        "You've been the faction's weak link for too long. Links don't choose when to be strong. Be strong now.",
        "You've been the faction's weak spot. Strengthen the spot. Strength means presence.",
        "You've been the faction's weakest link enough times to have a pattern. Break the pattern. Tonight.",
        "You've been the friction in this faction's engine for too long. Be the grease tonight. Stay.",
        "You've been the margin-of-error problem in this faction's calculations for too long. Be the solution tonight.",
        "You've been the member this faction makes contingency plans for. Tonight there is no contingency. Be the plan.",
        "You've been the member this faction wonders about. Tonight, stop being the wondering. Be the certainty.",
        "You've been the problem in this faction's back pocket for too long. Tonight, be the solution.",
        "You've been the question mark in this faction's lineup for too long. Tonight you get to be an exclamation point. Stay.",
        "You've been the question no one wanted to answer in this faction. Tonight, answer it. Stay.",
        "You've been the splinter in this faction's hand for too long. Stop being a splinter. Stay.",
        "You've been the unpredictable element in this faction long enough. Be predictable tonight. Predictably present.",
        "You've been the unreliable chapter in this faction's story. Tonight, write something different.",
        "You've been the unreliable one for long enough that your faction has started assuming the worst. Prove them wrong. Stay.",
        "You've been the weakest link in enough chains. Be a strong link tonight. Just tonight.",
        "You've been the weakest link so many times it's practically your brand. Rebrand. Tonight. Stay.",
        "You've broken so many promises to this faction that they've started planning without you. Don't make them right.",
        "You've coasted on your faction's goodwill for so long you've forgotten it can run out. It's running out. Stay.",
        "You've ghosted responsibilities before. This is the one you don't get to ghost.",
        "You've got the attention span of a golden retriever on cocaine at an airport. Focus your ass up.",
        "You've got the attention to duty of a mall security guard. Step it up. This is an actual operation.",
        "You've got the battlefield courage of someone who signed up for combat and immediately requested desk duty.",
        "You've got the clutch performance of someone who freezes up every time the pressure is real. Unfreeze.",
        "You've got the commitment level of a New Year's resolution that didn't survive January. Push through.",
        "You've got the commitment of a deadbeat dad who shows up twice a year with cheap gifts. Stay for once.",
        "You've got the commitment of a politician on election night. Follow through for once.",
        "You've got the consistency of a wifi signal in a tunnel. Be consistent. Stay.",
        "You've got the dedication of a substitute teacher on the last day before summer. This isn't summer. Stay.",
        "You've got the discipline of a toddler left alone with cake. Show some restraint. Stay.",
        "You've got the focus of a man who just got a notification while doing something important. Ignore the notification. Stay.",
        "You've got the follow-through of a broken zipper at the worst possible moment. Pull it together.",
        "You've got the follow-through of a sneeze that never came. Finish the job. Stay.",
        "You've got the guts of a soggy paper bag. Firm up and stay.",
        "You've got the intestinal fortitude of a soap bubble in a thunderstorm. Toughen up and stay.",
        "You've got the last-minute bail energy of a bad date and your faction deserves better than a bad date.",
        "You've got the loyalty of a drunk one-night stand who steals cab money on the way out.",
        "You've got the loyalty of a fair-weather umbrella that inverts in the first gust. Don't fold.",
        "You've got the loyalty of a rental car and the timing of a flat tire on the highway. Stay.",
        "You've got the moral fiber of a napkin in a hurricane. Hold yourself together and stay.",
        "You've got the nerve to browse flights right now but apparently not the nerve to do your fucking job.",
        "You've got the operational awareness of a guy who shows up to a knife fight with a pool noodle. Sharpen up.",
        "You've got the operational commitment of someone who bought a gym membership, went once, and declared victory.",
        "You've got the presence of a ghost and the commitment of a rumor. Be real. Be here. Stay.",
        "You've got the reliability of a gas station condom at the worst possible moment. Step your game up.",
        "You've got the reliability of a used car lot warranty written in disappearing ink. Be better. Stay.",
        "You've got the reliability of a weather forecast in spring. Surprise everyone. Be reliable. Stay.",
        "You've got the self-awareness of a car alarm going off at 3am. Read the room. Stay.",
        "You've got the sense of obligation of someone who borrows money and blocks the number. Pay up. Stay.",
        "You've got the sense of timing of someone who laughs at a funeral. Read the situation. Stay.",
        "You've got the situational awareness of a drunk tourist and somehow worse timing. Focus.",
        "You've got the stamina of a politician's promise. Prove everyone wrong. Stay.",
        "You've got the staying power of a cheap sneeze. Hold it the fuck together.",
        "You've got the staying power of a wet paper bag in a hurricane. Dry out and hold it the fuck together.",
        "You've got the survival instincts of a lemming, except instead of a cliff it's your faction's trust you're running off.",
        "You've got the team spirit of a guy who shows up to the company picnic just for the free food then leaves.",
        "You've got the timing of a wet fart in an elevator right before your floor. Own it. Stay.",
        "You've got the work rate of a guy on his last week before retirement. You're not retiring. Get back to work.",
        "You've let this faction down in small ways many times. This would not be small. Don't do it.",
        "You've let your faction down enough times that it's become a personality trait. Time to develop a new one.",
        "You've run from commitment before. This one catches up to you if you run. Stay and face it.",
        "You've spent more energy looking for exits than contributing anything meaningful. Tonight, block the exit. Stay.",
        "You've spent so long being the chaos variable that you've forgotten you can be the stable one. Be stable. Stay.",
        "You've spent so long being the problem in this faction that you've forgotten you could be part of the solution.",
    ];

    // =========================================================
    // STORAGE HELPERS
    // =========================================================

    function loadApiKey() { return localStorage.getItem(LS_API_KEY) ?? null; }
    function saveApiKey(key) { localStorage.setItem(LS_API_KEY, key); }

    function loadCache() {
        try { return JSON.parse(localStorage.getItem(LS_OC_CACHE)) ?? null; }
        catch { return null; }
    }

    function saveCache(ocState) {
        const readyAt = ocState?.ready_at;
        if (readyAt && typeof readyAt === 'number' && readyAt > 0) {
            localStorage.setItem(LS_OC_CACHE, JSON.stringify({
                ready_at    : readyAt,
                executed_at : ocState.executed_at ?? null,
                saved_at    : Math.floor(Date.now() / 1000),
            }));
        } else {
            console.error('[OCFB] Attempted to save invalid OC state:', ocState);
        }
    }

    function isCacheValid(cache) {
        if (!cache?.saved_at) return false;
        const now = Date.now();
        const readyAtMs = (cache.ready_at ?? 0) * 1000;
        const ageMs = now - cache.saved_at * 1000;

        if (readyAtMs > now) return ageMs < CACHE_TTL_MS;
        if (cache.executed_at === null) return ageMs < PENDING_CACHE_TTL_MS;
        return false;
    }

    // =========================================================
    // IN-FLIGHT DETECTION
    // =========================================================

    function isInFlight() {
        return !!document.querySelector(IN_FLIGHT_SELECTOR);
    }

    // =========================================================
    // ROUND TRIP CALCULATOR
    // =========================================================

    function getRoundTripSeconds(targetBtn) {
        // Mobile: time element is inside the button
        // Desktop: time element is in the parent flight details grid
        const timeEl = targetBtn?.querySelector('time[datetime]')
        ?? document.querySelector('.flightDetailsGrid___zgPt_ time[datetime]');
        if (!timeEl) return 0;
        const match = timeEl.getAttribute('datetime').match(/(\d+)h\s*(\d+)m/);
        if (!match) return 0;
        const oneWaySeconds = (parseInt(match[1]) * 3600) + (parseInt(match[2]) * 60);
        return (oneWaySeconds * 2) + (LAYOVER_BUFFER_MIN * 60);
    }

    // =========================================================
    // OC API FETCH
    // =========================================================

    async function fetchOcState(apiKey) {
        const resp = await fetch(`${API_ENDPOINT}?key=${encodeURIComponent(apiKey)}`);
        if (!resp.ok) throw new Error(`API HTTP ${resp.status}`);
        const json = await resp.json();
        if (json.error) throw new Error(`API error: ${json.error.error ?? JSON.stringify(json.error)}`);
        const oc = json?.organizedCrime ?? {};
        const readyAt = oc.ready_at ?? null;
        if (readyAt === null) throw new Error('ready_at field not found in response');
        return {
            ready_at    : readyAt,
            executed_at : oc.executed_at ?? null,
        };
    }

    // =========================================================
    // API KEY VALIDATION
    // =========================================================

    async function validateApiKey(key) {
        try {
            const resp = await fetch(`${API_ENDPOINT}?key=${encodeURIComponent(key)}`);
            if (!resp.ok) return false;
            const json = await resp.json();
            return !json.error;
        } catch {
            return false;
        }
    }

    // =========================================================
    // UI: API KEY MODAL
    // =========================================================

    function showApiKeyModal(onSuccess) {
        document.getElementById('ocfb-modal')?.remove();
        const overlay = document.createElement('div');
        overlay.id = 'ocfb-modal';
        overlay.style.cssText = `
            position:fixed;inset:0;background:rgba(0,0,0,.65);
            display:flex;align-items:center;justify-content:center;
            z-index:99999;font-family:sans-serif;
        `;
        overlay.innerHTML = `
            <div style="background:#1e1e1e;color:#eee;border-radius:8px;padding:24px 28px;
                        width:340px;max-width:90vw;box-shadow:0 4px 24px rgba(0,0,0,.6);">
                <h3 style="margin:0 0 8px;font-size:16px;color:#f90;">${SCRIPT_NAME}</h3>
                <p style="margin:0 0 16px;font-size:13px;color:#bbb;">
                    Enter your Torn API key to continue.<br>
                    Requires at least <strong>Minimal</strong> access.
                </p>
                <input id="ocfb-key-input" type="text" placeholder="API key…"
                    style="width:100%;box-sizing:border-box;padding:8px 10px;border-radius:5px;
                           border:1px solid #555;background:#2a2a2a;color:#eee;font-size:13px;"/>
                <p id="ocfb-key-error" style="color:#f55;font-size:12px;margin:6px 0 0;min-height:16px;"></p>
                <div style="display:flex;justify-content:flex-end;margin-top:16px;">
                    <button id="ocfb-key-save" style="padding:7px 18px;border-radius:5px;border:none;
                        background:#f90;color:#111;font-weight:700;cursor:pointer;font-size:13px;">Save</button>
                </div>
            </div>
        `;
        document.body.appendChild(overlay);
        const input = overlay.querySelector('#ocfb-key-input');
        const errEl = overlay.querySelector('#ocfb-key-error');
        const btn   = overlay.querySelector('#ocfb-key-save');
        async function attempt() {
            const key = input.value.trim();
            if (!key) { errEl.textContent = 'Please enter a key.'; return; }
            btn.disabled = true;
            btn.textContent = 'Validating…';
            errEl.textContent = '';
            const valid = await validateApiKey(key);
            if (valid) {
                saveApiKey(key);
                overlay.remove();
                onSuccess(key);
            } else {
                errEl.textContent = 'Invalid key or API error. Try again.';
                btn.disabled = false;
                btn.textContent = 'Save';
            }
        }
        btn.addEventListener('click', attempt);
        input.addEventListener('keydown', e => { if (e.key === 'Enter') attempt(); });
        setTimeout(() => input.focus(), 50);
    }

    // =========================================================
    // UI: INSULT MODAL
    // =========================================================

    function showInsultModal(minsLeft) {
        document.getElementById('ocfb-insult-modal')?.remove();
        const overlay = document.createElement('div');
        overlay.id = 'ocfb-insult-modal';
        overlay.style.cssText = `
            position:fixed;inset:0;background:rgba(0,0,0,.85);
            display:flex;align-items:center;justify-content:center;
            z-index:99999;font-family:Verdana,Arial,sans-serif;
        `;
        overlay.innerHTML = `
            <div style="background:#1e1e1e;color:#eee;border-radius:12px;padding:30px;
                        width:380px;max-width:92vw;box-shadow:0 0 20px rgba(0,0,0,0.8);
                        text-align:center;border:1px solid #333;
                        display:flex;flex-direction:column;gap:25px;box-sizing:border-box;">
                <div>
                    <div style="color:#f90;font-size:30px;font-weight:bold;margin-bottom:8px;">Flight Blocked</div>
                    <div style="font-size:14px;color:#eee;font-weight:bold;">OC starts in ~${minsLeft} minutes</div>
                </div>
                <div style="border-top:1px solid #444;border-bottom:1px solid #444;
                            padding:25px 0;font-size:16px;line-height:1.5;color:#ccc;">
                    ${OC_INSULTS[Math.floor(Math.random() * OC_INSULTS.length)]}
                </div>
                <button id="ocfb-insult-close" style="background:#f90;color:#000;border:none;
                    padding:14px 0;width:100%;border-radius:4px;font-weight:bold;
                    cursor:pointer;font-size:16px;">Fine, I'll stay.</button>
            </div>
        `;
        document.body.appendChild(overlay);
        overlay.addEventListener('touchmove', e => e.preventDefault(), { passive: false });
        overlay.querySelector('#ocfb-insult-close').addEventListener('click', () => overlay.remove());
        setTimeout(() => overlay.querySelector('#ocfb-insult-close')?.focus(), 50);
    }

    // =========================================================
    // BLOCK / UNBLOCK HELPERS
    // =========================================================

    function applyBlockStyle(btn) {
        btn.dataset.ocfbBlocked = 'true';
        btn.style.outline = '2px solid #c0392b';
        btn.style.outlineOffset = '-2px';
        btn.addEventListener('click', handleBlockedClick, true);
    }

    function handleBlockedClick(e) {
        e.preventDefault();
        e.stopImmediatePropagation();
        const minsLeft = ocReadyAtCached
        ? Math.max(0, Math.floor((ocReadyAtCached - Math.floor(Date.now() / 1000)) / 60))
        : '??';
        showInsultModal(minsLeft);
    }

    function blockTravelButtons() {
        if (!isBlockingEnabled) return; // ADD THIS
        const secsUntilOc = Math.max(0, ocReadyAtCached - Math.floor(Date.now() / 1000));
        // Desktop expand/travel buttons
        document.querySelectorAll(BTN_SELECTOR).forEach(btn => {
            if (!btn.dataset.ocfbBlocked) applyBlockStyle(btn);
        });
        // Mobile Continue buttons inside expanded panels
        document.querySelectorAll('button.torn-btn.btn-dark-bg').forEach(btn => {
            if (btn.dataset.ocfbBlocked) return;
            const expandBtn = btn.closest('[aria-live]')
            ?.closest('[class*="destination"]')
            ?.querySelector('button[aria-controls^="travel-country"]');
            if (!expandBtn) return;
            const roundTrip = getRoundTripSeconds(expandBtn);
            if (roundTrip > 0 && roundTrip >= secsUntilOc) applyBlockStyle(btn);
        });
    }

    function restoreButtons() {
        document.querySelectorAll('[data-ocfb-blocked="true"]').forEach(btn => {
            delete btn.dataset.ocfbBlocked;
            btn.style.outline = '';
            btn.style.outlineOffset = '';
            btn.removeEventListener('click', handleBlockedClick, true);
        });
    }

    // =========================================================
    // CHECK AND BLOCK
    // =========================================================

    function checkAndBlock(ocReadyAt) {
        if (!isBlockingEnabled) return;
        if (isInFlight()) return;
        if (!ocReadyAt || ocReadyAt <= 0) return;
        ocReadyAtCached = ocReadyAt;
        const secsUntilOc = Math.max(0, ocReadyAt - Math.floor(Date.now() / 1000));
        // Desktop: check using grid time element
        const roundTrip = getRoundTripSeconds(null);
        if (roundTrip > 0) {
            if (roundTrip >= secsUntilOc) blockTravelButtons();
            else restoreButtons();
        }
        // Mobile has no grid time element — pointerdown/touchstart handles it
    }

    // =========================================================
    // EVALUATE
    // =========================================================

    async function evaluate(apiKey) {
        let cache = loadCache();

        if (!cache || !isCacheValid(cache)) {
            try {
                const ocState = await fetchOcState(apiKey);
                saveCache(ocState);
                cache = {
                    ready_at    : ocState.ready_at,
                    executed_at : ocState.executed_at ?? null,
                    saved_at    : Math.floor(Date.now() / 1000),
                };
            } catch (err) {
                console.error(`[OCFB] API fetch failed:`, err);
                if (!cache) return;
                console.warn(`[OCFB] Using stale cache.`);
            }
        }

        // Safety check: if after everything we still don't have a valid ready_at, abort
        if (!cache?.ready_at) return;

        if (cache.ready_at <= Math.floor(Date.now() / 1000) && cache.executed_at !== null) {
            restoreButtons();
            localStorage.removeItem(LS_OC_CACHE);
            return;
        }

        const ocReadyAt = cache.ready_at;
        checkAndBlock(ocReadyAt);
    }

    // =========================================================
    // TOGGLE
    // =========================================================

    function injectToggle() {
        if (!document.getElementById('ocfb-styles')) {
            const style = document.createElement('style');
            style.id = 'ocfb-styles';
            style.textContent = `
                .ocfb-switch{position:relative;display:inline-block;width:34px;height:18px;margin-left:10px;}
                .ocfb-switch input{opacity:0;width:0;height:0;}
                .ocfb-slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background:#888;transition:.4s;border-radius:18px;}
                .ocfb-slider:before{position:absolute;content:"";height:12px;width:12px;left:3px;bottom:3px;background:#fff;transition:.4s;border-radius:50%;}
                input:checked+.ocfb-slider{background:#c47a00;}
                input:checked+.ocfb-slider:before{transform:translateX(16px);}
            `;
            document.head.appendChild(style);
        }

        const savedState = localStorage.getItem(LS_TOGGLE_STATE);
        isBlockingEnabled = savedState === null ? true : (savedState === 'true');

        const headers = Array.from(document.querySelectorAll('h4,h3,.title,span'))
        .filter(el => el.textContent.includes('Travel Agency')
                && !el.closest('#nav-travel_agency')
                && !el.closest('[id^="nav-"]')
                && !el.closest('a'));
        if (headers.length === 0 || document.getElementById('ocfb-toggle-input')) return;

        const header = headers[0];
        header.style.display = 'flex';
        header.style.alignItems = 'center';

        const container = document.createElement('div');
        container.style.marginLeft = '15px';
        container.innerHTML = `
            <label style="display:flex;align-items:center;cursor:pointer;">
                <span style="font-size:12px;font-weight:bold;">OC Blocker</span>
<span class="ocfb-switch">
    <input type="checkbox" id="ocfb-toggle-input" ${isBlockingEnabled ? 'checked' : ''}>
        <span class="ocfb-slider"></span>
</span>
</label>
`;
        header.appendChild(container);

        document.getElementById('ocfb-toggle-input').addEventListener('change', async (e) => {
            isBlockingEnabled = e.target.checked;
            localStorage.setItem(LS_TOGGLE_STATE, isBlockingEnabled);
            if (!isBlockingEnabled) {
                restoreButtons();
            } else {
                const apiKey = loadApiKey();
                if (apiKey) await evaluate(apiKey);
            }
        });
    }

    // =========================================================
    // DEBOUNCE
    // =========================================================

    function debounce(fn, ms) {
        let timer;
        return (...args) => { clearTimeout(timer); timer = setTimeout(() => fn(...args), ms); };
    }

    // =========================================================
    // WAIT FOR BUTTON
    // =========================================================

    async function waitForButton(timeout = 10000) {
        return new Promise((resolve, reject) => {
            if (document.querySelector(BTN_SELECTOR)) { resolve(); return; }
            const observer = new MutationObserver(() => {
                if (document.querySelector(BTN_SELECTOR)) { observer.disconnect(); resolve(); }
            });
            observer.observe(document.body, { childList: true, subtree: true });
            setTimeout(() => { observer.disconnect(); reject(new Error('Timed out waiting for travel button')); }, timeout);
        });
    }

    // =========================================================
    // CLICK INTERCEPTORS
    // =========================================================

    function attachClickInterceptors() {
        // Mobile: intercept expand button taps
        document.body.addEventListener('touchstart', function(e) {
            if (!isBlockingEnabled || isInFlight()) return;
            const targetBtn = e.target.closest('button[aria-controls^="travel-country"]');
            if (!targetBtn) return;
            if (!ocReadyAtCached) { e.preventDefault(); e.stopImmediatePropagation(); showInsultModal('??'); return; }
            const secsUntilOc = Math.max(0, ocReadyAtCached - Math.floor(Date.now() / 1000));
            const roundTrip = getRoundTripSeconds(targetBtn);
            if (roundTrip > 0 && roundTrip >= secsUntilOc) {
                e.preventDefault();
                e.stopImmediatePropagation();
                showInsultModal(Math.floor(secsUntilOc / 60));
            }
        }, { capture: true, passive: false });

        // Mobile: intercept Continue button taps inside expanded panels
        document.body.addEventListener('pointerdown', function(e) {
            if (!isBlockingEnabled || isInFlight()) return;
            const continueBtn = e.target.closest('button.torn-btn.btn-dark-bg');
            if (!continueBtn) return;
            const expandBtn = continueBtn.closest('[aria-live]')
            ?.closest('[class*="destination"]')
            ?.querySelector('button[aria-controls^="travel-country"]');
            if (!expandBtn) return;
            if (!ocReadyAtCached) { e.preventDefault(); e.stopImmediatePropagation(); showInsultModal('??'); return; }
            const secsUntilOc = Math.max(0, ocReadyAtCached - Math.floor(Date.now() / 1000));
            const roundTrip = getRoundTripSeconds(expandBtn);
            if (roundTrip > 0 && roundTrip >= secsUntilOc) {
                e.preventDefault();
                e.stopImmediatePropagation();
                showInsultModal(Math.floor(secsUntilOc / 60));
            }
        }, true);
    }

    function attachToggleObserver() {
        // Watch for Travel Agency header to inject toggle - keeps watching for TornPDA late renders
        injectToggle();
        new MutationObserver(() => {
            if (document.getElementById('ocfb-toggle-input')) return;
            const header = Array.from(document.querySelectorAll('h4,h3,.title,span'))
            .find(el => el.textContent.includes('Travel Agency')
                  && !el.closest('#nav-travel_agency')
                  && !el.closest('[id^="nav-"]')
                  && !el.closest('a'));
            if (header) injectToggle();
        }).observe(document.body, { childList: true, subtree: true });
    }

    // =========================================================
    // INIT
    // =========================================================

    async function init() {
        if (isInFlight()) return;

        attachClickInterceptors();
        attachToggleObserver();

        let apiKey = loadApiKey();

        if (!apiKey) {
            await new Promise(resolve => {
                function prompt() { showApiKeyModal(key => { apiKey = key; resolve(); }); }
                prompt();
            });
        }

        try {
            await waitForButton();
        } catch (err) {
            console.warn(`[OCFB] ${err.message} — running evaluate anyway`);
        }

        await evaluate(apiKey);

        // Desktop: watch for flight time changes
        const timeObserver = new MutationObserver(debounce(() => {
            // DEV ONLY — remove before release
            const ocReadyAt = loadCache()?.ready_at;
            if (ocReadyAt) checkAndBlock(ocReadyAt);
        }, 100));

        function attachTimeObserver() {
            const el = document.querySelector('.flightDetailsGrid___zgPt_ time[datetime]');
            if (el) {
                timeObserver.observe(el, { attributes: true, attributeFilter: ['datetime'] });
            } else {
                const findObserver = new MutationObserver(() => {
                    const found = document.querySelector('.flightDetailsGrid___zgPt_ time[datetime]');
                    if (found) {
                        findObserver.disconnect();
                        timeObserver.observe(found, { attributes: true, attributeFilter: ['datetime'] });
                    }
                });
                findObserver.observe(document.body, { childList: true, subtree: true });
            }
        }
        attachTimeObserver();

        // Mobile: watch for Continue button appearing in expanded panels
        new MutationObserver(() => {
            if (!isBlockingEnabled || !ocReadyAtCached || isInFlight()) return;
            const secsUntilOc = Math.max(0, ocReadyAtCached - Math.floor(Date.now() / 1000));
            document.querySelectorAll('button.torn-btn.btn-dark-bg').forEach(btn => {
                if (btn.dataset.ocfbBlocked) return;
                const expandBtn = btn.closest('[aria-live]')
                ?.closest('[class*="destination"]')
                ?.querySelector('button[aria-controls^="travel-country"]');
                if (!expandBtn) return;
                const roundTrip = getRoundTripSeconds(expandBtn);
                if (roundTrip > 0 && roundTrip >= secsUntilOc) applyBlockStyle(btn);
            });
        }).observe(document.body, { childList: true, subtree: true });
    }

    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', init);
    } else {
        init();
    }


})();