/*
 * VoidSiege site-wide visual presets.
 *
 * Current Tactical intentionally has no override block: it is the exact
 * established look. Every other preset is a token-led layer loaded after the
 * core tactical stylesheet. Faction context tokens are never reset here.
 */

body.vs-theme--command-slate {
	--vs-theme-page: #0e1012;
	--vs-theme-surface: #171a1e;
	--vs-theme-raised: #23272c;
	--vs-theme-overlay: #111315;
	--vs-theme-text: #f3eee4;
	--vs-theme-muted: #b9c0c5;
	--vs-theme-border: #4c5056;
	--vs-theme-border-strong: #747b82;
	--vs-theme-accent: #c52130;
	--vs-theme-accent-strong: #ef626d;
	--vs-theme-accent-soft: #61222a;
	--vs-theme-focus: #fff5e8;
	--vs-theme-button-text: #fff;
	--vs-control-radius: 5px;
	--vs-card-radius: 6px;
	--vs-panel-radius: 5px;
	--vs-panel-decoration-opacity: .54;
	--vs-theme-shadow: 0 14px 30px rgba(0, 0, 0, .32);
}

body.vs-theme--aegis-glass {
	--vs-theme-page: #10151b;
	--vs-theme-surface: #13232d;
	--vs-theme-raised: #25404f;
	--vs-theme-overlay: #0f181f;
	--vs-theme-text: #e6f4fa;
	--vs-theme-muted: #b4c8d4;
	--vs-theme-border: #59778d;
	--vs-theme-border-strong: #8bd9ff;
	--vs-theme-accent: #72c9ed;
	--vs-theme-accent-strong: #b0eaff;
	--vs-theme-accent-soft: #24485a;
	--vs-theme-focus: #d8f5ff;
	--vs-theme-button-text: #09141b;
	--vs-control-radius: 12px;
	--vs-card-radius: 12px;
	--vs-panel-radius: 16px;
	--vs-panel-decoration-opacity: .16;
	--vs-theme-shadow: 0 16px 34px rgba(0, 10, 18, .34);
}

body.vs-theme--warband-signal {
	--vs-theme-page: #131517;
	--vs-theme-surface: #201a19;
	--vs-theme-raised: #342320;
	--vs-theme-overlay: #171211;
	--vs-theme-text: #f6e8dd;
	--vs-theme-muted: #d0b5a5;
	--vs-theme-border: #76594d;
	--vs-theme-border-strong: #ef9d5c;
	--vs-theme-accent: #d67945;
	--vs-theme-accent-strong: #f1a16a;
	--vs-theme-accent-soft: #5a2d21;
	--vs-theme-focus: #ffe0bd;
	--vs-theme-button-text: #1d0d08;
	--vs-control-radius: 999px;
	--vs-card-radius: 12px;
	--vs-panel-radius: 12px;
	--vs-panel-decoration-opacity: .18;
	--vs-theme-shadow: 0 14px 30px rgba(0, 0, 0, .32);
}

body.vs-theme--voidsiege-neutral {
	--vs-theme-page: #111315;
	--vs-theme-surface: #1a1d20;
	--vs-theme-raised: #2b2f33;
	--vs-theme-overlay: #101214;
	--vs-theme-text: #f1f0eb;
	--vs-theme-muted: #c4c7c6;
	--vs-theme-border: #575c62;
	--vs-theme-border-strong: #dec081;
	--vs-theme-accent: #c52130;
	--vs-theme-accent-strong: #e4c27f;
	--vs-theme-accent-soft: #5c2028;
	--vs-theme-focus: #fff8e9;
	--vs-theme-button-text: #fff;
	--vs-control-radius: 7px;
	--vs-card-radius: 7px;
	--vs-panel-radius: 7px;
	--vs-panel-decoration-opacity: .34;
	--vs-theme-shadow: 0 14px 30px rgba(0, 0, 0, .34);
}

body.vs-theme--monochrome {
	--vs-theme-page: #090a0b;
	--vs-theme-surface: #111315;
	--vs-theme-raised: #272a2c;
	--vs-theme-overlay: #08090a;
	--vs-theme-text: #f1f2f2;
	--vs-theme-muted: #babec1;
	--vs-theme-border: #c5c8ca;
	--vs-theme-border-strong: #fff;
	--vs-theme-accent: #f1f2f2;
	--vs-theme-accent-strong: #fff;
	--vs-theme-accent-soft: #3c3f42;
	--vs-theme-focus: #fff;
	--vs-theme-button-text: #0a0b0c;
	--vs-control-radius: 3px;
	--vs-card-radius: 3px;
	--vs-panel-radius: 3px;
	--vs-panel-decoration-opacity: 0;
	--vs-theme-shadow: 0 12px 28px rgba(0, 0, 0, .44);
}

body.vs-theme--slate {
	--vs-theme-page: #101820;
	--vs-theme-surface: #172732;
	--vs-theme-raised: #294353;
	--vs-theme-overlay: #0e151c;
	--vs-theme-text: #dbeaf1;
	--vs-theme-muted: #adc4d0;
	--vs-theme-border: #47687a;
	--vs-theme-border-strong: #a7d1e5;
	--vs-theme-accent: #5fa9ca;
	--vs-theme-accent-strong: #a7d1e5;
	--vs-theme-accent-soft: #1e4d64;
	--vs-theme-focus: #d8f3ff;
	--vs-theme-button-text: #061116;
	--vs-control-radius: 8px;
	--vs-card-radius: 8px;
	--vs-panel-radius: 8px;
	--vs-panel-decoration-opacity: .16;
	--vs-theme-shadow: 0 14px 30px rgba(0, 7, 13, .36);
}

body.vs-theme--carbon {
	--vs-theme-page: #0c0d0e;
	--vs-theme-surface: #17191b;
	--vs-theme-raised: #2a2c2f;
	--vs-theme-overlay: #0d0f10;
	--vs-theme-text: #eeeef0;
	--vs-theme-muted: #b9bbbf;
	--vs-theme-border: #4e5255;
	--vs-theme-border-strong: #e88b91;
	--vs-theme-accent: #b42734;
	--vs-theme-accent-strong: #e88b91;
	--vs-theme-accent-soft: #4a1a21;
	--vs-theme-focus: #fff1f2;
	--vs-theme-button-text: #fff;
	--vs-control-radius: 6px;
	--vs-card-radius: 6px;
	--vs-panel-radius: 6px;
	--vs-panel-decoration-opacity: .3;
	--vs-theme-shadow: 0 14px 30px rgba(0, 0, 0, .4);
}

body.vs-theme--graphite {
	--vs-theme-page: #202124;
	--vs-theme-surface: #303235;
	--vs-theme-raised: #424548;
	--vs-theme-overlay: #1d1f21;
	--vs-theme-text: #f0efea;
	--vs-theme-muted: #c9c7c1;
	--vs-theme-border: #696c70;
	--vs-theme-border-strong: #f1d18a;
	--vs-theme-accent: #d3b165;
	--vs-theme-accent-strong: #f1d18a;
	--vs-theme-accent-soft: #615029;
	--vs-theme-focus: #fff3ca;
	--vs-theme-button-text: #17130a;
	--vs-control-radius: 10px;
	--vs-card-radius: 10px;
	--vs-panel-radius: 10px;
	--vs-panel-decoration-opacity: .22;
	--vs-theme-shadow: 0 14px 30px rgba(0, 0, 0, .28);
}

body.vs-theme--neutral-signal {
	--vs-theme-page: #111315;
	--vs-theme-surface: #1a1d20;
	--vs-theme-raised: #2b2f33;
	--vs-theme-overlay: #101214;
	--vs-theme-text: #f1f0eb;
	--vs-theme-muted: #c4c7c6;
	--vs-theme-border: #575c62;
	--vs-theme-border-strong: #dec081;
	--vs-theme-accent: #c52130;
	--vs-theme-accent-strong: #e4c27f;
	--vs-theme-accent-soft: #5c2028;
	--vs-theme-focus: #fff8e9;
	--vs-theme-button-text: #fff;
	--vs-control-radius: 999px;
	--vs-card-radius: 12px;
	--vs-panel-radius: 12px;
	--vs-panel-decoration-opacity: .18;
	--vs-theme-shadow: 0 14px 30px rgba(0, 0, 0, .34);
}

body.vs-theme--grey-contrast {
	--vs-theme-page: #111;
	--vs-theme-surface: #252525;
	--vs-theme-raised: #3a3a3a;
	--vs-theme-overlay: #000;
	--vs-theme-text: #f2f2f2;
	--vs-theme-muted: #c6c6c6;
	--vs-theme-border: #707070;
	--vs-theme-border-strong: #fff;
	--vs-theme-accent: #d8d8d8;
	--vs-theme-accent-strong: #fff;
	--vs-theme-accent-soft: #4c4c4c;
	--vs-theme-focus: #fff;
	--vs-theme-button-text: #111;
	--vs-control-radius: 7px;
	--vs-card-radius: 7px;
	--vs-panel-radius: 7px;
	--vs-panel-decoration-opacity: .12;
	--vs-theme-shadow: 0 14px 30px rgba(0, 0, 0, .42);
}

/* A Grey Contrast variant with animated, neutral battlefield atmosphere.
 * Faction context variables intentionally remain untouched. */
body.vs-theme--grey-contrast-warfront {
	--vs-theme-page: #101010;
	--vs-theme-surface: #1f1f1f;
	--vs-theme-raised: #363636;
	--vs-theme-overlay: #090909;
	--vs-theme-text: #f4f4f4;
	--vs-theme-muted: #c7c7c7;
	--vs-theme-border: #747474;
	--vs-theme-border-strong: #fff;
	--vs-theme-accent: #d8d8d8;
	--vs-theme-accent-strong: #fff;
	--vs-theme-accent-soft: #505050;
	--vs-theme-focus: #fff;
	--vs-theme-button-text: #101010;
	--vs-control-radius: 7px;
	--vs-card-radius: 7px;
	--vs-panel-radius: 7px;
	--vs-panel-decoration-opacity: 0;
	--vs-theme-shadow: 0 16px 34px rgba(0, 0, 0, .55);
}

body.vs-theme--aurora-relay {
	--vs-theme-page: #07191d;
	--vs-theme-surface: #0f2a2f;
	--vs-theme-raised: #14323a;
	--vs-theme-overlay: #08242a;
	--vs-theme-text: #e5fff9;
	--vs-theme-muted: #b6d6d3;
	--vs-theme-border: #4b8588;
	--vs-theme-border-strong: #a4fff1;
	--vs-theme-accent: #197d7d;
	--vs-theme-accent-strong: #7ef6dc;
	--vs-theme-accent-soft: #123f46;
	--vs-theme-focus: #d8fff8;
	--vs-theme-button-text: #fff;
	--vs-control-radius: 14px;
	--vs-card-radius: 14px;
	--vs-panel-radius: 18px;
	--vs-panel-decoration-opacity: .08;
	--vs-theme-shadow: 0 16px 34px rgba(0, 24, 29, .48);
}

body.vs-theme--ember-forge {
	--vs-theme-page: #16120f;
	--vs-theme-surface: #211814;
	--vs-theme-raised: #3a1e11;
	--vs-theme-overlay: #251611;
	--vs-theme-text: #ffc083;
	--vs-theme-muted: #dcae85;
	--vs-theme-border: #7d5140;
	--vs-theme-border-strong: #ffd195;
	--vs-theme-accent: #c74b21;
	--vs-theme-accent-strong: #ff9a61;
	--vs-theme-accent-soft: #66301e;
	--vs-theme-focus: #fff0d7;
	--vs-theme-button-text: #fff7e8;
	--vs-control-radius: 4px;
	--vs-card-radius: 8px;
	--vs-panel-radius: 10px;
	--vs-panel-decoration-opacity: .08;
	--vs-theme-shadow: 0 16px 34px rgba(28, 9, 3, .48);
}

body.vs-theme--biohazard {
	--vs-theme-page: #10140d;
	--vs-theme-surface: #1c2415;
	--vs-theme-raised: #243019;
	--vs-theme-overlay: #171c10;
	--vs-theme-text: #efffd5;
	--vs-theme-muted: #c5d5a9;
	--vs-theme-border: #788d42;
	--vs-theme-border-strong: #e0ff8d;
	--vs-theme-accent: #738c25;
	--vs-theme-accent-strong: #ceff74;
	--vs-theme-accent-soft: #37490e;
	--vs-theme-focus: #f0ffd0;
	--vs-theme-button-text: #111607;
	--vs-control-radius: 10px;
	--vs-card-radius: 11px;
	--vs-panel-radius: 14px;
	--vs-panel-decoration-opacity: .07;
	--vs-theme-shadow: 0 16px 34px rgba(7, 12, 2, .48);
}

body.vs-theme--eclipse {
	--vs-theme-page: #121022;
	--vs-theme-surface: #201a3c;
	--vs-theme-raised: #2b2450;
	--vs-theme-overlay: #1a1532;
	--vs-theme-text: #f0edff;
	--vs-theme-muted: #c7c0e5;
	--vs-theme-border: #7066aa;
	--vs-theme-border-strong: #e0d9ff;
	--vs-theme-accent: #6552b3;
	--vs-theme-accent-strong: #c9baff;
	--vs-theme-accent-soft: #3d2f79;
	--vs-theme-focus: #f2eeff;
	--vs-theme-button-text: #f8f5ff;
	--vs-control-radius: 13px;
	--vs-card-radius: 13px;
	--vs-panel-radius: 16px;
	--vs-panel-decoration-opacity: .07;
	--vs-theme-shadow: 0 16px 34px rgba(8, 4, 30, .5);
}

body.vs-theme--prism {
	--vs-theme-page: #10131d;
	--vs-theme-surface: #1e2147;
	--vs-theme-raised: #30205b;
	--vs-theme-overlay: #132444;
	--vs-theme-text: #f5efff;
	--vs-theme-muted: #c8c6e7;
	--vs-theme-border: #7464ae;
	--vs-theme-border-strong: #f3b8ff;
	--vs-theme-accent: #b33cb1;
	--vs-theme-accent-strong: #8cfff6;
	--vs-theme-accent-soft: #4942a0;
	--vs-theme-focus: #f7ddff;
	--vs-theme-button-text: #fff;
	--vs-control-radius: 16px;
	--vs-card-radius: 16px;
	--vs-panel-radius: 20px;
	--vs-panel-decoration-opacity: .06;
	--vs-theme-shadow: 0 18px 38px rgba(9, 5, 32, .5);
}

body.vs-theme--verdigris {
	--vs-theme-page: #101919;
	--vs-theme-surface: #17302d;
	--vs-theme-raised: #21413c;
	--vs-theme-overlay: #142321;
	--vs-theme-text: #edf7e7;
	--vs-theme-muted: #c1d0c3;
	--vs-theme-border: #537e75;
	--vs-theme-border-strong: #e1ba7e;
	--vs-theme-accent: #2a7e72;
	--vs-theme-accent-strong: #d9b377;
	--vs-theme-accent-soft: #164f49;
	--vs-theme-focus: #fff1c9;
	--vs-theme-button-text: #f5fff9;
	--vs-control-radius: 7px;
	--vs-card-radius: 7px;
	--vs-panel-radius: 8px;
	--vs-panel-decoration-opacity: .06;
	--vs-theme-shadow: 0 16px 34px rgba(0, 21, 18, .46);
}

body.vs-theme--polar-command {
	--vs-theme-page: #e9f2f5;
	--vs-theme-surface: #f6fbfc;
	--vs-theme-raised: #dce9ee;
	--vs-theme-overlay: #dce9ee;
	--vs-theme-text: #14232c;
	--vs-theme-muted: #41555f;
	--vs-theme-border: #96afb8;
	--vs-theme-border-strong: #153d4d;
	--vs-theme-accent: #2d7895;
	--vs-theme-accent-strong: #153d4d;
	--vs-theme-accent-soft: #a6cfdb;
	--vs-theme-focus: #061d29;
	--vs-theme-button-text: #f7fcff;
	--vs-control-radius: 12px;
	--vs-card-radius: 12px;
	--vs-panel-radius: 16px;
	--vs-panel-decoration-opacity: 0;
	--vs-theme-shadow: 0 16px 34px rgba(30, 65, 80, .18);
}

body.vs-theme--sunset-ops {
	--vs-theme-page: #1c1025;
	--vs-theme-surface: #352037;
	--vs-theme-raised: #492039;
	--vs-theme-overlay: #311530;
	--vs-theme-text: #fff0e5;
	--vs-theme-muted: #e3b7c6;
	--vs-theme-border: #9e5572;
	--vs-theme-border-strong: #ffd08b;
	--vs-theme-accent: #b44568;
	--vs-theme-accent-strong: #ff9d68;
	--vs-theme-accent-soft: #6d294c;
	--vs-theme-focus: #ffe4b5;
	--vs-theme-button-text: #fff8ef;
	--vs-control-radius: 15px;
	--vs-card-radius: 15px;
	--vs-panel-radius: 17px;
	--vs-panel-decoration-opacity: .07;
	--vs-theme-shadow: 0 18px 38px rgba(31, 3, 27, .5);
}

body.vs-theme--archive-terminal {
	--vs-theme-page: #090b08;
	--vs-theme-surface: #11140d;
	--vs-theme-raised: #1c2114;
	--vs-theme-overlay: #0e100d;
	--vs-theme-text: #f8e6bb;
	--vs-theme-muted: #c8b887;
	--vs-theme-border: #8b702f;
	--vs-theme-border-strong: #ffe09a;
	--vs-theme-accent: #b77a1b;
	--vs-theme-accent-strong: #ffd36b;
	--vs-theme-accent-soft: #584018;
	--vs-theme-focus: #fff0be;
	--vs-theme-button-text: #121008;
	--vs-control-radius: 1px;
	--vs-card-radius: 1px;
	--vs-panel-radius: 2px;
	--vs-panel-decoration-opacity: 0;
	--vs-theme-shadow: 0 14px 30px rgba(0, 0, 0, .52);
}

body.vs-theme--crown-nebula {
	--vs-theme-page: #171026;
	--vs-theme-surface: #2a1d40;
	--vs-theme-raised: #331a4a;
	--vs-theme-overlay: #201237;
	--vs-theme-text: #f8f1ff;
	--vs-theme-muted: #d1c0df;
	--vs-theme-border: #92744a;
	--vs-theme-border-strong: #ffdfa0;
	--vs-theme-accent: #9a6d2f;
	--vs-theme-accent-strong: #f1d293;
	--vs-theme-accent-soft: #5a3a75;
	--vs-theme-focus: #fff1c9;
	--vs-theme-button-text: #fff9ea;
	--vs-control-radius: 18px;
	--vs-card-radius: 18px;
	--vs-panel-radius: 22px;
	--vs-panel-decoration-opacity: .05;
	--vs-theme-shadow: 0 18px 38px rgba(15, 2, 28, .5);
}

body.vs-theme--quantum-bloom {
	--vs-theme-page: #0a1120;
	--vs-theme-surface: #14233d;
	--vs-theme-raised: #1b2c4e;
	--vs-theme-overlay: #101a32;
	--vs-theme-text: #eaf6ff;
	--vs-theme-muted: #b8c9e6;
	--vs-theme-border: #526ca0;
	--vs-theme-border-strong: #9beeff;
	--vs-theme-accent: #3e56b6;
	--vs-theme-accent-strong: #73d9f5;
	--vs-theme-accent-soft: #253b83;
	--vs-theme-focus: #d1f7ff;
	--vs-theme-button-text: #f5fbff;
	--vs-control-radius: 16px;
	--vs-card-radius: 16px;
	--vs-panel-radius: 20px;
	--vs-panel-decoration-opacity: .05;
	--vs-theme-shadow: 0 18px 38px rgba(1, 10, 35, .52);
}

body.vs-theme--ghost-signal {
	--vs-theme-page: #091413;
	--vs-theme-surface: #122a28;
	--vs-theme-raised: #143130;
	--vs-theme-overlay: #0e211f;
	--vs-theme-text: #e9fff8;
	--vs-theme-muted: #b8d9d0;
	--vs-theme-border: #49776f;
	--vs-theme-border-strong: #a4f2d7;
	--vs-theme-accent: #257d72;
	--vs-theme-accent-strong: #87e6c6;
	--vs-theme-accent-soft: #164f49;
	--vs-theme-focus: #d9fff0;
	--vs-theme-button-text: #f2fff9;
	--vs-control-radius: 15px;
	--vs-card-radius: 15px;
	--vs-panel-radius: 18px;
	--vs-panel-decoration-opacity: .05;
	--vs-theme-shadow: 0 18px 38px rgba(0, 18, 16, .5);
}

/* Shared token aliases make existing site components and the Quick Checkout
   integration adopt the selected treatment without changing faction context. */
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) {
	--wp--preset--color--void: var(--vs-theme-page);
	--wp--preset--color--ash: var(--vs-theme-raised);
	--wp--preset--color--bone: var(--vs-theme-text);
	--wp--preset--color--warning: var(--vs-theme-accent);
	--vs-void-black: var(--vs-theme-page);
	--vs-iron-black: var(--vs-theme-surface);
	--vs-gunmetal: var(--vs-theme-raised);
	--vs-ash-grey: var(--vs-theme-border);
	--vs-bone-grey: var(--vs-theme-muted);
	--vs-pale-ash: var(--vs-theme-text);
	--vs-old-ivory: var(--vs-theme-text);
	--vs-weathered-brass: var(--vs-theme-accent);
	--vs-brass-highlight: var(--vs-theme-accent-strong);
	--vs-brass-bright: var(--vs-theme-accent-strong);
	--vs-brass-shadow: var(--vs-theme-accent-soft);
	--vs-tech-surface-texture: none;
	--vs-rule-tech-texture: none;
	background: var(--vs-theme-page) !important;
	color: var(--vs-theme-text);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) {
	--vs-neutral-accent: var(--vs-theme-accent);
	--vs-neutral-muted: var(--vs-theme-surface);
	--vs-neutral-strong: var(--vs-theme-text);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(a, button, input, select, textarea) {
	accent-color: var(--vs-theme-accent);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :focus-visible {
	outline-color: var(--vs-theme-focus) !important;
}

/* Site shell ---------------------------------------------------------------- */
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-site-header {
	border-bottom-color: color-mix(in srgb, var(--vs-theme-border) 72%, transparent) !important;
	background: var(--vs-theme-overlay) !important;
	box-shadow: 0 1px 0 color-mix(in srgb, var(--vs-theme-accent) 20%, transparent);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-site-footer {
	border-top: 1px solid color-mix(in srgb, var(--vs-theme-border) 72%, transparent);
	background: var(--vs-theme-overlay);
}

/* The primary navigation is a separate lower command strip. It uses only the
   neutral preset shell so faction context colours remain reserved for faction
   records and faction-specific pages. */
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-main-nav {
	border-top-color: color-mix(in srgb, var(--vs-theme-border) 68%, transparent);
	border-bottom-color: color-mix(in srgb, var(--vs-theme-border) 55%, transparent);
	background: linear-gradient(180deg, color-mix(in srgb, var(--vs-theme-raised) 86%, var(--vs-theme-overlay)), var(--vs-theme-surface));
	box-shadow: inset 0 1px 0 color-mix(in srgb, var(--vs-theme-text) 5%, transparent), 0 .35rem .9rem rgba(0, 0, 0, .22);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-main-nav a,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-main-nav summary {
	border-radius: var(--vs-control-radius);
	transition: background-color .18s ease, color .18s ease, box-shadow .18s ease;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-nav-toggle {
	border-color: color-mix(in srgb, var(--vs-theme-border-strong) 78%, transparent);
	border-radius: var(--vs-control-radius);
	background: color-mix(in srgb, var(--vs-theme-raised) 88%, var(--vs-theme-surface));
	color: var(--vs-theme-text);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-nav-toggle:hover,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-nav-toggle:focus-visible,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-nav-toggle[aria-expanded="true"] {
	border-color: var(--vs-theme-accent);
	background: color-mix(in srgb, var(--vs-theme-accent) 22%, var(--vs-theme-surface));
	color: var(--vs-theme-accent-strong);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-main-nav a:hover,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-main-nav a:focus-visible,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-main-nav summary:hover,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-main-nav summary:focus-visible {
	background: color-mix(in srgb, var(--vs-theme-accent) 15%, transparent);
	color: var(--vs-theme-accent-strong) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-nav-menu__panel {
	overflow: hidden;
	border-color: var(--vs-theme-border-strong);
	border-top-color: var(--vs-theme-accent);
	border-radius: var(--vs-panel-radius);
	background: linear-gradient(145deg, var(--vs-theme-raised), var(--vs-theme-surface));
	box-shadow: var(--vs-theme-shadow);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-nav-menu__panel a:hover,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-nav-menu__panel a:focus-visible {
	background: color-mix(in srgb, var(--vs-theme-accent) 22%, var(--vs-theme-surface));
	color: var(--vs-theme-text);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-header-cta,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) :is(.vs-button:not(.vs-button--quiet), .vs-rule-filter button, .vs-shop-handoff a) {
	border: 1px solid color-mix(in srgb, var(--vs-theme-accent-strong) 78%, var(--vs-theme-border)) !important;
	border-radius: var(--vs-control-radius) !important;
	background: linear-gradient(135deg, var(--vs-theme-accent-strong), var(--vs-theme-accent) 65%, var(--vs-theme-accent-soft)) !important;
	box-shadow: inset 0 1px 0 rgba(255, 255, 255, .2), 0 .5rem 1.2rem rgba(0, 0, 0, .26) !important;
	color: var(--vs-theme-button-text) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-header-cta:hover,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-header-cta:focus-visible,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) :is(.vs-button:not(.vs-button--quiet), .vs-rule-filter button, .vs-shop-handoff a):hover,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) :is(.vs-button:not(.vs-button--quiet), .vs-rule-filter button, .vs-shop-handoff a):focus-visible {
	border-color: var(--vs-theme-focus) !important;
	background: linear-gradient(135deg, var(--vs-theme-accent-strong), var(--vs-theme-accent) 84%) !important;
	box-shadow: 0 0 0 2px color-mix(in srgb, var(--vs-theme-accent) 26%, transparent), 0 .7rem 1.45rem rgba(0, 0, 0, .32) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(.vs-button--quiet, .vs-header-newsletter) {
	border-color: color-mix(in srgb, var(--vs-theme-border-strong) 72%, transparent) !important;
	border-radius: var(--vs-control-radius) !important;
	background: color-mix(in srgb, var(--vs-theme-overlay) 86%, var(--vs-theme-surface)) !important;
	color: var(--vs-theme-text) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(.vs-button--quiet, .vs-header-newsletter):hover,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(.vs-button--quiet, .vs-header-newsletter):focus-visible {
	border-color: var(--vs-theme-accent-strong) !important;
	background: color-mix(in srgb, var(--vs-theme-accent-soft) 46%, var(--vs-theme-surface)) !important;
	color: var(--vs-theme-text) !important;
}

/* Rounded, neutral tactical surfaces --------------------------------------- */
body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) :is(
	.vs-directory-grid article,
	.vs-unit-grid article,
	.vs-rule-list > li,
	.vs-rule-detail,
	.vs-rule-detail .vs-prose,
	.vs-rule-local-nav__item,
	.vs-rule-related__grid a,
	.vs-rule-quicknav,
	.vs-rule-filter,
	.vs-unit-stats,
	.vs-unit-special,
	.vs-unit-weapons,
	.vs-unit-guidance,
	.vs-unit-reference,
	.vs-unit-linked,
	.vs-unit-equipment,
	.vs-unit-lore,
	.vs-related,
	.vs-rule-version,
	.vs-rule-topics,
	.vs-battle-report__meta div,
	.vs-command-loop li,
	.vs-journey__steps li,
	.vs-path-grid a,
	.vs-model-showcase,
	.vs-detail__image,
	.vs-detail:not(.vs-rule-detail) .vs-prose,
	.vs-contact__panel,
	.vs-policy,
	.vs-composer-section,
	.vs-atlas-search,
	.vs-atlas-results,
	.vs-atlas-detail,
	.vs-atlas-timeline-detail,
	.vs-atlas-record-modal__panel
):not([data-vs-faction]) {
	border-color: color-mix(in srgb, var(--vs-theme-border) 82%, var(--vs-theme-accent) 18%) !important;
	border-radius: var(--vs-card-radius) !important;
	background: linear-gradient(145deg, color-mix(in srgb, var(--vs-theme-raised) 74%, var(--vs-theme-surface)), var(--vs-theme-surface)) !important;
	box-shadow: inset 0 1px 0 color-mix(in srgb, var(--vs-theme-text) 6%, transparent), var(--vs-theme-shadow) !important;
	color: var(--vs-theme-text);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) :is(
	.vs-directory-grid article,
	.vs-unit-grid article,
	.vs-rule-list > li,
	.vs-rule-detail,
	.vs-rule-detail .vs-prose,
	.vs-rule-local-nav__item,
	.vs-rule-related__grid a,
	.vs-rule-quicknav,
	.vs-rule-filter,
	.vs-unit-stats,
	.vs-unit-special,
	.vs-unit-weapons,
	.vs-unit-guidance,
	.vs-unit-reference,
	.vs-unit-linked,
	.vs-unit-equipment,
	.vs-unit-lore,
	.vs-related,
	.vs-rule-version,
	.vs-rule-topics,
	.vs-battle-report__meta div,
	.vs-command-loop li,
	.vs-journey__steps li,
	.vs-path-grid a,
	.vs-model-showcase,
	.vs-detail__image,
	.vs-detail:not(.vs-rule-detail) .vs-prose,
	.vs-contact__panel,
	.vs-policy,
	.vs-composer-section,
	.vs-atlas-search,
	.vs-atlas-results
):not([data-vs-faction])::after {
	border-radius: max(0px, calc(var(--vs-card-radius) - 3px));
	opacity: var(--vs-panel-decoration-opacity);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) :is(
	.vs-directory-grid article,
	.vs-unit-grid article,
	.vs-rule-list > li,
	.vs-rule-detail,
	.vs-rule-detail .vs-prose,
	.vs-rule-local-nav__item,
	.vs-rule-related__grid a,
	.vs-rule-quicknav,
	.vs-rule-filter,
	.vs-unit-stats,
	.vs-unit-special,
	.vs-unit-weapons,
	.vs-unit-guidance,
	.vs-unit-reference,
	.vs-unit-linked,
	.vs-unit-equipment,
	.vs-unit-lore,
	.vs-related,
	.vs-rule-version,
	.vs-rule-topics,
	.vs-battle-report__meta div,
	.vs-command-loop li,
	.vs-journey__steps li,
	.vs-path-grid a,
	.vs-model-showcase,
	.vs-detail__image,
	.vs-detail:not(.vs-rule-detail) .vs-prose,
	.vs-contact__panel,
	.vs-policy,
	.vs-composer-section,
	.vs-atlas-search,
	.vs-atlas-results
):not([data-vs-faction])::before {
	opacity: max(.05, var(--vs-panel-decoration-opacity));
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) :is(
	.vs-directory-grid article,
	.vs-unit-grid article,
	.vs-rule-list > li,
	.vs-rule-local-nav__item,
	.vs-rule-related__grid a,
	.vs-path-grid a
):not([data-vs-faction]):is(:hover, :focus-within) {
	border-color: var(--vs-theme-accent-strong) !important;
	box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--vs-theme-accent) 48%, transparent), 0 18px 34px rgba(0, 0, 0, .36) !important;
}

/* Structured faction content receives the new geometry but retains its own
   inline colour system and existing faction-specific visual rules. */
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.vs-directory-grid article,
	.vs-unit-grid article,
	.vs-rule-list > li,
	.vs-faction-directory-card,
	.vs-unit-faction,
	.vs-lore-library__section
)[data-vs-faction] {
	border-radius: var(--vs-card-radius) !important;
	overflow: hidden;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical).vs-faction-page :is(
	.vs-rule-detail,
	.vs-unit-stats,
	.vs-unit-special,
	.vs-unit-weapons,
	.vs-unit-guidance,
	.vs-unit-reference,
	.vs-unit-equipment,
	.vs-unit-linked,
	.vs-unit-lore,
	.vs-related,
	.vs-rule-version,
	.vs-rule-topics,
	.vs-rule-local-nav,
	.vs-battle-report__meta div
) {
	border-radius: var(--vs-card-radius);
	overflow: hidden;
}

body:is(.vs-theme--grey-contrast, .vs-theme--grey-contrast-warfront) :is(.vs-directory-grid article, .vs-unit-grid article, .vs-rule-list > li)[data-vs-faction] {
	box-shadow: inset 0 3px 0 var(--vs-context-accent), 0 14px 28px rgba(0, 0, 0, .4) !important;
}

/* Home and fixed-layout sections. Background videos remain above these
   fallback layers, so selecting a preset never disables an editor video zone. */
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.vs-hero,
	.vs-command,
	.vs-paths,
	.vs-armies,
	.vs-world,
	.vs-community,
	.vs-journey__hero,
	.vs-journey__steps,
	.vs-journey__callout
) {
	background: radial-gradient(circle at 84% 16%, color-mix(in srgb, var(--vs-theme-accent) 20%, transparent), transparent 34%), linear-gradient(135deg, var(--vs-theme-overlay), var(--vs-theme-surface)) !important;
	color: var(--vs-theme-text) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-hero__copy,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-faction-preview > div:first-child,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-faction-preview__plate {
	border-color: color-mix(in srgb, var(--vs-theme-border) 82%, var(--vs-theme-accent) 18%);
	border-radius: var(--vs-panel-radius);
	background: linear-gradient(145deg, color-mix(in srgb, var(--vs-theme-raised) 72%, var(--vs-theme-surface)), var(--vs-theme-surface)) !important;
	box-shadow: var(--vs-theme-shadow);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-hero__art {
	border-color: color-mix(in srgb, var(--vs-theme-border) 82%, var(--vs-theme-accent) 18%);
	border-radius: var(--vs-panel-radius);
	background: var(--vs-theme-surface);
	box-shadow: var(--vs-theme-shadow);
}

/* The former site treatment used scanlines, inset frames and tactical corner
   marks on otherwise neutral panels. Presets intentionally replace that
   chrome with their own clean surfaces. This list is explicit rather than a
   blanket pseudo-element reset, so real labels and faction identity markers
   remain intact. Image contrast overlays are deliberately not included. */
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.vs-hero__copy,
	.vs-hero__art,
	.vs-faction-preview > div:first-child,
	.vs-faction-preview__plate,
	.vs-rule-detail,
	.vs-rule-local-nav__item,
	.vs-contact__panel,
	.vs-policy,
	.vs-composer-section,
	.vs-atlas-search,
	.vs-atlas-results,
	.vs-directory-grid article:not([data-vs-faction]),
	.vs-unit-grid article:not([data-vs-faction]),
	.vs-unit-stats,
	.vs-unit-special,
	.vs-unit-guidance,
	.vs-unit-weapons,
	.vs-unit-reference,
	.vs-unit-linked,
	.vs-unit-equipment,
	.vs-unit-lore,
	.vs-related,
	.vs-rule-version,
	.vs-rule-filter,
	.vs-rule-related__grid a,
	.vs-model-showcase,
	.vs-detail__image,
	.vs-battle-report__meta div,
	.vs-path-grid a,
	.vs-command-loop li,
	.vs-journey__steps li
)::before,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.vs-hero__copy,
	.vs-faction-preview > div:first-child,
	.vs-rule-detail,
	.vs-rule-local-nav__item,
	.vs-rule-quicknav,
	.vs-contact__panel,
	.vs-policy,
	.vs-composer-section,
	.vs-atlas-search,
	.vs-atlas-results,
	.vs-directory-grid article:not([data-vs-faction]),
	.vs-unit-grid article:not([data-vs-faction]),
	.vs-unit-stats,
	.vs-unit-special,
	.vs-unit-guidance,
	.vs-unit-weapons,
	.vs-unit-reference,
	.vs-unit-linked,
	.vs-unit-equipment,
	.vs-unit-lore,
	.vs-related,
	.vs-rule-version,
	.vs-rule-filter,
	.vs-rule-related__grid a,
	.vs-model-showcase,
	.vs-detail__image,
	.vs-battle-report__meta div,
	.vs-path-grid a,
	.vs-command-loop li,
	.vs-journey__steps li
)::after {
	display: none !important;
	content: none !important;
	border: 0 !important;
	background: none !important;
	box-shadow: none !important;
}

/* This quick-navigation label is meaningful content, not a decorative
   pseudo-element. Keep it, but let the active preset supply the colour. */
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-rule-quicknav::before {
	border-bottom-color: color-mix(in srgb, var(--vs-theme-border) 58%, transparent);
	color: var(--vs-theme-accent-strong);
}

/* Form, catalogue and atlas controls -------------------------------------- */
body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) :is(
	.vs-rule-filter input,
	.vs-rule-filter select,
	.vs-atlas-search input,
	.vs-contact__form input,
	.vs-contact__form textarea,
	main input,
	main select,
	main textarea
):not([type="checkbox"]):not([type="radio"]) {
	border-color: color-mix(in srgb, var(--vs-theme-border-strong) 62%, var(--vs-theme-border)) !important;
	border-radius: var(--vs-control-radius) !important;
	background: var(--vs-theme-overlay) !important;
	box-shadow: inset 2px 0 0 var(--vs-theme-accent) !important;
	color: var(--vs-theme-text) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) :is(
	.vs-rule-filter input,
	.vs-rule-filter select,
	.vs-atlas-search input,
	.vs-contact__form input,
	.vs-contact__form textarea,
	main input,
	main select,
	main textarea
):not([type="checkbox"]):not([type="radio"]):is(:hover, :focus-visible) {
	border-color: var(--vs-theme-accent-strong) !important;
	box-shadow: inset 2px 0 0 var(--vs-theme-accent), 0 0 0 2px color-mix(in srgb, var(--vs-theme-accent) 22%, transparent) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) :is(
	.vs-eyebrow,
	.vs-rule-topics__label,
	.vs-rule-list__category,
	.vs-rule-local-nav__item > span,
	.vs-rule-related__grid span,
	.vs-unit-stats dt,
	.vs-unit-weapons th,
	.vs-unit-guidance dt,
	.vs-unit-grid dt,
	.vs-atlas-detail__meta
) {
	color: var(--vs-theme-accent-strong) !important;
}

/* Quick Checkout is supplied by its own plugin, but its site integration lives
   in the VoidSiege theme. These rules keep that storefront inside the selected
   public treatment without altering checkout data or behaviour. */
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.jla3d-qc-shop__header,
	.jla3d-qc-product > article > .entry-header,
	.jla3d-qc-product__purchase,
	.jla3d-qc-cart__header,
	.jla3d-qc-order-status__content,
	.jla3d-qc-shop__filters,
	.jla3d-qc-product__gallery,
	.jla3d-qc-product__related,
	.jla3d-qc-product__media,
	.jla3d-qc-product__details,
	.jla3d-qc-product__checkout-status,
	.jla3d-qc-product__purchase-notes,
	.jla3d-qc-add-to-cart,
	.jla3d-qc-cart__items,
	.jla3d-qc-cart__checkout,
	.jla3d-qc-product-card,
	.jla3d-qc-product__related li,
	.jla3d-qc-cart__item
) {
	border-color: color-mix(in srgb, var(--vs-theme-border) 82%, var(--vs-theme-accent) 18%) !important;
	border-radius: var(--vs-card-radius) !important;
	background: linear-gradient(145deg, var(--vs-theme-raised), var(--vs-theme-surface)) !important;
	box-shadow: inset 0 1px 0 color-mix(in srgb, var(--vs-theme-text) 6%, transparent), var(--vs-theme-shadow) !important;
	color: var(--vs-theme-text) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.jla3d-qc-shop__header,
	.jla3d-qc-product > article > .entry-header,
	.jla3d-qc-product__purchase,
	.jla3d-qc-cart__header,
	.jla3d-qc-order-status__content
)::after {
	border-radius: max(0px, calc(var(--vs-card-radius) - 3px));
	opacity: var(--vs-panel-decoration-opacity);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.jla3d-qc-shop__basket-link a,
	.jla3d-qc-product-card__action,
	.jla3d-qc-product-card__actions button,
	.jla3d-qc-add-to-cart button,
	.jla3d-qc-shop__filter-actions button,
	.jla3d-qc-cart__update,
	.jla3d-qc-cart__remove
) {
	border-color: var(--vs-theme-accent-strong) !important;
	border-radius: var(--vs-control-radius) !important;
	background: linear-gradient(135deg, var(--vs-theme-accent-strong), var(--vs-theme-accent)) !important;
	color: var(--vs-theme-button-text) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.jla3d-qc-shop input:not([type="checkbox"]),
	.jla3d-qc-shop select,
	.jla3d-qc-product input:not([type="checkbox"]),
	.jla3d-qc-product select,
	.jla3d-qc-cart input:not([type="checkbox"]),
	.jla3d-qc-cart select
) {
	border-color: var(--vs-theme-border-strong) !important;
	border-radius: var(--vs-control-radius) !important;
	background: var(--vs-theme-overlay) !important;
	color: var(--vs-theme-text) !important;
}

/* Make the deliberately neutral greys of preset ten give faction cards an
   extra readable edge without replacing their approved faction palette. */
body:is(.vs-theme--grey-contrast, .vs-theme--grey-contrast-warfront) :is(.vs-unit-faction, .vs-lore-library__section)[data-vs-faction] > header {
	border-left-width: 5px;
}

/* Presets replace, rather than tint, the former tactical-panel chrome. The
   lists are intentionally explicit: other pseudo-elements may carry actual
   labels, markers or accessibility affordances and must remain untouched. */
body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) :is(
	.vs-rule-list > li,
	.vs-rule-detail,
	.vs-rule-detail .vs-prose,
	.vs-rule-local-nav__item,
	.vs-rule-related__grid a,
	.vs-directory-grid article,
	.vs-unit-grid article,
	.vs-unit-stats,
	.vs-unit-special,
	.vs-unit-weapons,
	.vs-unit-guidance,
	.vs-unit-reference,
	.vs-unit-linked,
	.vs-unit-equipment,
	.vs-unit-lore,
	.vs-related,
	.vs-rule-version,
	.vs-rule-topics,
	.vs-battle-report__meta div,
	.vs-command-loop li,
	.vs-journey__steps li,
	.vs-journey__callout,
	.vs-path-grid a,
	.vs-model-showcase,
	.vs-detail__image,
	.vs-detail:not(.vs-rule-detail) .vs-prose,
	.vs-contact__panel,
	.vs-policy,
	.vs-composer-section,
	.vs-not-found,
	.vs-build-guides__search,
	.vs-unit-filter,
	.vs-build-guide,
	.vs-build-guide-card,
	.vs-build-guides__empty,
	.vs-atlas-search,
	.vs-atlas-results,
	.vs-atlas-record-modal__panel
):not([data-vs-faction])::before,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) :is(
	.vs-rule-list > li,
	.vs-rule-detail,
	.vs-rule-detail .vs-prose,
	.vs-rule-local-nav__item,
	.vs-rule-related__grid a,
	.vs-rule-quicknav,
	.vs-directory-grid article,
	.vs-unit-grid article,
	.vs-unit-stats,
	.vs-unit-special,
	.vs-unit-weapons,
	.vs-unit-guidance,
	.vs-unit-reference,
	.vs-unit-linked,
	.vs-unit-equipment,
	.vs-unit-lore,
	.vs-related,
	.vs-rule-version,
	.vs-rule-topics,
	.vs-battle-report__meta div,
	.vs-command-loop li,
	.vs-journey__steps li,
	.vs-journey__callout,
	.vs-path-grid a,
	.vs-model-showcase,
	.vs-detail__image,
	.vs-detail:not(.vs-rule-detail) .vs-prose,
	.vs-contact__panel,
	.vs-policy,
	.vs-composer-section,
	.vs-not-found,
	.vs-build-guides__search,
	.vs-unit-filter,
	.vs-build-guide,
	.vs-build-guide-card,
	.vs-build-guides__empty,
	.vs-atlas-search,
	.vs-atlas-results,
	.vs-atlas-record-modal__panel
):not([data-vs-faction])::after,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.vs-button,
	.vs-header-cta,
	.vs-rule-filter button,
	.vs-atlas-search button:not(.vs-atlas-button--quiet),
	.jla3d-qc-shop__header,
	.jla3d-qc-product > article > .entry-header,
	.jla3d-qc-product__purchase,
	.jla3d-qc-cart__header,
	.jla3d-qc-order-status__content
)::after {
	display: none !important;
	border: 0 !important;
	background: none !important;
	box-shadow: none !important;
	content: none !important;
	opacity: 0 !important;
}

/* Clean neutral surfaces used by the remaining catalogue, page and map
   components. This is deliberately loaded after their legacy definitions. */
body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) :is(
	.vs-journey__callout,
	.vs-battle-report__player,
	.vs-build-guides__search,
	.vs-unit-filter,
	.vs-build-guide,
	.vs-build-guide-card,
	.vs-build-guides__empty,
	.vs-not-found,
	.vs-atlas-map__filter-menu,
	.vs-atlas-detail,
	.vs-atlas-timeline-detail,
	.vs-atlas-record-modal__panel,
	.vs-rule-dialog__panel,
	.vs-player__panel,
	.vs-deckbuilder__controls,
	.vs-deckbuilder__layout > *,
	.vs-deck-viewer__panel
) {
	border-color: color-mix(in srgb, var(--vs-theme-border) 82%, var(--vs-theme-accent) 18%) !important;
	border-radius: var(--vs-card-radius) !important;
	background: linear-gradient(145deg, var(--vs-theme-raised), var(--vs-theme-surface)) !important;
	box-shadow: inset 0 1px 0 color-mix(in srgb, var(--vs-theme-text) 6%, transparent), var(--vs-theme-shadow) !important;
	color: var(--vs-theme-text) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) :is(
	.vs-atlas-search button,
	.vs-atlas-map__controls button,
	.vs-atlas-map__filter > button,
	.vs-atlas-map__filter-menu button,
	.vs-atlas-timeline__controls button,
	.vs-atlas-timeline__arrow,
	.vs-atlas-results button
) {
	border: 1px solid color-mix(in srgb, var(--vs-theme-accent-strong) 76%, var(--vs-theme-border)) !important;
	border-radius: var(--vs-control-radius) !important;
	background: linear-gradient(135deg, var(--vs-theme-accent-strong), var(--vs-theme-accent)) !important;
	box-shadow: 0 .5rem 1.2rem rgba(0, 0, 0, .25) !important;
	color: var(--vs-theme-button-text) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) :is(
	.vs-atlas-search .vs-atlas-button--quiet,
	.vs-atlas-map__filter-menu button:not(.is-active)
) {
	border-color: color-mix(in srgb, var(--vs-theme-border-strong) 70%, transparent) !important;
	background: var(--vs-theme-overlay) !important;
	color: var(--vs-theme-text) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) .vs-atlas-detail::after {
	border-right-color: var(--vs-theme-raised) !important;
	border-left-color: var(--vs-theme-raised) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) .vs-atlas-timeline__viewport::after {
	background: color-mix(in srgb, var(--vs-theme-border-strong) 76%, transparent);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) .vs-atlas-timeline-event {
	color: var(--vs-theme-text);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) .vs-atlas-timeline-event::after {
	border-color: var(--vs-theme-border-strong);
	border-radius: 50%;
	background: var(--vs-theme-surface);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) .vs-atlas-timeline-event:is(:hover, :focus-visible, .is-active)::after {
	border-color: var(--vs-theme-accent-strong);
	background: var(--vs-theme-accent);
	box-shadow: 0 0 0 5px color-mix(in srgb, var(--vs-theme-accent) 22%, transparent), 0 0 16px color-mix(in srgb, var(--vs-theme-accent) 56%, transparent);
}

/* Faction records keep their supplied hue, but shed the former scanlines,
   sharp corner ornaments and fixed black surfaces under non-tactical themes. */
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.vs-faction-directory-card,
	.vs-unit-faction,
	.vs-rule-list > li,
	.vs-directory-grid > article,
	.vs-unit-grid > article
)[data-vs-faction] {
	border-color: color-mix(in srgb, var(--vs-context-accent) 68%, var(--vs-theme-border)) !important;
	border-radius: var(--vs-card-radius) !important;
	background: linear-gradient(145deg, color-mix(in srgb, var(--vs-context-muted) 62%, var(--vs-theme-raised)), var(--vs-theme-surface)) !important;
	box-shadow: inset 3px 0 0 var(--vs-context-accent), var(--vs-theme-shadow) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.vs-faction-directory-card,
	.vs-unit-faction,
	.vs-rule-list > li,
	.vs-directory-grid > article,
	.vs-unit-grid > article
)[data-vs-faction]::before,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.vs-faction-directory-card,
	.vs-unit-faction,
	.vs-rule-list > li,
	.vs-directory-grid > article,
	.vs-unit-grid > article
)[data-vs-faction]::after,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical).vs-faction-page :is(
	.vs-rule-detail,
	.vs-rule-local-nav__item
)::before,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical).vs-faction-page :is(
	.vs-rule-detail,
	.vs-rule-local-nav__item
)::after {
	display: none !important;
	border: 0 !important;
	background: none !important;
	content: none !important;
	opacity: 0 !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical).vs-faction-page :is(
	.vs-rule-detail,
	.vs-unit-stats,
	.vs-unit-special,
	.vs-unit-weapons,
	.vs-unit-guidance,
	.vs-unit-reference,
	.vs-unit-equipment,
	.vs-unit-linked,
	.vs-unit-lore,
	.vs-related,
	.vs-rule-version,
	.vs-rule-topics,
	.vs-rule-local-nav,
	.vs-battle-report__meta div
) {
	border-color: color-mix(in srgb, var(--vs-context-accent) 64%, var(--vs-theme-border)) !important;
	border-radius: var(--vs-card-radius) !important;
	background: linear-gradient(145deg, color-mix(in srgb, var(--vs-context-muted) 58%, var(--vs-theme-raised)), var(--vs-theme-surface)) !important;
	box-shadow: inset 3px 0 0 color-mix(in srgb, var(--vs-context-accent) 78%, transparent), var(--vs-theme-shadow) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical).vs-faction-page :is(
	.vs-button,
	.vs-rule-filter button,
	.vs-header-cta
) {
	border-radius: var(--vs-control-radius) !important;
}

@media (max-width: 700px) {
	body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-nav-menu__panel {
		border-radius: min(var(--vs-panel-radius), 10px);
	}
}

/*
 * Preset geometry completion
 *
 * A few newer tools and media components were added after the first preset
 * pass. Keep this deliberately focused on geometry: it gives every active
 * preset its intended rounded silhouette without replacing faction colours,
 * data attributes or component behaviour.
 */
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.vs-not-found__panel,
	.vs-atlas-map__viewport,
	.vs-video-embed,
	.vs-composer-section__media,
	.vs-composer-section__empty,
	.vs-journey__hero > figure,
	.vs-contact__notice,
	.vs-command-loop .wp-block-column,
	.vs-path-grid .wp-block-column,
	.vs-faction-image-modal__panel,
	.vs-detail__image,
	.vs-detail:not(.vs-rule-detail) .vs-prose,
	.vs-rule-local-nav__item,
	.vs-rule-related__grid a,
	.vs-battle-report__player,
	.vs-unit-reference__missing,
	.vs-unit-equipment figure > a,
	.vs-unit-equipment__denied-card,
	.vs-unit-card,
	.vs-player__dashboard,
	.vs-player__faction-label,
	.vs-player__notice,
	.vs-deckbuilder__saved-item,
	.vs-deckbuilder__units li,
	.vs-deckbuilder__unit-image,
	.vs-deckbuilder__current-card,
	.vs-deckbuilder__empty,
	.vs-build-guide-card__preview img
) {
	border-radius: var(--vs-card-radius) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.vs-atlas-map__viewport,
	.vs-video-embed,
	.vs-composer-section__media,
	.vs-journey__hero > figure,
	.vs-faction-image-modal__panel,
	.vs-detail__image,
	.vs-unit-equipment figure > a,
	.vs-unit-equipment__denied-card,
	.vs-unit-card,
	.vs-deckbuilder__unit-image,
	.vs-build-guide-card__preview
) {
	overflow: hidden;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.vs-video-embed iframe,
	.vs-composer-section__media img,
	.vs-journey__hero > figure img,
	.vs-detail__image img,
	.vs-unit-equipment figure > a img,
	.vs-unit-card img,
	.vs-deckbuilder__unit-image img,
	.vs-build-guide-card__preview img
) {
	border-radius: inherit;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.vs-rule-quicknav a,
	.vs-unit-faction-nav a,
	.vs-rule-topic-tag,
	.vs-unit-rules :is(a, span),
	.vs-unit-linked a,
	.vs-shop-handoff a,
	.vs-unit-card-viewer button,
	.vs-deckbuilder__units button
) {
	border-radius: var(--vs-control-radius) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-not-found__panel::after,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-faction-image-modal__panel::after,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-unit-equipment__denied-card::before {
	display: none !important;
	content: none !important;
	border: 0 !important;
	background: none !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical):not(.vs-faction-page) .vs-not-found__panel {
	border-color: color-mix(in srgb, var(--vs-theme-border) 82%, var(--vs-theme-accent) 18%) !important;
	background: linear-gradient(145deg, var(--vs-theme-raised), var(--vs-theme-surface)) !important;
	box-shadow: inset 0 1px 0 color-mix(in srgb, var(--vs-theme-text) 6%, transparent), var(--vs-theme-shadow) !important;
	color: var(--vs-theme-text) !important;
}

/* These labels sit over rich artwork. Their colours still inherit faction
 * context where available, but their geometry belongs to the active preset. */
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.vs-faction-preview__plate > span,
	.vs-unit-card__scan
) {
	border: 1px solid color-mix(in srgb, var(--vs-context-accent, var(--vs-theme-accent)) 68%, var(--vs-theme-border)) !important;
	border-radius: var(--vs-control-radius) !important;
	background: color-mix(in srgb, var(--vs-context-accent, var(--vs-theme-accent)) 34%, var(--vs-theme-overlay)) !important;
	color: var(--vs-theme-text) !important;
}

/* Short Story Narrator is intentionally a self-contained plugin, but its
 * public cards and reader should still visually belong to the selected site
 * preset. These variables only feed the reader's neutral chrome. */
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.jla-short-story-library,
	.jla-short-story-reader
) {
	--jla-ink: var(--vs-theme-surface);
	--jla-panel: var(--vs-theme-raised);
	--jla-copy: var(--vs-theme-text);
	--jla-muted: var(--vs-theme-muted);
	--jla-red: var(--vs-theme-accent);
	--jla-line: color-mix(in srgb, var(--vs-theme-border) 78%, var(--vs-theme-accent) 22%);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.jla-short-story-card,
	.jla-short-story-empty,
	.jla-short-story-reader__cover,
	.jla-short-story-reader__stage
) {
	border-color: color-mix(in srgb, var(--vs-theme-border) 80%, var(--vs-theme-accent) 20%) !important;
	border-radius: var(--vs-card-radius) !important;
	background-color: var(--vs-theme-surface);
	box-shadow: inset 0 1px 0 color-mix(in srgb, var(--vs-theme-text) 6%, transparent), var(--vs-theme-shadow) !important;
	color: var(--vs-theme-text);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .jla-short-story-card {
	background: linear-gradient(145deg, var(--vs-theme-raised), var(--vs-theme-surface)) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .jla-short-story-card::before,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .jla-short-story-card__cover::after,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .jla-short-story-reader__stage::before {
	display: none !important;
	content: none !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .jla-short-story-card__cover {
	border: 1px solid color-mix(in srgb, var(--vs-theme-border) 72%, transparent);
	border-radius: max(0px, calc(var(--vs-card-radius) - 3px));
	box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .26);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.jla-short-story-library__eyebrow,
	.jla-short-story-reader__eyebrow,
	.jla-short-story-reader__label,
	.jla-short-story-card__meta
) {
	color: var(--vs-theme-accent-strong);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .jla-short-story-card__body > p:not(.jla-short-story-card__meta) {
	color: var(--vs-theme-muted);
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .jla-short-story-card__link {
	align-self: flex-start;
	border: 1px solid color-mix(in srgb, var(--vs-theme-border-strong) 72%, var(--vs-theme-accent)) !important;
	border-radius: var(--vs-control-radius) !important;
	background: color-mix(in srgb, var(--vs-theme-overlay) 82%, var(--vs-theme-surface)) !important;
	color: var(--vs-theme-text) !important;
	padding: .55rem .75rem;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .jla-short-story-card__link:is(:hover, :focus-visible) {
	border-color: var(--vs-theme-accent-strong) !important;
	background: color-mix(in srgb, var(--vs-theme-accent) 24%, var(--vs-theme-surface)) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.jla-short-story-reader__open,
	.jla-short-story-reader__controls button,
	.jla-short-story-reader__return,
	.jla-short-story-reader__library,
	.jla-short-story-reader__time-index
) {
	border-color: color-mix(in srgb, var(--vs-theme-border-strong) 72%, var(--vs-theme-accent)) !important;
	border-radius: var(--vs-control-radius) !important;
	background: linear-gradient(135deg, var(--vs-theme-raised), var(--vs-theme-surface)) !important;
	color: var(--vs-theme-text) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.jla-short-story-reader__open,
	.jla-short-story-reader__controls .jla-short-story-reader__play
) {
	border-color: var(--vs-theme-accent-strong) !important;
	background: linear-gradient(135deg, var(--vs-theme-accent-strong), var(--vs-theme-accent)) !important;
	color: var(--vs-theme-button-text) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .jla-short-story-reader__controls {
	border-top-color: color-mix(in srgb, var(--vs-theme-border) 68%, transparent);
	background: color-mix(in srgb, var(--vs-theme-overlay) 62%, transparent);
}

/* Product imagery is nested below the rounded Quick Checkout card. Clip and
 * round it too so a square image cannot visually break the chosen preset. */
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.jla3d-qc-product-card__image,
	.jla3d-qc-product-card__placeholder,
	.jla3d-qc-product-card__related-image,
	.jla3d-qc-cart__item-image,
	.jla3d-qc-product__image,
	.jla3d-qc-product__gallery,
	.jla3d-qc-product__related-image
) {
	border-radius: max(0px, calc(var(--vs-card-radius) - 3px));
	overflow: hidden;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.jla3d-qc-product-card__image img,
	.jla3d-qc-product-card__related-image img,
	.jla3d-qc-cart__item-image img,
	.jla3d-qc-product__image img,
	.jla3d-qc-product__gallery img,
	.jla3d-qc-product__related-image img
) {
	border-radius: inherit;
}

/* The header brand is deliberately an unpainted viewport for its transparent
 * PNG. The active header treatment remains visible through the artwork, and
 * the brand never inherits an interactive card/button treatment. */
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) :is(
	.vs-header-brand,
	.vs-header-brand:hover,
	.vs-header-brand:focus,
	.vs-header-brand:focus-visible,
	.vs-header-brand img
) {
	background: transparent !important;
	box-shadow: none !important;
	filter: none !important;
	outline: 0;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-header-brand::before,
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-header-brand::after {
	display: none !important;
	content: none !important;
}

/* A few of the more expressive concepts use bespoke shell gradients rather
 * than relying solely on their shared colour tokens. Faction context colours
 * stay untouched: these are neutral header, navigation and control surfaces. */
body.vs-theme--prism .vs-site-header {
	background: linear-gradient(90deg, #132444, #30205b 52%, #2a143c) !important;
}

body.vs-theme--prism .vs-main-nav {
	background: linear-gradient(90deg, #132444, #30205b 52%, #2a143c) !important;
}

body.vs-theme--prism:not(.vs-faction-page) :is(.vs-header-cta, .vs-button:not(.vs-button--quiet), .vs-rule-filter button, .vs-shop-handoff a) {
	background: linear-gradient(100deg, #186f9c, #b33cb1) !important;
}

body.vs-theme--sunset-ops .vs-site-header,
body.vs-theme--sunset-ops .vs-main-nav {
	background: linear-gradient(100deg, #311530, #492039 54%, #512631) !important;
}

body.vs-theme--crown-nebula .vs-site-header,
body.vs-theme--crown-nebula .vs-main-nav {
	background: linear-gradient(100deg, #201237, #2c1643 54%, #331a4a) !important;
}

body.vs-theme--archive-terminal .vs-site-header,
body.vs-theme--archive-terminal .vs-main-nav {
	background-image: repeating-linear-gradient(0deg, rgba(255, 211, 107, .035) 0 1px, transparent 1px 4px), linear-gradient(180deg, #0e100d, #11140d) !important;
}

@keyframes vs-theme-quantum-bloom-drift {
	0% { background-position: 0% 0%, 100% 100%, center; }
	50% { background-position: 15% -11%, 85% 111%, center; }
	100% { background-position: 25% -18%, 75% 118%, center; }
}

@keyframes vs-theme-ghost-signal-drift {
	0% { background-position: 4% 0%, 96% 100%, center; }
	50% { background-position: 13% -9%, 87% 109%, center; }
	100% { background-position: 21% -14%, 79% 114%, center; }
}

body.vs-theme--quantum-bloom :is(.vs-site-header, .vs-main-nav, .vs-library__intro:not(.vs-video-zone), .vs-journey__hero:not(.vs-video-zone), .vs-hero:not(.vs-video-zone)) {
	background-image: radial-gradient(ellipse 52% 94% at 7% 14%, rgba(115, 217, 245, .2), transparent 68%), radial-gradient(ellipse 48% 92% at 95% 86%, rgba(102, 72, 255, .25), transparent 70%), linear-gradient(135deg, var(--vs-theme-overlay), var(--vs-theme-raised)) !important;
	background-size: 155% 155%, 165% 165%, 100% 100%;
	animation: vs-theme-quantum-bloom-drift 16s ease-in-out infinite alternate;
}

body.vs-theme--ghost-signal :is(.vs-site-header, .vs-main-nav, .vs-library__intro:not(.vs-video-zone), .vs-journey__hero:not(.vs-video-zone), .vs-hero:not(.vs-video-zone)) {
	background-image: radial-gradient(ellipse 52% 92% at 8% 12%, rgba(135, 230, 198, .16), transparent 68%), radial-gradient(ellipse 49% 92% at 96% 89%, rgba(71, 152, 203, .19), transparent 71%), linear-gradient(135deg, var(--vs-theme-overlay), var(--vs-theme-raised)) !important;
	background-size: 155% 155%, 165% 165%, 100% 100%;
	animation: vs-theme-ghost-signal-drift 19s ease-in-out infinite alternate;
}

/* Warfront confines the busy action to the site chrome. The effects are CSS
 * only: each burst grows, flashes and fades instead of sliding a static bar
 * across the screen. */
@keyframes vs-theme-warfront-laser-up-right {
	0%, 25%, 100% { opacity: 0; transform: rotate(var(--vs-warfront-angle, -15deg)) scaleX(.04); }
	29% { opacity: .28; }
	36% { opacity: 1; transform: rotate(var(--vs-warfront-angle, -15deg)) scaleX(1); }
	43% { opacity: .72; transform: rotate(var(--vs-warfront-angle, -15deg)) scaleX(1.16); }
	52% { opacity: 0; transform: rotate(var(--vs-warfront-angle, -15deg)) scaleX(1.28); }
}

@keyframes vs-theme-warfront-laser-up-left {
	0%, 43%, 100% { opacity: 0; transform: rotate(var(--vs-warfront-angle, 13deg)) scaleX(.04); }
	47% { opacity: .3; }
	55% { opacity: 1; transform: rotate(var(--vs-warfront-angle, 13deg)) scaleX(1); }
	62% { opacity: .7; transform: rotate(var(--vs-warfront-angle, 13deg)) scaleX(1.13); }
	71% { opacity: 0; transform: rotate(var(--vs-warfront-angle, 13deg)) scaleX(1.28); }
}

@keyframes vs-theme-warfront-tracer-volley {
	0%, 8%, 100% { opacity: 0; transform: rotate(-9deg) translateX(-1rem) scaleX(.08); }
	12% { opacity: .92; }
	23% { opacity: .86; transform: rotate(-9deg) translateX(13rem) scaleX(1); }
	29% { opacity: 0; transform: rotate(-9deg) translateX(19rem) scaleX(.85); }
	44% { opacity: 0; transform: rotate(-5deg) translateX(-1rem) scaleX(.08); }
	48% { opacity: .78; }
	59% { opacity: .72; transform: rotate(-5deg) translateX(15rem) scaleX(1); }
	65% { opacity: 0; transform: rotate(-5deg) translateX(22rem) scaleX(.76); }
}

@keyframes vs-theme-warfront-explosion {
	0%, 19%, 100% { opacity: 0; transform: scale(.16); }
	23% { opacity: .95; transform: scale(.52); }
	30% { opacity: .72; transform: scale(1.15); }
	39% { opacity: 0; transform: scale(1.9); }
	58% { opacity: 0; transform: scale(.2); }
	63% { opacity: .83; transform: scale(.62); }
	70% { opacity: .57; transform: scale(1.25); }
	78% { opacity: 0; transform: scale(2.08); }
}

body.vs-theme--grey-contrast-warfront {
	background-color: var(--vs-theme-page) !important;
	background-image: none;
}

body.vs-theme--grey-contrast-warfront :is(
	.vs-site-header,
	.vs-site-footer
) {
	position: relative;
	isolation: isolate;
	background-color: #111 !important;
	background-image:
		radial-gradient(ellipse 42% 100% at 7% 112%, rgba(68, 136, 175, .18), transparent 70%),
		radial-gradient(ellipse 46% 96% at 94% -12%, rgba(183, 62, 35, .15), transparent 72%),
		linear-gradient(135deg, #070707 0%, #1c1c1c 53%, #101010 100%) !important;
	background-size: 100% 100%;
	background-repeat: no-repeat;
}

/* Keep the normal Grey Contrast nav gradient, at exactly 50% opacity, so the
 * unified Warfront canvas remains visible beneath the command strip. */
body.vs-theme--grey-contrast-warfront .vs-main-nav {
	background: linear-gradient(180deg, color-mix(in srgb, var(--vs-theme-raised) 50%, transparent), color-mix(in srgb, var(--vs-theme-surface) 50%, transparent)) !important;
	background-image: linear-gradient(180deg, color-mix(in srgb, var(--vs-theme-raised) 50%, transparent), color-mix(in srgb, var(--vs-theme-surface) 50%, transparent)) !important;
	box-shadow: inset 0 1px 0 rgba(255, 255, 255, .08) !important;
}

/* Navigation panels need to be able to escape the header and navigation strip.
 * Background painting is already clipped to the element's own paint area. */
body.vs-theme--grey-contrast-warfront :is(.vs-site-header, .vs-main-nav) {
	overflow: visible;
}

body.vs-theme--grey-contrast-warfront .vs-site-footer {
	overflow: hidden;
}

/* Major energy beams are fired diagonally upward from opposite sides of the
 * header and footer. The main-navigation strip supplies short tracer volleys. */
body.vs-theme--grey-contrast-warfront :is(
	.vs-site-header,
	.vs-site-footer
)::before {
	display: block;
	position: absolute;
	z-index: 0;
	bottom: 18%;
	content: "";
	width: clamp(9rem, 27vw, 28rem);
	height: clamp(2px, .25vw, 4px);
	border-radius: 999px;
	background: linear-gradient(90deg, transparent 0, rgba(255, 180, 91, .22) 10%, #fff6d9 51%, rgba(255, 101, 38, .88) 68%, transparent 100%);
	box-shadow: 0 0 .22rem rgba(255, 255, 255, .95), 0 0 .75rem rgba(255, 119, 44, .88), 0 0 1.8rem rgba(255, 84, 25, .46);
	pointer-events: none;
}

body.vs-theme--grey-contrast-warfront .vs-site-header { --vs-warfront-laser-duration: 3.9s; }
body.vs-theme--grey-contrast-warfront .vs-site-footer { --vs-warfront-laser-duration: 4.8s; }

body.vs-theme--grey-contrast-warfront :is(.vs-site-header, .vs-site-footer):not(.vs-warfront--right-origin)::before {
	left: var(--vs-warfront-beam-x, 8%);
	bottom: var(--vs-warfront-beam-y, 18%);
	transform-origin: left center;
	animation: vs-theme-warfront-laser-up-right var(--vs-warfront-laser-duration) cubic-bezier(.25, .8, .35, 1) infinite;
}

body.vs-theme--grey-contrast-warfront :is(.vs-site-header, .vs-site-footer).vs-warfront--right-origin::before {
	right: var(--vs-warfront-beam-x, 8%);
	bottom: var(--vs-warfront-beam-y, 18%);
	transform-origin: right center;
	animation: vs-theme-warfront-laser-up-left var(--vs-warfront-laser-duration) cubic-bezier(.25, .8, .35, 1) infinite;
}

/* Two offset explosion pulses keep the action varied without obscuring the
 * header controls or footer links. */
body.vs-theme--grey-contrast-warfront :is(.vs-site-header, .vs-site-footer)::after {
	position: absolute;
	z-index: 0;
	width: clamp(1.65rem, 4.2vw, 4.4rem);
	aspect-ratio: 1;
	content: "";
	border-radius: 50%;
	background: radial-gradient(circle, #fffde0 0 7%, #ffda76 12%, #ff742d 29%, rgba(255, 65, 18, .35) 48%, transparent 70%);
	box-shadow: 0 0 .65rem rgba(255, 230, 152, .95), 0 0 1.8rem rgba(255, 88, 28, .72);
	pointer-events: none;
	animation: vs-theme-warfront-explosion 3.9s ease-out infinite;
}

body.vs-theme--grey-contrast-warfront .vs-site-header::after { top: var(--vs-warfront-burst-y, 48%); left: var(--vs-warfront-burst-x, 68%); }
body.vs-theme--grey-contrast-warfront .vs-site-footer::after { top: var(--vs-warfront-burst-y, 18%); left: var(--vs-warfront-burst-x, 19%); animation-delay: -4.1s; }

body.vs-theme--grey-contrast-warfront :is(.vs-site-header, .vs-main-nav, .vs-site-footer) > * {
	position: relative;
	z-index: 1;
}

/* Home hero glass ----------------------------------------------------------
   The background is deliberately translucent so an editor-selected video (or
   its static image fallback) remains part of the composition. This is kept
   local to the hero: the shared navigation and other neutral panels retain
   their established theme treatments. */
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-hero__copy {
	border-color: color-mix(in srgb, var(--vs-theme-border-strong) 54%, transparent) !important;
	background: linear-gradient(135deg, color-mix(in srgb, var(--vs-theme-overlay) 70%, transparent), color-mix(in srgb, var(--vs-theme-surface) 52%, transparent)) !important;
	box-shadow: inset 0 1px 0 rgba(255, 255, 255, .13), 0 18px 38px rgba(0, 0, 0, .4), var(--vs-theme-shadow) !important;
}

/* Unlike other preset panels, the home hero deliberately retains a little of
   the weathered tactical treatment: it keeps the glass from reading as a
   generic card while the video remains visible through the surface. */
body[class*="vs-theme--"]:not(.vs-theme--current-tactical) main.vs-home .vs-hero__copy::before {
	--vs-hero-frame-line: color-mix(in srgb, var(--vs-theme-border-strong) 22%, transparent) !important;
	display: block !important;
	content: "" !important;
	border: 0 !important;
	background: var(--vs-hero-broken-frame) !important;
}

body[class*="vs-theme--"]:not(.vs-theme--current-tactical) main.vs-home .vs-hero__copy::after {
	--vs-hero-trim-horizontal: color-mix(in srgb, var(--vs-weathered-brass) 78%, transparent) !important;
	--vs-hero-trim-vertical: color-mix(in srgb, var(--vs-theme-border-strong) 60%, transparent) !important;
	display: block !important;
	content: "" !important;
	background: var(--vs-hero-corner-trim), repeating-linear-gradient(0deg, rgba(255, 255, 255, .018) 0 1px, transparent 1px 4px), linear-gradient(90deg, color-mix(in srgb, var(--vs-weathered-brass) 14%, transparent), transparent 25%, transparent 84%, color-mix(in srgb, var(--vs-weathered-brass) 7%, transparent)) !important;
}

@supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
	body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-hero__copy {
		background: linear-gradient(135deg, color-mix(in srgb, var(--vs-theme-overlay) 92%, #000), color-mix(in srgb, var(--vs-theme-surface) 86%, #000)) !important;
	}
}

@media (prefers-contrast: more) {
	body[class*="vs-theme--"]:not(.vs-theme--current-tactical) .vs-hero__copy {
		background: linear-gradient(135deg, color-mix(in srgb, var(--vs-theme-overlay) 95%, #000), color-mix(in srgb, var(--vs-theme-surface) 90%, #000)) !important;
		-webkit-backdrop-filter: none;
		backdrop-filter: none;
	}
}

@media (prefers-reduced-motion: reduce) {
	body.vs-theme--quantum-bloom :is(.vs-site-header, .vs-main-nav, .vs-library__intro, .vs-journey__hero, .vs-hero),
	body.vs-theme--ghost-signal :is(.vs-site-header, .vs-main-nav, .vs-library__intro, .vs-journey__hero, .vs-hero),
	body.vs-theme--grey-contrast-warfront :is(.vs-site-header, .vs-site-footer),
	body.vs-theme--grey-contrast-warfront :is(.vs-site-header, .vs-site-footer)::before,
	body.vs-theme--grey-contrast-warfront :is(.vs-site-header, .vs-site-footer)::after {
		animation: none;
	}
}
