Category: Nerdy

  • Reactive SVGs: How to Build Illustrations That Respond to Data Using D3 and UK Open Datasets

    Reactive SVGs: How to Build Illustrations That Respond to Data Using D3 and UK Open Datasets

    Raw data is boring. A spreadsheet of ONS broadband penetration figures or Ofcom spectrum usage statistics is about as gripping as a council planning notice. But bind those same numbers to a living, breathing SVG illustration and suddenly you have something people actually want to look at. That is the promise of reactive SVG data visualisation, and D3.js is the library that makes it properly possible without reaching for a bloated charting framework that hides all the interesting bits from you.

    This article is a hands-on walkthrough. We are going to fetch real UK open data, parse it, and use D3 to bind it to SVG elements so the visuals respond dynamically to the figures. No toy datasets. No made-up numbers. Real data from sources the UK government and regulators actually publish.

    Developer building a reactive SVG data visualisation UK project on a large monitor in a modern studio
    Developer building a reactive SVG data visualisation UK project on a large monitor in a modern studio

    Why SVG and D3 Instead of Canvas or a Chart Library?

    Canvas is fast for pixel-heavy rendering. Chart libraries like Chart.js are quick to deploy. But neither gives you the fine-grained control that reactive SVG data visualisation demands when you want illustrations, not just bar charts. SVG is part of the DOM, which means every shape, path, and text node is queryable, styleable, and animatable with CSS. D3 exploits this completely.

    The data join pattern at D3’s core (enter, update, exit) is genuinely elegant once it clicks. You tell D3 what data you have, what DOM elements should represent it, and what to do when data changes. The library handles the rest. It is declarative in the right places and imperative where you need control. I have used it on projects ranging from tiny inline sparklines to full-screen choropleth maps, and I keep coming back because nothing else gives you the same ceiling.

    Getting Your UK Open Data: ONS and Ofcom

    The Office for National Statistics publishes machine-readable datasets through its ONS API, which returns JSON in a fairly navigable structure. Ofcom releases its Connected Nations datasets as downloadable CSVs covering broadband coverage by local authority district. Both are genuinely free, regularly updated, and ideal for a reactive SVG project.

    For this walkthrough we are using Ofcom’s Connected Nations data: specifically, the percentage of premises with access to gigabit-capable broadband by UK nation and region. It is a flat CSV, which means we can use D3’s built-in d3.csv() loader and avoid writing a custom parser.

    import * as d3 from "https://cdn.jsdelivr.net/npm/d3@7/+esm";
    
    const DATA_URL = "https://your-hosted-copy/ofcom-connected-nations.csv";
    
    d3.csv(DATA_URL, d => ({
      region: d["Region"],
      gigabit_pct: +d["Gigabit capable (%)"],
      premises: +d["Total premises"]
    })).then(data => {
      render(data);
    });

    Note the + coercion on the numeric fields. D3’s CSV parser returns strings by default. Skip that coercion and your scales will treat “84” as text, which produces spectacularly wrong output. Ask me how I know.

    Building the SVG Container and Scales

    The margin convention in D3 is worth following even when it feels ceremonial. It keeps your axes and labels inside the viewport without wrestling with overflow: visible hacks later.

    const margin = { top: 40, right: 30, bottom: 60, left: 120 };
    const width = 800 - margin.left - margin.right;
    const height = 500 - margin.top - margin.bottom;
    
    const svg = d3.select("#chart")
      .append("svg")
      .attr("viewBox", `0 0 ${width + margin.left + margin.right} ${height + margin.top + margin.bottom}`)
      .attr("preserveAspectRatio", "xMidYMid meet")
      .append("g")
      .attr("transform", `translate(${margin.left},${margin.top})`);

    Using viewBox instead of hard-coded pixel dimensions is non-negotiable if you want the illustration to be responsive. The SVG scales itself to the container, and your D3 coordinates stay consistent regardless of screen size. This is how reactive SVG data visualisation actually becomes reactive to viewport changes as well as data changes.

    Close-up of D3.js code powering a reactive SVG data visualisation UK broadband chart on a laptop screen
    Close-up of D3.js code powering a reactive SVG data visualisation UK broadband chart on a laptop screen

    Now the scales. For a horizontal bar chart of regional broadband coverage:

    const x = d3.scaleLinear()
      .domain([0, 100])
      .range([0, width]);
    
    const y = d3.scaleBand()
      .domain(data.map(d => d.region))
      .range([0, height])
      .padding(0.3);

    scaleBand handles the spacing maths for categorical axes so you do not have to. The padding value of 0.3 adds 30% whitespace between bands, which visually separates the bars without making them hair-thin.

    The D3 Data Join: Where the Reactive Magic Happens

    This is the part that confuses people initially and then becomes the thing they explain excitedly to colleagues. The data join binds an array of data objects to a selection of DOM elements. Elements that do not yet exist go into the enter selection. Elements whose data has disappeared go into the exit selection. Everything in between is the update selection.

    const bars = svg.selectAll("rect.bar")
      .data(data, d => d.region); // key function keeps transitions smooth
    
    // Enter: create new bars
    bars.enter()
      .append("rect")
      .attr("class", "bar")
      .attr("y", d => y(d.region))
      .attr("height", y.bandwidth())
      .attr("x", 0)
      .attr("width", 0) // start at zero for transition
      .attr("fill", "#4F46E5")
      .merge(bars) // merge with update selection
      .transition()
      .duration(800)
      .ease(d3.easeCubicOut)
      .attr("width", d => x(d.gigabit_pct));
    
    // Exit: remove stale bars
    bars.exit()
      .transition()
      .duration(400)
      .attr("width", 0)
      .remove();

    The key function in .data(data, d => d.region) is critical for smooth transitions. Without it, D3 matches data to elements by index. With it, elements are bound by region name, so if you filter or reorder the dataset the bars animate to their new positions rather than snapping jarringly.

    Making It Genuinely Reactive: Filtering and UI Controls

    The real payoff of reactive SVG data visualisation comes when you wire up UI controls that change the underlying data and re-call the render function. Add a simple dropdown that filters by UK nation:

    const nations = ["All", "England", "Scotland", "Wales", "Northern Ireland"];
    
    const select = d3.select("#controls")
      .append("select")
      .on("change", function() {
        const selected = this.value;
        const filtered = selected === "All"
          ? fullData
          : fullData.filter(d => d.nation === selected);
        render(filtered);
      });
    
    select.selectAll("option")
      .data(nations)
      .enter()
      .append("option")
      .text(d => d);

    Each time the user changes the dropdown, render(filtered) runs with a new data array. D3 works out which bars need to be added, which need updating, and which need removing. You do not manually manipulate the DOM. That is the whole point.

    Going Beyond Bar Charts: Binding Data to Illustrated SVG Paths

    Bar charts are fine, but the really interesting territory is binding data to custom SVG illustrations, like a stylised map of the UK’s twelve regions, or an illustrated diagram of network infrastructure where path stroke-width encodes bandwidth figures.

    The principle is identical. Load an SVG file (exported from Figma or Illustrator), inline it in your HTML, then use D3 to select specific paths by their id or data-region attributes and drive their visual properties from data. Colour fills from a sequential scale, opacity driven by coverage percentage, stroke animations that pulse for regions below a threshold: all of it is just attribute binding.

    const colour = d3.scaleSequential()
      .domain([0, 100])
      .interpolator(d3.interpolateBlues);
    
    data.forEach(d => {
      d3.select(`#region-${d.region.replace(/\s+/g, "-").toLowerCase()}`)
        .transition()
        .duration(600)
        .attr("fill", colour(d.gigabit_pct));
    });

    This approach turns a static SVG illustration into a living data artefact. Your designer exports a clean regional map from Figma. Your D3 code breathes data into it. The two disciplines talk to each other through attribute naming conventions agreed upfront. It is the kind of collaboration between design and dev that produces genuinely impressive output.

    Performance and Accessibility Notes

    A few things worth pinning to your monitor. First, ARIA labels. SVG is not inherently accessible. Add role="img" and aria-label to your SVG container, and use <title> and <desc> elements inside individual groups for screen readers. The Web Accessibility Initiative has clear guidance on SVG accessibility patterns.

    Second, transitions look great but they are not free. If you are rendering several hundred elements, consider using d3.transition() with a shared timer rather than individual transitions, and cap your dataset size where the visual encoding stops being legible anyway. A choropleth with 400 regions is just noise.

    Third, host your open data files yourself or proxy them. Fetching directly from government data portals in production is fragile; file structures change, URLs break, and there is no SLA. Pull the data into your own infrastructure on a schedule and serve it from there.

    The Bottom Line on D3 and Open Data

    Reactive SVG data visualisation using UK open datasets is one of those projects that teaches you an enormous amount in a short time. You learn D3’s join model. You learn how SVG coordinate systems actually work. You learn that ONS data is more useful than most developers realise. And you produce something genuinely worth showing in a portfolio, because it combines real public information with craft-level visual thinking. That combination is rare, and it shows.

    The Ofcom and ONS datasets are updated regularly, which means a project you build this month stays relevant as new figures land. Wire it up to a scheduled data fetch, add a timestamp to your visualisation, and you have something that essentially maintains itself.

    Frequently Asked Questions

    What is reactive SVG data visualisation and how does it differ from a static chart?

    Reactive SVG data visualisation means your SVG elements update dynamically when the underlying data changes, using a library like D3.js to bind data to DOM attributes in real time. A static chart is a fixed image or pre-rendered output; a reactive one responds to user input, data filters, or live data feeds without a page reload.

    Where can I download free UK open datasets to use with D3.js?

    The Office for National Statistics (ons.gov.uk) and Ofcom both publish machine-readable open datasets covering topics from broadband coverage to regional demographics. The ONS also provides a developer API that returns JSON, and Ofcom’s Connected Nations data is available as downloadable CSV files updated annually.

    Do I need to know D3.js well to build reactive SVG illustrations, or can beginners start here?

    D3’s data join pattern has a learning curve, so some JavaScript confidence is recommended before diving in. That said, the enter/update/exit model is well-documented and once it clicks, building reactive SVG visualisations becomes much more intuitive. Starting with a simple bar chart bound to a CSV is the fastest path to understanding it properly.

    Can I import an SVG illustration from Figma and bind data to it using D3?

    Yes, and this is one of the most powerful workflows available. Export your SVG from Figma, inline it in your HTML, and give key paths meaningful IDs or data attributes. D3 can then select those paths and drive their fill, opacity, stroke, or transform properties directly from your dataset.

    How do I make D3 SVG visualisations accessible for screen readers?

    Add role=”img” and an aria-label to the SVG container, and include a element as the first child of the SVG for a short description. For more complex visuals, a <desc> element and aria-describedby attribute provide additional context. Avoid encoding critical information solely through colour, and ensure interactive elements are keyboard-navigable.</p> <p><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "What is reactive SVG data visualisation and how does it differ from a static chart?", "acceptedAnswer": { "@type": "Answer", "text": "Reactive SVG data visualisation means your SVG elements update dynamically when the underlying data changes, using a library like D3.js to bind data to DOM attributes in real time. A static chart is a fixed image or pre-rendered output; a reactive one responds to user input, data filters, or live data feeds without a page reload." } }, { "@type": "Question", "name": "Where can I download free UK open datasets to use with D3.js?", "acceptedAnswer": { "@type": "Answer", "text": "The Office for National Statistics (ons.gov.uk) and Ofcom both publish machine-readable open datasets covering topics from broadband coverage to regional demographics. The ONS also provides a developer API that returns JSON, and Ofcom's Connected Nations data is available as downloadable CSV files updated annually." } }, { "@type": "Question", "name": "Do I need to know D3.js well to build reactive SVG illustrations, or can beginners start here?", "acceptedAnswer": { "@type": "Answer", "text": "D3's data join pattern has a learning curve, so some JavaScript confidence is recommended before diving in. That said, the enter/update/exit model is well-documented and once it clicks, building reactive SVG visualisations becomes much more intuitive. Starting with a simple bar chart bound to a CSV is the fastest path to understanding it properly." } }, { "@type": "Question", "name": "Can I import an SVG illustration from Figma and bind data to it using D3?", "acceptedAnswer": { "@type": "Answer", "text": "Yes, and this is one of the most powerful workflows available. Export your SVG from Figma, inline it in your HTML, and give key paths meaningful IDs or data attributes. D3 can then select those paths and drive their fill, opacity, stroke, or transform properties directly from your dataset." } }, { "@type": "Question", "name": "How do I make D3 SVG visualisations accessible for screen readers?", "acceptedAnswer": { "@type": "Answer", "text": "Add role=\"img\" and an aria-label to the SVG container, and include a element as the first child of the SVG for a short description. For more complex visuals, a element and aria-describedby attribute provide additional context. Avoid encoding critical information solely through colour, and ensure interactive elements are keyboard-navigable." } } ] } </script></p> </div> <div style="margin-top:var(--wp--preset--spacing--40)" class="wp-block-post-date has-small-font-size"><a href="https://launchpad-design.co.uk/reactive-svg-data-visualisation-uk-d3-open-data/"><time datetime="2026-07-23T21:03:20+00:00">July 23, 2026</time></a></div></div> </li><li class="wp-block-post post-198 post type-post status-publish format-standard has-post-thumbnail hentry category-design category-nerdy category-web-design tag-fca-consumer-duty-design tag-financial-promotion-rules-ui tag-fintech-ux-design-compliance tag-regulatory-ux-design tag-uk-fintech-product-design"> <div class="wp-block-group alignfull is-layout-flow wp-block-group-is-layout-flow" style="padding-top:var(--wp--preset--spacing--60);padding-bottom:var(--wp--preset--spacing--60)"><figure style="aspect-ratio:3/2" class="wp-block-post-featured-image"><a href="https://launchpad-design.co.uk/designing-fintech-interfaces-fca-regulatory-compliance-uk/" target="_self" ><img width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/07/product-designer-reviewing-fintech-ux-design-compliance-on-m-1.png" class="attachment-full size-full wp-post-image" alt="Designing Fintech Interfaces for UK Regulatory Compliance: FCA Rules Every Product Designer Should Know" style="width:100%;height:100%;object-fit:cover;" decoding="async" loading="lazy" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/07/product-designer-reviewing-fintech-ux-design-compliance-on-m-1.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/07/product-designer-reviewing-fintech-ux-design-compliance-on-m-1-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/07/product-designer-reviewing-fintech-ux-design-compliance-on-m-1-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/07/product-designer-reviewing-fintech-ux-design-compliance-on-m-1-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure> <h2 class="wp-block-post-title has-x-large-font-size"><a href="https://launchpad-design.co.uk/designing-fintech-interfaces-fca-regulatory-compliance-uk/" target="_self" >Designing Fintech Interfaces for UK Regulatory Compliance: FCA Rules Every Product Designer Should Know</a></h2> <div class="entry-content alignfull wp-block-post-content has-medium-font-size is-layout-flow wp-block-post-content-is-layout-flow"><p>There is a version of product design that lives entirely in the aesthetic layer: beautiful gradients, satisfying micro-interactions, typography that makes you feel something. And then there is fintech UX design compliance, which lives in a much more interesting (and considerably more stressful) neighbourhood. In the UK, the Financial Conduct Authority has made it very clear that how you design a financial product is no longer a purely creative decision. It is a regulated one.</p> <p>The FCA’s Consumer Duty rules, which came into full force in 2023 and have been actively enforced since, essentially bake good UX into law. If your interface obscures fees, buries risk warnings, or nudges users towards products that are not in their best interests, that is not just a design flaw. That is a compliance failure. For product designers working on UK fintech products in 2026, understanding this regulatory context is not optional. It is part of the job description.</p> <figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/07/product-designer-reviewing-fintech-ux-design-compliance-on-m-1.png" alt="Product designer reviewing fintech UX design compliance on mobile interface screens in a London office" class="wp-image-196" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/07/product-designer-reviewing-fintech-ux-design-compliance-on-m-1.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/07/product-designer-reviewing-fintech-ux-design-compliance-on-m-1-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/07/product-designer-reviewing-fintech-ux-design-compliance-on-m-1-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/07/product-designer-reviewing-fintech-ux-design-compliance-on-m-1-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Product designer reviewing fintech UX design compliance on mobile interface screens in a London office</figcaption></figure> <h2>What the FCA Consumer Duty Actually Means for UX Designers</h2> <p>The FCA’s Consumer Duty framework introduced four outcome areas that financial firms must demonstrate: products and services, price and value, consumer understanding, and consumer support. Each of those maps directly onto design decisions. Consumer understanding, in particular, is where the design team lives.</p> <p>The FCA is explicit that firms must ensure communications are <em>understood</em>, not merely <em>provided</em>. That is a significant shift. It means a modal dialogue crammed with 800 words of legal copy does not discharge your regulatory obligation. It just creates evidence that you tried and failed. The regulator expects firms to test comprehension, iterate on clarity, and document the process. If you want to read the full framework, the <a href="https://www.fca.org.uk/firms/consumer-duty" target="_blank" rel="noopener noreferrer">FCA’s Consumer Duty guidance</a> is dense but worth the effort.</p> <p>For designers, this translates into some very concrete constraints. Risk warnings must be legible at the point of decision, not buried in a footer. Fee structures must be presented before a user commits, not revealed in an email receipt. And nudge patterns that steer users towards higher-margin products must be demonstrably in the customer’s interest, not just the firm’s.</p> <h2>Financial Promotion Rules and What They Mean for UI Copy</h2> <p>Separate from Consumer Duty but equally relevant is the FCA’s financial promotions regime. Any communication that is an invitation or inducement to engage in financial activity must be fair, clear, and not misleading. That includes the copy on your onboarding screens, your push notifications, and yes, even those little celebratory animations when a user hits a savings goal.</p> <p>The practical implication for fintech UX design compliance is that your content design team and your legal team need to be in the same room, or at minimum the same Figma file. Headlines like “Earn 5% on your savings” need qualification. Risk warnings on investment products need to meet the FCA’s prescribed prominence rules, which specify minimum font sizes and contrast ratios relative to surrounding promotional content.</p> <p>This is where fintech diverges sharply from other product verticals. A consumer app selling gym memberships can lean on persuasion patterns freely. A trading app cannot use the same playbook without risking enforcement action.</p> <figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/07/close-up-of-smartphone-showing-fintech-ux-design-compliance-2.png" alt="Close-up of smartphone showing fintech UX design compliance warning text in a banking app interface" class="wp-image-197" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/07/close-up-of-smartphone-showing-fintech-ux-design-compliance-2.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/07/close-up-of-smartphone-showing-fintech-ux-design-compliance-2-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/07/close-up-of-smartphone-showing-fintech-ux-design-compliance-2-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/07/close-up-of-smartphone-showing-fintech-ux-design-compliance-2-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Close-up of smartphone showing fintech UX design compliance warning text in a banking app interface</figcaption></figure> <h2>How Monzo, Starling, and Revolut Handle This in Practice</h2> <p>The three most prominent UK challenger banks handle compliance UX in noticeably different ways, and studying their approaches is genuinely instructive.</p> <p>Monzo has long been the posterchild for plain-English financial communication. Their overdraft flow, for example, presents the daily fee in pence before a user activates the facility, shown in a large, unambiguous numeral rather than buried in a percentage APR calculation. They also use a colour system that clearly distinguishes between informational states and warning states, making it harder to accidentally miss a risk notice. This is not accidental; it reflects deliberate fintech UX design compliance thinking embedded in their design system.</p> <p>Starling takes a slightly more clinical approach. Their investment and savings product flows use a stepped disclosure model: each screen introduces one concept, confirms understanding, then advances. It is slower, and some users find it friction-heavy, but from a regulatory standpoint it creates a clear audit trail of informed consent. Starling also applies consistent typographic hierarchy to risk warnings, using the same visual weight as primary action copy rather than relegating warnings to a smaller grey typeface beneath the CTA.</p> <p>Revolut’s approach is more interesting to scrutinise, particularly in their crypto and stock trading features. Their disclaimers appear in full before a first trade and are summarised inline on repeat visits. This progressive disclosure model threads a needle between regulatory obligation and user experience, avoiding the pattern of warning fatigue whilst still meeting FCA prominence requirements. It is clever, though it has drawn some attention from the regulator on specific product categories in the past.</p> <h2>Dark Patterns Are Specifically on the FCA’s Radar</h2> <p>The FCA published guidance in 2024 explicitly calling out dark patterns in financial services interfaces. Pre-ticked consent boxes, hard-to-cancel subscriptions, and confirmshaming language on opt-out screens are all cited as potential Consumer Duty breaches. The regulator’s definition of a dark pattern in this context is broadly consistent with the European Data Protection Board’s definition but applied through a financial harm lens.</p> <p>For product designers, this means doing a proper dark pattern audit is no longer just an ethical nicety. It is a compliance audit. Tools like the Deceptive Design Pattern Checker can help at the component level, but the real work is in user journey mapping with the question: does this flow serve the user’s financial interests, or ours?</p> <p>Interestingly, this regulatory pressure is pushing fintech firms towards something that resembles good business ethics anyway. Firms building a genuine <a href="https://www.r2g.co.uk/insights/does-having-a-sustainability-strategy-improve-revenue/" rel="noopener">sustainability strategy</a> around long-term customer relationships tend to find that FCA-compliant UX and commercially successful UX are not actually in tension; customers who feel respected and informed tend to stay and spend more.</p> <h2>Building Compliance Into Your Design System From Day One</h2> <p>The most common mistake I see in fintech product teams is treating regulatory compliance as a final-stage review process. Legal checks the screens before launch, red-lines three things, the designers groan, and everyone ships something that satisfies neither the regulator nor the user.</p> <p>The smarter approach is to build compliance tokens directly into your design system. Create a dedicated risk-disclosure text style with the correct contrast ratio and minimum size baked in. Build a standard warning component that cannot be resized below the FCA’s prominence threshold. Define a colour token specifically for financial risk states that sits outside your brand palette so it cannot be overridden by a well-meaning designer chasing aesthetic consistency.</p> <p>Document your rationale. The FCA increasingly expects firms to evidence that their design decisions were made with consumer outcomes in mind. A Figma annotation or a brief design decision record noting “risk warning meets FCA prominence guidelines” is not bureaucratic overhead. It is a defensible paper trail.</p> <p>Fintech UX design compliance is one of the few areas where being a nerd about the rules genuinely pays off. The designers who understand the regulatory layer, who can read an FCA policy statement and translate it into component-level decisions, are the ones building products that can actually survive a supervisory review. And in 2026, with Consumer Duty enforcement moving into its active monitoring phase, that is a skill worth having.</p> <h2>Frequently Asked Questions</h2> <h3>What is FCA Consumer Duty and how does it affect UX design?</h3> <p>The FCA’s Consumer Duty framework requires financial firms to demonstrate that their products deliver good outcomes for customers, including in the area of consumer understanding. For UX designers, this means interfaces must present fees, risks, and terms clearly and comprehensibly, not just make them technically available. Poor information hierarchy or deliberate obscuration can constitute a compliance failure.</p> <h3>Do risk warnings need to meet specific visual design requirements under FCA rules?</h3> <p>Yes. FCA financial promotion rules specify that risk warnings must be given appropriate prominence relative to the promotional content they accompany. In practice, this means risk copy must not be significantly smaller, lower-contrast, or less visually weighted than the positive claim it qualifies. Designers should treat this as a component-level constraint built into their design system.</p> <h3>Are dark patterns in fintech interfaces illegal in the UK?</h3> <p>Not automatically illegal, but the FCA has explicitly identified dark patterns as potential breaches of Consumer Duty, which carries significant regulatory consequences including fines and enforcement action. Pre-ticked boxes, hidden cancellation flows, and manipulative opt-out language are specifically flagged in FCA guidance published in 2024.</p> <h3>How do Monzo and Starling differ in their approach to regulatory UX compliance?</h3> <p>Monzo tends to use plain-English, single-figure fee presentations at key decision points, with a clear visual distinction between informational and warning states. Starling uses a stepped disclosure model that introduces one concept per screen, creating a clearer audit trail of informed consent. Both approaches are designed to satisfy Consumer Duty’s consumer understanding outcome.</p> <h3>Should product designers in fintech be involved in legal and compliance reviews?</h3> <p>Absolutely, and increasingly this is expected rather than optional. The FCA wants firms to evidence that design decisions were made with consumer outcomes in mind, which means designers need to understand the regulatory rationale behind copy and interface constraints, not just receive red-lined screen notes from legal. Building compliance into design systems from the start is significantly more efficient than retrospective review.</p> <p><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "What is FCA Consumer Duty and how does it affect UX design?", "acceptedAnswer": { "@type": "Answer", "text": "The FCA's Consumer Duty framework requires financial firms to demonstrate that their products deliver good outcomes for customers, including in the area of consumer understanding. For UX designers, this means interfaces must present fees, risks, and terms clearly and comprehensibly, not just make them technically available. Poor information hierarchy or deliberate obscuration can constitute a compliance failure." } }, { "@type": "Question", "name": "Do risk warnings need to meet specific visual design requirements under FCA rules?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. FCA financial promotion rules specify that risk warnings must be given appropriate prominence relative to the promotional content they accompany. In practice, this means risk copy must not be significantly smaller, lower-contrast, or less visually weighted than the positive claim it qualifies. Designers should treat this as a component-level constraint built into their design system." } }, { "@type": "Question", "name": "Are dark patterns in fintech interfaces illegal in the UK?", "acceptedAnswer": { "@type": "Answer", "text": "Not automatically illegal, but the FCA has explicitly identified dark patterns as potential breaches of Consumer Duty, which carries significant regulatory consequences including fines and enforcement action. Pre-ticked boxes, hidden cancellation flows, and manipulative opt-out language are specifically flagged in FCA guidance published in 2024." } }, { "@type": "Question", "name": "How do Monzo and Starling differ in their approach to regulatory UX compliance?", "acceptedAnswer": { "@type": "Answer", "text": "Monzo tends to use plain-English, single-figure fee presentations at key decision points, with a clear visual distinction between informational and warning states. Starling uses a stepped disclosure model that introduces one concept per screen, creating a clearer audit trail of informed consent. Both approaches are designed to satisfy Consumer Duty's consumer understanding outcome." } }, { "@type": "Question", "name": "Should product designers in fintech be involved in legal and compliance reviews?", "acceptedAnswer": { "@type": "Answer", "text": "Absolutely, and increasingly this is expected rather than optional. The FCA wants firms to evidence that design decisions were made with consumer outcomes in mind, which means designers need to understand the regulatory rationale behind copy and interface constraints, not just receive red-lined screen notes from legal. Building compliance into design systems from the start is significantly more efficient than retrospective review." } } ] } </script></p> </div> <div style="margin-top:var(--wp--preset--spacing--40)" class="wp-block-post-date has-small-font-size"><a href="https://launchpad-design.co.uk/designing-fintech-interfaces-fca-regulatory-compliance-uk/"><time datetime="2026-07-17T09:43:56+00:00">July 17, 2026</time></a></div></div> </li><li class="wp-block-post post-186 post type-post status-publish format-standard has-post-thumbnail hentry category-coding category-design category-nerdy tag-batch-image-processing tag-colour-palette-extraction tag-design-automation-python tag-graphic-design-coding tag-python-scripts-for-graphic-designers"> <div class="wp-block-group alignfull is-layout-flow wp-block-group-is-layout-flow" style="padding-top:var(--wp--preset--spacing--60);padding-bottom:var(--wp--preset--spacing--60)"><figure style="aspect-ratio:3/2" class="wp-block-post-featured-image"><a href="https://launchpad-design.co.uk/python-scripts-for-graphic-designers/" target="_self" ><img width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/06/graphic-designer-using-python-scripts-for-graphic-designers-1.png" class="attachment-full size-full wp-post-image" alt="10 Python Scripts Every Graphic Designer Should Have in Their Toolkit" style="width:100%;height:100%;object-fit:cover;" decoding="async" loading="lazy" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/06/graphic-designer-using-python-scripts-for-graphic-designers-1.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/graphic-designer-using-python-scripts-for-graphic-designers-1-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/graphic-designer-using-python-scripts-for-graphic-designers-1-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/graphic-designer-using-python-scripts-for-graphic-designers-1-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure> <h2 class="wp-block-post-title has-x-large-font-size"><a href="https://launchpad-design.co.uk/python-scripts-for-graphic-designers/" target="_self" >10 Python Scripts Every Graphic Designer Should Have in Their Toolkit</a></h2> <div class="entry-content alignfull wp-block-post-content has-medium-font-size is-layout-flow wp-block-post-content-is-layout-flow"><p>Graphic design is creative work. Renaming 400 exported assets at midnight is not. If you have ever spent a Tuesday afternoon manually resizing the same logo to seventeen different dimensions, or digging through a folder of files named <code>final_FINAL_v3_USE_THIS.png</code>, this guide is for you. Python scripts for graphic designers are not some mythical developer territory. They are small, learnable, genuinely useful tools that will hand you back hours of your week.</p> <p>You do not need to be a software engineer. You need about an afternoon, Python installed on your machine, and a willingness to feel briefly confused before something clicks beautifully into place.</p> <figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/06/graphic-designer-using-python-scripts-for-graphic-designers-1.png" alt="Graphic designer using Python scripts for graphic designers on a MacBook in a modern studio" class="wp-image-184" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/06/graphic-designer-using-python-scripts-for-graphic-designers-1.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/graphic-designer-using-python-scripts-for-graphic-designers-1-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/graphic-designer-using-python-scripts-for-graphic-designers-1-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/graphic-designer-using-python-scripts-for-graphic-designers-1-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Graphic designer using Python scripts for graphic designers on a MacBook in a modern studio</figcaption></figure> <h2>Why Python Is Perfect for Design Automation</h2> <p>Python reads almost like English, which matters when you are a designer who has never touched a terminal before. It also has a library called <a href="https://python-imaging-library.readthedocs.io/" rel="noopener noreferrer">Pillow</a> (the maintained fork of the old PIL image library) that makes image manipulation genuinely straightforward. Add <code>colorthief</code> for palette extraction, <code>os</code> for file system work, and <code>pathlib</code> for cleaner path handling, and you have a proper little automation toolkit. According to the <a href="https://www.bbc.co.uk/news/technology-64669291" rel="noopener noreferrer">BBC’s coverage of the tech skills gap in the UK</a>, Python consistently ranks as one of the most in-demand skills across creative and technical roles alike. Designers who can script are suddenly very employable.</p> <p>All the scripts below are beginner-friendly. Each one does one job, does it well, and is short enough that you can actually read it and understand what is happening.</p> <h2>Setting Up: Install Python and the Libraries You Need</h2> <p>Head to <a href="https://www.python.org/downloads/" rel="noopener noreferrer">python.org</a> and grab the latest stable release. Once installed, open your terminal and run:</p> <pre><code>pip install Pillow colorthief</code></pre> <p>That handles the imaging heavy lifting. Everything else uses Python’s standard library, which comes pre-installed. Now, on to the good stuff.</p> <h2>1. Batch Resize Images to Multiple Dimensions</h2> <p>This is the one that pays for itself immediately. Drop all your source files into a folder, run the script, and get back a set of resized exports without touching a single slider.</p> <pre><code>from PIL import Image import os sizes = [(1920, 1080), (1280, 720), (800, 600), (400, 300)] input_folder = "source_images" output_folder = "resized_exports" os.makedirs(output_folder, exist_ok=True) for filename in os.listdir(input_folder): if filename.lower().endswith((".jpg", ".jpeg", ".png")): img = Image.open(os.path.join(input_folder, filename)) for width, height in sizes: resized = img.resize((width, height), Image.LANCZOS) name, ext = os.path.splitext(filename) resized.save(os.path.join(output_folder, f"{name}_{width}x{height}{ext}")) print(f"Processed: {filename}") </code></pre> <p><code>LANCZOS</code> is the resampling filter that gives you the sharpest results. Worth knowing.</p> <h2>2. Extract a Colour Palette from Any Image</h2> <p>Colour palette extraction is genuinely magical the first time you run it. Point this script at a photograph or brand asset and it pulls out the dominant colours as hex values, ready to paste into Figma or your CSS variables.</p> <pre><code>from colorthief import ColorThief def get_palette(image_path, colour_count=6): ct = ColorThief(image_path) palette = ct.get_palette(color_count=colour_count) hex_colours = ["#{:02x}{:02x}{:02x}".format(r, g, b) for r, g, b in palette] print(f"Palette for {image_path}:") for colour in hex_colours: print(colour) get_palette("your_image.jpg") </code></pre> <p>Run this on a client’s product photography before a branding session and walk in looking extremely prepared.</p> <figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/06/python-scripts-for-graphic-designers-showing-colour-palette-2.png" alt="Python scripts for graphic designers showing colour palette extraction code on screen" class="wp-image-185" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/06/python-scripts-for-graphic-designers-showing-colour-palette-2.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/python-scripts-for-graphic-designers-showing-colour-palette-2-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/python-scripts-for-graphic-designers-showing-colour-palette-2-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/python-scripts-for-graphic-designers-showing-colour-palette-2-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Python scripts for graphic designers showing colour palette extraction code on screen</figcaption></figure> <h2>3. Bulk Rename Files With a Sensible Convention</h2> <p>The dark art of file naming. This script renames every image in a folder using a clean prefix and sequential numbering, which is the sort of thing that makes a project folder look professional and stops your client forwarding you <code>untitled-1-copy-2.png</code> at 11pm.</p> <pre><code>import os from pathlib import Path folder = Path("design_assets") prefix = "brand_asset" files = sorted([f for f in folder.iterdir() if f.suffix in [".png", ".jpg", ".svg"]]) for i, file in enumerate(files, start=1): new_name = f"{prefix}_{i:03d}{file.suffix}" file.rename(folder / new_name) print(f"{file.name} -> {new_name}") </code></pre> <p>The <code>:03d</code> format means your files go <code>001</code>, <code>002</code>, not <code>1</code>, <code>2</code>, so they sort correctly in every file manager known to humanity.</p> <h2>4. Convert PNG Files to WebP in Bulk</h2> <p>WebP files are significantly smaller than PNGs without a meaningful quality hit, which matters for web performance. This script batch converts an entire folder.</p> <pre><code>from PIL import Image import os input_folder = "png_assets" output_folder = "webp_exports" os.makedirs(output_folder, exist_ok=True) for filename in os.listdir(input_folder): if filename.lower().endswith(".png"): img = Image.open(os.path.join(input_folder, filename)) name = os.path.splitext(filename)[0] img.save(os.path.join(output_folder, f"{name}.webp"), "webp", quality=85) print(f"Converted: {filename}") </code></pre> <h2>5. Add a Watermark to Every Image in a Folder</h2> <p>Client proofing just became semi-automated. This script pastes a semi-transparent watermark PNG over every image in a folder and saves the results separately, so your originals remain untouched.</p> <pre><code>from PIL import Image import os watermark = Image.open("watermark.png").convert("RGBA") input_folder = "proofs_source" output_folder = "proofs_watermarked" os.makedirs(output_folder, exist_ok=True) for filename in os.listdir(input_folder): if filename.lower().endswith((".jpg", ".png")): base = Image.open(os.path.join(input_folder, filename)).convert("RGBA") wm_resized = watermark.resize((base.width // 3, base.height // 3)) position = (base.width - wm_resized.width - 20, base.height - wm_resized.height - 20) base.paste(wm_resized, position, wm_resized) base.convert("RGB").save(os.path.join(output_folder, filename)) print(f"Watermarked: {filename}") </code></pre> <h2>6. Generate Consistent Social Media Export Sizes</h2> <p>Every platform wants a slightly different crop. Rather than doing this by hand in Photoshop for every campaign, define your sizes once and let Python handle the rest.</p> <pre><code>from PIL import Image import os social_sizes = { "instagram_square": (1080, 1080), "instagram_story": (1080, 1920), "linkedin_banner": (1584, 396), "twitter_header": (1500, 500), } image_path = "campaign_master.jpg" img = Image.open(image_path) base_name = os.path.splitext(image_path)[0] for label, (w, h) in social_sizes.items(): resized = img.resize((w, h), Image.LANCZOS) resized.save(f"{base_name}_{label}.jpg") print(f"Saved: {label}") </code></pre> <h2>7. Strip EXIF Data Before Sending Files to Clients</h2> <p>EXIF metadata in photographs can contain GPS coordinates, camera model, original file paths, and other information you probably do not want attached to client deliverables. This is a one-liner wrapped in a function.</p> <pre><code>from PIL import Image import os def strip_exif(input_path, output_path): img = Image.open(input_path) clean = Image.new(img.mode, img.size) clean.putdata(list(img.getdata())) clean.save(output_path) print(f"Clean copy saved: {output_path}") strip_exif("photo_with_metadata.jpg", "photo_clean.jpg") </code></pre> <h2>8. Auto-Generate Thumbnail Previews</h2> <p>Drop all your large master files into a folder and get a <code>thumbs</code> subfolder of 200px previews, useful for project documentation or quick client reviews.</p> <pre><code>from PIL import Image import os folder = "master_assets" thumb_folder = os.path.join(folder, "thumbs") os.makedirs(thumb_folder, exist_ok=True) for filename in os.listdir(folder): if filename.lower().endswith((".jpg", ".png")): img = Image.open(os.path.join(folder, filename)) img.thumbnail((200, 200)) img.save(os.path.join(thumb_folder, filename)) print(f"Thumb: {filename}") </code></pre> <p>Note that <code>thumbnail()</code> preserves aspect ratio, unlike <code>resize()</code>. Handy distinction to know.</p> <h2>9. Check Images Meet Minimum Resolution Requirements</h2> <p>Before sending a batch off to print, run this to flag anything under your minimum resolution. Saves the awkward conversation with the print house.</p> <pre><code>from PIL import Image import os min_width = 2480 min_height = 3508 # A4 at 300dpi folder = "print_ready" for filename in os.listdir(folder): if filename.lower().endswith((".jpg", ".png")): img = Image.open(os.path.join(folder, filename)) w, h = img.size if w < min_width or h < min_height: print(f"WARNING - Too small: {filename} ({w}x{h})") else: print(f"OK: {filename} ({w}x{h})") </code></pre> <h2>10. Build a Colour Palette HTML Swatch Sheet</h2> <p>Extract a palette and immediately generate an HTML file showing the swatches, which you can drop straight into a client presentation or design brief document. This is the one that impresses people.</p> <pre><code>from colorthief import ColorThief def generate_swatch_html(image_path, output_html="swatches.html", count=8): ct = ColorThief(image_path) palette = ct.get_palette(color_count=count) hex_list = ["#{:02x}{:02x}{:02x}".format(r, g, b) for r, g, b in palette] swatches = "".join( f'<div style="background:{c};width:100px;height:100px;display:inline-block;margin:5px;" title="{c}"></div>' for c in hex_list ) html = f"<html><body><h2>Colour Palette</h2>{swatches}</body></html>" with open(output_html, "w") as f: f.write(html) print(f"Swatch sheet saved: {output_html}") generate_swatch_html("brand_photo.jpg") </code></pre> <h2>Where to Go Next With Python Scripts for Graphic Designers</h2> <p>These ten scripts are the gateway. Once they feel comfortable, look into <code>watchdog</code> for scripts that trigger automatically when files land in a folder, and <code>reportlab</code> for generating PDFs programmatically. If you want structured learning, the <a href="https://www.gov.uk/guidance/digital-and-technology-professional-competency-framework" rel="noopener noreferrer">UK Government Digital Service competency framework</a> includes scripting and automation as valued technical skills across digital roles, which tells you something about where this is all heading.</p> <p>The bigger point is this: repetitive tasks are not part of your job description. They are friction. Python scripts for graphic designers exist specifically to remove that friction, and the learning curve is genuinely shallower than most designers expect. Ten scripts, one afternoon, and suddenly your workflow is a different creature entirely.</p> <h2>Frequently Asked Questions</h2> <h3>Do I need to know how to code to use Python scripts for graphic design tasks?</h3> <p>Not really. The scripts in this guide are written to be readable even if you have never coded before. Start by copy-pasting and running them as-is, then gradually tweak the folder names and settings to match your workflow. That is how most designers get started.</p> <h3>What Python libraries do I need for image automation?</h3> <p>Pillow is the essential one, handling resizing, format conversion, watermarking, and thumbnail generation. For colour palette extraction, add colorthief. Both install in seconds with pip and are well-documented with active communities.</p> <h3>Will these scripts work on a Mac and Windows?</h3> <p>Yes. Python and Pillow run on both platforms without modification. The file paths in the scripts use Python's os and pathlib modules, which handle the differences between operating systems automatically.</p> <h3>How long does it take to batch resize 500 images with Python?</h3> <p>Typically under a minute for 500 standard JPEG or PNG files, depending on the output sizes and your machine's specs. Compared to doing it manually in Photoshop or Affinity Photo, it is essentially instant.</p> <h3>Can I automate Figma or Adobe tasks with Python?</h3> <p>Figma has a REST API that Python can talk to, so yes, things like exporting frames or reading file data are possible. Adobe's Creative Cloud apps support scripting via their own tools, though Python integration there is less direct. For file-level work like the scripts in this guide, Python works independently of any design app.</p> <p><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "Do I need to know how to code to use Python scripts for graphic design tasks?", "acceptedAnswer": { "@type": "Answer", "text": "Not really. The scripts in this guide are written to be readable even if you have never coded before. Start by copy-pasting and running them as-is, then gradually tweak the folder names and settings to match your workflow. That is how most designers get started." } }, { "@type": "Question", "name": "What Python libraries do I need for image automation?", "acceptedAnswer": { "@type": "Answer", "text": "Pillow is the essential one, handling resizing, format conversion, watermarking, and thumbnail generation. For colour palette extraction, add colorthief. Both install in seconds with pip and are well-documented with active communities." } }, { "@type": "Question", "name": "Will these scripts work on a Mac and Windows?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. Python and Pillow run on both platforms without modification. The file paths in the scripts use Python's os and pathlib modules, which handle the differences between operating systems automatically." } }, { "@type": "Question", "name": "How long does it take to batch resize 500 images with Python?", "acceptedAnswer": { "@type": "Answer", "text": "Typically under a minute for 500 standard JPEG or PNG files, depending on the output sizes and your machine's specs. Compared to doing it manually in Photoshop or Affinity Photo, it is essentially instant." } }, { "@type": "Question", "name": "Can I automate Figma or Adobe tasks with Python?", "acceptedAnswer": { "@type": "Answer", "text": "Figma has a REST API that Python can talk to, so yes, things like exporting frames or reading file data are possible. Adobe's Creative Cloud apps support scripting via their own tools, though Python integration there is less direct. For file-level work like the scripts in this guide, Python works independently of any design app." } } ] } </script></p> </div> <div style="margin-top:var(--wp--preset--spacing--40)" class="wp-block-post-date has-small-font-size"><a href="https://launchpad-design.co.uk/python-scripts-for-graphic-designers/"><time datetime="2026-06-30T07:26:12+00:00">June 30, 2026</time></a></div></div> </li><li class="wp-block-post post-177 post type-post status-publish format-standard has-post-thumbnail hentry category-design category-nerdy category-tech-stuff tag-mixed-reality-ui-design tag-spatial-design-for-ui-designers tag-visionos-design-principles tag-volumetric-design-skills tag-xr-interface-design"> <div class="wp-block-group alignfull is-layout-flow wp-block-group-is-layout-flow" style="padding-top:var(--wp--preset--spacing--60);padding-bottom:var(--wp--preset--spacing--60)"><figure style="aspect-ratio:3/2" class="wp-block-post-featured-image"><a href="https://launchpad-design.co.uk/spatial-design-for-ui-designers-mixed-reality/" target="_self" ><img width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/06/designer-using-a-mixed-reality-headset-to-explore-spatial-de-1.png" class="attachment-full size-full wp-post-image" alt="Spatial Design for UI Designers: How to Adapt Your Skills for Mixed Reality" style="width:100%;height:100%;object-fit:cover;" decoding="async" loading="lazy" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/06/designer-using-a-mixed-reality-headset-to-explore-spatial-de-1.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/designer-using-a-mixed-reality-headset-to-explore-spatial-de-1-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/designer-using-a-mixed-reality-headset-to-explore-spatial-de-1-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/designer-using-a-mixed-reality-headset-to-explore-spatial-de-1-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure> <h2 class="wp-block-post-title has-x-large-font-size"><a href="https://launchpad-design.co.uk/spatial-design-for-ui-designers-mixed-reality/" target="_self" >Spatial Design for UI Designers: How to Adapt Your Skills for Mixed Reality</a></h2> <div class="entry-content alignfull wp-block-post-content has-medium-font-size is-layout-flow wp-block-post-content-is-layout-flow"><p>Right, so the headsets are no longer just a tech demo at trade shows. Apple’s Vision Pro has been in people’s living rooms, Meta Quest 3 is being handed out at Christmas, and developers across the UK are quietly panicking because their entire skill set is built around a flat rectangle. If you’ve spent years perfecting pixel-perfect layouts on 1440p screens, the shift to volumetric, three-dimensional interface design feels like someone changed the rules mid-game. Which, to be fair, they have.</p> <p>Spatial design for UI designers isn’t some distant futurism anymore. It’s a present-tense career skill. And the good news is that your existing knowledge doesn’t get binned. It gets extended, sometimes stretched uncomfortably, but extended nonetheless.</p> <figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/06/designer-using-a-mixed-reality-headset-to-explore-spatial-de-1.png" alt="Designer using a mixed reality headset to explore spatial design for UI designers in a London studio" class="wp-image-175" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/06/designer-using-a-mixed-reality-headset-to-explore-spatial-de-1.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/designer-using-a-mixed-reality-headset-to-explore-spatial-de-1-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/designer-using-a-mixed-reality-headset-to-explore-spatial-de-1-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/designer-using-a-mixed-reality-headset-to-explore-spatial-de-1-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Designer using a mixed reality headset to explore spatial design for UI designers in a London studio</figcaption></figure> <h2>What Spatial Design Actually Means (Not the Buzzword Version)</h2> <p>Let’s be precise. Spatial design, in the context of mixed reality and extended reality (XR), refers to the practice of designing interfaces, information, and interactive elements that exist within three-dimensional space, rather than constrained to a flat screen surface. Instead of a canvas with X and Y axes, you’re working with X, Y, and Z. Depth is now a design variable.</p> <p>In a mixed reality headset like Vision Pro, a UI panel doesn’t sit inside a monitor. It floats in your kitchen. Users can walk around it, look at it from an angle, or physically reach out to interact. That changes almost everything about hierarchy, readability, affordance, and spatial audio as a design layer. The <a href="https://www.bbc.co.uk/news/technology" target="_blank" rel="noopener">BBC’s technology coverage</a> has tracked how these devices are moving from novelty to genuine productivity tools, which tells you the design profession needs to catch up quickly.</p> <h2>The Core Principles That Actually Transfer From Screen Design</h2> <p>Here’s what I’d tell any screen-based UI designer who’s feeling overwhelmed: your instincts about hierarchy, contrast, and cognitive load are still completely valid. Spatial design doesn’t throw those out. It complicates them.</p> <p>Visual hierarchy still matters enormously. In fact, it matters more, because users can now look in any direction. You can’t assume their gaze is somewhere in the centre-top third of a fixed canvas. Designing for spatial environments means thinking about where attention naturally falls in three-dimensional space, which ties directly to concepts from environmental design and wayfinding, disciplines that graphic designers have largely ignored until now.</p> <p>Typography principles carry over too, but with major caveats. Text rendering in XR headsets is improving fast, but legibility at distance and from off-angles is genuinely different from screen typography. Font weights that work at 16px on a Retina display can fall apart when a text panel is floating 1.2 metres away from a user’s face. You need to think in angular resolution, not pixels. That’s a mindset shift.</p> <p>Colour and contrast remain critical. In passthrough mixed reality, your UI layers over a real physical environment that you can’t control. That cream-coloured wall behind a floating button might destroy your contrast ratio entirely. Designing for spatial contexts requires building in far more contrast tolerance than you’d typically use on a screen.</p> <figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/06/floating-spatial-ui-panels-demonstrating-depth-and-hierarchy-2.png" alt="Floating spatial UI panels demonstrating depth and hierarchy principles in spatial design for UI designers" class="wp-image-176" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/06/floating-spatial-ui-panels-demonstrating-depth-and-hierarchy-2.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/floating-spatial-ui-panels-demonstrating-depth-and-hierarchy-2-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/floating-spatial-ui-panels-demonstrating-depth-and-hierarchy-2-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/floating-spatial-ui-panels-demonstrating-depth-and-hierarchy-2-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Floating spatial UI panels demonstrating depth and hierarchy principles in spatial design for UI designers</figcaption></figure> <h2>What Doesn’t Transfer and What You Need to Learn Fresh</h2> <p>Scrolling is mostly dead, and that’s going to take some unlearning. The entire paradigm of infinite scroll, long-form vertical layouts, sticky navigation, all of it maps poorly to spatial interfaces. Instead, spatial design favours panels, contextual layers, and proximity-based information reveal. Content appears because you looked at something, moved towards it, or reached for it. The interaction model is fundamentally gestural and gaze-driven.</p> <p>Depth management is a new discipline you’ll need to build from scratch. Which elements sit in the foreground? Which recede? How do you communicate to a user that a control is behind them without a minimap? These problems don’t have twenty years of design pattern libraries behind them. You’re in early-explorer territory, which is either thrilling or terrifying depending on your disposition.</p> <p>Scale is genuinely strange in spatial design. Objects in XR have real-world scale. A modal dialogue that’s 600px wide on a web page becomes something you have to define in centimetres or metres in a volumetric environment. Too large and it’s overwhelming; too small and it’s fiddly. Ergonomic comfort zones, the angles and distances at which interaction feels natural, become a design constraint in the same way that viewport sizes are on the web.</p> <p>Audio as a design layer is also something screen-based designers rarely touch but spatial designers use constantly. Positional audio tells users where elements are, confirms interactions, and creates environmental feedback. If you’ve never thought about sound design, that gap needs filling.</p> <h2>How to Actually Start Practising Spatial Design for UI Designers</h2> <p>You don’t need to own a headset to start developing spatial intuition, though access to one obviously accelerates things. Here’s a more pragmatic path.</p> <p>Start by studying game UI design. Games have been solving volumetric interface problems for decades. Head-up displays in first-person games, diegetic interfaces that exist within the game world, contextual menus that appear near objects. Dissecting how studios like Rare or Rocksteady handle in-game UI teaches you a tremendous amount about designing for spatial contexts without writing a single line of Unity code.</p> <p>Learn the basics of Apple’s visionOS Human Interface Guidelines and Meta’s Presence Platform design principles. Both are publicly available and represent the current best thinking on spatial interface patterns. They’re genuinely well-written, even if parts of them feel like you’re reading from the future.</p> <p>Figma isn’t the right tool for spatial work, full stop. You’ll eventually need to get comfortable with either Unity, Unreal Engine, or a prototyping tool like ShapesXR or Gravity Sketch. Unity in particular has strong UK community support, with groups active in cities like London, Manchester, and Edinburgh. Getting into those communities early puts you in rooms where the practical knowledge actually lives.</p> <h2>Why This Matters for Your Career Right Now</h2> <p>The UK’s XR industry is not tiny. According to research from Immerse UK, the country’s immersive technology sector has been growing consistently, with significant investment going into training, healthcare, architecture, and retail applications. These sectors need designers who understand both screen conventions and spatial interaction. That intersection is currently occupied by very few people.</p> <p>Spatial design for UI designers isn’t a replacement specialism, it’s an extension. The designers who move first, who build even a basic working vocabulary in volumetric interfaces, are going to be substantially more valuable over the next five years than those who wait until the tooling is more mature. The tooling is mature enough now to learn from. It’s not mature enough yet that the patterns are locked in, which means there’s still room to help define them.</p> <p>If you’ve got strong screen design fundamentals, a willingness to unlearn a few assumptions, and even a passing interest in how spatial computing actually works, the transition is more achievable than the headset marketing makes it seem. Start small. Study the principles. Get hands-on when you can. The flat rectangle has had a good run, but design doesn’t stop at the edge of a screen.</p> <h2>Frequently Asked Questions</h2> <h3>What is spatial design for UI designers?</h3> <p>Spatial design for UI designers refers to the practice of designing interfaces and interactive elements that exist in three-dimensional space, as used in mixed reality and XR headsets, rather than on flat screens. It extends traditional screen design skills into volumetric environments where depth, scale, and physical ergonomics become core design constraints.</p> <h3>Do I need a mixed reality headset to learn spatial design?</h3> <p>Not initially. You can build foundational spatial design skills by studying game UI design, reading Apple’s visionOS and Meta’s Presence Platform guidelines, and learning tools like Unity or ShapesXR. That said, hands-on headset time accelerates your understanding of scale and ergonomics significantly, so getting access to a device as soon as you can is worthwhile.</p> <h3>Which tools do spatial designers use instead of Figma?</h3> <p>Figma is largely unsuitable for volumetric spatial design work. Common tools include Unity, Unreal Engine, ShapesXR, and Gravity Sketch. Unity is particularly well-supported in the UK, with active developer and design communities in cities like London and Manchester.</p> <h3>How is spatial design different from regular UX design?</h3> <p>Regular UX design operates on a fixed two-dimensional canvas with defined viewport sizes and predictable user gaze. Spatial design introduces a third axis of depth, variable real-world scale, gaze and gesture-based interaction, and the challenge of overlaying interfaces on uncontrolled physical environments. Many familiar patterns like vertical scroll and sticky navigation map poorly to spatial contexts.</p> <h3>Is spatial design a good career direction for UK designers in 2026?</h3> <p>Yes, and increasingly so. The UK’s immersive technology sector, tracked by organisations like Immerse UK, is growing across healthcare, retail, architecture, and training. Designers who combine strong screen-based fundamentals with spatial design knowledge are in relatively short supply, making it a genuinely valuable skill combination right now.</p> <p><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "What is spatial design for UI designers?", "acceptedAnswer": { "@type": "Answer", "text": "Spatial design for UI designers refers to the practice of designing interfaces and interactive elements that exist in three-dimensional space, as used in mixed reality and XR headsets, rather than on flat screens. It extends traditional screen design skills into volumetric environments where depth, scale, and physical ergonomics become core design constraints." } }, { "@type": "Question", "name": "Do I need a mixed reality headset to learn spatial design?", "acceptedAnswer": { "@type": "Answer", "text": "Not initially. You can build foundational spatial design skills by studying game UI design, reading Apple's visionOS and Meta's Presence Platform guidelines, and learning tools like Unity or ShapesXR. That said, hands-on headset time accelerates your understanding of scale and ergonomics significantly, so getting access to a device as soon as you can is worthwhile." } }, { "@type": "Question", "name": "Which tools do spatial designers use instead of Figma?", "acceptedAnswer": { "@type": "Answer", "text": "Figma is largely unsuitable for volumetric spatial design work. Common tools include Unity, Unreal Engine, ShapesXR, and Gravity Sketch. Unity is particularly well-supported in the UK, with active developer and design communities in cities like London and Manchester." } }, { "@type": "Question", "name": "How is spatial design different from regular UX design?", "acceptedAnswer": { "@type": "Answer", "text": "Regular UX design operates on a fixed two-dimensional canvas with defined viewport sizes and predictable user gaze. Spatial design introduces a third axis of depth, variable real-world scale, gaze and gesture-based interaction, and the challenge of overlaying interfaces on uncontrolled physical environments. Many familiar patterns like vertical scroll and sticky navigation map poorly to spatial contexts." } }, { "@type": "Question", "name": "Is spatial design a good career direction for UK designers in 2026?", "acceptedAnswer": { "@type": "Answer", "text": "Yes, and increasingly so. The UK's immersive technology sector, tracked by organisations like Immerse UK, is growing across healthcare, retail, architecture, and training. Designers who combine strong screen-based fundamentals with spatial design knowledge are in relatively short supply, making it a genuinely valuable skill combination right now." } } ] } </script></p> </div> <div style="margin-top:var(--wp--preset--spacing--40)" class="wp-block-post-date has-small-font-size"><a href="https://launchpad-design.co.uk/spatial-design-for-ui-designers-mixed-reality/"><time datetime="2026-06-26T08:52:24+00:00">June 26, 2026</time></a></div></div> </li><li class="wp-block-post post-171 post type-post status-publish format-standard has-post-thumbnail hentry category-design category-nerdy category-web-design tag-hover-states-design tag-loading-animations tag-micro-interactions-ux-design tag-ui-feedback-loops tag-ux-design-patterns"> <div class="wp-block-group alignfull is-layout-flow wp-block-group-is-layout-flow" style="padding-top:var(--wp--preset--spacing--60);padding-bottom:var(--wp--preset--spacing--60)"><figure style="aspect-ratio:3/2" class="wp-block-post-featured-image"><a href="https://launchpad-design.co.uk/micro-interactions-tiny-design-details-user-trust/" target="_self" ><img width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/06/designer-reviewing-micro-interactions-ux-design-patterns-on-1.png" class="attachment-full size-full wp-post-image" alt="Micro-Interactions: The Tiny Design Details That Make Users Trust Your Product" style="width:100%;height:100%;object-fit:cover;" decoding="async" loading="lazy" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/06/designer-reviewing-micro-interactions-ux-design-patterns-on-1.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/designer-reviewing-micro-interactions-ux-design-patterns-on-1-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/designer-reviewing-micro-interactions-ux-design-patterns-on-1-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/designer-reviewing-micro-interactions-ux-design-patterns-on-1-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure> <h2 class="wp-block-post-title has-x-large-font-size"><a href="https://launchpad-design.co.uk/micro-interactions-tiny-design-details-user-trust/" target="_self" >Micro-Interactions: The Tiny Design Details That Make Users Trust Your Product</a></h2> <div class="entry-content alignfull wp-block-post-content has-medium-font-size is-layout-flow wp-block-post-content-is-layout-flow"><p>There’s a specific moment, probably too brief to consciously register, when you click a button and it responds with a satisfying little bounce. Or when a form field turns green the instant your postcode validates. Something tiny happens, and your brain quietly files it under <em>this product knows what it’s doing</em>. That’s micro-interactions UX design doing exactly what it’s supposed to. Invisible when they work. Painfully noticeable when they don’t.</p> <p>I spend a disproportionate amount of time obsessing over these moments. Not because I have nothing better to do (debatable), but because the evidence is pretty overwhelming: the cumulative effect of well-crafted micro-interactions is a product that users trust before they’ve even consciously evaluated it. Let’s dig into the psychology, the mechanics, and the practical execution of getting them right.</p> <figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/06/designer-reviewing-micro-interactions-ux-design-patterns-on-1.png" alt="Designer reviewing micro-interactions UX design patterns on a large monitor in a modern studio" class="wp-image-169" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/06/designer-reviewing-micro-interactions-ux-design-patterns-on-1.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/designer-reviewing-micro-interactions-ux-design-patterns-on-1-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/designer-reviewing-micro-interactions-ux-design-patterns-on-1-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/designer-reviewing-micro-interactions-ux-design-patterns-on-1-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Designer reviewing micro-interactions UX design patterns on a large monitor in a modern studio</figcaption></figure> <h2>What Actually Are Micro-Interactions UX Design Patterns?</h2> <p>Micro-interactions are contained product moments that revolve around a single use case. Dan Saffer, who literally wrote the book on the subject, defined them as having four components: a trigger, rules, feedback, and loops/modes. That framework holds up well. But the way I think about it is simpler: a micro-interaction is any moment where the interface acknowledges the user. It says, <em>yes, I heard you, here’s what happened</em>.</p> <p>They live everywhere. The pull-to-refresh gesture on your phone. The unread badge count on an app icon. The subtle colour shift when you hover over a navigation link. The progress bar that ticks along while your file uploads. Each one is a tiny contract between the interface and the human operating it. Break enough of those contracts and trust erodes fast, even if the user couldn’t tell you exactly why they stopped liking the product.</p> <h2>The Psychology Behind Why These Tiny Details Work</h2> <p>Humans are pattern-recognition machines. We’re wired to notice cause and effect, and when a digital interface behaves predictably in response to our actions, our nervous systems genuinely relax. This is related to what psychologists call <em>effectance motivation</em>, the intrinsic satisfaction we get from making things happen. A button that visually depresses when clicked isn’t just skeuomorphic nostalgia; it’s confirming the causal loop in a way our brains find deeply satisfying.</p> <p>Feedback loops are particularly powerful. When users get immediate, proportionate feedback to their actions, it reduces cognitive load because they don’t have to hold uncertainty in working memory. Did my form submit? Did my item save? Is something loading or has it crashed? Each unanswered question is a small tax on attention and trust. Micro-interactions UX design is, at its core, the business of answering those questions before the user even thinks to ask them.</p> <p>There’s also a strong connection to what Nielsen Norman Group describes as visibility of system status, the very first of the ten usability heuristics. If you want a solid grounding in this thinking, their <a href="https://www.nngroup.com/articles/ten-usability-heuristics/" rel="noopener noreferrer" target="_blank">ten usability heuristics</a> are worth bookmarking. Everything from loading spinners to error states maps back to keeping users informed at all times.</p> <h2>Hover States: The Most Underrated Micro-Interaction</h2> <p>Designers spend ages on hero sections and almost no time on hover states. Which is baffling, because hover states are often the first interactive feedback a user receives on a page. Get them wrong and the product immediately feels cheap.</p> <p>A solid hover state communicates affordance. It tells the user this thing is clickable, and it gives them a moment of anticipation before committing. The best ones do it with restraint: a subtle background fill, a slight scale transform, a colour transition timed at around 150 to 200 milliseconds. Go slower and it feels sluggish. Go faster and it’s jarring. That 150 to 200ms sweet spot is the interface equivalent of a firm handshake.</p> <p>Where I see teams go wrong most often is inconsistency. Three different hover treatments across one page is a trust-eroding disaster. If links behave one way in the nav, a different way in the body copy, and a third way in the footer, users unconsciously sense the incoherence even if they never articulate it. Systematise your hover states in your design tokens early and stick to them.</p> <figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/06/smartphone-displaying-micro-interactions-ux-design-feedback-2.png" alt="Smartphone displaying micro-interactions UX design feedback states including inline form validation" class="wp-image-170" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/06/smartphone-displaying-micro-interactions-ux-design-feedback-2.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/smartphone-displaying-micro-interactions-ux-design-feedback-2-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/smartphone-displaying-micro-interactions-ux-design-feedback-2-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/smartphone-displaying-micro-interactions-ux-design-feedback-2-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Smartphone displaying micro-interactions UX design feedback states including inline form validation</figcaption></figure> <h2>Loading Animations: Turning Dead Time Into Active Trust-Building</h2> <p>Loading states are where a lot of products go catastrophically wrong, mostly by having nothing happen at all. A blank screen or an unresponsive button during a two-second API call is enough to make users tap twice, assume it’s broken, or abandon altogether.</p> <p>The research on perceived performance is genuinely fascinating. Studies consistently show that users rate a product as faster when there’s visible progress feedback, even if the actual load time is identical. Skeleton screens (the greyed-out placeholder layouts that appear before content loads) are particularly effective because they set spatial expectations and signal that content is on its way. Compared to a generic spinner, they’ve been shown to reduce perceived wait time noticeably.</p> <p>For loading micro-interactions UX design, the key questions are: Is it proportionate? A 200ms action doesn’t need a progress bar; a file upload absolutely does. Is it interruptible? Users should be able to cancel long operations. And does it give accurate feedback? An indeterminate spinner is better than a fake progress bar that stalls at 99% for seven seconds. That specific crime against UX has haunted me since about 2009.</p> <h2>Feedback Loops That Actually Build Confidence</h2> <p>The best feedback loops operate at three levels: immediate, short-term, and completion. Immediate feedback is the button press response. Short-term is the inline form validation as you type. Completion is the success state after a transaction finalises.</p> <p>Inline validation is worth dwelling on because teams chronically under-invest in it. Telling a user their password is too short <em>after</em> they’ve submitted the form is a UX failure. Telling them in real time, with a clear visual indicator as they type, removes friction and builds confidence simultaneously. A green tick appearing next to a valid email address is a small celebration. It’s the interface saying <em>nice one</em> without being annoying about it.</p> <p>Success states are equally neglected. After a user completes a key action (a purchase, a sign-up, a file save), the interface has a brief window to reinforce that they did the right thing. Monzo does this brilliantly with their payment confirmations; the little animation and clear confirmation copy make spending money feel almost pleasant, which is no small feat. It’s not accidental. That’s deliberate micro-interaction design working at full effectiveness.</p> <h2>The Curious Overlap With Physical Craft</h2> <p>Here’s a slightly left-field observation. The philosophy behind micro-interactions maps surprisingly well onto the idea that precision and feedback in physical tools build trust in the person using them. A well-calibrated piece of <a href="https://iwmachines.co.uk/" rel="noopener noreferrer" target="_blank">woodworking machinery</a> gives the craftsperson constant feedback through resistance, sound, and result, much like a well-designed interface gives users constant feedback through visual, tactile, and auditory cues. Both create confidence through predictable, proportionate response. It’s the same underlying principle: feedback is what separates a tool you trust from one you fear.</p> <h2>How to Implement Micro-Interactions Without Overengineering</h2> <p>The trap is over-animating everything. I’ve seen portfolios where every single element bounces, spins, or fades, and within thirty seconds the site feels like a fever dream. Micro-interactions should be in service of clarity, not applause for the designer’s technical skills.</p> <p>Start with the high-stakes moments: form validation, loading states, error messages, and success confirmations. These are the places where the user is most uncertain and where feedback matters most. Once those are solid, look at primary CTAs and navigation. Then, and only then, consider the delightful extras like subtle parallax effects or playful empty states.</p> <p>For implementation in CSS, the <code>transition</code> and <code>animation</code> properties cover most hover and feedback states elegantly. For more complex sequenced animations, tools like GSAP (GreenSock) give you precise timing control without wrestling the browser. For React-based projects, Framer Motion handles the physics-based interactions brilliantly and keeps your component logic clean. The right tool depends on the complexity of the interaction, not on which library is currently trending on dev Twitter.</p> <p>The principle to carry through every decision: if removing the micro-interaction would make the interface harder to use or understand, it’s load-bearing and should stay. If removing it just makes it slightly less delightful, it’s ornamental. Both have their place. But know which is which before you ship.</p> <h2>Frequently Asked Questions</h2> <h3>What are micro-interactions in UX design?</h3> <p>Micro-interactions are small, contained moments in a digital interface that respond to a user’s action, such as a button animation on click, inline form validation, or a loading spinner during a file upload. They communicate system status, confirm actions, and build user confidence through consistent, proportionate feedback.</p> <h3>Why do micro-interactions improve user trust?</h3> <p>They work by reducing uncertainty. When an interface immediately acknowledges every user action, it confirms that the product is working correctly and listening. This satisfies a deep psychological need for cause-and-effect confirmation, which lowers cognitive load and builds trust over repeated interactions.</p> <h3>How long should a hover state animation be?</h3> <p>The widely accepted sweet spot for hover state transitions is between 150 and 200 milliseconds. Slower than that feels sluggish; faster feels abrupt. For exit transitions (mouse leaving an element), slightly longer durations around 200 to 250ms tend to feel more natural.</p> <h3>What is the difference between a skeleton screen and a loading spinner?</h3> <p>A skeleton screen shows a greyed-out placeholder layout that mimics the structure of the content being loaded, setting spatial expectations and signalling progress visually. A loading spinner is a generic rotating indicator with no contextual information. Research consistently shows skeleton screens reduce perceived wait time more effectively than spinners.</p> <h3>Are micro-interactions bad for performance?</h3> <p>Not if implemented carefully. CSS transitions using transform and opacity properties are GPU-accelerated and have negligible performance cost. Problems arise when developers animate properties that trigger browser reflows (like width, height, or top/left). Stick to transform and opacity for smooth, performant micro-interactions on any device.</p> <p><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "What are micro-interactions in UX design?", "acceptedAnswer": { "@type": "Answer", "text": "Micro-interactions are small, contained moments in a digital interface that respond to a user's action, such as a button animation on click, inline form validation, or a loading spinner during a file upload. They communicate system status, confirm actions, and build user confidence through consistent, proportionate feedback." } }, { "@type": "Question", "name": "Why do micro-interactions improve user trust?", "acceptedAnswer": { "@type": "Answer", "text": "They work by reducing uncertainty. When an interface immediately acknowledges every user action, it confirms that the product is working correctly and listening. This satisfies a deep psychological need for cause-and-effect confirmation, which lowers cognitive load and builds trust over repeated interactions." } }, { "@type": "Question", "name": "How long should a hover state animation be?", "acceptedAnswer": { "@type": "Answer", "text": "The widely accepted sweet spot for hover state transitions is between 150 and 200 milliseconds. Slower than that feels sluggish; faster feels abrupt. For exit transitions (mouse leaving an element), slightly longer durations around 200 to 250ms tend to feel more natural." } }, { "@type": "Question", "name": "What is the difference between a skeleton screen and a loading spinner?", "acceptedAnswer": { "@type": "Answer", "text": "A skeleton screen shows a greyed-out placeholder layout that mimics the structure of the content being loaded, setting spatial expectations and signalling progress visually. A loading spinner is a generic rotating indicator with no contextual information. Research consistently shows skeleton screens reduce perceived wait time more effectively than spinners." } }, { "@type": "Question", "name": "Are micro-interactions bad for performance?", "acceptedAnswer": { "@type": "Answer", "text": "Not if implemented carefully. CSS transitions using transform and opacity properties are GPU-accelerated and have negligible performance cost. Problems arise when developers animate properties that trigger browser reflows (like width, height, or top/left). Stick to transform and opacity for smooth, performant micro-interactions on any device." } } ] } </script></p> </div> <div style="margin-top:var(--wp--preset--spacing--40)" class="wp-block-post-date has-small-font-size"><a href="https://launchpad-design.co.uk/micro-interactions-tiny-design-details-user-trust/"><time datetime="2026-06-19T08:13:26+00:00">June 19, 2026</time></a></div></div> </li><li class="wp-block-post post-168 post type-post status-publish format-standard has-post-thumbnail hentry category-design category-nerdy category-web-design tag-css-colour-level-4 tag-display-p3 tag-oklch-design tag-ui-colour-theory tag-wide-gamut-colour-spaces"> <div class="wp-block-group alignfull is-layout-flow wp-block-group-is-layout-flow" style="padding-top:var(--wp--preset--spacing--60);padding-bottom:var(--wp--preset--spacing--60)"><figure style="aspect-ratio:3/2" class="wp-block-post-featured-image"><a href="https://launchpad-design.co.uk/colour-theory-digital-screens-wide-gamut-display-p3-2026/" target="_self" ><img width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/06/graphic-designer-working-with-wide-gamut-colour-spaces-on-du-1.png" class="attachment-full size-full wp-post-image" alt="Colour Theory for Digital Screens: Why Designing in sRGB Is No Longer Enough in 2026" style="width:100%;height:100%;object-fit:cover;" decoding="async" loading="lazy" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/06/graphic-designer-working-with-wide-gamut-colour-spaces-on-du-1.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/graphic-designer-working-with-wide-gamut-colour-spaces-on-du-1-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/graphic-designer-working-with-wide-gamut-colour-spaces-on-du-1-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/graphic-designer-working-with-wide-gamut-colour-spaces-on-du-1-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure> <h2 class="wp-block-post-title has-x-large-font-size"><a href="https://launchpad-design.co.uk/colour-theory-digital-screens-wide-gamut-display-p3-2026/" target="_self" >Colour Theory for Digital Screens: Why Designing in sRGB Is No Longer Enough in 2026</a></h2> <div class="entry-content alignfull wp-block-post-content has-medium-font-size is-layout-flow wp-block-post-content-is-layout-flow"><p>For decades, sRGB was the safe bet. Every monitor, every browser, every design workflow assumed it. If you picked a colour in Figma, exported it, and slapped it on a website, it looked roughly the same on every screen. Comfortable. Predictable. Also, increasingly, a bit dull. The honest truth in 2026 is that sRGB covers only about 35% of the colours the human eye can perceive, and modern screens have quietly left it behind. If you’re still designing exclusively in sRGB, you’re essentially handing clients a watercolour painted with three crayons when the full art supply shop is sitting right there.</p> <p>The shift to <strong>wide-gamut colour spaces</strong> isn’t just a trendy designer flex. It’s a genuine, technically significant change in how screens render colour, and understanding it is rapidly becoming essential knowledge for anyone building interfaces or visual assets for modern displays. Let’s get into the weeds on this, because it’s properly fascinating once you see the full picture.</p> <figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/06/graphic-designer-working-with-wide-gamut-colour-spaces-on-du-1.png" alt="Graphic designer working with wide-gamut colour spaces on dual studio monitors" class="wp-image-166" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/06/graphic-designer-working-with-wide-gamut-colour-spaces-on-du-1.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/graphic-designer-working-with-wide-gamut-colour-spaces-on-du-1-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/graphic-designer-working-with-wide-gamut-colour-spaces-on-du-1-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/graphic-designer-working-with-wide-gamut-colour-spaces-on-du-1-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Graphic designer working with wide-gamut colour spaces on dual studio monitors</figcaption></figure> <h2>What Are Wide-Gamut Colour Spaces and Why Do They Matter?</h2> <p>A colour space is essentially a defined range of colours (a “gamut”) that a system can represent. sRGB was standardised in 1996 by HP and Microsoft, designed around the limitations of CRT monitors at the time. It was brilliant for its era. That era ended roughly when streaming 4K HDR content on an OLED panel became a Tuesday evening activity.</p> <p>Display P3 is the wide-gamut colour space you’ll hear most about right now. Developed by Apple and based on the DCI-P3 cinema standard, it covers roughly 45% more colour volume than sRGB. Practically speaking, that means richer reds, more vivid greens, and a whole spread of deep, saturated tones that sRGB simply cannot express. Apple has shipped P3-capable displays in iPhones since the iPhone 7, and virtually every modern MacBook, iPad Pro, and iPhone 15/16 series screen supports it natively. On the Android side, Google Pixel devices and Samsung Galaxy flagships have shipped with wide-gamut displays for several years now.</p> <p>Beyond Display P3, there’s also Rec. 2020, which is used in broadcast and cinema HDR pipelines and covers an even larger portion of human-visible colour. Most consumer screens can’t fully render it yet, but it’s the direction of travel. Designing with awareness of the hierarchy (sRGB inside P3 inside Rec. 2020) helps you make sensible choices today whilst future-proofing your work for whatever lands in 2027.</p> <h2>How Browsers Now Handle Wide-Gamut Colour</h2> <p>This is where it gets genuinely exciting for front-end developers and UI designers. CSS Colour Level 4 brought native support for wide-gamut colour spaces directly into the browser. You can now write colours in <code>display-p3</code>, <code>oklch</code>, <code>oklch</code>, <code>lab</code>, and several other modern colour spaces using the <code>color()</code> function. Here’s a quick example:</p> <pre><code>/* A vivid red that sRGB simply cannot express */ color: color(display-p3 0.9 0.1 0.1); /* With sRGB fallback for older browsers */ @supports not (color: color(display-p3 0 0 0)) { color: rgb(220, 38, 38); }</code></pre> <p>Safari has supported wide-gamut CSS colours the longest, with Chrome and Firefox catching up properly through 2024 and 2025. As of now, browser support is solid enough to use in production with graceful fallbacks. The <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/color" target="_blank" rel="noopener">MDN Web Docs</a> provide a thorough breakdown of browser compatibility tables for the <code>color()</code> function, which is worth bookmarking.</p> <p>The colour space that’s genuinely turning heads amongst designers and developers right now is <strong>OKLCH</strong>. Unlike HSL, which was designed to be human-readable but is perceptually inconsistent (a yellow at 50% lightness looks dramatically brighter than a blue at the same value), OKLCH is perceptually uniform. Rotating the hue in OKLCH whilst keeping lightness constant actually produces colours that look the same brightness to the human eye. That’s a massive deal for generating consistent palettes algorithmically, building design tokens, or creating accessible colour systems.</p> <figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/06/close-up-of-screen-showing-wide-gamut-colour-spaces-versus-s-2.png" alt="Close-up of screen showing wide-gamut colour spaces versus sRGB colour comparison" class="wp-image-167" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/06/close-up-of-screen-showing-wide-gamut-colour-spaces-versus-s-2.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/close-up-of-screen-showing-wide-gamut-colour-spaces-versus-s-2-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/close-up-of-screen-showing-wide-gamut-colour-spaces-versus-s-2-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/06/close-up-of-screen-showing-wide-gamut-colour-spaces-versus-s-2-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Close-up of screen showing wide-gamut colour spaces versus sRGB colour comparison</figcaption></figure> <h2>Practical Guidance: Future-Proofing Your Palette as a UK Designer</h2> <p>Right, so how do you actually incorporate this into a real workflow without throwing away everything you know? Here’s my take, built from going through this transition myself over the past year or so.</p> <h3>Start with Figma’s Colour Settings</h3> <p>Figma added Display P3 document colour space support in late 2023. If you’re on a P3-capable Mac display (basically any MacBook Pro from 2016 onwards), you can now enable this in your document settings and actually see the wider gamut as you design. Go to File, then Document Settings, and switch Colour Profile to Display P3. Colours you define in this space will carry through to exports correctly, provided the receiving context supports them.</p> <p>A word of caution: if your client’s target audience is primarily using older or budget hardware, the expanded gamut will map back down to sRGB on those screens. That’s not a disaster; browsers handle this reasonably well. But it does mean your gorgeous P3 coral might look like a fairly ordinary sRGB orange on an older laptop. Test across devices before committing a P3-heavy brand palette.</p> <h3>Adopt OKLCH for Design Tokens</h3> <p>If you’re building a design system (and you should be, I’ve written about that at length elsewhere on this site), switching your token layer to OKLCH pays dividends immediately. Tools like <a href="https://www.oddbird.net/2023/06/29/css-color-4/" target="_blank" rel="noopener noreferrer">CSS Colour 4 utilities</a> and the Colour.js library let you interpolate palettes in OKLCH space, which means your generated shades will be perceptually even across the full scale. Paired with a tool like Tokens Studio for Figma, you can define your full palette in OKLCH and have it output correctly targeted CSS variables for production.</p> <h3>Use SVG and Canvas Colour Profiles Correctly</h3> <p>SVG files don’t embed colour profile information by default. If you’re exporting illustrations or icons intended for P3 displays, you’ll want to ensure your export pipeline embeds the correct ICC profile or uses CSS colour space declarations where the SVG is inlined. Adobe Illustrator and Affinity Designer both allow you to work in P3 colour space, though workflow specifics vary between them.</p> <p>Canvas-based animations and WebGL projects have their own considerations. The <code>colorSpace</code> parameter in the Canvas API now supports <code>display-p3</code> in modern browsers, which is relevant if you’re building creative coded experiences or data visualisations where colour accuracy genuinely matters.</p> <h2>The Accessibility Angle You Probably Haven’t Considered</h2> <p>Wide-gamut colour spaces and accessibility aren’t in conflict, but they do interact in interesting ways. WCAG contrast ratios were defined against sRGB, and the upcoming WCAG 3.0 guidelines are moving towards the APCA (Advanced Perceptual Contrast Algorithm) model, which is designed to work properly across colour spaces. Staying ahead of this means testing contrast not just with standard sRGB tools but with perceptually-accurate calculators that account for your actual gamut.</p> <p>It’s a bit like making sure your house is properly insulated before you upgrade the heating system. (Speaking of which, if you’re curious about thermal efficiency in the physical world rather than digital colour theory, <a href="https://www.westvillegroup.co.uk/services/loft-and-roof-insulation/" rel="noopener">loft insulation</a> is one of those foundational investments that genuinely pays for itself.) The point being: you want the fundamentals right before you layer on the advanced stuff. Same logic applies here.</p> <h2>What This Means for Brand Colour in 2026</h2> <p>Brand colour is where wide-gamut support becomes a commercial differentiator. A startup launching a new product today, optimising for iPhone and high-end Android users, can define brand primaries that exist outside the sRGB gamut entirely. Those colours will look genuinely more vibrant, more premium, and more distinct on the devices their audience uses daily. In five years, designing brand palettes entirely within sRGB will feel like designing in 8-bit colour looked in the mid-2000s.</p> <p>UK agencies and freelancers working with tech clients, consumer brands, and media companies should be having this conversation now. It’s not wildly complex to implement, and the creative payoff is real. Wide-gamut colour spaces are one of those quiet technical shifts that, once you’ve seen what’s possible, you genuinely cannot unsee.</p> <p>The tools are ready. The browsers are ready. The screens are ready. The question is whether your workflow is.</p> <h2>Frequently Asked Questions</h2> <h3>What is the difference between sRGB and Display P3?</h3> <p>sRGB is the traditional colour space standardised in 1996, covering roughly 35% of human-visible colour. Display P3 is a wider colour space that covers approximately 45% more colour volume than sRGB, enabling richer and more vibrant colours on capable modern screens. Most iPhones from 2016 onwards and many current Android flagships support Display P3.</p> <h3>Do UK designers need to switch to wide-gamut colour spaces right now?</h3> <p>It depends on your audience and project type. If you’re designing for modern mobile apps, premium consumer products, or media-forward websites where a significant portion of users will be on high-end displays, adopting wide-gamut colour spaces now gives you a creative and technical edge. For projects targeting older or budget hardware, robust sRGB fallbacks remain essential.</p> <h3>Which browsers support CSS wide-gamut colour in 2026?</h3> <p>All major modern browsers now support wide-gamut colour via the CSS <code>color()</code> function, including Chrome, Firefox, and Safari. Safari has had the longest support history, whilst Chrome and Firefox reached solid production-ready support through 2024 and 2025. Always include sRGB fallbacks using <code>@supports</code> for older browser versions.</p> <h3>What is OKLCH and why are designers talking about it?</h3> <p>OKLCH is a perceptually uniform colour space, meaning equal numerical steps in lightness or chroma look visually equal to the human eye, which is not the case with older models like HSL. This makes it far better for generating consistent design token palettes, creating accessible colour systems, and interpolating smoothly between colours. It’s natively supported in CSS Colour Level 4.</p> <h3>How do I set up Figma to design in Display P3?</h3> <p>In Figma, open your file and go to File, then Document Settings. Change the Colour Profile from sRGB to Display P3. You’ll need a P3-capable display (such as a MacBook Pro from 2016 or later) to actually see the wider gamut rendered correctly. Exports from a P3 document will carry the correct colour profile information for web and app use.</p> <p><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "What is the difference between sRGB and Display P3?", "acceptedAnswer": { "@type": "Answer", "text": "sRGB is the traditional colour space standardised in 1996, covering roughly 35% of human-visible colour. Display P3 is a wider colour space that covers approximately 45% more colour volume than sRGB, enabling richer and more vibrant colours on capable modern screens. Most iPhones from 2016 onwards and many current Android flagships support Display P3." } }, { "@type": "Question", "name": "Do UK designers need to switch to wide-gamut colour spaces right now?", "acceptedAnswer": { "@type": "Answer", "text": "It depends on your audience and project type. If you're designing for modern mobile apps, premium consumer products, or media-forward websites where a significant portion of users will be on high-end displays, adopting wide-gamut colour spaces now gives you a creative and technical edge. For projects targeting older or budget hardware, robust sRGB fallbacks remain essential." } }, { "@type": "Question", "name": "Which browsers support CSS wide-gamut colour in 2026?", "acceptedAnswer": { "@type": "Answer", "text": "All major modern browsers now support wide-gamut colour via the CSS color() function, including Chrome, Firefox, and Safari. Safari has had the longest support history, whilst Chrome and Firefox reached solid production-ready support through 2024 and 2025. Always include sRGB fallbacks using @supports for older browser versions." } }, { "@type": "Question", "name": "What is OKLCH and why are designers talking about it?", "acceptedAnswer": { "@type": "Answer", "text": "OKLCH is a perceptually uniform colour space, meaning equal numerical steps in lightness or chroma look visually equal to the human eye, which is not the case with older models like HSL. This makes it far better for generating consistent design token palettes, creating accessible colour systems, and interpolating smoothly between colours. It's natively supported in CSS Colour Level 4." } }, { "@type": "Question", "name": "How do I set up Figma to design in Display P3?", "acceptedAnswer": { "@type": "Answer", "text": "In Figma, open your file and go to File, then Document Settings. Change the Colour Profile from sRGB to Display P3. You'll need a P3-capable display (such as a MacBook Pro from 2016 or later) to actually see the wider gamut rendered correctly. Exports from a P3 document will carry the correct colour profile information for web and app use." } } ] } </script></p> </div> <div style="margin-top:var(--wp--preset--spacing--40)" class="wp-block-post-date has-small-font-size"><a href="https://launchpad-design.co.uk/colour-theory-digital-screens-wide-gamut-display-p3-2026/"><time datetime="2026-06-17T07:23:55+00:00">June 17, 2026</time></a></div></div> </li><li class="wp-block-post post-159 post type-post status-publish format-standard has-post-thumbnail hentry category-design category-nerdy category-web-design tag-backdrop-filter-css tag-frosted-glass-ui tag-glassmorphism-app-design-2026 tag-glassmorphism-tutorial tag-ui-design-trends"> <div class="wp-block-group alignfull is-layout-flow wp-block-group-is-layout-flow" style="padding-top:var(--wp--preset--spacing--60);padding-bottom:var(--wp--preset--spacing--60)"><figure style="aspect-ratio:3/2" class="wp-block-post-featured-image"><a href="https://launchpad-design.co.uk/glassmorphism-app-design-2026/" target="_self" ><img width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/05/smartphone-showing-glassmorphism-app-design-2026-with-froste-1.png" class="attachment-full size-full wp-post-image" alt="Glassmorphism Is Back: Why Frosted UI Aesthetics Are Dominating App Design Again" style="width:100%;height:100%;object-fit:cover;" decoding="async" loading="lazy" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/05/smartphone-showing-glassmorphism-app-design-2026-with-froste-1.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/smartphone-showing-glassmorphism-app-design-2026-with-froste-1-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/smartphone-showing-glassmorphism-app-design-2026-with-froste-1-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/smartphone-showing-glassmorphism-app-design-2026-with-froste-1-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure> <h2 class="wp-block-post-title has-x-large-font-size"><a href="https://launchpad-design.co.uk/glassmorphism-app-design-2026/" target="_self" >Glassmorphism Is Back: Why Frosted UI Aesthetics Are Dominating App Design Again</a></h2> <div class="entry-content alignfull wp-block-post-content has-medium-font-size is-layout-flow wp-block-post-content-is-layout-flow"><p>There’s a particular kind of satisfaction in watching a design trend get buried, declared dead, mocked on Twitter (or whatever it’s called now), and then quietly come roaring back because the hardware finally caught up with the vision. That’s exactly what’s happened with glassmorphism. The frosted-glass, translucent-panel aesthetic that peaked around 2021 and then got absolutely roasted for being impractical is now showing up everywhere again, and this time it actually makes sense. Glassmorphism app design in 2026 isn’t nostalgia. It’s a legitimate design choice backed by real technical capability.</p> <figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/05/smartphone-showing-glassmorphism-app-design-2026-with-froste-1.png" alt="Smartphone showing glassmorphism app design 2026 with frosted translucent UI panels over dark gradient background" class="wp-image-157" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/05/smartphone-showing-glassmorphism-app-design-2026-with-froste-1.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/smartphone-showing-glassmorphism-app-design-2026-with-froste-1-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/smartphone-showing-glassmorphism-app-design-2026-with-froste-1-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/smartphone-showing-glassmorphism-app-design-2026-with-froste-1-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Smartphone showing glassmorphism app design 2026 with frosted translucent UI panels over dark gradient background</figcaption></figure> <h2>What Is Glassmorphism (And Why Did It Struggle the First Time Round)?</h2> <p>If you missed the first wave, glassmorphism is the UI style characterised by frosted-glass panels, background blur effects, subtle transparency, and soft light-refracting aesthetics. Think macOS’s menu bar, Apple’s iOS control centre, or Microsoft’s Fluent Design system. Elements appear to float above a blurred background layer, giving interfaces a sense of depth and physical plausibility that flat design completely abandoned.</p> <p>The original problem was brutal and specific: <code>backdrop-filter: blur()</code> on the web was a performance nightmare. On mid-range Android phones from 2020 to 2022, rendering a blurred background behind a translucent card while also doing anything else was genuinely painful. Frame rates tanked. Battery drained. Designers who loved the look had to either fake it with static backgrounds or accept that their beautiful UI was going to feel like treacle on half the devices their users owned. So most of them abandoned it.</p> <h2>Why Glassmorphism App Design in 2026 Is Different</h2> <p>The shift is hardware-led, and it’s significant. Modern mobile chipsets, including the Snapdragon 8 Elite and Apple’s A18 series, have dedicated graphics processing paths that handle compositing and blur operations at a fraction of the battery cost of three years ago. GPU-accelerated backdrop filters are no longer the performance sin they once were on flagship and even mid-range devices.</p> <p>On the web side, browser support has matured considerably. <code>backdrop-filter</code> now enjoys solid support across Chrome, Firefox, Safari, and Edge without any prefix gymnastics. The <a href="https://www.bbc.co.uk/news/technology" target="_blank" rel="noopener noreferrer">BBC’s technology coverage</a> has tracked how the push toward richer visual interfaces correlates directly with the upgrade cycle of UK consumers, and the average device in use today is significantly more capable than it was even two years ago. That matters enormously for UI decisions.</p> <p>There’s also the OS context to consider. Both iOS and Android have doubled down on blur-heavy system UI. When the operating system itself is built around layered translucency, designing apps that match that visual language no longer feels like a quirk. It feels cohesive.</p> <figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/05/close-up-of-code-editor-showing-glassmorphism-app-design-202-2.png" alt="Close-up of code editor showing glassmorphism app design 2026 CSS implementation in a split screen view" class="wp-image-158" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/05/close-up-of-code-editor-showing-glassmorphism-app-design-202-2.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/close-up-of-code-editor-showing-glassmorphism-app-design-202-2-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/close-up-of-code-editor-showing-glassmorphism-app-design-202-2-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/close-up-of-code-editor-showing-glassmorphism-app-design-202-2-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Close-up of code editor showing glassmorphism app design 2026 CSS implementation in a split screen view</figcaption></figure> <h2>The Visual Logic: Why Our Brains Actually Love It</h2> <p>Glassmorphism works because it maps to physical intuitions we already have. Frosted glass exists in the real world. We understand instinctively that a frosted panel sits in front of something else, that it has depth, that the blurred content behind it is contextually present but not primary. That spatial relationship communicates hierarchy without requiring heavy borders, hard shadows, or solid backgrounds.</p> <p>This is where glassmorphism diverges from skeuomorphism, the old Apple approach of making everything look like leather or wood. Glassmorphism doesn’t pretend to be a physical object. It borrows one physical property (translucency and blur) to create a spatial metaphor, then stays resolutely digital in every other respect. That’s a much more elegant theft.</p> <p>The result is interfaces that feel light, airy, and contextually aware. A card floating over a dynamic wallpaper or a live map background feels alive in a way that a solid-colour card simply doesn’t. It gives designers a tool for expressing hierarchy that doesn’t rely purely on typography scale or colour contrast.</p> <h2>How to Implement Glassmorphism Without Killing Performance</h2> <p>Right. Let’s get into the actual craft, because this is where people still go wrong.</p> <h3>Use backdrop-filter Sparingly and Wisely</h3> <p>The biggest mistake is stacking multiple blurred layers. Each <code>backdrop-filter: blur()</code> call creates a new compositing layer and forces the browser to re-render everything behind it on every frame. One or two blurred panels on a page: fine. Six overlapping ones with different blur radii: you’ve just built a slideshow.</p> <p>My rule of thumb is that blur should be reserved for the single most important overlay element on screen at any given time. A modal? Yes. A notification toast? Only if it’s the only one. Your entire card grid? Absolutely not.</p> <h3>Control Your Blur Radius</h3> <p>Bigger blur values aren’t always better. A radius between 10px and 20px tends to give the frosted glass effect without punishing the GPU too severely. Anything above 40px starts to look mushy and costs more to render. Resist the urge to crank it up. The aesthetic lives in subtlety.</p> <h3>Use Will-Change Strategically</h3> <p>Adding <code>will-change: transform</code> to a glassmorphic element hints to the browser that it should promote the element to its own compositing layer in advance. This can smooth animations significantly when glass panels are sliding in or out. But use it only on elements that actually animate. Slapping it on everything is the equivalent of pre-loading every image on a 200-page site.</p> <h3>CSS You Actually Need</h3> <p>A clean glassmorphism card in CSS looks roughly like this:</p> <pre><code>.glass-card { background: rgba(255, 255, 255, 0.15); backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px); border: 1px solid rgba(255, 255, 255, 0.25); border-radius: 16px; box-shadow: 0 4px 24px rgba(0, 0, 0, 0.12); }</code></pre> <p>The border is critical. That thin, semi-transparent white border is what sells the glass edge. Without it, you just have a blurry box. The <code>-webkit-backdrop-filter</code> prefix is still worth including for older Safari versions on iOS devices, which are notoriously slow to die in the wild.</p> <h2>Dark Mode and Glassmorphism: A Natural Pairing</h2> <p>Glassmorphism lives its best life in dark environments. Translucent panels over dark, gradient-rich backgrounds create enormous visual depth. The effect on a light background can work, but it requires much higher contrast on the glass panel itself to maintain accessibility, and you risk the whole thing looking washed out.</p> <p>If you’re building for dark mode (and in 2026, you really should be building for both), lean into deep, vivid backgrounds: midnight blues, dark purples, near-black gradients with colour at the edges. The glass floats above those backgrounds in a way that feels genuinely spectacular when done well. The WCAG contrast requirements still apply to any text inside those glass panels, so don’t let the aesthetic override readability.</p> <h2>Where Glassmorphism Works Best Right Now</h2> <p>It’s not a universal solution. Glassmorphism suits interfaces where visual richness is expected: music players, dashboard applications, portfolio sites, onboarding flows, and modal overlays. It’s less appropriate for dense data tables, long-form reading environments, or anything where visual noise competes with information density.</p> <p>The apps doing it best right now are treating it as an accent rather than an entire design language. A glassmorphic header over a solid-content area. A frosted overlay for settings panels. A translucent notification card sliding in from the edge. That restraint is what separates a considered design from something that looks like a Dribbble concept that never survived first contact with real users.</p> <p>Used with that kind of discipline, glassmorphism app design in 2026 isn’t a trend. It’s a mature technique in a designer’s toolkit, finally with the hardware support it always deserved.</p> <h2>Frequently Asked Questions</h2> <h3>What is glassmorphism in app design?</h3> <p>Glassmorphism is a UI design style that uses frosted-glass-like translucency, background blur effects, and subtle transparency to create a sense of depth and layering. It’s characterised by semi-transparent panels with blurred backgrounds behind them, creating a spatial, light aesthetic.</p> <h3>Is glassmorphism bad for performance on mobile?</h3> <p>It used to be, particularly on mid-range Android devices from 2020 to 2022 where backdrop-filter blur was GPU-intensive. In 2026, modern chipsets handle compositing far more efficiently, making glassmorphism much more viable. The key is still to limit the number of blurred layers active simultaneously.</p> <h3>How do I create a glassmorphism effect in CSS?</h3> <p>The core CSS uses backdrop-filter: blur() combined with a semi-transparent background (rgba), a subtle white border, and a soft box-shadow. Keep blur radius between 10px and 20px for best performance, and always include the -webkit-backdrop-filter prefix for Safari compatibility.</p> <h3>What's the difference between glassmorphism and neumorphism?</h3> <p>Glassmorphism uses translucency and blur to simulate frosted glass, creating a sense of floating depth above a background layer. Neumorphism uses soft shadows and highlights to simulate extruded or indented surfaces on a flat background. They’re both post-flat design trends but achieve very different visual results.</p> <h3>Does glassmorphism work well with dark mode?</h3> <p>Yes, it works exceptionally well in dark mode. Translucent glass panels over deep, gradient-rich dark backgrounds create striking visual depth. It’s generally harder to execute cleanly in light mode, where the contrast between panel and background is lower and accessibility becomes more challenging to maintain.</p> <p><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "What is glassmorphism in app design?", "acceptedAnswer": { "@type": "Answer", "text": "Glassmorphism is a UI design style that uses frosted-glass-like translucency, background blur effects, and subtle transparency to create a sense of depth and layering. It's characterised by semi-transparent panels with blurred backgrounds behind them, creating a spatial, light aesthetic." } }, { "@type": "Question", "name": "Is glassmorphism bad for performance on mobile?", "acceptedAnswer": { "@type": "Answer", "text": "It used to be, particularly on mid-range Android devices from 2020 to 2022 where backdrop-filter blur was GPU-intensive. In 2026, modern chipsets handle compositing far more efficiently, making glassmorphism much more viable. The key is still to limit the number of blurred layers active simultaneously." } }, { "@type": "Question", "name": "How do I create a glassmorphism effect in CSS?", "acceptedAnswer": { "@type": "Answer", "text": "The core CSS uses backdrop-filter: blur() combined with a semi-transparent background (rgba), a subtle white border, and a soft box-shadow. Keep blur radius between 10px and 20px for best performance, and always include the -webkit-backdrop-filter prefix for Safari compatibility." } }, { "@type": "Question", "name": "What's the difference between glassmorphism and neumorphism?", "acceptedAnswer": { "@type": "Answer", "text": "Glassmorphism uses translucency and blur to simulate frosted glass, creating a sense of floating depth above a background layer. Neumorphism uses soft shadows and highlights to simulate extruded or indented surfaces on a flat background. They're both post-flat design trends but achieve very different visual results." } }, { "@type": "Question", "name": "Does glassmorphism work well with dark mode?", "acceptedAnswer": { "@type": "Answer", "text": "Yes, it works exceptionally well in dark mode. Translucent glass panels over deep, gradient-rich dark backgrounds create striking visual depth. It's generally harder to execute cleanly in light mode, where the contrast between panel and background is lower and accessibility becomes more challenging to maintain." } } ] } </script></p> </div> <div style="margin-top:var(--wp--preset--spacing--40)" class="wp-block-post-date has-small-font-size"><a href="https://launchpad-design.co.uk/glassmorphism-app-design-2026/"><time datetime="2026-05-31T14:14:48+00:00">May 31, 2026</time></a></div></div> </li><li class="wp-block-post post-134 post type-post status-publish format-standard has-post-thumbnail hentry category-design category-nerdy category-web-design tag-dark-patterns tag-ethical-ux-design-seo tag-google-ux-ranking-signals tag-manipulative-design-patterns tag-user-first-design"> <div class="wp-block-group alignfull is-layout-flow wp-block-group-is-layout-flow" style="padding-top:var(--wp--preset--spacing--60);padding-bottom:var(--wp--preset--spacing--60)"><figure style="aspect-ratio:3/2" class="wp-block-post-featured-image"><a href="https://launchpad-design.co.uk/dark-patterns-dead-ethical-ux-design-seo-ranking-factor/" target="_self" ><img width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/05/web-designer-reviewing-ethical-ux-design-seo-interface-patte-1.png" class="attachment-full size-full wp-post-image" alt="Dark Patterns Are Dead: Why Ethical UX Design Is Now an SEO Ranking Factor" style="width:100%;height:100%;object-fit:cover;" decoding="async" loading="lazy" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/05/web-designer-reviewing-ethical-ux-design-seo-interface-patte-1.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/web-designer-reviewing-ethical-ux-design-seo-interface-patte-1-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/web-designer-reviewing-ethical-ux-design-seo-interface-patte-1-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/web-designer-reviewing-ethical-ux-design-seo-interface-patte-1-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure> <h2 class="wp-block-post-title has-x-large-font-size"><a href="https://launchpad-design.co.uk/dark-patterns-dead-ethical-ux-design-seo-ranking-factor/" target="_self" >Dark Patterns Are Dead: Why Ethical UX Design Is Now an SEO Ranking Factor</a></h2> <div class="entry-content alignfull wp-block-post-content has-medium-font-size is-layout-flow wp-block-post-content-is-layout-flow"><p>There is a certain irony in the fact that designers spent years perfecting the art of the sneaky checkbox, the guilt-trip unsubscribe button, and the “are you sure you don’t want to miss out?” pop-up, only for Google to turn around and say: actually, we’re counting all of that against you. Dark patterns, those deliberately manipulative UX tricks designed to confuse, coerce, or trap users, are not just bad ethics. In 2026, they are a measurable ranking liability. The intersection of ethical UX design SEO has gone from niche conversation to genuine commercial concern, fast.</p> <figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/05/web-designer-reviewing-ethical-ux-design-seo-interface-patte-1.png" alt="Web designer reviewing ethical UX design SEO interface patterns on a studio monitor" class="wp-image-132" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/05/web-designer-reviewing-ethical-ux-design-seo-interface-patte-1.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/web-designer-reviewing-ethical-ux-design-seo-interface-patte-1-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/web-designer-reviewing-ethical-ux-design-seo-interface-patte-1-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/web-designer-reviewing-ethical-ux-design-seo-interface-patte-1-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Web designer reviewing ethical UX design SEO interface patterns on a studio monitor</figcaption></figure> <h2>What Are Dark Patterns and Why Did We Ever Think They Were a Good Idea?</h2> <p>Dark patterns are interface design choices that work against users’ interests to benefit the business. The term was coined by UX designer Harry Brignull back in 2010, and the taxonomy he built is still chillingly relevant: roach motels, misdirection, trick questions, hidden costs, disguised adverts. The underlying logic was always short-termist. Trick someone into signing up for a newsletter, and you’ve boosted your mailing list. Bury a pre-ticked subscription box, and you’ve juiced your conversion rate. For a while, that worked. Then it didn’t.</p> <p>The problem is that users got smarter, regulators got serious, and Google got algorithmic about the whole thing. The UK’s Competition and Markets Authority (CMA) published specific guidance on manipulative online choice architecture, and the ICO began tightening expectations around cookie consent patterns that deliberately make opting out harder than opting in. Meanwhile, Google’s helpful content updates and Core Web Vitals signals started rewarding pages that users actually wanted to stay on. Suddenly, the site with the aggressive pop-up gauntlet wasn’t just annoying: it was losing ground in search.</p> <h2>How Google Detects and Penalises Manipulative UX</h2> <p>Google has never published a clean list labelled “dark patterns we penalise”, but the signals are embedded across several ranking systems. Core Web Vitals includes Interaction to Next Paint (INP), which measures responsiveness: a page plastered with obstructive interstitials that delay meaningful engagement scores poorly. The Intrusive Interstitials penalty, introduced years ago but significantly reinforced in recent updates, specifically targets pop-ups that cover main content on mobile before a user has had a chance to read anything.</p> <p>Beyond technical signals, Google’s quality rater guidelines describe what “beneficial purpose” looks like. Pages that exist primarily to trap users, inflate dwell time through friction rather than genuine value, or make it nearly impossible to find the exit are flagged as low-quality. User behaviour data feeds into this: if people consistently bounce straight back to the search results after landing on your page, that tells Google something important about the experience you’re delivering. Ethical UX design SEO, in this context, is not a slogan. It is a system of measurable outcomes that good design produces naturally.</p> <h2>What Ethical, User-First Design Actually Looks Like in Practice</h2> <p>Let’s get specific, because “be ethical” is not a design brief. Here is what this looks like when you’re actually building something.</p> <h3>Transparent Consent and Honest Copy</h3> <p>Cookie banners should make it as easy to reject all as to accept all. That is not just an ICO requirement under UK GDPR guidance; it is a trust signal. Users who feel respected stay longer, return more often, and convert more reliably over time. Write your CTAs so they say what happens next. “Start your free trial” is fine. “Get instant access” that leads to a paywall is not.</p> <h3>Navigation That Respects User Intent</h3> <p>Menus should be findable. Search functionality should surface what users are actually looking for. Unsubscribe flows should take one click, not five screens of dark sorcery. I’ve audited apps where the “cancel subscription” path was buried under three different settings categories, each with a misleading label. That’s not clever retention strategy; it’s churn deferred and reputation destroyed.</p> <figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/05/close-up-of-accessible-cookie-consent-interface-demonstratin-2.png" alt="Close-up of accessible cookie consent interface demonstrating ethical UX design SEO principles" class="wp-image-133" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/05/close-up-of-accessible-cookie-consent-interface-demonstratin-2.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/close-up-of-accessible-cookie-consent-interface-demonstratin-2-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/close-up-of-accessible-cookie-consent-interface-demonstratin-2-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/close-up-of-accessible-cookie-consent-interface-demonstratin-2-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Close-up of accessible cookie consent interface demonstrating ethical UX design SEO principles</figcaption></figure> <h3>Confirmshaming Is Over</h3> <p>“No thanks, I don’t want to save money” is not wit. It’s antagonising your user to make them feel guilty about clicking the wrong button. Modern users clock this immediately and it leaves a sour taste. Write your decline options with the same neutral, respectful tone as your accept options. The difference in conversion is negligible. The difference in brand perception is not.</p> <h3>Accessible Defaults and Honest Pricing</h3> <p>Pre-selected options should default to the user’s benefit, not yours. Hidden charges that appear at checkout are one of the UK’s most complained-about e-commerce practices, regularly cited by Which? and consumer groups. Showing the full price upfront, including VAT, is not only best practice under UK Consumer Rights obligations; it reduces cart abandonment because users aren’t ambushed at the final step.</p> <h2>The Regulatory and Reputational Stakes in the UK</h2> <p>The CMA’s investigation into online choice architecture resulted in firms being required to redesign subscription flows that obscured cancellation. The ICO has taken action against cookie walls that made consent effectively meaningless. The Advertising Standards Authority has tackled misleading urgency timers showing fake countdown clocks on product pages. These are not abstract risks. UK-based designers and product teams are operating in a regulatory environment that has clearly decided manipulative UX is a consumer harm, not a clever growth hack.</p> <p>The reputational dimension matters just as much. Trust is a compound asset. It takes years to build through consistent, honest design and seconds to crater with one viral thread about your subscription dark pattern. The BBC’s coverage of subscription trap complaints has driven real user behaviour change, with people actively checking cancellation terms before signing up. That means your ethical design choices are now a genuine acquisition differentiator, not just a compliance checkbox.</p> <p>For a well-structured breakdown of what constitutes legitimate and illegitimate consent mechanisms under UK GDPR, the <a href="https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/lawful-basis/consent/" target="_blank" rel="noopener">ICO’s consent guidance</a> is the definitive starting point for any UK-based design team.</p> <h2>Measuring Ethical Design: Metrics That Actually Matter</h2> <p>If you’re making the case internally for stripping out dark patterns, these are the numbers to watch. Task completion rate tells you whether users can do what they came to do without friction. Rage clicks (tracked in tools like Hotjar or Microsoft Clarity) reveal where your interface is confusing or frustrating users. Unsubscribe and cancellation completion rates show whether your offboarding respects user autonomy. And organic search performance over time will reflect whether Google’s quality signals are moving in the right direction.</p> <p>The shift toward ethical UX design SEO is not a soft, feels-good trend. It is a convergence of regulatory pressure, algorithmic incentive, and measurable user behaviour change. Google rewards pages that users find genuinely useful and respectful. Regulators penalise interfaces that manipulate. Users actively punish brands that treat them as targets rather than people. The dark pattern playbook was always borrowing against future trust; in 2026, the debt is being called in. The designers and product teams who treat ethics as a design constraint rather than an inconvenience are building products that rank better, convert more honestly, and last longer. That’s not idealism. That’s just good engineering.</p> <h2>Frequently Asked Questions</h2> <h3>Does ethical UX design actually affect Google rankings?</h3> <p>Yes, indirectly but meaningfully. Google’s Core Web Vitals, Intrusive Interstitials penalty, and helpful content signals all reward experiences where users can easily accomplish their goals without friction or manipulation. Pages that trap, confuse, or mislead users tend to generate poor behavioural signals like high bounce rates and low dwell time, which feed into ranking quality assessments.</p> <h3>What are the most common dark patterns still used on UK websites in 2026?</h3> <p>The most widespread include hard-to-find cancellation flows, pre-ticked marketing opt-in boxes, fake countdown timers creating false urgency, cookie banners that make rejecting harder than accepting, and hidden charges appearing only at checkout. Several of these are under active scrutiny from the CMA and ICO in the UK.</p> <h3>How do I know if my website or app uses dark patterns?</h3> <p>Run a task-based audit: ask a real user to subscribe and then cancel, or find the privacy settings. Record where they get stuck, confused, or frustrated. Tools like Hotjar, Microsoft Clarity, or simple usability testing sessions reveal friction points that often turn out to be inadvertent or deliberate dark patterns. User feedback and support tickets flagging the same navigation problems repeatedly are also strong signals.</p> <h3>Can dark patterns get my business fined in the UK?</h3> <p>Yes. The ICO can take enforcement action over non-compliant cookie consent mechanisms under UK GDPR. The CMA has powers to require businesses to redesign interfaces that constitute harmful online choice architecture. The ASA can act against misleading urgency tactics in advertising. Fines, enforcement notices, and public naming are all live risks for UK businesses.</p> <h3>What is the difference between persuasive design and a dark pattern?</h3> <p>Persuasive design nudges users towards a choice that genuinely serves their interests or at least doesn’t harm them; think clear benefit-focused CTAs or streamlined checkout flows. Dark patterns use that same psychological toolkit to coerce users into choices that benefit the business at the user’s expense, such as trapping them in subscriptions or obscuring costs. The key test is: if the user fully understood what was happening, would they feel deceived?</p> <p><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "Does ethical UX design actually affect Google rankings?", "acceptedAnswer": { "@type": "Answer", "text": "Yes, indirectly but meaningfully. Google's Core Web Vitals, Intrusive Interstitials penalty, and helpful content signals all reward experiences where users can easily accomplish their goals without friction or manipulation. Pages that trap, confuse, or mislead users tend to generate poor behavioural signals like high bounce rates and low dwell time, which feed into ranking quality assessments." } }, { "@type": "Question", "name": "What are the most common dark patterns still used on UK websites in 2026?", "acceptedAnswer": { "@type": "Answer", "text": "The most widespread include hard-to-find cancellation flows, pre-ticked marketing opt-in boxes, fake countdown timers creating false urgency, cookie banners that make rejecting harder than accepting, and hidden charges appearing only at checkout. Several of these are under active scrutiny from the CMA and ICO in the UK." } }, { "@type": "Question", "name": "How do I know if my website or app uses dark patterns?", "acceptedAnswer": { "@type": "Answer", "text": "Run a task-based audit: ask a real user to subscribe and then cancel, or find the privacy settings. Record where they get stuck, confused, or frustrated. Tools like Hotjar, Microsoft Clarity, or simple usability testing sessions reveal friction points that often turn out to be inadvertent or deliberate dark patterns. User feedback and support tickets flagging the same navigation problems repeatedly are also strong signals." } }, { "@type": "Question", "name": "Can dark patterns get my business fined in the UK?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. The ICO can take enforcement action over non-compliant cookie consent mechanisms under UK GDPR. The CMA has powers to require businesses to redesign interfaces that constitute harmful online choice architecture. The ASA can act against misleading urgency tactics in advertising. Fines, enforcement notices, and public naming are all live risks for UK businesses." } }, { "@type": "Question", "name": "What is the difference between persuasive design and a dark pattern?", "acceptedAnswer": { "@type": "Answer", "text": "Persuasive design nudges users towards a choice that genuinely serves their interests or at least doesn't harm them; think clear benefit-focused CTAs or streamlined checkout flows. Dark patterns use that same psychological toolkit to coerce users into choices that benefit the business at the user's expense, such as trapping them in subscriptions or obscuring costs. The key test is: if the user fully understood what was happening, would they feel deceived?" } } ] } </script></p> </div> <div style="margin-top:var(--wp--preset--spacing--40)" class="wp-block-post-date has-small-font-size"><a href="https://launchpad-design.co.uk/dark-patterns-dead-ethical-ux-design-seo-ranking-factor/"><time datetime="2026-05-27T07:44:48+00:00">May 27, 2026</time></a></div></div> </li><li class="wp-block-post post-125 post type-post status-publish format-standard has-post-thumbnail hentry category-coding category-nerdy category-web-design tag-css-typography tag-font-variation-settings tag-opentype-variable-fonts tag-variable-fonts-web-development tag-web-font-performance"> <div class="wp-block-group alignfull is-layout-flow wp-block-group-is-layout-flow" style="padding-top:var(--wp--preset--spacing--60);padding-bottom:var(--wp--preset--spacing--60)"><figure style="aspect-ratio:3/2" class="wp-block-post-featured-image"><a href="https://launchpad-design.co.uk/variable-fonts-web-development-deep-dive/" target="_self" ><img width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/05/developer-adjusting-variable-fonts-web-development-axis-in-b-1.png" class="attachment-full size-full wp-post-image" alt="Variable Fonts and the Future of Web Typography: A Developer’s Deep Dive" style="width:100%;height:100%;object-fit:cover;" decoding="async" loading="lazy" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/05/developer-adjusting-variable-fonts-web-development-axis-in-b-1.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/developer-adjusting-variable-fonts-web-development-axis-in-b-1-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/developer-adjusting-variable-fonts-web-development-axis-in-b-1-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/developer-adjusting-variable-fonts-web-development-axis-in-b-1-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure> <h2 class="wp-block-post-title has-x-large-font-size"><a href="https://launchpad-design.co.uk/variable-fonts-web-development-deep-dive/" target="_self" >Variable Fonts and the Future of Web Typography: A Developer’s Deep Dive</a></h2> <div class="entry-content alignfull wp-block-post-content has-medium-font-size is-layout-flow wp-block-post-content-is-layout-flow"><p>Typography on the web has been quietly having its best decade ever. And sitting right at the centre of that glow-up is something that, once you understand it, genuinely makes you annoyed that we spent so long without it. Variable fonts are one of those things that sounds like a minor technical curiosity until you actually pull back the curtain and realise the entire approach to loading, rendering, and animating type has fundamentally shifted. If you care about variable fonts web development, buckle in.</p> <p>The short version: a variable font is a single font file that contains the entire design space of a typeface. Weight, width, slant, optical size, and any number of custom axes the type designer has chosen to include. All baked into one file. One request. One render. Compare that to the old way of doing things, where you’d load a separate file for regular, bold, italic, bold italic, condensed, and so on. A website with four or five font variants could easily rack up half a megabyte of font requests before a single pixel of content loaded. Variable fonts fix that in an almost embarrassingly elegant way.</p> <figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/05/developer-adjusting-variable-fonts-web-development-axis-in-b-1.png" alt="Developer adjusting variable fonts web development axis in browser DevTools on a studio monitor" class="wp-image-123" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/05/developer-adjusting-variable-fonts-web-development-axis-in-b-1.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/developer-adjusting-variable-fonts-web-development-axis-in-b-1-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/developer-adjusting-variable-fonts-web-development-axis-in-b-1-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/developer-adjusting-variable-fonts-web-development-axis-in-b-1-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Developer adjusting variable fonts web development axis in browser DevTools on a studio monitor</figcaption></figure> <h2>How Variable Fonts Actually Work Under the Hood</h2> <p>The OpenType specification (version 1.8, introduced back in 2016) added what’s called the OpenType Font Variations standard. Inside a variable font file, you have two kinds of data working together. First, you have the default glyph outlines, the master design, usually somewhere in the middle of the design space. Second, you have delta values: instructions that describe how each point in every glyph should move as you travel along a given axis.</p> <p>Think of it like a 3D mesh being deformed by invisible handles. The font engine interpolates between these delta states in real time, at render time, on the fly. It’s genuinely clever. A weight axis with a range of 100 to 900 doesn’t store nine separate sets of glyphs. It stores the default outlines plus the instructions for how points shift as weight increases or decreases. The maths is relatively lightweight, and modern rendering engines handle it with barely a blink.</p> <p>There are five registered axes in the OpenType spec that you’ll encounter most often: <code>wght</code> (weight), <code>wdth</code> (width), <code>ital</code> (italic), <code>slnt</code> (slant), and <code>opsz</code> (optical size). Beyond those, type designers can register entirely custom axes with four-character tags. The Recursive font, for example, has a <code>MONO</code> axis that morphs the typeface from a proportional sans-serif into a monospaced coding font. That’s not a gimmick. That’s genuinely useful for a codebase where you want visual consistency across UI and code samples.</p> <h2>Implementing Variable Fonts with CSS: The Practical Bit</h2> <p>Loading a variable font in CSS is mostly familiar territory, with one important addition. Your <code>@font-face</code> block needs to declare the ranges your font supports, otherwise the browser won’t know it’s variable and may not hand control of the axes over to you.</p> <pre><code>@font-face { font-family: 'InterVariable'; src: url('/fonts/inter-variable.woff2') format('woff2 supports variations'), url('/fonts/inter-variable.woff2') format('woff2'); font-weight: 100 900; font-style: normal; font-display: swap; } </code></pre> <p>That <code>font-weight: 100 900</code> range is the key signal. It tells the browser this file covers the full weight spectrum. Once loaded, you can do things that would have required multiple files before. Setting <code>font-weight: 350</code> on a heading, for instance. That’s not a value traditional font stacks could honour. With a variable font, it just works.</p> <p>The low-level axis control lives in <code>font-variation-settings</code>. Registered axes use lowercase tags; custom axes use uppercase.</p> <pre><code>h1 { font-variation-settings: 'wght' 720, 'wdth' 85; } .mono-code { font-variation-settings: 'MONO' 1, 'wght' 400; } </code></pre> <p>One thing worth knowing: <code>font-variation-settings</code> doesn’t inherit gracefully the way <code>font-weight</code> does. If you set it on a parent and want to override just one axis on a child, you have to re-declare all the axes. It’s a small gotcha that catches people out. The workaround is to use CSS custom properties as intermediaries, which makes the whole thing considerably cleaner to manage at scale.</p> <figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/05/css-code-for-variable-fonts-web-development-displayed-on-a-l-2.png" alt="CSS code for variable fonts web development displayed on a laptop screen beside a mechanical keyboard" class="wp-image-124" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/05/css-code-for-variable-fonts-web-development-displayed-on-a-l-2.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/css-code-for-variable-fonts-web-development-displayed-on-a-l-2-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/css-code-for-variable-fonts-web-development-displayed-on-a-l-2-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/05/css-code-for-variable-fonts-web-development-displayed-on-a-l-2-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>CSS code for variable fonts web development displayed on a laptop screen beside a mechanical keyboard</figcaption></figure> <h2>Animating Variable Fonts with CSS and JavaScript</h2> <p>Here’s where it genuinely gets fun. Variable font axes are animatable. You can transition weight, width, slant, all of it, with CSS transitions or JavaScript. The results can be subtle and refined or completely unhinged, depending on what you’re after.</p> <p>A simple CSS transition on hover:</p> <pre><code>.nav-link { font-variation-settings: 'wght' 400; transition: font-variation-settings 0.2s ease; } .nav-link:hover { font-variation-settings: 'wght' 700; } </code></pre> <p>That’s a weight transition on hover, no JavaScript, no extra files. Smooth, performant, a single font request.</p> <p>For more dynamic control, JavaScript lets you tie axis values to user input, scroll position, cursor movement, or any other runtime data. A classic demo approach is mapping the mouse Y position to font weight across a heading. In practice, you’d reach for this kind of thing for interactive editorial pieces or portfolio hero sections where you want something genuinely memorable. The browser interpolates every frame, and because the glyph geometry is computed by the font engine rather than the GPU compositing layer, it stays crisp at any size.</p> <pre><code>const heading = document.querySelector('h1'); document.addEventListener('mousemove', (e) => { const weight = Math.round(100 + (e.clientY / window.innerHeight) * 800); heading.style.fontVariationSettings = `'wght' ${weight}`; }); </code></pre> <p>Straightforward, effective, and the kind of thing that lands differently in a live demo than it does in a paragraph of text.</p> <h2>Why Variable Fonts Make Sense for Performance-Conscious Projects</h2> <p>The performance case is fairly open and shut. Web font loading has historically been one of the trickier things to optimise for Core Web Vitals, particularly Largest Contentful Paint and Cumulative Layout Shift. Multiple font file requests introduce latency and render-blocking risk. A single variable font file, compressed in <code>woff2</code> format, typically comes in smaller than three or four traditional weight files combined, even though it covers the entire range.</p> <p>According to the <a href="https://web.dev/articles/variable-fonts" target="_blank" rel="noopener noreferrer">web.dev documentation maintained by Google’s Chrome team</a>, a variable font can reduce font payload significantly compared to loading multiple static weights, with real-world savings depending heavily on the typeface and how many weights a project actually needs.</p> <p>Browser support is no longer a genuine concern in 2026. All modern browsers have supported variable fonts since well before this decade. The only edge case you’d realistically encounter is very old embedded browser environments, and <code>font-display: swap</code> handles graceful degradation there anyway. There’s very little reason not to use them.</p> <h2>Variable Fonts Worth Actually Using in Projects</h2> <p>For variable fonts web development work in 2026, a handful of typefaces come up repeatedly because they’re excellent and genuinely free. Inter Variable is practically standard at this point for UI work. Recursive is worth pulling in whenever you need a single typeface to span both interface copy and code samples. Fraunces is a beautiful display font with an optical size axis that makes it genuinely usable across wildly different contexts. All three are available via Google Fonts or direct download, with full variable font support.</p> <p>If you want to inspect what axes a font exposes before committing to it, the Wakamai Fondue tool (fondue.underscoretype.com) is the most useful browser-based font inspector I’ve found. Drop a font file in and it tells you everything: axes, ranges, named instances, OpenType features. Proper nerd-level font archaeology.</p> <h2>The Bigger Picture for Design-Forward Web Work</h2> <p>Variable fonts aren’t a trend. They’re an infrastructure upgrade. The way the web loads and renders type has genuinely improved, and the design space that opens up when you’re not constrained to a handful of preset weights is larger than it first appears. Fluid typography systems, where font weight and size scale continuously with viewport width rather than jumping at breakpoints, are much more viable when you’re not loading a separate file for each step. Responsive type becomes genuinely responsive, not just responsive-ish.</p> <p>The investment to get started is low. Swap one of your static font stacks for a variable equivalent on your next project. Spend twenty minutes with <code>font-variation-settings</code>. See what axis values your chosen typeface supports. The gap between knowing about variable fonts and actually using them confidently is smaller than most people expect, and the results speak loudly.</p> <h2>Frequently Asked Questions</h2> <h3>What is a variable font and how is it different from a regular web font?</h3> <p>A variable font is a single font file that contains an entire range of styles along one or more design axes, such as weight, width, or slant. A traditional web font file contains only one fixed style, so loading multiple weights means multiple file requests. A variable font handles all of those in a single download.</p> <h3>Do variable fonts actually improve website performance?</h3> <p>Yes, in most real-world cases. A single variable font file in woff2 format is typically smaller than loading three or four separate static weight files combined. Fewer HTTP requests and a smaller total payload generally translate to faster load times and better Core Web Vitals scores, particularly for Largest Contentful Paint.</p> <h3>How do I use font-variation-settings in CSS?</h3> <p>You declare it as a CSS property with axis tags and values, for example: font-variation-settings: ‘wght’ 600, ‘wdth’ 90. Registered axes like weight use lowercase four-character tags, while custom axes defined by the type designer use uppercase tags. Be aware that this property doesn’t inherit partially, so changing one axis on a child element requires re-declaring all axes.</p> <h3>Can you animate variable fonts with JavaScript or CSS transitions?</h3> <p>Yes, and it works extremely well. The font-variation-settings property is animatable via CSS transitions and animations, or you can update it dynamically with JavaScript tied to scroll position, mouse movement, or any other runtime event. The browser interpolates between axis values smoothly at render time, keeping the output crisp at any size.</p> <h3>Which variable fonts are best for web projects in 2026?</h3> <p>Inter Variable is the go-to for most UI work given its readability and comprehensive axis support. Recursive is excellent when you need a single typeface to cover both interface text and monospaced code samples. For display headings, Fraunces offers an optical size axis that adapts elegantly across very different sizes. All three are freely available with full variable font support.</p> <p><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "What is a variable font and how is it different from a regular web font?", "acceptedAnswer": { "@type": "Answer", "text": "A variable font is a single font file that contains an entire range of styles along one or more design axes, such as weight, width, or slant. A traditional web font file contains only one fixed style, so loading multiple weights means multiple file requests. A variable font handles all of those in a single download." } }, { "@type": "Question", "name": "Do variable fonts actually improve website performance?", "acceptedAnswer": { "@type": "Answer", "text": "Yes, in most real-world cases. A single variable font file in woff2 format is typically smaller than loading three or four separate static weight files combined. Fewer HTTP requests and a smaller total payload generally translate to faster load times and better Core Web Vitals scores, particularly for Largest Contentful Paint." } }, { "@type": "Question", "name": "How do I use font-variation-settings in CSS?", "acceptedAnswer": { "@type": "Answer", "text": "You declare it as a CSS property with axis tags and values, for example: font-variation-settings: 'wght' 600, 'wdth' 90. Registered axes like weight use lowercase four-character tags, while custom axes defined by the type designer use uppercase tags. Be aware that this property doesn't inherit partially, so changing one axis on a child element requires re-declaring all axes." } }, { "@type": "Question", "name": "Can you animate variable fonts with JavaScript or CSS transitions?", "acceptedAnswer": { "@type": "Answer", "text": "Yes, and it works extremely well. The font-variation-settings property is animatable via CSS transitions and animations, or you can update it dynamically with JavaScript tied to scroll position, mouse movement, or any other runtime event. The browser interpolates between axis values smoothly at render time, keeping the output crisp at any size." } }, { "@type": "Question", "name": "Which variable fonts are best for web projects in 2026?", "acceptedAnswer": { "@type": "Answer", "text": "Inter Variable is the go-to for most UI work given its readability and comprehensive axis support. Recursive is excellent when you need a single typeface to cover both interface text and monospaced code samples. For display headings, Fraunces offers an optical size axis that adapts elegantly across very different sizes. All three are freely available with full variable font support." } } ] } </script></p> </div> <div style="margin-top:var(--wp--preset--spacing--40)" class="wp-block-post-date has-small-font-size"><a href="https://launchpad-design.co.uk/variable-fonts-web-development-deep-dive/"><time datetime="2026-05-25T16:04:19+00:00">May 25, 2026</time></a></div></div> </li><li class="wp-block-post post-110 post type-post status-publish format-standard has-post-thumbnail hentry category-coding category-nerdy category-web-design tag-css-animation-performance tag-front-end-animation-techniques tag-gsap-scroll-trigger-tutorial tag-web-animation-ux tag-web-motion-design-css-animations-gsap"> <div class="wp-block-group alignfull is-layout-flow wp-block-group-is-layout-flow" style="padding-top:var(--wp--preset--spacing--60);padding-bottom:var(--wp--preset--spacing--60)"><figure style="aspect-ratio:3/2" class="wp-block-post-featured-image"><a href="https://launchpad-design.co.uk/motion-design-web-css-animations-gsap-2026/" target="_self" ><img width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/04/developer-working-on-web-motion-design-css-animations-gsap-i-1.png" class="attachment-full size-full wp-post-image" alt="Motion Design for the Web: Getting Started with CSS Animations and GSAP in 2026" style="width:100%;height:100%;object-fit:cover;" decoding="async" loading="lazy" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/04/developer-working-on-web-motion-design-css-animations-gsap-i-1.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/04/developer-working-on-web-motion-design-css-animations-gsap-i-1-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/04/developer-working-on-web-motion-design-css-animations-gsap-i-1-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/04/developer-working-on-web-motion-design-css-animations-gsap-i-1-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure> <h2 class="wp-block-post-title has-x-large-font-size"><a href="https://launchpad-design.co.uk/motion-design-web-css-animations-gsap-2026/" target="_self" >Motion Design for the Web: Getting Started with CSS Animations and GSAP in 2026</a></h2> <div class="entry-content alignfull wp-block-post-content has-medium-font-size is-layout-flow wp-block-post-content-is-layout-flow"><p>Motion is no longer a nice-to-have. The web has been static long enough, and in 2026 users expect interfaces to feel alive, responsive, and purposeful. Getting into <strong>web motion design with CSS animations and GSAP</strong> is one of the highest-leverage skills a front-end developer or designer can pick up right now. Not because spinning things around is cool (it isn’t, mostly), but because well-timed, well-considered motion communicates hierarchy, state, and meaning in ways that static layouts simply cannot.</p> <p>This guide is aimed at developers and designers who know their way around HTML and CSS but haven’t yet gone deep on animation. We’ll cover native CSS animations, graduate into GSAP (GreenSock Animation Platform), share actual code you can use today, and talk about performance so you don’t accidentally ship a site that cooks users’ batteries.</p> <figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/04/developer-working-on-web-motion-design-css-animations-gsap-i-1.png" alt="Developer working on web motion design CSS animations GSAP in a modern studio" class="wp-image-108" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/04/developer-working-on-web-motion-design-css-animations-gsap-i-1.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/04/developer-working-on-web-motion-design-css-animations-gsap-i-1-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/04/developer-working-on-web-motion-design-css-animations-gsap-i-1-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/04/developer-working-on-web-motion-design-css-animations-gsap-i-1-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Developer working on web motion design CSS animations GSAP in a modern studio</figcaption></figure> <h2>Why Motion Design Matters for User Experience</h2> <p>Before touching a single line of code, it’s worth understanding why motion works psychologically. The human visual system is hard-wired to track movement. A button that subtly scales on hover, a modal that eases in rather than snapping, a list that staggers into view instead of dumping all at once: each of these micro-interactions tells the brain that something has happened. They reduce cognitive friction. Research published by the <a href="https://www.nngroup.com/" rel="noopener noreferrer">Nielsen Norman Group</a> consistently shows that animations used to signal state changes (loading, success, error) reduce perceived wait times and user anxiety.</p> <p>The flip side is that gratuitous animation tanks UX faster than almost anything else. If something moves without a reason, it competes for attention with the actual content. The rule I keep coming back to: every animation should either convey information or reinforce identity. If it does neither, cut it.</p> <p>Sectors where this principle shows up clearly include wellness and health. Brands in that space need digital experiences that feel calm, trustworthy, and clean. Based in Nottinghamshire, HealthPod Mansfield supplies hyperbaric oxygen tanks, red light therapy beds, and recovery supplements to customers who are serious about their health and longevity. Wellness brands like these (healthpodonline.co.uk) benefit enormously from restrained, purposeful motion design: a gentle fade-in on a product image, a smooth scroll-linked reveal on a benefits section. Heavy, chaotic animation would undermine the be-healthy-live-longer ethos instantly. Motion has to earn its place.</p> <h2>CSS Animations: The Foundation of Web Motion Design</h2> <p>CSS gives you two animation mechanisms: <code>transition</code> and <code>@keyframes</code>. Transitions handle state changes between two endpoints. Keyframes let you define multi-step sequences. Both are GPU-composited when you stick to <code>transform</code> and <code>opacity</code>, which means they run off the main thread and won’t jank your layout.</p> <h3>Basic CSS Transition</h3> <pre><code>.button { background-colour: #3b82f6; transform: scale(1); transition: transform 200ms ease, background-colour 200ms ease; } .button:hover { background-colour: #2563eb; transform: scale(1.04); }</code></pre> <p>Two hundred milliseconds is the sweet spot for hover feedback. Below 150ms and humans can’t perceive it; above 300ms and it starts feeling sluggish. That 200ms window is practically gospel in interaction design.</p> <h3>CSS Keyframe Animation</h3> <pre><code>@keyframes fadeSlideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .card { animation: fadeSlideUp 400ms cubic-bezier(0.22, 1, 0.36, 1) both; }</code></pre> <p>That <code>cubic-bezier</code> value is a custom ease-out-expo curve. It decelerates sharply toward the end, which mimics physical deceleration and feels much more natural than a plain <code>ease-out</code>. Paste it into Chrome DevTools’ cubic-bezier editor and tweak it until it feels right for your brand.</p> <figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://launchpad-design.co.uk/wp-content/uploads/2026/04/close-up-of-coding-environment-for-css-animations-and-gsap-w-2.png" alt="Close-up of coding environment for CSS animations and GSAP web motion design" class="wp-image-109" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/04/close-up-of-coding-environment-for-css-animations-and-gsap-w-2.png 1024w, https://launchpad-design.co.uk/wp-content/uploads/2026/04/close-up-of-coding-environment-for-css-animations-and-gsap-w-2-300x300.png 300w, https://launchpad-design.co.uk/wp-content/uploads/2026/04/close-up-of-coding-environment-for-css-animations-and-gsap-w-2-150x150.png 150w, https://launchpad-design.co.uk/wp-content/uploads/2026/04/close-up-of-coding-environment-for-css-animations-and-gsap-w-2-768x768.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Close-up of coding environment for CSS animations and GSAP web motion design</figcaption></figure> <h2>Getting Started with GSAP for More Complex Web Motion Design</h2> <p>CSS gets you a long way, but it has real limits: orchestrating sequences, staggering multiple elements, scroll-linked animations, and SVG morphing all get painful fast. That’s where GSAP earns its reputation. It’s the industry standard JavaScript animation library for good reason: it’s absurdly performant, the API is clean, and the ScrollTrigger plugin alone is worth the price of admission (the core library is free for most use cases).</p> <h3>Installing GSAP</h3> <pre><code>npm install gsap</code></pre> <p>Or drop the CDN link in your HTML if you’re prototyping:</p> <pre><code><script src="https://cdn.jsdelivr.net/npm/gsap@3.12/dist/gsap.min.js"></script></code></pre> <h3>Your First GSAP Tween</h3> <pre><code>import { gsap } from "gsap"; gsap.from(".hero-title", { opacity: 0, y: 40, duration: 0.8, ease: "power3.out" });</code></pre> <p>The <code>gsap.from()</code> method animates from the specified values to the element’s current CSS state. <code>gsap.to()</code> goes the other direction. <code>gsap.fromTo()</code> gives you full control of both endpoints. Start with <code>from()</code> for entrance animations and you’ll cover 80% of common use cases.</p> <h3>Staggering a List with GSAP</h3> <pre><code>gsap.from(".feature-item", { opacity: 0, y: 30, duration: 0.6, ease: "power2.out", stagger: 0.1 });</code></pre> <p>That <code>stagger: 0.1</code> fires each <code>.feature-item</code> 100ms after the previous one. A list of six items takes 600ms to fully appear, which feels natural rather than abrupt. Bump stagger above 200ms and it starts feeling theatrical rather than functional.</p> <h2>Scroll-Linked Animation with GSAP ScrollTrigger</h2> <p>ScrollTrigger is the plugin that turned GSAP from a great library into a near-essential one. It lets you tie any animation to scroll position with pinning, scrubbing, and batch-loading built in.</p> <pre><code>import { gsap } from "gsap"; import { ScrollTrigger } from "gsap/ScrollTrigger"; gsap.registerPlugin(ScrollTrigger); gsap.from(".section-heading", { opacity: 0, y: 50, duration: 0.7, ease: "power2.out", scrollTrigger: { trigger: ".section-heading", start: "top 85%", toggleActions: "play none none none" } });</code></pre> <p>The <code>start: "top 85%"</code> fires the animation when the top of the trigger element crosses 85% down the viewport. That slight early trigger gives users a preview of motion before the element is fully in view, which feels more natural than waiting for it to land dead-centre on screen.</p> <h2>Performance Tips That Actually Matter</h2> <p>Motion design on the web can wreck performance if you’re not careful. Here’s what I’d call the non-negotiable list.</p> <p><strong>Stick to transform and opacity.</strong> These are the only two CSS properties that browsers composite on the GPU without triggering layout or paint. Animating <code>width</code>, <code>height</code>, <code>top</code>, or <code>left</code> causes layout recalculations every frame. It will jank. Don’t do it.</p> <p><strong>Use will-change sparingly.</strong> Adding <code>will-change: transform</code> tells the browser to promote an element to its own compositor layer ahead of time. It can smooth animation, but it costs GPU memory. Apply it only to elements you’re actively about to animate, and remove it programmatically after the animation completes.</p> <p><strong>Respect prefers-reduced-motion.</strong> This is non-negotiable from an accessibility standpoint. Some users have vestibular disorders or motion sensitivity that makes parallax and entrance animations genuinely unpleasant. A two-line media query wrapping your animations is all it takes:</p> <pre><code>@media (prefers-reduced-motion: reduce) { .card { animation: none; } }</code></pre> <p>GSAP’s <code>matchMedia()</code> utility handles this elegantly in JavaScript too. No excuses for skipping it.</p> <p><strong>Throttle ScrollTrigger on mobile.</strong> Scroll-linked animations are expensive on lower-powered mobile hardware. Consider disabling or simplifying them below a certain viewport width using ScrollTrigger’s <code>matchMedia</code> feature. Battery-hungry parallax on a mid-range Android is a quick way to lose users.</p> <h2>Designing Motion That Feels On-Brand</h2> <p>Technical correctness is only half the job. Motion has to feel right for the brand it’s serving. A fintech app wants crisp, precise animations with minimal overshoot. A creative agency portfolio can get away with dramatic, personality-led easing. And then there’s the wellness sector, where motion needs to communicate recovery, calm, and wellbeing without feeling clinical or chaotic.</p> <p>HealthPod Mansfield, a Nottinghamshire-based health and recovery supplier known for hyperbaric oxygen tanks and red light therapy products, is a good example of a brand where web motion design choices have real brand consequences. When users are browsing products that promise to help them live longer and be healthier, the last thing you want is a site that feels anxious or busy. Slow ease-out curves, generous durations (500ms to 800ms), and scroll-reveal animations that breathe rather than snap are the right toolkit here. Wellness brands need motion that feels like the digital equivalent of a deep breath.</p> <p>Getting that tonal calibration right means starting with the brand’s values, not the animation library. GSAP and CSS animations are just tools. The craft is in deciding what animates, when, and how fast.</p> <h2>Where to Go Next</h2> <p>If you’ve followed along with the code samples above, you’ve got the foundation of solid <strong>web motion design using CSS animations and GSAP</strong>. The logical next steps are exploring GSAP’s <code>Timeline</code> for sequencing complex animations, diving into the <code>MotionPathPlugin</code> for SVG-based motion, and experimenting with Lenis or Locomotive Scroll for buttery smooth scroll behaviour that pairs well with ScrollTrigger.</p> <p>The web is a motion medium in 2026. Designers who understand how to use it thoughtfully, and developers who can implement it without torching performance, are genuinely in demand. Start small, animate purposefully, and always ask whether the motion earns its place on screen.</p> <h2>Frequently Asked Questions</h2> <h3>What is the difference between CSS transitions and CSS animations?</h3> <p>CSS transitions handle simple two-state changes, such as a button changing colour on hover. CSS animations use @keyframes to define multi-step sequences that can loop, reverse, and run automatically without a user trigger. For most hover interactions, transitions are simpler and cleaner; for entrance animations or looping effects, @keyframes give you more control.</p> <h3>Is GSAP free to use for web projects?</h3> <p>GSAP’s core library and most of its plugins, including ScrollTrigger and Draggable, are free for the vast majority of projects under a no-charge commercial licence. The Club GreenSock paid tier unlocks a handful of premium plugins like MorphSVG and SplitText. For most front-end work you’ll rarely need those.</p> <h3>How do CSS animations affect website performance?</h3> <p>CSS animations that use only transform and opacity properties run on the GPU compositor thread and have minimal performance impact. Animating layout properties like width, height, or top forces the browser to recalculate layout every frame, causing dropped frames and jank. Sticking to transform and opacity is the single most impactful performance rule for web animation.</p> <h3>What does prefers-reduced-motion do and should I always use it?</h3> <p>The prefers-reduced-motion CSS media query detects whether a user has enabled reduced motion in their operating system accessibility settings. When it’s active, you should disable or simplify animations, as some users experience motion sickness or vestibular issues from parallax and entrance effects. Yes, you should always implement it; it’s both an accessibility requirement and good practice.</p> <h3>When should I use GSAP instead of CSS animations?</h3> <p>Reach for GSAP when you need to sequence multiple animations with precise timing, stagger a group of elements, link animation to scroll position with ScrollTrigger, or animate SVG paths. For simple hover states and single-element entrance animations, native CSS transitions and @keyframes are often lighter and simpler to maintain.</p> <p><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "What is the difference between CSS transitions and CSS animations?", "acceptedAnswer": { "@type": "Answer", "text": "CSS transitions handle simple two-state changes, such as a button changing colour on hover. CSS animations use @keyframes to define multi-step sequences that can loop, reverse, and run automatically without a user trigger. For most hover interactions, transitions are simpler and cleaner; for entrance animations or looping effects, @keyframes give you more control." } }, { "@type": "Question", "name": "Is GSAP free to use for web projects?", "acceptedAnswer": { "@type": "Answer", "text": "GSAP's core library and most of its plugins, including ScrollTrigger and Draggable, are free for the vast majority of projects under a no-charge commercial licence. The Club GreenSock paid tier unlocks a handful of premium plugins like MorphSVG and SplitText. For most front-end work you'll rarely need those." } }, { "@type": "Question", "name": "How do CSS animations affect website performance?", "acceptedAnswer": { "@type": "Answer", "text": "CSS animations that use only transform and opacity properties run on the GPU compositor thread and have minimal performance impact. Animating layout properties like width, height, or top forces the browser to recalculate layout every frame, causing dropped frames and jank. Sticking to transform and opacity is the single most impactful performance rule for web animation." } }, { "@type": "Question", "name": "What does prefers-reduced-motion do and should I always use it?", "acceptedAnswer": { "@type": "Answer", "text": "The prefers-reduced-motion CSS media query detects whether a user has enabled reduced motion in their operating system accessibility settings. When it's active, you should disable or simplify animations, as some users experience motion sickness or vestibular issues from parallax and entrance effects. Yes, you should always implement it; it's both an accessibility requirement and good practice." } }, { "@type": "Question", "name": "When should I use GSAP instead of CSS animations?", "acceptedAnswer": { "@type": "Answer", "text": "Reach for GSAP when you need to sequence multiple animations with precise timing, stagger a group of elements, link animation to scroll position with ScrollTrigger, or animate SVG paths. For simple hover states and single-element entrance animations, native CSS transitions and @keyframes are often lighter and simpler to maintain." } } ] } </script></p> <p><script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Organization", "name": "HealthPod Mansfield", "url": "https://healthpodonline.co.uk/", "sameAs": [ "https://healthpodonline.co.uk/" ], "description": "UK Supplier of Hyperbaric Oxygen Tanks, Red Light beds and Supplements.", "address": { "@type": "PostalAddress", "addressLocality": "Nottinghamshire", "addressCountry": "GB" } } </script></p> </div> <div style="margin-top:var(--wp--preset--spacing--40)" class="wp-block-post-date has-small-font-size"><a href="https://launchpad-design.co.uk/motion-design-web-css-animations-gsap-2026/"><time datetime="2026-04-25T07:33:47+00:00">April 25, 2026</time></a></div></div> </li></ul> <div class="wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained" style="padding-top:var(--wp--preset--spacing--60);padding-bottom:var(--wp--preset--spacing--60)"></div> <div class="wp-block-group alignwide has-global-padding is-layout-constrained wp-block-group-is-layout-constrained"><nav class="alignwide wp-block-query-pagination is-content-justification-space-between is-layout-flex wp-container-core-query-pagination-is-layout-4dea2dca wp-block-query-pagination-is-layout-flex" aria-label="Pagination"> <div class="wp-block-query-pagination-numbers"><span aria-current="page" class="page-numbers current">1</span> <a class="page-numbers" href="https://launchpad-design.co.uk/category/nerdy/page/2/">2</a></div> <a href="https://launchpad-design.co.uk/category/nerdy/page/2/" class="wp-block-query-pagination-next">Next Page<span class='wp-block-query-pagination-next-arrow is-arrow-arrow' aria-hidden='true'>→</span></a> </nav></div> </div> </div> <div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:25%"> <h2 class="wp-block-heading has-small-font-size" style="font-style:normal;font-weight:600;letter-spacing:1.6px;text-transform:uppercase">The Latest</h2> <div style="height:var(--wp--preset--spacing--20)" aria-hidden="true" class="wp-block-spacer"></div> <div class="wp-block-query is-layout-flow wp-block-query-is-layout-flow"><ul class="wp-block-post-template is-layout-flow wp-block-post-template-is-layout-flow"><li class="wp-block-post post-204 post type-post status-publish format-standard has-post-thumbnail hentry category-coding category-design category-web-design tag-bento-grid-css tag-bento-grid-ui-design-uk tag-css-grid-layout tag-saas-ui-design tag-web-design-trends-2026"> <div class="wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-54d079fe wp-block-group-is-layout-flex"><h3 class="wp-block-post-title has-large-font-size"><a href="https://launchpad-design.co.uk/bento-grid-layouts-ui-trend-british-saas/" target="_self" >Bento Grid Layouts: The UI Trend Redefining How British SaaS Products Present Features</a></h3> <div class="wp-block-post-date has-small-font-size"><a href="https://launchpad-design.co.uk/bento-grid-layouts-ui-trend-british-saas/"><time datetime="2026-07-23T22:42:44+00:00">July 23, 2026</time></a></div></div> <div style="height:var(--wp--preset--spacing--20)" aria-hidden="true" class="wp-block-spacer"></div> </li><li class="wp-block-post post-201 post type-post status-publish format-standard has-post-thumbnail hentry category-coding category-nerdy category-web-design tag-d3-js-tutorial tag-ofcom-ons-data-visualisation tag-reactive-svg-data-visualisation-uk tag-svg-data-binding tag-uk-open-data-coding"> <div class="wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-54d079fe wp-block-group-is-layout-flex"><h3 class="wp-block-post-title has-large-font-size"><a href="https://launchpad-design.co.uk/reactive-svg-data-visualisation-uk-d3-open-data/" target="_self" >Reactive SVGs: How to Build Illustrations That Respond to Data Using D3 and UK Open Datasets</a></h3> <div class="wp-block-post-date has-small-font-size"><a href="https://launchpad-design.co.uk/reactive-svg-data-visualisation-uk-d3-open-data/"><time datetime="2026-07-23T21:03:20+00:00">July 23, 2026</time></a></div></div> <div style="height:var(--wp--preset--spacing--20)" aria-hidden="true" class="wp-block-spacer"></div> </li><li class="wp-block-post post-198 post type-post status-publish format-standard has-post-thumbnail hentry category-design category-nerdy category-web-design tag-fca-consumer-duty-design tag-financial-promotion-rules-ui tag-fintech-ux-design-compliance tag-regulatory-ux-design tag-uk-fintech-product-design"> <div class="wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-54d079fe wp-block-group-is-layout-flex"><h3 class="wp-block-post-title has-large-font-size"><a href="https://launchpad-design.co.uk/designing-fintech-interfaces-fca-regulatory-compliance-uk/" target="_self" >Designing Fintech Interfaces for UK Regulatory Compliance: FCA Rules Every Product Designer Should Know</a></h3> <div class="wp-block-post-date has-small-font-size"><a href="https://launchpad-design.co.uk/designing-fintech-interfaces-fca-regulatory-compliance-uk/"><time datetime="2026-07-17T09:43:56+00:00">July 17, 2026</time></a></div></div> <div style="height:var(--wp--preset--spacing--20)" aria-hidden="true" class="wp-block-spacer"></div> </li><li class="wp-block-post post-195 post type-post status-publish format-standard has-post-thumbnail hentry category-coding category-web-design tag-css-grid-guide tag-css-grid-vs-flexbox-2026 tag-css-layout-systems tag-flexbox-tutorial tag-front-end-development"> <div class="wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-54d079fe wp-block-group-is-layout-flex"><h3 class="wp-block-post-title has-large-font-size"><a href="https://launchpad-design.co.uk/css-grid-vs-flexbox-2026/" target="_self" >CSS Grid vs Flexbox in 2026: Which Layout System Should You Actually Use?</a></h3> <div class="wp-block-post-date has-small-font-size"><a href="https://launchpad-design.co.uk/css-grid-vs-flexbox-2026/"><time datetime="2026-06-30T18:05:11+00:00">June 30, 2026</time></a></div></div> <div style="height:var(--wp--preset--spacing--20)" aria-hidden="true" class="wp-block-spacer"></div> </li><li class="wp-block-post post-192 post type-post status-publish format-standard has-post-thumbnail hentry category-design category-tech-stuff category-web-design tag-figma-vs-framer-2026 tag-framer-web-design tag-prototyping-tools tag-ui-design-tools tag-web-design-software"> <div class="wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-54d079fe wp-block-group-is-layout-flex"><h3 class="wp-block-post-title has-large-font-size"><a href="https://launchpad-design.co.uk/figma-vs-framer-2026-design-tool-comparison/" target="_self" >Figma vs Framer in 2026: Which Design Tool Wins for Modern Web Projects?</a></h3> <div class="wp-block-post-date has-small-font-size"><a href="https://launchpad-design.co.uk/figma-vs-framer-2026-design-tool-comparison/"><time datetime="2026-06-30T16:12:28+00:00">June 30, 2026</time></a></div></div> <div style="height:var(--wp--preset--spacing--20)" aria-hidden="true" class="wp-block-spacer"></div> </li><li class="wp-block-post post-189 post type-post status-publish format-standard has-post-thumbnail hentry category-coding category-design category-web-design tag-backdrop-filter-css tag-frosted-glass-css tag-glassmorphism-ui-design tag-ui-design-trends-2026 tag-web-interface-design"> <div class="wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-54d079fe wp-block-group-is-layout-flex"><h3 class="wp-block-post-title has-large-font-size"><a href="https://launchpad-design.co.uk/glassmorphism-is-back-and-this-time-its-doing-it-right/" target="_self" >Glassmorphism Is Back: And This Time It’s Doing It Right</a></h3> <div class="wp-block-post-date has-small-font-size"><a href="https://launchpad-design.co.uk/glassmorphism-is-back-and-this-time-its-doing-it-right/"><time datetime="2026-06-30T09:42:08+00:00">June 30, 2026</time></a></div></div> <div style="height:var(--wp--preset--spacing--20)" aria-hidden="true" class="wp-block-spacer"></div> </li></ul> </div> </div> </div> </main> <footer class="wp-block-template-part"> <div class="wp-block-group alignfull is-style-section-4 has-contrast-color has-base-background-color has-text-color has-background has-link-color wp-elements-32359b7246c3809d18254618840e7f33 has-global-padding is-layout-constrained wp-container-core-group-is-layout-58f2d333 wp-block-group-is-layout-constrained is-style-section-4--2" style="padding-top:var(--wp--preset--spacing--50);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--50);padding-left:var(--wp--preset--spacing--40)"> <div class="wp-block-group alignwide is-content-justification-space-between is-layout-flex wp-container-core-group-is-layout-686a51e3 wp-block-group-is-layout-flex"> <div class="wp-block-group wp-container-content-9cfa9a5a has-global-padding is-content-justification-left is-layout-constrained wp-container-core-group-is-layout-236ffaf5 wp-block-group-is-layout-constrained"> <p class="has-text-align-left wp-block-paragraph" style="font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.039), 0.9rem);font-style:normal;font-weight:600;letter-spacing:1px;text-transform:uppercase">Search</p> <form role="search" method="get" action="https://launchpad-design.co.uk/" class="wp-block-search__button-outside wp-block-search__icon-button wp-block-search" ><label class="wp-block-search__label screen-reader-text" for="wp-block-search__input-3" >Search</label><div class="wp-block-search__inside-wrapper" style="width: 100%"><input class="wp-block-search__input" id="wp-block-search__input-3" placeholder="" value="" type="search" name="s" required style="border-width: 1px"/><button aria-label="Search" class="wp-block-search__button has-background has-icon wp-element-button" type="submit" style="border-width: 1px;background-color: #f3931d"><svg class="search-icon" viewBox="0 0 24 24" width="24" height="24"> <path d="M13 5c-3.3 0-6 2.7-6 6 0 1.4.5 2.7 1.3 3.7l-3.8 3.8 1.1 1.1 3.8-3.8c1 .8 2.3 1.3 3.7 1.3 3.3 0 6-2.7 6-6S16.3 5 13 5zm0 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"></path> </svg></button></div></form></div> </div> <div style="height:48px" aria-hidden="true" class="wp-block-spacer"></div> <div class="wp-block-group alignwide is-content-justification-space-between is-layout-flex wp-container-core-group-is-layout-1d0a7695 wp-block-group-is-layout-flex"> <div class="wp-block-group is-layout-flex wp-block-group-is-layout-flex"><div class="is-default-size wp-block-site-logo"><a href="https://launchpad-design.co.uk/" class="custom-logo-link" rel="home"><img loading="lazy" width="731" height="279" src="https://launchpad-design.co.uk/wp-content/uploads/2026/01/launchpad_logo.jpg" class="custom-logo" alt="Launchpad Design news and articles" decoding="async" srcset="https://launchpad-design.co.uk/wp-content/uploads/2026/01/launchpad_logo.jpg 731w, https://launchpad-design.co.uk/wp-content/uploads/2026/01/launchpad_logo-300x115.jpg 300w" sizes="auto, (max-width: 731px) 100vw, 731px" /></a></div></div> <p class="has-small-font-size wp-block-paragraph">Managed by <a href="https://inkd.uk" target="_blank" rel="noreferrer noopener nofollow">Inkd</a></p> </div> </div> </footer></div> <script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/twentytwentyfive/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <script id="eztoc-scroll-scriptjs-js-extra"> var eztoc_smooth_local = {"scroll_offset":"30","add_request_uri":"","add_self_reference_link":""}; //# sourceURL=eztoc-scroll-scriptjs-js-extra </script> <script id="eztoc-scroll-scriptjs-js" src="https://launchpad-design.co.uk/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js?ver=2.0.85"></script> <script id="eztoc-js-cookie-js" src="https://launchpad-design.co.uk/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js?ver=2.2.1"></script> <script id="eztoc-jquery-sticky-kit-js" src="https://launchpad-design.co.uk/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js?ver=1.9.2"></script> <script id="eztoc-js-js-extra"> var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"\u003Cspan class=\"\"\u003E\u003Cspan class=\"eztoc-hide\" style=\"display:none;\"\u003EToggle\u003C/span\u003E\u003Cspan class=\"ez-toc-icon-toggle-span\"\u003E\u003Csvg style=\"fill: #999;color:#999\" xmlns=\"http://www.w3.org/2000/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"\u003E\u003Cpath d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"\u003E\u003C/path\u003E\u003C/svg\u003E\u003Csvg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http://www.w3.org/2000/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"\u003E\u003Cpath d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"/\u003E\u003C/svg\u003E\u003C/span\u003E\u003C/span\u003E","chamomile_theme_is_on":""}; //# sourceURL=eztoc-js-js-extra </script> <script id="eztoc-js-js" src="https://launchpad-design.co.uk/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js?ver=2.0.85-1781248131"></script> <script id="wp-emoji-settings" type="application/json"> {"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://launchpad-design.co.uk/wp-includes/js/wp-emoji-release.min.js?ver=7.0.2"}} </script> <script type="module"> /*! This file is auto-generated */ const a=JSON.parse(document.getElementById("wp-emoji-settings").textContent),o=(window._wpemojiSettings=a,"wpEmojiSettingsSupports"),s=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const a=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===a[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,a){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!a(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,a){let r;const o=(r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),s=(o.textBaseline="top",o.font="600 32px Arial",{});return e.forEach(e=>{s[e]=t(o,e,n,a)}),s}function r(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}a.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),c.toString(),p.toString()].join(",")+"));",a=new Blob([e],{type:"text/javascript"});const r=new Worker(URL.createObjectURL(a),{name:"wpTestEmojiSupports"});return void(r.onmessage=e=>{i(n=e.data),r.terminate(),t(n)})}catch(e){}i(n=f(s,u,c,p))}t(n)}).then(e=>{for(const n in e)a.supports[n]=e[n],a.supports.everything=a.supports.everything&&a.supports[n],"flag"!==n&&(a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&a.supports[n]);var t;a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&!a.supports.flag,a.supports.everything||((t=a.source||{}).concatemoji?r(t.concatemoji):t.wpemoji&&t.twemoji&&(r(t.twemoji),r(t.wpemoji)))}); //# sourceURL=https://launchpad-design.co.uk/wp-includes/js/wp-emoji-loader.min.js </script> </body> </html>