{"id":2086,"date":"2026-05-17T01:18:43","date_gmt":"2026-05-17T01:18:43","guid":{"rendered":"https:\/\/happyhourwithjohnandsue.com\/?page_id=2086"},"modified":"2026-05-17T01:22:15","modified_gmt":"2026-05-17T01:22:15","slug":"any-plans-for-the-rest-of-your-day","status":"publish","type":"page","link":"https:\/\/happyhourwithjohnandsue.com\/index.php\/any-plans-for-the-rest-of-your-day\/","title":{"rendered":"Any plans?"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>The Comeback Generator &mdash; Happy Hour with John &amp; Sue<\/title>\n<meta name=\"description\" content=\"When the server asks 'any plans for the rest of your day?' &mdash; fifteen modes of bizarre comebacks, from time traveler to cult leader. A little fun from Happy Hour with John and Sue.\">\n<meta property=\"og:title\" content=\"The Server Comeback Generator\">\n<meta property=\"og:description\" content=\"Bizarre, themed responses to the question every server asks. From Happy Hour with John &amp; Sue.\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,500;0,9..144,600;1,9..144,400;1,9..144,500&#038;family=DM+Sans:wght@400;500;600&#038;display=swap\" rel=\"stylesheet\">\n<style>\n:root {\n  --cream: #FDF1DB;\n  --cream-deep: #F7E1B8;\n  --paper: #FFFAF0;\n  --paper-shadow: rgba(199, 87, 40, 0.12);\n  --coral: #E8703F;\n  --coral-deep: #C0521F;\n  --coral-soft: rgba(232, 112, 63, 0.12);\n  --terracotta: #B83A1D;\n  --mint: #5BA572;\n  --pineapple: #F5B945;\n  --ink: #3D1F0E;\n  --ink-soft: #7A5238;\n  --ink-faint: #A88468;\n  --serif: 'Fraunces', Georgia, serif;\n  --sans: 'DM Sans', system-ui, -apple-system, sans-serif;\n}\n\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { height: 100%; }\n\nbody {\n  font-family: var(--sans);\n  background: var(--cream);\n  background-image:\n    radial-gradient(ellipse at 15% 0%, rgba(245, 185, 69, 0.22), transparent 55%),\n    radial-gradient(ellipse at 85% 100%, rgba(232, 112, 63, 0.15), transparent 55%);\n  color: var(--ink);\n  min-height: 100vh;\n  min-height: 100dvh;\n  padding: 2.5rem 1.25rem 2rem;\n  overflow-x: hidden;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  line-height: 1.5;\n}\n\n.container { max-width: 580px; margin: 0 auto; }\n\n.garnish {\n  display: flex;\n  justify-content: center;\n  margin-bottom: 1rem;\n}\n\n.garnish svg { display: block; }\n\n.eyebrow {\n  font-family: var(--sans);\n  font-size: 11px;\n  letter-spacing: 0.28em;\n  text-transform: uppercase;\n  color: var(--coral-deep);\n  margin-bottom: 1.25rem;\n  text-align: center;\n  font-weight: 600;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 14px;\n}\n\n.eyebrow::before,\n.eyebrow::after {\n  content: \"\";\n  display: block;\n  width: 28px;\n  height: 1px;\n  background: var(--coral);\n  opacity: 0.5;\n}\n\nh1 {\n  font-family: var(--serif);\n  font-size: clamp(32px, 7.5vw, 46px);\n  font-style: italic;\n  font-weight: 500;\n  color: var(--ink);\n  line-height: 1.08;\n  text-align: center;\n  margin-bottom: 0.9rem;\n  letter-spacing: -0.01em;\n}\n\nh1 .mark {\n  color: var(--coral);\n  font-family: var(--serif);\n  font-style: normal;\n}\n\n.lede {\n  font-family: var(--serif);\n  font-size: 17px;\n  font-style: italic;\n  font-weight: 400;\n  color: var(--ink-soft);\n  line-height: 1.6;\n  text-align: center;\n  max-width: 480px;\n  margin: 0 auto 1rem;\n}\n\n.kicker {\n  font-family: var(--serif);\n  font-size: 19px;\n  font-style: italic;\n  font-weight: 500;\n  color: var(--ink);\n  line-height: 1.4;\n  text-align: center;\n  max-width: 480px;\n  margin: 0 auto 2.25rem;\n}\n\n.kicker .accent {\n  color: var(--coral-deep);\n  font-style: normal;\n  font-family: var(--sans);\n  font-weight: 600;\n  font-size: 16px;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  display: inline-block;\n  margin-right: 4px;\n}\n\n.chips {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  gap: 7px;\n  margin-bottom: 2rem;\n}\n\n.chip {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 8px 14px;\n  border-radius: 999px;\n  border: 1.5px solid rgba(61, 31, 14, 0.15);\n  background: var(--paper);\n  color: var(--ink-soft);\n  font-family: var(--sans);\n  font-size: 13px;\n  font-weight: 500;\n  cursor: pointer;\n  white-space: nowrap;\n  transition: all 0.18s ease;\n  letter-spacing: 0.01em;\n}\n\n.chip:hover {\n  border-color: var(--coral);\n  color: var(--ink);\n  background: var(--coral-soft);\n}\n\n.chip.active {\n  background: var(--coral);\n  color: var(--paper);\n  border-color: var(--coral);\n}\n\n.chip-icon { font-size: 13px; line-height: 1; }\n\n.card {\n  background: var(--paper);\n  color: var(--ink);\n  border-radius: 8px;\n  padding: 2.75rem 2rem;\n  min-height: 280px;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  text-align: center;\n  margin-bottom: 1.25rem;\n  position: relative;\n  box-shadow:\n    0 1px 0 rgba(255, 255, 255, 0.8) inset,\n    0 1px 2px rgba(61, 31, 14, 0.05),\n    0 20px 50px -20px var(--paper-shadow),\n    0 8px 20px -10px rgba(61, 31, 14, 0.1);\n  border: 1px solid rgba(61, 31, 14, 0.06);\n  overflow: hidden;\n}\n\n.card::before {\n  content: \"\";\n  position: absolute;\n  top: 0; left: 0; right: 0;\n  height: 4px;\n  background: linear-gradient(90deg, var(--pineapple), var(--coral), var(--terracotta));\n}\n\n.card-label {\n  font-family: var(--sans);\n  font-size: 10px;\n  letter-spacing: 0.32em;\n  text-transform: uppercase;\n  color: var(--coral-deep);\n  margin-bottom: 1.5rem;\n  font-weight: 600;\n  transition: opacity 0.2s ease;\n}\n\n.quote {\n  font-family: var(--serif);\n  font-size: clamp(20px, 4.8vw, 24px);\n  font-style: italic;\n  font-weight: 400;\n  line-height: 1.4;\n  color: var(--ink);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n\n.quote.fade { opacity: 0; transform: translateY(4px); }\n.card-label.fade { opacity: 0.4; }\n\n.actions { display: flex; gap: 10px; }\n\n.btn {\n  font-family: var(--sans);\n  font-size: 14px;\n  font-weight: 600;\n  letter-spacing: 0.02em;\n  padding: 15px 22px;\n  border-radius: 999px;\n  border: 1.5px solid var(--coral);\n  background: transparent;\n  color: var(--coral-deep);\n  cursor: pointer;\n  transition: all 0.18s ease;\n}\n\n.btn:active { transform: scale(0.98); }\n\n.btn-primary {\n  flex: 1;\n  background: var(--coral);\n  color: var(--paper);\n  border-color: var(--coral);\n}\n\n.btn-primary:hover {\n  background: var(--coral-deep);\n  border-color: var(--coral-deep);\n}\n\n.btn-icon {\n  width: 52px;\n  padding: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: var(--paper);\n}\n\n.btn-icon:hover {\n  background: var(--coral-soft);\n  border-color: var(--coral-deep);\n  color: var(--coral-deep);\n}\n\n.btn-icon svg { width: 18px; height: 18px; stroke: currentColor; }\n\n.counter {\n  text-align: center;\n  margin-top: 1.5rem;\n  font-family: var(--sans);\n  font-size: 11px;\n  letter-spacing: 0.18em;\n  text-transform: uppercase;\n  color: var(--ink-faint);\n  font-weight: 500;\n}\n\n.counter span { color: var(--coral-deep); font-weight: 600; }\n\nfooter {\n  margin-top: 3rem;\n  padding-top: 2rem;\n  border-top: 1px solid rgba(61, 31, 14, 0.1);\n  text-align: center;\n  font-family: var(--serif);\n  font-size: 15px;\n  font-style: italic;\n  color: var(--ink-soft);\n}\n\nfooter .heart { color: var(--coral); font-style: normal; margin: 0 3px; }\n\nfooter a {\n  color: var(--coral-deep);\n  text-decoration: none;\n  font-style: normal;\n  font-family: var(--sans);\n  font-size: 13px;\n  font-weight: 600;\n  letter-spacing: 0.02em;\n  border-bottom: 1.5px solid var(--coral-soft);\n  padding-bottom: 1px;\n  transition: border-color 0.2s;\n}\n\nfooter a:hover { border-color: var(--coral); }\n\n.fade-in { animation: fadeUp 0.7s cubic-bezier(0.16, 1, 0.3, 1) both; }\n.delay-1 { animation-delay: 0.08s; }\n.delay-2 { animation-delay: 0.16s; }\n.delay-3 { animation-delay: 0.26s; }\n.delay-4 { animation-delay: 0.38s; }\n.delay-5 { animation-delay: 0.48s; }\n\n@keyframes fadeUp {\n  from { opacity: 0; transform: translateY(10px); }\n  to { opacity: 1; transform: translateY(0); }\n}\n\n@media (max-width: 600px) {\n  body { padding: 2rem 1.25rem 1.5rem; }\n  .garnish { margin-bottom: 0.75rem; }\n  .eyebrow { margin-bottom: 1rem; }\n  h1 { margin-bottom: 0.75rem; }\n  .lede { font-size: 16px; line-height: 1.55; margin-bottom: 0.85rem; }\n  .kicker { font-size: 17px; margin-bottom: 1.75rem; }\n  .kicker .accent { font-size: 14px; }\n  .chips { gap: 6px; margin-bottom: 1.5rem; }\n  .chip { padding: 9px 14px; font-size: 13px; }\n  .card { padding: 2.25rem 1.5rem; min-height: 220px; margin-bottom: 1rem; }\n  .quote { font-size: 19px; }\n  .card-label { margin-bottom: 1.25rem; }\n  .actions { gap: 8px; }\n  .btn { padding: 14px 18px; font-size: 14px; }\n  .btn-icon { width: 48px; }\n  .counter { margin-top: 1.25rem; font-size: 10.5px; letter-spacing: 0.15em; }\n  footer { margin-top: 2.25rem; padding-top: 1.5rem; font-size: 14px; }\n}\n\n@media (max-width: 380px) {\n  body { padding: 1.5rem 1rem 1.25rem; }\n  .eyebrow { font-size: 10px; letter-spacing: 0.22em; gap: 10px; }\n  .eyebrow::before, .eyebrow::after { width: 20px; }\n  h1 { font-size: 28px; line-height: 1.12; }\n  .lede { font-size: 15px; }\n  .kicker { font-size: 16px; }\n  .kicker .accent { display: block; margin: 0 0 4px; font-size: 12.5px; letter-spacing: 0.1em; }\n  .chip { padding: 8px 12px; font-size: 12.5px; gap: 5px; }\n  .card { padding: 2rem 1.25rem; min-height: 200px; }\n  .quote { font-size: 18px; line-height: 1.45; }\n  .card-label { font-size: 9.5px; letter-spacing: 0.28em; }\n  .btn { padding: 13px 14px; font-size: 13.5px; }\n  .btn-icon { width: 44px; }\n  .counter { font-size: 10px; letter-spacing: 0.12em; }\n  footer { font-size: 13.5px; }\n}\n\n@media (hover: none) {\n  .chip:hover { background: var(--paper); border-color: rgba(61, 31, 14, 0.15); color: var(--ink-soft); }\n  .chip.active:hover { background: var(--coral); color: var(--paper); border-color: var(--coral); }\n  .btn-primary:hover { background: var(--coral); border-color: var(--coral); }\n  .btn-icon:hover { background: var(--paper); border-color: var(--coral); color: var(--coral-deep); }\n}\n<\/style>\n<\/head>\n<body>\n<main class=\"container\">\n  <div class=\"garnish fade-in\" aria-hidden=\"true\">\n    <svg width=\"56\" height=\"36\" viewBox=\"0 0 56 36\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n      <path d=\"M28 4 L28 22\" stroke=\"#5BA572\" stroke-width=\"1.5\" stroke-linecap=\"round\"\/>\n      <path d=\"M28 10 Q22 8 18 12\" stroke=\"#5BA572\" stroke-width=\"1.5\" stroke-linecap=\"round\" fill=\"none\"\/>\n      <path d=\"M28 10 Q34 8 38 12\" stroke=\"#5BA572\" stroke-width=\"1.5\" stroke-linecap=\"round\" fill=\"none\"\/>\n      <path d=\"M28 16 Q23 15 20 18\" stroke=\"#5BA572\" stroke-width=\"1.5\" stroke-linecap=\"round\" fill=\"none\"\/>\n      <path d=\"M28 16 Q33 15 36 18\" stroke=\"#5BA572\" stroke-width=\"1.5\" stroke-linecap=\"round\" fill=\"none\"\/>\n      <circle cx=\"28\" cy=\"27\" r=\"5.5\" fill=\"#E8703F\"\/>\n      <circle cx=\"28\" cy=\"27\" r=\"2.5\" fill=\"#F5B945\"\/>\n    <\/svg>\n  <\/div>\n\n  <p class=\"eyebrow fade-in delay-1\">A Happy Hour party trick<\/p>\n  <h1 class=\"fade-in delay-2\"><span class=\"mark\">&ldquo;<\/span>Any plans for the rest of your day?<span class=\"mark\">&rdquo;<\/span><\/h1>\n  <p class=\"lede fade-in delay-3\">Ever notice how, when you head out for happy hour or grab a meal, the server always asks it? And you stumble for the right answer beyond &ldquo;well, grocery shopping&rdquo; or &ldquo;nothing, just going home to relax.&rdquo;<\/p>\n  <p class=\"kicker fade-in delay-3\"><span class=\"accent\">We&rsquo;ve got you covered.<\/span> Pick a vibe below, hit the button, and see who can keep a straight face longest.<\/p>\n\n  <div class=\"chips fade-in delay-3\" id=\"chips\" role=\"tablist\" aria-label=\"Comeback themes\"><\/div>\n\n  <div class=\"card fade-in delay-4\" aria-live=\"polite\">\n    <p class=\"card-label\" id=\"themeLabel\">Pure chaos<\/p>\n    <p class=\"quote\" id=\"quote\">Tap a theme and roll.<\/p>\n  <\/div>\n\n  <div class=\"actions fade-in delay-5\">\n    <button class=\"btn btn-primary\" id=\"roll\">Give me another<\/button>\n    <button class=\"btn btn-icon\" id=\"copy\" aria-label=\"Copy comeback to clipboard\">\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n        <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"\/>\n        <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/>\n      <\/svg>\n    <\/button>\n  <\/div>\n\n  <p class=\"counter fade-in delay-5\"><span id=\"count\">0<\/span> deranged responses poured<\/p>\n\n  <footer class=\"fade-in delay-5\">\n    Brewed with <span class=\"heart\">&hearts;<\/span> at <a href=\"https:\/\/happyhourwithjohnandsue.com\" id=\"hhLink\">Happy Hour with John &amp; Sue<\/a>\n  <\/footer>\n<\/main>\n\n<script>\nconst themes = [\n  { id: 'chaos', label: 'Pure chaos', icon: '\\uD83C\\uDF79', isChaos: true },\n  { id: 'time', label: 'Time traveler', icon: '\\u23F3', lines: [\n    \"Heading back to 1847. My great-great-grandfather is making bad decisions again.\",\n    \"Picking up my hoverboard from the future repair shop. They keep losing the receipts.\",\n    \"Dinner party in the Cretaceous. It's casual. Mostly ferns.\",\n    \"Need to be in feudal Japan by three or my visa lapses.\",\n    \"Just trying to get home to the correct timeline, honestly. This one is weird.\",\n    \"Voting in the 1932 election. Again. I keep second-guessing myself.\",\n    \"Returning a library book to Alexandria before the fire.\"\n  ]},\n  { id: 'wizard', label: 'Wizard', icon: '\\uD83E\\uDDD9', lines: [\n    \"Consulting the crystal orb about my niece's birthday gift. She's picky.\",\n    \"My familiar \\u2014 a moderately-sized newt named Geoffrey \\u2014 has a dental thing.\",\n    \"Brewing a potion of mild lactose tolerance. Took me eight years.\",\n    \"Banishing a low-tier demon from my Subaru. Third time this month.\",\n    \"The moon is waxing gibbous. You understand.\",\n    \"Recharging my staff before the equinox, or it goes into low-power mode.\",\n    \"Have to enchant a sandwich. Long story.\"\n  ]},\n  { id: 'pirate', label: 'Pirate', icon: '\\uD83C\\uDFF4\\u200D\\u2620\\uFE0F', lines: [\n    \"Buryin' treasure. Standard Tuesday.\",\n    \"Got a meetin' with the kraken. He's a friend.\",\n    \"Recruitin' a parrot. Competitive market right now.\",\n    \"Just got off the phone with me crew. There's been a mutiny.\",\n    \"Countin' doubloons. They're like coins, but louder.\",\n    \"Polishin' me peg. The wooden one. The OTHER wooden one.\",\n    \"Tide's comin' in. Got to yell at it.\"\n  ]},\n  { id: 'ghost', label: 'Paranormal', icon: '\\uD83D\\uDC7B', lines: [\n    \"Tracking a poltergeist in a Cracker Barrel. He keeps moving the biscuits.\",\n    \"Mothman and I have a standing four o'clock. He's usually late.\",\n    \"Returning a haunted lamp to its rightful Marriott.\",\n    \"Got a tip about a sasquatch in the parking lot at a Petco.\",\n    \"Cleansing a TGI Fridays. Long story. Lot of unfinished business in there.\",\n    \"Investigating a Bigfoot sighting in a stranger's mudroom. Could be a raccoon.\",\n    \"There's a ghost in my microwave. We're working through it.\"\n  ]},\n  { id: 'soap', label: 'Soap opera', icon: '\\uD83C\\uDFAD', lines: [\n    \"Confronting my evil twin who I just learned exists. Her name is Brenda.\",\n    \"My ex-husband faked his death again. We're meeting for closure at an Olive Garden.\",\n    \"Returning the amnesia ring before my coma starts at seven.\",\n    \"I'm being recast. Whole new face by Friday.\",\n    \"Just inherited a vineyard from a man I've never met. The will is suspicious.\",\n    \"My obstetrician is also my long-lost father. We're processing.\",\n    \"I have a dramatic monologue at six that's going to ruin Cassandra.\"\n  ]},\n  { id: 'conspiracy', label: 'Conspiracy', icon: '\\uD83D\\uDC7D', lines: [\n    \"The birds will let me know when it's time.\",\n    \"Just running some errands. Mostly underground. Literally.\",\n    \"My tinfoil is at the dry cleaners. Feeling very exposed today.\",\n    \"Avoiding chemtrails. They're heavy this week.\",\n    \"Listening to my fillings. They've been chatty.\",\n    \"Returning some books to the library that doesn't officially exist.\",\n    \"The moon called. I'm not at liberty to say more.\"\n  ]},\n  { id: 'science', label: 'Mad scientist', icon: '\\uD83E\\uDDEA', lines: [\n    \"Reanimation. Should be home by six unless he's frisky.\",\n    \"My lightning rod arrives at four. Very excited.\",\n    \"Just have to stitch the elbows on. Loose elbows ruin everything.\",\n    \"Cloning my dentist. Long story. Mostly insurance-related.\",\n    \"Need to feed the experiment. He prefers cantaloupe.\",\n    \"Reversing entropy in my garage. Slow progress, but I'm getting younger.\",\n    \"Teaching my smoke detector to feel love.\"\n  ]},\n  { id: 'knight', label: 'Knight', icon: '\\u2694\\uFE0F', lines: [\n    \"Mine sworn enemy hath challenged me to jousting at dusk.\",\n    \"I must polish mine codpiece before the feast.\",\n    \"The dragon situation in mine garage continues. He will not leave.\",\n    \"Recruiting peasants. Slim pickings this season.\",\n    \"Hast thou seen mine ferret? He answers to Brian.\",\n    \"Owe a debt of honor to a man named Reginald. Going to fight him.\",\n    \"Mine sword needs sharpening. The man who does it is also named Sword.\"\n  ]},\n  { id: 'tv', label: 'Reality TV', icon: '\\uD83D\\uDCFA', lines: [\n    \"Filming a confrontation with my frenemy Tiffany at a Cheesecake Factory.\",\n    \"I'm being eliminated tonight. Spoiler.\",\n    \"Crying on camera, then a hot tub. Then more crying.\",\n    \"Meeting with producers about my redemption arc.\",\n    \"I throw a drink at someone named Tanner around seven. Contractually obligated.\",\n    \"Going on a yacht. There will be tension.\",\n    \"I have a confessional booked for forty minutes. I just have a lot to say.\"\n  ]},\n  { id: 'void', label: 'Existential', icon: '\\uD83C\\uDF00', lines: [\n    \"Staring into the void until it stares back. Should be done by nine-ish.\",\n    \"Trying to remember if any of this is real. So far: inconclusive.\",\n    \"Calling my mother. She doesn't recognize me anymore. None of us do.\",\n    \"Confronting the fundamental absurdity of bread. Wish me luck.\",\n    \"I'm not sure tomorrow exists. Are you?\",\n    \"Going home to be slowly outpaced by time. Same as you, really.\",\n    \"Reading the terms of service of being alive.\"\n  ]},\n  { id: 'cult', label: 'Cult leader', icon: '\\uD83D\\uDD25', lines: [\n    \"The ceremony begins at dusk. We're trying a new robe vendor.\",\n    \"Anointing the chosen ones. It's a tight schedule, honestly.\",\n    \"Running to the hardware store for ritual supplies. Mostly tea lights.\",\n    \"Group chant at six. We're working on harmonies.\",\n    \"My followers are restless. I promised them a sign, and the sky has not delivered.\",\n    \"Need to remind everyone that I am still divine. They forget so fast.\",\n    \"Sermon writes itself. The interpretive dance segment does not.\"\n  ]},\n  { id: 'hero', label: 'Off-duty superhero', icon: '\\u26A1', lines: [\n    \"Saving the city. Should wrap by nine if traffic's good.\",\n    \"My nemesis has a dentist appointment, so I'm free until four.\",\n    \"Tights are at the dry cleaners. Slow day, honestly.\",\n    \"Just need to charge my grappling hook before patrol.\",\n    \"Watching for the signal. It's mostly just the moon, honestly.\",\n    \"Rescuing a cat from a tree. The cat is also a villain. Complicated.\",\n    \"League meeting at seven. The catering is always good.\"\n  ]},\n  { id: 'cowboy', label: 'Cowboy', icon: '\\uD83E\\uDD20', lines: [\n    \"Wranglin' some thoughts. Most of 'em cattle-shaped.\",\n    \"Reckon the sun's gonna set on me one way or t'other.\",\n    \"Got to ride into town and stare at a man.\",\n    \"Tumbleweed situation in my driveway. Could be days.\",\n    \"Showdown at high noon with my old partner. Awkward \\u2014 we share a Costco card.\",\n    \"Headin' to the saloon. Different saloon. The last one didn't take kindly to my opinions.\",\n    \"Gonna squint at the horizon for a spell. Mostly just squintin'.\"\n  ]},\n  { id: 'trade', label: 'Tradesperson', icon: '\\uD83D\\uDD27', lines: [\n    \"Got a tile situation. Subway pattern. The owner is a sociopath.\",\n    \"Replacing a gasket on a thing nobody's seen in forty years.\",\n    \"Quoting a hot tub install for a man who should not have one.\",\n    \"Got to drive out to a Quonset hut for what they're calling 'a noise.'\",\n    \"Re-grouting under emotional duress.\",\n    \"Customer says it 'smells electrical.' That can mean anything from God.\",\n    \"Pulling permits for a deck I personally find offensive.\"\n  ]}\n];\n\nconst realThemes = themes.filter(t => !t.isChaos);\nlet active = themes[0];\nlet lastIndex = -1;\nlet lastChaosId = null;\nlet rollCount = 0;\n\nconst chipsEl = document.getElementById('chips');\nconst quoteEl = document.getElementById('quote');\nconst themeLabelEl = document.getElementById('themeLabel');\nconst countEl = document.getElementById('count');\n\nthemes.forEach((t) => {\n  const b = document.createElement('button');\n  b.className = 'chip' + (t.id === active.id ? ' active' : '');\n  b.dataset.id = t.id;\n  b.setAttribute('role', 'tab');\n  b.setAttribute('aria-selected', t.id === active.id ? 'true' : 'false');\n  b.innerHTML = '<span class=\"chip-icon\" aria-hidden=\"true\">' + t.icon + '<\/span>' + t.label;\n  b.onclick = () => selectTheme(t);\n  chipsEl.appendChild(b);\n});\n\nfunction pickFromTheme(t) {\n  const lines = t.lines;\n  let i;\n  do { i = Math.floor(Math.random() * lines.length); } while (lines.length > 1 && i === lastIndex);\n  lastIndex = i;\n  return lines[i];\n}\n\nfunction rollChaos() {\n  let t;\n  do {\n    t = realThemes[Math.floor(Math.random() * realThemes.length)];\n  } while (realThemes.length > 1 && t.id === lastChaosId);\n  lastChaosId = t.id;\n  lastIndex = -1;\n  return { line: pickFromTheme(t), label: t.label };\n}\n\nfunction roll(animate = true) {\n  let line, label;\n  if (active.isChaos) {\n    const r = rollChaos();\n    line = r.line;\n    label = r.label;\n  } else {\n    line = pickFromTheme(active);\n    label = active.label;\n  }\n\n  const apply = () => {\n    quoteEl.textContent = '\\u201C' + line + '\\u201D';\n    themeLabelEl.textContent = label;\n  };\n\n  if (animate) {\n    quoteEl.classList.add('fade');\n    themeLabelEl.classList.add('fade');\n    setTimeout(() => {\n      apply();\n      quoteEl.classList.remove('fade');\n      themeLabelEl.classList.remove('fade');\n    }, 200);\n  } else {\n    apply();\n  }\n\n  rollCount++;\n  countEl.textContent = rollCount;\n}\n\nfunction selectTheme(t) {\n  active = t;\n  lastIndex = -1;\n  lastChaosId = null;\n  document.querySelectorAll('.chip').forEach(c => {\n    const isActive = c.dataset.id === t.id;\n    c.classList.toggle('active', isActive);\n    c.setAttribute('aria-selected', isActive ? 'true' : 'false');\n  });\n  roll();\n}\n\ndocument.getElementById('roll').onclick = () => roll();\n\nconst copyBtn = document.getElementById('copy');\nconst copyIconHTML = copyBtn.innerHTML;\ncopyBtn.onclick = () => {\n  const text = quoteEl.textContent.replace(\/[\\u201C\\u201D\"]\/g, '');\n  if (!text || text === 'Tap a theme and roll.') return;\n  if (navigator.clipboard) {\n    navigator.clipboard.writeText(text).catch(() => {});\n  }\n  copyBtn.innerHTML = '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg>';\n  setTimeout(() => { copyBtn.innerHTML = copyIconHTML; }, 1300);\n};\n\nroll(false);\n<\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>The Comeback Generator &mdash; Happy Hour with John &amp; Sue A Happy Hour party trick &ldquo;Any plans for the rest of your day?&rdquo; Ever notice how, when you head out for happy hour or grab a meal, the server always asks it? And you stumble for the right answer beyond &ldquo;well, grocery shopping&rdquo; or &ldquo;nothing, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"sfsi_plus_gutenberg_text_before_share":"","sfsi_plus_gutenberg_show_text_before_share":"","sfsi_plus_gutenberg_icon_type":"","sfsi_plus_gutenberg_icon_alignemt":"","sfsi_plus_gutenburg_max_per_row":"","wprm-recipe-roundup-name":"","wprm-recipe-roundup-description":"","footnotes":""},"class_list":["post-2086","page","type-page","status-publish","hentry"],"aioseo_notices":[],"jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/happyhourwithjohnandsue.com\/index.php\/wp-json\/wp\/v2\/pages\/2086","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/happyhourwithjohnandsue.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/happyhourwithjohnandsue.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/happyhourwithjohnandsue.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/happyhourwithjohnandsue.com\/index.php\/wp-json\/wp\/v2\/comments?post=2086"}],"version-history":[{"count":3,"href":"https:\/\/happyhourwithjohnandsue.com\/index.php\/wp-json\/wp\/v2\/pages\/2086\/revisions"}],"predecessor-version":[{"id":2090,"href":"https:\/\/happyhourwithjohnandsue.com\/index.php\/wp-json\/wp\/v2\/pages\/2086\/revisions\/2090"}],"wp:attachment":[{"href":"https:\/\/happyhourwithjohnandsue.com\/index.php\/wp-json\/wp\/v2\/media?parent=2086"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}