@deina-labs/deina-core 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,166 @@
1
+ export function getStandardsHook(answers) {
2
+ const low = (key) => {
3
+ const v = answers[key];
4
+ return typeof v === 'number' && v <= 2;
5
+ };
6
+ const high = (key) => {
7
+ const v = answers[key];
8
+ return typeof v === 'number' && v >= 4;
9
+ };
10
+ // Follow-through option-based
11
+ const ft = answers.followThrough;
12
+ if (ft === 'I let it go — people forget' || ft === 'I notice but don\'t say anything') {
13
+ return 'You just admitted you let people break promises without saying a word. That\'s not patience — that\'s a pattern.';
14
+ }
15
+ // Long-term goals option-based
16
+ const ltg = answers.longTermGoals;
17
+ if (ltg === 'I avoid it because I\'m scared of what he\'ll say') {
18
+ return 'You\'d rather not know than hear something you can\'t handle. That fear is running more of your decisions than you think.';
19
+ }
20
+ if (ltg === 'I wait for him to bring it up') {
21
+ return 'You\'re waiting for someone else to decide your future. You already know that\'s a problem.';
22
+ }
23
+ if (high('physicalAttraction') && low('emotionalStability')) {
24
+ return 'You rated attraction high and emotional stability low. You already know which one keeps winning.';
25
+ }
26
+ if (low('communicationFrequency') && low('initiativeAndEffort')) {
27
+ return 'You rated communication and effort low. You\'ve trained yourself to expect less — and you\'re getting exactly that.';
28
+ }
29
+ if (high('initiativeAndEffort') && low('followThrough')) {
30
+ return 'You want him to lead but you don\'t hold him to his word. That gap is where most of your disappointment lives.';
31
+ }
32
+ if (low('emotionalAvailability')) {
33
+ return 'You rated emotional availability low. You\'ve accepted silence as normal — but that doesn\'t mean it doesn\'t hurt.';
34
+ }
35
+ if (high('weeklyConsistency') && low('communicationFrequency')) {
36
+ return 'You need to see him but you don\'t need to hear from him? Or have you just stopped asking for both?';
37
+ }
38
+ // Generic fallback based on overall pattern
39
+ const numericValues = Object.entries(answers)
40
+ .filter(([, v]) => typeof v === 'number')
41
+ .map(([, v]) => v);
42
+ const avg = numericValues.reduce((a, b) => a + b, 0) / numericValues.length;
43
+ if (avg <= 2.5) {
44
+ return 'Your standards are low across the board. Either you genuinely don\'t need much — or you\'ve given up on asking for what you actually want.';
45
+ }
46
+ if (avg >= 4) {
47
+ return 'You rated almost everything high. The real test is whether you actually walk away when someone doesn\'t meet them.';
48
+ }
49
+ return 'You know what you want. But knowing has never been your problem, has it?';
50
+ }
51
+ export function getTimelineHook(answers) {
52
+ if (answers.exclusivityExpectation === 'I avoid bringing it up') {
53
+ return 'You won\'t even ask where you stand. That silence isn\'t peace — it\'s fear.';
54
+ }
55
+ if (answers.intentionClarity === 'I wait for them to bring it up') {
56
+ return 'You\'re leaving the biggest decision to someone who hasn\'t earned that power yet.';
57
+ }
58
+ if (answers.progressionPace === 'I go with whatever he sets') {
59
+ return 'You just said you follow his pace. That means you don\'t have one — you have his.';
60
+ }
61
+ if (answers.communicationCadence === 'Only when there\'s a plan') {
62
+ return 'You only expect to hear from him when there\'s a plan. You\'ve made it easy to be forgotten between dates.';
63
+ }
64
+ if (answers.firstDateWindow === 'I don\'t push for it') {
65
+ return 'You don\'t push for a date. Which means you\'ll text someone for weeks hoping they eventually ask — and call it patience.';
66
+ }
67
+ if (answers.secondDateWindow === 'I try not to think about it') {
68
+ return 'You\'re trying not to think about it. That\'s not calm — that\'s anxiety disguised as chill.';
69
+ }
70
+ if (answers.meetFriendsFamily === 'I don\'t push for it') {
71
+ return 'You don\'t push to be part of his real life. You\'re fine existing only in private — and that should worry you.';
72
+ }
73
+ if (answers.progressionPace === 'I move fast when I\'m excited') {
74
+ return 'You move fast when you\'re excited. That excitement has probably cost you clarity more than once.';
75
+ }
76
+ return 'Your timeline tells a story you might not want to hear. The pace you accept is the pace you\'ll always get.';
77
+ }
78
+ export function getMindsetHook(answers) {
79
+ if (answers.relationshipRole === 'It would finally make me feel chosen') {
80
+ return 'You said a relationship would make you feel chosen. That means right now, you don\'t feel like you are.';
81
+ }
82
+ if (answers.relationshipRole === 'It would fill a void I feel right now') {
83
+ return 'You said a relationship would fill a void. That void doesn\'t go away when someone shows up — it just gets louder when they leave.';
84
+ }
85
+ if (answers.effortInterpretation === 'I probably did something wrong') {
86
+ return 'His effort dropped and your first thought was that it\'s your fault. That instinct is protecting him, not you.';
87
+ }
88
+ if (answers.ambiguityTolerance === 'I replay everything trying to figure out what I did') {
89
+ return 'You replay conversations looking for what you did wrong. You\'re investigating yourself instead of evaluating him.';
90
+ }
91
+ if (answers.ambiguityTolerance === 'I convince myself he\'s losing interest and start spiraling') {
92
+ return 'One dry day and you\'re already spiraling. That\'s not intuition — that\'s anxiety making decisions for you.';
93
+ }
94
+ if (answers.emotionalInvestmentSpeed === 'Immediately — I can already picture it') {
95
+ return 'One date and you\'re already picturing a future. You fall for the idea of someone before you even know who they are.';
96
+ }
97
+ // Scale-based checks (stored as string numbers "1"-"5")
98
+ const fearOfLosing = Number(answers.fearOfLosingConnection);
99
+ if (fearOfLosing <= 2) {
100
+ return 'You said the urge to chase is strong. That urge has probably kept you in situations you should\'ve left a long time ago.';
101
+ }
102
+ const fulfillment = Number(answers.fulfillmentOutsideDating);
103
+ if (fulfillment <= 2) {
104
+ return 'You said your life feels like something is missing without a relationship. That means whoever shows up next has too much power before they\'ve earned any.';
105
+ }
106
+ const standardsConf = Number(answers.standardsConfidence);
107
+ if (standardsConf <= 2) {
108
+ return 'You doubt your own standards when you like someone. That\'s how you end up accepting things you said you never would.';
109
+ }
110
+ return 'The way you see yourself in the dynamic shapes everything — who you pick, what you accept, and how long you stay.';
111
+ }
112
+ export function getEnforcementHook(answers) {
113
+ if (answers.disappointmentResponse === 'I try harder to make it work') {
114
+ return 'He disappointed you and your response was to try harder. You\'re rewarding the exact behavior that hurt you.';
115
+ }
116
+ if (answers.disappointmentResponse === 'I overthink it for days') {
117
+ return 'He disappointed you and you spent days overthinking it instead of addressing it. He moved on. You didn\'t.';
118
+ }
119
+ if (answers.cancelDowngrade === 'I usually let it go') {
120
+ return 'He keeps canceling and you keep letting it go. That\'s not forgiveness — that\'s teaching him your time doesn\'t matter.';
121
+ }
122
+ if (answers.noFollowUpResponse === 'I wait and hope he reaches out') {
123
+ return 'He went silent after a date and you waited. You already know what waiting gets you.';
124
+ }
125
+ if (answers.noFollowUpResponse === 'I pretend I didn\'t notice') {
126
+ return 'You noticed the silence. You just pretended you didn\'t. That\'s not strength — it\'s self-betrayal.';
127
+ }
128
+ if (answers.effortDecreaseDowngrade === 'I usually don\'t pull back') {
129
+ return 'His effort dropped and you stayed the same. You\'re giving someone full access to you while they give you less and less.';
130
+ }
131
+ if (answers.exclusivityNotDiscussed === 'I keep going and hope it comes up') {
132
+ return 'You\'re hoping exclusivity just happens. It won\'t. And the longer you wait, the more you\'re telling him it doesn\'t matter to you.';
133
+ }
134
+ if (answers.redFlagSpeed === 'Only if it\'s something serious') {
135
+ return 'You only act on red flags if they\'re serious. Which means every small one gets a pass — until they add up to something you can\'t ignore.';
136
+ }
137
+ return 'Your boundaries exist on paper. The question is whether they exist in practice.';
138
+ }
139
+ export function getTradeOffsHook(answers) {
140
+ if (answers.pastPattern === 'I fall for potential instead of proof') {
141
+ return 'You said you fall for potential. That means you keep investing in who someone could be — instead of seeing who they actually are.';
142
+ }
143
+ if (answers.pastPattern === 'I stay way past the expiration date') {
144
+ return 'You said you stay too long. You already knew that. The question is why you keep doing it anyway.';
145
+ }
146
+ if (answers.pastPattern === 'I give too much too soon') {
147
+ return 'You said you give too much too soon. By the time you realize it, they already have everything — and you have nothing to protect.';
148
+ }
149
+ if (answers.consistencyVsChemistry === 'Intense chemistry, even if he\'s inconsistent') {
150
+ return 'You chose chemistry over consistency. That\'s the choice that keeps pulling you back to people who aren\'t good for you.';
151
+ }
152
+ if (answers.stabilityVsIntensity === 'The passionate, intense one') {
153
+ return 'You\'re drawn to intensity. But intensity without stability isn\'t passion — it\'s chaos that feels familiar.';
154
+ }
155
+ if (answers.earlyDatingTendency === 'I get emotionally attached too fast') {
156
+ return 'You get attached too fast. Which means by the time you see someone clearly, you\'re already too deep to walk away easily.';
157
+ }
158
+ if (answers.earlyDatingTendency === 'I keep a wall up no matter what') {
159
+ return 'You keep a wall up. It protects you — but it also makes sure no one ever gets close enough to actually stay.';
160
+ }
161
+ if (answers.toleratedFlaw === 'Won\'t commit at your pace') {
162
+ return 'The flaw you tolerate the longest is someone who won\'t commit. You already know what that says about you.';
163
+ }
164
+ return 'Your choices reveal a pattern. And patterns don\'t change until you see them clearly.';
165
+ }
166
+ //# sourceMappingURL=section-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-hooks.js","sourceRoot":"","sources":["../src/section-hooks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deina-labs/deina-core",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "Shared dating archetype logic for Deina — used by mobile, web app and edge functions",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -0,0 +1,99 @@
1
+ // Maps specific answers to inline confirmation lines that appear when selected.
2
+ // Format: 'section:questionKey:answer' → confirmation line
3
+ // Only trigger answers get entries — not every option needs one.
4
+
5
+ export const ANSWER_CONFIRMATIONS: Record<string, string> = {
6
+ // --- Standards (option-based questions) ---
7
+ 'standards:followThrough:I let it go — people forget':
8
+ 'That\'s not forgiveness. That\'s training him to keep doing it.',
9
+ 'standards:followThrough:I notice but don\'t say anything':
10
+ 'You noticed. You just chose silence over confrontation. Again.',
11
+ 'standards:followThrough:I start pulling back without telling him why':
12
+ 'You punish in silence. He\'ll never know why — and nothing will change.',
13
+ 'standards:longTermGoals:I drop hints and hope he gets it':
14
+ 'He\'s not missing the hints. He\'s ignoring them.',
15
+ 'standards:longTermGoals:I wait for him to bring it up':
16
+ 'You\'re handing someone else the pen to write your future.',
17
+ 'standards:longTermGoals:I avoid it because I\'m scared of what he\'ll say':
18
+ 'You already know the answer. That\'s why you won\'t ask.',
19
+
20
+ // --- Timeline ---
21
+ 'timeline:firstDateWindow:I don\'t push for it':
22
+ 'You\'ll text for weeks and call it "getting to know each other."',
23
+ 'timeline:secondDateWindow:I try not to think about it':
24
+ 'That\'s not calm. That\'s anxiety you\'ve learned to swallow.',
25
+ 'timeline:communicationCadence:Only when there\'s a plan':
26
+ 'You only expect to exist when it\'s convenient for him.',
27
+ 'timeline:exclusivityExpectation:I avoid bringing it up':
28
+ 'You\'d rather stay confused than risk hearing something you can\'t handle.',
29
+ 'timeline:intentionClarity:I wait for them to bring it up':
30
+ 'You\'re giving someone who hasn\'t committed the power to decide if they ever will.',
31
+ 'timeline:meetFriendsFamily:I don\'t push for it':
32
+ 'You\'re okay being hidden. Sit with that for a second.',
33
+ 'timeline:progressionPace:I go with whatever he sets':
34
+ 'His pace. His rules. Your life.',
35
+
36
+ // --- Mindset ---
37
+ 'mindset:effortInterpretation:I probably did something wrong':
38
+ 'His effort dropped and your first thought was to blame yourself.',
39
+ 'mindset:effortInterpretation:He\'s just busy, I shouldn\'t overthink it':
40
+ 'You\'re already making excuses for him. He didn\'t even have to ask.',
41
+ 'mindset:ambiguityTolerance:I replay everything trying to figure out what I did':
42
+ 'You\'re investigating yourself instead of evaluating him.',
43
+ 'mindset:ambiguityTolerance:I convince myself he\'s losing interest and start spiraling':
44
+ 'One quiet day and you\'re already writing the ending.',
45
+ 'mindset:emotionalInvestmentSpeed:Immediately — I can already picture it':
46
+ 'One good date and you\'re already all in. That\'s not chemistry — that\'s hope taking over.',
47
+ 'mindset:emotionalInvestmentSpeed:Pretty fast — I get excited easily':
48
+ 'Your excitement moves faster than your judgment.',
49
+ 'mindset:relationshipRole:It would fill a void I feel right now':
50
+ 'That void won\'t close because someone showed up. It\'ll just open wider when they leave.',
51
+ 'mindset:relationshipRole:It would finally make me feel chosen':
52
+ 'You\'re looking for someone to prove something you should already believe about yourself.',
53
+
54
+ // --- Enforcement ---
55
+ 'enforcement:cancelDowngrade:I usually let it go':
56
+ 'You\'re teaching him your time is free.',
57
+ 'enforcement:cancelDowngrade:3+ times before I react':
58
+ 'Three chances to disrespect your time before you say something. That\'s generous.',
59
+ 'enforcement:noFollowUpResponse:I wait and hope he reaches out':
60
+ 'Waiting isn\'t patience when it\'s driven by fear.',
61
+ 'enforcement:noFollowUpResponse:I pretend I didn\'t notice':
62
+ 'You noticed. Pretending you didn\'t is a choice — and it\'s not protecting you.',
63
+ 'enforcement:effortDecreaseDowngrade:I usually don\'t pull back':
64
+ 'He gave less. You stayed the same. That\'s not loyalty — that\'s a pattern.',
65
+ 'enforcement:exclusivityNotDiscussed:I keep going and hope it comes up':
66
+ 'Hope is not a strategy. And he knows you won\'t ask.',
67
+ 'enforcement:disappointmentResponse:I try harder to make it work':
68
+ 'He let you down and you responded by giving more. Read that again.',
69
+ 'enforcement:disappointmentResponse:I overthink it for days':
70
+ 'He moved on in minutes. You carried it for days.',
71
+ 'enforcement:disappointmentResponse:I lower my expectations':
72
+ 'Every time you lower the bar, you\'re telling yourself you deserve less.',
73
+ 'enforcement:redFlagSpeed:Only if it\'s something serious':
74
+ 'The small ones add up. By the time it\'s "serious," you\'re already in too deep.',
75
+
76
+ // --- Trade-offs ---
77
+ 'tradeoffs:consistencyVsChemistry:Intense chemistry, even if he\'s inconsistent':
78
+ 'Chemistry without consistency is just a beautiful mess you keep cleaning up.',
79
+ 'tradeoffs:stabilityVsIntensity:The passionate, intense one':
80
+ 'Intensity feels like love. Until it doesn\'t.',
81
+ 'tradeoffs:speedVsCertainty:I dive in fast when the energy is right':
82
+ 'Fast feels exciting. But you\'ve skipped red flags at that speed before.',
83
+ 'tradeoffs:independenceVsIntegration:I want our lives to merge quickly':
84
+ 'Merging fast means losing yourself fast when it ends.',
85
+ 'tradeoffs:toleratedFlaw:Won\'t commit at your pace':
86
+ 'That\'s the one you keep letting slide. And you wonder why you end up in the same place.',
87
+ 'tradeoffs:toleratedFlaw:Emotionally shut down':
88
+ 'You\'ve been loving people who can\'t love you back the way you need.',
89
+ 'tradeoffs:pastPattern:I fall for potential instead of proof':
90
+ 'You keep investing in who they could be instead of who they\'re showing you they are.',
91
+ 'tradeoffs:pastPattern:I stay way past the expiration date':
92
+ 'You already know when it\'s over. You just don\'t leave.',
93
+ 'tradeoffs:pastPattern:I give too much too soon':
94
+ 'By the time you realize you\'ve given too much, there\'s nothing left to protect.',
95
+ 'tradeoffs:earlyDatingTendency:I get emotionally attached too fast':
96
+ 'You\'re all in before you even know if they deserve it.',
97
+ 'tradeoffs:earlyDatingTendency:I keep a wall up no matter what':
98
+ 'The wall keeps you safe. It also keeps you alone.',
99
+ };
package/src/fun-facts.ts CHANGED
@@ -2,37 +2,43 @@ export interface FunFact {
2
2
  heading: string;
3
3
  body: string;
4
4
  source?: string;
5
+ hook?: string;
5
6
  }
6
7
 
7
8
  export const ONBOARDING_FUN_FACTS: Record<string, FunFact> = {
8
9
  'after-standards': {
9
- heading: 'Most people have a clear sense of their standards.',
10
- body: 'The challenge often appears later when attraction, chemistry, and real behavior enter the picture.',
10
+ heading: 'You know what you want.',
11
+ body: 'The question is whether you actually hold people to it or drop everything the moment someone makes you feel something.',
12
+ hook: 'But knowing what you want has never been the problem, has it?',
11
13
  },
12
14
  'after-timeline': {
13
- heading: 'When two people have very different expectations about timing,',
14
- body: 'confusion often appears long before either person realizes why.',
15
+ heading: 'Most people know when something is taking too long.',
16
+ body: 'They just don\'t do anything about it. They wait, hope, and let someone else set the pace of their own life.',
17
+ hook: 'The scary part isn\'t your timeline. It\'s what you do when someone doesn\'t meet it.',
15
18
  },
16
19
  'after-mindset': {
17
- heading: 'Dating decisions are shaped not only by what we want in a partner,',
18
- body: 'but by how we see ourselves in the dynamic.',
20
+ heading: 'The way you just answered says more than you think.',
21
+ body: 'Most people don\'t struggle because they pick the wrong person. They struggle because of who they become around the right one.',
22
+ hook: 'Now the real question — when someone crosses the line, do you actually do anything about it?',
19
23
  },
20
24
  'after-enforcement': {
21
- heading: 'Many relationship patterns come not from what people want —',
22
- body: 'but from what they tolerate longer than they should.',
25
+ heading: 'You already know where your boundaries break.',
26
+ body: 'The pattern isn\'t that you don\'t have limits. It\'s that you let the same person cross them — and then blame yourself for expecting too much.',
27
+ hook: 'Almost done. But this last part is the one people have the hardest time being honest about.',
23
28
  },
24
29
  'after-trade-offs': {
25
- heading: 'The choices we make in these moments often reveal more about our dating patterns',
26
- body: 'than our stated preferences.',
30
+ heading: 'The thing you just said you\'d never tolerate?',
31
+ body: 'You\'ve probably already tolerated it. These choices don\'t reveal what you want — they reveal what you keep accepting.',
32
+ hook: 'Your pattern is clearer than you think.',
27
33
  },
28
34
  };
29
35
 
30
36
  export const SECTION_HINTS: Record<string, string> = {
31
- 'mindset:ambiguityTolerance': 'This one tends to be revealing go with your gut.',
32
- 'mindset:relationshipRole': 'There are no wrong answers here — only honest ones.',
37
+ 'mindset:ambiguityTolerance': 'Don\'t pick the answer you wish was true.',
38
+ 'mindset:relationshipRole': 'This one is uncomfortable for a reason.',
33
39
  'enforcement:disappointmentResponse':
34
- 'Think about how you usually react in the moment — not how you wish you reacted.',
40
+ 'What you actually do — not what you tell your friends you did.',
35
41
  'tradeoff:toleratedFlaw':
36
- 'Be honest with yourself here this tends to reveal more than most people expect.',
37
- 'tradeoff:pastPattern': 'Looking back honestly at your past relationships…',
42
+ 'You already know which one. Don\'t lie to yourself.',
43
+ 'tradeoff:pastPattern': 'The pattern you keep repeating even though you said you wouldn\'t.',
38
44
  };
package/src/index.ts CHANGED
@@ -25,6 +25,8 @@ export {
25
25
  } from './quiz-questions.js';
26
26
  export { renderArchetypePage, renderNotFoundPage, escapeHtml } from './archetype-card.js';
27
27
  export { ONBOARDING_FUN_FACTS, SECTION_HINTS } from './fun-facts.js';
28
+ export { ANSWER_CONFIRMATIONS } from './answer-confirmations.js';
29
+ export { getStandardsHook, getTimelineHook, getMindsetHook, getEnforcementHook, getTradeOffsHook } from './section-hooks.js';
28
30
  export {
29
31
  DISCLAIMER_CONTENT,
30
32
  ABOUT_YOU_CONTENT,
@@ -1,12 +1,12 @@
1
1
  export const DISCLAIMER_CONTENT = {
2
2
  heading: 'Before We Begin',
3
3
  paragraphs: [
4
- "You're about to answer a series of questions about how you think, what you expect, and what you tolerate when dating.",
5
- 'Your answers will reveal your dating archetype a psychological profile most people never see about themselves.',
6
- "From there, Deina becomes your personal dating coach — helping you evaluate the people you're dating, reality-checking your decisions, and keeping you honest with yourself through your relationship life.",
4
+ "Most people think they're the good one in their relationships.",
5
+ "But the patterns you repeat, the things you tolerate, the way you react when it gets hard — those tell a different story.",
6
+ "You're about to find out which one you are.",
7
7
  ],
8
- closingLine: 'There are no right answers. Only honest ones.',
9
- goal: 'The goal at the end of Deina is exclusivity — with the right person, on your terms.',
8
+ closingLine: 'Just be honest with yourself.',
9
+ goal: '',
10
10
  buttonText: 'I understand',
11
11
  };
12
12
 
@@ -24,38 +24,38 @@ export const ABOUT_YOU_CONTENT = {
24
24
  export const SECTION_INTROS = {
25
25
  standards: {
26
26
  heading: 'Your Standards',
27
- subheading: 'Define what matters most',
28
- body: 'Take a moment to think about the qualities that truly matter to you in a partner not what sounds ideal, but what actually affects your attraction, respect, and long-term compatibility.',
27
+ subheading: 'Or the lack of them',
28
+ body: "Everyone says they have standards. But most people drop them the moment someone attractive shows interest. Let's see where you actually draw the line.",
29
29
  scaleInstruction: 'Rate each from 1 to 5',
30
30
  scaleLabels: { min: '1 = Nice to have', max: '5 = Non-negotiable' },
31
31
  buttonText: "Let's begin",
32
32
  },
33
33
  timeline: {
34
34
  heading: 'Your Timeline',
35
- subheading: 'Set your expectations',
36
- body: "Everyone has an internal sense of how relationships should develop even if they've never consciously defined it.",
37
- tagline: 'Your timeline. Your terms.',
35
+ subheading: 'How patient are you really',
36
+ body: "Some people rush in too fast. Others wait so long they lose people who were right for them. Where do you fall?",
37
+ tagline: '',
38
38
  buttonText: "Let's begin",
39
39
  },
40
40
  mindset: {
41
41
  heading: 'Dating Mindset',
42
- subheading: 'How you see yourself in the dynamic',
43
- body: 'Dating decisions are shaped not only by what we want in a partner, but by how we see ourselves in the dynamic. These questions focus on you.',
44
- tagline: 'No right answers. Only honest ones.',
42
+ subheading: 'The part most people lie about',
43
+ body: "It's easy to say you know your worth. It's harder to act like it when you're emotionally invested. These questions are about who you actually become in the dynamic.",
44
+ tagline: '',
45
45
  buttonText: "Let's begin",
46
46
  },
47
47
  tradeoffs: {
48
48
  heading: 'Trade-Offs',
49
- subheading: 'What you choose when forced to choose',
50
- body: 'In real relationships, you rarely get everything at once. These questions explore what you naturally prioritize when trade-offs appear.',
51
- tagline: 'No right answers. Only honest ones.',
49
+ subheading: 'What you sacrifice and why',
50
+ body: "You can't have it all. The things you're willing to give up say more about you than the things you say you want.",
51
+ tagline: '',
52
52
  buttonText: "Let's begin",
53
53
  },
54
54
  enforcement: {
55
55
  heading: 'Boundaries',
56
- subheading: 'How you protect your peace',
57
- body: "Standards only matter if they're enforced. Think about how you usually respond when someone's behavior doesn't meet your expectations.",
58
- tagline: 'Standards mean nothing without boundaries.',
56
+ subheading: 'Do yours even exist',
57
+ body: "Having standards means nothing if you don't enforce them. Most people set boundaries and then let the same person cross them twice.",
58
+ tagline: '',
59
59
  buttonText: "Let's begin",
60
60
  },
61
61
  players: {