scheme-paper
The quick brown fox jumps
Technical specification
Foundations rendered live from the production tokens and color schemes. Components are added here from Fas 3 onward.
Each card applies its real .color-{id} class, so background, text and button roles are the live composed values.
scheme-paper
The quick brown fox jumps
scheme-white
The quick brown fox jumps
scheme-navy
The quick brown fox jumps
scheme-inverse
The quick brown fox jumps
Valeryd supplies precision-made trailer parts with traceable fitment. Every item carries a part number and compatibility data.
VAL-204-118 · Valeryd supplies precision-made trailer parts with tr...
Animate transform and opacity only; honour prefers-reduced-motion.
| variant · state | default | hover | disabled | loading |
|---|---|---|---|---|
| primary | ||||
| secondary | ||||
| ghost |
on .color-scheme-navy
Auf Lager
Auf Lager Auf LagerAuf Bestellung gefertigt
Auf Bestellung gefertigt · Lieferung in etwa 7 Tagen Auf Bestellung gefertigtAuf Bestellung erhältlich
Auf Bestellung erhältlich Auf Bestellung erhältlichNicht auf Lager
Nicht auf Lager Nicht auf LagerIn order: in stock · made to order (a gas spring at zero) · available to order (anything else that sells on at zero) · out of stock. Last row: made to order without the lead time, and with one day.
With the theme setting "Show prices excl. VAT" on, under every price, small, the same price
excl. VAT: the current price divided by the VAT the market's prices include, which
snippets/vat-rate.liquid looks up by country. The first two follow
the setting and your market's rate. Where the setting is off, the prices include no VAT, or the
country has no rate, the line is left out, as in the third. The fourth passes a rate of 25 %
and shows the line whatever the setting.
Valeryd supplies precision-made trailer parts with traceable fitment. Every item carries a part number and compatibil...
Valeryd supplies precision-made trailer parts with traceable fitment. Every item carries a part number and compatibil...
Valeryd supplies precision-made trailer parts with traceable fitment. Every item carries a part number and compatibil...
Valeryd supplies precision-made trailer parts with traceable fitment. Every item carries a part number and compatibil...
Check the dimensions, the mounting, the colour and the voltage before you order. A position light is chosen by how it fits and how it wires, not by the weight of the trailer.
Measure the light already fitted: length, width, screw spacing and where the cable leaves the housing.
Blank content renders no markup:
VAL-204-118
Valeryd supplies precision-made trailer parts with traceable fitment. Every item carrie...
VAL-204-118
Valeryd supplies precision-made trailer parts with traceable fitment. Every item carrie...
Fits your trailercard on .color-scheme-navy — surface vs plain
VAL-204-118
Valeryd supplies precision-made trailer parts with traceable fitment. Every item carrie...
Valeryd supplies precision-made trailer parts with traceable fitment. Every item carrie...
Fits your trailerRenders the visible trail and the matching BreadcrumbList JSON-LD from one list, so they cannot drift. A product resolves its own parent collection (skipping all and frontpage); pass collection to override. The trail starts at the top category — there is no Home crumb — so a page with no ancestry renders nothing, and the two examples below are every state there is.
Find your trailer by registration number.
We could not find that registration number.
With error_slot: true the error paragraph is always there — empty and
hidden until a script fills it — and already named in aria-describedby,
so the script never rewrites it. inputmode asks a phone for digits
while the field still accepts a pasted "0500N".
Error slot, empty.
Error slot, filled.
Enter the length in whole millimetres.
Every control shares --control-size and --radius-sm
with the button: a native select with the theme's chevron, and a currency-prefixed input
(.field__affix) as used by the price filter.
Works as a plain number input without JS; the <quantity-input> web component enhances the − / + buttons.
With label the stepper gets a visible <label for> naming what it counts, in place of the fixed "Quantity".
Most lids use two. Replace both so they push equally.
In the footer only: a button showing the current country's flag (Shopify's own SVG, country | image_url) opens a modal <dialog> around Shopify's localization form. The button opens it with the platform's invoker commands, so a current browser needs no script; <localization-picker> fills in where a browser lacks them. It lists the countries of the active markets and the languages published to them, prints nothing while there is one of each, and stays off until the theme setting Show the country and language picker is on.
The dialog it opens, in the flow:
Shown once, as a modal <dialog>, when Shopify's suggestion endpoint names a country or language other than the current one. It never redirects: Save location posts the localization form, the dismiss button keeps the visitor where they are, and either answer is remembered. It waits for the cookie banner to be answered, so the two never overlap. Rendered here open and in the flow; on the storefront it only opens when the endpoint has a suggestion, which needs an active market for the visitor's country.
snippets/gas-spring-row.liquid — one result: a geometry with a select
over its forces. The finder clones it from a <template> and fills
[data-slot]; here it carries demo values in every state. The whole row
is Choose's target; the select and Details sit above it.
Genaue Übereinstimmung M8 · Stange Ø10 mm
Ausgefahren 660 mm · eingefahren 370 mm · Zylinder Ø22 / Stange Ø10 mm
Gleiche Länge wie Ihre
Gleiche Kraft
€73,81 pro Feder €59,05 ohne MwSt. Auf Lager
Nahe Übereinstimmung M8 · Stange Ø10 mm
Ausgefahren 660 mm · eingefahren 370 mm · Zylinder Ø22 / Stange Ø10 mm
8 mm länger als Ihre
100 N schwächer
€71,00 pro Feder €56,80 ohne MwSt. Auf Bestellung gefertigt · Lieferung in etwa 7 Tagen
Nächstliegende Größe M8 · Stange Ø10 mm
Ausgefahren 640 mm · eingefahren 360 mm · Zylinder Ø22 / Stange Ø10 mm
20 mm kürzer als Ihre
Gleiche Kraft
€73,81 pro Feder Nicht auf Lager
Genaue Übereinstimmung M8 · Stange Ø10 mm
Ausgefahren 660 mm · eingefahren 370 mm · Zylinder Ø22 / Stange Ø10 mm
Gleiche Länge wie Ihre
Gleiche Kraft
€73,81 pro Feder Nur 1 auf Lager
Passt zur Nummer M10 · Stange Ø14 mm
Ausgefahren 1068 mm · eingefahren 600 mm · Zylinder Ø27 / Stange Ø14 mm
Genaue Übereinstimmung M8 · Stange Ø10 mm
Ausgefahren 660 mm · eingefahren 370 mm · Zylinder Ø22 / Stange Ø10 mm
Gleiche Länge wie Ihre
Gleiche Kraft
€73,81 pro Feder Auf Lager
In order: exact and in stock · close and made to order, with the lead time · nearest and out of stock · short for two springs · a number that fits several forces, force left to choose · chosen.
The rod check on a row. In the finder it shows only while the thread is "Not sure", by a
:has() rule on the thread radios; here that rule is held on by hand.
Genaue Übereinstimmung M8 · Stange Ø10 mm
Ausgefahren 660 mm · eingefahren 370 mm · Zylinder Ø22 / Stange Ø10 mm
Gleiche Länge wie Ihre
Gleiche Kraft
Prüfen Sie, ob die Kolbenstange Ihrer Feder Ø10 mm hat. Eine Feder mit anderer Stange braucht andere Endanschlüsse.
€73,81 pro Feder Auf Lager
snippets/gas-spring-guide.liquid — "Show me where the number is" under the
number field, opened. The photo's sticker is blank; the article number and the force are drawn onto
it, so no machine-written text can be wrong.
snippets/gas-spring-diagram.liquid with measure: true
— the drawing at the length field, and with active: true as it looks while the
field or its slider has focus.
snippets/gas-spring-range.liquid — the slider under a field, passed to
form-field as its addon. The field is the value;
drag the thumb or type. Here at 660 mm on M8's span, and at 500 N on the starting span of every thread.
snippets/gas-spring-fitting.liquid — one size in the end-fitting step.
The step clones it from a <template>; the fixing dimension it
prints depends on the family: the hole for eyes and forks, the bolt length for angled joints, the
ball for sockets.
In order: chosen · a fork head · an angled joint, its bolt length · a socket, its ball Ø · rated 650 N, approved on the one spring it serves by exception · available to order, no image.
snippets/gas-spring-diagram.liquid — the assembled picture, schematic
and fixed in size. Its sprite is rendered once for the demos' prefix; each finder renders its own.
The glyphs at each end are one href each.
In order: the spring alone · hinge eye and fork head · metal sockets at both ends · swivel eye and plastic socket · angled joint at the tube end, bare stud at the rod end.
snippets/gas-spring-fittings.liquid — the step, answered yes and shown
with every family tile. In the finder, JS hides the families with no size that fits and can be
bought in the quantity, and clones the sizes; here two are passed in. Choose a spring in the live
finder below to use it.
Die Endanschlüsse werden montiert an den Federn geliefert.
snippets/gas-spring-finder.liquid — the shell, live against
collections['gas-springs'] (its index loads on the first focus). Below
it, the same snippet as a browser without scripting paints it: the styleguide cannot switch
scripting off, so it applies the finder's @media (scripting: none) rules
by hand. The thread form needs collection.filters, which a page never
has, so this is the guarded state: the note to use the filters, and no dead control.
Finden Sie die passende Feder: über die aufgedruckte Nummer oder über Länge, Kraft und Gewinde.
Nutzen Sie die Filter unten, um die Gasfedern nach Gewinde, Länge und Kraft einzugrenzen.
Die Federn konnten gerade nicht geladen werden.
Alle Gasfedern, Anschlüsse und Zubehör finden Sie untenPrüfen Sie die Maße unter „So messen Sie“ oder sehen Sie sich unten alle Gasfedern an. Kontaktieren Sie uns
Die Endanschlüsse werden montiert an den Federn geliefert.
Wählen Sie eine Feder, um Ihr Set zusammenzustellen.
Die meisten Deckel haben zwei. Tauschen Sie beide, damit sie gleich stark drücken. Anschlüsse werden pro Federende gezählt.
Gesamt
Die Endanschlüsse werden montiert an den Federn geliefert.
Steuern und Versand werden an der Kasse berechnet
Ziehen Sie die Feder ganz aus und messen Sie vom Ende des Zylinders bis zum Ende der Kolbenstange. Gewindezapfen und Endanschlüsse nicht mitmessen.
Montieren Sie die neue Feder nach Möglichkeit mit der Kolbenstange nach unten.
Ist das Gewinde nicht auf der Feder angegeben, messen Sie die Kolbenstange (den dünnen, glänzenden Teil) oder den Zylinder:
| Gewinde | Stange Ø (mm) | Zylinder Ø (mm) |
|---|---|---|
| M5 | 6 | 15 |
| M6 | 8 | 18 |
| M8 | 10 | 22 |
| M10 | 14 | 27 |
Die Kraft steht auf der Feder, z. B. bedeutet 0500N 500 N.
Um den Deckel zu wiegen, nehmen Sie die Federn ab, legen eine Waage unter die Kante gegenüber dem Scharnier, schließen den Deckel darauf und verdoppeln den Wert.
Kraft pro Feder ≈ Deckelgewicht (kg) × L1 × 6 ÷ (Anzahl der Federn × L2). L1 ist der Abstand vom Scharnier zur gegenüberliegenden Deckelkante, L2 der Abstand vom Scharnier zum nächstgelegenen Befestigungspunkt der Feder bei geöffnetem Deckel, beide in mm.
Ein Auge oder eine Gabel sitzt auf einer Schraube oder einem Bolzen: Messen Sie deren Durchmesser. Eine Kugelpfanne wird auf einen Kugelbolzen geklipst: Messen Sie die Kugel.
Finden Sie die passende Feder: über die aufgedruckte Nummer oder über Länge, Kraft und Gewinde.
Nutzen Sie die Filter unten, um die Gasfedern nach Gewinde, Länge und Kraft einzugrenzen.
Die Federn konnten gerade nicht geladen werden.
Alle Gasfedern, Anschlüsse und Zubehör finden Sie untenPrüfen Sie die Maße unter „So messen Sie“ oder sehen Sie sich unten alle Gasfedern an. Kontaktieren Sie uns
Die Endanschlüsse werden montiert an den Federn geliefert.
Wählen Sie eine Feder, um Ihr Set zusammenzustellen.
Die meisten Deckel haben zwei. Tauschen Sie beide, damit sie gleich stark drücken. Anschlüsse werden pro Federende gezählt.
Gesamt
Die Endanschlüsse werden montiert an den Federn geliefert.
Steuern und Versand werden an der Kasse berechnet
Ziehen Sie die Feder ganz aus und messen Sie vom Ende des Zylinders bis zum Ende der Kolbenstange. Gewindezapfen und Endanschlüsse nicht mitmessen.
Montieren Sie die neue Feder nach Möglichkeit mit der Kolbenstange nach unten.
Ist das Gewinde nicht auf der Feder angegeben, messen Sie die Kolbenstange (den dünnen, glänzenden Teil) oder den Zylinder:
| Gewinde | Stange Ø (mm) | Zylinder Ø (mm) |
|---|---|---|
| M5 | 6 | 15 |
| M6 | 8 | 18 |
| M8 | 10 | 22 |
| M10 | 14 | 27 |
Die Kraft steht auf der Feder, z. B. bedeutet 0500N 500 N.
Um den Deckel zu wiegen, nehmen Sie die Federn ab, legen eine Waage unter die Kante gegenüber dem Scharnier, schließen den Deckel darauf und verdoppeln den Wert.
Kraft pro Feder ≈ Deckelgewicht (kg) × L1 × 6 ÷ (Anzahl der Federn × L2). L1 ist der Abstand vom Scharnier zur gegenüberliegenden Deckelkante, L2 der Abstand vom Scharnier zum nächstgelegenen Befestigungspunkt der Feder bei geöffnetem Deckel, beide in mm.
Ein Auge oder eine Gabel sitzt auf einer Schraube oder einem Bolzen: Messen Sie deren Durchmesser. Eine Kugelpfanne wird auf einen Kugelbolzen geklipst: Messen Sie die Kugel.
The meta rows are data-driven: the dealer line ("Available at N stores") reads the
valeryd.dealer_count metafield, and whose count it shows is the market's
call (snippets/dealer-country.liquid). There are three states:
pinned, a market in a dealer country, where the count is server-rendered and the first
card below is forced to SE to show it; fallback, any other market, where the line
renders hidden and <dealer-count> fills it only for a visitor from
a fallback country; and none, where there is no fallback list or the count is zero,
so the line is absent. Without JS or with a failed lookup, only the pinned state shows.
Both stock states side by side, picked from the catalogue: the foot (dealer line, availability) and the button sit at the same y in every card, the title reserves two lines so the price does too.
Valeryd
Auf Lager
How a reg-nr result is split: every part in ONE .easysearch__grid,
grouped by category, so a group opens in the cell after the last one ends. A group is named
once, on its first card (.easysearch__label →
.easysearch__group), by the most specific category it has: the
sub-category, or the top-level category for parts that sit directly on it.
assets/easysearch.js assembles this from the
data-section / data-group attributes the
card grid renders; the markup below is that shape, held still so the label band can be read.
Both cases are here: a group named by its sub-category (two cards, only the first labelled), and one named by its top-level category. Heading levels are set at assembly time, not here — the live page runs h2 → h3 → card title, one step at a time.
snippets/facet-list.liquid — Shopify's native facets as form
controls, with no form of its own: the caller supplies one. The collection page passes
collection.filters, the search page passes
search.filters. A facet offering a single choice is hidden
(it cannot narrow anything), long lists fold behind a no-JS "show more", and the first
few open.
It cannot be rendered here. Shopify populates filters
only on a collection or search template — iterating collections from a
page returns them empty, which is verified, not assumed. See it live on
the product listing or on
a search.
Category: Fahrgestell & Zubehör — list, extras and diagram render
from the same mega_panel metaobject, so numbering cannot drift.
snippets/cart-line.liquid and snippets/cart-set.liquid,
rendered from demo values: both take plain parameters, because Liquid cannot build a line item.
On /cart the section renders the loose lines first, then one set per
distinct private _gs_set key, its lines in part order, and warns when a
set's fittings do not come to one per spring end. Each quantity is named
updates[<line key>]. Remove set submits a form the cart renders
after its own form, so on this page it does nothing.
A loose line, a loose line with a visible property, and one with its image and a variant title (the end-fittings collection's first image, as the fitting demos above use):
A set with a fitting at each end, whose quantities match:
8010-0660-1200 | tube end 6820015 | rod end 6820103 | 719 mm centre to centre | fittings fitted
A set with the same fitting at both ends, one short of two per spring:
8010-0660-1200 | both ends 6820015 | 716 mm centre to centre | fittings fitted
Prüfen Sie die Mengen: Jede Feder braucht einen Anschluss pro Ende.A set whose fittings were taken out of the cart, and whose lines carry no set value (added by hand, not by the finder): the check flags it, no "delivered fitted" note shows, and the group is named by its heading alone:
snippets/regnr-plate.liquid — the plate band at the head of a
reg-no field, drawn as vector so it stays sharp at any size and takes its letters from the
theme font. Which one a visitor sees is the market's call first: on a market in a listed
country the server lights that plate (snippets/regnr-country.liquid).
Elsewhere assets/regnr-country.js lights the visitor's own plate by IP,
but only for a country in the fallback list. Nothing shows for anyone else, or without JS off
a pinned market, because a reg-no lookup only returns anything for registries the backend can reach. Below they are
shown unconditionally, at header, hero and inspection size.
DK is drawn but not offered: nobody has confirmed that Danish plates resolve. SE and NO are the countries currently listed.
A saved reg-nr search (localStorage, assets/trailer-context.js):
<trailer-chip> completes the header plate motif and links to the
trailer's parts; <trailer-fit> confirms fitment on a product when a
SKU matches the saved parts. Both stay hidden without a saved trailer — and without JS.
The demo buttons exercise the real store (they write this browser's localStorage).
trailer-chip — in the search shell (empty until saved)
trailer-filter — the bar a CATEGORY page shows when the saved trailer has parts in it
(assets/trailer-filter.js). Both states, held still: the offer, and
the filter switched on. On its real page the second state also hides the category's count,
sort, facets, grid and pagination — those describe the unfiltered collection — and puts the
fitting parts in their place. The bar renders nothing at all where the trailer has no parts,
which is why it cannot be demonstrated in-situ here.
5 Teile in dieser Kategorie passen zu ABC123
Angezeigt werden die 5 Teile hier, die zu ABC123 passen
trailer-fit — on a product whose SKU is among the saved parts:
snippets/newton-calculator.liquid renders the dialog and nothing
else. The caller owns the opener — any button whose data-newton-open
holds the dialog's id — and names the two inputs the result fills, here the demo fields below.
It is never rendered open on this page: an open scroll-lock dialog
would lock the whole styleguide. Its states are reached from the button: empty on open (no
field has a default); each empty, zero or unreadable field named after Calculate, and a
number of springs above what Springs per lid takes (that input's own max, 6 here); and
the result — 18 kg, 900, 200 and 2 springs give "About 240 N per spring".
Use fills both fields, closes the dialog and returns focus to the force field.
Without JS nothing opens it, so the finder hides its opener and states the rule in words.
Invites a company to become a dealer where the page shows the visitor no dealers: in the buy box (inline) and the footer. It renders hidden and country-gate.js reveals it when ValerydDealer.country() names no country; on a market that pins a dealer country it is not rendered, and with the dealer_join_page setting empty it renders nowhere. Shown here ungated. To see the live gate on a product page, set sessionStorage['valeryd:geo:v1'] = '{"country":"DE","supported":false}' (shown) or '{"country":"SE","supported":true}' (hidden) and reload.
Theme blocks (hero, USP bar, product title/price/buy/description/store-availability, collection filters, EasySearch lookup) carry their own scoped CSS and merchant settings, so they're demonstrated in-situ on their real pages — hero/USP/EasySearch on the home, filters on a collection, the hairline-framed USP bar section below the product page's main section, and the "Complete your purchase" accordion rail (equivalents + curated metafield + "fits your trailer" + native recommendations) at the bottom of a product page — rather than re-rendered here. The product page is one main-product section holding three zones of a single grid: the gallery and the scan-info column (title/tagline/rating/top-3 USPs and the description's first paragraph) on the first row, the deep-dive zone spanning both of those columns on the second (its own Product details heading, then the full description and the accordion trio specifications / manuals & guides / manufacturer information), and a sticky buy box spanning both rows on the right, carrying the price, the personal "fits your trailer" confirmation, and the dealer-availability badge + modal. The scan column's blocks are static, so the block list belongs to the deep-dive zone — the zone a merchant extends. The product-description block runs in two modes — preview up in the scan zone, full down in the deep-dive zone — and the one anchor link joins them: it scrolls to the full copy and lifts its gradient fade via :target, so the whole reveal works with JS disabled and never depends on author CSS un-hiding a closed <details>. This block library covers the reusable snippet components above. One exception the in-situ rule cannot cover: a usp-item carrying a countries value renders openly only on a market whose country it names. Elsewhere it renders hidden, and country-gate.js reveals it only for a visitor from a country it names that is also in the dealer fallback list (SE,NO). With only the EU-26 market active, a German visitor never sees it and a Swedish one does. To inspect the revealed state, set sessionStorage['valeryd:geo:v1'] = '{"country":"SE"}' and reload; to confirm the hidden state actually hides, check the element's geometry rather than its hidden property, since .usp-item sets display and would otherwise paint while reporting itself hidden.