{#snippet picker(group: 'page' | 'states' | 'code')}
{#each COLOURS.filter( (c) => (group === 'code' ? c.code : group === 'states' ? !c.code && ['green', 'red', 'purple', 'yellow', 'gray'].includes(c.token) : !c.code && !['green', 'red', 'purple', 'yellow', 'gray'].includes(c.token)) ) as c (c.token)} {/each}
{/snippet}

Make a theme

Pick each colour, starting from a theme there is. What you make is checked as you go, so every text reads on what it is drawn on.

alice.test / tally

A counter for the command line, with a link in its text.

Updated 3 hours ago

Press / to search

OpenMergedClosed

// Count to n
fn count(n: u32) {'{'} "{'{'}n{'}'}"; 42 {'}'}

MergeCancel

(e.preventDefault(), act('publish'))}>
Light or dark

What the browser draws its own controls in, as scrollbars.

Page{@render picker('page')}
States{@render picker('states')}
Code{@render picker('code')}
{#if short.length}

Some text would be hard to read. Each needs a contrast of 4.5 to 1.

    {#each short.slice(0, SHOWN) as s (`${s.text} ${s.on}`)}
  • {`${said(s.text)} on ${said(s.on)} is ${s.ratio.toFixed(1)} to 1`}
  • {/each} {#if short.length > SHOWN}
  • {`And ${short.length - SHOWN} more`}
  • {/if}
{/if}

Publishing adds it to your account, where anyone can find and choose it. Use it without publishing to keep it to yourself.

{#if problem}{/if}