/* DeadState RP – txAdmin theme (served by Apache, injected via mod_substitute)
 * Files: /var/www/deadstate-txtheme/ | Apache: /etc/apache2/deadstate-txtheme.conf
 * Disable: comment the "Include /etc/apache2/deadstate-txtheme.conf" line in the tx vhost + graceful reload. */

/* ============ palette (dark mode) ============ */
html.dark {
  --ds-red: 358 86% 47%;
  --ds-red-hi: 358 100% 62%;
  --ds-red-lo: 358 80% 34%;
  --background: 350 14% 3.6%;
  --foreground: 0 0% 96%;
  --card: 350 12% 6.8%;
  --card-foreground: 0 0% 96%;
  --popover: 350 14% 6%;
  --popover-foreground: 0 0% 96%;
  --primary: var(--ds-red);
  --primary-foreground: 0 0% 100%;
  --secondary: 350 9% 14%;
  --secondary-foreground: 0 0% 96%;
  --muted: 350 9% 10.5%;
  --muted-foreground: 350 6% 70%;
  --accent: var(--ds-red);
  --accent-foreground: 0 0% 100%;
  --border: 352 16% 15%;
  --input: 352 12% 18%;
  --ring: var(--ds-red);
  color-scheme: dark;
  background-color: #060405;
  background-image:
    radial-gradient(1100px 620px at 50% -12%, hsl(358 85% 32% / .38), transparent 62%),
    radial-gradient(900px 600px at 105% 105%, hsl(352 75% 22% / .30), transparent 60%),
    radial-gradient(700px 500px at -8% 90%, hsl(358 70% 18% / .22), transparent 60%),
    linear-gradient(180deg, #0b0607 0%, #050304 100%);
  background-attachment: fixed;
  scrollbar-color: hsl(358 55% 30%) transparent;
}
html.dark body { background: transparent !important; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; }
html.dark ::selection { background: hsl(var(--ds-red) / .45); color: #fff; }
html.dark ::-webkit-scrollbar { width: 10px; height: 10px; }
html.dark ::-webkit-scrollbar-track { background: transparent; }
html.dark ::-webkit-scrollbar-thumb { background: hsl(358 45% 24%); border-radius: 10px; border: 2px solid transparent; background-clip: padding-box; }
html.dark ::-webkit-scrollbar-thumb:hover { background: hsl(358 70% 38%); background-clip: padding-box; }
html.dark a:not([class]) { color: hsl(var(--ds-red-hi)); }

/* light mode: keep light, only red accents */
html:not(.dark) { --primary: 358 86% 44%; --primary-foreground: 0 0% 100%; --accent: 358 86% 46%; --accent-foreground: 0 0% 100%; --ring: 358 86% 46%; }

/* ============ background spotlight (mouse follow) ============ */
#ds-spot, #ds-spot-top { position: fixed; left: 0; top: 0; width: 900px; height: 900px; margin: -450px 0 0 -450px; border-radius: 50%; pointer-events: none; will-change: transform; transform: translate3d(50vw, 30vh, 0); }
#ds-spot { z-index: -1; background: radial-gradient(circle, hsl(358 92% 46% / .22) 0%, hsl(358 92% 40% / .08) 32%, transparent 62%); }
#ds-spot-top { z-index: 2147483000; width: 520px; height: 520px; margin: -260px 0 0 -260px; mix-blend-mode: screen; background: radial-gradient(circle, hsl(358 95% 50% / .07), transparent 65%); }
html:not(.dark) #ds-spot, html:not(.dark) #ds-spot-top { display: none; }
#ds-spot.ds-static, #ds-spot-top.ds-static { transform: translate3d(50vw, 20vh, 0); }

/* ============ glass surfaces ============ */
html.dark .tx-sidebar,
html.dark .rounded-lg.border.shadow-sm,
html.dark .rounded-xl.border {
  background-color: hsl(350 14% 7% / .62);
  -webkit-backdrop-filter: blur(14px) saturate(140%); backdrop-filter: blur(14px) saturate(140%);
  border-color: hsl(355 30% 100% / .07);
  box-shadow: 0 1px 0 0 hsl(0 0% 100% / .04) inset, 0 12px 40px -12px rgb(0 0 0 / .65);
  transition: border-color .25s ease, box-shadow .25s ease;
}
html.dark .rounded-lg.border.shadow-sm:hover,
html.dark .rounded-xl.border:hover { border-color: hsl(358 70% 50% / .28); box-shadow: 0 1px 0 0 hsl(0 0% 100% / .05) inset, 0 16px 50px -14px hsl(358 90% 30% / .45); }
html.dark [role="dialog"], html.dark [role="menu"], html.dark [data-radix-popper-content-wrapper] > * {
  border-color: hsl(358 40% 50% / .18);
  box-shadow: 0 24px 70px -20px rgb(0 0 0 / .85), 0 0 0 1px hsl(358 70% 40% / .10);
}

/* mouse-following border glow (class set by JS) */
html.dark .ds-glow::after {
  content: ""; position: absolute; inset: 0; border-radius: inherit; padding: 1.5px; pointer-events: none; z-index: 1;
  background: radial-gradient(340px circle at var(--gx, 50%) var(--gy, 50%), hsl(358 100% 66%), hsl(358 95% 50% / .55) 35%, transparent 70%);
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite: xor;
          mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0);
  opacity: 0; transition: opacity .3s ease;
}
html.dark .ds-glow.ds-hot::after { opacity: 1; }
html.dark .ds-glow::before { content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none; z-index: 0; opacity: 0; transition: opacity .3s ease; background: radial-gradient(420px circle at var(--gx, 50%) var(--gy, 50%), hsl(358 95% 50% / .09), transparent 60%); }
html.dark .ds-glow.ds-hot::before { opacity: 1; }

/* ============ buttons / inputs / nav ============ */
html.dark button, html.dark a, html.dark input, html.dark [role="menuitem"] { transition: background-color .18s ease, border-color .18s ease, color .18s ease, box-shadow .2s ease, transform .15s ease; }
html.dark button.bg-primary, html.dark a.bg-primary {
  background-image: linear-gradient(180deg, hsl(358 90% 52%), hsl(358 86% 42%));
  box-shadow: 0 0 0 1px hsl(358 90% 60% / .35) inset, 0 8px 22px -8px hsl(358 95% 45% / .75);
}
html.dark button.bg-primary:hover, html.dark a.bg-primary:hover { filter: brightness(1.08); box-shadow: 0 0 0 1px hsl(358 100% 70% / .45) inset, 0 10px 30px -8px hsl(358 100% 50% / .9); }
html.dark button.ds-hot:not(:disabled) { background-image: radial-gradient(120px circle at var(--gx, 50%) var(--gy, 50%), hsl(0 0% 100% / .14), transparent 65%); }
html.dark button.bg-primary.ds-hot:not(:disabled) { background-image: radial-gradient(120px circle at var(--gx, 50%) var(--gy, 50%), hsl(0 0% 100% / .22), transparent 65%), linear-gradient(180deg, hsl(358 90% 52%), hsl(358 86% 42%)); }
html.dark button:active:not(:disabled) { transform: translateY(1px); }
html.dark input:focus-visible, html.dark textarea:focus-visible { border-color: hsl(var(--ds-red) / .8); box-shadow: 0 0 0 3px hsl(var(--ds-red) / .22); }
html.dark .tx-sidebar { border-radius: .9rem; }
html.dark .tx-sidebar a:hover, html.dark .tx-sidebar button:hover { background-color: hsl(358 70% 45% / .12); color: #fff; }
html.dark .tx-sidebar .bg-secondary, html.dark .tx-sidebar [aria-current="page"], html.dark .tx-sidebar [data-active="true"] {
  background: linear-gradient(90deg, hsl(358 85% 45% / .30), hsl(358 85% 45% / .06)) !important; color: #fff !important;
  box-shadow: inset 2px 0 0 hsl(var(--ds-red-hi));
}

/* ============ login page ============ */
html.dark .pattern-dots {
  background-image: radial-gradient(circle, hsl(358 40% 60% / .10) 1px, transparent 1.2px) !important;
  background-size: 26px 26px !important;
  position: relative;
}
html.dark .pattern-dots::before { /* vignette + center glow */
  content: ""; position: fixed; inset: 0; pointer-events: none; z-index: -1;
  background:
    radial-gradient(600px 380px at 50% 42%, hsl(358 90% 38% / .30), transparent 70%),
    radial-gradient(ellipse at center, transparent 45%, rgb(0 0 0 / .75) 100%);
}
html.dark .pattern-dots > div > svg:first-child { display: none; }
html.dark .pattern-dots > div::before {
  content: ""; display: block; margin: 0 auto; width: min(300px, 70vw); aspect-ratio: 720 / 253;
  background: url("/deadstate-theme/logo.png") center / contain no-repeat;
  filter: drop-shadow(0 6px 26px hsl(358 100% 45% / .55));
  animation: ds-float 6s ease-in-out infinite;
}
html.dark .pattern-dots > div::after {
  content: "ADMIN  PANEL"; display: block; text-align: center; margin-top: .6rem; padding-left: .5em;
  font-size: .72rem; letter-spacing: .5em; font-weight: 600; color: hsl(358 30% 78% / .75);
}
html.dark .pattern-dots > div > div.border:first-of-type {
  order: 0; margin-top: 2rem !important; border-radius: 1rem !important; overflow: hidden;
  background: linear-gradient(160deg, hsl(350 16% 10% / .72), hsl(350 18% 5% / .72)) !important;
  -webkit-backdrop-filter: blur(18px) saturate(150%); backdrop-filter: blur(18px) saturate(150%);
  border: 1px solid hsl(358 60% 60% / .16) !important;
  box-shadow: 0 0 0 1px hsl(0 0% 100% / .03) inset, 0 30px 80px -20px rgb(0 0 0 / .9), 0 0 60px -10px hsl(358 95% 40% / .35) !important;
}
html.dark .pattern-dots form > div:last-child { background: transparent !important; border-top-color: hsl(358 50% 60% / .12) !important; }
html.dark .pattern-dots form input { background: hsl(350 20% 3% / .6) !important; border-color: hsl(358 30% 60% / .16); border-radius: .65rem; height: 2.75rem; }
html.dark .pattern-dots form input::placeholder { color: hsl(350 8% 70%); opacity: .55; }
html.dark .pattern-dots form button { height: 2.75rem; border-radius: .65rem; font-weight: 600; letter-spacing: .02em; }
html.dark .pattern-dots form button:not(.cfxrebtn) {
  border: 0 !important; color: #fff !important;
  background-color: hsl(358 86% 46%);
  background-image: linear-gradient(180deg, hsl(358 92% 53%), hsl(358 86% 41%));
  box-shadow: 0 0 0 1px hsl(358 100% 70% / .35) inset, 0 10px 30px -10px hsl(358 100% 48% / .9);
}
html.dark .pattern-dots form button:not(.cfxrebtn):hover { filter: brightness(1.1); box-shadow: 0 0 0 1px hsl(358 100% 75% / .5) inset, 0 14px 40px -10px hsl(358 100% 50% / 1); }
html.dark .pattern-dots form button:not(.cfxrebtn).ds-hot { background-image: radial-gradient(140px circle at var(--gx, 50%) var(--gy, 50%), hsl(0 0% 100% / .25), transparent 65%), linear-gradient(180deg, hsl(358 92% 53%), hsl(358 86% 41%)); }
html.dark .pattern-dots form .cfxrebtn { background-color: hsl(350 20% 4% / .55) !important; border: 1px solid hsl(358 70% 55% / .45) !important; color: hsl(0 0% 94%) !important; box-shadow: none !important; }
html.dark .pattern-dots form .cfxrebtn:hover { border-color: hsl(358 95% 60%) !important; background-color: hsl(358 80% 40% / .18) !important; }
html.dark .pattern-dots a[href^="http"].w-48 { opacity: .55 !important; filter: grayscale(.55) brightness(.9) !important; transition: opacity .25s, filter .25s; }
html.dark .pattern-dots a[href^="http"].w-48:hover { opacity: 1 !important; filter: none !important; }
html.dark .pattern-dots a[href^="http"].w-48 > .absolute.inset-0 { background-image: linear-gradient(90deg, hsl(358 95% 50%), hsl(10 95% 55%)) !important; }
html.dark .pattern-dots > div { display: flex; flex-direction: column; }
html.dark .pattern-dots > div::before { order: -2; }
html.dark .pattern-dots > div::after { order: -1; }
html.dark .pattern-dots > div > div.border:first-of-type { margin-top: 1.4rem !important; }
@keyframes ds-float { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-5px); } }

@media (prefers-reduced-motion: reduce) {
  html.dark .pattern-dots > div::before { animation: none; }
  html.dark *, html.dark *::after { transition-duration: 0s !important; }
}

/* ============ legacy CoreUI pages (iframes) ============ */
body.c-app a:not(.btn):not(.nav-link):not(.dropdown-item) { color: #ff4a3d; }
body.c-app .btn-primary, body.c-app .bg-primary, body.c-app .badge-primary, body.c-app .progress-bar,
body.c-app .page-item.active .page-link, body.c-app .nav-tabs .nav-link.active, body.c-app .nav-pills .nav-link.active { background-color: #e10600 !important; border-color: #e10600 !important; color: #fff !important; }
body.c-app .btn-primary:hover, body.c-app .btn-primary:focus { background-color: #b80500 !important; border-color: #b80500 !important; }
body.c-app .btn-outline-primary { color: #ff4a3d !important; border-color: #e10600 !important; }
body.c-app .btn-outline-primary:hover { background-color: #e10600 !important; color: #fff !important; }
body.c-app .text-primary { color: #ff4a3d !important; }
body.c-app .border-primary { border-color: #e10600 !important; }
body.c-app .form-control:focus, body.c-app .custom-select:focus { border-color: #e10600 !important; box-shadow: 0 0 0 .2rem rgba(225,6,0,.3) !important; }

/* ============ legacy pages: dark backgrounds (shared header.ejs wrappers) ============ */
html:has(body.c-app.theme--dark), body.c-app.theme--dark, body.c-app.theme--dark .c-wrapper, body.c-app.theme--dark .c-body, body.c-app.theme--dark .c-main, body.c-app.theme--dark .container-fluid, body.c-app.theme--dark main { background-color: #060405 !important; }
body.c-app.theme--dark .card, body.c-app.theme--dark .modal-content, body.c-app.theme--dark .list-group-item, body.c-app.theme--dark .dropdown-menu { background-color: #120b0d !important; border-color: rgba(225,6,0,.18) !important; color: #e8e2e3; }
body.c-app.theme--dark .card-header, body.c-app.theme--dark .card-footer, body.c-app.theme--dark .modal-header, body.c-app.theme--dark .modal-footer { background-color: #170d10 !important; border-color: rgba(225,6,0,.18) !important; }
body.c-app.theme--dark .table, body.c-app.theme--dark .table td, body.c-app.theme--dark .table th { color: #e8e2e3; border-color: rgba(255,255,255,.08) !important; }
body.c-app.theme--dark .form-control, body.c-app.theme--dark .custom-select { background-color: #0b0708 !important; color: #eee !important; border-color: rgba(225,6,0,.25) !important; }

/* ============ DeadState header logo (replaces txAdmin LogoFullSquareGreen / LogoSquareGreen) ============ */
header a[href="/"]:has(> svg:only-child) { display: inline-block; background: url("/deadstate-theme/logo-header.png?v=6") center / contain no-repeat; }
header a[href="/"]:has(> svg:only-child) > svg { visibility: hidden; }
header a[href="/"]:has(> svg.h-9:only-child) > svg.h-9 { width: 6.4rem; }
