yuanchuan

Keep it simple, sweetie.

2026-01-26

@karlcow It seems the issue is still there. I don’t have an iPhone to check the latest Safari on mobile, but on desktop Safari it still fails to recognize data-URI SVG filters in CSS.

As shown in the screenshot , Chrome renders the noisy effect (right), while Safari does not (left).

bugs.webkit.org/show_bug.cgi?i

Screenshot comparison between Safari (left) and Chrome (right)
yuanchuan boosted:
Manav Rathimnvr
2026-01-24

In which @yuanchuan reconstructs the generative images that (used to) accompany OpenAI's blog posts:

yuanchuan.dev/daily-sketch-4

Amazing stuff.

My favorite reconstructions are 3 and 15 - which how much can with so little

Daily Sketch 4 - OpenAI Cover Images
2026-01-21

@jack hope I’ve got this right.

svg {
viewBox: -100 -100 200 200;
path {
fill: none;
stroke: black;
stroke-linejoin: round;
d: m 50 -50 @M90.p.Plot(
points: 2;
r: 10;
rotate: $(@ri5 * 60)
)
}
}

2025-12-16

#css text-stroke

あ*J
2025-12-16

I just realized my feed.xml was misconfigured, causing RSS readers to think every build was a new update and bring old posts back into the feed...

2025-12-15

@AmeliaBR

Ah I can remove the black background color with shaders! It can be transparent!

Remove black color with shaders
2025-12-13

SVG polygons

Six examples of SVG polygon lines
2025-12-13

@fasnix You can think of @ content as ::after { content: "text" } in CSS, and @ match as a kind of switch–case statement.

That part outputs fizz buzz according to current index value.

For FizzBuzz:
en.wikipedia.org/wiki/Fizz_buzz

2025-12-13

@fasnix Hope it helps!

/* Creates a 10x10 grid (100 cells total) and sets the container size to 90%. */
/* In this demo, the container is 400px, so the grid is 360px in both width and height. */

@grid: 10 / 90%;

/* The default font-size is 1em (16px). */
/* I made it a little smaller so the long text (FizzBuzz) doesn't wrap. */

font-size: .6em;

/* @content adds text to the cell. @match returns specific text based on conditions. */
/* @i is the built-in 1-based index for grid cells (1, 2, ..., 100). */

@content: @match(
  /* When @i % 15 == 0, return FizzBuzz */
  @i % 15 = 0, FizzBuzz,
  /* When @i % 3 == 0, return Fizz */
  @i % 3 = 0, Fizz,
  /* When @i % 5 == 0, return Buzz */
  @i % 5 = 0, Buzz,
  /* Otherwise, return @i itself */
  @i
)
2025-12-13

border animation
#cssdoodle

2025-11-28

I've improved the performance of shaders in css-doodle , it now can use a separate canvas element via `@ content` instead of background-image.

codepen.io/yuanchuan/pen/qEZYK

#cssdoodle

2025-11-28

Another version, both supported:

@content: @match(
@ i % 15 = 0, FizzBuzz, @match(
@ i % 3 = 0, Fizz, @match(
@ i % 5 = 0, Buzz,
@ i
)));

2025-11-28

Added a match function
#cssdoodle

FizzBuzz in css-doodle, sample code:

@grid: 10 / 90%;
font-size: .6em;

@content: @match(
  @i % 15 = 0, FizzBuzz,
  @i % 3 = 0,  Fizz,
  @i % 5 = 0,  Buzz,
  @i
);
2025-11-03

@leaverou I’d lean toward Option A — it’s more consistent with other multi-value properties. But for border, it’s not immediately clear whether layers stack inward or outward.

Extending outline is simpler since it already supports outline-offset.

Client Info

Server: https://mastodon.social
Version: 2025.07
Repository: https://github.com/cyevgeniy/lmst