<style> tags. Images and fonts (and pretty much whatever other kind of asset) aren’t too hard because Data URLs exist. See Terence’s post for an extra-tricky final version including
Reminds me of a couple of other tricks…
- You don’t have to include CSS in your HTML, you can force an HTML file to load the styles via header.
- You can use that trick above, literally send zero HTML, and still make a thing that looks like a website because of how the browser implies certain HTML, which you can then append content via CSS pseudo elements. Read: “Using CSS without HTML”