{"release_id":"01a1998d-9802-0000-b0f7-33a23307f4ed","chunk_id":"01a1998d-9934-7d81-9736-5301c0150741","file":"Dp8RZw5w.mjs","mappings":"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","names":["CAPTION_THEMES","CAPTIONS","captionCardPath","c","CAPTION_CARDS","L","BJU_2015","Z10","Z5","r1","v","shareShorterIn","inches","normalCdf","oneIn","share","SIZE"],"sources":["../../../../../../src/lib/sph/captions.ts","../../../../../../src/lib/sph/size.ts"],"sourcesContent":["/**\n * The captions on /sph/captions (RAT-614): written for this page, free to use.\n * \"sph captions\" (2.9K a month, KD 14) and its variants are answered by\n * reddit threads and image boards; a page with its own lines, sorted the way\n * people search them (femdom, cuckold, snapchat, CEI), is the gap.\n *\n * Every caption is about a consenting adult's size and nothing else: no\n * minors, no slurs, no one who didn't ask. `card` lines are also drawn as\n * images at /sph/captions/<id>.png.\n */\n\nexport type CaptionTheme = 'classic' | 'comparison' | 'femdom' | 'cuckold' | 'snapchat' | 'cei';\n\nexport type Caption = { id: string; theme: CaptionTheme; text: string; card?: boolean };\n\nexport const CAPTION_THEMES: { id: CaptionTheme; h3: string; intro: string }[] = [\n\t{\n\t\tid: 'classic',\n\t\th3: 'classic SPH captions',\n\t\tintro:\n\t\t\t'the ones the format was built on: short, direct, aimed straight at the size. good for a dick pic, a ruler or a close-up.'\n\t},\n\t{\n\t\tid: 'comparison',\n\t\th3: 'comparison captions',\n\t\tintro:\n\t\t\t'two of them side by side, and only one of them wins. these work over a split image or a photo with a bigger toy or a bigger man for scale.'\n\t},\n\t{\n\t\tid: 'femdom',\n\t\th3: 'femdom SPH captions',\n\t\tintro:\n\t\t\t'she does the talking. written for a photo of a woman looking, laughing or giving orders, with the reader on the receiving end.'\n\t},\n\t{\n\t\tid: 'cuckold',\n\t\th3: 'cuckold humiliation captions',\n\t\tintro:\n\t\t\t'the partner who is enough, and the one who watches. for cuckold and hotwife images, where size is the reason for the arrangement.'\n\t},\n\t{\n\t\tid: 'snapchat',\n\t\th3: 'snapchat-style SPH captions',\n\t\tintro:\n\t\t\t'the reply to a dick pic: lowercase, quick, a little cruel, sometimes an emoji. made to sit over a screenshot or a phone selfie.'\n\t},\n\t{\n\t\tid: 'cei',\n\t\th3: 'CEI captions',\n\t\tintro:\n\t\t\t'cum eating instructions with an SPH twist: a small finish, and a clear order about what happens next. for people who are into CEI.'\n\t}\n];\n\nexport const CAPTIONS: Caption[] = [\n\t// classic\n\t{ id: 'still-loading', theme: 'classic', text: 'Cute. Is it still loading?', card: true },\n\t{ id: 'travel-size', theme: 'classic', text: 'It’s not small. It’s travel size.', card: true },\n\t{ id: 'took-a-minute', theme: 'classic', text: 'Took me a minute to find it. Took you less to finish.' },\n\t{ id: 'pretend', theme: 'classic', text: 'Don’t worry, I’ll pretend I can feel it.' },\n\t{ id: 'centimeters', theme: 'classic', text: 'You measured in centimeters to get a bigger number, didn’t you?' },\n\t{ id: 'preview', theme: 'classic', text: 'That’s not a dick. That’s a preview.' },\n\t{ id: 'zoom', theme: 'classic', text: 'Zoom in. No, further. There it is.' },\n\t{ id: 'close-ups', theme: 'classic', text: 'Every pic you send is a close-up. Now I know why.' },\n\t// comparison\n\t{ id: 'warm-up', theme: 'comparison', text: 'His warm-up is longer than your whole performance.', card: true },\n\t{ id: 'for-scale', theme: 'comparison', text: 'Stand next to him for the photo. It’s for scale.', card: true },\n\t{ id: 'before-picture', theme: 'comparison', text: 'Side by side, yours looks like the “before” picture.' },\n\t{ id: 'one-of-these', theme: 'comparison', text: 'One of these is a cock. The other one is you.' },\n\t{ id: 'thumbnail', theme: 'comparison', text: 'He fills a hand. You fill a thumbnail.' },\n\t{ id: 'no-angle', theme: 'comparison', text: 'He doesn’t need an angle. You need a miracle.' },\n\t{ id: 'his-soft', theme: 'comparison', text: 'Even soft, his beats your best.' },\n\t{ id: 'just-watch', theme: 'comparison', text: 'Don’t compare. Just watch and learn.' },\n\t// femdom\n\t{ id: 'eye-level', theme: 'femdom', text: 'Kneel. Eye level is the only way I can see it.', card: true },\n\t{ id: 'thank-you', theme: 'femdom', text: 'Say thank you every time I laugh.', card: true },\n\t{ id: 'hands-behind', theme: 'femdom', text: 'Hands behind your back. You won’t need both for that.' },\n\t{ id: 'i-decide', theme: 'femdom', text: 'I decide when you’re done. It won’t take long.' },\n\t{ id: 'watch-me-not-care', theme: 'femdom', text: 'You don’t get to finish. You get to watch me not care.' },\n\t{ id: 'generous-two', theme: 'femdom', text: 'Out of ten? Generously, a two.' },\n\t{ id: 'good-boys', theme: 'femdom', text: 'Good boys with little ones do what they’re told.' },\n\t{ id: 'show-me-again', theme: 'femdom', text: 'Show me again. I want to laugh properly this time.' },\n\t// cuckold\n\t{ id: 'taking-notes', theme: 'cuckold', text: 'He’s taking me out tonight. You’re taking notes.', card: true },\n\t{ id: 'make-the-bed', theme: 'cuckold', text: 'Make the bed nice. He’s staying over.', card: true },\n\t{ id: 'your-turn', theme: 'cuckold', text: 'Wait by the door. He’ll tell you when it’s your turn. It won’t be.' },\n\t{ id: 'what-you-couldnt', theme: 'cuckold', text: 'Don’t worry, honey. He’ll do what you couldn’t.' },\n\t{ id: 'hold-the-camera', theme: 'cuckold', text: 'You hold the camera. He holds my attention.' },\n\t{ id: 'personality', theme: 'cuckold', text: 'I married you for your personality. I keep him for everything else.' },\n\t{ id: 'hear-us', theme: 'cuckold', text: 'You’ll hear us. That’s all you’ll get.' },\n\t{ id: 'nobody-asking', theme: 'cuckold', text: 'Keep it in your pants. Nobody’s asking.' },\n\t// snapchat\n\t{ id: 'lol-is-that-it', theme: 'snapchat', text: 'lol is that it 🤏', card: true },\n\t{ id: 'two-out-of-ten', theme: 'snapchat', text: '2/10 and that’s me being nice', card: true },\n\t{ id: 'thanks-for-the-giggle', theme: 'snapchat', text: 'opened it and laughed out loud. thanks for the giggle 😂' },\n\t{ id: 'screen-was-off', theme: 'snapchat', text: 'send it again, i thought my screen was off… oh' },\n\t{ id: 'cute-little-thing', theme: 'snapchat', text: 'aww. cute little thing 🥺' },\n\t{ id: 'did-you-crop', theme: 'snapchat', text: 'did you crop it or is that all of it' },\n\t{ id: 'bigger-thumbs', theme: 'snapchat', text: 'i’ve seen bigger thumbs 👍' },\n\t{ id: 'whole-thing', theme: 'snapchat', text: 'next time send the whole thing. oh. that was the whole thing' },\n\t// cei\n\t{ id: 'clean-up', theme: 'cei', text: 'Made a tiny mess? Clean up after yourself.', card: true },\n\t{ id: 'little-load', theme: 'cei', text: 'Little dick, little load. You can handle that much.', card: true },\n\t{ id: 'you-know-where', theme: 'cei', text: 'You know where that goes. Open up.' },\n\t{ id: 'finished-already', theme: 'cei', text: 'Finished already? Then you know what’s next.' },\n\t{ id: 'no-tissues', theme: 'cei', text: 'No tissues. You made it, you deal with it.' },\n\t{ id: 'count-to-three', theme: 'cei', text: 'Count to three, then lick it up. I’m counting.' },\n\t{ id: 'most-impressive', theme: 'cei', text: 'That was the most impressive thing you’ll do tonight. Now clean it.' },\n\t{ id: 'small-messes', theme: 'cei', text: 'Small ones make small messes. No excuses.' }\n];\n\nexport const captionById = (id: string) => CAPTIONS.find((c) => c.id === id);\n\nexport const captionCardPath = (c: Pick<Caption, 'id'>) => `/sph/captions/${c.id}.png`;\n\nexport const CAPTION_CARDS = CAPTIONS.filter((c) => c.card);\n\nexport const captionThemeLabel = (theme: CaptionTheme) =>\n\tCAPTION_THEMES.find((t) => t.id === theme)?.h3.replace(/ captions$/, '') ?? theme;\n","import { BJU_2015, normalCdf } from '$lib/data/size-stats';\n\n/**\n * The numbers the /sph pages quote about size (RAT-613, RAT-616), all from the\n * Veale 2015 meta-analysis the size tools use, so no page contradicts another.\n */\n\nconst L = BJU_2015.erectLength;\nconst Z10 = 1.2816;\nconst Z5 = 1.6449;\n\nconst r1 = (v: number) => Math.round(v * 10) / 10;\n\n/** Share of men shorter than `inches` erect, 0–1. */\nexport const shareShorterIn = (inches: number) => normalCdf((inches - L.meanIn) / L.sdIn);\n\n/** \"1 in 27\" for a share. */\nexport const oneIn = (share: number) => Math.round(1 / share);\n\nexport const SIZE = {\n\tmen: BJU_2015.source.sampleSize.toLocaleString('en-US'),\n\tmeanCm: L.meanCm,\n\tmeanIn: L.meanIn,\n\tsdCm: L.sdCm,\n\t/** the shortest 10% are under this */\n\tp10Cm: r1(L.meanCm - Z10 * L.sdCm),\n\tp10In: r1(L.meanIn - Z10 * L.sdIn),\n\t/** the shortest 5% */\n\tp5Cm: r1(L.meanCm - Z5 * L.sdCm),\n\tp5In: r1(L.meanIn - Z5 * L.sdIn),\n\t/** % shorter than 4, 4.5, 5 and 6 inches */\n\tunder4: Math.round(shareShorterIn(4) * 100),\n\toneInUnder4: oneIn(shareShorterIn(4)),\n\tunder45: Math.round(shareShorterIn(4.5) * 100),\n\tunder5: Math.round(shareShorterIn(5) * 100),\n\tunder6: Math.round(shareShorterIn(6) * 100)\n};\n"],"version":3}