/* ══════════════════════════════════════════════════════════════════
   Portal palette — the dark plasma surface shared by /login and the
   Home hero. Deliberately theme-independent: these two surfaces stay
   dark under every theme, matching the precedent set by the astrology
   canvas. Kept here rather than in Login.razor.css because Blazor CSS
   isolation rewrites `:root` to `:root[b-xxxxxxxxxx]`, which never
   matches <html>, and because two components now share it.
   ══════════════════════════════════════════════════════════════════ */
:root {
    /* Portal palette — the sign-in page and the home hero.
       Named for their role, not their colour: they used to be --lp-teal and
       --lp-purple, which stopped being true the moment the portal followed the
       theme and turned gold under baroque.
       These are the fallback values only. Every theme overrides the set below,
       and because [data-theme="x"] and :root have equal specificity, those
       later blocks win. theme.js stamps data-theme onto <html> before first
       paint, so the sign-in page is themed even for a visitor who has not
       signed in and never reaches MainLayout. */
    --lp-bg:          #04040c;
    --lp-accent:      #2ae6c8;
    --lp-accent-dim:  rgba(42, 230, 200, 0.18);
    --lp-accent-glow: rgba(42, 230, 200, 0.35);
    --lp-accent2:     #8d4bff;
    --lp-accent2-dim: rgba(141, 75, 255, 0.18);
    --lp-orb-3:       rgba(0, 180, 255, 0.12);
    --lp-text:        #d5f9f1;
    --lp-muted:       #7baaa0;
    --lp-card-bg:     rgba(6, 10, 18, 0.82);
    --lp-card-border: rgba(42, 230, 200, 0.28);
}

html {
    --page-bg: #f4f6fb;
    --page-surface: #ffffff;
    --page-text: #18202a;
    --muted-text: #5c6572;
    --surface-bg: rgba(255, 255, 255, 0.88);
    --surface-border: rgba(24, 32, 42, 0.12);
    --surface-shadow: 0 12px 30px rgba(24, 32, 42, 0.08);
    --chip-bg: rgba(24, 32, 42, 0.04);
    --preview-bg: rgba(24, 32, 42, 0.025);
    --link-color: #005b9e;
    --primary-bg: #1b6ec2;
    --primary-border: #1861ac;
    --focus-ring: rgba(37, 140, 251, 0.35);
    --sidebar-bg: linear-gradient(180deg, #eef2f8 0%, #e5eaf3 100%);
    --sidebar-link: #2b3440;
    --sidebar-active-bg: rgba(27, 110, 194, 0.16);
    --sidebar-hover-bg: rgba(27, 110, 194, 0.08);
    --top-row-bg: rgba(255, 255, 255, 0.86);
    --top-row-border: rgba(24, 32, 42, 0.12);
    --top-row-text: #18202a;
    --error-bg: #fff8d6;
    --error-text: #332800;
    --error-border: rgba(51, 40, 0, 0.14);
    /* astrology plugin */
    --astro-accent: #7c3fa8;
    --astro-canvas-bg: #06060f;
    /* enochian keys plugin */
    --ek-accent: #5b3fa8;
    /* liber loagaeth plugin */
    --ll-accent: #2a6f6b;
    /* heptarchia plugin */
    --hep-accent: #9c2f52;
    /* sigillum dei aemeth plugin */
    --sda-accent: #8a5a12;
    /* watch towers plugin */
    --wt-theme-air-accent:   #7c6200;
    --wt-theme-fire-accent:  #c02211;
    --wt-theme-water-accent: #1a4db0;
    --wt-theme-earth-accent: #1e6b2a;
    /* Ink for the historical elemental palettes. Tuned per theme because these are
       drawn as text on the page: flat yellow is unreadable on a light background,
       true black vanishes on a dark one and true white on a light one. */
    --wt-pal-red:      #c0201a;
    --wt-pal-blue:     #1a4db0;
    --wt-pal-yellow:   #8a6f00;
    --wt-pal-green:    #17703c;
    --wt-pal-black:    #14141a;
    --wt-pal-white:    #676c76;
    --wt-tou-accent:   #6633aa;
    --wt-name-accent:  #a86b00;
    color-scheme: light;
}

/* Portal, light. Light is the default theme and has no tokens of its own in
   html{} — but the --lp-* fallbacks live on :root, and :root (0-1-0) outranks
   html (0-0-1) whatever the source order, so declaring these alongside the
   other light tokens silently lost to the fallbacks. They need a selector that
   at least ties with :root and comes after it. The :not() arm covers the tick
   before theme.js stamps the attribute.
   This is the only theme drawn on a pale ground, so the accents are darkened
   to hold contrast against it rather than glowing over it. */
:root:not([data-theme]),
[data-theme="light"] {
    /* Portal, light. The only one drawn on a pale ground, so the accents are
       darkened to hold contrast against it rather than glowing over it. */
    --lp-bg:          #e9eef7;
    --lp-accent:      #005b9e;
    --lp-accent-dim:  rgba(0, 91, 158, 0.16);
    --lp-accent-glow: rgba(0, 91, 158, 0.22);
    --lp-accent2:     #6b3fa0;
    --lp-accent2-dim: rgba(107, 63, 160, 0.16);
    --lp-orb-3:       rgba(0, 130, 200, 0.10);
    --lp-text:        #18202a;
    --lp-muted:       #5c6572;
    --lp-card-bg:     rgba(255, 255, 255, 0.88);
    --lp-card-border: rgba(0, 91, 158, 0.26);
}

[data-theme="dark"] {
    /* Portal, dark — the theme's own blue and violet. */
    --lp-bg:          #0b1017;
    --lp-accent:      #7ec8ff;
    --lp-accent-dim:  rgba(126, 200, 255, 0.18);
    --lp-accent-glow: rgba(126, 200, 255, 0.32);
    --lp-accent2:     #a880e8;
    --lp-accent2-dim: rgba(168, 128, 232, 0.18);
    --lp-orb-3:       rgba(74, 143, 220, 0.12);
    --lp-text:        #e7edf4;
    --lp-muted:       #9aa7b5;
    --lp-card-bg:     rgba(15, 20, 27, 0.84);
    --lp-card-border: rgba(126, 200, 255, 0.26);
    --page-bg: #0f141b;
    --page-surface: #151b23;
    --page-text: #e7edf4;
    --muted-text: #9aa7b5;
    --surface-bg: rgba(21, 27, 35, 0.92);
    --surface-border: rgba(154, 167, 181, 0.18);
    --surface-shadow: 0 18px 36px rgba(0, 0, 0, 0.35);
    --chip-bg: rgba(255, 255, 255, 0.04);
    --preview-bg: rgba(255, 255, 255, 0.02);
    --link-color: #7ec8ff;
    --primary-bg: #4a8fdc;
    --primary-border: #3b79bd;
    --focus-ring: rgba(126, 200, 255, 0.32);
    --sidebar-bg: linear-gradient(180deg, #121821 0%, #0f1320 100%);
    --sidebar-link: #d6dde6;
    --sidebar-active-bg: rgba(126, 200, 255, 0.18);
    --sidebar-hover-bg: rgba(126, 200, 255, 0.1);
    --top-row-bg: rgba(15, 20, 27, 0.92);
    --top-row-border: rgba(154, 167, 181, 0.18);
    --top-row-text: #e7edf4;
    --error-bg: #2b2211;
    --error-text: #f4e6b2;
    --error-border: rgba(244, 230, 178, 0.16);
    /* astrology plugin */
    --astro-accent: #a880e8;
    --astro-canvas-bg: #04040e;
    /* enochian keys plugin */
    --ek-accent: #a880e8;
    /* liber loagaeth plugin */
    --ll-accent: #6fd6c4;
    /* heptarchia plugin */
    --hep-accent: #e07a95;
    /* sigillum dei aemeth plugin */
    --sda-accent: #d9a95c;
    /* watch towers plugin */
    --wt-theme-air-accent:   #c9a227;
    --wt-theme-fire-accent:  #e04433;
    --wt-theme-water-accent: #4488dd;
    --wt-theme-earth-accent: #44aa55;
    /* Ink for the historical elemental palettes. Tuned per theme because these are
       drawn as text on the page: flat yellow is unreadable on a light background,
       true black vanishes on a dark one and true white on a light one. */
    --wt-pal-red:      #e8564a;
    --wt-pal-blue:     #4a8fe0;
    --wt-pal-yellow:   #e3c619;
    --wt-pal-green:    #3fb571;
    --wt-pal-black:    #7b8494;
    --wt-pal-white:    #f2f5fa;
    --wt-tou-accent:   #9966cc;
    --wt-name-accent:  #e0b23c;
    color-scheme: dark;
}

[data-theme="occult"] {
    /* Portal, occult — the original teal and violet the portal was designed in. */
    --lp-bg:          #04040c;
    --lp-accent:      #2ae6c8;
    --lp-accent-dim:  rgba(42, 230, 200, 0.18);
    --lp-accent-glow: rgba(42, 230, 200, 0.35);
    --lp-accent2:     #8d4bff;
    --lp-accent2-dim: rgba(141, 75, 255, 0.18);
    --lp-orb-3:       rgba(0, 180, 255, 0.12);
    --lp-text:        #d5f9f1;
    --lp-muted:       #7baaa0;
    --lp-card-bg:     rgba(6, 10, 18, 0.82);
    --lp-card-border: rgba(42, 230, 200, 0.28);
    --page-bg: #07070c;
    --page-surface: #0e1117;
    --page-text: #dbf7ee;
    --muted-text: #91a9a0;
    --surface-bg: rgba(14, 17, 23, 0.94);
    --surface-border: rgba(42, 230, 200, 0.24);
    --surface-shadow: 0 20px 48px rgba(0, 0, 0, 0.45);
    --chip-bg: rgba(42, 230, 200, 0.08);
    --preview-bg: rgba(141, 75, 255, 0.08);
    --link-color: #61f0d4;
    --primary-bg: #2ae6c8;
    --primary-border: #18baa3;
    --focus-ring: rgba(42, 230, 200, 0.36);
    --sidebar-bg: linear-gradient(180deg, #07111a 0%, #12081d 100%);
    --sidebar-link: #d5fbf2;
    --sidebar-active-bg: rgba(42, 230, 200, 0.16);
    --sidebar-hover-bg: rgba(42, 230, 200, 0.08);
    --top-row-bg: rgba(7, 11, 18, 0.94);
    --top-row-border: rgba(42, 230, 200, 0.2);
    --top-row-text: #dbf7ee;
    --error-bg: #201116;
    --error-text: #f5d8e5;
    --error-border: rgba(245, 216, 229, 0.16);
    /* astrology plugin */
    --astro-accent: #2ae6c8;
    --astro-canvas-bg: #020d0a;
    /* enochian keys plugin */
    --ek-accent: #2ae6c8;
    /* liber loagaeth plugin */
    --ll-accent: #e6a02a;
    /* heptarchia plugin */
    --hep-accent: #ff5f9e;
    /* sigillum dei aemeth plugin */
    --sda-accent: #f0c14b;
    /* watch towers plugin */
    --wt-theme-air-accent:   #f0e020;
    --wt-theme-fire-accent:  #ff6633;
    --wt-theme-water-accent: #44aaff;
    --wt-theme-earth-accent: #55cc66;
    /* Ink for the historical elemental palettes. Tuned per theme because these are
       drawn as text on the page: flat yellow is unreadable on a light background,
       true black vanishes on a dark one and true white on a light one. */
    --wt-pal-red:      #ff6a5a;
    --wt-pal-blue:     #55aaff;
    --wt-pal-yellow:   #f0e020;
    --wt-pal-green:    #3fd07f;
    --wt-pal-black:    #6f7d88;
    --wt-pal-white:    #eafcf6;
    --wt-tou-accent:   #2ae6c8;
    --wt-name-accent:  #f0a830;
    color-scheme: dark;
}

[data-theme="baroque"] {
    /* Portal, baroque — gilt on a dark ground. */
    --lp-bg:          #0a0805;
    --lp-accent:      #d4a827;
    --lp-accent-dim:  rgba(212, 168, 39, 0.18);
    --lp-accent-glow: rgba(212, 168, 39, 0.32);
    --lp-accent2:     #cc8833;
    --lp-accent2-dim: rgba(204, 136, 51, 0.18);
    --lp-orb-3:       rgba(184, 134, 11, 0.12);
    --lp-text:        #ecddb8;
    --lp-muted:       #a0834a;
    --lp-card-bg:     rgba(20, 16, 8, 0.84);
    --lp-card-border: rgba(184, 134, 11, 0.34);
    --page-bg: #0d0b06;
    --page-surface: #1c1609;
    --page-text: #ecddb8;
    --muted-text: #a0834a;
    --surface-bg: rgba(28, 22, 9, 0.96);
    --surface-border: rgba(184, 134, 11, 0.38);
    --surface-shadow: 0 20px 50px rgba(0, 0, 0, 0.65);
    --chip-bg: rgba(184, 134, 11, 0.10);
    --preview-bg: rgba(184, 134, 11, 0.06);
    --link-color: #d4a827;
    --primary-bg: #b8860b;
    --primary-border: #9b6f08;
    --focus-ring: rgba(212, 168, 39, 0.42);
    --sidebar-bg: linear-gradient(180deg, #100e06 0%, #1c1609 100%);
    --sidebar-link: #e0c87a;
    --sidebar-active-bg: rgba(184, 134, 11, 0.22);
    --sidebar-hover-bg: rgba(184, 134, 11, 0.11);
    --top-row-bg: rgba(13, 11, 6, 0.96);
    --top-row-border: rgba(184, 134, 11, 0.32);
    --top-row-text: #ecddb8;
    --error-bg: #1e0c0c;
    --error-text: #f2c8a0;
    --error-border: rgba(242, 200, 160, 0.18);
    /* astrology plugin */
    --astro-accent: #c9a227;
    --astro-canvas-bg: #060400;
    /* enochian keys plugin */
    --ek-accent: #c9a227;
    /* liber loagaeth plugin */
    --ll-accent: #c07a33;
    /* heptarchia plugin */
    --hep-accent: #b8455a;
    /* sigillum dei aemeth plugin */
    --sda-accent: #e0c07a;
    /* watch towers plugin */
    --wt-theme-air-accent:   #d4a827;
    --wt-theme-fire-accent:  #cc3322;
    --wt-theme-water-accent: #4466cc;
    --wt-theme-earth-accent: #558833;
    /* Ink for the historical elemental palettes. Tuned per theme because these are
       drawn as text on the page: flat yellow is unreadable on a light background,
       true black vanishes on a dark one and true white on a light one. */
    --wt-pal-red:      #e0503c;
    --wt-pal-blue:     #6a8ce0;
    --wt-pal-yellow:   #e8c34a;
    --wt-pal-green:    #4aa86a;
    --wt-pal-black:    #8a7a5e;
    --wt-pal-white:    #f6ecd2;
    --wt-tou-accent:   #cc8833;
    --wt-name-accent:  #4fae8b;
    color-scheme: dark;
}

/* Horizen — crimson sky over a violet horizon over a royal-blue floor.
   Sampled from the reference render: the rose and the blue sit on opposite
   sides of the wheel, so the violet mid-band is what keeps them from
   fighting. Surfaces stay violet; rose is reserved for accent and state,
   periwinkle carries the text and links. */
[data-theme="horizen"] {
    /* Portal, horizen — the rose and periwinkle of the theme's own gradient. */
    --lp-bg:          #12101f;
    --lp-accent:      #cb779a;
    --lp-accent-dim:  rgba(203, 119, 154, 0.18);
    --lp-accent-glow: rgba(203, 119, 154, 0.32);
    --lp-accent2:     #9bb6e8;
    --lp-accent2-dim: rgba(155, 182, 232, 0.18);
    --lp-orb-3:       rgba(75, 105, 172, 0.14);
    --lp-text:        #e8e9f7;
    --lp-muted:       #a9a6c8;
    --lp-card-bg:     rgba(34, 27, 51, 0.86);
    --lp-card-border: rgba(203, 119, 154, 0.30);
    --page-bg: #171327;
    --page-surface: #221b33;
    --page-text: #e8e9f7;
    --muted-text: #a9a6c8;
    --surface-bg: rgba(34, 27, 51, 0.94);
    --surface-border: rgba(144, 169, 210, 0.22);
    --surface-shadow: 0 20px 44px rgba(9, 6, 22, 0.55);
    --chip-bg: rgba(144, 169, 210, 0.09);
    --preview-bg: rgba(193, 91, 109, 0.08);
    --link-color: #9bb6e8;
    --primary-bg: #4b69ac;
    --primary-border: #3b5490;
    --focus-ring: rgba(155, 182, 232, 0.38);
    --sidebar-bg: linear-gradient(180deg, #3d2340 0%, #2a2145 48%, #16255c 100%);
    --sidebar-link: #d8dcf2;
    --sidebar-active-bg: rgba(193, 91, 109, 0.30);
    --sidebar-hover-bg: rgba(144, 169, 210, 0.12);
    --top-row-bg: rgba(23, 19, 39, 0.94);
    --top-row-border: rgba(144, 169, 210, 0.20);
    --top-row-text: #e8e9f7;
    --error-bg: #35141f;
    --error-text: #f6cdd6;
    --error-border: rgba(246, 205, 214, 0.18);
    /* astrology plugin */
    --astro-accent: #cb779a;
    --astro-canvas-bg: #0d0a1c;
    /* enochian keys plugin */
    --ek-accent: #cb779a;
    /* liber loagaeth plugin */
    --ll-accent: #7fc0aa;
    /* heptarchia plugin */
    --hep-accent: #dc8aa0;
    /* sigillum dei aemeth plugin */
    --sda-accent: #d9b779;
    /* watch towers plugin */
    --wt-theme-air-accent:   #d9c25a;
    --wt-theme-fire-accent:  #e05a63;
    --wt-theme-water-accent: #6b8bcb;
    --wt-theme-earth-accent: #5fb587;
    /* Ink for the historical elemental palettes. Tuned per theme because these are
       drawn as text on the page: flat yellow is unreadable on a light background,
       true black vanishes on a dark one and true white on a light one. */
    --wt-pal-red:      #e8697f;
    --wt-pal-blue:     #7fa0de;
    --wt-pal-yellow:   #ddc451;
    --wt-pal-green:    #52bb87;
    --wt-pal-black:    #8d8ab0;
    --wt-pal-white:    #f1f0fb;
    --wt-tou-accent:   #b072b8;
    --wt-name-accent:  #e6b455;
    color-scheme: dark;
}

html, body {
    min-height: 100%;
    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
}

@font-face {
    font-family: 'GDEnochian';
    src: url('fonts/GDEnochian.ttf') format('truetype');
    font-weight: normal;
    font-style: normal;
    font-display: swap;
}

h1, h2, h3 {
    font-family: 'GDEnochian', 'Helvetica Neue', Helvetica, Arial, sans-serif;
    letter-spacing: 0.04em;
}

body {
    margin: 0;
}

a, .btn-link {
    color: var(--link-color);
}

.btn-primary {
    color: #fff;
    background-color: var(--primary-bg);
    border-color: var(--primary-border);
}

.btn-outline-primary {
    color: var(--link-color);
    border-color: var(--surface-border);
    background-color: var(--chip-bg);
}

.btn-outline-primary:hover,
.btn-outline-primary:focus {
    color: var(--page-surface);
    background-color: var(--link-color);
    border-color: var(--link-color);
}

.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus {
    box-shadow: 0 0 0 0.1rem var(--page-surface), 0 0 0 0.25rem var(--focus-ring);
}

.content {
    padding-top: 1.1rem;
}

h1:focus {
    outline: none;
}

.valid.modified:not([type=checkbox]) {
    outline: 1px solid #26b050;
}

.invalid {
    outline: 1px solid #e50000;
}

.validation-message {
    color: #e50000;
}

.blazor-error-boundary {
    background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
    padding: 1rem 1rem 1rem 3.7rem;
    color: white;
}

    .blazor-error-boundary::after {
        content: "An error has occurred."
    }

.darker-border-checkbox.form-check-input {
    border-color: #929292;
}

.form-floating > .form-control-plaintext::placeholder, .form-floating > .form-control::placeholder {
    color: var(--bs-secondary-color);
    text-align: end;
}

.form-floating > .form-control-plaintext:focus::placeholder, .form-floating > .form-control:focus::placeholder {
    text-align: start;
}

/* ══════════════════════════════════════════════════════════════════
   Navigation glyphs — each rule sets only the `--nav-icon` mask (and,
   where the plugin has one, its accent colour). Consumers supply their
   own size and colour by applying a mask rule of their own; see
   NavMenu.razor.css and Home.razor.css. Global rather than scoped
   because two components draw the same glyphs.
   ══════════════════════════════════════════════════════════════════ */

/* Home — a pillared temple with the eye of the apex */
.bi-house-door-fill-nav-menu {
    --nav-icon: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27%23fff%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath fill=%27%23fff%27 stroke=%27none%27 fill-rule=%27evenodd%27 d=%27M12 1.9 1.4 9.5h21.2L12 1.9Zm0 3.4a1.25 1.25 0 1 0 0 2.5 1.25 1.25 0 0 0 0-2.5Z%27/%3E%3Cpath d=%27M4.6 11.2v7.4M9.5 11.2v7.4M14.5 11.2v7.4M19.4 11.2v7.4%27/%3E%3Cpath d=%27M2.6 18.8h18.8v2.3H2.6z%27 fill=%27%23fff%27 stroke=%27none%27/%3E%3C/svg%3E");
}
/* Settings — a toothed cog / orrery ring */
.bi-gear-fill-nav-menu {
    --nav-icon: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27%23fff%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%278.6%27 stroke-width=%271.8%27 stroke-dasharray=%271.7 3.8%27 stroke-linecap=%27butt%27/%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%277.2%27 stroke-width=%271.3%27/%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%273.4%27 stroke-width=%271.4%27/%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%271.0%27 fill=%27%23fff%27 stroke=%27none%27/%3E%3C/svg%3E");
}
/* Astrology — a zodiacal chart wheel with house spokes */
.bi-astrology-nav-menu {
    --nav-icon-color: var(--astro-accent, currentColor);
    --nav-icon: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27%23fff%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%279.0%27 stroke-width=%271.4%27/%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%275.2%27 stroke-width=%271.2%27/%3E%3Cpath d=%27M17.20 12.00L21.00 12.00M15.68 8.32L18.36 5.64M12.00 6.80L12.00 3.00M8.32 8.32L5.64 5.64M6.80 12.00L3.00 12.00M8.32 15.68L5.64 18.36M12.00 17.20L12.00 21.00M15.68 15.68L18.36 18.36%27 stroke-width=%271.15%27/%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%271.6%27 fill=%27%23fff%27 stroke=%27none%27/%3E%3C/svg%3E");
}
/* Enochian Keys — a warded key crowned with the cross-in-circle */
.bi-enochian-keys-nav-menu {
    --nav-icon-color: var(--ek-accent, currentColor);
    --nav-icon: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27%23fff%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Ccircle cx=%277.9%27 cy=%277.9%27 r=%274.3%27 stroke-width=%271.6%27/%3E%3Cpath d=%27M7.9 4.5v6.8M4.5 7.9h6.8%27 stroke-width=%271.2%27/%3E%3Cpath d=%27M10.95 10.95 20.4 20.4%27 stroke-width=%271.8%27/%3E%3Cpath d=%27M14.9 18.3l2.3-2.3M17.6 21l2.3-2.3%27 stroke-width=%271.6%27/%3E%3C/svg%3E");
}
/* Watch Towers — the Great Table quartered by the Black Cross */
.bi-watchtowers-nav-menu {
    --nav-icon-color: var(--wt-tou-accent, currentColor);
    --nav-icon: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27%23fff%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Crect x=%272.7%27 y=%272.7%27 width=%2718.6%27 height=%2718.6%27 rx=%272.2%27 stroke-width=%271.6%27/%3E%3Cpath d=%27M12 2.7v18.6M2.7 12h18.6%27 stroke-width=%271.3%27/%3E%3Ccircle cx=%277.35%27 cy=%277.35%27 r=%271.55%27 fill=%27%23fff%27 stroke=%27none%27/%3E%3Ccircle cx=%2716.65%27 cy=%277.35%27 r=%271.55%27 fill=%27%23fff%27 stroke=%27none%27/%3E%3Ccircle cx=%277.35%27 cy=%2716.65%27 r=%271.55%27 fill=%27%23fff%27 stroke=%27none%27/%3E%3Ccircle cx=%2716.65%27 cy=%2716.65%27 r=%271.55%27 fill=%27%23fff%27 stroke=%27none%27/%3E%3C/svg%3E");
}
/* Liber Loagaeth — the book lying open, ruled into squares */
.bi-liber-loagaeth-nav-menu {
    --nav-icon-color: var(--ll-accent, currentColor);
    --nav-icon: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27%23fff%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M12 5.6C9.7 4 7.1 3.3 4 3.3v13.9c3.1 0 5.7.7 8 2.3 2.3-1.6 4.9-2.3 8-2.3V3.3c-3.1 0-5.7.7-8 2.3Z%27 stroke-width=%271.5%27/%3E%3Cpath d=%27M12 5.6v13.9%27 stroke-width=%271.2%27/%3E%3Cpath d=%27M6.3 7.6h3.6M6.3 10.4h3.6M6.3 13.2h3.6M14.1 7.6h3.6M14.1 10.4h3.6M14.1 13.2h3.6%27 stroke-width=%270.9%27/%3E%3Cpath d=%27M8.1 6.3v8.4M15.9 6.3v8.4%27 stroke-width=%270.9%27/%3E%3C/svg%3E");
}
/* Heptarchia Mystica — the {7/3} heptagram of the seven kings of the days */
.bi-heptarchia-nav-menu {
    --nav-icon-color: var(--hep-accent, currentColor);
    --nav-icon: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27%23fff%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%279.6%27 stroke-width=%271.1%27/%3E%3Cpath d=%27M12 3 15.905 20.109 4.964 6.389 20.774 14.003 3.226 14.003 19.036 6.389 8.095 20.109Z%27 stroke-width=%271.25%27/%3E%3C/svg%3E");
}
/* Sigillum Dei Aemeth — the seal: heptagon and {7/2} heptagram within its rings */
.bi-sigillum-dei-nav-menu {
    --nav-icon-color: var(--sda-accent, currentColor);
    --nav-icon: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27%23fff%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%2711%27 stroke-width=%271.3%27/%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%279.5%27 stroke-width=%270.85%27/%3E%3Cpath d=%27M12 3.6 18.567 6.763 20.189 13.869 15.645 19.568 8.355 19.568 3.811 13.869 5.433 6.763Z%27 stroke-width=%270.85%27/%3E%3Cpath d=%27M12 6.8 17.07 13.157 9.744 16.685 7.935 8.758 16.065 8.758 14.256 16.685 6.93 13.157Z%27 stroke-width=%271.2%27/%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%271.05%27 fill=%27%23fff%27 stroke=%27none%27/%3E%3C/svg%3E");
}
/* Generic fallbacks kept for plugins that reference them */
.bi-plus-square-fill-nav-menu {
    --nav-icon: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27%23fff%27 stroke-linecap=%27round%27%3E%3Crect x=%273%27 y=%273%27 width=%2718%27 height=%2718%27 rx=%273%27 stroke-width=%271.6%27/%3E%3Cpath d=%27M12 7.6v8.8M7.6 12h8.8%27 stroke-width=%271.6%27/%3E%3C/svg%3E");
}
.bi-list-nested-nav-menu {
    --nav-icon: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27%23fff%27 stroke-width=%271.7%27 stroke-linecap=%27round%27%3E%3Cpath d=%27M3.5 6h12M6.5 12h12M9.5 18h11%27/%3E%3C/svg%3E");
}

/* ══════════════════════════════════════════════════════════════════
   Under-construction chrome — the placeholder a stub section wears.

   Shared rather than copied into each plugin's stylesheet: two sections
   already wear it and more will, and a placeholder is exactly the kind of
   thing that drifts out of step when duplicated. A plugin opts in by
   declaring --uc-accent on its page shell; everything else is drawn from
   the theme's own tokens, so these pages follow the theme with no code
   behind them.

   --uc-accent falls back to --link-color so a section that forgets to
   declare one is merely unremarkable rather than invisible.
   ══════════════════════════════════════════════════════════════════ */

.uc-frame {
    --uc-ink: var(--uc-accent, var(--link-color));

    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 1rem;
    flex: 1;
    max-width: 34rem;
    margin: 0 auto;
    padding: 3rem 1.5rem;
    text-align: center;
}

/* ── The emblem ── */
.uc-emblem {
    width: clamp(6rem, 18vw, 9.5rem);
    height: auto;
    color: var(--uc-ink);
    overflow: visible;
    animation: uc-breathe 7s ease-in-out infinite;
}

.uc-emblem-ring,
.uc-emblem-figure {
    fill: none;
    stroke: currentColor;
    stroke-linecap: round;
    stroke-linejoin: round;
    vector-effect: non-scaling-stroke;
}

/* Stroke widths are viewBox units on a 24-unit box, so they scale with the emblem.
   vector-effect above pins them to device pixels instead, which keeps the finer
   rules from disappearing at the small end of the clamp. */
.uc-emblem-ring          { stroke-width: 1.1; opacity: .45; }
.uc-emblem-ring--fine    { stroke-width: .8;  opacity: .3; }
.uc-emblem-figure        { stroke-width: 1.3; opacity: .9; }
.uc-emblem-figure--fine  { stroke-width: .8;  opacity: .45; }
.uc-emblem-node          { fill: currentColor; stroke: none; opacity: .85; }

@keyframes uc-breathe {
    0%, 100% { opacity: .72; filter: drop-shadow(0 0 3px color-mix(in srgb, var(--uc-ink) 30%, transparent)); }
    50%      { opacity: 1;   filter: drop-shadow(0 0 9px color-mix(in srgb, var(--uc-ink) 55%, transparent)); }
}

/* ── Text ── */
.uc-title {
    margin: 0;
    font-size: clamp(1.5rem, 4vw, 2.15rem);
    font-weight: 600;
    letter-spacing: .035em;
    color: var(--uc-ink);
}

.uc-standfirst {
    margin: 0;
    max-width: 30rem;
    font-size: 1rem;
    line-height: 1.6;
    color: var(--page-text);
    opacity: .85;
}

.uc-note {
    margin: 0;
    max-width: 30rem;
    font-size: .85rem;
    line-height: 1.55;
    color: var(--muted-text);
}

/* ── The band ── */
.uc-band {
    display: inline-flex;
    align-items: center;
    gap: .55rem;
    padding: .4rem .95rem;
    background: var(--surface-bg);
    border: 1px solid color-mix(in srgb, var(--uc-ink) 35%, transparent);
    border-radius: 999px;
    font-size: .74rem;
    text-transform: uppercase;
    letter-spacing: .14em;
    color: var(--uc-ink);
}

.uc-band-mark {
    width: .5rem;
    height: .5rem;
    border-radius: 50%;
    background: currentColor;
    animation: uc-pulse 2.4s ease-in-out infinite;
}

@keyframes uc-pulse {
    0%, 100% { opacity: .35; transform: scale(.8); }
    50%      { opacity: 1;   transform: scale(1); }
}

/* Motion here is decoration and carries no information, so it goes entirely for
   a visitor who has asked for less of it. */
@media (prefers-reduced-motion: reduce) {
    .uc-emblem,
    .uc-band-mark {
        animation: none;
    }
}
