Skin generator
Start from a skin that already works, change what you care about, and let the rest follow. The export is a complete, valid [data-skin] block — every colour a light-dark() with both halves literal, no placeholders, nothing left to look up.
Then hand-edit it
The derived values are arithmetic, and arithmetic does not know that your warning yellow needs more lightness than the formula gave it, or that the tint behind a danger banner is one step too loud. That is the point of exporting literals rather than a function call: every number is yours to move, and moving one does not silently move four others.
Paste the block into your own stylesheet, set data-skin on <html>, and you are done. The mode follows the reader unless you also set data-theme. There is nothing to register and nothing to rebuild.