CSS classes for Tours
💡 Tip: Overriding default inline styles requires adding !important
to your style declarations. For easier identification, inline styles are marked with the 🖍️ emoji.
Example of a Custom CSS rule that will overwrite a default inline style:
.productfruits--backdrop-highlighter {
box-shadow: rgb(0, 255, 191) 0px 0px 0px 3px !important;
}
General classes
.productfruits--tour-container
Styles the container that wraps the entire tour.
Default styles:
.productfruits--tour-container {
left: 0;
right: 0;
bottom: 0;
top: 0;
display: flex;
justify-content: center;
align-items: center;
height: 100%;
width: 100%;
z-index: 10009999;
pointer-events: none;
}
🖍️ Default inline styles:
.productfruits--tour-container {
position: fixed;
}
.productfruits--card
Styles the card of a tour.
🖍️ Default inline styles:
.productfruits--card {
width: var(--card-responsive-width);
max-width: 440px;
background-color: rgb(164, 1, 255);}
.productfruits--card-presenter
Styles a card of the 'pointer'/'highlighter' type.
.productfruits--card-arrow
Styles a pointer card's arrow.
Default styles:
.productfruits--card-arrow.productfruits--card-arrow-top {
position: absolute;
display: block;
border-bottom: 11px solid var(--arrow-bg-color);
border-left: 7px solid transparent;
border-right: 7px solid transparent;
}
🖍️ Default inline styles:
.productfruits--card-arrow {
--arrow-bg-color: white;
left: somevaluepx;
top: somevaluepx;
}
.productfruits--card-dialog-style
Styles a card of the 'modal' type.
.productfruits--animation-fadein
Styles a card's animation.
Default styles:
.productfruits--animation-fadein {
animation-name: fadeIn;
animation-duration: 0.2s;
}
To disable this animation, add this Custom CSS rule:
.productfruits--animation-fadein {
animation-duration: 0s;
}
Header classes
.productfruits--card-header
Styles the card header.
Default styles:
.productfruits--card-header {
position: relative;
padding: var(--card-header-padding);
font-weight: 700;
font-size: 1em;
border-top-left-radius: var(--card-border-radius);
border-top-right-radius: var(--card-border-radius);
display: flex;
align-items: center;
--border-color: #dee4eb;
}
.productfruits--card-header-text
Styles the text inside the card header.
Default styles:
.productfruits--card-header .productfruits--card-header-text {
min-width: 20px;
display: inline-block;
flex-grow: 1;
}
.productfruits--card-header-skip-button
Styles the closing button.
Default styles:
.productfruits--card-header-skip-button {
display: none;
right: 10px;
top: 10px;
position: absolute;
z-index: 10;
}
This button is hidden by default. To display it and use it, add this Custom CSS rule:
.productfruits--card-header-skip-button {
display: block;
}
.productfruits--btn-close-modern
Styles the 'inside' of the closing button.
Default styles:
.productfruits--btn-close-modern {
mask-image: url(data:image/svg+xml;base64,PD94bWwg...dmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnNCIKICAgc29kaXBvZGk6ZG9jbmFtZT0iY2xvc2UyLnN2ZyIKICAgd2lkdGg9IjEyIgogICBoZWlnaHQ9IjEyIgogICBzdHlsZT0iZmlsbDpub25lIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjAuMSAoM2JjMmU4MTNmNSwgMjAyMC0wOS0wNykiPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTEwIj4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcwogICAgIGlkPSJkZWZzOCIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTEzNyIKICAgICBpZD0ibmFtZWR2aWV3NiIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiCiAgICAgaW5rc2NhcGU6em9vbT0iMi4zNiIKICAgICBpbmtzY2FwZTpjeD0iNTAiCiAgICAgaW5rc2NhcGU6Y3k9IjEyLjg0NzQ1OCIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnNCIKICAgICBpbmtzY2FwZTpkb2N1bWVudC1yb3RhdGlvbj0iMCIgLz4KICA8cGF0aAogICAgIGQ9Im0gNy43ODQ4NDAxLDYgNC4wMzk1NTk5LC00LjAzOTQ0IGMgMC4yMzM2LC0wLjIzMzYyIDAuMjMzNiwtMC42MTI3NCAwLC0wLjg0NjczIGwgLTAuOTM4NiwtMC45Mzg2MTQgYyAtMC4yMzM3LC0wLjIzMzYyMTMgLTAuNjEyOCwtMC4yMzM2MjEzIC0wLjg0NjgsMCBsIC00LjAzOTE4OTgsNC4wMzk4MTQgLTQuMDM5NTYsLTQuMDM5NDM5IGMgLTAuMjMzNjMsLTAuMjMzNjIxMyAtMC42MTI3NiwtMC4yMzM2MjEzIC0wLjg0Njc2LDAgbCAtMC45MzgyNjkwNSwwLjkzODIzOSBjIC0wLjIzMzYyODIsMC4yMzM2MiAtMC4yMzM2MjgyLDAuNjEyNzQgMCwwLjg0NjczIGwgNC4wMzk1NTkwNSw0LjAzOTQ0IC00LjAzOTU1OTA1LDQuMDM5NCBjIC0wLjIzMzYyODIsMC4yMzM3IC0wLjIzMzYyODIsMC42MTI4IDAsMC44NDY4IGwgMC45Mzg2MzkwNSwwLjkzODYgYyAwLjIzMzYzLDAuMjMzNiAwLjYxMjc2LDAuMjMzNiAwLjg0Njc2LDAgbCA0LjAzOTE5LC00LjAzOTgzIDQuMDM5NTg5OCw0LjAzOTQzIGMgMC4yMzM2LDAuMjMzNiAwLjYxMjcsMC4yMzM2IDAuODQ2NywwIGwgMC45Mzg3LC0wLjkzODYgYyAwLjIzMzYsLTAuMjMzNiAwLjIzMzYsLTAuNjEyNyAwLC0wLjg0NjcgeiIKICAgICBpZD0icGF0aDIiCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICBzdHlsZT0iZmlsbDojMDAwMDAwIiAvPgo8L3N2Zz4K);
-webkit-mask-image: url(data:image/svg+xml;base64,PD94bWwg...dmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnNCIKICAgc29kaXBvZGk6ZG9jbmFtZT0iY2xvc2UyLnN2ZyIKICAgd2lkdGg9IjEyIgogICBoZWlnaHQ9IjEyIgogICBzdHlsZT0iZmlsbDpub25lIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjAuMSAoM2JjMmU4MTNmNSwgMjAyMC0wOS0wNykiPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTEwIj4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcwogICAgIGlkPSJkZWZzOCIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTEzNyIKICAgICBpZD0ibmFtZWR2aWV3NiIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiCiAgICAgaW5rc2NhcGU6em9vbT0iMi4zNiIKICAgICBpbmtzY2FwZTpjeD0iNTAiCiAgICAgaW5rc2NhcGU6Y3k9IjEyLjg0NzQ1OCIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnNCIKICAgICBpbmtzY2FwZTpkb2N1bWVudC1yb3RhdGlvbj0iMCIgLz4KICA8cGF0aAogICAgIGQ9Im0gNy43ODQ4NDAxLDYgNC4wMzk1NTk5LC00LjAzOTQ0IGMgMC4yMzM2LC0wLjIzMzYyIDAuMjMzNiwtMC42MTI3NCAwLC0wLjg0NjczIGwgLTAuOTM4NiwtMC45Mzg2MTQgYyAtMC4yMzM3LC0wLjIzMzYyMTMgLTAuNjEyOCwtMC4yMzM2MjEzIC0wLjg0NjgsMCBsIC00LjAzOTE4OTgsNC4wMzk4MTQgLTQuMDM5NTYsLTQuMDM5NDM5IGMgLTAuMjMzNjMsLTAuMjMzNjIxMyAtMC42MTI3NiwtMC4yMzM2MjEzIC0wLjg0Njc2LDAgbCAtMC45MzgyNjkwNSwwLjkzODIzOSBjIC0wLjIzMzYyODIsMC4yMzM2MiAtMC4yMzM2MjgyLDAuNjEyNzQgMCwwLjg0NjczIGwgNC4wMzk1NTkwNSw0LjAzOTQ0IC00LjAzOTU1OTA1LDQuMDM5NCBjIC0wLjIzMzYyODIsMC4yMzM3IC0wLjIzMzYyODIsMC42MTI4IDAsMC44NDY4IGwgMC45Mzg2MzkwNSwwLjkzODYgYyAwLjIzMzYzLDAuMjMzNiAwLjYxMjc2LDAuMjMzNiAwLjg0Njc2LDAgbCA0LjAzOTE5LC00LjAzOTgzIDQuMDM5NTg5OCw0LjAzOTQzIGMgMC4yMzM2LDAuMjMzNiAwLjYxMjcsMC4yMzM2IDAuODQ2NywwIGwgMC45Mzg3LC0wLjkzODYgYyAwLjIzMzYsLTAuMjMzNiAwLjIzMzYsLTAuNjEyNyAwLC0wLjg0NjcgeiIKICAgICBpZD0icGF0aDIiCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICBzdHlsZT0iZmlsbDojMDAwMDAwIiAvPgo8L3N2Zz4K);
mask-repeat: no-repeat;
-webkit-mask-repeat: no-repeat;
mask-position: center center;
-webkit-mask-position: center center;
width: 14px;
height: 14px;
mask-size: contain;
-webkit-mask-size: contain;
cursor: pointer;
background-color: #2e0000;
border: 0;
padding: 0;
}
Body/section classes
.productfruits--card-body
Styles the body of a card (excluding the header and footer).
🖍️ Default inline styles:
.productfruits--card-body {
min-height: 350px;
}
.productfruits--card-presenter.productfruits--card-dialog-style .productfruits--card-body {
overflow-y: auto;
}
.productfruits--section-row
Styles the sections of a card. Each section is a new row.
Default styles:
.productfruits--section-row {
display: flex;
position: relative;
}
.productfruits--card-body .productfruits--section-row:first-of-type:not(:only-of-type) {
padding-top: 12px;
}
.pf-body-section
Styles the body of a section.
Default styles:
.pf-body-section {
flex-grow: 1;
flex-basis: 0;
}
.productfruits--card-body-text
Styles the text inside of a section.
Default styles:
.productfruits--card-body-text {
padding: var(--card-body-text-padding);
}
.productfruits--card-body .productfruits--section-row:only-of-type .productfruits--card-body-text {
padding-top: 24px;
padding-bottom: 24px;
}
.productfruits--section-html-holder
Styles a HTML section.
Default styles:
.productfruits--section-html-holder {
width: 100%;
}
.pf-body-section productfruits--card-body-typeform
Styles a Typeform section.
🖍️ Default inline styles:
element.style {
height: 350px;
}
.productfruits--mood-meter-root
Styles an adoption meter section.
Default styles:
.productfruits--mood-meter-root {
padding-top: 10px;
padding-bottom: 10px;
}
🖍️ Default inline styles:
productfruits--mood-meter-root {
display: flex;
flex-direction: column;
width: 100%;
}
productfruits--mood-meter-root div {
display: flex;
flex-direction: column;
}
.productfruits--mood-meter-question
Styles the adoption meter text.
Default styles:
.productfruits--mood-meter-question {
padding-left: 5px;
padding-right: 5px;
text-align: center;
font-weight: bold;
font-size: 18px;
}
🖍️ Default inline styles:
.productfruits--mood-meter-question div {
display: flex;
justify-content: space-evenly;
width: 100%;
padding-top: 10px;
padding-bottom: 10px;
}
.productfruits--mood-meter-icon
Styles the adoption meter icons.
🖍️ Default inline styles:
.productfruits--mood-meter-icon {
width: 35px;
height: 35px;
cursor: pointer;
}
.productfruits--section-video-parent-holder
Styles a video section's video container.
Default styles:
.productfruits--section-video-parent-holder {
width: 100%;
}
.pf-designer-video-youtube
Styles a video's embed.
Default styles:
.pf-designer-video-youtube {
border: 0;
width: 100%;
height: 100%;
min-height: 300px;
display: block;
}
Footer classes
.productfruits--card-footer
Styles the card's footer.
Default styles:
.productfruits--card-footer {
position: relative;
border-bottom-left-radius: var(--card-border-radius);
border-bottom-right-radius: var(--card-border-radius);
display: flex;
align-items: center;
padding: var(--card-footer-padding);
--border-color: #dee4eb;
}
.productfruits--card-footer-steps-counter
Styles the steps counter.
Default styles:
.productfruits--card-footer-steps-counter {
align-self: center;
flex-grow: 1;
text-align: left;
font-size: 1em;
color: #919192;
}
.productfruits--card-footer-skip-button
Styles the 'Skip' button.
Default styles:
.productfruits--card-footer-skip-button {
background-color: transparent;
color: #919192;
padding-left: 12px;
padding-right: 12px;
}
.productfruits--card-footer-back-button
Styles the 'Back' button.
Default styles:
.productfruits--card-footer-back-button {
margin-left: 11px;
}
.productfruits--card-footer-next-button
Styles the 'Next' button.
Default styles:
.productfruits--card-footer-next-button {
margin-left: 11px;
}
Button classes
.productfruits--btn
❗ Please note that this class affects all buttons across Product Fruits. To style specific buttons, please make sure to refine your selector.
Default styles:
.productfruits--btn {
box-shadow: none;
padding: var(--btn-padding);
font-size: var(--btn-font-size);
transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, opacity 0.2s ease-in-out;
border: 0;
border-radius: var(--btn-border-radius);
cursor: pointer;
white-space: normal;
word-wrap: break-word;
font-weight: 500;
text-align: center;
display: inline-block;
background-color: #3047ec;
color: white;
line-height: 1;
display: flex;
align-items: center;
}
.productfruits--card-body-button
Styles a button inside the card's body - aka a 'custom button'.
Default styles:
.productfruits--card-body-button {
display: flex;
justify-content: center;
padding: var(--card-body-button-padding);
}
.productfruits--btn-card-content
Styles the content of a custom button.
Classes that can be targeted via the Look & Feel menu
The Look & Feel menu applies changes globally for all tours. With these selectors, you can tailor settings for individual tour cards.
Dividers:
.productfruits--card-header:after, .productfruits--card-footer:before
Default styles:
.productfruits--card-header:after {
content: "";
position: absolute;
left: 0;
right: 0;
bottom: 0;
height: 1px;
margin: auto;
width: calc(100% - 40px);
color: var(--border-color);
border-bottom: 1px solid var(--border-color);
}
.productfruits--card-footer:before {
content: "";
position: absolute;
left: 0;
right: 0;
bottom: 0;
height: 1px;
margin: auto;
width: calc(100% - 40px);
color: var(--border-color);
border-bottom: 1px solid var(--border-color);
bottom: unset;
top: 0;
}
Backdrop:
.productfruits--single-backdrop
Default styles:
.productfruits--single-backdrop {
display: flex;
align-items: center;
align-content: center;
justify-content: center;
justify-items: center;
}
🖍️ Default inline styles:
.productfruits--single-backdrop {
position: fixed;
inset: 0px;
z-index: 10000010;
background-color: transparent;
}
Target highlight:
.productfruits--backdrop-highlighter
Default styles:
.productfruits--backdrop-highlighter {
position: absolute;
background: transparent;
opacity: 1;
z-index: 10001000;
pointer-events: none;
}
🖍️ Default inline styles:
.productfruits--backdrop-highlighter {
left: 6px;
top: 6px;
width: 1498.67px;
height: 52px;
box-shadow: rgb(40, 53, 147) 0px 0px 0px 3px, rgba(137, 136, 138, 0.43) 0px 0px 0px 4000px;
}
Targeting a specific tour or tour step
Here's how to use data attributes to target specific tours or individual steps for a more relevant user experience.
[data-pf-card-tour
="0"]
Targets a tour by its ID. Replace '0'
with the ID of the tour you wish to target.
You can find the ID of a tour by looking at the web address (URL) of the tour's detail page. The ID is usually a number at the very end of the URL. For example, in a URL like https://my.productfruits.com/portal/workspace/default/in-app-content/tours/detail/12345
, the tour ID is 12345
.
💡 Tip: When working in the Editor, all tours are assigned a default ID of '0'
. Your CSS changes won't appear in the Editor, but will be visible in Preview mode. To see your style updates directly in the Editor, include this data attribute with the tour ID '0'
in your Custom CSS rule. This is useful for previewing changes. Once you're happy with the styling, replace the attribute for your CSS with the actual tour ID.
[data-pf-card-step
="
1
"]
Targets a tour step based on its order in the tour. 1
targets the first card, 2
targets the second card, etc.
Data attributes in action
Getting the selector structure right is essential for accurate targeting. Here's how to do it.
To only target a specific tour, your selector structure should be:
.target-class [data-pf-card-tour="00000"] {
style declarations...
}
To only target a specific tour step, your selector structure should be:
.target-class [data-pf-card-step="1"] {
style declarations...
}
To target both a tour and a specific card step, your selector structure should be:
.target-class [data-pf-card-tour="00000"][data-pf-card-step="1"] {
style declarations...
}