Actions

Work Header

Green Rain font, from The Matrix

Summary:

This gives you the CSS and HTML necessary to present a somewhat passable but rather primitive and  static  DYNAMIC emulation of the “green rain” / “digital rain” of The Matrix.  Webkit is included for lead symbols' outline, in order to sharpen the contrast.

A dynamic one could be faked nicely with .gifs (AO3 can run Doom, after all), but you can't (by T.o.S.) use Javascript within AO3 (not sure about T.o.S. w.r.t. external), so an actually dynamic font seems a little out of reach for now.  But that's OK: 27 Nov 2023 I found a workaround for a dynamic background.

Full code and illustrations are included.

I read, appreciate, and reply to all of your comments — they're always welcome! 🙂

𝑫𝒐𝒏'𝒕 𝒇𝒐𝒓𝒈𝒆𝒕 𝒕𝒐 𝑳𝒊𝒌𝒆, 𝑺𝒉𝒂𝒓𝒆, 𝒂𝒏𝒅 𝑺𝒖𝒃𝒔𝒄𝒓𝒊𝒃𝒆! ❤️
 

Notes:

This tutorial (incl. notes) is essentially ENTIRELY CSS, so you really might want to Show Creator's Style with default Site Skin.

And here I go, breaking my approximated writing schedule for  2023-ish  2024 (due to a 48/7 multivariate research project in follow-up to the first AO3 traffic analysis piece, this one looking at the actual traffic patterns for typical half-hourly and day-to-day cycles]) again.  Well, at least it's for a good cause.

The work skin herein approximates the Green Rain of The Matrix.  It's hardly a perfect one, but gives you a good starting point from which to branch off (and I've named a few possible courses of research in the “Final thoughts” section, at the end of this meta).  If you do, then please comment with a link to your version — I'd love to see it!  (Or just mark yours as “Inspired by...” when you make it [halfway down the Post New Work page, in the middle of the Associations block], and I'll still get to see it.)
  Also, it seems to bog down Chrome even after closing the tab (not sure about other browsers, haven't checked them), so heads up: this is a resource hogging work skin (at least in Chrome, which is notoriously shit at handling memory).


Subscribers: yes, I'm still writing those other fics on my schedule (or at least the ones that I haven't already finished), though the exact sequence of which ones before which others keeps shifting a bit, and I've added one or two more in there somewhere.  If you're wondering why I dropped this meta piece an hour earlier than usual, then some of you might've already guessed [correctly] that you can expect another one an hour from now at the usual time (10:30 CDT / 15:30 UTC), since the only time that I post anything early is when there's more than one piece to post.  No worries, the clunky WIP-form of I am Legion is about to be overwritten with the completed and fully polished, shiny new non-WIP final product (with apologies for having taken so very long to get to it) — complete with a new chapter squished in (due to the size that the previous chapter would have been otherwise), so you'll even get a notification of it. 🙂
  I should also mention that if you've seen my projected  2023-ish  2024 (due to a 48/7 multivariate research project in follow-up to the first AO3 traffic analysis piece, this one looking at the actual traffic patterns for typical half-hourly and day-to-day cycles]) schedule, the exact sequence has shifted around a little a couple of times, but I also don't know what pace I'll be setting this year.  Over the past 3 years, there's an average of something less than 239K/year (I uploaded 100+K in the first couple of weekends, so the actual writing average since then is probably more like 200K/year), and I'm feeling the need to slow a bit, produce things with more consideration before calling them G2G.



NB 05 Jun 2024:  Before you drop a work skin onto your writing, or site skin onto your reading, or a new declaration into your skin, keep in mind that it will go squirrelly on you sometimes / eventually; I was reminded of this today when someone's site skin [with TL;DR no weird fallback fonts] turned the Unicode character U+218B (a 180° rotated 3) = “↋” into a Creepypasta Thin Man glyph (so perhaps an HTML entity of ↋ [↋] or ↋ [↋] might be better choices), much like how years ago I had signed my MS e-mail replies to my second wife with “:-)” (ASCII smiley face emoticon) which it changed automatically to “🙂” (smiley emoji) and her e-mail (Yahoo, I think, though possibly Hotmail) turned the “🙂” into “J” (the capital letter J — it was a while before she bitched me out, thinking that I was signing off with my first wife's initial... I was able to prove that I hadn't been, but the takeaway here is that what you write might not always be what the reader reads, and what you read might not always be what the author wrote).
  For those considering this glyph, and hence facing this conundrum, majuscule epsilon (U+0190) Ɛ might be a preferable choice (esp. within 1337-5p34k) vs. 2015's Unicode standard [version 8], per this fascinating comment thread with spqrz, though I don't know if it falls within any of the canon Digital Rain glyph sets.
 

(See the end of the work for more notes.)

Work Text:

ワ0ハ"ナ  d́4̀   ц
 DON'T  DÉJÀ   VU 

 

“Your scientists were so preoccupied with whether they could, they didn't stop to think if they should.”

— Ian Malcolm, Jurassic Park, 1993

 

Contents:
Preamble
Comparison pics
CSS work skin rules
Making it all work
Matrix glitch
Thoughts
 
👉  Δυναμικός!
Random floaters

NB:
If you just want the rules, and not the blah-blah, but don't know how to see them,
here's how.

 

Preamble  Contents ↑

As mentioned in the Summary, a dynamic font could be faked nicely with .gifs, but you can't (by TOS) use Java on AO3, so an actually dynamic font seems a little out of reach for now.  (And yes: AO3 can run Doom, complete with a phenomenal soundtrack, if you hit the little speaker icon in it!  [audio wasn't working on 01 Oct 2023, and the source URL showed a message stating “The item is not available due to issues with the item's content.”, though comment history indicates that it had still been running in May; still same on 04 Oct, so I left a comment for the author.  Soundtrack is G2G again].  NB: due to traffic rates, the game can be a bit slow sometimes, so you might need to try again later.)  OTOH, for those of you interested for research or anywhere that does permit Java (etc.), there are some animated forms' info available out there (e.g.: a nice one on github with a whole bunch of related ones, a generic char set and one that rains Cyrillic, another that might use “random Chinese characters” (it seems incomplete with that section being only var text = english[Math.floor(Math.random()*english.length)]; [cf. ~1/6 down ycombinator 32950408], which suspicion seems backed up by a case in CodePen, but I don't speak Java), and there are others, of course.

27 Nov 2023 update: Yes, I'm still working on this.  I found a way to stick the .gif transparently into the background (and the .gif keeps .giffing), but I just can't get it to repeat-x repeat-y at all (I can stretch it, but this fucks the glyphs' aspect ratio) — hold the 'phone, just running #workskin { background: url("https://upload.wikimedia.org/wikipedia/commons/c/cc/Digital_rain_animation_medium_letters_shine.gif"); } will do it... though it's then on the same layer as the text, so good luck trying to see things, and opacity: 0.5 won't help there either.  Anyway, I wanted to mention that you can find some excellent image resources at Rezmason's MIT Scratch project (which seems to be Java-related... have I mentioned that I don't speak Java?), Rezmason's GitHub project (among many other resources on that project page, as well as the .mp4 [which, understandably, won't work as a source image here — ask me how I know] at /issues/12 [though it plays only 29 sec. of 40 sec. indicated], and its associated .zipped wallpaper with a 5 sec. gif, and other resources on the issues/12 page) — there are also some mouthwatering results in this StackExchange 1024 byte coding challenge, though that does stray little outside of the HTML / CSS constraints of AO3.  More when/if I can solve the bloody repeat and stretch problem(s).

Four nights back, I got to messing a little with Zalgo, for a friend's fic — Ella, I'm looking at you and your Amigops / Fleshbirds (subscribers needn't worry: I had already finished the offline material for the upcoming overwrite of the Peach/Zelda & Sonic I am Legion, and was toying with the idea of a tiny splash of Zalgo anyway for one of the later Snoopy Presents fics [yes, this one would be the  Night of the Living Dead  episode {correction: The Thing},  two  three fics after the upcoming Nightmare on Elm Street episode, but... ADHD — and I promise that I'm already working on that one, not ignoring it]).  Yes, Zalgo can be copied and pasted into an AO3 fic, but no, Zalgo isn't an actual font in the usual sense.  It's a bunch of diacritics piled above and/or below whatever you write, and can reach into the thousands; this is usually done with an online generator (and there are many at the drop of a hat by a Google search, not to mention places through which to de-obfuscate the Zalgo mess in order to read whatever it says beneath the ascending / descending pile(s) of diacritics), but with some finagling, you could do the same thing manually (though please trust me: diacritics can be... touchy sometimes).  Nonetheless, I got hyperfocused and pursued the question of using the Zalgo concept to generate the Green Rain symbols from The Matrix — could was a given, and I didn't bother asking myself if I should...

In case you've never seen Zalgo before, here's an example:

 

  Z̶̮̮͖̰̪͖̦̖̎̑̚͜a̷̡̠̥̟͉̦͍̥̥̞͓̖̤̬̔̀̔̊̈́l̷̡̪̤̩̪̥̗̘͖̥͑̌̑̋͌̐͐͌̔͛͝͝ğ̸̳͖̞͕̳͖̟͕̜͆̌̔͘͘͠o̷̬͇̗̘͕͎̗̎̅̇͒̃̕͝

 

Funny thing about Zalgo... if used in comments, as in this instance over in R3DLEMONADE's testing fonts/colours/text, it can (if one uses tall enough ascending and descending piles of diacritics) extend into the other comments above and below the one in which it was used (and even on up into the edit field, though I haven't experimented with ways to cause it to be in front of the footer).
  The [bottom] pile disappears behind the grey-backgrounded comments below it (the top pile goes in front of all comments above it), whether they're yours or someone else's (depending upon viewing the thread that the comment is part of vs. viewing all comment threads) when zoomed out to a low enough zoom percentage (depending upon how long the pile is).  I wonder if I could do something with that, applying a z-index from #workskin ~ #feedback or some declaration in a rule like #workskin [title='zalgo_index'], so that the diacritic pile would then remain visible in front of the footer; it does cross in front of the comments in the regular non-replying view, but if it were the 20th reply to the 20th comment, then any further comments or replies would necessarily appear on their own continued-thread page, and so the z-index could then remain visibly in front of the footer... maybe.

 


 

Comparison pics  Contents ↑

So, we know what the goal is, and I have to say that my execution falls a bit short in practice, but it does show proof of concept, so I'm happy.  Maybe you can do some CSS magic and make it really shine, or it could be of use as-is as just a little touch in the header of a fic (with only a little modification, it could be turned ASCII art of tassels, holiday decorations, ticker tape and confetti, etc., esp. if using a dogpile of diacritics, Zalgo-style [not to be confused with Gangnam style or Klingon style]).

You've never... watched... The Matrix?  OK... so... TL;DR: cool cyberpunk f/x, shown below (attributed by Wikipedia to CC0 Public Domain):

Matrix's Green Rain falling symbols

(open image in new tab to zoom)

 

My rather less ambitious STATIC rendition appears below (if you have creator's style turned on, then you can already see the DYNAMIC update's results behind what you're reading right now):

Green Rain static emulation

(open image in new tab to zoom)

BTW, if you're curious as to how I got a clean image out of a Pinterest pin, the secret lies in changing https://i.pinimg.com/564x... to either https://i.pinimg.com/1200x... (sometimes this won't make a difference, and sometimes it doesn't exist) or https://i.pinimg.com/originals... (sometimes this second one works the same or better, and sometimes it doesn't exist).
Edit 15 Nov 2023:  I've just now found that Pinterest has changed things (or could be bubble testing, I suppose) to https://i.pinimg.com/736x..., so that workaround might no longer apply (except to old Pins, of course).
Edit 05 Jan 2024:  The technique works again (don't know if the issue was temporary, or still a problem for select images, or will recur), so just give it a shot and know that it could be a dice-roll at any point in the future.

 

Being a bit primitive in this form, it's perhaps best for a simple decorative touch at the top of a chapter.

 


 

CSS work skin rules  Contents ↑

Here's the code for the STATIC first run (and if you don't know what to do with this, I have you covered in my tutorial: just click here and you'll be in the section of my fonts tutorial where you can learn what to do with a work skin rule) — the DYNAMIC update has its own section at the end:

#workskin .matrix-trail {
  background-color: #ececec99;
  /* See final thoughts' second item re. adjusting this to a more-Matrix-like gradient */
}

#workskin .matrix-3 {
  color: rgb(1, 132, 1);
}

#workskin .matrix-2 {
  color: rgb(0, 246, 0);
}

#workskin .matrix-1 {
  color: rgb(104, 252, 104);
}

#workskin .matrix-start {
  color: rgb(157, 219, 255);
  -webkit-text-fill-color: white;
  -webkit-text-stroke-width: 1px;
  -webkit-text-stroke-color: black;
  text-shadow: 0px 0px 5px rgba(0, 0, 0, 0.9);
}

 


 

Making it all work  Contents ↑

Now for the “fun” part: that's not a magical wand.  It won't make a bunch of symbols show up beneath (or above) some words.  You could make it do so, but each case would be so strongly a custom situation that there would be no point.

The official Green Rain is a random bunch of letters, numbers, hiragana, katakana, kanji, mirrored half-glyphs, etc..  I kept it simple and chose just to write a few real words in my example (easier than random glyphs, more appealing to me conceptually, avoids risk of inadvertently writing anything offensive... and I get to indulge in some limited food porn there).

You'll notice that in my picture, the first one shows grey streaks above the falling words?  I figure that it's a safer choice than forcing the page to go black (cute effect, but possibly too high a risk of readers disabling the style).  You might also notice that there are three pics there: the first one (L/H/S) shows how it should come out, if the Gremlins permit it; the second (center) shows what happens if webkit fails; the third (R/H/S) shows the results with creator's style turned off (the bold face of the bottommost glyphs was just standard HTML <b> bold tagging, not part of the CSS, so that it would remain even if all else failed — it's intended to draw the eye as a cue to start reading from those upward, in case the bright-yellowtrailers aren't enough of a hint).

Read the work skin rules there; notice their names? .matrix-trail, .matrix-3, .matrix-2, .matrix-1, and .matrix-start.  Since the glyphs are meant to rain downward and leave a trail behind/above them, I put the rules in reverse order (which has zero effect on their execution) of what you might normally think of (where you'd probably start with the one named “start”).  The rules' names are meant to be intuitive:

  • the trailers trail along behind the falling glyphs (leaving a trace, but that term is too ambiguous);
  • the numbered rules, from 3 through 1, are for the glyphs in the middle;
  • the start rule is for the glyph that starts your string of falling glyphs, the one at the bottom.

From the starter glyph, you read upward to the 1, 2, and 3 rules and apply them to the starting glyph [of each column], and then to the first following glyph(s), then the next [few] after that, and finally the last [one or more]; rinse and repeat for all other columns.  I don't apply any color to the leading empty space, but the trailing blanks are filled with &emsp;s (in order to keep the empty space the same width as the other glyphs), so I spanned them [in the fic's HTML editing window] with the trailing rule's CSS selector thus: <span class="matrix-trail">&emsp;</span>.

 


 

Now you just need to pick some glyphs and arrange them in vertical strings.  I chose sushi, in keeping with the green rain's partly apocryphal origin story (granted, risotto was atypical of the sushi joints that I haunted in Japan, but cappuccino  was usually   sometimes available  could be had in some places; sake... not so much unless you were at a karaoke place that happened to have sushi on the menu):

ikura いくら
nishin [herring] ニシン
risotto リゾット
cappuccino カプチーノ
osake お酒
unagi うなぎ

but that list turned out to be too wide — although that's six words, to match the six letters of “Matrix” (simply because I used that word as my example; a longer or shorter word would obviously have other than six letters in it, and so I'd've chosen other than six words... only to find the same basic problem), those glyphs are about one &emsp; wide, so I opted to keep only the ikura, unagi, and osake.

I'm writing in English, which is left-to-right, not vertical.  Whether you choose to write top-to-bottom (the usual way) or bottom-to-top (as I did, though only in order to reflect that the beginning of the word is the raindrop, as it were), you'll need to play around with the arrangement some:

  1. first, number your glyphs, so that you don't lose track while you transfer them (unless you can read your glyphs well enough not to need this);
  2. second, get the glyphs arranged vertically, period;
  3. third, move them down however far you wish per column, and replace the now-missing glyphs with &emsp;;

For demonstration purposes, I'll use the original list of six items, to make each step's results clearer (with the top row boldfaced only to draw attention to the mechanic when we go to the next illustration, rather than being part of the actual rainfall):

Sい1く2ら
Sニ1シ2ン
Sリ1ゾ2ッ3ト
Sカ1プ2チ3ー3ノ
Sお1酒
Sう1な2ぎ

Next, we'll rotate the matrix one quarter turn counterclockwise (and for once, the mathematically valid term “matrix” is used unironically in context of the movie series), so that the rows become columns and start with the last glyph first (seriously, this was so much easier to do in a spreadsheet!), with what had been the boldfaced top row now becoming a boldfaced left-hand column (again, boldfacing here only to draw attention to the mechanic, and not intended to be part of the actual rainfall):

2ら 2ン 3ト 3ノ 1酒 2ぎ
1く 1シ 2ッ 3ー Sお 1な
Sい Sニ 1ゾ 2チ .  Sう
.  .   Sリ 1プ .  .
.  .  .   Sカ .  .

Alright, I'll leave the blockquote version there, for those who prefer it, since that's how that same vertical arrangement might reasonably look if you were writing it out by hand on paper, or scribbling it in a .txt or .doc/.odt, but here's a more user-friendly layout, as it would appear in .xls (within the limitations of simple HTML, since I really don't want to go OTT):

2ら 2ン 3ト 3ノ 1酒 2ぎ
1く 1シ 2ッ 3ー Sお 1な
Sい Sニ 1ゾ 2チ Sう
Sリ 1プ
Sカ

...and here's a .png of the way that I did it much more quickly in my actual spreadsheet.  The top matrix is just a left-to-right reading of the hiragana.  I colored in the top row (ikura) in order to make it obvious when you see it as the left column in the bottom matrix.  Notice how that first glyph is in blue instead of green, in the top one?  When I pasted the cells into their new arrangement, I started by copying each row from right to left and pasting them from top to bottom, so that top matrix's top row's first glyph in blue is now the bottom matrix's left column's last (bottom-most) glyph.  Once you've done this, it's a simple matter of just shifting each column down a cell or three to add the different length trailers of grey:

This pic shows the rotation of your matrix of glyphs using a spreadsheet to shift them more facilely.

(open image in new tab to zoom)

Adding the rules (no spaces between the glyph columns in this example [though please note that in this case, I've introduced some blank rows to what you're shown in order make clear where each line of HTML and CSS ends before beginning the next one, since it could otherwise be a jumbled mess trying to read it if you're on a small screen]), we get...

Matrix<br />
 
<span class="matrix-2">らン</span><span class="matrix-3">トノ</span><span class="matrix-1">酒</span><span class="matrix-2">ぎ</span><br />
 
<span class="matrix-1">くシ</span><span class="matrix-2">ッ</span><span class="matrix-3">ー</span><span class="matrix-start">お</span><span class="matrix-1">な</span><br />
 
<span class="matrix-start">いニ</span><span class="matrix-1">ゾ</span><span class="matrix-2">チ</span>&emsp;<span class="matrix-start">う</span><br />
 
&emsp;&emsp;<span class="matrix-start">リ</span><span class="matrix-1">プ</span>&emsp;&emsp;<br />
 
&emsp;&emsp;&emsp;<span class="matrix-start">カ</span>&emsp;&emsp;

I'm not thrilled with some of the effects (color 3 might need to be a bit lighter, and possibly softer, and I think that the exact shades of colors 1 and 2 are too similar [1 should be lighter, 2 darker, maybe a little of each]), but here's what you get with that:

Matrix
らントノ
くシ
いニ
    
     

Or the shorter (and I think prettier) version that I used in the pic, where the green rain was the same width as the header, but this time (where the glyphs' CSS selectors might not clutter things so badly that the trails' CSS selectors get lost in the shuffle) with the grey trailers added — first just a blockquote of the raw HTML with the spaces' CSS selectors included, and then the execution of the same, to show it in action:

Matrix<br />
 
<span class="matrix-trail">&emsp;</span><span class="matrix-2">ぎ</span><span class="matrix-trail">&emsp;</span><br />
 
<span class="matrix-2">ら</span><span class="matrix-1">な</span><span class="matrix-trail">&emsp;</span><br />
 
<span class="matrix-1">く</span><b><span class="matrix-start">う</span></b><span class="matrix-trail">&emsp;</span><br />
 
<b><span class="matrix-start">い</span></b>&emsp;<span class="matrix-1">酒</span><br />
 
&emsp;&emsp;<b><span class="matrix-start">お</span></b>

Matrix




  

NB:  If the work skin [for this fic or any other] was stripped by downloading so that you can't see either of the above examples, then please see my fonts tutorial's sub-section on re-inserting rules (tutorial also covers how to view fics' work skin rules and more).

 


 

Matrix glitch  Contents ↑

KEYNOTE, if you get a glitch in your Matrix:

What was really perplexing was that if you leave out the bold <b> HTML tag, you get a very different result.  OK, actually, the exact result is still perplexing to me, since I imagine that leaving it out should look a little different from the way that it actually does, but the point is that I had goofed and left them out in that first (wider) example, which brings to my attention (and hence yours, too, now) that sometimes a little glitch can go very oddly.

Here's the planned sequence of fails:

  1. With the webkit declarations in place in your matrix-start rule, and the bold tag around your glyph's span, you get the intended clean and crisp hollow glyph with a shadow around it, as you saw in the demonstration above: .
  2. Assuming webkit failure, but permitting creator's style (the remaining CSS), and keeping the bold tag, the glyph gets blurry, indistinct: .
  3. Removing creator's style (no CSS at all), leaving only the bold HTML: .

Now for un-planned failures:

  1. With the webkit declarations in place in your matrix-start rule, but now forgetting the bold tags around the glyph, we find a filled-in looking glyph (even though the webkit rule is still there, and the glyph is still hollow, it looks filled unless you're zoomed-in), as shown here: ;
    • note that this fail, at least, can be minimized by including in your CSS rule (for starting glyphs, the actual raindrops themselves) an automatic boldfacing to the effect of font-weight: bold; (though you'll still want to hardcode the boldfacing into the HTML against events of CSS failure, of course).
  2. Assuming webkit failure again, in addition to having forgotten the bold tag, though with creator's style still enabled (the remaining CSS), the glyph is the same blurry and indistinct thing again (though I think that it appears to be very slightly different from the earlier case, at least on my browser, side-by-side zoomed-in views make it clear that there's no difference): .
  3. Removing creator's style (no CSS at all) and forgetting the bold HTML, the glyph is rendered normally: .

Matrix static glyphs' fail sequence

(open image in new tab to zoom)

Always read each tiny bit of code as if it's your first time.  Had I gone looking to fix this by way of shotgun maintenance from the hip, I'd've figured it to be a problem with the shadow CSS, for sure, and then maybe with the outline webkitting, but surely nothing to do with the bold tag (or lack thereof).

 


 

Thoughts  Contents ↑

Final thoughts: maybe it could be improved upon, aside from just cosmetically?

  • Cosmetically, changing the glyphs' font size to something tiny (or maybe several different sizes, in which case maybe also have several different brightnesses) might be prettier than full-sized glyphs, though you'd want a conditional to fall back on for when there's no CSS in play (disabled in whatever fashion, or missing due to download) — hell, for that matter, maybe there's some CSS to trick the browser into treating your raining glyphs as if they were diacritics à la Zalgo (and diacritics1 can be rendered in a color other than that of their parent glyph (NB 01 Mar: I figured out how to do this yesterday...), though the CSS for it might get scrubbed by AO3's parser, and/or it might work in some browsers and not others), in which case they would then garble the background of the words above and/or below the parent-word, but maybe dropping their opacity and giving them some color (presumably that bright lime green spectrum?) could reduce the visual agita... and since AO3's parser  scrubs  used to scrub (ruby, rt, and rp tags are now allowed as of 31 Mar 2023, just 2 days after I wrote this up! [Glad I found out the day before posting, rather than who knows when...]) the <ruby> tag, there are a few endeavoring souls out there who've taken it upon themselves to write furigana work skins, which might be adaptable to all of this;
  • also cosmetically, the trailing line might be better served in a bit greener hue (checking W3's color picker... oh, say... #c6ecd9, or so?  #006700 might be more appropriate, granted.), but more importantly a blurred transparency gradient from center to edges could help, maybe in some polka dot fashion to give it a bit of static-like fuzziness (I've seen CSS do a plaid background, so it's certainly possible) — this might require pairs of mirrored &ensp;s (roughly half of the width of an &emsp;) so that each pair has a gradient of left-to-right darkening toward the Y-axis and then left-to-right lightening from the Y-axis (and there are tons of CSS gradient generators available online), these pairs thus giving the columns the appearance of a single deep-ish trail with fading edges... wait, I  think that I have  thought that I had it just now, and without resorting to splitting the &emsp;s into mirrored &ensp; pairs (though maybe one could sharpen the result by using this on a single &ensp; that's braced with a normal un-CSSed background &nbsp; to each side...), but  the computer says no...  the parser told me “The background property in #workskin .matrix-trail cannot have the value linear-gradient (to left, #FFFFFF 0%, #006700 50%, #FFFFFF 100%), sorry!”:
    background: #FFFFFF;
    background: linear-gradient (to left, #FFFFFF 0%, #006700 50%, #FFFFFF 100%);
  • more significantly, if you try putting the green rain into a paragraph, you'll just break up the paragraph, but maybe there's some way to keep it all together without disrupting the rest of the paragraph (z-index: -1; comes to mind [and set the opacities to 0.5 or something], but this is beyond the CSS that I've had need for, so I really am just shooting in the dark here);
    • NB: I tried setting the .gif as the background image to this tutorial, using a <div> with low opacity and a negative z-index individually and in combination, but that came out only as one might expect, making the entire contents fade away; I then set everything in the tutorial itself within a second <div> with regular opacity: 1 and z-index: 0, but no dice (same with z-index: auto):
      #workskin .matrix-background {
        background-image: url("https://upload.wikimedia.org/wikipedia/commons/c/cc/Digital_rain_animation_medium_letters_shine.gif") !important;
        width: 100%;
        opacity: 0.2;
        z-index: -1;
      }
       
      #workskin .matrix-midground {
        opacity: 1;
        z-index: 0;
      }
       
      <div class="matrix-background">
      <div class="matrix-midground">
      [ Jurassic Park quote, etc.]
      </div>
      </div>
    • I also tried a work skin and HTML combo of:
      #workskin background {
        background: url("https://upload.wikimedia.org/wikipedia/commons/c/cc/Digital_rain_animation_medium_letters_shine.gif") !important;
        border: 2px solid black;
      }

      #workskin .transparentbox {
        margin: 30px;
        background-color: #ffffff;
        border: 1px solid black;
        opacity: 0.6;
      }

      #workskin .transparentbox p {
        margin: 5%;
        font-weight: bold;
        color: #000000;
      }

      <div class="background">
      <div class="transparentbox">
      [ Jurassic Park quote, etc.]
      </div>
      </div>
      ...which obviously worked oh-so-bloody-well </sarcasm>.
        Beginning to wonder if somehow the fact of it being a .gif were an issue (I know, I know, but I've seen stranger [even impossible] things happen [just ask me about a non-macro'd spreadsheets adding cells that I input the addresses for, and their doing completely unrelated things instead; yeah, I know all about Gremlins]), I tried a simple .jpg, but still no love. 😞
    • There is some hope, of course, if one were to use background-blend-mode (see Mozilla Developer Network [MDN Web Docs], W3Schools, and CSS-Tricks for details) in the work skin... and assuming that it's supported by AO3's parser... and allowing for the fact that it's not supported on IE (which some people do still use).  I didn't go so far as to try it myself, but it might be worth looking into.  There's a good starting point on StackExchange, if you're feeling froggy.
  • running with that idea, I suppose that one could then pre-gen a large array of just such green rain, set the borders to truncate (e.g.: CSS-tricks' solution [and there are others], since AO3's parser allows flex [I thought not, but I tested flex just now, and it didn't get scrubbed; I didn't take the test any further to see about truncation]) rather than wraparound (so that it would fill the screen's display real estate [to wit: regular monitors and widescreen HDTVs, since not everyone lives on a 'phone] but not cause the page to grow any longer than the fic's actual contents), and set it as the background (a CSS background, rather than an image background: it would still be static, so might as well just use an image, and would be lost in downloads [though the downloading person can re-insert the CSS] making it more a project of love than of direct practical use), with maybe several different font sizes (esp. smaller ones?); if you go the route of different font sizes, then you might want to consider my findings on font size methods.

 


 

FIAT MOTUS  Contents ↑

27 Nov 2023 update:  As you can see, I finally lucked out... to an extent.  Looking for a way to make a glyph blink on AO3, I dug around, got distracted (three cheers for ADHD!) by some unrelated CSS, and managed a workaround for a dynamic background.  (NB:  One could simply plunk in a work skin rule of

#workskin {
  opacity: 0.9;
  background: url('https://upload.wikimedia.org/wikipedia/commons/c/cc/Digital_rain_animation_medium_letters_shine.gif');
}

  and it'll work, even extending the image a little extra to the sides beyond where the work contents themselves are, but also reducing the actual written text's opacity. 😞)  10 Mar 2025 edit:  Cf. this subsection of Targeting specific AO3 work sections (not site) with CSS effects for a simple fix on adjusting the .gif's gamma and a different work skin rule to drop it into your fic's background.
CAVEAT:  I just discovered (01 Dec 2023) that the .gif background goes away when I resize my browser to about half of my monitor's width, making me suspect that this thing of beauty is utterly insensible to those with tiny devices.  This is, to state the obvious, less than optimal.

Cribbing a note from the bottom half of InfinitysWraith's CSS in Testing, ch. 10 [i.e.: tutorial 1, Bleed Gold ], I ended up modifying things slightly (I had been so close, and yet so far!), with the final result of:

#workskin .bggif {
  position: absolute;
  top: 0;
  opacity: 9%; /* opacity 8%-10% seem OK; less than 8 is a bit too washed out [under the conditions of my monitor, browser settings, etc.], and over 10 feels too distractingly present to be able to read smoothly. */
  width: 99% /* Odd choice? Going to 100% width causes the contents to go out of bounds by maybe a pixel, hence kicking in an automatic scroll bar at the bottom of the work. */;
  height: 100%;
  z-index: -1 !important;
  -webkit-user-select: none; /* Seemingly useless (even changing user agents), but will keep it in, just in case. */
  -ms-user-select: none; /* Seemingly useless (even changing user agents), but will keep it in, just in case. */
  -o-user-select: none; /* Seemingly useless (even changing user agents), but will keep it in, just in case. */
  -moz-user-select: none; /* Seemingly useless (even changing user agents), but will keep it in, just in case. */
  user-select: none; /* Seemingly useless (even changing user agents), but will keep it in, just in case. */
  background-size: cover; /* Useless (several variations, no effect within current set of rules). */
  background-repeat: repeat-y; /* Useless. */
  background-attachment: scroll; /* I mucked with scroll vs. fixed, but no dice. */
}
 
#workskin .borderinvis {
  border: 0px;
  width: 99%;
}

Then I did the same as we saw in Bleed Gold (with what turned out to be almost the same container/wrapper:

  1. wrapped the entire work with <div class="borderinvis"> at the very top (and its paired </div> at the very bottom of the page; this keeps your text from edging out past the side of your image);
  2. plunked <img class="bggif" src="https://upload.wikimedia.org/wikipedia/commons/c/cc/Digital_rain_animation_medium_letters_shine.gif" width="1" /> right beneath it (the location is convenient for the wrapper, and position: absolute; makes its placement irrelevant [and if creator's style is off, then the image that would have been in the background won't appear anyway]);
  3. then left the rest of this tutorial as it had already been (written beneath that new section with the div and image at the top of the edit field).

The resulting HTML is set up like this (though width="1" seems to be unnecessary):

<div class="borderinvis">
 
<p>
<img class="bggif" src="https://upload.wikimedia.org/wikipedia/commons/c/cc/Digital_rain_animation_medium_letters_shine.gif" width="1" />
</p>
 
[Insert your work's regular narration, HTML, CSS, etc. here]
 
</div>

I tested the parameters and found that you can stick another <div class="borderinvis"> and <img class="bggif" src="Your_URL_Here" width="1" /> above / below the first set, but a new div is unnecessary (I tested it with just the one div [which is there to keep the text contained within the image] and three .gifs at once, and they all came through without need of the new div nor of different z-indices... though I would suggest perhaps lowering their opacities if you choose to apply several .gifs at once in the background).  I happened to test this first by adding InfinitysWraith's original rain .gif (which I could see somewhat clearly), and then swapped that with Wiki's small and clear Matrix .gif (which darkened things, and either caused a slight rain-on-window smudge at points, or made an already present effect a little more evident), tried it with the original and both the clear Matrix and the new-rain (where I could reasonably still see the new-rain), and finally added a distinctly different Matrix .gif from DeviantArt (“matrix digital rain trans flag” by blinkies-cafe), which came together as a lovely and surprisingly mild neon rain that made me think more of Blade Runner than The Matrix (it didn't seem to matter whether new-rain was in there [it seemed to have been swallowed in the noise], but the clear matrix seemed to improve the composition) — that test was written as follows, if you're curious:

<div class="borderinvis">
 
<p>
<img class="bggif" src="https://upload.wikimedia.org/wikipedia/commons/c/cc/Digital_rain_animation_medium_letters_shine.gif" width="1" />
</p>
 
<img class="bggif" src="https://upload.wikimedia.org/wikipedia/commons/1/17/Digital_rain_animation_small_letters_clear.gif" width="1" />
</p>
 
<img class="bggif" src="https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/7ba60889-62e3-480b-b1a4-3b7f949fe0cb/df5py0l-22160cb0-c8ec-42e6-bfde-1a59b802a4f7.gif?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7InBhdGgiOiJcL2ZcLzdiYTYwODg5LTYyZTMtNDgwYi1iMWE0LTNiN2Y5NDlmZTBjYlwvZGY1cHkwbC0yMjE2MGNiMC1jOGVjLTQyZTYtYmZkZS0xYTU5YjgwMmE0ZjcuZ2lmIn1dXSwiYXVkIjpbInVybjpzZXJ2aWNlOmZpbGUuZG93bmxvYWQiXX0.zms6ZP6ZHL_iTEFXMI8fDLozRmgGRWNRHKWK66R3YB4" width="1" />
</p>
 
[Insert your work's regular narration, HTML, CSS, etc. here]
 
</div>

I also (belatedly) added a white background note rule for the small examples that didn't show up well against the pale grey background of the green rain .gif, and a simple white highlighting for those glyphs in the planned and unplanned failure cascades:

#workskin .notewhite {
  width: 20%;
  text-align: center;
  background: white;
  min-width: 15em;
}
 
#workskin .highlight-white {
  background-color: white;
}

Being a .gif limits things with the glyphs' relative size and the image's aspect ratio.  Maybe there's a way to have it display the results of a potentially more useful Java-based image (and yes, I tried — which, now that I think about it, I can only hope wasn't a breach of TOS), so that the glyphs are the right size and shape, etc., but that's a project for another day.

Update 29 Jan 2024:  If you're making a unique work skin for just one specific fic, then you can simply drop the .png or .gif or whatever straight into the rule below and not have to fiddle with the container thing:

#workskin {
  background-image: URL(https://upload.wikimedia.org/wikipedia/commons/c/cc/Digital_rain_animation_medium_letters_shine.gif);
}

I discovered that while fiddling with a way to automatically default a fic's entire background color and font at once without having to enter <div class="YourRuleNameHere"> at the start of each chapter (and </div> at the end, of course):

#workskin {
  background: #FBEFE3;
  font-family: TimesNewRoman, Times New Roman, Times, Baskerville, Georgia, serif;
}

I'm halfway mucking with some material to put glyphs as regular text (and lot of empty space between them) in CSS only (so that they don't turn the regular material to gibberish when CSS fails or is turned off) with a z-index -1 (bumping the .gif to -2) with a low-middling opacity, and that part's easy, but I'm still trying to get them to appear behind the regular text (only planning to later adjust random glyphs' individual iterations' font-size, <sub>/<sup>, furigana, text-shadow, specific color, etc.)... because I'm a glutton for punishment (right now it's just Latin letters, to test with, though at least some Matrix glyphs seem accessible, e.g.: Buginese Letter a/ᨕ, reversed Tifinagh letter yaq/ⵇ, Osmanya letter ba/𐒁).  Will add another section when/if I ever succeed (and you'll know, since those glyphs will be floating in the background if it looks any good, and assuming that your browser/etc. permit)! 🙂

With that said, unless some official .ttf is ever released and adopted as a web safe standard font option in most OSs (or maybe placing individual glyph images instead of text glyphs, or if AO3 eventually permits embedding of fonts)... using fairly universally available font-family declarations for work skin rules tailored per glyph subset is about the best that we can hope for, and aiming at canon glyphs per Googledoc glyph database link or Rezmason's info below (or even those of a more modest canon subset, such as those in, Carl Newton's analysis of the Matrix rain [cf. similar at dafont], or this StackExhange thread), which I'm quoting [verbatim and in toto] only because I can't guarantee that this r/matrix thread will forever be available and Wayback saves only the OP and not the comment thread (NB: the Fleay interview mentioned has some material in that subreddit thread, but here's the video link just in case; also, the named languages' alphabet links' site has gone bye-byes, so I've taken the liberty of modifying the exact quote by using the Wayback copies' URLs here):

Rezmason OP 2 yr. ago [Sun, Dec 12, 2021, 12:37:01 AM Central Standard Time ]
First, the good news: as far as I can tell, every glyph of "new" Matrix code rain seen in any piece of canon promotional material has now been accounted for in one giant table. There are 133, more than twice the original 57. And here's more or less what they look like on the silver screen!
 
Now, the bad news: I've got the vector outlines of my rendition if you want it, but it is absolutely a sketchy preliminary version, and people who like things to look right when you zoom in may be a bit disappointed.
 
 
Edit 1: I forgot to mention how this came together.
 
The glyphs in this promo occupy a grid. Photoshop lets you import frames from an MP4, export them as individual files, adjust all their levels and then batch-slice them into a grid. That's how I got a folder full of 156,996 22x22-pixel PNGs. With a few other tricks, if you sort them by size you can separate the wheat from the chaff.
 
To vectorize them, I skimmed a few suspect Unicode blocks. Fun fact: you can script Fontforge to export all the glyphs in a font as SVGs, which is how I got the folder full of 2,360 vector files. About 75 of these look either exactly like what the VFX folks put in the new code rain, or close enough to spend maybe ten minutes on each glyph.
 
I couldn't find the last two rows of symbols, give or take, so I assembled them from pieces of the rest, which is a good first step to how you make a font look consistent.
 
And that's how I spent my time waiting for Trailer 2!
 
 
Edit 2: so what are these glyphs?
 
The digits, the letter Z, and a bunch of math symbols are from Chicago, just like the Wachowskis. Simon Whiteley at Animal Logic, who designed the original Matrix glyphs, is commonly quoted as saying the backwards katakana that make up the rest of the classic glyphs "came from" a sushi recipe book. They were modified quite a bit. His colleague Lindsay Fleay recently spoke a bunch more about this original creative process. One interesting takeaway is that there were way more glyphs in Whiteley's set, which they pared down to the ones we saw in the original trilogy.
 
Now for the new ones.
 
You've got your Buginese, your Kayah Li, a little Phags Pa or maybe Tibetan, some Kannada, some Mongolian maybe in a particular font — my unfamiliarity with these alphabets, their cultures and their fonts is really doing me in here — they might have modified some Saurashtra, but from a font I can't find. The rest of the symbols I rebuilt by hand, more or less, with the trailer glyphs serving as a reference, but I suspect someone who knows more languages than me could identify what I couldn't.
 
There's zero Sundanese whatsoever, but Sundanese looks really cool. I just wanted to point that out. There's a lot of cool scripts out there!
 
It's possible that a bunch of these glyphs are from Simon Whiteley's original expanded set. Animal Logic is an Australian studio, and as far as I can tell, all these scripts are from cultures geographically between India, Australia and Japan. On the other hand, they could also be new contributions that reflect the aesthetic decisions (and cultural biases) of the team working on Resurrections. I'd like to try reaching out and asking a VFX artist after the film is released.

 


 

 


 

Floating motes  Contents ↑

  ↓  Initial, buggy code
↓  Shiny, happy version

 
 
/* Just touching base with you guys, in case this is of use to you somehow,  or if you can spot a fix for it,  but otherwise DO NOT USE THE CODE DIRECTLY BELOW: IT'S BUGGY (and not in some flashy One Piece sense)!!! */
 
See next subsection for functioning version!  (Inop. / malf. ver. kept for reference)
 
 

02 Dec 2023 update: as you can't see (even if your creator's style is turned on), I worked out a little more: this will put glyphs all over your fic!  It still has some kinks (the glyphs don't fall like rain [not technically correct: they don't sit there while the next glyph down comes into existence directly below them to draw your attention there as if it were the original one in an apparently continuous downward translation] and marquee is deprecated as a workaround (though it does show up in the skins-creating page, which names marquee-direction, marquee-play-count, marquee-speed, and marquee-style, exactly as gifbot pointed out, so although not all future [or present] browsers will support it, it's still allowed by the AO3 parser [though that's either old information, or my browser no longer recognizes that CSS {except that it very definitely does}... or just maybe I simply fat-fingered something 😅; hell, I don't remember for sure, so maybe I tested it as an HTML tag by old habit, since I come from before the semantic separation of the two]), or blink [I still need that for another work], or transform from one to another) — but as for bold, sub/sup, furigana, etc., at least one can simply drop the HTML tags around the spans (or write a few extra classes for the various effects)...
...except for one itsy-bitsy teency-weency [green glyph, not yellow polka dot] tiny little flaw...
    ...it might... sort of... kinda make just about everything (though not quite actually absolutely everything-everything) below the start of the glyphs' CSS on the page becomes unable to be highlighted by cursor for copying or CTRL-F'ing and such (unless you click outside of the container width and drag vertically) 😅 — unless that's a feature for you, and not a bug, in which case by all means: knock yourself out! 🙂 ❤️

Another problem (which I have to figure out, for sure) is that the glyphs seem to be in front of images (even when setting the images to z-index 1 and opacity 100% and display block) and can be seen through (or maybe(?) more likely: on top of ) the .gif (same test) and .png (didn't bother testing).

So, here we go: borrowing again from InfinitysWraith — here's the original overlapping text in InfinitysWraith's work, and the style disabled view, though I found it to make a lot more sense when I went through the actual source code afterward view-source:https://archiveofourown.to/works/25174384/chapters/87420256 — I found that if I were to use the overlap (I left the top rule alone, which is needed here solely to act as a box in which to wrap the background divs, but I upped the opacity [maybe too much, maybe too little] on the background rule and added some unnecessary extras... and found that for the Matrix rain purposes, we need something like an overflow: scroll declaration [useless if one flakes and uses a string of uninterrupted &emsp;, though I left it in for twiddling]: you have to alternate between regular collapsing spaces and non-breaking spaces [pair after pair of one-of-each] between the hidden glyphs, or else it will overflow right and you'll have one long-ass scroll bar at the bottom with no real presence of glyphs dotting your fic... that'll make more sense when we get there, I promise).

#workskin .overlappingtexttop { /* when we do the HTML, YOU MUST start the container div with this one */
  position: relative;
}
 
#workskin .overlappingtextbackground { /* when we do the HTML, this is the one that will be contained, and cause the magical glyphs to float all over the regular text */
  position: absolute;
  opacity: 50%;
  overflow: auto; /* Useless for our purposes, and unnecessary anyway (as long as you alternate your &emsp; with regular spacebar spaces). */
  -webkit-user-select: none; /* yes, I tried it with all of these stripped; nichevo, macht nichts. */
  -ms-user-select: none;
  -o-user-select: none;
  -moz-user-select: none;
  user-select: none;
}
 
#workskin .paragraph1words:after { /* these “paragraph”s are what cause the text to appear on the page, without being part of the actual text; you MUST have the :after there, or else they won't appear at all */
  content: "  ⵇ                    z     ᨕ         ↋              ⵇ                       ⵇ                                           ⵇ                                                                                              1                                 0                        日         ⵇ                     ¦              ᨕ       𐒁                                               *        ⵇ                              :                                                     日           ⵇ                                                                 ᨕ             ''                                                          ⵇ                       |             4                 Z                ᨕ               ⵇ   ⵇ ";
  z-index: -5 !important;
}
 
#workskin .paragraph2words:after {
  content: " ⵇ                       ⵇ                                           𐒁             ᨕ            8       ハ            ⵇ           ⵇ                             ''       ⟨       ⵇ                               ᨕ                       7        ⵇ                         ⵇ           :      ハ             ↋             ⵇ                  ¦         ᨕ                Z        ⵇ ";
  z-index: -4 !important; /* it turned out that assigning different z-indices didn't permit them to overlap each other, but they do still need to be behind the main text (default z = 0) and in front of the .gif if it's used (any z that's more negative than the glyphs are, though AO3 maxes out at z = ±9, IIRC); these could easily just a single glyph long, too, and have other selectors attached to the spans when you put in the HTML */
  font-size: 200%;
}
 
#workskin .paragraph3words:after {
  content: " ⵇ                       ⵇ                                      ⟩     𐒁                   +        ᨕ                      ハ         ⵇ           ⵇ                     |           ''           ⵇ                      _                   ᨕ           ⟨                    ⵇ ";
z-index: -3 !important;
  font-size: 300%;
}
 
#workskin .paragraph4words:after {
  content: " ⵇ                       ⵇ         *                            日                                                 ⵇ             ᨕ               ⟩                ⵇ ";
  z-index: -2 !important;
  font-size: 400%;
}
 
#workskin .paragraph5words:after { /* using z-indices of default [0] implicit to the regular text and -1 through -5 explicitly in the CSS, I hoped to achieve a palimpsest effect */
  content: "     𐒁                 ";
  z-index: -1 !important;
  font-size: 500%;
}
 
#workskin .green { /* one of the font colors already in my work skin */
  color: #27b300;
}
 
#workskin .matrix-2 { /* one of the font colors from the original purely static proof of concept Green Rain execution */
  color: rgb(0, 246, 0);
}
 
#workskin .matrix-1 { /* one of the font colors from the original purely static proof of concept Green Rain execution */
  color: rgb(104, 252, 104);
}

That's the CSS.  I didn't try to get terribly creative, just run a proof of concept, so some of the glyphs are Matrix canon (I didn't check which movie(s)), and some might not be (unless you count the games); the transliterative angle brackets ⟨⟩ and single straight apostrophes ' aren't, for example, but the work skin parser bitched about the less-than/greater-than <> symbols (and even the HTML entities of &lt; and &gt;, though I checked [belatedly] just now and it didn't mind the single guillemets ‹›) and I couldn't use the straight quotation marks " since those were delineating the CSS quoted material, hence the pairs of single apostrophes '' (but why not try the same {Greek psili  ̕ + U+2060 word joiner &#8288; + &hairsp; (better than thinsp) + &#8288; + Latin É =  ̕ É} trick as I used in Seize the Deity, ch. 29, so that we get {' + U+2060 word joiner &#8288; + || (there's a tiny gap between the pipes there, highlighted in blue because it's too thin for the bright yellow to appear more than a pale nothing thinner than &thinsp;, but you have to copy this and paste it where you need it, because the &hairsp; code no longer works on AO3) + &#8288; + ' ≈ "}, you ask?  Well, it turns out that although the trick works here with regular HTML in this tutorial [i.e.: ' ' ≈ " ≠ ''] and the CSS parser actually does keep the psili  ̕ joined to the É [I checked it that way first], it doesn't keep the apostrophe joined to the apostrophe for some reason [NB: if you choose to use this trick in your HTML, and then later edit that chapter, then be ready to probably, though not always, have to re-code the joiner-hairsp-joiner, because AO3 likes to drop it with edits for some reason — same w/ &zwj;, though I don't know about no-break HTML nobr /nobr — so if/when I later edit this tutorial and either or both of those aren't joined... I forgot or didn't bother]).  Once I had it worked out, I added a few more glyphs because it was a bit sparse (and seems now too dense), but since the &emsp; and spacebar spaces were already there and all paired-up, I didn't worry too much about sandwiching every single new glyph between two regular spaces (which is only necessary to ensure pretty margins for blocks of text, and minimize whitespace in justified text).

And here's the HTML, crammed in above the <img class="bggif"..., in order to cover as much real estate as possible:

<div class="borderinvis">
  <div class="overlappingtexttop"> /* this is the wrapper to permit the magic to work */
    <div class="overlappingtextbackground"> /* this is the one that does the magic itself */
 
<p>
<span class="green paragraph1words"></span>   <span class="matrix-1 paragraph2words">>/span>   <span class="matrix-2 paragraph1words"></span>   <span class="green paragraph3words"></span>   <span class="matrix-1 paragraph1words"></span>   <span class="matrix-2 paragraph3words"></span>   <span class="green paragraph1words"></span>   <span class="matrix-1 paragraph4words"></span>   <span class="matrix-2 paragraph2words"></span>   <span class="green paragraph1words"></span>   <span class="matrix-1 paragraph3words"></span>   <span class="matrix-2 paragraph1words"></span>   <span class="green paragraph2words"></span>   <span class="matrix-1 paragraph1words"></span>   <span class="matrix-2 paragraph5words"></span>   <span class="green paragraph1words"></span>   <span class="matrix-1 paragraph2words"></span>   <span class="matrix-2 paragraph1words"></span>   <span class="green paragraph3words"></span>   <span class="matrix-1 paragraph1words"></span>   <span class="matrix-2 paragraph3words"></span>   <span class="green paragraph1words"></span>   <span class="matrix-1 paragraph4words"></span>   <span class="matrix-2 paragraph2words"></span>   <span class="green paragraph1words"></span>   <span class="matrix-1 paragraph3words"></span>   <span class="matrix-2 paragraph1words"></span>   <span class="green paragraph2words"></span>   <span class="matrix-1 paragraph1words"></span>   <span class="matrix-2 paragraph1words"></span>   <span class="green paragraph3words"></span>   <span class="matrix-1 paragraph1words"></span>   <span class="matrix-2 paragraph3words"></span>   <span class="green paragraph1words"></span>   <span class="matrix-1 paragraph4words"></span>   <span class="matrix-2 paragraph2words"></span>   <span class="green paragraph1words"></span>   <span class="matrix-1 paragraph3words"></span>   <span class="matrix-2 paragraph1words"></span>   <span class="green paragraph2words"></span>   <span class="matrix-1 paragraph1words"></span>   <span class="matrix-2 paragraph5words"></span>   <span class="green paragraph1words"></span>   <span class="matrix-1 paragraph2words"></span>   <span class="matrix-2 paragraph1words"></span>   <span class="green paragraph3words"></span>   <span class="matrix-1 paragraph1words"></span>   <span class="matrix-2 paragraph3words"></span>   <span class="green paragraph1words"></span>   <span class="matrix-1 paragraph4words"></span>   <span class="matrix-2 paragraph2words"></span>   <span class="green paragraph1words"></span>   <span class="matrix-1 paragraph3words"></span>   <span class="matrix-2 paragraph1words"></span>   <span class="green paragraph2words"></span>   <span class="matrix-1 paragraph1words"></span>
</p> /* toss in as many spans as you need, and remember that you can use HTML tags and CSS selectors on the spans' classes, for effects like bold, shadow, etc. (though I would suggest that if so, then use them on a span of only one or two glyphs at a time, with longer spans of normal glyphs in between) */
</div>
  </div> /* closing both divs now */
 
<p> /* and this is where the rest of this tutorial's regular source code begins */
<img class="bggif" src="https://web.archive.org/web/20230930224042if_/https://upload.wikimedia.org/wikipedia/commons/c/cc/Digital_rain_animation_medium_letters_shine.gif" width="1" />
</p>
 
<div align="justify">

The regular font-size glyphs (paragraph1words) have the most glyphs in their paragraph and a lot of &emsp;-spacebar pairs, with fewer of either as we work up to the 500%-size paragraph with a single glyph and a few space-pairs to either side, so I opted to try to mix them up: I simply put the paragraphs in a sequence that might distribute them well enough without being too obviously repetitive (and particularly not the near-seeming big ones), {1213121 4 1213121 5 1213121 4 1213121}, and rotated straight through the three green font-colors, for a little variety (31 spans isn't quite an integer multiple of 3, I know, but... meh).

Top of buggy code subsection  ↑

 

Look ma, no hands!
  OR: How to un-fuck that code

10 Dec 2023 update:  I can't believe that it had been staring me in the face the whole time... (and if you don't see a bunch of floating green Matrix glyphs in the background of this work, then please let me know)

I had the epiphany this morning, just a few hours ago: I had the z-indices on the CSS paragraphs, and they needed to be on individualized containers (and I removed the indices from the paragraphs simply to clean up unnecessary extra code).

#workskin .overlappingtextbackground1 {
  position: absolute;
  width: 98%;
  z-index: -5 !important;
  opacity: 50%;
  overflow: auto;
  -webkit-user-select: none;
  -ms-user-select: none;
  -o-user-select: none;
  -moz-user-select: none;
  user-select: none;
}
 
#workskin .overlappingtextbackground2 {
  position: absolute;
  width: 98%;
  z-index: -4 !important;
  opacity: 50%;
  overflow: auto;
  -webkit-user-select: none;
  -ms-user-select: none;
  -o-user-select: none;
  -moz-user-select: none;
  user-select: none;
}
 
#workskin .overlappingtextbackground3 {
  position: absolute;
  width: 98%;
  z-index: -3 !important;
  opacity: 50%;
  overflow: auto;
  -webkit-user-select: none;
  -ms-user-select: none;
  -o-user-select: none;
  -moz-user-select: none;
  user-select: none;
}
 
#workskin .overlappingtextbackground4 {
  position: absolute;
  width: 98%;
  z-index: -2 !important;
  opacity: 50%;
  overflow: auto;
  -webkit-user-select: none;
  -ms-user-select: none;
  -o-user-select: none;
  -moz-user-select: none;
  user-select: none;
}
 
#workskin .overlappingtextbackground5 {
  position: absolute;
  width: 98%;
  z-index: -1 !important;
  opacity: 50%;
  overflow: auto;
  -webkit-user-select: none;
  -ms-user-select: none;
  -o-user-select: none;
  -moz-user-select: none;
  user-select: none;
}

And the HTML for it is as follows (and no, the overlappingtexttop div isn't missing by accident, it's no longer relevant with the z-indices fixed):

<div class="overlappingtextbackground1"><span class="green paragraph1words"></span>
    </div>
<div class="overlappingtextbackground2"><span class="matrix-1 paragraph2words"></span>
    </div>
<div class="overlappingtextbackground3"><span class="green paragraph3words"></span>
    </div>
<div class="overlappingtextbackground4"><span class="matrix-1 paragraph4words"></span>
    </div>
<div class="overlappingtextbackground5"><span class="matrix-2 paragraph5words"></span>
    </div>

You just plunk this block of divs (or just a couple of the divs) wherever you want, see how it looks, and plunk some more somewhere after the end of those glyphs.
NB:  It gets weird and adds an untouchable vertical scroll bar when you plunk them into a blockquote or a list, so... maybe don't do that.

I still wish to:

  • make the glyphs fall like rain (well, make them sit there while the next glyph down comes into existence beneath them);
  • make them blink (not really ever supported much, and deprecated now, and the Java and @ workarounds are verboten on AO3);
  • make them transform from one to another;
  • clean up my test set and toss in bold, sub/sup, furigana, etc. HTML tags around handfuls of onesy-twosy symbol-spans (or write a few extra classes for the various effects)... though this is never gonna happen since it's just a proof of concept;

But hey, at least they're no longer in front of images or the actual text! 🙂

Top of functional code subsection  ↑

 

...a-a-and that's all, folks!

 


 

OK.  That's it.  Now go do that voodoo that you do so well! ❤️

 


 

Also in this series (itself part of the CSS Abuse and HTML Tryhard collection):

  • Part 1 — How to AO3
      (general info. for newb.s, but includes tips and information that years-long veterans often don't know)
  • Part 2 — How to make and fix a series on AO3
      (plus unrelated tips re. Wayback, different spaces and dashes, TTS problems)
  • Part 3 — Analyzing AO3 reader traffic flow
      (one's own fics' reader traffic)
  • Part 4 — A year-long AO3 overall traffic analysis
      (when do people upload, read, comment, kudos, and bookmark?  Reader and new-upload traffic in general, across all of AO3⁠ ⁠)
  • Part 5 — Fonts, and colors, and work skins, oh my!
      (change your letters and ink color, see others' work skin secrets, etc.)
  • Part 6 — Chess puzzle extravaganza
      (256 randomly selected preconfigured chess puzzles, a new one with every refresh
      [secret message-reveal from BBEG, because of course];
      no JS: just HTML and some CSS)
  • Part 7 — Bubble-pop! game
      (More RNG fun;
    playable bubble-popping;
      no offsite JS: just CSS and some HTML;
    caution re. volume;
      full code included.)
  • Part 8 — Targeting specific AO3 work sections (not site) with CSS effects
      (wanna put some color into your CSS-verboten summary?  Maybe drop an image below your series link, or style your comments section? 😉)
  • Part 9 — Inside, Outside, Upside-down
      (a showpiece of fun that one can have with CSS — a challenge puzzle, rather than a tutorial;
      incl. CSS on a single paragraph within the work summary, among other things;
      try to navigate it, work out its little puzzles, and work out how it was all done;
    caution re. volume in ch. 1, and flashing lights on :hover in ch. 2;
    NB:  must be in single-chapter view, not entire-work)
  • Part 10 — Green Rain font, from The Matrix
      (several ways to drop Green Rain into your background, simulating the digital rain effect)
  • Part 11 — Building ConLangs, with a concrete example
      (going about constructing one's own invented language: words, grammar, writing, etc.)

NB:  For simplicity, I've collected those and later CSS-heavy works and [playable] games (such as the Bubble-Pop! game, or the point-and-click CYOA Hunt the Wumpus, for example) together in the CSS Abuse and HTML Tryhard collection.


NB:  If the work skin [for this piece or any other] was stripped by downloading, so that you can't see any red ink or yellow highlighting or any other special effect, then please see my fonts tutorial's sub-section on re-inserting rules.

 

 

O ~~~ O

 

Notes:

NB:  How the hell did I get a chapter on a single-chapter work?!?
  Cf. Targeting specific AO3 work sections (not site) with CSS effects' work endnotes for the full explanation.


1  Worth noting  Pages suffer bit decay to the æther, so here's the CodePen for diacritic color change via HTML and CSS, respectively, with the example of an acute “í” with a red diacritic (just in case that page disappears, since I couldn't save it on Wayback):

<span class="sample">
 <span class="diacritic-root">
 <span class="diacritic-colored">í</span>
 <span class="diacritic-base">ı</span>
 </span>
</span>

$diacritic-color: #f23;

 

 

 

/* color the diacritic and overlay it with the base letter */
.diacritic-root {
 position: relative;
 display: inline-block; /* enable box-sizing */
}
.diacritic-colored {
 color: $diacritic-color;
}
.diacritic-base {
 position: absolute;
 top: 0;
 left: 0;
 /* make the source text selectable */
 user-select: none;
 pointer-events: none;
}

Though there's more material on this at these two StackExchange questions.


If you like my writing style, then please browse through ►my collections◄, where I have everything arranged thematically (dice-RPGs, zombies, food porn, sci-fi, romance, comedy, etc.) for easy perusal, or just subscribe to my author's page in order to get constant updates on all of my work! 🙂

And yes, I do answer questions (I love them!), but in this instance I have to caution you that I know basically nothing of webkit stuff, just normal HTML and some limited CSS, so... I really might not be the best person to ask in this case. 😅

Series this work belongs to: