A comprehensive approach to help marriages thrive.
A comprehensive approach to help marriages thrive.
Stay Connected
Get our best marriage frameworks delivered weekly. Free.
var R = React;
var h = R.createElement;
var us = R.useState, ue = R.useEffect, ur = R.useReducer, uref = R.useRef, um = R.useMemo, ucb = R.useCallback;
var LS = "duo_li2_v3";
var DEF = { tab: "guide", symAns: null, dStep: 0, dAns: [], dDone: false, openFw: null, openSt: null, openPr: null, reads: [], wins: 0 };function red(st, a) {
switch (a.t) {
case "L": return Object.assign({}, DEF, a.p);
case "TAB": return Object.assign({}, st, { tab: a.v });
case "SYM": return Object.assign({}, st, { symAns: a.v });
case "DS": return Object.assign({}, st, { dStep: a.n });
case "DA": return Object.assign({}, st, { dAns: a.v });
case "DD": return Object.assign({}, st, { dDone: true });
case "FW": return Object.assign({}, st, { openFw: st.openFw === a.id ? null : a.id });
case "ST": return Object.assign({}, st, { openSt: st.openSt === a.id ? null : a.id });
case "PR": return Object.assign({}, st, { openPr: st.openPr === a.id ? null : a.id });
case "RD": if (st.reads.indexOf(a.id) >= 0) return st; return Object.assign({}, st, { reads: st.reads.concat([a.id]), wins: st.wins + 1 });
case "W": return Object.assign({}, st, { wins: st.wins + 1 });
case "X": return DEF;
default: return st;
}
}var MOD = { id: "li2", name: "Deep Listening", tagline: "Being heard is so close to being loved that most people cannot tell the difference.", desc: "Deep Listening covers the interior conditions and external practices that make a partner feel genuinely heard \u2014 not processed, not fixed, not managed. Most communication failures are not about what was said but about what was felt: the sensation of not being received. This module spans the full arc from why listening fails, to how the nervous system processes safety through attention quality, to actionable protocols you can use tonight.", chapters: "Based on Chapters 18\u201320 of DUO: Enjoying Life Together", source: "Integrates research from Gottman, Rogers, Sue Johnson, Dan Wile, Brené Brown, Paul Ekman, and polyvagal theory", cat: { id: "co3", name: "Connection", url: "https://duo.bz/connection" } };
var LINKS = { compass: "https://duo.bz/st", connection: "https://duo.bz/co", climate: "https://duo.bz/s", trust: "https://duo.bz/t", household: "https://duo.bz/h", fundamentals: "https://duo.bz/f" };var POSTS = [
{ id: "li1", name: "The Felt-Heard Distinction", url: "https://duo.bz/li1", type: "Deep Dive", readTime: "12 min", desc: "Why your partner says you never listen even after you have repeated everything back verbatim. The difference between comprehension and felt-understanding \u2014 and why the nervous system evaluates safety through nonverbal signals, not words.", keyIdea: "You can repeat every word and still make someone feel completely alone. Comprehension is not reception.", tags: ["Felt-heard", "Emotional reception", "Nonverbal safety"], bookRef: "Ch. 18\u201319" },
{ id: "pr1", name: "Presence vs. Performance", url: "https://duo.bz/pr1", type: "Diagnostic", readTime: "10 min", desc: "The seven signs you are performing attention rather than giving it. How to interrupt the habit of half-listening and return to full-body presence. Includes the Still Face dynamic \u2014 why a blank screen-face reads as abandonment.", keyIdea: "Your phone face-down is not the same as your heart face-forward.", tags: ["Full presence", "Distraction", "Still Face", "Attention quality"], bookRef: "Ch. 18, Ch. 4" },
{ id: "rp1", name: "The Reflection Trap", url: "https://duo.bz/rp1", type: "Practice", readTime: "9 min", desc: "When parroting back kills the conversation. Mechanical mirroring as distance. What genuine reflection actually sounds like \u2014 and why the difference between technique and response is the difference between distance and healing.", keyIdea: "Mirroring the words is the minimum. Mirroring the feeling is the work.", tags: ["Mirroring", "Empathy", "Response quality", "MVE protocol"], bookRef: "Ch. 20" },
{ id: "li2p", name: "The Three Listening Failures", url: "https://duo.bz/li2p", type: "Deep Dive", readTime: "11 min", desc: "Defensive listening (How can I refute this?), Solution listening (How can I fix this?), and Empathic listening (What is their experience?). Most couples think they listen. Actually, they wait for their turn to talk.", keyIdea: "The difference between these three modes determines whether your partner opens up or shuts down.", tags: ["Defensive listening", "Solution listening", "Empathic listening", "Carl Rogers"], bookRef: "Ch. 19\u201320" },
{ id: "sf1", name: "Softening: The Hard / Soft Emotion Split", url: "https://duo.bz/sf1", type: "Deep Dive", readTime: "13 min", desc: "Every emotion has two layers. The hard emotion \u2014 anger, criticism, contempt \u2014 on the surface. And underneath, the soft emotion \u2014 fear, loneliness, hurt. Hard emotions push people away. Soft emotions pull people in. This is neurobiology.", keyIdea: "When David walked into the kitchen criticizing the mess, underneath his frustration was fear that everything was falling apart.", tags: ["Hard vs soft emotion", "Vulnerability", "Amygdala response", "David and Rachel"], bookRef: "Ch. 19" },
{ id: "cu1", name: "Curiosity: The Antidote to Judgment", url: "https://duo.bz/cu1", type: "Deep Dive", readTime: "11 min", desc: "In distressed marriages, we suffer from Negative Attribution \u2014 the tendency to explain our partner's behavior in the worst possible light. Curiosity is the discipline of pressing Pause on that judgment.", keyIdea: "A Judge looks at evidence to deliver a verdict. A Student looks at evidence to understand the mechanism.", tags: ["Negative attribution", "Judge vs Student", "Gap creation"], bookRef: "Ch. 19" },
{ id: "dw1", name: "Confiding vs. Attacking (Dan Wile)", url: "https://duo.bz/dw1", type: "Practice", readTime: "9 min", desc: "Dan Wile discovered that every attack is a fallback for a vulnerable feeling you could not express. The attack triggers defense. The confession invites connection. Find the Leading Edge Feeling before it becomes a weapon.", keyIdea: "'You are a workaholic who does not care about this family' is a tragic, failed attempt to say 'I feel lonely when you work late.'", tags: ["Leading Edge Feeling", "Confiding", "Dan Wile"], bookRef: "Ch. 19" },
{ id: "ar1", name: "A.R.E. You There? Accessible, Responsive, Engaged", url: "https://duo.bz/ar1", type: "Framework", readTime: "10 min", desc: "Sue Johnson's EFT research shows that attachment security is built through three signals: Are you Accessible? Are you Responsive? Are you Engaged? Active listening is how you prove all three.", keyIdea: "When someone feels heard, their ventral vagal system activates. The nervous system reads: I am safe. This person is with me.", tags: ["A.R.E.", "EFT", "Sue Johnson", "Attachment security"], bookRef: "Ch. 6, 8, 10, 20" }
];var SYMS = [
{ id: "sy1", label: "My partner says I never really listen, but I repeat everything back", post: "li1", fw: "F1", note: "You may be comprehending without receiving. Start with the Felt-Heard Distinction." },
{ id: "sy2", label: "I zone out and realize I missed the whole conversation", post: "pr1", fw: "F2", note: "This is Distraction Drift \u2014 one of the seven performance signs." },
{ id: "sy3", label: "I find myself forming my response while they are still talking", post: "li2p", fw: "F2", note: "Anticipatory Response \u2014 your internal monologue is building your next sentence." },
{ id: "sy4", label: "I understand what they said but they still feel unheard", post: "li1", fw: "F1", note: "Comprehension without felt-understanding. The nervous system reads safety through your face." },
{ id: "sy5", label: "My listening is technically correct but emotionally wrong", post: "rp1", fw: "F4", note: "The Reflection Trap \u2014 mechanical mirroring without warmth is worse than not listening." },
{ id: "sy6", label: "Conversations always end in advice nobody asked for", post: "li2p", fw: "F2", note: "Solution Loading \u2014 you stopped receiving three sentences ago." },
{ id: "sy7", label: "I get defensive the moment they bring up something hard", post: "sf1", fw: "F5", note: "The hard emotion is protecting a soft one underneath. Softening teaches you to lead with the real feeling." },
{ id: "sy8", label: "I assume the worst about why they did something", post: "cu1", fw: "F6", note: "Negative Attribution Error. You are prosecuting, not inquiring." },
{ id: "sy9", label: "My partner has stopped talking to me about anything real", post: "ar1", fw: "F7", note: "They may have learned that reaching for you does not work. A.R.E. helps you prove accessibility." },
{ id: "sy10", label: "I want to fix their pain but it makes them angry", post: "dw1", fw: "F5", note: "Fixing moves toward resolution before understanding is complete. They need reception, not rescue." }
];var DQS = [
{ q: "When your partner is upset, your first instinct is to:", opts: [{ label: "Fix or solve the problem", s: "fixer" }, { label: "Understand what they feel", s: "receiver" }, { label: "Defend yourself if you are involved", s: "defender" }, { label: "Wait for my turn to speak", s: "waiter" }] },
{ q: "After a hard conversation, your partner is most likely to say:", opts: [{ label: "You always have an answer for everything", s: "fixer" }, { label: "I felt like you really heard me", s: "receiver" }, { label: "You made it about yourself again", s: "defender" }, { label: "You seemed checked out", s: "waiter" }] },
{ q: "When they start a story you have heard before:", opts: [{ label: "Listen as if it is new \u2014 the feeling still matters", s: "receiver" }, { label: "Finish their sentences or move them along", s: "fixer" }, { label: "Mentally check out but keep nodding", s: "waiter" }, { label: "Point out the parts they got wrong", s: "defender" }] },
{ q: "Your honest relationship to eye contact during hard talks:", opts: [{ label: "I hold it \u2014 I want them to feel seen", s: "receiver" }, { label: "I look away when it gets uncomfortable", s: "waiter" }, { label: "I glance at my phone or around the room", s: "fixer" }, { label: "I maintain it but I am building my rebuttal", s: "defender" }] },
{ q: "When your partner cries during a conversation:", opts: [{ label: "I stay present and soften \u2014 their pain matters", s: "receiver" }, { label: "I feel uncomfortable and try to make it stop", s: "fixer" }, { label: "I feel attacked \u2014 tears feel like manipulation", s: "defender" }, { label: "I freeze \u2014 I do not know what to do", s: "waiter" }] },
{ q: "How quickly do you move toward a solution after your partner shares something hard?", opts: [{ label: "Within 10 seconds \u2014 I want to help", s: "fixer" }, { label: "I ask what they need before offering anything", s: "receiver" }, { label: "I redirect to my own experience quickly", s: "defender" }, { label: "I say something generic like 'it will be okay'", s: "waiter" }] },
{ q: "When your partner says 'you are not listening,' you think:", opts: [{ label: "But I heard every word \u2014 what more do they want?", s: "fixer" }, { label: "They might be right \u2014 I need to check my presence", s: "receiver" }, { label: "Here we go again \u2014 nothing I do is enough", s: "defender" }, { label: "I was listening... I think... what were they saying?", s: "waiter" }] },
{ q: "If you are honest, during most conversations your body is:", opts: [{ label: "Oriented toward them, open, relaxed", s: "receiver" }, { label: "Leaning forward, ready to jump in with ideas", s: "fixer" }, { label: "Tense, arms crossed, guarded", s: "defender" }, { label: "Slumped, eyes wandering, partially elsewhere", s: "waiter" }] }
];var DRESULTS = {
receiver: { label: "Primarily a Receiver", grade: "Strong Foundation", color: "#065F46", bg: "#ECFDF5", border: "#A7F3D0", text: "Your instinct is toward presence and emotional reception. The next edge for you is sustaining this when the conversation implicates you directly \u2014 that is when most strong listeners revert to defending. The Felt-Heard Distinction post will deepen what you already do well. The Softening framework will help you stay open under pressure.", post: "li1", postLabel: "Go deeper: The Felt-Heard Distinction", nextFw: "F5", nextFwLabel: "Your edge: Softening under pressure" },
fixer: { label: "Primarily a Fixer", grade: "Common Pattern", color: "#92400E", bg: "#FFFBEB", border: "#FDE68A", text: "You care deeply \u2014 that is why you fix. But fixing moves toward resolution before understanding is complete. Your partner often needs to be received, not rescued. When you offer a solution within 30 seconds, you have communicated: 'Your feelings are a problem to solve, not an experience to share.' Start with Presence vs. Performance, then practice the MVE Protocol for 7 days.", post: "pr1", postLabel: "Start here: Presence vs. Performance", nextFw: "F3", nextFwLabel: "Learn: The MVE Protocol" },
defender: { label: "Primarily a Defender", grade: "High Priority", color: "#7F1D1D", bg: "#FFF1F2", border: "#FECACA", text: "When listening feels threatening, defending takes over. This is a nervous system response \u2014 the conversation registers as an attack, and your amygdala activates fight mode before your prefrontal cortex can process the actual words. The Softening framework addresses the root: leading with the soft emotion underneath the hard emotion. The Confiding vs. Attacking post will give you the conversion protocol.", post: "sf1", postLabel: "Read first: Softening (Hard/Soft Emotion Split)", nextFw: "F5", nextFwLabel: "Core work: Leading with the soft emotion" },
waiter: { label: "Primarily a Waiter", grade: "Worth Addressing", color: "#1E3A5F", bg: "#EFF6FF", border: "#BFDBFE", text: "You are present in body but absent in attention. This reads to partners as indifference, even when it is not. The Still Face research shows a blank, absent face triggers the same distress response as active rejection. Presence vs. Performance will give you the seven signs of half-listening. The Full-Body Listen framework will teach you what reception actually feels like in the body.", post: "pr1", postLabel: "Start here: Presence vs. Performance", nextFw: "F3", nextFwLabel: "Practice: The Full-Body Listen" }
};var FWS = [
{ id: "F1", icon: "\u25CE", title: "The Felt-Heard Distinction", sub: "Comprehension is not reception", chipColor: "chT", why: "Most listening failures are not about words. They are about the subjective experience of being emotionally received \u2014 or not. Your partner's nervous system decides safety from your face, not your paraphrase.", definition: "The distinction between comprehension (accurate intake of information) and felt-understanding (the subjective experience of being emotionally received by another person). You can repeat every word your partner said and still leave them feeling profoundly alone. The nervous system evaluates safety through nonverbal signals \u2014 eye contact quality, body orientation, the pause before a response, tone of the first words \u2014 most of which are outside conscious control.", research: "Functional MRI studies show that when subjects felt their emotional experience was matched \u2014 not just their words \u2014 activity in the right anterior insula (the brain's empathy center) increased significantly. The subjective experience: 'I am not alone in this.' Being genuinely heard activates the same neural pathways as physical comfort.", stats: ["Right anterior insula activation when felt-heard", "Same neural pathways as physical comfort", "Nonverbal signals evaluated before words are processed"], signs: ["Your partner says 'you never listen' even though you can quote them", "You accurately summarize but they seem more frustrated, not less", "You feel confused \u2014 you did everything 'right' but it did not land", "Conversations end with both of you feeling unheard"], doNext: ["After your partner shares something hard, check: Did I move toward a solution within 30 seconds? If yes, you moved before understanding was complete.", "Practice the 2-second pause: after they finish, let the silence hold for 2 full seconds before responding. Let your face soften.", "Replace 'I understand' with 'That sounds really hard' \u2014 the first is cognitive, the second is relational.", "Ask: 'Do you feel heard right now, or do you need me to sit with this longer?'"], links: [{ label: "Connection Hub", href: LINKS.connection }, { label: "Foundations Hub", href: LINKS.fundamentals }], quote: { text: "I do not need you to fix it. I need you to feel it with me for a minute.", credit: "Ch. 18" }, callout: { label: "The 30-Second Test", text: "After your partner shares something hard, ask yourself: Did I move toward a solution within 30 seconds? If yes, you moved before understanding was complete. Reception requires a longer pause than your ego is comfortable with." } },
{ id: "F2", icon: "\u25D1", title: "Seven Signs of Performance Listening", sub: "How to tell if you are faking presence", chipColor: "chR", why: "Performance listening is instantly detectable. The human brain reads emotional micro-expressions in 1/25th of a second. You cannot perform presence. The face leaks.", definition: "Performance listening is the act of looking like you are listening while your internal attention is elsewhere. It is extraordinarily common and instantly detectable to the person experiencing it. The human brain detects emotional micro-expressions lasting as little as 1/25th of a second (Ekman). The face communicates before words do.", research: "Paul Ekman's research catalogued over 10,000 facial muscle configurations, demonstrating that the face is the most expressive communication channel \u2014 and the one we cannot consciously control. Ed Tronick's Still Face Experiment (1975) showed that even infants become profoundly distressed when a previously responsive face goes blank. Adults respond identically.", stats: ["1/25th second: micro-expression detection speed", "10,000+ facial configurations catalogued (Ekman)", "Still Face distress: visible within seconds in infants and adults"], signs: ["You finish their sentences or mentally move them along", "You glance at your phone mid-sentence and think they did not notice", "You say 'mm-hm' but could not repeat what they just said", "Your partner has said: 'You are not even listening' \u2014 and was correct", "You catch yourself rehearsing your response while they talk", "You give reassurance ('it will be okay') before you understand what is wrong", "You track when they will be done rather than what they are saying"], doNext: ["Identify which of the seven signs is your default mode. Name it without judgment.", "For one week, put your phone in another room during dinner and the first 10 minutes after reunion.", "When you catch yourself forming a response mid-sentence, silently say 'reset' and return to their words.", "Practice the Full-Body Listen (Framework F3) \u2014 it gives you a physical protocol for genuine presence."], links: [{ label: "Connection Hub", href: LINKS.connection }], callout: { label: "The Still Face Connection", text: "Research on the Still Face Effect (Tronick, 1975) showed that infants become profoundly distressed when a previously responsive face goes blank. Adults respond the same way. A partner staring at a screen while you speak triggers the same neural distress as active rejection. Your face teaches safety or threat." } },
{ id: "F3", icon: "\u25D0", title: "The Full-Body Listen + MVE Protocol", sub: "Reception is a physical act, not a cognitive one", chipColor: "chGn", why: "Genuine listening is not a cognitive act. It is a physical posture, a physiological state, and an emotional willingness. You cannot think your way to felt-hearing. You have to inhabit it.", definition: "The Full-Body Listen is a physical protocol for genuine listening presence. It recognizes that the listener's body communicates safety or threat before any words are exchanged. The MVE Protocol (Mirror, Validate, Empathize) from Chapter 20 structures the verbal response \u2014 but without the physical foundation, MVE becomes performance.", research: "Stephen Porges' Polyvagal Theory demonstrates that the social engagement system (ventral vagal) can only operate when the nervous system registers safety \u2014 through tone of voice, facial expression, pace, and body orientation. HOW you listen matters more than WHAT you say back, because the listener's body is the primary safety signal.", stats: ["Tone of voice: ~38% of emotional impact", "Words: ~7% during emotional activation", "Ventral vagal: only operates when safety is registered"], signs: ["Your partner says you listen but it does not feel like you are 'there'", "You know the MVE steps but your partner still feels unheard", "Your body is tense during hard conversations \u2014 jaw clenched, arms crossed", "You can repeat their words but not name the feeling underneath"], doNext: ["Before a hard conversation: put both feet on the floor. Unclench your jaw. Lower your shoulders. Open your hands.", "Practice the MVE sequence: Mirror ('So what I hear is...'), Validate ('That makes sense because...'), Empathize ('I imagine that felt...').", "The step most people skip is Validate. Validation does not mean agreement \u2014 it means: 'Given your perspective, your reaction is understandable.'", "End every MVE cycle with: 'Is there more?' \u2014 this single question communicates engagement more than any technique."], links: [{ label: "Connection Hub", href: LINKS.connection }, { label: "Climate Hub", href: LINKS.climate }], quote: { text: "The most important thing in communication is hearing what is not said.", credit: "Peter Drucker \u2014 referenced Ch. 19" }, callout: { label: "The Physical Reset", text: "Before a hard conversation: put both feet on the floor. Unclench your jaw. Lower your shoulders. Open your hands. These are the physical markers of a nervous system willing to receive. Your partner's amygdala will read these signals before processing a single word." } },
{ id: "F4", icon: "\u2298", title: "The Reflection Trap", sub: "When technique becomes distance", chipColor: "chP", why: "Therapeutic listening technique taught without warmth produces something worse than bad listening: listening that feels calculated. Mechanical reflection is easy to learn and deeply alienating to receive.", definition: "The Reflection Trap occurs when listening technique \u2014 paraphrasing, mirroring, reflecting \u2014 is deployed without genuine emotional engagement. The words are correct but the temperature is wrong. The partner feels processed, not received. The difference between mirroring that heals and mirroring that distances is not the words \u2014 it is the lag time, the facial expression during the pause, and whether the listener was actually moved.", research: "Carl Rogers (1957) emphasized that accurate empathy requires genuine congruence \u2014 the therapist (or partner) must actually be moved by what they hear, not merely perform a technique. His research showed that incongruent empathy (correct words, flat affect) was detected and rejected by recipients, sometimes increasing distrust rather than building it.", stats: ["Incongruent empathy: increases distrust in some studies", "2-second pause with facial softening: reads as genuine", "Instant clinical paraphrase: reads as technique/performance"], signs: ["Your partner has said 'stop therapisting me' or 'you sound like a robot'", "Your reflections are technically accurate but the conversation feels colder afterward", "You learned active listening from a book or course but it is not working", "You notice your listening feels effortful and transactional rather than natural"], doNext: ["Replace 'So what I hear you saying is...' with a 2-second pause, a softening of the face, and then: 'That sounds really hard.'", "The fix is not more technique. It is more presence. Work on the interior state \u2014 the genuine desire to understand.", "Ask yourself: 'Was I actually moved by what they said, or did I just process it?' If the latter, slow down.", "Practice response, not reflection: let the first thing out of your mouth be about their feeling, not their content."], links: [{ label: "Connection Hub", href: LINKS.connection }], callout: { label: "The Distinction", text: "'So what I hear you saying is...' (performance) vs. a 2-second pause, a softening of the face, and then: 'That sounds really hard.' The second is not technique. It is response. The nervous system knows the difference instantly." } },
{ id: "F5", icon: "\u25C9", title: "Softening: Hard Emotion / Soft Emotion", sub: "Why defensiveness blocks listening \u2014 and how to melt it", chipColor: "chR", why: "Every emotion has two layers. Hard emotions (anger, criticism, contempt) push people away \u2014 they are armor. Soft emotions (fear, loneliness, hurt) pull people in \u2014 they are skin. Leading with the hard emotion triggers your partner's amygdala. Leading with the soft one activates their social engagement system.", definition: "The Hard/Soft Emotion Split describes the two layers present in every emotional response during conflict. The hard emotion (anger, frustration, judgment) is the visible surface reaction \u2014 it is protective. Underneath it is the soft emotion (fear, loneliness, inadequacy, grief) \u2014 the actual feeling. Hard emotions trigger defensive responses. Soft emotions invite connection. The choice of which to lead with determines whether the conversation opens or shuts down.", research: "Gottman's research on the Four Horsemen showed that criticism (a hard emotion expression) predicts defensiveness with near-automatic neurological precision. Sue Johnson's EFT research demonstrated that when partners learn to identify and express the soft emotion underneath, conflict resolution improves dramatically \u2014 because the partner's threat system is not activated.", stats: ["Criticism \u2192 Defensiveness: near-automatic sequence", "Soft startup increases resolution rate significantly", "Amygdala activation from hard emotion: occurs before conscious processing"], signs: ["You lead conversations with 'You always...' or 'You never...'", "Your partner becomes immediately defensive when you bring something up", "You know you are frustrated but cannot name what is underneath the frustration", "You feel vulnerable but what comes out of your mouth is an attack"], doNext: ["Before any hard conversation: name the hard emotion (frustration, anger). Then ask: 'What am I actually afraid of underneath this?'", "Construct: 'I feel [soft emotion] about [specific situation]. What I need is [one request].'", "Practice the David conversion: Instead of 'I feel frustrated when the house is messy' \u2192 'I am scared. I come home and see chaos and feel like everything is falling apart.'", "Deliver with shoulders down, voice low, eyes soft. Let the vulnerability land. Do not explain or defend it."], links: [{ label: "Climate Hub", href: LINKS.climate }, { label: "Foundations Hub: Four Horsemen", href: LINKS.fundamentals }], quote: { text: "When David walked into the kitchen criticizing the mess, he was operating from the hard emotion: frustration. But underneath that frustration was something softer: fear. Fear that his life was out of control. Fear that his marriage was slipping away.", credit: "Ch. 19 \u2014 David and Rachel" }, callout: { label: "The Conversion", text: "Attack: 'You never listen to me.' \u2192 Confiding: 'I feel invisible when I talk to you and you look at your phone. I need to know I still matter.' The feeling is the same. The delivery determines whether you get a wall or a bridge." } },
{ id: "F6", icon: "\u25C8", title: "Curiosity: Judge to Student", sub: "The antidote to Negative Attribution", chipColor: "chB", why: "In distressed marriages, we explain our partner's behavior in the worst possible light. Curiosity presses Pause on that judgment. It creates a gap between the trigger and the reaction. Instead of deciding why they did something, you ask.", definition: "Negative Attribution is the tendency to interpret ambiguous partner behavior through the most negative possible lens. Curiosity is the discipline of converting judgment into inquiry. A Judge looks at evidence to deliver a verdict: Guilty. A Student looks at evidence to understand the mechanism: Why did this happen? What am I missing? The mental pivot from Judge to Student changes the entire neurological dynamic of the conversation.", research: "Gottman's research on Negative Sentiment Override showed that partners in NSO rated neutral behavior as negative 80%+ of the time. Brené Brown's Lake Travis case study demonstrated how a complete negative attribution narrative can be constructed in seconds \u2014 and be entirely wrong. The gap between stimulus and inquiry is where marriages silently break.", stats: ["NSO: neutral behavior rated negative 80%+ of the time", "Negative attribution: complete narrative constructed in seconds", "Curiosity question: transforms arguments into conversations"], signs: ["You routinely assume bad intent when behavior could be explained otherwise", "You feel 'set up' even when they are not doing anything wrong", "You are suspicious of their good days", "You catch yourself building a prosecution case before asking a single question"], doNext: ["Use the Brené Brown script: 'The story I am telling myself is ___. Is that true, or is something else going on?'", "When you notice judgment, pause and name it: 'I am in Judge mode right now.'", "Ask one genuine question before making any statement. Then listen \u2014 with your whole body \u2014 to the answer.", "If the answer surprises you, say: 'I did not know that. Thank you for telling me.'"], links: [{ label: "Connection Hub", href: LINKS.connection }, { label: "Foundations Hub: NSO", href: LINKS.fundamentals }], quote: { text: "Judgment would have never discovered that. Only curiosity could.", credit: "Ch. 19" }, callout: { label: "The Script", text: "Instead of: 'You are ignoring me.' Try: 'I am telling myself a story that you do not care. Is that true, or is something else going on?' This one sentence can transform an argument into a conversation." } },
{ id: "F7", icon: "\u25B3", title: "A.R.E. \u2014 The Attachment Listening Test", sub: "Sue Johnson's three-signal framework", chipColor: "chGn", why: "Attachment security is not built through grand gestures. It is built through three signals your partner's nervous system constantly evaluates: Accessible, Responsive, Engaged. Active listening is how you prove all three.", definition: "Sue Johnson's Emotionally Focused Therapy (EFT) identified three core signals that determine whether a partner feels securely attached: Accessible (Can I reach you?), Responsive (Do you care?), and Engaged (Will you stay?). These are not communication skills \u2014 they are attachment signals. When A.R.E. is present, the ventral vagal system activates (safety, openness). When absent, the sympathetic system activates (pursuit or withdrawal).", research: "Johnson's research at the Ottawa Couple and Family Institute showed that 75% of couples completing EFT moved from distress to recovery. The core mechanism was not communication skills but attachment signal repair \u2014 partners learning to send and receive A.R.E. signals. Most pursue-distance cycles are A.R.E. failures, not communication failures.", stats: ["75% of EFT couples: distress to recovery", "A.R.E. failure: primary driver of pursue-distance cycles", "Ventral vagal activation: requires all three signals present"], signs: ["Your partner has stopped reaching for you emotionally", "You feel like you are accessible but they disagree", "Conversations feel like check-ins rather than genuine connection", "One or both partners have withdrawn into parallel lives"], doNext: ["After your next conversation, honestly assess: Was I Accessible (not distracted)? Responsive (did I show it affected me)? Engaged (did I stay even when it was hard)?", "If one signal is consistently weak, that is your growth edge. Work on that one for 30 days.", "Tell your partner which signal you are working on: 'I know I tend to check out. I am working on staying Engaged.'", "Daily micro-practice: respond to 3 bids today with full eye contact and a real sentence \u2014 not 'mm-hm' from another room."], links: [{ label: "Connection Hub", href: LINKS.connection }, { label: "Foundations Hub: Bids", href: LINKS.fundamentals }], callout: { label: "The Test", text: "After your next conversation, ask yourself honestly: Was I Accessible (not distracted)? Was I Responsive (did I show it affected me)? Was I Engaged (did I stay even when it was hard)?" } },
{ id: "F8", icon: "\u2B21", title: "The Three Listening Modes", sub: "Defensive \u2192 Solution \u2192 Empathic", chipColor: "chT", why: "Most couples think they listen. Actually, they operate in one of three modes \u2014 and only one of them creates the experience of being heard. Knowing which mode you default to is the diagnostic. Shifting to empathic mode is the work.", definition: "Three distinct modes of listening: Defensive (scanning for inaccuracies and attacks, building counterarguments), Solution (identifying the problem and rehearsing the fix before understanding is complete), and Empathic (understanding the other's internal world as they experience it). Carl Rogers called empathic listening 'accurate empathy' and demonstrated it is one of the most powerful change agents in human relationships.", research: "Rogers' person-centered therapy research (1950s\u201380s) established that accurate empathy \u2014 the ability to understand another's internal frame of reference \u2014 is one of the three most powerful change agents in therapeutic relationships. The finding extended to all close relationships: people change most when they feel fully understood, not when they are advised or corrected.", stats: ["Accurate empathy: top 3 change agents in relationships (Rogers)", "Solution listening: most common mode in men (Ch. 16)", "Mode shift: requires physical reset, not just cognitive decision"], signs: ["You notice your body tense up the moment a concern is raised", "You have identified the 'fix' before they finish the first sentence", "You catch yourself cross-complaining: 'Well, what about when YOU...'", "After conversations, your partner looks deflated even though you 'resolved' it"], doNext: ["Before responding in any conversation, pause and ask: Am I defending? Am I fixing? Or am I receiving?", "If the answer is anything other than receiving, reset your body: feet on floor, shoulders down, jaw unclenched.", "Practice asking 'What was that like for you?' instead of 'What do you want me to do about it?'", "For one week, ban yourself from offering solutions unless explicitly asked: 'Do you want my input or do you want me to listen?'"], links: [{ label: "Connection Hub", href: LINKS.connection }], quote: { text: "Most people do not listen with the intent to understand. They listen with the intent to reply.", credit: "Often attributed to Stephen Covey \u2014 referenced Ch. 20" }, callout: { label: "The Mode Check", text: "Before responding in any conversation, pause and ask: Am I defending? Am I fixing? Or am I receiving? If the answer is anything other than receiving, reset your body (feet on floor, shoulders down, jaw unclenched) and try again." } }
];var STS = [
{ id: "ST1", type: "Neuroscience", color: "#14465E", title: "The Felt-Heard Effect \u2014 Right Anterior Insula Activation", finding: "When subjects felt their emotional experience was matched \u2014 not just their words \u2014 activity in the right anterior insula (the brain's empathy center) increased significantly. The subjective experience was: 'I am not alone in this.' Functional MRI studies show that being genuinely heard activates the same neural pathways as physical comfort.", application: "This is why your partner can say 'you do not listen' even when you can quote them verbatim. They are describing a neurological experience of isolation, not making a factual complaint about your hearing.", stats: ["Right anterior insula activation", "Same pathways as physical comfort"] },
{ id: "ST2", type: "Case Study", color: "#065F46", title: "The Lake Travis Moment \u2014 Brené Brown", finding: "Brown and her husband were swimming at Lake Travis. She felt ignored; he was managing a panic attack. Neither asked what was happening. Her negative attribution was complete and wrong. She built an entire story about his rejection without a single question.", application: "The gap between 'I notice something is wrong' and 'I ask about it' is where most listening failures live. Close the gap with one sentence: 'The story I am telling myself is ___. Is that true?'", stats: ["Complete narrative: constructed in seconds", "Zero questions asked", "Full story: entirely wrong"] },
{ id: "ST3", type: "Neuroscience", color: "#5B3E9C", title: "Micro-Expression Detection \u2014 Paul Ekman", finding: "Human brains detect emotional micro-expressions lasting as little as 1/25th of a second. Partners detect contempt, boredom, and distraction in the listener's face before a word is spoken. Ekman catalogued over 10,000 facial muscle configurations.", application: "You cannot perform presence. The face leaks. Work on the interior state \u2014 the genuine desire to understand \u2014 and the presence will follow. Technique without interior change is detected and rejected.", stats: ["1/25th second detection speed", "10,000+ facial configurations", "Face: primary communication channel"] },
{ id: "ST4", type: "Clinical Research", color: "#8B5C2A", title: "Carl Rogers \u2014 Accurate Empathy as Change Agent (1957)", finding: "Rogers established that accurate empathy is one of the three most powerful change agents in therapeutic relationships (alongside unconditional positive regard and congruence). People change most when they feel fully understood, not when they are advised or corrected.", application: "Most couples use advice, correction, and instruction. Rogers showed understanding alone is more transformative. The MVE Protocol is a practical application of this research.", stats: ["Top 3 change agents", "Understanding > advice", "Extended to all close relationships"] },
{ id: "ST5", type: "Attachment Research", color: "#14465E", title: "Sue Johnson \u2014 A.R.E. and Emotionally Focused Therapy", finding: "Johnson's research showed that 75% of couples completing EFT moved from distress to recovery. The core mechanism was attachment signal repair \u2014 partners learning to send and receive A.R.E. signals (Accessible, Responsive, Engaged). When partners felt they could reach each other, conflict decreased organically.", application: "Active listening is not a communication technique. It is an attachment signal. When you listen fully, you communicate: 'You can reach me. I am here.' Listening failures feel like abandonment \u2014 because neurologically, they are.", stats: ["75% distress to recovery", "Attachment signal repair", "Conflict decreased organically"] },
{ id: "ST6", type: "Developmental", color: "#7F1D1D", title: "Still Face Experiment \u2014 Ed Tronick (1975)", finding: "Mothers went from responsive interaction to a flat, unresponsive face. Infants became rapidly distressed \u2014 reaching, protesting, and eventually withdrawing into self-soothing. Relational safety is calibrated through responsive facial expression, not mere physical presence.", application: "Adults respond identically. When your partner talks to you and your face is absorbed in a screen, their nervous system registers: 'I am reaching and no one is there.' The distress is biological, not dramatic.", stats: ["Distress: visible within seconds", "Withdrawal into self-soothing", "Adults respond identically"] },
{ id: "ST7", type: "Gottman Research", color: "#065F46", title: "Bids for Connection \u2014 The 86% vs 33% Split", finding: "Couples who remained happy six years later turned toward each other's bids 86% of the time. Couples who divorced turned toward only 33%. Every bid \u2014 'look at that,' 'my back hurts,' 'did you see this?' \u2014 is a micro-moment of listening that compounds.", application: "Deep listening is not only about hard conversations. It is about the 50+ daily micro-moments where your partner reaches for you. Turning toward bids is the daily practice. The 30-minute conversation is the advanced practice.", stats: ["Masters: 86% turn-toward rate", "Disasters: 33% turn-toward rate", "50+ daily micro-bids"] },
{ id: "ST8", type: "Theology", color: "#A04020", title: "Quick to Hear \u2014 James 1:19 and the Ancient Ordering", finding: "'Let every person be quick to hear, slow to speak, slow to anger.' The ordering is deliberate. Proverbs 18:13: 'If one gives an answer before he hears, it is his folly and shame.' Jesus modeled deep listening \u2014 asking questions, drawing people out, giving space for the full story (John 4, Luke 24).", application: "Most of us reverse the ancient ordering: quick to speak, slow to hear, quick to anger. The discipline of listening is older than psychology. The mouth that opens too fast is a mouth that never received. Silence is not emptiness \u2014 it is hospitality.", stats: ["James 1:19: hear \u2192 speak \u2192 anger", "Proverbs 18:13: folly of premature answers", "John 4, Luke 24: Jesus modeled listening"] }
];var PROTOS = [
{ id: "P1", title: "The 10-Minute Container", dur: "10 min", ctx: "Daily practice", desc: "A structured listening exercise. Five minutes each. One speaks, one listens using MVE only. When the timer goes, you stop \u2014 even if you are not done. Success is ending safely, not solving the problem.", steps: ["Set a timer for 5 minutes. Decide who speaks first.", "Speaker shares anything on their mind \u2014 stress, feelings, fears, hopes. No restrictions.", "Listener uses only Mirror, Validate, Empathize. No fixing. No defending. No redirecting.", "If the speaker criticizes you, breathe. Say: 'I hear you. That must have been hard.' Do not defend.", "When the timer sounds, stop. Switch roles for another 5 minutes.", "End with: 'Thank you for sharing that. Is there anything else you want me to know?'"], safety: "If you flood during this exercise (heart racing, mind blank, jaw locked), use the Pause Protocol. Say: 'I want to hear this. I need 5 minutes to calm down so I can really listen.' Then return.", faith: "James 1:19 gives a specific order: 'Be quick to hear, slow to speak, slow to anger.' Most of us reverse it. This exercise forces the correct order." },
{ id: "P2", title: "The Curiosity Conversion", dur: "2 min", ctx: "In-the-moment", desc: "When you catch yourself in Negative Attribution (assuming the worst about your partner's motives), convert the judgment into a question using Brené Brown's story-check script.", steps: ["Notice the judgment: 'They did that because they do not care / are selfish / are punishing me.'", "Pause. Name it: 'I am in Judge mode.'", "Convert to curiosity: 'The story I am telling myself is ___. Is that true, or is something else going on?'", "Ask the actual question out loud. Then listen \u2014 with your whole body \u2014 to the answer.", "If the answer surprises you, say: 'I did not know that. Thank you for telling me.'"], safety: "If the answer is hard to hear, do not defend. Receive it. You can process your feelings later. The goal is to close the gap between trigger and truth.", faith: "Proverbs 18:13: 'If one gives an answer before he hears, it is his folly and shame.' Every assumption is an answer given before hearing." },
{ id: "P3", title: "The Soft Emotion Lead", dur: "5 min", ctx: "Before hard conversations", desc: "Before any difficult conversation, identify the soft emotion underneath your hard emotion and lead with that instead. This changes the entire nervous system dynamic of the exchange.", steps: ["Name the hard emotion: frustration, anger, contempt, judgment, irritation.", "Ask yourself: 'What am I actually afraid of? What hurts underneath this?'", "Write the soft emotion: fear, loneliness, hurt, inadequacy, grief, rejection.", "Construct: 'I feel [soft emotion] about [specific situation]. What I need is [one request].'", "Deliver with shoulders down, voice low, eyes soft. Let the vulnerability land."], safety: "If your partner responds with a hard emotion (defensiveness, dismissal), do not escalate. Say: 'That was hard to share. I do not need a perfect response. I just needed you to know.'", faith: "2 Corinthians 12:9 \u2014 God's power is made perfect in weakness. Your vulnerability is not a liability. It is the only doorway to genuine connection." },
{ id: "P4", title: "The 30-Minute Deep Listen", dur: "30 min", ctx: "Weekly practice", desc: "A weekly extended listening session. One partner speaks for the full 30 minutes. The other partner's only job is to understand their inner world. No fixing. No defending. No agenda.", steps: ["Setup: Uninterrupted time. No phones. Comfortable seating. Face to face.", "Decide roles: one is the Listener, one is the Speaker. Switch next time.", "Speaker shares anything: stress, relationship feelings, worries, dreams, frustrations.", "Listener uses MVE throughout. Mirror, Validate, Empathize.", "Listener asks clarifying questions only: 'Tell me more...' or 'What was that like for you?'", "DO NOT: Interrupt. Defend. Fix. Minimize. One-up. Redirect.", "After 30 minutes: 'Thank you for trusting me with that. Is there anything else?'", "If they say no, end there. Do not launch into your own stuff. Let them feel heard first."], safety: "If the speaker shares something devastating, resist the urge to panic. Say: 'Thank you for trusting me with that. Can we talk more tomorrow when I have had time to process?'", faith: "Jesus modeled deep listening with the Samaritan woman at the well (John 4). He asked questions. He drew her out. He already knew \u2014 but He honored her need to tell it." }
];var FOUNDS = [
{ key: "polyvagal", title: "Polyvagal Hierarchy \u2014 Your Nervous System in Conflict", chipColor: "chB", why: "Your body chooses its state before your mind chooses words. You cannot listen, empathize, or receive from the wrong state.", summary: "Social Engagement (ventral vagal): open, curious, able to listen. Fight/Flight (sympathetic): interrupts, defends, escalates. Freeze/Collapse (dorsal vagal): goes blank, monosyllabic, withdraws. Most couples try to listen while in Fight/Flight \u2014 almost nothing gets received there. The listener's state determines reception capacity.", stats: ["Tone of voice: ~38% of emotional impact", "Words: ~7% during emotional activation", "State shift: < 1 second"], doNext: "Before any hard conversation, regulate first: walk, cold water, slow breathing (4 in / 6 out). Return when you are in the ventral vagal window \u2014 the only state where genuine listening is neurologically possible.", link: LINKS.climate },
{ key: "flooding", title: "Flooding Threshold \u2014 When the Brain Goes Offline", chipColor: "chR", why: "When flooded (HR > ~100 BPM), the prefrontal cortex is functionally offline. Continuing to talk while flooded is not listening \u2014 it is damage.", summary: "Flooding is a state of severe physiological arousal where heart rate exceeds ~100 BPM, cortisol spikes, and the brain's rational centers become inaccessible. The flooded person cannot listen accurately, cannot empathize, and cannot receive \u2014 even when they believe they can. Men flood faster and take longer to recover. Recovery requires 20\u201330 minutes of genuine rest (not rumination).", stats: ["HR > ~100 BPM = flooding", "20\u201330 min recovery required", "Men flood faster on average"], doNext: "Call the pause early \u2014 before you are fully flooded. During the break: walk or do something physical. No replaying the fight. Return after 20+ minutes. Start with: 'I am calmer. I want to hear you.'", link: LINKS.climate },
{ key: "bids", title: "Bids for Connection \u2014 The Invisible Currency", chipColor: "chGn", why: "Listening is not only about hard conversations. It is about the 50+ daily micro-bids where your partner reaches for you. The response ratio predicts everything.", summary: "A bid is any attempt to connect: 'Did you see that?' A sigh. A touch. Partners can turn toward (respond), turn away (ignore), or turn against (respond with irritation). Thriving couples turn toward 86% of the time. Divorced couples: 33%. Missing small bids is usually distraction, not malice \u2014 but a partner who repeatedly has bids missed stops bidding.", stats: ["Masters: 86% turn-toward", "Disasters: 33% turn-toward", "Most bids are small and indirect"], doNext: "Put the phone face-down during the first 10 minutes after reunion daily. For every bid your partner makes today, acknowledge it with a sentence and eye contact \u2014 not 'mm-hm' from another room.", link: LINKS.connection },
{ key: "technoference", title: "Technoference \u2014 Digital Displacement of Presence", chipColor: "chG", why: "Phone use in the presence of a partner \u2014 even silent, face-down \u2014 reduces relationship satisfaction, reported closeness, and listening quality.", summary: "McDaniel & Coyne (2016): higher technoference predicted lower relationship satisfaction and higher depression. A phone in the hand during conversation is a constant micro-signal of partial absence. The Still Face experiment applies here: incomplete attention reads as incomplete presence. The partner's nervous system registers it before conscious awareness does.", stats: ["Face-down phone: reduces conversation quality vs. no phone", "Phubbing: predicts lower satisfaction, higher depression"], doNext: "Agree on two phone-free zones: the dinner table and the first 10 minutes after reuniting. If a partner complains about phones, do not explain \u2014 ask: 'What would it mean to you if I put it away?'", link: LINKS.connection }
];function toast(icon, title, body) {
var el = document.getElementById("duo-li2-toasts");
if (!el) return;
var d = document.createElement("div");
d.className = "li2toast";
d.innerHTML = '<div style="font-size:20px">' + icon + '</div><div><div style="font-weight:700;font-size:13px">' + title + '</div><div style="font-size:12px;opacity:.8;margin-top:3px">' + body + '</div></div>';
el.appendChild(d);
setTimeout(function() {
d.style.transition = "opacity .4s";
d.style.opacity = "0";
setTimeout(function() { d.remove() }, 400);
}, 3500);
}function scrollToSection(id) {
var el = document.getElementById(id);
if (!el) return;
el.scrollIntoView({ behavior: 'smooth', block: 'start' });
}function Chip(p) {
return h("span", { className: "li2ch " + (p.c || "") }, h("span", { className: "li2dot" }), p.children);
}function SPill(p) {
return h("span", { className: "spill" }, p.children);
}function Kbd(p) {
return h("span", { className: "li2kbd" }, p.children);
}function RBlk(p) {
return h("div", { className: "rblk" },
h("div", { style: { display: "flex", alignItems: "flex-start", gap: 8 } },
h("span", { style: { color: "#3730A3", fontWeight: 800, fontSize: ".72rem", textTransform: "uppercase", letterSpacing: ".05em", marginTop: 2, flexShrink: 0 } }, "Research"),
h("p", { style: { fontSize: ".9rem", color: "#3730A3", lineHeight: 1.65, margin: 0 } }, p.text)
),
p.stats ? (p.stats.length > 0 ? h("div", { style: { marginTop: 8, display: "flex", flexWrap: "wrap", gap: 6 } }, p.stats.map(function(s, i) { return h(SPill, { key: i }, s) })) : null) : null
);
}function FwCard(p) {
var fw = p.fw, open = p.open, onToggle = p.onToggle;
return h("div", { id: "fw-" + fw.id, className: "li2c", style: { overflow: "hidden" } },
h("button", { className: "li2acc", onClick: onToggle, type: "button", style: { display: "flex", alignItems: "flex-start", justifyContent: "space-between", gap: 16 } },
h("div", { style: { minWidth: 0, flex: 1 } },
h("h3", { className: "li2s", style: { fontSize: "1.1rem", fontWeight: 700, lineHeight: 1.35, margin: 0 } }, fw.title),
h("div", { style: { marginTop: 6, display: "flex", flexWrap: "wrap", gap: 5 } },
h(Chip, { c: fw.chipColor }, fw.id),
h(Chip, { c: fw.chipColor }, fw.sub)
),
h("p", { style: { marginTop: 8, fontSize: ".92rem", color: "var(--muted)", lineHeight: 1.6 } },
h("span", { style: { fontWeight: 700, color: "var(--ink)" } }, "Why it matters: "),
fw.why
)
),
h(Kbd, null, open ? "Close" : "Open")
),
open ? h("div", { style: { padding: "0 20px 24px" } },
h("div", { className: "dvd", style: { margin: "4px 0 20px" } }),
h("div", { style: { padding: "16px 18px", borderRadius: 14, background: "#FCFAF5", border: "1px solid var(--border)", marginBottom: 16 } },
h("h5", { style: { fontWeight: 800, fontSize: ".72rem", textTransform: "uppercase", letterSpacing: ".05em", color: "var(--muted)", margin: "0 0 6px" } }, "Definition"),
h("p", { style: { fontSize: ".95rem", color: "var(--ink)", fontWeight: 600, lineHeight: 1.65, margin: 0 } }, fw.definition)
),
fw.research ? h(RBlk, { text: fw.research, stats: fw.stats }) : null,
fw.quote ? h("div", { style: { background: "var(--soft)", borderLeft: "3px solid var(--teal)", borderRadius: 12, padding: "14px 18px", margin: "16px 0" } },
h("div", { className: "li2s", style: { fontSize: ".92rem", color: "#1A2A3A", fontStyle: "italic", lineHeight: 1.75 } }, "\u201C" + fw.quote.text + "\u201D"),
fw.quote.credit ? h("div", { style: { fontSize: ".72rem", color: "#8A9AAA", marginTop: 8, fontWeight: 600 } }, "\u2014 " + fw.quote.credit) : null
) : null,
h("div", { style: { marginTop: 16, display: "grid", gridTemplateColumns: "1fr 280px", gap: 18 } },
h("div", null,
fw.signs ? (fw.signs.length > 0 ? h("div", null,
h("h4", { className: "li2s", style: { fontSize: "1rem", fontWeight: 600, margin: "0 0 10px" } }, "Signs you\u2019re in this"),
h("ul", { style: { margin: 0, padding: 0, listStyle: "none" } }, fw.signs.map(function(s, i) {
return h("li", { key: i, style: { display: "flex", gap: 10, marginBottom: 10 } },
h("span", { style: { marginTop: 8, width: 7, height: 7, borderRadius: "50%", flexShrink: 0, background: "var(--gold)" } }),
h("span", { style: { fontSize: ".92rem", lineHeight: 1.6 } }, s)
)
}))
) : null) : null,
fw.callout ? h("div", { style: { background: "var(--light)", border: "1px solid var(--mid)", borderRadius: 14, padding: "14px 18px", marginTop: 14 } },
h("div", { style: { fontWeight: 700, fontSize: ".7rem", color: "var(--teal)", marginBottom: 6, textTransform: "uppercase", letterSpacing: ".04em" } }, fw.callout.label),
h("div", { style: { fontSize: ".9rem", color: "#1A2A3A", lineHeight: 1.75 } }, fw.callout.text)
) : null
),
h("div", null,
h("div", { className: "li2sc", style: { padding: 18, height: "100%" } },
h("h4", { className: "li2s", style: { fontSize: "1rem", fontWeight: 600, margin: "0 0 12px" } }, "Try this next"),
h("ol", { style: { margin: 0, padding: 0, listStyle: "none" } }, fw.doNext.map(function(step, i) {
return h("li", { key: i, style: { display: "flex", gap: 10, marginBottom: 14 } },
h("span", { style: { marginTop: 2, width: 26, height: 26, flexShrink: 0, display: "inline-flex", alignItems: "center", justifyContent: "center", borderRadius: "50%", border: "1px solid var(--border)", background: "#fff", fontWeight: 700, fontSize: ".78rem", color: "var(--muted)" } }, i + 1),
h("span", { style: { fontSize: ".88rem", lineHeight: 1.6 } }, step)
)
})),
fw.links ? (fw.links.length > 0 ? h("div", null,
h("div", { className: "dvd", style: { margin: "14px 0" } }),
h("h5", { style: { fontSize: ".8rem", fontWeight: 800, color: "var(--muted)", textTransform: "uppercase", letterSpacing: ".04em", margin: "0 0 8px" } }, "Go deeper"),
h("div", { style: { display: "flex", flexDirection: "column", gap: 5 } }, fw.links.map(function(l, i) {
return h("a", { key: i, href: l.href, target: "_blank", rel: "noreferrer", style: { color: "#6B4E33", textDecoration: "underline", textDecorationColor: "rgba(196,167,125,.55)", textUnderlineOffset: 3, fontSize: ".88rem" } }, l.label + " \u2197")
}))
) : null) : null
)
)
)
) : null
);
}function PostCard(p) {
var post = p.post, read = p.read, onMark = p.onMark;
return h("div", { id: "post-" + post.id, style: { position: "relative" } },
h("a", { href: post.url, target: "_blank", rel: "noreferrer", className: "li2c", style: { display: "block", padding: 22, textDecoration: "none", borderLeft: "4px solid " + (read ? "var(--teal)" : "var(--border)") } },
h("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "flex-start", marginBottom: 12 } },
h("div", { style: { display: "flex", gap: 5, flexWrap: "wrap" } },
h(Chip, { c: "chT" }, post.id),
h(Chip, null, post.type),
post.bookRef ? h(Chip, { c: "chG" }, post.bookRef) : null
),
h("span", { style: { fontSize: 11, color: "var(--muted)", whiteSpace: "nowrap", fontWeight: 600 } }, post.readTime)
),
h("div", { className: "li2s", style: { fontSize: 17, fontWeight: 700, color: "var(--ink)", marginBottom: 8, lineHeight: 1.35 } }, post.name),
h("p", { style: { fontSize: 13.5, color: "var(--muted)", lineHeight: 1.7, marginBottom: 14 } }, post.desc),
h("div", { style: { background: "var(--light)", border: "1px solid var(--mid)", borderRadius: 10, padding: "10px 14px", fontSize: 12.5, color: "var(--teal)", fontWeight: 600, marginBottom: 14, lineHeight: 1.6 } }, "Key idea: \u201C" + post.keyIdea + "\u201D"),
h("div", { style: { display: "flex", gap: 5, flexWrap: "wrap" } }, post.tags.map(function(t) { return h(Chip, { key: t }, t) }))
),
h("button", { type: "button", onClick: function(e) { e.preventDefault(); e.stopPropagation(); onMark(post.id) }, style: { position: "absolute", top: 18, right: 18, padding: "5px 12px", borderRadius: 10, background: read ? "var(--teal)" : "transparent", border: "1px solid " + (read ? "var(--teal)" : "var(--mid)"), color: read ? "#fff" : "var(--muted)", fontSize: 11, fontWeight: 700, cursor: "pointer", fontFamily: "'DM Sans',sans-serif", zIndex: 2 } }, read ? "\u2713 Read" : "Mark read")
);
}function StCard(p) {
var s = p.s, open = p.open, onToggle = p.onToggle;
return h("div", { id: "study-" + s.id, className: "li2c", style: { cursor: "pointer", overflow: "hidden" }, onClick: onToggle },
h("div", { style: { padding: "18px 20px", display: "flex", justifyContent: "space-between", alignItems: "center" } },
h("div", { style: { display: "flex", alignItems: "center", gap: 12, minWidth: 0 } },
h("span", { style: { display: "inline-flex", alignItems: "center", padding: "2px 9px", borderRadius: 6, fontSize: 10, fontWeight: 700, letterSpacing: ".04em", textTransform: "uppercase", background: s.color + "14", color: s.color } }, s.type),
h("div", { className: "li2s", style: { fontWeight: 700, fontSize: 14, color: "var(--ink)", lineHeight: 1.35 } }, s.title)
),
h(Kbd, null, open ? "Close" : "Open")
),
open ? h("div", { style: { padding: "0 20px 20px" } },
h("div", { className: "dvd", style: { marginBottom: 16 } }),
h("div", { style: { marginBottom: 14 } },
h("div", { style: { fontWeight: 700, fontSize: ".7rem", color: s.color, marginBottom: 6, textTransform: "uppercase", letterSpacing: ".04em" } }, "The Finding"),
h("p", { style: { fontSize: 13.5, color: "#2A3A4A", lineHeight: 1.8, margin: 0 } }, s.finding)
),
s.stats ? (s.stats.length > 0 ? h("div", { style: { marginBottom: 14, display: "flex", flexWrap: "wrap", gap: 6 } }, s.stats.map(function(st, i) { return h(SPill, { key: i }, st) })) : null) : null,
h("div", { style: { background: s.color + "0D", border: "1px solid " + s.color + "22", borderRadius: 14, padding: "14px 18px" } },
h("div", { style: { fontWeight: 700, fontSize: ".7rem", color: s.color, marginBottom: 6, textTransform: "uppercase", letterSpacing: ".04em" } }, "Application"),
h("p", { style: { fontSize: 13.5, color: "#2A3A4A", lineHeight: 1.8, margin: 0 } }, s.application)
)
) : null
);
}function PrCard(p) {
var pr = p.pr, open = p.open, onToggle = p.onToggle;
return h("div", { id: "proto-" + pr.id, className: "li2c", style: { cursor: "pointer", overflow: "hidden", borderLeft: "3px solid " + (open ? "var(--gold)" : "var(--border)") }, onClick: onToggle },
h("div", { style: { padding: "18px 20px", display: "flex", justifyContent: "space-between", alignItems: "center" } },
h("div", { style: { display: "flex", alignItems: "center", gap: 12 } },
h("div", { style: { width: 40, height: 40, borderRadius: 12, background: open ? "var(--gold)" : "#FEF3E2", display: "flex", alignItems: "center", justifyContent: "center", fontSize: 16, color: open ? "#fff" : "var(--gold)", transition: "all .2s", flexShrink: 0 } }, "\u25B7"),
h("div", null,
h("div", { className: "li2s", style: { fontWeight: 700, fontSize: 15, color: "var(--ink)", lineHeight: 1.3 } }, pr.title),
h("div", { style: { display: "flex", gap: 5, marginTop: 4 } },
h(Chip, { c: "chG" }, pr.dur),
h(Chip, null, pr.ctx)
)
)
),
h(Kbd, null, open ? "Close" : "Open")
),
open ? h("div", { style: { padding: "0 20px 24px" } },
h("div", { className: "dvd", style: { marginBottom: 16 } }),
h("p", { style: { fontSize: 13.5, color: "#2A3A4A", lineHeight: 1.8, marginBottom: 16 } }, pr.desc),
h("div", { style: { marginBottom: 16 } }, pr.steps.map(function(s, i) {
return h("div", { key: i, className: "li2sl", style: { display: "flex", gap: 16, marginBottom: 16, position: "relative" } },
h("div", { style: { flexShrink: 0, width: 38, height: 38, borderRadius: "50%", background: "var(--gold)", color: "#fff", display: "flex", alignItems: "center", justifyContent: "center", fontSize: 13, fontWeight: 700 } }, i + 1),
h("div", { style: { fontSize: 13.5, color: "#2A3A4A", lineHeight: 1.75, paddingTop: 8 } }, s)
)
})),
pr.safety ? h("div", { style: { background: "#FFF1F2", border: "1px solid #FECACA", borderRadius: 14, padding: "14px 18px", marginBottom: 14 } },
h("div", { style: { fontWeight: 700, fontSize: ".7rem", color: "#7F1D1D", marginBottom: 6, textTransform: "uppercase", letterSpacing: ".04em" } }, "Safety Valve"),
h("div", { style: { fontSize: 13, color: "#3A1A1A", lineHeight: 1.75 } }, pr.safety)
) : null,
h("div", { style: { background: "#FEF9EC", border: "1px solid #E8D5A0", borderRadius: 14, padding: "14px 18px" } },
h("div", { style: { fontWeight: 700, fontSize: ".7rem", color: "#92400E", marginBottom: 6, textTransform: "uppercase", letterSpacing: ".04em" } }, "Faith Layer"),
h("div", { style: { fontSize: 13, color: "#3A2A0A", lineHeight: 1.75 } }, pr.faith)
)
) : null
);
}function FoundCard(p) {
var f = p.f;
return h("div", { className: "li2c", style: { padding: "18px 20px" } },
h("div", { style: { display: "flex", alignItems: "center", gap: 8, marginBottom: 10 } },
h(Chip, { c: f.chipColor }, f.key),
h("span", { style: { fontSize: ".7rem", fontWeight: 700, color: "var(--muted)", textTransform: "uppercase", letterSpacing: ".04em" } }, "FROM FOUNDATIONS HUB")
),
h("h4", { className: "li2s", style: { fontSize: "1.05rem", fontWeight: 700, margin: "0 0 8px" } }, f.title),
h("p", { style: { fontSize: ".9rem", color: "var(--muted)", lineHeight: 1.65, margin: "0 0 12px" } },
h("span", { style: { fontWeight: 700, color: "var(--ink)" } }, "Why: "),
f.why
),
h("p", { style: { fontSize: ".9rem", color: "#2A3A4A", lineHeight: 1.65, margin: "0 0 12px" } }, f.summary),
f.stats ? (f.stats.length > 0 ? h("div", { style: { display: "flex", flexWrap: "wrap", gap: 5, marginBottom: 12 } }, f.stats.map(function(s, i) { return h(SPill, { key: i }, s) })) : null) : null,
h("div", { className: "hbox", style: { marginBottom: 12 } },
h("div", { style: { fontWeight: 700, fontSize: ".7rem", color: "var(--gold)", marginBottom: 4, textTransform: "uppercase", letterSpacing: ".04em" } }, "Try this"),
h("div", { style: { fontSize: ".88rem", color: "#2A3A4A", lineHeight: 1.7 } }, f.doNext)
),
h("a", { href: f.link, target: "_blank", rel: "noreferrer", style: { color: "#6B4E33", textDecoration: "underline", textDecorationColor: "rgba(196,167,125,.55)", textUnderlineOffset: 3, fontSize: ".88rem", fontWeight: 600 } }, "Go deeper in Foundations Hub \u2197")
);
}function Diag(p) {
var st = p.st, dp = p.dp;
var a = us([]), ans = a[0], sA = a[1];
var sp = us(0), step = sp[0], sS = sp[1];
var dn = us(false), done = dn[0], sD = dn[1];
var rp = us(null), res = rp[0], sR = rp[1];if (st.dDone) {
if (!done) {
sD(true);
var saved = st.dAns;
var c = {};
saved.forEach(function(x) { c[x] = (c[x] || 0) + 1 });
var top = Object.entries(c).sort(function(a, b) { return b[1] - a[1] })[0];
sR(top ? DRESULTS[top[0]] : DRESULTS.fixer);
}
}function choose(score) {
var next = ans.concat([score]);
sA(next);
if (step < DQS.length - 1) {
sS(step + 1);
} else {
var c = {};
next.forEach(function(x) { c[x] = (c[x] || 0) + 1 });
var top = Object.entries(c).sort(function(a, b) { return b[1] - a[1] })[0];
var r = DRESULTS[top[0]];
sR(r);
sD(true);
dp({ t: "DD" });
dp({ t: "DA", v: next });
dp({ t: "W" });
toast("\uD83C\uDFAF", "Diagnostic complete", r.label);
}
}if (done) {
if (res) {
return h("div", { style: { background: res.bg, border: "1px solid " + res.border, borderRadius: 18, padding: "22px 26px" } },
h("div", { style: { display: "flex", alignItems: "center", gap: 14, marginBottom: 14 } },
h("div", { style: { width: 44, height: 44, borderRadius: 12, background: res.color, color: "#fff", display: "flex", alignItems: "center", justifyContent: "center", fontWeight: 700, fontSize: 14 } }, "\u25CE"),
h("div", null,
h("div", { className: "li2s", style: { fontWeight: 700, fontSize: 17, color: res.color } }, res.label),
h("div", { style: { fontSize: 12, color: res.color, opacity: .7 } }, res.grade)
)
),
h("p", { style: { fontSize: 13.5, color: "#1A2A3A", lineHeight: 1.8, margin: "0 0 16px" } }, res.text),
h("div", { style: { display: "flex", gap: 10, flexWrap: "wrap" } },
h("a", { href: "https://duo.bz/" + res.post, target: "_blank", rel: "noreferrer", style: { padding: "10px 20px", borderRadius: 12, background: res.color, color: "#fff", fontSize: 13, fontWeight: 600, textDecoration: "none" } }, res.postLabel + " \u2192"),
h("button", { type: "button", onClick: function() { sD(false); sS(0); sA([]); sR(null); dp({ t: "X" }) }, style: { padding: "10px 20px", borderRadius: 12, background: "transparent", border: "1px solid " + res.color + "40", color: res.color, fontSize: 13, fontWeight: 600, cursor: "pointer", fontFamily: "'DM Sans',sans-serif" } }, "Retake")
)
);
}
}var q = DQS[step];
return h("div", { style: { background: "#fff", border: "1px solid var(--border)", borderRadius: 18, padding: "22px 26px" } },
h("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", marginBottom: 16 } },
h("div", { className: "li2s", style: { fontWeight: 600, fontSize: 15, color: "var(--ink)" } }, "Listening Style Diagnostic"),
h("div", { style: { fontSize: 12, color: "var(--muted)", fontWeight: 700 } }, "Q" + (step + 1) + " / " + DQS.length)
),
h("div", { style: { width: "100%", height: 4, background: "var(--light)", borderRadius: 4, marginBottom: 20 } },
h("div", { style: { width: ((step / DQS.length) * 100) + "%", height: "100%", background: "var(--teal)", borderRadius: 4, transition: "width .3s" } })
),
h("p", { style: { fontSize: 14.5, color: "var(--ink)", lineHeight: 1.7, marginBottom: 18, fontWeight: 500 } }, q.q),
h("div", { style: { display: "flex", flexDirection: "column", gap: 8 } }, q.opts.map(function(opt, i) {
return h("button", { key: i, className: "li2dg", onClick: function() { choose(opt.s) } }, opt.label)
}))
);
}function SearchBar(p) {
var q = p.q, setQ = p.setQ, count = p.count;
return h("div", { className: "li2c", style: { padding: "16px 20px", marginBottom: 18 } },
h("div", { style: { display: "flex", flexDirection: "row", alignItems: "center", gap: 14, flexWrap: "wrap" } },
h("div", { style: { flexShrink: 0 } },
h("div", { style: { fontWeight: 700, fontSize: ".92rem" } }, "Search All Content"),
h("div", { style: { fontSize: ".8rem", color: "var(--muted)" } }, q ? count + " result" + (count !== 1 ? "s" : "") + " for \u201C" + q + "\u201D" : "Try: flooding, softening, MVE, curiosity, attachment")
),
h("div", { style: { flex: 1, minWidth: 200 } },
h("input", { type: "text", className: "li2search", value: q, onChange: function(e) { setQ(e.target.value) }, placeholder: "Search concepts, studies, protocols..." })
),
q ? h("button", { className: "li2btn", onClick: function() { setQ("") }, type: "button" }, "Clear") : null
)
);
}function App() {
var sr = ur(red, DEF), st = sr[0], dp = sr[1];
var loaded = uref(false);
var qr = us(""), query = qr[0], setQ = qr[1];ue(function() {
if (loaded.current) return;
loaded.current = true;
try {
var s = localStorage.getItem(LS);
if (s) dp({ t: "L", p: JSON.parse(s) })
} catch (e) {}
}, []);ue(function() {
try { localStorage.setItem(LS, JSON.stringify(st)) } catch (e) {}
}, [st]);var rc = st.reads.length;function setTab(t) { dp({ t: "TAB", v: t }) }function markRead(id) {
var was = st.reads.indexOf(id) >= 0;
dp({ t: "RD", id: id });
if (!was) toast("\uD83D\uDCD6", "Post marked as read", "Progress saved")
}function handleSym(sym) {
dp({ t: "SYM", v: sym.id });
dp({ t: "TAB", v: "frameworks" });
dp({ t: "FW", id: sym.fw });
setTimeout(function() { scrollToSection("fw-" + sym.fw) }, 200);
toast("\uD83C\uDFAF", "Starting point found", "Scrolling to " + sym.fw);
}var ql = query.toLowerCase();
var fFws = um(function() {
if (!ql) return FWS;
return FWS.filter(function(fw) {
return [fw.title, fw.sub, fw.why, fw.definition, fw.research || ""].concat(fw.signs || []).concat(fw.doNext || []).join(" ").toLowerCase().indexOf(ql) >= 0
})
}, [ql]);
var fPosts = um(function() {
if (!ql) return POSTS;
return POSTS.filter(function(p) {
return [p.name, p.desc, p.keyIdea].concat(p.tags || []).join(" ").toLowerCase().indexOf(ql) >= 0
})
}, [ql]);
var fSts = um(function() {
if (!ql) return STS;
return STS.filter(function(s) {
return [s.title, s.finding, s.application, s.type].join(" ").toLowerCase().indexOf(ql) >= 0
})
}, [ql]);
var fPros = um(function() {
if (!ql) return PROTOS;
return PROTOS.filter(function(p) {
return [p.title, p.desc].concat(p.steps || []).join(" ").toLowerCase().indexOf(ql) >= 0
})
}, [ql]);var searchCount = fFws.length + fPosts.length + fSts.length + fPros.length;
var tabs = [
{ id: "guide", label: "Guide" },
{ id: "frameworks", label: "Frameworks (" + FWS.length + ")" },
{ id: "posts", label: "Posts (" + POSTS.length + ")" },
{ id: "protocols", label: "Protocols (" + PROTOS.length + ")" },
{ id: "studies", label: "Research (" + STS.length + ")" },
{ id: "foundations", label: "Foundations (" + FOUNDS.length + ")" },
{ id: "path", label: "Your Path" }
];return h("div", { style: { maxWidth: 1200, margin: "0 auto", padding: "0 16px 60px" } },
h("div", { style: { background: "linear-gradient(145deg,#14465E 0%,#0B2E40 60%,#091E2A 100%)", borderRadius: "0 0 22px 22px", padding: "30px 30px 36px", marginBottom: 26, position: "relative", overflow: "hidden" } },
h("div", { style: { position: "absolute", top: -40, right: -40, width: 220, height: 220, borderRadius: "50%", background: "rgba(200,147,90,.06)" } }),
h("div", { style: { position: "absolute", bottom: -60, left: -30, width: 180, height: 180, borderRadius: "50%", background: "rgba(255,255,255,.02)" } }),
h("div", { style: { display: "flex", alignItems: "center", gap: 8, marginBottom: 18, flexWrap: "wrap" } },
h("a", { href: LINKS.compass, style: { fontSize: 11, color: "rgba(255,255,255,.45)", textDecoration: "none", fontWeight: 600 } }, "Compass"),
h("span", { style: { fontSize: 11, color: "rgba(255,255,255,.25)" } }, "\u203A"),
h("a", { href: MOD.cat.url, style: { fontSize: 11, color: "rgba(255,255,255,.45)", textDecoration: "none", fontWeight: 600 } }, MOD.cat.name),
h("span", { style: { fontSize: 11, color: "rgba(255,255,255,.25)" } }, "\u203A"),
h("span", { style: { fontSize: 11, color: "rgba(255,255,255,.8)", fontWeight: 700 } }, MOD.name)
),
h("div", { style: { display: "flex", gap: 7, marginBottom: 14, flexWrap: "wrap" } },
h("span", { style: { padding: "3px 12px", borderRadius: 20, fontSize: 11, fontWeight: 700, background: "rgba(200,147,90,.2)", color: "rgba(255,255,255,.9)", border: "1px solid rgba(200,147,90,.3)" } }, "Module " + MOD.id),
h("span", { style: { padding: "3px 12px", borderRadius: 20, fontSize: 11, fontWeight: 700, background: "rgba(255,255,255,.1)", color: "rgba(255,255,255,.85)", border: "1px solid rgba(255,255,255,.15)" } }, POSTS.length + " Posts"),
h("span", { style: { padding: "3px 12px", borderRadius: 20, fontSize: 11, fontWeight: 700, background: "rgba(255,255,255,.1)", color: "rgba(255,255,255,.85)", border: "1px solid rgba(255,255,255,.15)" } }, FWS.length + " Frameworks"),
h("span", { style: { padding: "3px 12px", borderRadius: 20, fontSize: 11, fontWeight: 700, background: "rgba(255,255,255,.1)", color: "rgba(255,255,255,.85)", border: "1px solid rgba(255,255,255,.15)" } }, PROTOS.length + " Protocols"),
rc > 0 ? h("span", { style: { padding: "3px 12px", borderRadius: 20, fontSize: 11, fontWeight: 700, background: "rgba(168,204,216,.25)", color: "rgba(255,255,255,.95)", border: "1px solid rgba(255,255,255,.2)" } }, rc + " / " + POSTS.length + " read") : null
),
h("div", { style: { display: "flex", alignItems: "flex-start", justifyContent: "space-between", gap: 24, flexWrap: "wrap" } },
h("div", { style: { flex: 1, minWidth: 300 } },
h("h1", { className: "li2s", style: { fontSize: 32, fontWeight: 700, color: "#fff", lineHeight: 1.2, margin: "0 0 12px" } }, MOD.name),
h("p", { className: "li2s", style: { fontSize: 16, color: "rgba(255,255,255,.65)", lineHeight: 1.6, margin: "0 0 14px", maxWidth: 600, fontStyle: "italic" } }, MOD.tagline),
h("p", { style: { fontSize: 13.5, color: "rgba(255,255,255,.5)", lineHeight: 1.7, margin: "0 0 6px", maxWidth: 620 } }, MOD.desc),
h("div", { style: { fontSize: 11, color: "rgba(255,255,255,.35)", fontWeight: 600, marginTop: 14 } }, MOD.chapters),
h("div", { style: { fontSize: 11, color: "rgba(255,255,255,.3)", fontWeight: 500, marginTop: 4 } }, MOD.source)
),
h("div", { style: { background: "rgba(255,255,255,.06)", border: "1px solid rgba(255,255,255,.1)", borderRadius: 18, padding: "18px 22px", maxWidth: 300, width: "100%" } },
h("h3", { className: "li2s", style: { fontSize: "1.1rem", fontWeight: 600, color: "rgba(255,255,255,.9)", margin: "0 0 12px" } }, "How to use this"),
h("ul", { style: { margin: 0, padding: 0, listStyle: "none" } }, [
{ t: "Use the Symptom Finder below to start with what is true right now." },
{ t: "Open 1\u20133 frameworks max. Apply one step before reading more." },
{ t: "The Research block in each concept is cited. This is science, not opinion." },
{ t: "Consistency beats intensity. One small step daily." }
].map(function(item, i) {
return h("li", { key: i, style: { display: "flex", gap: 10, marginBottom: 10 } },
h("span", { style: { marginTop: 8, width: 6, height: 6, borderRadius: "50%", flexShrink: 0, background: "rgba(200,147,90,.6)" } }),
h("span", { style: { fontSize: ".88rem", color: "rgba(255,255,255,.7)", lineHeight: 1.55 } }, item.t)
)
}))
)
),
rc > 0 ? h("div", { style: { display: "flex", gap: 7, marginTop: 18, alignItems: "center" } },
h("span", { style: { fontSize: 11, color: "rgba(255,255,255,.45)", fontWeight: 600 } }, "Progress: "),
POSTS.map(function(p) { return h("div", { key: p.id, className: "li2pdot" + (st.reads.indexOf(p.id) >= 0 ? " on" : "") }) })
) : null
),
h("div", { className: "li2c", style: { padding: "22px 26px", marginBottom: 22 } },
h("div", { style: { display: "flex", alignItems: "flex-start", justifyContent: "space-between", gap: 16, flexWrap: "wrap", marginBottom: 16 } },
h("div", null,
h("h2", { className: "li2s", style: { fontSize: "1.6rem", fontWeight: 700, margin: "0 0 6px" } }, "Where Does It Hurt?"),
h("p", { style: { fontSize: ".92rem", color: "var(--muted)", margin: 0 } }, "Pick what feels most familiar. It scrolls you directly to the right framework.")
),
h("div", { className: "notice", style: { padding: "12px 16px", maxWidth: 320 } },
h("p", { style: { fontSize: ".84rem", lineHeight: 1.55, margin: 0 } },
h("span", { style: { fontWeight: 800 } }, "Research-backed: "),
"Every concept here is grounded in published relationship science."
)
)
),
h("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: 8 } }, SYMS.map(function(s) {
return h("button", { key: s.id, className: "li2sym", onClick: function() { handleSym(s) } },
h("div", { style: { fontWeight: 600, marginBottom: 3 } }, s.label),
h("div", { style: { fontSize: 12, color: "var(--muted)", lineHeight: 1.5 } }, s.note)
)
}))
),
h(SearchBar, { q: query, setQ: setQ, count: searchCount }),
h("div", { style: { display: "flex", gap: 6, marginBottom: 22, flexWrap: "wrap", overflowX: "auto" } }, tabs.map(function(t) {
return h("button", { key: t.id, className: "li2tab" + (st.tab === t.id ? " on" : ""), onClick: function() { setTab(t.id) } }, t.label)
})),
st.tab === "guide" ? h("div", null,
h("div", { style: { marginBottom: 22 } },
h("div", { style: { fontWeight: 700, fontSize: 12, color: "var(--teal)", textTransform: "uppercase", letterSpacing: ".04em", marginBottom: 12 } }, "Listening Style Diagnostic \u2014 8 Questions"),
h(Diag, { st: st, dp: dp })
),
h("div", { className: "li2c", style: { padding: "22px 26px", marginBottom: 18 } },
h("div", { className: "li2s", style: { fontWeight: 700, fontSize: 18, color: "var(--ink)", marginBottom: 12 } }, "About This Module"),
h("p", { style: { fontSize: 13.5, color: "#2A3A4A", lineHeight: 1.8, marginBottom: 16 } }, MOD.desc),
h("div", { style: { display: "grid", gridTemplateColumns: "repeat(auto-fill,minmax(180px,1fr))", gap: 10 } }, [
{ l: "Frameworks", v: FWS.length + " core concepts" },
{ l: "Deep Dive Posts", v: POSTS.length + " articles" },
{ l: "Protocols", v: PROTOS.length + " practices" },
{ l: "Research Base", v: STS.length + " studies" },
{ l: "Related Foundations", v: FOUNDS.length + " concepts" },
{ l: "Source", v: "Chapters 18\u201320" }
].map(function(item, i) {
return h("div", { key: i, style: { background: "#F4F8FA", borderRadius: 12, padding: "12px 16px" } },
h("div", { style: { fontSize: 10, fontWeight: 700, color: "var(--teal)", textTransform: "uppercase", letterSpacing: ".04em", marginBottom: 4 } }, item.l),
h("div", { style: { fontSize: 13, color: "#1A2A3A", fontWeight: 600 } }, item.v)
)
}))
),
h("div", { style: { background: "#FEF9EC", border: "1px solid #E8D5A0", borderRadius: 18, padding: "18px 22px", marginBottom: 18 } },
h("div", { style: { fontWeight: 700, fontSize: 12, color: "#92400E", textTransform: "uppercase", letterSpacing: ".04em", marginBottom: 8 } }, "If You Are Doing This Alone"),
h("p", { style: { fontSize: 13.5, color: "#3A2A0A", lineHeight: 1.8, margin: 0 } }, "You cannot make your partner listen \u2014 but you can become a listener so complete, so present, so full-bodied, that the quality of the conversations around you changes. Begin with yourself. The Felt-Heard Distinction post and the Full-Body Listen framework apply fully to solo work. Become the listener you wish you had.")
),
h("div", { style: { background: "#F4F8FA", borderRadius: 18, padding: "18px 22px", marginBottom: 18 } },
h("div", { className: "li2s", style: { fontWeight: 700, fontSize: 15, color: "var(--ink)", marginBottom: 10 } }, "What This Module Is Not"),
h("p", { style: { fontSize: 13.5, color: "var(--muted)", lineHeight: 1.8, margin: 0 } }, "This is not a communication curriculum. It does not teach scripts, conversation frameworks, or conflict de-escalation \u2014 those live in the Repair Process and Climate modules. Deep Listening is about interior posture. You are working on who you are as a listener before you say a word. The three inner shifts (Humility, Curiosity, Softening from Chapter 19) are the foundation. The three outer tools (Mirror, Validate, Empathize from Chapter 20) are the expression.")
),
h("div", { className: "li2c", style: { padding: "22px 26px", marginBottom: 18 } },
h("div", { className: "li2s", style: { fontWeight: 700, fontSize: 15, color: "var(--ink)", marginBottom: 10 } }, "The Core Architecture"),
h("p", { style: { fontSize: 13.5, color: "#2A3A4A", lineHeight: 1.8, marginBottom: 14 } }, "Deep Listening has two layers. The Inner Work (Ch. 19) creates the conditions. The Outer Work (Ch. 20) provides the tools. Without the inner work, the outer tools become performance. Without the outer tools, the inner work has no expression."),
h("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: 12 } },
h("div", { style: { background: "var(--light)", borderRadius: 14, padding: "16px 18px" } },
h("div", { style: { fontWeight: 700, fontSize: 12, color: "var(--teal)", textTransform: "uppercase", letterSpacing: ".04em", marginBottom: 8 } }, "Inner Work (Ch. 19)"),
h("div", { style: { fontSize: 13, color: "var(--ink)", lineHeight: 1.75 } }, "1. Humility \u2014 Drop the rock of being right\n2. Curiosity \u2014 Judge to Student\n3. Softening \u2014 Hard emotion to soft emotion")
),
h("div", { style: { background: "#FEF3E2", borderRadius: 14, padding: "16px 18px" } },
h("div", { style: { fontWeight: 700, fontSize: 12, color: "var(--gold)", textTransform: "uppercase", letterSpacing: ".04em", marginBottom: 8 } }, "Outer Work (Ch. 20)"),
h("div", { style: { fontSize: 13, color: "var(--ink)", lineHeight: 1.75 } }, "1. Mirror \u2014 Reflect back what you heard\n2. Validate \u2014 Acknowledge their logic\n3. Empathize \u2014 Name the feeling underneath")
)
)
),
h("div", { className: "li2c", style: { padding: "22px 26px" } },
h("div", { className: "li2s", style: { fontWeight: 700, fontSize: 15, color: "var(--ink)", marginBottom: 10 } }, "The Central Story: David and Rachel"),
h("p", { style: { fontSize: 13.5, color: "#2A3A4A", lineHeight: 1.8, margin: 0 } }, "Throughout Chapters 18\u201320, David and Rachel\u2019s story illustrates every concept. David arrives home, sees the messy kitchen, and leads with frustration (hard emotion). Rachel\u2019s nervous system reads: incoming attack. She shuts down. David feels rejected. The cycle repeats. The breakthrough comes when David learns to lead with the soft emotion \u2014 fear, loneliness, the terror that everything is falling apart. When he stops prosecuting and starts inquiring, Rachel discovers she can finally be heard. And when David learns to listen without fixing, Rachel discovers she can finally reach him. Every framework in this module traces back to this arc.")
)
) : null,
st.tab === "frameworks" ? h("div", null,
h("p", { style: { fontSize: 13.5, color: "var(--muted)", marginBottom: 18, lineHeight: 1.7 } }, "Click any framework to expand. Read in order for the first pass \u2014 each builds on the last. " + (ql ? "Showing " + fFws.length + " of " + FWS.length + " frameworks matching \u201C" + query + "\u201D." : "")),
h("div", { style: { display: "flex", flexDirection: "column", gap: 14 } }, (ql ? fFws : FWS).map(function(fw) {
return h(FwCard, { key: fw.id, fw: fw, open: st.openFw === fw.id, onToggle: function() { dp({ t: "FW", id: fw.id }); if (st.openFw !== fw.id) toast("\u25CE", "Framework opened", fw.title) } })
}))
) : null,st.tab === "posts" ? h("div", null,
h("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", marginBottom: 18 } },
h("p", { style: { fontSize: 13.5, color: "var(--muted)", margin: 0, lineHeight: 1.7 } }, (ql ? fPosts.length + " of " : "") + POSTS.length + " deep-dive posts. Mark as read to track your journey."),
rc > 0 ? h("span", { style: { fontSize: 12, fontWeight: 700, color: "var(--teal)", whiteSpace: "nowrap" } }, rc + "/" + POSTS.length + " read") : null
),
h("div", { style: { display: "flex", flexDirection: "column", gap: 14 } }, (ql ? fPosts : POSTS).map(function(p) {
return h(PostCard, { key: p.id, post: p, read: st.reads.indexOf(p.id) >= 0, onMark: markRead })
}))
) : null,st.tab === "protocols" ? h("div", null,
h("p", { style: { fontSize: 13.5, color: "var(--muted)", marginBottom: 18, lineHeight: 1.7 } }, "Actionable practices you can use tonight. Each includes steps, a safety valve, and a faith layer. Start with the 10-Minute Container."),
h("div", { style: { display: "flex", flexDirection: "column", gap: 14 } }, (ql ? fPros : PROTOS).map(function(p) {
return h(PrCard, { key: p.id, pr: p, open: st.openPr === p.id, onToggle: function() { dp({ t: "PR", id: p.id }) } })
}))
) : null,st.tab === "studies" ? h("div", null,
h("p", { style: { fontSize: 13.5, color: "var(--muted)", marginBottom: 18, lineHeight: 1.7 } }, "The research, theology, and case studies behind this module. " + (ql ? "Showing " + fSts.length + " of " + STS.length + "." : "")),
h("div", { style: { display: "flex", flexDirection: "column", gap: 14 } }, (ql ? fSts : STS).map(function(s) {
return h(StCard, { key: s.id, s: s, open: st.openSt === s.id, onToggle: function() { dp({ t: "ST", id: s.id }) } })
}))
) : null,st.tab === "foundations" ? h("div", null,
h("div", { className: "notice", style: { padding: "16px 20px", marginBottom: 18 } },
h("p", { style: { fontSize: ".92rem", lineHeight: 1.6, margin: 0 } },
h("span", { style: { fontWeight: 800 } }, "Cross-references from the Foundations Hub. "),
"These concepts from DUO's foundational research directly apply to Deep Listening. They are not duplicated here in full \u2014 visit the Foundations Hub for the complete treatment."
)
),
h("div", { style: { display: "flex", flexDirection: "column", gap: 14 } }, FOUNDS.map(function(f) {
return h(FoundCard, { key: f.key, f: f })
}))
) : null,st.tab === "path" ? h("div", null,
h("div", { className: "li2c", style: { padding: "22px 26px", marginBottom: 18 } },
h("div", { className: "li2s", style: { fontWeight: 700, fontSize: 18, color: "var(--ink)", marginBottom: 16 } }, "Where This Module Fits"),
[
{ id: "co", label: "Connection \u2014 Category", desc: "The parent category: Deep Listening, Physical Connection, Bids, and the dimensions of closeness.", current: false, url: LINKS.connection },
{ id: "li2", label: "Deep Listening \u2014 This Module", desc: "Interior posture and exterior protocol. Who you are as a listener before you say a word.", current: true, url: "#" },
{ id: "ph2", label: "Physical Connection \u2014 Next Module", desc: "The nonverbal language of closeness. Touch, presence, and the body's role in bonding.", current: false, url: "https://duo.bz/physical-connection" }
].map(function(step, i) {
return h("div", { key: i, style: { display: "flex", gap: 16, marginBottom: 18, paddingBottom: 18, borderBottom: i < 2 ? "1px solid var(--light)" : "none" } },
h("div", { style: { flexShrink: 0, width: 40, height: 40, borderRadius: "50%", background: step.current ? "var(--teal)" : "var(--light)", color: step.current ? "#fff" : "var(--muted)", display: "flex", alignItems: "center", justifyContent: "center", fontWeight: 700, fontSize: 12 } }, step.id),
h("div", null,
h("a", { href: step.url, style: { fontWeight: 700, fontSize: 14.5, color: step.current ? "var(--teal)" : "var(--ink)", textDecoration: "none", display: "block", marginBottom: 4 } }, step.label + (step.current ? " \u2190 you are here" : "")),
h("div", { style: { fontSize: 12.5, color: "var(--muted)", lineHeight: 1.65 } }, step.desc)
)
)
})
),
h("div", { style: { marginBottom: 18 } },
h("div", { className: "li2s", style: { fontWeight: 700, fontSize: 17, color: "var(--ink)", marginBottom: 14 } }, "Quick Reference Card"),
h("div", { style: { display: "grid", gridTemplateColumns: "repeat(auto-fill,minmax(230px,1fr))", gap: 10 } },
[
{ l: "Core Principle", t: "Comprehension is not reception. You can repeat every word and still leave them feeling alone." },
{ l: "The 30-Second Test", t: "Did I move toward a solution within 30 seconds? If yes, I moved before understanding was complete." },
{ l: "Seven Signs", t: "Anticipatory response, solution loading, distraction drift, selective hearing, meter reading, mirroring without feeling, early reassurance." },
{ l: "The Physical Reset", t: "Feet on floor, jaw unclenched, shoulders down, hands open. The markers of a nervous system willing to receive." },
{ l: "MVE Protocol", t: "Mirror: 'What I hear is...' Validate: 'That makes sense because...' Empathize: 'I imagine that felt...'" },
{ l: "Inner Work Triad", t: "Humility (drop the rock), Curiosity (judge to student), Softening (hard to soft emotion)." },
{ l: "The Curiosity Script", t: "'The story I am telling myself is ___. Is that true, or is something else going on?'" },
{ l: "The Soft Lead", t: "Find the fear underneath the frustration. Lead with that. Vulnerability melts walls." },
{ l: "A.R.E. Check", t: "Accessible \u2014 Are you there? Responsive \u2014 Do you care? Engaged \u2014 Will you stay?" },
{ l: "Solo Path", t: "Become a listener so complete that the quality of conversations around you changes. Start with yourself." },
{ l: "The Ancient Ordering", t: "James 1:19 \u2014 Quick to hear, slow to speak, slow to anger. Most of us reverse it." },
{ l: "The Central Story", t: "David and Rachel: frustration \u2192 prosecution \u2192 shutdown. The fix: curiosity + softening + MVE." }
].map(function(card, i) {
return h("div", { key: i, style: { background: "#fff", border: "1px solid var(--border)", borderRadius: 14, padding: "14px 18px" } },
h("div", { style: { fontWeight: 700, fontSize: 10.5, color: "var(--teal)", textTransform: "uppercase", letterSpacing: ".04em", marginBottom: 6 } }, card.l),
h("div", { style: { fontSize: 12.5, color: "#2A3A4A", lineHeight: 1.7 } }, card.t)
)
})
)
),
h("div", { style: { textAlign: "center", paddingTop: 10 } },
h("button", { type: "button", onClick: function() { if (window.confirm("Reset all progress?")) dp({ t: "X" }) }, style: { padding: "9px 20px", borderRadius: 12, background: "transparent", border: "1px solid var(--border)", color: "#8A9AAA", fontSize: 12, cursor: "pointer", fontFamily: "'DM Sans',sans-serif" } }, "Reset progress")
)
) : null,
h("div", { className: "li2c", style: { padding: "22px 26px", marginTop: 24 } },
h("div", { style: { display: "flex", flexWrap: "wrap", gap: 24, alignItems: "flex-start" } },
h("div", { style: { flex: 1, minWidth: 200 } },
h("h3", { className: "li2s", style: { fontSize: "1.2rem", fontWeight: 600, margin: "0 0 10px" } }, "Key researchers cited"),
h("p", { style: { fontSize: ".88rem", color: "var(--muted)", lineHeight: 1.65, margin: 0 } }, "Carl Rogers (Accurate Empathy, Person-Centered Therapy) \u00B7 Sue Johnson (EFT, A.R.E. Framework) \u00B7 John Gottman (Bids, Four Horsemen, Repair Attempts) \u00B7 Dan Wile (Confiding vs. Attacking, Leading Edge Feeling) \u00B7 Brené Brown (Negative Attribution, Vulnerability) \u00B7 Paul Ekman (Micro-Expressions, FACS) \u00B7 Ed Tronick (Still Face Experiment) \u00B7 Stephen Porges (Polyvagal Theory)")
),
h("div", { style: { flexShrink: 0 } },
h("div", { className: "notice", style: { padding: "12px 16px" } },
h("p", { style: { fontSize: ".84rem", lineHeight: 1.55, margin: 0, maxWidth: 280 } },
h("span", { style: { fontWeight: 800 } }, "This page is a map. "),
"It gives you the language and structure. The full depth is in the book, the linked hubs, and the Compass."
)
)
)
)
),
h("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: 12, marginTop: 20 } },
h("a", { href: MOD.cat.url, target: "_blank", rel: "noreferrer", style: { display: "block", background: "#fff", border: "1px solid var(--border)", borderRadius: 18, padding: "18px 22px", textDecoration: "none" } },
h("div", { style: { fontSize: 11, color: "var(--teal)", fontWeight: 700, marginBottom: 6 } }, "\u2190 Back to Category"),
h("div", { className: "li2s", style: { fontSize: 15, fontWeight: 700, color: "var(--ink)" } }, MOD.cat.name)
),
h("a", { href: POSTS[0].url, target: "_blank", rel: "noreferrer", style: { display: "block", background: "linear-gradient(135deg,#14465E,#0B2E40)", border: "1px solid var(--teal)", borderRadius: 18, padding: "18px 22px", textDecoration: "none" } },
h("div", { style: { fontSize: 11, color: "rgba(255,255,255,.55)", fontWeight: 700, marginBottom: 6 } }, "First Post \u2192"),
h("div", { className: "li2s", style: { fontSize: 15, fontWeight: 700, color: "#fff" } }, POSTS[0].name)
)
)
);
}window.__MountDuoLi2App = function() {
var el = document.getElementById("duo-li2-root");
if (!el) return;
if (window.__DUO_LI2_MOUNTED__) return;
window.__DUO_LI2_MOUNTED__ = true;
if (ReactDOM.createRoot) {
ReactDOM.createRoot(el).render(h(App));
} else {
ReactDOM.render(h(App), el);
}
};if (document.readyState === "complete" || document.readyState === "interactive") {
setTimeout(window.__MountDuoLi2App, 1);
} else {
document.addEventListener("DOMContentLoaded", window.__MountDuoLi2App);
}
document.addEventListener('DOMContentLoaded', function() {
var buttons = document.querySelectorAll('.conversion-btn a, .conversion-btn');
buttons.forEach(function(btn) {
btn.addEventListener('click', function(e) {
e.preventDefault();
var url = this.getAttribute('href');
gtag_report_conversion(url);
});
});
});
(function () {
var c = document.body.className;
c = c.replace(/woocommerce-no-js/, 'woocommerce-js');
document.body.className = c;
})();
var woocommerce_params = {"ajax_url":"/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%","i18n_password_show":"Show password","i18n_password_hide":"Hide password"};
//# sourceURL=woocommerce-js-extra
(function(){
if(window.__duoEmailInit)return;
window.__duoEmailInit=true;
var U="https://afgmlkduuapquqkcqdsk.supabase.co";
var K="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImFmZ21sa2R1dWFwcXVxa2NxZHNrIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzgzNDA2NzYsImV4cCI6MjA5MzkxNjY3Nn0.-WQ34Jxy9CmI-SsQfcMNWPZi5AfZCzv9jZHDQ6ccEWc";
async function s(f,sr){
var e=f.querySelector("input[type=email]"),n=f.querySelector("input[name=duo_name]"),m=f.querySelector(".duo-msg"),b=f.querySelector("button"),em=e.value.trim(),nm=n?n.value.trim():"";
if(!em||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(em)){if(m){m.textContent="Please enter a valid email.";m.style.display="block";m.style.color="#ef4444";}return;}
if(b){b.disabled=true;if(!b.getAttribute("data-original"))b.setAttribute("data-original",b.textContent);b.textContent="Subscribing...";}
try{
var r=await fetch(U+"/rest/v1/duo_subscribers",{method:"POST",headers:{"Content-Type":"application/json",apikey:K,Authorization:"Bearer "+K},body:JSON.stringify({email:em,name:nm||null,source:sr})});
if(r.ok){if(m){m.textContent="✓ Welcome to DUO!";m.style.display="block";m.style.color="#22c55e";}if(e)e.value="";if(n)n.value="";}
else{var er=await r.json();if(er.code==="23505"){if(m){m.textContent="Already subscribed!";m.style.display="block";m.style.color="#22c55e";}}else{throw new Error(er.message||"Error");}}
}catch(err){if(m){m.textContent=err.message||"Please try again.";m.style.display="block";m.style.color="#ef4444";}}
finally{if(b){b.disabled=false;b.textContent=b.getAttribute("data-original")||"Subscribe";}}
}
document.addEventListener("DOMContentLoaded",function(){
document.querySelectorAll(".duo-email-form").forEach(function(f){
var sr=f.getAttribute("data-duo-source")||"website";
f.addEventListener("submit",function(e){e.preventDefault();s(f,sr);});
});
var ov=document.getElementById("duo-popup-overlay");
if(ov&&!sessionStorage.getItem("duo_popup_shown")){
setTimeout(function(){ov.style.display="flex";sessionStorage.setItem("duo_popup_shown","1");},8000);
}
var cb=document.getElementById("duo-popup-close");
if(cb){cb.addEventListener("click",function(){document.getElementById("duo-popup-overlay").style.display="none";});}
if(ov){ov.addEventListener("click",function(e){if(e.target===ov)ov.style.display="none";});}
});
})();
(function() {
window.wcAnalytics = window.wcAnalytics || {};
const wcAnalytics = window.wcAnalytics;// Set the assets URL for webpack to find the split assets.
wcAnalytics.assets_url = 'https://duo.bz/wp-content/plugins/jetpack/jetpack_vendor/automattic/woocommerce-analytics/src/../build/';// Set the REST API tracking endpoint URL.
wcAnalytics.trackEndpoint = "https://duo.bz/wp-json/woocommerce-analytics/v1/track";// Set common properties for all events.
wcAnalytics.commonProps = {"session_id":null,"landing_page":null,"is_engaged":null,"ui":0,"blog_id":252820655,"store_id":"4735d1d5-c7ab-4559-898b-2f4ef0eaef06","url":"https://duo.bz","woo_version":"10.6.1","wp_version":"7.0.3","store_admin":0,"device":"desktop","store_currency":"USD","timezone":"+00:00","is_guest":1,"_via_ua":"Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/)","_via_ip":"176.31.139.4","_lg":"","_dr":"","_dl":"https://duo.bz/co2-2/","_via_ref":""};// Set the event queue.
wcAnalytics.eventQueue = [];// Features.
wcAnalytics.features = {
ch: false,
sessionTracking: false,
proxy: false,
};wcAnalytics.breadcrumbs = ["Connection"];// Page context flags.
wcAnalytics.pages = {
isAccountPage: false,
isCart: false,
};
})();
(function(){
if(window.__duoEmailInit)return;
window.__duoEmailInit=true;
var U="https://afgmlkduuapquqkcqdsk.supabase.co";
var K="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImFmZ21sa2R1dWFwcXVxa2NxZHNrIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzgzNDA2NzYsImV4cCI6MjA5MzkxNjY3Nn0.-WQ34Jxy9CmI-SsQfcMNWPZi5AfZCzv9jZHDQ6ccEWc";
async function s(f,sr){
var e=f.querySelector("input[type=email]"),n=f.querySelector("input[name=duo_name]"),m=f.querySelector(".duo-msg"),b=f.querySelector("button"),em=e.value.trim(),nm=n?n.value.trim():"";
if(!em||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(em)){if(m){m.textContent="Please enter a valid email.";m.style.display="block";m.style.color="#ef4444";}return;}
if(b){b.disabled=true;if(!b.getAttribute("data-original"))b.setAttribute("data-original",b.textContent);b.textContent="Subscribing...";}
try{
var r=await fetch(U+"/rest/v1/duo_subscribers",{method:"POST",headers:{"Content-Type":"application/json",apikey:K,Authorization:"Bearer "+K},body:JSON.stringify({email:em,name:nm||null,source:sr})});
if(r.ok){if(m){m.textContent="✓ Welcome to DUO!";m.style.display="block";m.style.color="#22c55e";}if(e)e.value="";if(n)n.value="";}
else{var er=await r.json();if(er.code==="23505"){if(m){m.textContent="Already subscribed!";m.style.display="block";m.style.color="#22c55e";}}else{throw new Error(er.message||"Error");}}
}catch(err){if(m){m.textContent=err.message||"Please try again.";m.style.display="block";m.style.color="#ef4444";}}
finally{if(b){b.disabled=false;b.textContent=b.getAttribute("data-original")||"Subscribe";}}
}
document.addEventListener("DOMContentLoaded",function(){
document.querySelectorAll(".duo-email-form").forEach(function(f){
var sr=f.getAttribute("data-duo-source")||"website";
f.addEventListener("submit",function(e){e.preventDefault();s(f,sr);});
});
var ov=document.getElementById("duo-popup-overlay");
if(ov&&!sessionStorage.getItem("duo_popup_shown")){
setTimeout(function(){ov.style.display="flex";sessionStorage.setItem("duo_popup_shown","1");},8000);
}
var cb=document.getElementById("duo-popup-close");
if(cb){cb.addEventListener("click",function(){document.getElementById("duo-popup-overlay").style.display="none";});}
if(ov){ov.addEventListener("click",function(e){if(e.target===ov)ov.style.display="none";});}
});
})();