/* Shared visual system: graphite surfaces, ice-blue accents, quiet orbital detail. */
:root,[data-bs-theme="dark"] {
  color-scheme:dark;
  --bs-body-bg:#0b1017; --bs-body-color:#dce5ef;
  --bs-secondary-color:#98a9bc; --bs-tertiary-color:#8294a9;
  --bs-border-color:#273343; --bs-secondary-bg:#17212e;
  --bs-tertiary-bg:#121c28; --bs-primary:#75d9ec; --bs-primary-rgb:117,217,236;
  --bs-link-color:#8cdeef; --bs-link-hover-color:#c6f4ff;
  --bs-emphasis-color:#f1f6fc; --bs-emphasis-color-rgb:241,246,252;
  --bs-body-font-family:"Segoe UI","Microsoft YaHei",system-ui,sans-serif;
}
body { min-height:100vh; font-size:14px; background:radial-gradient(ellipse at 85% 0,rgba(53,106,139,.13),transparent 48%),#0b1017; line-height:1.65; }
a { text-decoration:none; }
.navbar.bg-primary { background:rgba(12,19,28,.97)!important; border-bottom:1px solid #293848; box-shadow:0 8px 32px #0002; padding:16px 20px; }
.navbar-brand { display:flex; gap:12px; align-items:center; font-size:16px; font-weight:600; letter-spacing:.05em; margin-right:28px; }
.navbar-brand small { display:block; color:#8197ad; font:9px/1.8 "Segoe UI",sans-serif; letter-spacing:.21em; }
.brand-orbit { width:32px; height:32px; border:1px solid #75d9ec; border-radius:50%; position:relative; transform:rotate(-30deg); }
.brand-orbit:before { content:""; position:absolute; inset:9px -6px; border:1px solid #527c95; border-radius:50%; }
.brand-orbit:after { content:""; position:absolute; width:5px; height:5px; background:#a6efff; border-radius:50%; top:4px; right:1px; box-shadow:0 0 12px #75d9ec80; }
.navbar .nav-link { font-size:13px; color:#a0b1c4; border-radius:7px; padding:9px 10px!important; white-space:nowrap; transition:color .15s,background .15s; }
.navbar .nav-link:hover { color:#edfaff; background:#1a2a39; }
.navbar .nav-link.active { color:#a0eaf6; background:#17303b; box-shadow:inset 0 -2px #75d9ec; }
.navbar .nav-link i { margin-right:3px; }
.lab-main { max-width:1680px; padding:26px 34px 48px!important; }
.workspace-caption { display:flex; justify-content:space-between; margin:0 0 28px; color:#8699ad; font-size:11px; letter-spacing:.15em; }
.workspace-caption span:last-child { color:#91c5cf; }
h4 { font-size:23px; font-weight:600; letter-spacing:.025em; color:#eff5fc; }
h4 .bi { color:#8ed4e5; font-size:20px; margin-right:6px; }
.lab-main > .d-flex.mb-3,.lab-main > h4.mb-3 { margin-bottom:25px!important; }
.card { --bs-card-bg:#111b27; --bs-card-border-color:#263545; border:1px solid #263545; border-radius:12px; box-shadow:0 8px 28px #00000018; }
.card-header { background:#263d52; border-bottom:1px solid #48647c; padding:14px 20px; font-weight:600; color:#edf5fc; }
.card-body { padding:21px; }
.card-header:first-child { border-radius:11px 11px 0 0; }
.card-footer { background:#111b27; border-top-color:#273646; }
.stat-card { background:linear-gradient(125deg,#172735,#111b27 75%); transition:border-color .2s,transform .2s; }
.stat-card:hover { border-color:#528194; transform:translateY(-2px); }
.stat-card .card-body { text-align:left!important; padding:25px; position:relative; }
.stat-card .card-body > .bi { position:absolute; right:22px; top:24px; opacity:.65; }
.stat-card h3 { font-size:35px; font-weight:500; letter-spacing:-.04em; font-variant-numeric:tabular-nums; }
.stat-card small { font-size:12px; }
.table { --bs-table-bg:transparent; --bs-table-color:#d3dfeb; --bs-table-border-color:#223141; --bs-table-hover-bg:#1b2d3b; --bs-table-hover-color:#f0f8ff; --bs-table-striped-bg:#142130; --bs-table-striped-color:#d3dfeb; font-size:13px; margin-bottom:0; }
.table > :not(caption) > * > * { padding:14px 17px; vertical-align:middle; }
.table th { background:#172331; color:#9db0c3; font-weight:500; font-size:12px; white-space:nowrap; }
.table td { font-variant-numeric:tabular-nums; }
.table-responsive { border-radius:11px; }
.reagent-inventory-table .reagent-name-column { min-width:160px; max-width:220px; width:190px; white-space:normal; overflow-wrap:anywhere; }
.reagent-portion-form { display:flex; align-items:center; gap:5px; min-width:130px; }
.reagent-portion-form .form-control { min-width:82px; width:90px; min-height:32px; padding:4px 7px; }
.reagent-portion-form .btn { flex:none; }
.reagent-portion-value { color:#d3dfeb; white-space:nowrap; }
.table-light { --bs-table-bg:#182635; --bs-table-color:#dce5ef; }
.form-control,.form-select,.input-group-text { background-color:#0d1722; border-color:#304154; color:#dce5ef; border-radius:7px; min-height:39px; font-size:13px; }
.form-control::placeholder { color:#7e91a6; }
.form-control:focus,.form-select:focus { background-color:#101c28; border-color:#78cfe1; color:#eef9ff; box-shadow:0 0 0 3px #75d9ec18; }
.form-control:disabled { background:#202b36; color:#98a9bc; }
.form-label { font-size:13px; color:#b6c6d7; margin-bottom:8px; }
.form-check-input { border-color:#526477; }
.form-check-input:checked { background-color:#35889c; border-color:#79cddd; }
.btn { border-radius:7px; font-size:13px; font-weight:500; padding:8px 15px; transition:background .15s,border-color .15s,box-shadow .15s; }
.btn-sm { padding:5px 10px; font-size:12px; }
.btn-primary,.login-btn { --bs-btn-color:#071820; --bs-btn-bg:#87ddec; --bs-btn-border-color:#87ddec; --bs-btn-hover-color:#071820; --bs-btn-hover-bg:#aff0fb; --bs-btn-hover-border-color:#aff0fb; --bs-btn-active-bg:#6cc6d6; --bs-btn-active-color:#071820; }
.btn-outline-primary { --bs-btn-color:#91dcec; --bs-btn-border-color:#3e6b7b; --bs-btn-hover-bg:#244b59; --bs-btn-hover-border-color:#79bbce; --bs-btn-hover-color:#d8f8ff; }
.btn-outline-secondary { --bs-btn-color:#b4c3d3; --bs-btn-border-color:#445467; --bs-btn-hover-bg:#2a3b4b; }
.btn:focus-visible,a:focus-visible { outline:2px solid #a2eafa; outline-offset:3px; }
.badge { padding:6px 9px; font-weight:500; border-radius:5px; letter-spacing:.025em; }
.presence-status { display:inline-flex; align-items:center; gap:8px; color:#8b9bab; white-space:nowrap; font-size:12px; }
.presence-dot { width:7px; height:7px; border-radius:50%; background:#607184; }
.presence-status.is-online { color:#9edfc8; }
.presence-status.is-online .presence-dot { background:#6bdbb4; box-shadow:0 0 0 3px #6bdbb41f; }
.badge.bg-primary { background:#254c60!important; color:#b9edff; }
.badge.bg-success { background:#1d4a3d!important; color:#a2e5c9; }
.badge.bg-danger,.badge-expired { background:#542b37!important; color:#ffc0cb; }
.badge.bg-secondary { background:#2b3b4c!important; color:#c3d0de; }
.badge.bg-warning,.badge-low,.badge-expiring { background:#57452a!important; color:#ffe0a1!important; }
.bg-light,.bg-white { background-color:#172431!important; color:#dce5ef; }
.text-dark { color:#dce5ef!important; }
.badge.bg-info.text-dark { color:#10202b!important; }
.badge.bg-warning.text-dark { color:#ffe0a1!important; }
.list-group { --bs-list-group-bg:transparent; --bs-list-group-border-color:#273646; --bs-list-group-color:#d3dfeb; }
.list-group-item { padding:13px 18px; }
.dropdown-menu { --bs-dropdown-bg:#172332; --bs-dropdown-border-color:#34465a; --bs-dropdown-link-color:#d3dfeb; --bs-dropdown-link-hover-bg:#233b4b; padding:7px; box-shadow:0 15px 45px #0005; }
.dropdown-item { border-radius:5px; font-size:13px; padding:9px 13px; }
.modal-content { background:#131f2c; border:1px solid #3b5064; border-radius:13px; box-shadow:0 30px 100px #0008; }
.modal-header,.modal-footer { border-color:#2a3b4b; padding:18px 22px; }
.modal-body { padding:22px; }
.pagination { --bs-pagination-bg:#131f2c; --bs-pagination-color:#a4c9dc; --bs-pagination-border-color:#304356; --bs-pagination-active-bg:#2d6174; --bs-pagination-active-border-color:#52899d; --bs-pagination-hover-bg:#223b4c; --bs-pagination-hover-color:#fff; --bs-pagination-disabled-bg:#101a25; }
.nav-tabs { --bs-nav-tabs-border-color:#304356; --bs-nav-tabs-link-active-bg:#172c3b; --bs-nav-tabs-link-active-color:#a0e7f5; --bs-nav-tabs-link-active-border-color:#304356; }
.alert { border-radius:9px; font-size:13px; }
.lab-auth { background:#070e1a url('deep-space-login-v1.png') center center / cover no-repeat fixed!important; overflow:auto!important; }
.lab-auth:after { content:""; position:fixed; inset:0; pointer-events:none; background:linear-gradient(90deg,#040a14a8 0%,#07101e4d 46%,#07101e80 100%),linear-gradient(0deg,#03081575,transparent 42%); }
.lab-auth .lab-main { max-width:none; padding:24px!important; }
.lab-auth .stars,.lab-auth .stars2,.lab-auth .stars3,.lab-auth .sun,.lab-auth .shooting-star,.lab-auth .orbit { display:none; }
.lab-auth:before { display:none; }
.login-wrapper { min-height:calc(100svh - 48px); padding:25px 0; display:flex; align-items:center; justify-content:center; }
.lab-auth .login-wrapper { position:relative; z-index:1; }
.login-card { width:680px; max-width:100%; background:rgba(6,15,29,.30); backdrop-filter:blur(4px); -webkit-backdrop-filter:blur(4px); border:1px solid #a9d9f037; border-radius:18px; padding:46px 50px; box-shadow:0 20px 70px #0106105c,inset 0 1px #d9efff16; }
.login-icon { display:none; }
.login-title { text-align:center; white-space:nowrap; font-size:clamp(19px,3vw,34px); font-weight:700; line-height:1.35; letter-spacing:.07em; color:#effaff; text-shadow:0 0 24px #5db7ee7d,0 2px 20px #0009; margin:0 0 10px; }
.login-subtitle,.login-hint,.login-link { color:#9bafc3; }
.login-subtitle { text-align:center; font-size:13px; letter-spacing:.3em; margin-bottom:34px; color:#a9cbe2; }
.login-hint,.login-link { text-align:center; font-size:12px; }
.login-card .input-group { position:relative; }
.login-card .input-icon { position:absolute; left:15px; top:50%; transform:translateY(-50%); z-index:5; color:#92a7bc; }
.login-input { background:#0c1722!important; border-color:#35495c!important; color:#f0f7ff!important; padding:11px 14px 11px 44px!important; }
.login-input:focus { border-color:#8addf0!important; box-shadow:0 0 0 3px #75d9ec20!important; }
.login-btn { background:#87ddec; color:#071820; box-shadow:none; letter-spacing:.12em; }
.login-btn:hover { background:#aff0fb; color:#071820; box-shadow:0 5px 20px #75d9ec18; transform:none; }
@media(min-width:992px) and (max-width:1399px) { .navbar > .container-fluid { flex-wrap:wrap; } .navbar-brand { margin-bottom:10px; } .navbar-collapse { flex-basis:100%!important; } }
@media(max-width:767px) { .navbar.bg-primary { padding:12px; } .lab-main { padding:20px 14px 32px!important; } .workspace-caption { font-size:10px; letter-spacing:0; margin-bottom:20px; gap:12px; } .lab-main > .d-flex { flex-wrap:wrap; gap:14px; } h4 { font-size:20px; } .table > :not(caption) > * > * { padding:12px; } .login-card { padding:30px 23px; } .stat-card .card-body { padding:18px; } }
@media(prefers-reduced-motion:reduce) { *,*:before,*:after { animation:none!important; transition:none!important; scroll-behavior:auto!important; } }
@media print { body,.card,.table,.table th { background:white!important; color:black!important; } .navbar,.workspace-caption,.btn { display:none!important; } .lab-main { padding:0!important; } }

/* User-selectable bright workspace theme. */
[data-bs-theme="light"] {
  color-scheme:light;
  --bs-body-bg:#f3f6fa; --bs-body-color:#243447;
  --bs-secondary-color:#64748b; --bs-tertiary-color:#718096;
  --bs-border-color:#d7e0ea; --bs-secondary-bg:#e9eff5;
  --bs-tertiary-bg:#f6f8fb; --bs-primary:#167b96; --bs-primary-rgb:22,123,150;
  --bs-link-color:#126b8b; --bs-link-hover-color:#0b4f6a;
  --bs-emphasis-color:#132238; --bs-emphasis-color-rgb:19,34,56;
}
body.theme-light { background:radial-gradient(ellipse at 85% 0,rgba(83,163,190,.10),transparent 48%),#f3f6fa; color:#243447; }
.theme-light .navbar.bg-primary { background:rgba(255,255,255,.97)!important; border-bottom-color:#d8e1ea; box-shadow:0 5px 20px #20334a12; }
.theme-light .navbar-brand,.theme-light .navbar .nav-link { color:#33465c; }
.theme-light .navbar-brand small { color:#718096; }
.theme-light .brand-orbit { border-color:#1682a0; }
.theme-light .brand-orbit:before { border-color:#79aebb; }
.theme-light .brand-orbit:after { background:#1682a0; box-shadow:0 0 12px #1682a055; }
.theme-light .navbar .nav-link:hover { color:#123a52; background:#eaf2f6; }
.theme-light .navbar .nav-link.active { color:#0d6179; background:#e3f2f6; box-shadow:inset 0 -2px #1682a0; }
.theme-light .navbar .navbar-toggler { border-color:#cbd7e2; }
.theme-light .navbar .navbar-toggler-icon { filter:brightness(.35); }
.theme-light .workspace-caption { color:#687b90; }
.theme-light .workspace-caption span:last-child { color:#35758a; }
.theme-light h4 { color:#203247; }
.theme-light h4 .bi { color:#277f96; }
.theme-light .card { --bs-card-bg:#fff; --bs-card-border-color:#dce4ed; background:#fff; border-color:#dce4ed; box-shadow:0 5px 20px #26384b0b; }
.theme-light .card-header { background:#cdddea; border-bottom-color:#9db5ca; color:#20354b; }
.theme-light .card-footer { background:#f8fafc; border-top-color:#dce4ed; }
.theme-light .table { --bs-table-color:#304258; --bs-table-border-color:#e1e7ee; --bs-table-hover-bg:#edf5f8; --bs-table-hover-color:#1d344b; --bs-table-striped-bg:#f5f8fb; --bs-table-striped-color:#304258; }
.theme-light .table th { background:#edf2f7; color:#52657b; }
.theme-light .table-light { --bs-table-bg:#f3f6f9; --bs-table-color:#304258; }
.theme-light .form-control,.theme-light .form-select,.theme-light .input-group-text { background-color:#fff; border-color:#cbd6e2; color:#26384d; }
.theme-light .form-control::placeholder { color:#8391a2; }
.theme-light .form-control:focus,.theme-light .form-select:focus { background-color:#fff; border-color:#1682a0; color:#203247; box-shadow:0 0 0 3px #1682a018; }
.theme-light .form-control:disabled { background:#edf1f5; color:#687b90; }
.theme-light .dropdown-menu { --bs-dropdown-bg:#fff; --bs-dropdown-color:#304258; --bs-dropdown-link-color:#304258; --bs-dropdown-link-hover-bg:#edf4f7; --bs-dropdown-border-color:#dce4ed; box-shadow:0 8px 24px #1c2d4018; }
.theme-light .alert { --bs-alert-color:#33465c; }
.theme-light .text-muted { color:#687b90!important; }
.theme-light .btn-outline-secondary { --bs-btn-color:#53677d; --bs-btn-border-color:#b8c6d4; --bs-btn-hover-bg:#e8eef3; --bs-btn-hover-color:#26384d; --bs-btn-hover-border-color:#a5b5c5; }
.theme-light .modal-content { background:#fff; color:#26384d; border-color:#dce4ed; }
.theme-light .modal-header,.theme-light .modal-footer { border-color:#dce4ed; }
.theme-light .pagination { --bs-pagination-bg:#fff; --bs-pagination-color:#28526b; --bs-pagination-border-color:#d4dee8; --bs-pagination-hover-bg:#eef4f7; --bs-pagination-hover-color:#173d55; --bs-pagination-disabled-bg:#f3f6f9; }

/* Compact workspace layout; paper records retain their own print sizing. */
@media screen {
  .lab-workspace { line-height:1.45; }
  .lab-workspace .navbar.bg-primary { padding:8px 16px; }
  .lab-workspace .navbar .nav-link { padding:6px 8px!important; }
  .lab-workspace .navbar-brand { gap:9px; margin-right:20px; }
  .lab-workspace .lab-main { padding:16px 24px 28px!important; }
  .lab-workspace .workspace-caption { margin-bottom:14px; }
  .lab-workspace h4 { font-size:21px; }
  .lab-workspace .lab-main > .d-flex.mb-3,
  .lab-workspace .lab-main > h4.mb-3 { margin-bottom:14px!important; }
  .lab-workspace .lab-main > .mb-4,
  .lab-workspace .lab-main > .row.mb-4 { margin-bottom:16px!important; }
  .lab-workspace .card { border-radius:7px; box-shadow:none; }
  .lab-workspace .card-header { padding:8px 12px; }
  .lab-workspace .card-header:first-child { border-radius:6px 6px 0 0; }
  .lab-workspace .card-body { padding:12px; }
  .lab-workspace .card-body.py-3 { padding-top:10px!important; padding-bottom:10px!important; }
  .lab-workspace .card-footer { padding:8px 12px; }
  .lab-workspace .stat-card .card-body { padding:15px; }
  .lab-workspace .stat-card .card-body > .bi { right:15px; top:15px; }
  .lab-workspace .stat-card h3 { font-size:28px; margin-bottom:4px; }
  .lab-workspace .table > :not(caption) > * > * { padding:3px 10px; height:32px; line-height:1.35; vertical-align:middle; }
  .lab-workspace .table:not(.table-borderless) > :not(caption) > * > * { border:1px solid var(--bs-table-border-color); }
  .lab-workspace .table th { font-weight:600; }
  .lab-workspace .table-hover tbody tr:nth-child(even) { background-color:var(--bs-table-striped-bg); }
  .lab-workspace .table-responsive { border-radius:6px; }
  .lab-workspace .table .btn-sm { padding:2px 6px; min-height:24px; border-radius:4px; line-height:1.35; }
  .lab-workspace .table .badge { padding:3px 6px; font-size:12px!important; line-height:1.2; }
  .lab-workspace .btn { padding:5px 10px; border-radius:5px; line-height:1.45; }
  .lab-workspace .btn-sm { padding:3px 7px; }
  .lab-workspace .form-control,
  .lab-workspace .form-select,
  .lab-workspace .input-group-text { min-height:32px; padding-top:4px; padding-bottom:4px; border-radius:5px; }
  .lab-workspace textarea.form-control { min-height:80px; }
  .lab-workspace .form-label { margin-bottom:4px; }
  .lab-workspace .badge { padding:4px 7px; border-radius:4px; }
  .lab-workspace .list-group-item { padding:7px 12px; }
  .lab-workspace .dropdown-item { padding:6px 10px; }
  .lab-workspace .nav-tabs .nav-link { padding:6px 12px; }
  .lab-workspace .alert { padding:9px 12px; border-radius:6px; }
  .lab-workspace .alert-dismissible { padding-right:40px; }
  .lab-workspace .alert-dismissible .btn-close { padding:12px; }
  .lab-workspace .modal-header,
  .lab-workspace .modal-footer { padding:10px 14px; }
  .lab-workspace .modal-body { padding:14px; }
  .lab-workspace .page-link { padding:5px 10px; }
}
@media screen and (max-width:767px) {
  .lab-workspace .lab-main { padding:12px 10px 24px!important; }
  .lab-workspace .navbar.bg-primary { padding:8px 10px; }
  .lab-workspace .workspace-caption { margin-bottom:12px; }
  .lab-workspace .lab-main > .d-flex { gap:8px; }
  .lab-workspace .table > :not(caption) > * > * { padding:4px 8px; }
  .lab-workspace .table .btn-sm { min-height:32px; min-width:32px; }
  .lab-workspace .form-control,
  .lab-workspace .form-select { min-height:36px; }
}
/* Static login success meme. */
.login-meme[hidden] { display: none; }
.login-meme { position: fixed; inset: 0; z-index: 2000; display: flex; align-items: center; justify-content: center; padding: 20px; background: #080f19f2; }
.login-meme-card { text-align: center; color: #fff; }
.login-meme-card img { display: block; width: min(440px, 85vw); max-height: 65vh; object-fit: contain; margin: 0 auto 16px; border-radius: 14px; }
.login-meme-card h2 { font-size: 22px; margin: 0 0 16px; }

