diff --git a/src/features/assistant/AssistantPage.tsx b/src/features/assistant/AssistantPage.tsx
index d6714b1..99aa7e4 100644
--- a/src/features/assistant/AssistantPage.tsx
+++ b/src/features/assistant/AssistantPage.tsx
@@ -18,6 +18,8 @@ import { Page, PageHeader, RequireCampaign } from '@/components/ui/Page';
import { Button } from '@/components/ui/Button';
import { cn } from '@/lib/cn';
import { CampaignInsights } from './CampaignInsights';
+import { SessionPrepCard } from './SessionPrepCard';
+import { NpcGenCard } from './NpcGenCard';
export function AssistantPage() {
return
+ Generate a ready-to-use NPC with motivation, secret, and an intro hook for the table. +
+{message}
} + + {state === 'ready' && npc && ( ++ Generate three distinct session opening hooks grounded in your campaign's current threads. +
+ + + {message &&{message}
} + + {state === 'ready' && hooks.length > 0 && ( +{hook.opening}
+{hook.tension}
+{tip.role}
++ {sc.desc} +
+ )} +
+
Points remaining: {pointBuyRemaining(pb)} / 27
} - {selectedClass && selectedClass.keyAbilities.length > 0 &&Tip: prioritise {selectedClass.keyAbilities.map((k) => ABILITY_ABBR[k as AbilityKey]).join(' / ')} for a {selectedClass.name}.
} + {selectedClass && (() => { + const tip = getClassTip(system, selectedClass.slug); + const text = tip?.abilityTip ?? (selectedClass.keyAbilities.length > 0 + ? `Prioritise ${selectedClass.keyAbilities.map((k) => ABILITY_ABBR[k as AbilityKey]).join(' / ')} for a ${selectedClass.name}.` + : null); + return text ? ( +
+
Assign each value to a different ability.
}Choose {Math.min(skillCount, skillOptions.length)} {system === 'pf2e' ? 'Trained' : 'proficient'} {skillCount === 1 ? 'skill' : 'skills'} ({skills.length} selected).
-{system === 'pf2e' ? 'These start at the Trained proficiency rank; you can raise ranks as you level up.' : 'You gain proficiency in these skills, adding your proficiency bonus to checks.'}
+{system === 'pf2e' ? 'These start at the Trained proficiency rank; you can raise ranks as you level up.' : 'You gain proficiency in these skills, adding your proficiency bonus to checks.'}
+ {selectedClass && (() => { + const tip = getClassTip(system, selectedClass.slug); + return tip?.skillSuggestions ? ( +
+
+ β {guide.upgradeAt.note} +
+ )} + {guide.upgradeAt && character.level >= guide.upgradeAt.level && ( +
+
{guide.tip}
+ )} +{privateHandout.body}
} @@ -74,9 +77,12 @@ export function PlayerBoards({ snapshot, image, images }: { snapshot: Snapshot;{subtitle}