A clear next step.
From a finding in the code to a change your team can review.
Read the completed changeWebsite reference / 01
The style guide for the DS Loop website. A shared starting point for every page, component, and illustration we add.
Explore the foundationsColor study / Ember glass
Orange light, lavender glass, and deep aubergine. Our primary CTA, with the same visual language carried into our reports.
Keep the warm orange at the edge of the gradient. Let purple connect it to the glass, with aubergine doing the quiet work underneath.
#1e0e26#9a74ed#b9a0ff#ff743dThe CTA uses dark aubergine lettering across the gradient. Glass uses a fine bright edge, a translucent fill, and a restrained inner highlight. Keep the color away from severity meanings.
From a finding in the code to a change your team can review.
Read the completed changeInspired by Devloopy’s visual identity. This is our own CSS treatment and palette adaptation. The homepage uses the Ember primary CTA, lilac emphasis, and aubergine supporting surfaces. Generated reports and the website report walkthrough share these foundations. Use .button-ember for primary actions.
01 / Foundations
A quiet, violet-black canvas. Pale text. Ember primary actions. Spectral color belongs to the artwork, where it can carry the story.
Align content to shared rails. Let spacing and hierarchy do the organizing.
Use role-based properties for the interface. Keep decorative color local.
Give illustrations the light and material. Keep reading surfaces calm.
The continuous violet-black canvas.
--paper#080512Panels that sit above the page.
--white#110d20Headings and essential reading.
--ink#f3f0ffDescriptions and supporting labels.
--muted#b1abc4Separators and nonessential frames.
--line#2d2541Edges that need more definition.
--line-strong#776391Links and selected emphasis.
--accent#d1bcffA visible keyboard focus ring.
--focus#dfcbff--ember-action · Aubergine text · Lilac border
Reserve the lilac → purple → orange gradient for the main next step. Hover gently brightens the same gradient. Shared paints live in ember-tokens.css; the component lives in ember.css.
Token names are inherited: --white is a dark surface, not white paint. These swatches consume the live CSS properties. A quiet decorative line is not a substitute for a visible input boundary.
| Property | Value | Role |
|---|---|---|
--deep | #0e091b | Inset surface |
--action-hover | #7b46dc | Action hover |
--surface-hover | #211632 | Surface hover / current navigation |
--code-ground | #151022 | Code block |
--inline-code-ground | #261d38 | Inline code |
--code | #f3f0ff | Code text |
--warm | #efd79b | Technical severity annotation |
--loop-panel | #171027 | Inherited loop panel |
--loop-selected | #382256 | Inherited loop selection |
Inherited loop properties remain for supporting styles; the current glass artwork has local paints. Warm is a severity annotation, not a success color.
02 / Typography
Manrope brings character to headings. System UI keeps longer passages familiar. Monospace identifies code and evidence.
Build shared components, use them in your screens, and write down how they work. Give the next contributor something clear to build on.
Lead 17px · Supporting copy 14px+ · Labels 12px+
Keep paragraphs within 60–70 characters per line.
.panel {
color: var(--ink);
background: var(--white);
border: 1px solid var(--line);
}The homepage hero scales down again below 380px. Small labels inside scaled product illustrations are an exception, not a reading-text size to copy. The sample product UI uses Manrope throughout its own frame.
03 / Layout & shape
Share the outer edges, gutters, and section rhythm. Let the content choose the composition inside them.
The outer frame is capped at 1216px. The columns above illustrate alignment; the site uses content-led CSS grids, not a mandatory 12-column system.
| Viewport | Outer margin | Inner gutter | Section space |
|---|---|---|---|
| Desktop · above 1100px | 64px minimum | 32px | 96px |
| Tablet · 761–1100px | 32px | 24px | 72px |
| Mobile · up to 760px | 8px | 16px | 48px |
4812162432486496Common working intervals, not a strict token scale. Use 8–16px within a group, 24–32px between groups, and the frame’s section spacing between stories.
Header actions use 7px; text actions use 6px. Older guide-page pills are a retained variation, not the starting point for a new homepage component.
Rulers: 8px ticks, 80px numbered intervals, paired square junctions. Show the outer scales at 1200px and above. Keep decoration hidden from assistive technology and clear of interaction.
04 / Shared components
These examples use the website’s existing classes. Try the controls and Tab through them to inspect their focus states.
One clear next step, followed by a quieter supporting link. Use links for navigation and buttons for actions.
<div class="hero-summary">
<div class="actions">
<a class="button button-ember" href="index.html#start">Get started</a>
<a class="text-link" href="index.html#delivery-report">See the fix</a>
</div>
</div>Inside .visual-home. Primary: 8px corners, 12px × 22px padding. Preserve the shared focus ring; do not use color alone to signal an action.
Keep commands and code selectable. Announce copy results without moving focus or opening a dialog.
var(--accent)<code id="token">var(--accent)</code>
<button data-copy="token" hidden>Copy</button>
<p id="token-status" role="status"></p>Wrap the code and button in .restore-command. Load app.js; each example needs a unique ID and matching status element. Copy is revealed only when JavaScript runs.
Keep the question visible. Use a native disclosure for optional explanations, with Enter or Space to expand.
Start with the existing pattern. Add a shared component when the same need recurs; keep one-off illustration details local.
<div class="home-faq">
<div>
<details>
<summary>A useful question</summary>
<p>A direct answer.</p>
</details>
</div>
</div>Works without JavaScript. Keep essential instructions outside closed disclosures.
The wordmark returns home. Navigation stays open and compact. Link labels describe the destination.
<a class="text-link" href="worked-example.html">
Read the completed change
</a>Use aria-current="page" on the current navigation link. Keep SVG arrows decorative with aria-hidden="true". Never turn a whole paragraph into a link.
Scope: these are HTML/CSS patterns, not a packaged component library. Buttons, links, copy feedback, and native disclosures have working examples here. Product-demo fields and cards are illustrations, not ready-to-use website form components.
05 / Illustration & icons
Use transparent glass, shallow perspective, and spectral edges to explain the work. The visual should make the idea easier to understand.
Use the original D/S outline with the full name in the header. The current header renders the mark at 42px. Keep its proportions and spectral fill; use the same SVG for the favicon.




Keep the cyan → blue → lilac → rose → warm-white spectrum inside illustration. Reserve glows and glass for the loop and explanatory objects.
For new UI icons, follow the existing outline convention: 24-unit viewbox, 1.5px stroke, rounded caps. Pair them with labels; give icon-only controls an accessible name.
Website: violet-black surfaces and purple actions. Process artwork: the spectral palette. Sample product UI: warm white and plum inside its own frame. The intentionally inconsistent “before” examples are not style references.
06 / Motion
Motion reveals a relationship or a change. Visitors should be able to understand the page without waiting for a loop or moving a slider.
Begin only when the comparison introduction is visible.
Give the “before” state a moment to register.
Sweep once, leave “after” visible, and offer replay.
Pause playback offscreen and in hidden tabs. Manual input takes over immediately. Keep pause, replay, keyboard controls, and visible focus available. Never move the page or capture scrolling.
Show the completed comparison and assembly immediately. Stop ambient movement and parallax. Keep content readable without JavaScript. The hero background’s three ellipses remain stationary.
The hero’s separate process sequence uses four 6-second stages. The assembly demo reveals four foundations over 5.7 seconds. Timings belong to each demonstration; they are not universal animation tokens.
07 / Using the language
Use this page as the visual reference. Read the relevant CSS and existing markup before adding another style or component.
This is the website’s working reference, not a universal DS Loop theme. New-work guidance reflects this project’s design judgment. The four process sculptures are original generated assets; Manrope is self-hosted under the SIL Open Font License. Asset provenance is recorded in site/assets/README.md. Source ownership and refresh instructions live in the repository’s README and DESIGN.md. The product guide explains how to use DS Loop itself.