Over-the-top customization that you do not need but are empowered to do

shed.css allows you nearly full control of it's output, if you so choose. These docs will come if I get enough requests, but to give you an idea:

@import "css-modularscale";
@import "shed-css/src/lib/font-size.css";
@import "shed-css/src/lib/z-index.css";
@import "shed-css/src/lib/font-weight.css";
@import "shed-css/src/lib/font-family.css";
@import "shed-css/src/lib/font-style.css";
@import "shed-css/src/lib/text-align.css";
@import "shed-css/src/lib/space.css";
@import "shed-css/src/lib/display.css";
@import "shed-css/src/lib/float.css";
@import "shed-css/src/lib/vertical-align.css";
@import "shed-css/src/lib/sides.css";
@import "shed-css/src/lib/flex.css";
@import "shed-css/src/lib/size.css";
@import "shed-css/src/lib/line-height.css";
@import "shed-css/src/lib/letter-spacing.css";
@import "shed-css/src/lib/text-decoration.css";
@import "shed-css/src/lib/overflow.css";
@import "shed-css/src/lib/radius.css";
@import "shed-css/src/lib/position.css";
@import "shed-css/src/lib/max-width.css";
@import "shed-css/src/lib/text-transform.css";
@import "shed-css/src/lib/cursor.css";

:root {
	--mqs: n, xs, sm ,md, lg, xl;
	--ms: -dot1, -dot2, -dot3, -dot4, -dot5, -dot6, -dot7, -dot8, -dot9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;
	--z: \.1, \.2, \.3, \.4, \.5, \.6, \.7, \.8, \.9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;
	--f-f-styles: (sans, serif, mono), (f-f-sans, f-f-serif, f-f-mono);
	--f-f-sans: sans-serif;
	--f-f-serif: serif;
	--f-f-mono: monospace;
	--f-s-styles: (normal, italic, oblique), (n, i, o);
	--f-w-min: 100;
	--f-w-max: 900;
	--l-h--default: 1;
	--l-h--tight: var(--z2);
	--l-h--normal: var(--z1);
	--l-h--loose: var(--z4);
	--l-h: (d, t, n, l), (var(--l-h--default), var(--l-h--tight), var(--l-h--normal), var(--l-h--loose));
	--l-s--default: normal;
	--l-s--tight: -.08em;
	--l-s--normal: .16em;
	--l-s--loose: .32em;
	--dirs: all, top, bottom, left, right, x, y;
	--dirs-short: a, t, b, l, r, x, y;
	--display-props: block, inline-block, inline, flex, table, table-cell, none;
	--display-shorthands: b, i-b, i, f, t, t-c, n;
	--pos-options: (absolute, relative, static, fixed, cover), (a, r, s, f, c);
	--sides-options: (top, bottom, left, right);
	--z-dot9: var(--ms-1);
	--z-dot8: var(--ms-2);
	--z-dot7: var(--ms-3);
	--z-dot6: var(--ms-4);
	--z-dot5: var(--ms-5);
	--z-dot4: var(--ms-6);
	--z-dot3: var(--ms-7);
	--z-dot2: var(--ms-8);
	--z-dot1: var(--ms-9);
	--z0: 0;
	--z1: var(--ms0);
	--z2: var(--ms1);
	--z3: var(--ms2);
	--z4: var(--ms3);
	--z5: var(--ms4);
	--z6: var(--ms5);
	--z7: var(--ms6);
	--z8: var(--ms7);
	--z9: var(--ms8);
	--z10: var(--ms9);

@custom-media --mq-xs (min-width: 20em);
@custom-media --mq-sm (min-width: 30em);
@custom-media --mq-md (min-width: 37em);
@custom-media --mq-lg (min-width: 50em);
@custom-media --mq-xl (min-width: 75em);

As you can see, shed makes heavy use of maps and variables, and loops over them in order to generate its classes.