LockStock docs

Branding

Make the widget look like part of your store — from picking a colour to full custom CSS.

The widget lives in its own Shadow DOM: your site's CSS cannot break it, and its CSS cannot touch your site. To make it look like yours, use one of three levels. Each builds on the previous one.

Level 1 — settings

Set these in the dashboard under Appearance, with a live preview of the chat, the results and the button. Colours are hex values like #1d4ed8.

SettingValuesNotes
modelight, dark, autoauto follows the shopper's system theme
accentcolourYour brand colour. It marks AI actions, main buttons, active filters and the launcher. We never change it
accentForegroundcolour or emptyText on the accent. Leave empty and we pick white or near-black, whichever is more readable
background, foregroundcolour or emptyPanel and text colours. Empty means our defaults for the mode. Tag, hover and border shades are derived from them
radius0–32 pxBase corner radius; every other radius scales from it
font.familydefault, system, inherit, customdefault is our Manrope; inherit uses your page's font; custom loads font.url
font.urlhttps:// URL of a .woff2For custom. https only: browsers do not load an http file on an https page. A variable font is best: one file covers every weight
logoUrlURLThe store's logo in the chat header in place of the AI mark: an https image, square, at least 80×80; allow its host in img-src when you have a CSP
assistantNametext, up to 40 charactersShown in the chat header
launcher.enabledtrue, falsefalse hides our button: open the chat from your own with lockstock('open')
launcher.positionright, leftWhich bottom corner
launcher.offsetX, launcher.offsetY0–200 pxDistance from the side and the bottom
launcher.stylefield, pillHow the button looks on computers. field (default) looks like an input showing, one after another, your example queries — set them in the dashboard under Appearance, they also appear under your empty search box; write them the way shoppers ask («a stroller for the plane»). pill is a compact button with the label. On phones both are a round icon button
launcher.labeltext, up to 30 charactersThe button's accessible name, the pill's text, and the field's text when you have no examples. Empty means «Спросить ИИ»
customCssCSS, up to 20,000 charactersSee level 3

Level 2 — CSS variables

Override any of these variables from your own stylesheet. No !important is needed: your rules win over the widget's defaults.

The widget has three hosts on your page: [data-lockstock-root] holds suggestions, results, the full-screen search layer and the chat; [data-lockstock-launcher] is the chat button; lockstock-search is the embedded search box. Set brand variables on all three in one rule. Suggestions and results under an embedded box open in [data-lockstock-root], so a colour set only on lockstock-search would leave them in the old one.

[data-lockstock-root],
[data-lockstock-launcher],
lockstock-search {
  --lockstock-accent: #0f766e;
  --lockstock-accent-foreground: #ffffff;
}

/* Lift the button above a cookie banner */
[data-lockstock-launcher] {
  --lockstock-launcher-y: 96px;
}
VariableOnWhat it controls
--lockstock-accentall hostsThe brand colour; soft tints of it are derived automatically
--lockstock-accent-foregroundall hostsText and icons on the brand colour
--lockstock-backgroundroot, search boxPanels and cards
--lockstock-foregroundroot, search boxMain text
--lockstock-mutedroot, search boxTags, hover and secondary surfaces
--lockstock-borderroot, search boxBorders
--lockstock-radiusroot, search boxBase corner radius in px
--lockstock-fontroot, search boxFont family stack
--lockstock-launcher-xlauncherDistance from the side edge
--lockstock-launcher-ylauncherDistance from the bottom edge

These names are a stable contract: we may add variables, but renaming or removing one is announced in advance.

Level 3 — custom CSS

customCss is applied last inside the widget's Shadow DOM — suggestions, results, the full-screen layers, the chat and every embedded search box — so it can restyle anything there. It does not reach the chat button: style that with levels 1 and 2. Limits: up to 20,000 characters and no @import. Invalid rules are ignored by the browser.

Select elements by these attributes. They are a stable contract, like the variables; class names and the rest of the markup are not.

/* Square product cards with a stronger border in results */
[data-lockstock-results] [data-lockstock-product] {
  border-radius: 0;
  border-color: var(--lockstock-foreground);
}

/* Hide the chips the AI added on its own */
[data-lockstock-chip="inferred"] {
  display: none;
}
AttributeValuesElement
data-lockstock-suggestSuggestions list
data-lockstock-resultsfast, understanding, streaming, doneSearch results: the panel on desktop, the list on phones
data-lockstock-summaryskeleton, streaming, doneThe AI's comment above the results
data-lockstock-chipactive, inferred, removedA filter chip
data-lockstock-steprunning, doneA step the AI is doing, shown while it understands the query
data-lockstock-sortSort switch
data-lockstock-productA product card, row or mini card. The value is internal: select by presence
data-lockstock-calloutreason, tradeoff«Why it fits» or the honest drawback on a product
data-lockstock-compare-barThe «compare» bar
data-lockstock-search-overlayThe full-screen search layer on desktop
data-lockstock-mobile-searchThe full-screen search layer on phones
data-lockstock-search-fieldOur search input in the full-screen layers
data-lockstock-search-boxThe content of <lockstock-search>
data-lockstock-toastA confirmation such as «Добавлено в корзину»
data-lockstock-chatThe chat panel
data-lockstock-welcomeThe chat welcome screen
data-lockstock-chat-markai, logoThe brand tile in the chat header: the AI mark or your logo
data-lockstock-messageuser, assistant, operatorA chat message
data-lockstock-chat-textThe consultant's answer text: paragraphs, bold (strong) and lists (ul, ol)
data-lockstock-stepsWhat the consultant did, above an answer
data-lockstock-comparisonA comparison table in the chat
data-lockstock-reservationform, submitting, doneThe reservation request form
data-lockstock-handoffopen, taken, closedThe «passed to an operator» card
data-lockstock-handoff-contactform, submitting, doneThe call-back phone form under the handoff card
data-lockstock-operator-button—The «call an operator» button in the chat header
data-lockstock-composerThe chat message box
data-lockstock-page-chip«Смотрит: …» bar under the chat header on a product page; the shopper can remove it
data-lockstock-tryThe «Try at home» entry on a product card, in search and in the chat
data-lockstock-visualizeThe «Try at home» dialog: consent, photo, frame, result
data-lockstock-try-frameThe frame over the shopper's photo that marks where the product goes
data-lockstock-photo-inputThe photo file input in that dialog

Experimental

The chat attributes may still change until the consultant is released.

On this page