/* palettes.css: one palette system for the 6 project sites.
   Generated by gen_palettes.py; edit that script, not this file.
   Light values live on .site-<name>; dark values apply under
   prefers-color-scheme: dark; [data-scheme] forces either mode.
   Every text pair meets WCAG 2.x 4.5:1, UI pairs 3:1: see
   contrast-report.txt. No en or em dashes appear in this file. */

/* secureconfig: red, OKLCH hue 27 */
.site-secureconfig {
  --bg: #ffeff0;
  --surface-raised: #fffafb;
  --surface-sunken: #fae3e4;
  --text: #2d181b;
  --text-muted: #7a6062;
  --rule: #e6c8cb;
  --rule-strong: #a58185;
  --accent: #bc3732;
  --on-accent: #fffafb;
  --link: #ab3731;
  --link-hover: #931e1c;
  --focus: #e6443d;
  --selection: #ffc8c1;
  --code-bg: #fce7e8;
  --callout-bg: #ffe9e6;
  --glow: #ffd2cc;
  --brand: #c9302d;
  --row-tint: #fae8e6;
  --row-hover: #ffe3df;
  --heat-0: #ffffff;
  --heat-1: #fff6f5;
  --heat-2: #ffedea;
  --heat-3: #ffe4e0;
  --heat-4: #fedbd6;
  --grp-1: #bc3732;
  --grp-2: #a25100;
  --grp-3: #7c6300;
  --grp-4: #3a732c;
  --grp-5: #2a68a8;
  --grp-6: #8a509c;
}
@media (prefers-color-scheme: dark) {
  .site-secureconfig:not([data-scheme="light"]) {
    --bg: #170707;
    --surface-raised: #231212;
    --surface-sunken: #0b0202;
    --text: #e9e9e9;
    --text-muted: #989898;
    --rule: #3c2828;
    --rule-strong: #7a5e5e;
    --accent: #ef675c;
    --on-accent: #0b0202;
    --link: #ee7a6f;
    --link-hover: #ff968b;
    --focus: #ff6459;
    --selection: #753933;
    --code-bg: #0a0202;
    --callout-bg: #2a1310;
    --glow: #601f1b;
    --brand: #ef5f55;
    --row-tint: #1e0f0f;
    --row-hover: #2d1516;
    --heat-0: #170e0e;
    --heat-1: #251011;
    --heat-2: #341214;
    --heat-3: #431217;
    --heat-4: #52111a;
    --grp-1: #fd7468;
    --grp-2: #ef852e;
    --grp-3: #c6a000;
    --grp-4: #7bb76e;
    --grp-5: #6aa9ed;
    --grp-6: #c689d9;
}
}
[data-scheme="light"].site-secureconfig {
  --bg: #ffeff0;
  --surface-raised: #fffafb;
  --surface-sunken: #fae3e4;
  --text: #2d181b;
  --text-muted: #7a6062;
  --rule: #e6c8cb;
  --rule-strong: #a58185;
  --accent: #bc3732;
  --on-accent: #fffafb;
  --link: #ab3731;
  --link-hover: #931e1c;
  --focus: #e6443d;
  --selection: #ffc8c1;
  --code-bg: #fce7e8;
  --callout-bg: #ffe9e6;
  --glow: #ffd2cc;
  --brand: #c9302d;
  --row-tint: #fae8e6;
  --row-hover: #ffe3df;
  --heat-0: #ffffff;
  --heat-1: #fff6f5;
  --heat-2: #ffedea;
  --heat-3: #ffe4e0;
  --heat-4: #fedbd6;
  --grp-1: #bc3732;
  --grp-2: #a25100;
  --grp-3: #7c6300;
  --grp-4: #3a732c;
  --grp-5: #2a68a8;
  --grp-6: #8a509c;
}
[data-scheme="dark"].site-secureconfig {
  --bg: #170707;
  --surface-raised: #231212;
  --surface-sunken: #0b0202;
  --text: #e9e9e9;
  --text-muted: #989898;
  --rule: #3c2828;
  --rule-strong: #7a5e5e;
  --accent: #ef675c;
  --on-accent: #0b0202;
  --link: #ee7a6f;
  --link-hover: #ff968b;
  --focus: #ff6459;
  --selection: #753933;
  --code-bg: #0a0202;
  --callout-bg: #2a1310;
  --glow: #601f1b;
  --brand: #ef5f55;
  --row-tint: #1e0f0f;
  --row-hover: #2d1516;
  --heat-0: #170e0e;
  --heat-1: #251011;
  --heat-2: #341214;
  --heat-3: #431217;
  --heat-4: #52111a;
  --grp-1: #fd7468;
  --grp-2: #ef852e;
  --grp-3: #c6a000;
  --grp-4: #7bb76e;
  --grp-5: #6aa9ed;
  --grp-6: #c689d9;
}

/* opfiles: orange, OKLCH hue 55 */
.site-opfiles {
  --bg: #fdf1e5;
  --surface-raised: #fffbf7;
  --surface-sunken: #f3e7dc;
  --text: #261d16;
  --text-muted: #70655d;
  --rule: #dbcec4;
  --rule-strong: #96887c;
  --accent: #a25100;
  --on-accent: #fffbf7;
  --link: #954b00;
  --link-hover: #793b00;
  --focus: #ca6800;
  --selection: #fdccac;
  --code-bg: #f5ebe1;
  --callout-bg: #ffeadc;
  --glow: #ffd4b8;
  --brand: #ec7c0e;
  --row-tint: #f8eae0;
  --row-hover: #fbe4d5;
  --heat-0: #ffffff;
  --heat-1: #fff8f3;
  --heat-2: #fff1e8;
  --heat-3: #ffe9dc;
  --heat-4: #ffe2d0;
  --grp-1: #ba3630;
  --grp-2: #a25100;
  --grp-3: #7c6300;
  --grp-4: #3a732c;
  --grp-5: #2a68a8;
  --grp-6: #8a509c;
}
@media (prefers-color-scheme: dark) {
  .site-opfiles:not([data-scheme="light"]) {
    --bg: #160802;
    --surface-raised: #21140a;
    --surface-sunken: #0a0300;
    --text: #e9e9e9;
    --text-muted: #989898;
    --rule: #3a2a1f;
    --rule-strong: #776153;
    --accent: #e1791b;
    --on-accent: #0a0300;
    --link: #e18846;
    --link-hover: #f2a26a;
    --focus: #ed7b00;
    --selection: #703f19;
    --code-bg: #090200;
    --callout-bg: #291507;
    --glow: #582900;
    --brand: #f68622;
    --row-tint: #1d1108;
    --row-hover: #2b1709;
    --heat-0: #160f0a;
    --heat-1: #231307;
    --heat-2: #311602;
    --heat-3: #3d1a00;
    --heat-4: #482000;
    --grp-1: #fd7468;
    --grp-2: #ef852e;
    --grp-3: #c6a000;
    --grp-4: #7bb76e;
    --grp-5: #6aa9ed;
    --grp-6: #c689d9;
}
}
[data-scheme="light"].site-opfiles {
  --bg: #fdf1e5;
  --surface-raised: #fffbf7;
  --surface-sunken: #f3e7dc;
  --text: #261d16;
  --text-muted: #70655d;
  --rule: #dbcec4;
  --rule-strong: #96887c;
  --accent: #a25100;
  --on-accent: #fffbf7;
  --link: #954b00;
  --link-hover: #793b00;
  --focus: #ca6800;
  --selection: #fdccac;
  --code-bg: #f5ebe1;
  --callout-bg: #ffeadc;
  --glow: #ffd4b8;
  --brand: #ec7c0e;
  --row-tint: #f8eae0;
  --row-hover: #fbe4d5;
  --heat-0: #ffffff;
  --heat-1: #fff8f3;
  --heat-2: #fff1e8;
  --heat-3: #ffe9dc;
  --heat-4: #ffe2d0;
  --grp-1: #ba3630;
  --grp-2: #a25100;
  --grp-3: #7c6300;
  --grp-4: #3a732c;
  --grp-5: #2a68a8;
  --grp-6: #8a509c;
}
[data-scheme="dark"].site-opfiles {
  --bg: #160802;
  --surface-raised: #21140a;
  --surface-sunken: #0a0300;
  --text: #e9e9e9;
  --text-muted: #989898;
  --rule: #3a2a1f;
  --rule-strong: #776153;
  --accent: #e1791b;
  --on-accent: #0a0300;
  --link: #e18846;
  --link-hover: #f2a26a;
  --focus: #ed7b00;
  --selection: #703f19;
  --code-bg: #090200;
  --callout-bg: #291507;
  --glow: #582900;
  --brand: #f68622;
  --row-tint: #1d1108;
  --row-hover: #2b1709;
  --heat-0: #160f0a;
  --heat-1: #231307;
  --heat-2: #311602;
  --heat-3: #3d1a00;
  --heat-4: #482000;
  --grp-1: #fd7468;
  --grp-2: #ef852e;
  --grp-3: #c6a000;
  --grp-4: #7bb76e;
  --grp-5: #6aa9ed;
  --grp-6: #c689d9;
}

/* auditthis: yellow, OKLCH hue 92 */
.site-auditthis {
  --bg: #faf2e4;
  --surface-raised: #fffbf5;
  --surface-sunken: #f0e9db;
  --text: #231f15;
  --text-muted: #6c675b;
  --rule: #d7d0c2;
  --rule-strong: #918a7a;
  --accent: #7d6500;
  --on-accent: #fffbf5;
  --link: #735c00;
  --link-hover: #5c4900;
  --focus: #9e8000;
  --selection: #e8d7a3;
  --code-bg: #f3ece0;
  --callout-bg: #f7eed5;
  --glow: #f2dd9d;
  --brand: #f4c929;
  --row-tint: #f1edde;
  --row-hover: #f0e9d1;
  --heat-0: #ffffff;
  --heat-1: #fffae8;
  --heat-2: #fff4d1;
  --heat-3: #ffeeb9;
  --heat-4: #ffe8a0;
  --grp-1: #bc3732;
  --grp-2: #a25100;
  --grp-3: #7d6500;
  --grp-4: #3a732c;
  --grp-5: #2c6aaa;
  --grp-6: #8a509c;
}
@media (prefers-color-scheme: dark) {
  .site-auditthis:not([data-scheme="light"]) {
    --bg: #100c01;
    --surface-raised: #1b1707;
    --surface-sunken: #070400;
    --text: #e9e9e9;
    --text-muted: #989898;
    --rule: #322e1c;
    --rule-strong: #6b654d;
    --accent: #b79400;
    --on-accent: #070400;
    --link: #be9e32;
    --link-hover: #d1b55d;
    --focus: #be9a00;
    --selection: #5e4b02;
    --code-bg: #060400;
    --callout-bg: #211a03;
    --glow: #453600;
    --brand: #f8cc2f;
    --row-tint: #171406;
    --row-hover: #231d05;
    --heat-0: #121009;
    --heat-1: #1c1704;
    --heat-2: #261d00;
    --heat-3: #2e2400;
    --heat-4: #362c00;
    --grp-1: #fd7468;
    --grp-2: #ef852e;
    --grp-3: #c6a000;
    --grp-4: #7bb76e;
    --grp-5: #6aa9ed;
    --grp-6: #c689d9;
}
}
[data-scheme="light"].site-auditthis {
  --bg: #faf2e4;
  --surface-raised: #fffbf5;
  --surface-sunken: #f0e9db;
  --text: #231f15;
  --text-muted: #6c675b;
  --rule: #d7d0c2;
  --rule-strong: #918a7a;
  --accent: #7d6500;
  --on-accent: #fffbf5;
  --link: #735c00;
  --link-hover: #5c4900;
  --focus: #9e8000;
  --selection: #e8d7a3;
  --code-bg: #f3ece0;
  --callout-bg: #f7eed5;
  --glow: #f2dd9d;
  --brand: #f4c929;
  --row-tint: #f1edde;
  --row-hover: #f0e9d1;
  --heat-0: #ffffff;
  --heat-1: #fffae8;
  --heat-2: #fff4d1;
  --heat-3: #ffeeb9;
  --heat-4: #ffe8a0;
  --grp-1: #bc3732;
  --grp-2: #a25100;
  --grp-3: #7d6500;
  --grp-4: #3a732c;
  --grp-5: #2c6aaa;
  --grp-6: #8a509c;
}
[data-scheme="dark"].site-auditthis {
  --bg: #100c01;
  --surface-raised: #1b1707;
  --surface-sunken: #070400;
  --text: #e9e9e9;
  --text-muted: #989898;
  --rule: #322e1c;
  --rule-strong: #6b654d;
  --accent: #b79400;
  --on-accent: #070400;
  --link: #be9e32;
  --link-hover: #d1b55d;
  --focus: #be9a00;
  --selection: #5e4b02;
  --code-bg: #060400;
  --callout-bg: #211a03;
  --glow: #453600;
  --brand: #f8cc2f;
  --row-tint: #171406;
  --row-hover: #231d05;
  --heat-0: #121009;
  --heat-1: #1c1704;
  --heat-2: #261d00;
  --heat-3: #2e2400;
  --heat-4: #362c00;
  --grp-1: #fd7468;
  --grp-2: #ef852e;
  --grp-3: #c6a000;
  --grp-4: #7bb76e;
  --grp-5: #6aa9ed;
  --grp-6: #c689d9;
}

/* cleanlanguage: green, OKLCH hue 140 */
.site-cleanlanguage {
  --bg: #f6f4e7;
  --surface-raised: #fcfcf6;
  --surface-sunken: #ebeade;
  --text: #1f2017;
  --text-muted: #67695e;
  --rule: #d0d2c6;
  --rule-strong: #898d7f;
  --accent: #3b752e;
  --on-accent: #fcfcf6;
  --link: #386a2c;
  --link-hover: #245618;
  --focus: #42942e;
  --selection: #c0e3b8;
  --code-bg: #eeede2;
  --callout-bg: #e3f5df;
  --glow: #c1edb7;
  --brand: #59a847;
  --row-tint: #e6f0e4;
  --row-hover: #deeeda;
  --heat-0: #ffffff;
  --heat-1: #eaffe6;
  --heat-2: #d4ffca;
  --heat-3: #baffab;
  --heat-4: #9dff87;
  --grp-1: #bc3732;
  --grp-2: #a25100;
  --grp-3: #7d6500;
  --grp-4: #3b752e;
  --grp-5: #2c6aaa;
  --grp-6: #8a509c;
}
@media (prefers-color-scheme: dark) {
  .site-cleanlanguage:not([data-scheme="light"]) {
    --bg: #060f04;
    --surface-raised: #101a0e;
    --surface-sunken: #020601;
    --text: #e9e9e9;
    --text-muted: #989898;
    --rule: #263223;
    --rule-strong: #5a6a56;
    --accent: #6faa62;
    --on-accent: #020601;
    --link: #7fb174;
    --link-hover: #99c68f;
    --focus: #68b457;
    --selection: #32582a;
    --code-bg: #010501;
    --callout-bg: #101f0d;
    --glow: #18430d;
    --brand: #65b553;
    --row-tint: #0d170b;
    --row-hover: #12210f;
    --heat-0: #0d120c;
    --heat-1: #0e1b0b;
    --heat-2: #0e2409;
    --heat-3: #0d2d06;
    --heat-4: #0a3700;
    --grp-1: #fd7468;
    --grp-2: #ef852e;
    --grp-3: #c6a000;
    --grp-4: #7bb76e;
    --grp-5: #6aa9ed;
    --grp-6: #c689d9;
}
}
[data-scheme="light"].site-cleanlanguage {
  --bg: #f6f4e7;
  --surface-raised: #fcfcf6;
  --surface-sunken: #ebeade;
  --text: #1f2017;
  --text-muted: #67695e;
  --rule: #d0d2c6;
  --rule-strong: #898d7f;
  --accent: #3b752e;
  --on-accent: #fcfcf6;
  --link: #386a2c;
  --link-hover: #245618;
  --focus: #42942e;
  --selection: #c0e3b8;
  --code-bg: #eeede2;
  --callout-bg: #e3f5df;
  --glow: #c1edb7;
  --brand: #59a847;
  --row-tint: #e6f0e4;
  --row-hover: #deeeda;
  --heat-0: #ffffff;
  --heat-1: #eaffe6;
  --heat-2: #d4ffca;
  --heat-3: #baffab;
  --heat-4: #9dff87;
  --grp-1: #bc3732;
  --grp-2: #a25100;
  --grp-3: #7d6500;
  --grp-4: #3b752e;
  --grp-5: #2c6aaa;
  --grp-6: #8a509c;
}
[data-scheme="dark"].site-cleanlanguage {
  --bg: #060f04;
  --surface-raised: #101a0e;
  --surface-sunken: #020601;
  --text: #e9e9e9;
  --text-muted: #989898;
  --rule: #263223;
  --rule-strong: #5a6a56;
  --accent: #6faa62;
  --on-accent: #020601;
  --link: #7fb174;
  --link-hover: #99c68f;
  --focus: #68b457;
  --selection: #32582a;
  --code-bg: #010501;
  --callout-bg: #101f0d;
  --glow: #18430d;
  --brand: #65b553;
  --row-tint: #0d170b;
  --row-hover: #12210f;
  --heat-0: #0d120c;
  --heat-1: #0e1b0b;
  --heat-2: #0e2409;
  --heat-3: #0d2d06;
  --heat-4: #0a3700;
  --grp-1: #fd7468;
  --grp-2: #ef852e;
  --grp-3: #c6a000;
  --grp-4: #7bb76e;
  --grp-5: #6aa9ed;
  --grp-6: #c689d9;
}

/* aiqt: blue, OKLCH hue 252 */
.site-aiqt {
  --bg: #f4f3f1;
  --surface-raised: #fcfcfb;
  --surface-sunken: #eae9e8;
  --text: #1d1f21;
  --text-muted: #65686a;
  --rule: #cfd1d3;
  --rule-strong: #878b8f;
  --accent: #2c6aaa;
  --on-accent: #fcfcfb;
  --link: #2b619a;
  --link-hover: #154d84;
  --focus: #2985df;
  --selection: #bbdbff;
  --code-bg: #ededeb;
  --callout-bg: #e3f0ff;
  --glow: #c7e1ff;
  --brand: #136dbf;
  --row-tint: #e4eefa;
  --row-hover: #daebfe;
  --heat-0: #ffffff;
  --heat-1: #f5faff;
  --heat-2: #ecf5ff;
  --heat-3: #e2efff;
  --heat-4: #d8eaff;
  --grp-1: #bc3732;
  --grp-2: #a25100;
  --grp-3: #7d6500;
  --grp-4: #3a732c;
  --grp-5: #2c6aaa;
  --grp-6: #8a509c;
}
@media (prefers-color-scheme: dark) {
  .site-aiqt:not([data-scheme="light"]) {
    --bg: #040d19;
    --surface-raised: #0d1824;
    --surface-sunken: #01050c;
    --text: #e9e9e9;
    --text-muted: #989898;
    --rule: #232f3d;
    --rule-strong: #57687b;
    --accent: #5e9ce0;
    --on-accent: #01050c;
    --link: #71a5e0;
    --link-hover: #8dbbf0;
    --focus: #51a2f8;
    --selection: #274f7a;
    --code-bg: #01040b;
    --callout-bg: #0c1b2c;
    --glow: #073967;
    --brand: #4495ea;
    --row-tint: #0b151f;
    --row-hover: #0e1e2f;
    --heat-0: #0c1117;
    --heat-1: #0b1827;
    --heat-2: #081f37;
    --heat-3: #032648;
    --heat-4: #002d58;
    --grp-1: #fd7468;
    --grp-2: #ef852e;
    --grp-3: #c6a000;
    --grp-4: #7bb76e;
    --grp-5: #6aa9ed;
    --grp-6: #c689d9;
}
}
[data-scheme="light"].site-aiqt {
  --bg: #f4f3f1;
  --surface-raised: #fcfcfb;
  --surface-sunken: #eae9e8;
  --text: #1d1f21;
  --text-muted: #65686a;
  --rule: #cfd1d3;
  --rule-strong: #878b8f;
  --accent: #2c6aaa;
  --on-accent: #fcfcfb;
  --link: #2b619a;
  --link-hover: #154d84;
  --focus: #2985df;
  --selection: #bbdbff;
  --code-bg: #ededeb;
  --callout-bg: #e3f0ff;
  --glow: #c7e1ff;
  --brand: #136dbf;
  --row-tint: #e4eefa;
  --row-hover: #daebfe;
  --heat-0: #ffffff;
  --heat-1: #f5faff;
  --heat-2: #ecf5ff;
  --heat-3: #e2efff;
  --heat-4: #d8eaff;
  --grp-1: #bc3732;
  --grp-2: #a25100;
  --grp-3: #7d6500;
  --grp-4: #3a732c;
  --grp-5: #2c6aaa;
  --grp-6: #8a509c;
}
[data-scheme="dark"].site-aiqt {
  --bg: #040d19;
  --surface-raised: #0d1824;
  --surface-sunken: #01050c;
  --text: #e9e9e9;
  --text-muted: #989898;
  --rule: #232f3d;
  --rule-strong: #57687b;
  --accent: #5e9ce0;
  --on-accent: #01050c;
  --link: #71a5e0;
  --link-hover: #8dbbf0;
  --focus: #51a2f8;
  --selection: #274f7a;
  --code-bg: #01040b;
  --callout-bg: #0c1b2c;
  --glow: #073967;
  --brand: #4495ea;
  --row-tint: #0b151f;
  --row-hover: #0e1e2f;
  --heat-0: #0c1117;
  --heat-1: #0b1827;
  --heat-2: #081f37;
  --heat-3: #032648;
  --heat-4: #002d58;
  --grp-1: #fd7468;
  --grp-2: #ef852e;
  --grp-3: #c6a000;
  --grp-4: #7bb76e;
  --grp-5: #6aa9ed;
  --grp-6: #c689d9;
}

/* grclibrary: purple, OKLCH hue 318 */
.site-grclibrary {
  --bg: #fbf1ef;
  --surface-raised: #fffbfa;
  --surface-sunken: #f0e7e6;
  --text: #241d20;
  --text-muted: #6d6568;
  --rule: #d8ced0;
  --rule-strong: #93898d;
  --accent: #8a509c;
  --on-accent: #fffbfa;
  --link: #7e4b8e;
  --link-hover: #6a3779;
  --focus: #af5fc7;
  --selection: #ebcaf6;
  --code-bg: #f3ebea;
  --callout-bg: #f9e8fe;
  --glow: #f3cfff;
  --brand: #9049a5;
  --row-tint: #f3e9f6;
  --row-hover: #f3e3f8;
  --heat-0: #ffffff;
  --heat-1: #fdf6ff;
  --heat-2: #fbedff;
  --heat-3: #f8e3ff;
  --heat-4: #f6daff;
  --grp-1: #ba3630;
  --grp-2: #a25100;
  --grp-3: #7c6300;
  --grp-4: #3a732c;
  --grp-5: #2a68a8;
  --grp-6: #8a509c;
}
@media (prefers-color-scheme: dark) {
  .site-grclibrary:not([data-scheme="light"]) {
    --bg: #110814;
    --surface-raised: #1d1320;
    --surface-sunken: #070309;
    --text: #e9e9e9;
    --text-muted: #989898;
    --rule: #342938;
    --rule-strong: #6f6074;
    --accent: #b97dcc;
    --on-accent: #070309;
    --link: #be8bce;
    --link-hover: #d2a4e0;
    --focus: #c77bde;
    --selection: #603d6b;
    --code-bg: #060208;
    --callout-bg: #221426;
    --glow: #4c2557;
    --brand: #bb75d0;
    --row-tint: #19101b;
    --row-hover: #251729;
    --heat-0: #130e15;
    --heat-1: #1e1221;
    --heat-2: #29152f;
    --heat-3: #34173c;
    --heat-4: #3f194b;
    --grp-1: #fd7468;
    --grp-2: #ef852e;
    --grp-3: #c6a000;
    --grp-4: #7bb76e;
    --grp-5: #6aa9ed;
    --grp-6: #c689d9;
}
}
[data-scheme="light"].site-grclibrary {
  --bg: #fbf1ef;
  --surface-raised: #fffbfa;
  --surface-sunken: #f0e7e6;
  --text: #241d20;
  --text-muted: #6d6568;
  --rule: #d8ced0;
  --rule-strong: #93898d;
  --accent: #8a509c;
  --on-accent: #fffbfa;
  --link: #7e4b8e;
  --link-hover: #6a3779;
  --focus: #af5fc7;
  --selection: #ebcaf6;
  --code-bg: #f3ebea;
  --callout-bg: #f9e8fe;
  --glow: #f3cfff;
  --brand: #9049a5;
  --row-tint: #f3e9f6;
  --row-hover: #f3e3f8;
  --heat-0: #ffffff;
  --heat-1: #fdf6ff;
  --heat-2: #fbedff;
  --heat-3: #f8e3ff;
  --heat-4: #f6daff;
  --grp-1: #ba3630;
  --grp-2: #a25100;
  --grp-3: #7c6300;
  --grp-4: #3a732c;
  --grp-5: #2a68a8;
  --grp-6: #8a509c;
}
[data-scheme="dark"].site-grclibrary {
  --bg: #110814;
  --surface-raised: #1d1320;
  --surface-sunken: #070309;
  --text: #e9e9e9;
  --text-muted: #989898;
  --rule: #342938;
  --rule-strong: #6f6074;
  --accent: #b97dcc;
  --on-accent: #070309;
  --link: #be8bce;
  --link-hover: #d2a4e0;
  --focus: #c77bde;
  --selection: #603d6b;
  --code-bg: #060208;
  --callout-bg: #221426;
  --glow: #4c2557;
  --brand: #bb75d0;
  --row-tint: #19101b;
  --row-hover: #251729;
  --heat-0: #130e15;
  --heat-1: #1e1221;
  --heat-2: #29152f;
  --heat-3: #34173c;
  --heat-4: #3f194b;
  --grp-1: #fd7468;
  --grp-2: #ef852e;
  --grp-3: #c6a000;
  --grp-4: #7bb76e;
  --grp-5: #6aa9ed;
  --grp-6: #c689d9;
}

/* The cyclic 6-stop warm rainbow for the sliced cards and the family footer.
   --rainbow-N is card N's own hue; --rainbow-join-N is the shared edge colour
   between card N and card N+1 (join-6 is purple to red, closing the ring).
   Each card: 0% join-(N-1), 20% own, 80% own, 100% join-N. Each hue keeps
   its own lightness so red, orange and yellow read as distinct colours.
   --rainbow-ink-N is the darker or lighter ink, whichever reads better.
   --band-grey is the neutral tail of the footer band (decorative). */
:root, [data-scheme="light"] {
  --rainbow-1: #c9302d; /* secureconfig */
  --rainbow-2: #ec7c0e; /* opfiles */
  --rainbow-3: #f4c929; /* auditthis */
  --rainbow-4: #59a847; /* cleanlanguage */
  --rainbow-5: #136dbf; /* aiqt */
  --rainbow-6: #9049a5; /* grclibrary */
  --rainbow-join-1: #db5925; /* secureconfig to opfiles */
  --rainbow-join-2: #f2a31d; /* opfiles to auditthis */
  --rainbow-join-3: #adba3e; /* auditthis to cleanlanguage */
  --rainbow-join-4: #328f8e; /* cleanlanguage to aiqt */
  --rainbow-join-5: #665eb2; /* aiqt to grclibrary */
  --rainbow-join-6: #ac4571; /* grclibrary to secureconfig */
  --rainbow-ink-1: #fffaf2;
  --rainbow-ink-2: #1d1a16;
  --rainbow-ink-3: #1d1a16;
  --rainbow-ink-4: #1d1a16;
  --rainbow-ink-5: #fffaf2;
  --rainbow-ink-6: #fffaf2;
  --band-grey: #4a4a4a; /* the neutral grey of the footer band's tail; decorative, no text on it */
}
@media (prefers-color-scheme: dark) {
  :root:not([data-scheme="light"]) {
    --rainbow-1: #ef5f55; /* secureconfig */
    --rainbow-2: #f68622; /* opfiles */
    --rainbow-3: #f8cc2f; /* auditthis */
    --rainbow-4: #65b553; /* cleanlanguage */
    --rainbow-5: #4495ea; /* aiqt */
    --rainbow-6: #bb75d0; /* grclibrary */
    --rainbow-join-1: #f37342; /* secureconfig to opfiles */
    --rainbow-join-2: #f9aa29; /* opfiles to auditthis */
    --rainbow-join-3: #b4c247; /* auditthis to cleanlanguage */
    --rainbow-join-4: #50a9a8; /* cleanlanguage to aiqt */
    --rainbow-join-5: #8c87dd; /* aiqt to grclibrary */
    --rainbow-join-6: #d56f98; /* grclibrary to secureconfig */
    --rainbow-ink-1: #1d1a16;
    --rainbow-ink-2: #1d1a16;
    --rainbow-ink-3: #1d1a16;
    --rainbow-ink-4: #1d1a16;
    --rainbow-ink-5: #1d1a16;
    --rainbow-ink-6: #1d1a16;
    --band-grey: #5c5c5c; /* the neutral grey of the footer band's tail; decorative, no text on it */
  }
}
[data-scheme="dark"] {
  --rainbow-1: #ef5f55; /* secureconfig */
  --rainbow-2: #f68622; /* opfiles */
  --rainbow-3: #f8cc2f; /* auditthis */
  --rainbow-4: #65b553; /* cleanlanguage */
  --rainbow-5: #4495ea; /* aiqt */
  --rainbow-6: #bb75d0; /* grclibrary */
  --rainbow-join-1: #f37342; /* secureconfig to opfiles */
  --rainbow-join-2: #f9aa29; /* opfiles to auditthis */
  --rainbow-join-3: #b4c247; /* auditthis to cleanlanguage */
  --rainbow-join-4: #50a9a8; /* cleanlanguage to aiqt */
  --rainbow-join-5: #8c87dd; /* aiqt to grclibrary */
  --rainbow-join-6: #d56f98; /* grclibrary to secureconfig */
  --rainbow-ink-1: #1d1a16;
  --rainbow-ink-2: #1d1a16;
  --rainbow-ink-3: #1d1a16;
  --rainbow-ink-4: #1d1a16;
  --rainbow-ink-5: #1d1a16;
  --rainbow-ink-6: #1d1a16;
  --band-grey: #5c5c5c; /* the neutral grey of the footer band's tail; decorative, no text on it */
}

/* Sliced rainbow cards. Markup: <ul class="rainbow"><li class="slice slice-1">...</li> ... </ul>
   Contiguous: no gap. Gapped: add .rainbow-gapped. Ring: add .rainbow-ring (6 slices rotated
   round a centre; the purple to red join closes the loop). Text on a slice uses --rainbow-ink. */
.rainbow { display: flex; list-style: none; margin: 0; padding: 0; gap: 0; }
.rainbow-gapped { gap: 0.75rem; }
.rainbow .slice { flex: 1 1 0; min-width: 0; padding: 1rem; }
.slice-1 { color: var(--rainbow-ink-1); } .slice-2 { color: var(--rainbow-ink-2); } .slice-3 { color: var(--rainbow-ink-3); }
.slice-4 { color: var(--rainbow-ink-4); } .slice-5 { color: var(--rainbow-ink-5); } .slice-6 { color: var(--rainbow-ink-6); }
.rainbow-gapped .slice { border-radius: 0.5rem; }
.slice-1 { background: linear-gradient(90deg, var(--rainbow-join-6) 0%, var(--rainbow-1) 20%, var(--rainbow-1) 80%, var(--rainbow-join-1) 100%); }
.slice-2 { background: linear-gradient(90deg, var(--rainbow-join-1) 0%, var(--rainbow-2) 20%, var(--rainbow-2) 80%, var(--rainbow-join-2) 100%); }
.slice-3 { background: linear-gradient(90deg, var(--rainbow-join-2) 0%, var(--rainbow-3) 20%, var(--rainbow-3) 80%, var(--rainbow-join-3) 100%); }
.slice-4 { background: linear-gradient(90deg, var(--rainbow-join-3) 0%, var(--rainbow-4) 20%, var(--rainbow-4) 80%, var(--rainbow-join-4) 100%); }
.slice-5 { background: linear-gradient(90deg, var(--rainbow-join-4) 0%, var(--rainbow-5) 20%, var(--rainbow-5) 80%, var(--rainbow-join-5) 100%); }
.slice-6 { background: linear-gradient(90deg, var(--rainbow-join-5) 0%, var(--rainbow-6) 20%, var(--rainbow-6) 80%, var(--rainbow-join-6) 100%); }
/* The same band as one continuous gradient (for a rule, a border-image or a conic ring).
   Hue stops sit at the centre of each sixth; the join colours sit at the boundaries,
   so the band matches the slices exactly and wraps at 0% and 100%. */
:root { --rainbow-band: linear-gradient(90deg,
  var(--rainbow-join-6) 0%, var(--rainbow-1) 3.33%, var(--rainbow-1) 13.33%, var(--rainbow-join-1) 16.67%,
  var(--rainbow-2) 20%, var(--rainbow-2) 30%, var(--rainbow-join-2) 33.33%,
  var(--rainbow-3) 36.67%, var(--rainbow-3) 46.67%, var(--rainbow-join-3) 50%,
  var(--rainbow-4) 53.33%, var(--rainbow-4) 63.33%, var(--rainbow-join-4) 66.67%,
  var(--rainbow-5) 70%, var(--rainbow-5) 80%, var(--rainbow-join-5) 83.33%,
  var(--rainbow-6) 86.67%, var(--rainbow-6) 96.67%, var(--rainbow-join-6) 100%); }
.rainbow-ring { background: conic-gradient(from -30deg,
  var(--rainbow-join-6) 0deg, var(--rainbow-1) 12deg, var(--rainbow-1) 48deg, var(--rainbow-join-1) 60deg,
  var(--rainbow-2) 72deg, var(--rainbow-2) 108deg, var(--rainbow-join-2) 120deg,
  var(--rainbow-3) 132deg, var(--rainbow-3) 168deg, var(--rainbow-join-3) 180deg,
  var(--rainbow-4) 192deg, var(--rainbow-4) 228deg, var(--rainbow-join-4) 240deg,
  var(--rainbow-5) 252deg, var(--rainbow-5) 288deg, var(--rainbow-join-5) 300deg,
  var(--rainbow-6) 312deg, var(--rainbow-6) 348deg, var(--rainbow-join-6) 360deg);
  border-radius: 50%; aspect-ratio: 1; }

