What I learned this week about: Pardot Responsive Layouts

I built my first responsive email template in 2014 when I was just coming into the MOPs/Salesforce Admin portion of our programming and realized that my company’s marketing emails were NOT responsive.

Me being me, I ended up sitting through a free webinar put on by Litmus to gain the basic understanding of how responsive emails worked, and from there I was the go-to on the team for all things HTML and CSS. I fumbled my way through enough to ensure that our emails and custom landing pages would look good on mobile.

Side note: I did all of this because I had reviewed the open rates based on device and found that approximately 30-40% of our emails were being opened on mobile. That’s a pretty sizable chunk of people having to squint at tiny print on a small screen.

I am not an expert on this stuff at all, so I’m not about to sit here and break down how to do this – there are much better resources out there for that. All you need to really understand about this is that responsive emails are based on tables, as in:

<table>

<tr><td></td></tr>

</table>

That at least I understood having been big into building strangely elaborate personal webpages when in school. I wish I had screenshots of some of the work I did back then – it wasn’t terrible, all things considered.

For responsive emails these are important because you end up with nested tables – tables inside of table cells inside of tables. Tableception, if you will. (Is that joke still a thing? I use it a lot.)

And then on top of that, there are some special little tweaks you can make to the CSS itself to ensure that when the size of the screen shrinks, those tables all shift around into place, so instead of squished, you get stacked.

Screen Shot 2019-10-29 at 1.17.34 PM <– Like that.

So what does this have to do with Pardot??

In a few implementations clients have used one of the prebuilt responsive templates in Pardot and found that instead of stacking, their template just shrank down into a smaller version of the same layout.

For whatever reason this didn’t seem to happen in previews or even with all template layouts, but for this client it did, and I wanted to fix it. It took some digging. And by digging, I mean rewriting the code almost line-by-line to find the issue, but when I did find it, it seemed a little silly.

The key to that fancy table action above working is in the CSS that exists for that email, so before we even start adding our tables and rows and cells and tables inside of cells…we have our CSS classes defined. Think of those classes as references; later in the HTML tables, I can reference my CSS via the class name, and that is used to display the info according to that reference.

But what I found was a table referencing a class that wasn’t there. Simple mistake and simple solution – we just had to drop the appropriate class name (reference) in the CSS, and BOOM! We had a nice, stacked template.

So what happened??

¯\_(ツ)_/¯

It’s possible that the client made some small change during editing that removed that class. It’s possible that on that particular layout, the class just wasn’t included. I don’t know, but what I took away from that was to just check.

This is true no matter the platform. Any time you are using work or designs created by another source for mass consumption and reuse, just take a minute and review it. Become familiar with it. In a way, the HTML/CSS of your email templates is like a manual for a new gadget you’re putting together. It’s tedious to go through it, and wouldn’t we rather just slap the thing together and be done? Sure. But if you take that time at the beginning to introduce yourself, you’re more likely to find little hiccups. You know, before you start putting any real weight on the thing.

 

What I learned this week: Providers & Self-Signed Certificates

I would say that about once a month I have a client or coworker sending me an email that looks like this and asking “what do I do?”

SelfSignedCert has expired
SFDC Expired Certification Notification

I remember getting my first one of these and panicking, and the documentation available for admins with little knowledge of single sign-on is poor. I am pretty sure that we have all found the answer via the Answers section of Salesforce’ Help, as opposed to actual documentation.

I have kept a link on hand to share for just this occasion (it’s here, in case you need it).

Fast forward a few years, and I’m studying security and identify more in-depth than I have in the past, and much like data skew, that involves learning the correct terms for what used to sound like jargon.

As the link above to Salesforce’s help article states, this Self-Signed certificate is most commonly used for Single Sign-On settings, but…what does that mean? As with anything else, stating the purpose or cause of something doesn’t always answer a person’s question. Many people much smarter than me have rightly pointed out that if you cannot explain a concept to a child, you do not truly understand that concept. And Salesforce’s Help Articles aren’t always great for that level of explanation.

So let’s start with the basics: Single Sign-On.

If you work for a company in an office, you may already experience this everyday. You log into your computer, and doing so logs you into other company services – an extranet, your inbox, etc. To varying degree, the idea is in the name – you sign in once to multiple platforms.

Ultimately this works because there are two entities working together to allow this to happen.

The Service Provider is the system you’re being logged into secondarily – let’s say JIRA. This is the platform that is requesting your login credentials. Normally this request looks like a login screen, but for single sign-on the whole point is that you bypass that screen. So instead of asking YOU, it asks the system you’re logging in through.

This initial system is the Identity Provider. It is helpfully passing along your credentials to the system that needs the information.

Salesforce, as you can imagine, can be both. And the self-signed certificate is sort of like your global permission slip. And like a permission slip it needs to be updated every once in a while.

“But I don’t have single sign-on enabled!” you cry.

Well sure, that makes sense. That means that Salesforce may not be a Service Provider in your org.

Have you installed any connected apps, though? Many connected apps walk you through a setup process that includes a handy UI that takes on the heavy lifting of setting up your API connection. During this process, some of those apps may create a certificate, which you’ll see by reviewing your connected apps link to that certificate. Sometimes these will take care of themselves – the third party companies you’re working with KNOW about this, and they plan accordingly, but at the least, you’ll know.

And if you’ve enabled Salesforce as an Identity Provider, even if you’re not using it that way…well, there you go.

Long story short: if you don’t remember setting this up, it’s very unlikely to cause issues, but it’s also very easy to update. Bookmark that link, and next year when you get that email, you’ll be ready.

 

What I learned this week: Data Skew

Disclaimer: In the spirit of full transparency, I learned about data skew a little while ago. But the whole point is “what I learned this week.” In some cases, “this week,” just refers to this week in time…like…last week, last month, whatever.

My first brush with NPSP was as a consultant. I remember very clearly thinking that some of the features would have been very handy for my B2B sales staff back in the day. In a lot of ways it was love at first sight. I still get prickly when people say mean things about it…

[Insert about a half hour of me looking for the best option for a “Don’t talk to me or my son ever again” meme before realizing there could potentially be a better use for my time.]

That said, the first time I started getting error emails at about 2am was ALSO around this time.

You know, this one:

Message: “First error: Update failed. First exception on row 0 with id 001……………; first error: UNABLE_TO_LOCK_ROW, unable to obtain exclusive access to this record or 1 records: 001…………….: []”

And I was flummoxed. What does that even mean? Why are you locking anything? Who said that you needed exclusive rights? And what does this have to do with merging records?

For a while I sort of…ignored it. Honestly it would run again at some point, right? It rarely happened more than once for the same record.

Sometimes I would have dozens of them. Usually right after some major data change or something. I suspected they were related, but I had other pressing concerns, and eventually everything would be sorted.

Over time I filled in the blanks. Unable to lock row meant that whatever the code was trying to do, it couldn’t get update access to the record.

If I spent more than 30 seconds on it, it made sense. A record cannot be edited by more than one person at a time, so why would it make an exception (ha ha – get it?) for custom code.

And then again, for a while, I left it at that.

Enter Data Architect Trailmix, stage right.

A super important part of the large data volume considerations that are discussed in the data architect arena is the concept of data skew. And as I read about it, I was taken back to a project early on, a move from the Starter Pack and a bucket model to NPSP with Household Accounts.

This client was looking to upgrade to the new success pack. They had been using the bucket model for YEARS – more than 50,000 contacts all inelegantly shoved into this single Account called “Individual.”

It was difficult to report on things. It took forever for the record to load.

I knew that there was a correlation, but I could not, especially at that time, explain what it was. I had a sense that having to many child records was a bad thing. I didn’t know what to call it. And I wouldn’t know, until years later, that that very situation was what caused errors during the overnight batch processing.

Data skew occurs when we have too many child records, plain and simple. It has an impact on loading time (you try showing a record and querying tens of thousands of records at one time), reporting, and…yes, automation.

It doesn’t exactly help me fix the errors all the time. Sometimes it’s just bad timing, and not even because of data skew. But putting a name to something makes it more accessible, less concerning.

Carry on, NPSP. Carry on.

What I learned: TDX19

We’re just going to leave the elephant in the room right where it is, so…make peace with that.

I had the great pleasure to attend TrailheaDX last week, Salesforce’s smaller developer conference, in San Francisco. It was my first TDX, but I certainly hope it won’t be my last.

For those who have never been, it is WAY smaller than Dreamforce. Dreamforce spans over blocks and blocks, from Moscone to local hotels, and it’s not unheard of to walk close to a mile just to get from one session to another. TrailheaDX is not like that. It takes place entirely in Moscone West – granted, all three floors, but comparatively, it’s easy.

It also is repetitive. That has some negative connotations, I realize, but hear me out.

Dreamforce takes place over what I’m confident is half of the city, and very few sessions are alike. If you miss a session because you’re on one end of the event, and the session is on the other, then that’s it. You can hopefully catch a recording later.

TDX had some – not all – but some sessions repeated in the theaters, so if you missed it one time, you might be able to catch it again. Not all of the sessions worked that way, but enough of them that I was able to safely select one session over another because I knew I’d get a second chance later during the event.

There was still all of the energy and good vibes of the community; I still got to see a lot of my friends and coworkers.

And this was the first time in years that I simply attended the event. I didn’t volunteer or serve on a panel or do anything but go to sessions and try to absorb, and I’m glad I did. I learned quite a bit while I was there, and I came away energized enough to sit down and write this. Which is no small feat.

I had a bit of an epiphany, as well, that I’d like to share now.

As a self-proclaimed polymath, I have struggled with how best to run this blog. I wrote about it already, but I still never answered my own question.

So I’m going to unshackle myself a bit. Moving forward, I’ll be sharing things I learn – random, and untethered to a single category. Because that’s what’s interesting to me. Sometimes it’ll be Salesforce related, or technology related, or project management related, or…whatever I learned.

That’s what I’m taking away from TDX19, and I’m already looking forward to next year.

Live from Dreamforce

It’s Wednesday – halfway through Dreamforce, and I’m returning from a day and evening of volunteering, playing Dungeons and Dragons, and having dinner with some of my absolute favorite people.

I look back on my first Dreamforce, and I look at where I am today, and I still can’t believe it. How is this my life? How did I get so lucky?

Not to say that it comes for free. I work hard, and I work a lot, but I enjoy my work, and part of my career is experiencing this event (and others like it) every year.

One of the first things I was asked to do this year was fill out a gratitude card – what am I grateful for?

This. All of it. I’m just grateful.

Online Proctoring: My Horror Story

I enjoy my creature comforts. I like working from my couch some days, with blankets all bundled around me, feet propped up, and a cup of coffee nearby. Most importantly I like all of those things in my own house. If offered an opportunity to get coffee at a fancy coffeeshop or make myself a cup of Chock Full O’ Nuts at home, I’m going to pick home. Every time.

So when I learned that certification could be done from home, those many years ago, I signed up immediately. The first online proctored exam I took was not actually for Salesforce. It was my Marketo Certified Expert exam, and I took it in December after signing up for a training course that came with a voucher. I figured it couldn’t hurt. And given that December is prime time for crap weather, I was excited, despite the “it’s not awesome” warnings available online. How bad could it be?

Well…

First my webcam just stopped working. It had been fine, doing its thing, and literally just before it was time for me to sit down and show my stuff, it stopped.

Kryterion was super chill. Their support team rescheduled my exam for an hour later, and I ran out to get a new webcam. Done.

Fun fact: new webcams are better than old webcams. The resolution on my new one was too good, in that it couldn’t match my face because the old picture I had on file for facial recognition didn’t have as high a resolution.

No worries. Super awesome support team reset that. Face recognized. Typing recognized. It was time to take the test. Aced it.

When it came time to take my first Salesforce exam, I figured I had worked out the kinks and could handle anything.

Well…

I just couldn’t log in! After about three or four attempts, calling support, and still not being able to access my exam, we discovered there was a server error on their side. They told me they would reschedule my exam (for free, again, thank you super awesome support team!) and call me when I would be able to log in.

I made myself a drink and watched an episode of the Office. I was halfway through my vodka-cran when they called and said I could get started. Aced it.

I took a few onsite exams after that. Switching it up, I guess. But the testing location was not a huge step up from the headaches I’d had at home, so it was back to online for me.

Testing with a Mac is different. Testing with the new MacBook Pro (with its nearly universally despised Thunderbolt 3 ONLY connections) is actually impossible. Literally. If your external webcam (which you have to use) is connected via a dongle (which is has to be), the feed won’t go through.

For my Pardot exam, it took us about 2 hours to troubleshoot. If not for the super awesome support team at Kryterion, I would still be in the fetal position upstairs. I ended up needing to use the gaming computer to take my exam. Sweet graphics, anyway. I still had to stop like five times to adjust where the camera was or the microphone volume, or whatever.

I’m really not trying to scare you off. Legitimately not my purpose here. But I want you to KNOW what you’re getting into, if you go the online route.

First of all, your test may go way smoother. I had at least two that went off without a hitch. But just in case, keep these things in mind:

  1. If you have a brand new MacBook Pro, just plan on taking the exam onsite or with a cheap-o PC you pick up at Best Buy for like $200.
  2. When they say that you should buy their specific webcam…consider it. I didn’t. I had to buy one last minute, and I just wasn’t going to reschedule. But they have one that works, so you might as well.
  3. Download Sentinel and do your “biometric scan” in advance but not TOO in advance. Like two or three days beforehand is fine. But if you sign up for the exam in June to take in November, just wait.
  4. Be prepared to spend some time getting INTO the exam.
  5. Be prepared to be interrupted DURING the exam to fix something.
  6. Lean heavily on the support staff there. They really are awesome, really patient, and they have the answers.
  7. Be NICE to the support staff. Their job sucks. They just watch a bunch of under-dressed, maybe showered, work-from-home people take exams and get mad all day. And they can help.
  8. Maybe make a drink beforehand?
  9. Definitely eat beforehand – it might be HOURS before you get another chance.
  10. Be prepared to retake the exam. After fighting with computers and getting interrupted and feeling like NOTHING YOU DO IS WORKING, you might not be in the best place to take an exam…so be patient with yourself, too.

Maybe I’m a glutton for punishment, but I’ll probably continue doing the online proctored exams. That is how much I hate driving in snow.

 

DnDF17 Episode 2: Everything must be dwarf

Previously on DnDF17…

The members of Bacon Ipsum stared in growing horror at the flames consuming Moscone.

Datatello’s concern heightened with each area he recognized, but his eyes focused on his own neighborhood, wondering if his sister, Erikuhl, was safe.

Bakaryu had to use all of her mental discipline to stay put, seeing the glow and smoke from the Temple district.

Trailblazer turned away to seek Dirk in the crowd. Their handler had his head held down to his wrist, shaking it and prodding it, his visage one of consternation. She approached, waving vaguely at the door, “Where do you need us?”

“What?”

“I assume everyone’s scrambling at this point, but what are our orders?”

His eyes narrowed, “I’m not getting anything. What are you talking about?”

Perhaps just as confused as he clearly was, she pointed out the still-open door, hoping that the fires raging through the streets would be indicative enough of her question. His eyes widened, and he looked back at her, “They must have hit Site 14. Where are you going?”

This felt like some terrible comedy bit, and the timing was awful, “I don’t know! Where do you need us?”

He shook his head again, considered a moment, then reached into a pouch and tossed her a wrist brace similar to his, “Here. Take this. When Site 14 is back up and running, you’ll need to know what the plan is.”

He approached the prone, metal dwarf and leaned down to inspect. To Trailblazer’s horror, two needles rose from his chest and struck Dirk in the hand. Her years of surviving in the wilderness made it clear that this was poison, but no matter her abilities, she couldn’t pinpoint it.

“I’m fine! Go!”

With a frustrated shout to the patrons to look after him, Trailblazer joined the others, “The system is down. We have no orders.”

Even as she said it, as she listened to her companions’ reports, she saw the glow in the distance and knew that her mentor’s shop was, if not already burning, in danger of doing so soon. She focused on the reports, and nodded, “We need to get to the residential area first. The Temples have more power to stop this. We’ll go around in a loop.”

Datatello had already hopped onto his magical, rolling board and was heading toward his home, the others following. Erikuhl, his sister, was waiting, waving frantically when she recognized him.

“Are you ok?”

“Fine, I’m fine.”

“What about the kids?”

“They’re…” she trailed off, her eyes unfocused, as she tried to think – there were flames and children, and the children needed to be…led away from the flame. She had done that, yes. She nodded, “Yes, they are safe.”

“What happened here?”

“Dwarves! Large dwarves,” she started, rummaging through a pack and shoving things into his hands, “Take these!”

He looked down to see a pair of bracers and a necklace, a kind of upside down triangle with something carved into it. He had barely any time to don them, for lack of a place to put them otherwise at least, before three dwarves, large and covered in metal like the one Master of Coffee, turned in unison and began stalking toward them.

Things swiftly fell to chaos. Coming up swiftly behind Datatello, Kriv summoned fire and hurled it at the oncoming monstrosities. Either unprepared or unconcerned, the dwarves seemed to simply walk into the new flames. Bakaryu sprinted forward, first to ensure that neither Datatello nor Erikuhl were similarly engulfed in flame, and to open her maw and breathe a rolling ball of energy onto their attackers.

Datatello had retrieved his juggling balls, spinning them through the air; they gained momentum, as his companions attacked, and when he knew they were clear, he made his attacks, “You guys shouldn’t play with fire! You could get hurt that way!”

One of the weighted spheres flew directly at the dwarf closest to him, knocking into its head. It turned to stare quietly at him, and the half-orc moved closer to attack, punching him in his jaw. The dwarf had no reaction, but there was a definite sting in his own hand.

Trailblazer, astride Cloudy, came up behind the party. She took aim with her bow, the goat’s added height making it possible for her to use her longbow. The arrow shot out, whistling through the air to bury itself in the eye of the dwarf Datatello had just angered.  In the time that it flew, she drew another arrow. Before it cleared Cloudy’s head, the goat twisted and caught the arrow, chewing on the wood thoughtfully. Trailblazer stared at her, feeling betrayed.

Arrow still in its eye, the dwarf still stared at Datatello, its hand starting to shudder, opening and closing with a strange regularity, as if on a spring. The dwarf behind it, prone, lifted back to standing, like a fulcrum. Once straight again, he reached behind, drawing a battle-ax from its back. The axe grew, extending both the handle and its blades – blades that started to spin wildly.

The dwarf took a step and swung the spiraling blade at Datatello, slashing into the half-orc hard enough that the monk stepped back, inadvertently dodging the second blow.

The third dwarf standing near Bakaryu held up his arm, his hand popping down, as if on a hinge, and a circular blade came out, spinning menacingly. Before he lunged, he turned, seeing Trailblazer. He turned and started toward her.

Kriv’s eyes narrowed, seeing the change in direction, and lashed out, a blast of electricity arcing through the air toward their attackers. All but the potential leader, wielding the battle-ax, seized suddenly, then fell unceremoniously to the ground.

The leader turned toward his attacker and began stalking toward Trailblazer, a well. Bakaryu acted immediately, stepping in front of him and driving forward with her sword. The dwarf looked at the sword, taking a step forward, still staring at Trailblazer.

Another step.

And he fell slack on the blade.

The team looked around, Bakaryu looking over at her dwarf companion, who was muttering about nightmares, “Maybe you should wear a disguise or something.”

“So Ryu, ask me if I have anything that would work as a disguise for Trailblazer.”

Datatello grinned, “This is a joke he’s been telling lately. I don’t really get it, but it is pretty funny.”

The paladin smiled, “Ok. Kriv, do you have something that we could use as a disguise for Brunhilde?”

Kriv reached into his cloak, digging around a bit, before pulling out a large cloak. It was clearly too large for the dwarf, but it would most certainly hide her from view. He handed it over, “Try this on. If it’s too long, maybe Cloudy will hem it up for you.”

Datatello watched all of it joyfully, “I don’t know what you’re paying for your magic classes, but it’s worth it.”

The others looked at him, but he went peacefully into a meditation. He twirled then brought his quarterstaff down, shouting his holy cry, feeling his body start to heal.

“Maybe you should ask if the wizard has a health potion,” Kriv offered helpfully, frowning when his cloak came into view. The corner snapped him in the face.

“It was a genuine ask,” he grumbled. The corner snapped him the other way.

Bakaryu, realizing that her companion was still injured approached, reaching out to offer him healing.

With the battle over, and the healing done, the group looked around to see the fires creeping in. Kriv cleared his throat, “Wouldn’t it be great if we had some sort of hose and a never-ending supply of water to help put out this fire.”

Datatello smiled, “Ok. Kriv, do you have a hose that we can use to put out this fire?”

The wizard sighed, “It’s not as useful if we don’t have water.” He gestured, as he spoke, a tube started falling out of his robe, and with each gesture, more fell out.

“I recognize this! But listen, Kriv, this isn’t a time for joke.”

Trailblazer shook her head, “Datatello, you live around here – do you know anyone who can help us put this out, so we can continue on?”

A grunting sound, followed by hands waving, became apparent, as Erikuhl started to shout, “I can help!”

She grabbed the tube coming out of Kriv’s cloak and began to run, pulling it. It continued to flow until, finally, the end popped out.

“We need a water source,” Kriv sighed.

Datatello made his way to a nearby entry to the aqueduct below them, while Kriv’s cloak dropped another hose out, as if annoyed. They connected the hoses and, after some additional work and questions, they had a pump to bring water out of the sewer and toward the fire.

They took a moment, breathing deeply and centering themselves, trying to not think about the city burning around them. At some unspoken agreement, they headed out again, Trailblazer gesturing, “Let’s get to the template district.”

A little over halfway there, they came across a dwarf sprawled on the ground, black, spiderwebbed marks on his face, as he struggled to breathe. Datatello called Trailblazer over, and she approached, recognizing him immediately as Wuric, a traveling merchant who had the displeasure of being in town.

“Kill me,” he begged, through harsh breaths, clearly unable to move otherwise, “Please. Please. I don’t want…this.”

She could see the black poison in his skin spreading, the same as Dirk, and Trailblazer waved to Bakaryu, “I need…I’ve seen this before. I don’t know what kind of poison it is.”

The dragonborn approached, holding her holy symbol in her hand and kneeling. She channeled the power of the storm through her, focusing it and shaping it, as she reached down to place her hands on his chest.

Before Trailblazer could shout, to warn her, two needles whipped out, just as they had in the Master of Coffee, but they stopped, evaporating. The black lines on Wuric’s face began to recede; his breathing returned, even and steady, and finally the only indication of his previous condition were two pinpricks on his cheek.

“What happened?”

“Dwarves. Some dwarves attacked,” he muttered, sitting slowly, “focused on dwarves, but they attacked everything. I fend them off as best I could, but something got me with some poison, I guess. I couldn’t do anything. I felt my mind retreating, like I was losing grip of it, like I was being pushed to the back. And there was…this voice. So loud. It just said…all things must be dwarf,” he finished, shaking his head.

Kriv approached then, hand raised, “Still want us to kill you?”

The dwarf blinked rapidly, “No! No, no. I’m ok now.”

As her companions spoke, Bakaryu concentrated on the poison that she had just cleansed. It felt…like power of the undead. Her sense of the divine made it clear, the clawing sense of evil dissipating, along with the poison in the dwarf before her.

“Were the dwarves strange looking?” Trailblazer asked, rubbing her face.

In answer, Wuric began gingerly removing chainmail, asking her for help. While the black had receded, there was already metal plating across his chest. She nearly recoiled but steeled herself, leaning forward. It looked like iron. The aura itself was faint, and growing fainter, but it was there.

“When did this start?” Trailblazer asked.

He shrugged, “Never had it before.”

“How long ago were you attacked?”

“Hard to say when all you know is pain. Every moment is an eternity when you’re in agony.”

No one said anything, and Trailblazer looked bemused.

“Was that too dramatic?”

Datatello scaled a building, feeling that he needed to watch for any further bad news. The fires seemed to have died down, or at least not spread, much to his relief. As he scanned, he saw pockets of dwarves, all heading in the same direction – not speaking, not showing signs of camaraderie, simply…marching.

Trailblazer helped Wuric up, eying the abandoned cart of TaskRays and nodded toward it, “You should get out of town.”

He nodded, taking up his cart, and waving, “Thank you. I, uh, I owe you.”

As the dwarf retreated into the distance, Trailblazer turned back to the party, “So let’s get you to your temple,” she grinned at Bakaryu.

They were close, so it wasn’t long before they entered the courtyard of the temple district, all centered on the towering statue of a flower, multi-colored with the stones and metals that made it. Many of the temples were untouched, but damage had been done to both the Temple of the Maker and Temple of the Storm. Puddles of water surrounded them, clearly the work of magic.

The Temple of the Maker was razed to the ground.

Bakaryu approached the Temple of the Storm, where Longshore, a bronze dragonborn that she knew through the temple was finishing some work.

“You made it, Ryu,” she breathed.

“Yes, I made it. What…happened here?”

“You knew? The dwarves. They came. They did not bring the love. They brought only pain and poison. You’ve seen the poison?”

“Yes – we healed one of them, on the way here.”

“How so?”

“Restoration,” she shrugged, unsure how else to explain it.

“Oh? Good to know that something so simple can do so much good. I will send word.”

“It seems to be undead in nature.”

Longshore nodded, “Yes, we sensed that as well.”

Trailblazer approached, then, “Are they attacking non-dwarves”

The other dragonborn frowned, “They focused on the dwarves. They came and went directly to the temple of the maker. One of them called them traitors, called them…undwarfish.”

Kriv nodded, “A very short conversation.”

Longshore said nothing to the wizard, “He said they were…bringing down, or, no, taking away from dwarves society by trying to allow others to be equal to dwarves. That dwarves were superior, and that if others could not live up to their standards, then they should live in the dirt.”

Datatello pointed, “Did they go in that direction, when they left?”

Longshore nodded, “Yes.”

The other party members turned to look in the direction, trying to determine what they could be headed toward. No one could put their finger on what they could be headed toward – it seemed innocuous. But they knew, at least, that that was the direction they needed to head in.