/* AuroraLab NOVA - SENAITE visual skin, prototype 0.1.0 */

:root {
  color-scheme: dark;
  --nova-bg: #041615;
  --nova-bg-grid: rgba(76, 227, 164, 0.025);
  --nova-surface: #09201f;
  --nova-surface-raised: #0d2927;
  --nova-surface-hover: #12332f;
  --nova-border: #1d4641;
  --nova-border-strong: #2c625a;
  --nova-primary: #4ce3a4;
  --nova-primary-hover: #6aebba;
  --nova-cyan: #1bc4ca;
  --nova-text: #e7f4f2;
  --nova-text-soft: #bdd0cd;
  --nova-muted: #89a6a2;
  --nova-danger: #ff7373;
  --nova-warning: #f4cc67;
  --nova-info: #56cfe1;
  --nova-radius: 6px;
  --nova-shadow: 0 14px 32px rgba(0, 8, 8, 0.22);
  --nova-focus: 0 0 0 3px rgba(76, 227, 164, 0.24);
  --nova-font: "Inter", "Manrope", "Segoe UI", Arial, sans-serif;
}

html,
body {
  min-height: 100%;
  background-color: var(--nova-bg) !important;
  color: var(--nova-text);
  font-family: var(--nova-font);
  letter-spacing: 0;
}

body {
  background-image:
    linear-gradient(var(--nova-bg-grid) 1px, transparent 1px),
    linear-gradient(90deg, var(--nova-bg-grid) 1px, transparent 1px);
  background-size: 72px 72px;
}

body,
button,
input,
select,
textarea {
  font-family: var(--nova-font);
}

a {
  color: var(--nova-primary);
  transition: color 150ms ease, background-color 150ms ease,
    border-color 150ms ease, box-shadow 150ms ease;
}

a:hover,
a:focus {
  color: var(--nova-primary-hover);
}

::selection {
  background: var(--nova-primary);
  color: #031411;
}

/* Application shell */
#portal-top,
#portal-header,
#portal-globalnav,
.navbar,
.senaite-navbar,
.navbar-dark,
.bg-dark {
  background: #061918 !important;
  border-color: var(--nova-border) !important;
  color: var(--nova-text);
}

#portal-header,
.navbar,
.senaite-navbar {
  border-bottom: 1px solid var(--nova-border);
  box-shadow: 0 6px 24px rgba(0, 10, 9, 0.2);
}

#portal-logo,
.navbar-brand {
  color: var(--nova-text) !important;
  font-weight: 750;
}

#portal-globalnav a,
.navbar a,
.senaite-navbar a,
.nav-link {
  color: var(--nova-text-soft) !important;
}

#portal-globalnav a:hover,
#portal-globalnav .selected a,
.navbar a:hover,
.navbar .active > a,
.nav-link:hover,
.nav-link.active {
  background: rgba(76, 227, 164, 0.08) !important;
  color: var(--nova-primary) !important;
}

#portal-columns,
#portal-column-content,
#content,
#content-core,
.senaite-content,
main {
  color: var(--nova-text);
}

#portal-column-one,
#portal-column-two,
#sidebar,
.sidebar,
.senaite-sidebar {
  background: rgba(9, 32, 31, 0.94) !important;
  border-color: var(--nova-border) !important;
}

.sidebar a,
.senaite-sidebar a,
#portal-column-one a,
#portal-column-two a {
  color: var(--nova-text-soft);
}

.sidebar a:hover,
.sidebar .active > a,
.senaite-sidebar a:hover,
.senaite-sidebar .active > a {
  background: var(--nova-surface-hover) !important;
  color: var(--nova-primary) !important;
}

/* Titles, paths, and navigation */
h1,
h2,
h3,
h4,
h5,
h6,
.documentFirstHeading,
.documentDescription {
  color: var(--nova-text);
  letter-spacing: 0;
}

h1,
.documentFirstHeading {
  font-weight: 760;
}

.text-muted,
.form-text,
.help-block,
.fieldHelp,
small,
.small {
  color: var(--nova-muted) !important;
}

.breadcrumb,
#portal-breadcrumbs,
.pathbar {
  background: transparent !important;
  border-bottom: 1px solid var(--nova-border);
  color: var(--nova-muted);
}

.breadcrumb-item.active,
#portal-breadcrumbs .breadcrumbSeparator {
  color: var(--nova-muted);
}

.nav-tabs {
  border-bottom-color: var(--nova-border);
}

.nav-tabs .nav-link {
  border-color: transparent;
}

.nav-tabs .nav-link:hover {
  border-color: transparent transparent var(--nova-border-strong);
}

.nav-tabs .nav-link.active,
.nav-tabs .nav-item.show .nav-link {
  background: transparent;
  border-color: transparent transparent var(--nova-primary);
  color: var(--nova-primary) !important;
}

/* Work surfaces */
.card,
.panel,
.well,
.portlet,
.list-group-item,
.fieldset,
fieldset,
.formControls,
.actionMenuContent,
.popover,
.ui-widget-content {
  background-color: var(--nova-surface) !important;
  border-color: var(--nova-border) !important;
  color: var(--nova-text);
}

.card,
.panel,
.portlet,
.popover {
  border-radius: var(--nova-radius);
  box-shadow: var(--nova-shadow);
}

.card-header,
.card-footer,
.panel-heading,
.panel-footer,
.portletHeader,
.ui-widget-header {
  background: var(--nova-surface-raised) !important;
  border-color: var(--nova-border) !important;
  color: var(--nova-text) !important;
}

hr {
  border-color: var(--nova-border);
}

/* Tables and SENAITE listings */
.table,
table.listing,
.listing,
.bika-listing-table,
.senaite-listing-table {
  background: var(--nova-surface) !important;
  color: var(--nova-text);
}

.table th,
.table td,
table.listing th,
table.listing td,
.listing th,
.listing td,
.bika-listing-table th,
.bika-listing-table td,
.senaite-listing-table th,
.senaite-listing-table td {
  border-color: var(--nova-border) !important;
}

.table thead th,
table.listing thead th,
.listing thead th,
.bika-listing-table thead th,
.senaite-listing-table thead th {
  background: #0b2725 !important;
  color: var(--nova-text-soft) !important;
  font-size: 0.78rem;
  font-weight: 700;
  text-transform: uppercase;
}

.table-striped tbody tr:nth-of-type(odd),
table.listing tbody tr:nth-of-type(odd),
.listing tbody tr:nth-of-type(odd) {
  background: rgba(255, 255, 255, 0.018) !important;
}

.table-hover tbody tr:hover,
table.listing tbody tr:hover,
.listing tbody tr:hover,
.bika-listing-table tbody tr:hover,
.senaite-listing-table tbody tr:hover {
  background: var(--nova-surface-hover) !important;
  color: var(--nova-text);
}

tr.selected,
tr.active,
.table-active,
.listing .selected {
  background: rgba(76, 227, 164, 0.12) !important;
}

/* Forms and interactive controls */
label,
.form-label,
.field label {
  color: var(--nova-text-soft);
  font-weight: 600;
}

.form-control,
.form-select,
input[type="text"],
input[type="password"],
input[type="email"],
input[type="number"],
input[type="date"],
input[type="datetime-local"],
input[type="search"],
select,
textarea,
.select2-container .select2-choice,
.select2-container .select2-selection,
.chosen-container .chosen-single,
.chosen-container .chosen-choices {
  background-color: #071b1a !important;
  border: 1px solid var(--nova-border-strong) !important;
  border-radius: 4px;
  color: var(--nova-text) !important;
}

.form-control::placeholder,
input::placeholder,
textarea::placeholder {
  color: #718c88;
  opacity: 1;
}

.form-control:focus,
.form-select:focus,
input:focus,
select:focus,
textarea:focus,
.select2-container--focus .select2-selection,
.chosen-container-active .chosen-single,
.chosen-container-active .chosen-choices {
  background-color: #092320 !important;
  border-color: var(--nova-primary) !important;
  box-shadow: var(--nova-focus) !important;
  color: var(--nova-text) !important;
  outline: 0;
}

input:disabled,
select:disabled,
textarea:disabled,
.form-control:disabled,
.form-control[readonly] {
  background: #102421 !important;
  color: #728b87 !important;
  opacity: 0.76;
}

input[type="checkbox"],
input[type="radio"] {
  accent-color: var(--nova-primary);
}

.input-group-text {
  background: var(--nova-surface-raised);
  border-color: var(--nova-border-strong);
  color: var(--nova-text-soft);
}

/* Buttons */
.btn,
button,
input[type="button"],
input[type="submit"],
.standalone,
.context {
  border-radius: 5px;
  font-weight: 700;
  transition: color 150ms ease, background-color 150ms ease,
    border-color 150ms ease, box-shadow 150ms ease, transform 150ms ease;
}

.btn:hover,
button:hover,
input[type="button"]:hover,
input[type="submit"]:hover {
  transform: translateY(-1px);
}

.btn-primary,
.context,
input.context,
button.context {
  background: var(--nova-primary) !important;
  border-color: var(--nova-primary) !important;
  color: #031411 !important;
}

.btn-primary:hover,
.context:hover,
input.context:hover,
button.context:hover {
  background: var(--nova-primary-hover) !important;
  border-color: var(--nova-primary-hover) !important;
}

.btn-secondary,
.btn-light,
.standalone,
input.standalone,
button.standalone {
  background: transparent !important;
  border-color: var(--nova-border-strong) !important;
  color: var(--nova-text-soft) !important;
}

.btn-secondary:hover,
.btn-light:hover,
.standalone:hover {
  background: var(--nova-surface-hover) !important;
  border-color: var(--nova-primary) !important;
  color: var(--nova-text) !important;
}

.btn:focus,
button:focus,
a:focus-visible {
  box-shadow: var(--nova-focus) !important;
  outline: 0;
}

/* Menus, dialogs, and autocomplete */
.dropdown-menu,
.modal-content,
.select2-dropdown,
.chosen-drop,
.ui-menu,
.ui-datepicker,
.tooltip-inner {
  background: var(--nova-surface) !important;
  border-color: var(--nova-border) !important;
  color: var(--nova-text) !important;
  box-shadow: var(--nova-shadow);
}

.modal-header,
.modal-footer {
  border-color: var(--nova-border);
}

.modal-backdrop.show {
  opacity: 0.74;
}

.dropdown-item,
.select2-results__option,
.chosen-results li,
.ui-menu-item {
  color: var(--nova-text-soft) !important;
}

.dropdown-item:hover,
.dropdown-item:focus,
.dropdown-item.active,
.select2-results__option--highlighted,
.chosen-results li.highlighted,
.ui-menu-item:hover {
  background: var(--nova-surface-hover) !important;
  color: var(--nova-primary) !important;
}

/* Status and feedback */
.badge,
.label,
.state-published,
.state-verified,
.state-released {
  border-radius: 4px;
  font-weight: 700;
}

.badge-success,
.label-success,
.state-published,
.state-verified,
.state-released {
  background: rgba(76, 227, 164, 0.14) !important;
  color: var(--nova-primary) !important;
}

.badge-info,
.label-info,
.state-sampled,
.state-received {
  background: rgba(27, 196, 202, 0.14) !important;
  color: var(--nova-cyan) !important;
}

.badge-warning,
.label-warning,
.state-to_be_verified,
.state-to_be_sampled {
  background: rgba(244, 204, 103, 0.14) !important;
  color: var(--nova-warning) !important;
}

.badge-danger,
.label-danger,
.state-rejected,
.state-cancelled,
.state-invalid {
  background: rgba(255, 115, 115, 0.14) !important;
  color: var(--nova-danger) !important;
}

.alert,
.portalMessage {
  background: var(--nova-surface-raised) !important;
  border-color: var(--nova-border-strong) !important;
  color: var(--nova-text) !important;
}

.alert-success,
.portalMessage.info {
  border-left: 4px solid var(--nova-primary) !important;
}

.alert-warning,
.portalMessage.warning {
  border-left: 4px solid var(--nova-warning) !important;
}

.alert-danger,
.portalMessage.error {
  border-left: 4px solid var(--nova-danger) !important;
}

.progress {
  background: #061b1a;
}

.progress-bar,
.bg-success {
  background-color: var(--nova-primary) !important;
}

/* Footer and login */
#portal-footer-wrapper,
#portal-footer,
footer {
  background: #061918 !important;
  border-top: 1px solid var(--nova-border);
  color: var(--nova-muted);
}

body.template-login_form #content,
body.template-login #content,
.login-form,
.login-panel {
  background: var(--nova-surface) !important;
  border: 1px solid var(--nova-border);
  border-radius: var(--nova-radius);
  box-shadow: var(--nova-shadow);
}

/* Preserve legible paper output. */
@media print {
  :root {
    color-scheme: light;
  }

  html,
  body,
  #content,
  #content-core,
  .table,
  table.listing,
  .listing {
    background: #ffffff !important;
    background-image: none !important;
    color: #172321 !important;
  }

  a,
  h1,
  h2,
  h3,
  h4,
  h5,
  h6,
  th,
  td {
    color: #172321 !important;
  }

  #portal-header,
  #portal-footer-wrapper,
  .navbar,
  .sidebar,
  .senaite-sidebar {
    display: none !important;
  }
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    scroll-behavior: auto !important;
    transition-duration: 0.01ms !important;
  }
}


/* NOVA demo: improve control contrast */
@media screen {
  .btn-outline-secondary,
  .btn-outline-dark,
  .btn-outline-primary,
  .btn-default {
    background-color: var(--nova-surface) !important;
    border-color: var(--nova-border-strong) !important;
    color: var(--nova-text-soft) !important;
  }

  .btn-outline-secondary:hover,
  .btn-outline-dark:hover,
  .btn-outline-primary:hover,
  .btn-default:hover {
    background-color: var(--nova-surface-hover) !important;
    color: var(--nova-primary) !important;
  }

  .btn.active,
  .btn[aria-pressed="true"] {
    background-color: var(--nova-primary) !important;
    border-color: var(--nova-primary) !important;
    color: #031411 !important;
  }

  .input-group-text,
  .input-group-prepend .btn,
  .input-group-append .btn {
    background-color: var(--nova-surface-raised) !important;
    border-color: var(--nova-border-strong) !important;
    color: var(--nova-text-soft) !important;
  }
}

/* NOVA demo: sidebar controls and coloured navigation icons */
@media screen {
  #sidebar-header,
  #sidebar-header.active,
  #sidebarCollapse {
    background-color: var(--nova-surface) !important;
    border-color: var(--nova-border) !important;
    color: #7da7cc !important;
  }

  #sidebarCollapse .sidebar-toggle-icon,
  #sidebarCollapse .sidebar-toggle-icon::before {
    color: #7da7cc !important;
  }

  #sidebarCollapse:hover {
    background-color: var(--nova-surface-hover) !important;
  }

  /* Clients: blue */
  #sidebar a[href$="/clients"] img {
    filter: brightness(0) invert(75%) sepia(40%)
            saturate(900%) hue-rotate(170deg);
  }

  /* Samples: turquoise */
  #sidebar a[href$="/samples"] img {
    filter: brightness(0) invert(80%) sepia(50%)
            saturate(700%) hue-rotate(115deg);
  }

  /* Methods: violet */
  #sidebar a[href$="/methods"] img {
    filter: brightness(0) invert(75%) sepia(40%)
            saturate(900%) hue-rotate(220deg);
  }

  /* Batches: amber */
  #sidebar a[href$="/batches"] img {
    filter: brightness(0) invert(80%) sepia(80%)
            saturate(800%) hue-rotate(350deg);
  }

  /* Worksheets: green */
  #sidebar a[href$="/worksheets"] img {
    filter: brightness(0) invert(80%) sepia(50%)
            saturate(700%) hue-rotate(75deg);
  }
}

@media screen {
  #sidebarCollapse .sidebar-toggle-icon {
    display: inline-block !important;
    width: 16px !important;
    height: 12px !important;
    background: linear-gradient(
      to bottom,
      #7da7cc 0px, #7da7cc 2px,
      transparent 2px, transparent 5px,
      #7da7cc 5px, #7da7cc 7px,
      transparent 7px, transparent 10px,
      #7da7cc 10px, #7da7cc 12px
    ) !important;
  }

  #sidebarCollapse .sidebar-toggle-icon::before,
  #sidebarCollapse .sidebar-toggle-icon::after {
    content: none !important;
  }
}

/* Bright icons on the LIMS setup overview */
@media screen {
  body:has(a[href$="/setup/sampletypes"])
  img[src*="/assets/icons/"] {
    filter: brightness(0) invert(75%) sepia(40%)
            saturate(900%) hue-rotate(170deg);
  }
}

@media screen {
  body:has(a[href$="/setup/sampletypes"])
  img:not(#senaite-toolbar img):not(#sidebar img) {
    filter: brightness(0) invert(1) !important;
    opacity: 1 !important;
  }
}

/* NOVA: sample registration form */
@media screen {
  #analysisrequest_add_form .ar-table > tbody > tr > td {
    background-color: var(--nova-surface) !important;
    border-color: var(--nova-border) !important;
    color: var(--nova-text) !important;
  }

  #analysisrequest_add_form .ar-table td.field-label {
    background-color: var(--nova-surface-raised) !important;
  }

  #analysisrequest_add_form .ar-table .formQuestion {
    color: var(--nova-text) !important;
  }

  #analysisrequest_add_form .ar-table .text-primary {
    color: var(--nova-primary) !important;
  }

  #analysisrequest_add_form .ar-table .formHelp {
    color: var(--nova-text-soft) !important;
  }

  #analysisrequest_add_form .ar-table > tbody > tr:hover > td,
  #analysisrequest_add_form .ar-table > tbody > tr:focus-within > td {
    background-color: var(--nova-surface-hover) !important;
  }

  #ar-header > img {
    filter: brightness(0) invert(1);
  }
}
