/* NeverIX theme for IXP Manager — matches neverix.net (dark, Geist, blue accent) */
@font-face { font-family: 'Geist'; font-style: normal; font-weight: 300 800; font-display: swap; src: url(/neverix/fonts/Geist-latin.woff2) format('woff2'); }
@font-face { font-family: 'Geist'; font-style: normal; font-weight: 300 800; font-display: swap; src: url(/neverix/fonts/Geist-latin-ext.woff2) format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: 'Geist Mono'; font-style: normal; font-weight: 400 500; font-display: swap; src: url(/neverix/fonts/GeistMono-latin.woff2) format('woff2'); }

:root {
  --nx-bg: oklch(0.14 0 0);
  --nx-fg: oklch(0.985 0 0);
  --nx-mut: oklch(0.7 0 0);
  --nx-card: oklch(0.18 0 0);
  --nx-card2: oklch(0.21 0 0);
  --nx-line: oklch(1 0 0 / 0.1);
  --nx-line2: oklch(1 0 0 / 0.18);
  --nx-acc: oklch(0.66 0.18 245);
  --nx-acc-soft: oklch(0.66 0.18 245 / 0.14);
  --nx-ok: oklch(0.78 0.18 150);
  --nx-warn: oklch(0.82 0.15 80);
  --nx-bad: oklch(0.7 0.19 25);
  color-scheme: dark;
}

html, body { background: var(--nx-bg) !important; color: var(--nx-fg) !important; }
body, .tooltip, .popover, .btn, input, select, textarea, button {
  font-family: 'Geist', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif !important;
  -webkit-font-smoothing: antialiased;
}
code, pre, kbd, samp, .text-monospace, .tw\:font-mono { font-family: 'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace !important; }
code { color: var(--nx-fg); background: oklch(1 0 0 / 0.06); padding: .1em .35em; border-radius: 6px; }
pre { background: var(--nx-card) !important; color: var(--nx-fg) !important; border: 1px solid var(--nx-line); border-radius: 12px; padding: 1rem; }

a { color: var(--nx-acc); }
a:hover { color: oklch(0.75 0.15 245); }
h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4 { color: var(--nx-fg); font-weight: 600; letter-spacing: -0.02em; }
hr { border-color: var(--nx-line) !important; }
.text-muted, small.text-muted, .form-text { color: var(--nx-mut) !important; }
.text-dark, .text-body, .text-black { color: var(--nx-fg) !important; }
.bg-white, .bg-light, .bg-body { background-color: var(--nx-card) !important; color: var(--nx-fg) !important; }
.border, .border-top, .border-bottom, .border-left, .border-right { border-color: var(--nx-line) !important; }
::selection { background: var(--nx-acc-soft); }

/* top navbar */
header .navbar, .navbar.bg-dark, nav.navbar {
  background: color-mix(in oklch, var(--nx-bg) 80%, transparent) !important;
  backdrop-filter: blur(18px) saturate(160%); -webkit-backdrop-filter: blur(18px) saturate(160%);
  border-bottom: 1px solid var(--nx-line);
  box-shadow: none !important;
}
.navbar-dark .navbar-nav .nav-link, .navbar .nav-link { color: var(--nx-mut) !important; font-size: 14px; }
.navbar-dark .navbar-nav .nav-link:hover, .navbar .nav-link:hover, .navbar .nav-item.active > .nav-link { color: var(--nx-fg) !important; }
.navbar-brand { color: var(--nx-fg) !important; font-weight: 600 !important; letter-spacing: -0.01em; }
.dropdown-menu { background: var(--nx-card) !important; border: 1px solid var(--nx-line) !important; border-radius: 12px !important; box-shadow: 0 20px 40px -12px oklch(0 0 0 / .6) !important; padding: .4rem !important; }
.dropdown-item { color: var(--nx-fg) !important; border-radius: 8px; font-size: 14px; }
.dropdown-item:hover, .dropdown-item:focus { background: oklch(1 0 0 / 0.06) !important; color: var(--nx-fg) !important; }
.dropdown-item.active, .dropdown-item:active { background: var(--nx-acc-soft) !important; color: var(--nx-fg) !important; }
.dropdown-header { color: var(--nx-mut) !important; text-transform: uppercase; font-size: 11px; letter-spacing: .08em; }
.dropdown-divider { border-color: var(--nx-line) !important; }
.navbar-toggler { border-color: var(--nx-line2) !important; }

/* side menu (admin) */
#sidebar, .sidebar, nav#sidebar, .ixp-sidebar, .tw\:bg-gray-100, .bg-gray-100 { background: var(--nx-bg) !important; border-color: var(--nx-line) !important; }
#sidebar .nav-link, .sidebar .nav-link { color: var(--nx-mut) !important; border-radius: 8px; }
#sidebar .nav-link:hover, .sidebar .nav-link:hover, #sidebar .nav-link.active, .sidebar .nav-link.active { color: var(--nx-fg) !important; background: oklch(1 0 0 / 0.05) !important; }
.sidebar-heading { color: var(--nx-mut) !important; }

/* page header area */
.page-header, .ixp-page-header, .tw\:border-b { border-color: var(--nx-line) !important; }

/* cards / wells / panels */
.card, .well, .panel, .list-group-item, .jumbotron, .modal-content, .toast, .popover {
  background-color: var(--nx-card) !important; color: var(--nx-fg) !important;
  border: 1px solid var(--nx-line) !important; border-radius: 16px !important;
}
.card-header, .card-footer, .modal-header, .modal-footer, .popover-header {
  background-color: transparent !important; border-color: var(--nx-line) !important; color: var(--nx-fg) !important;
}
.card-header { font-weight: 600; }
.list-group-item { border-radius: 0 !important; }
.list-group-item:first-child { border-top-left-radius: 12px !important; border-top-right-radius: 12px !important; }
.list-group-item:last-child { border-bottom-left-radius: 12px !important; border-bottom-right-radius: 12px !important; }
.list-group-item-action:hover { background: var(--nx-card2) !important; }
.modal-backdrop.show { opacity: .7; }
.close { color: var(--nx-fg) !important; text-shadow: none !important; opacity: .7; }

/* tables */
.table, table.table, .dataTable { color: var(--nx-fg) !important; background: transparent !important; }
.table th, .table td { border-color: var(--nx-line) !important; vertical-align: middle; }
.table thead th, .table-dark th, thead.thead-dark th, .thead-light th {
  background: var(--nx-card) !important; color: var(--nx-mut) !important; border-color: var(--nx-line) !important;
  font-weight: 500; font-size: 12px; text-transform: uppercase; letter-spacing: .06em;
}
.table-striped tbody tr:nth-of-type(odd) { background-color: oklch(1 0 0 / 0.025) !important; }
.table-hover tbody tr:hover { background-color: oklch(1 0 0 / 0.05) !important; color: var(--nx-fg) !important; }
.table-bordered, .table-bordered th, .table-bordered td { border-color: var(--nx-line) !important; }
.table-responsive, .tab-content, .card-body { overflow-x: auto; }
.table-success, .table-success > td { background: oklch(0.78 0.18 150 / 0.1) !important; }
.table-danger, .table-danger > td { background: oklch(0.7 0.19 25 / 0.12) !important; }
.table-warning, .table-warning > td { background: oklch(0.82 0.15 80 / 0.12) !important; }
.table-info, .table-info > td { background: var(--nx-acc-soft) !important; }

/* DataTables controls */
.dataTables_wrapper .dataTables_length, .dataTables_wrapper .dataTables_filter, .dataTables_wrapper .dataTables_info { color: var(--nx-mut) !important; }
.page-link { background: var(--nx-card) !important; border-color: var(--nx-line) !important; color: var(--nx-fg) !important; }
.page-item.active .page-link { background: var(--nx-acc) !important; border-color: var(--nx-acc) !important; color: #fff !important; }
.page-item.disabled .page-link { color: var(--nx-mut) !important; }

/* forms */
.form-control, .custom-select, select, textarea, input[type=text], input[type=email], input[type=password], input[type=number], input[type=search], input[type=url], input[type=tel], .select2-container--default .select2-selection--single, .select2-container--default .select2-selection--multiple, .chosen-container .chosen-single, .input-group-text {
  background-color: oklch(0.12 0 0) !important; color: var(--nx-fg) !important;
  border: 1px solid var(--nx-line) !important; border-radius: 10px !important;
}
.form-control:focus, .custom-select:focus, select:focus, textarea:focus, input:focus {
  border-color: var(--nx-acc) !important; box-shadow: 0 0 0 3px var(--nx-acc-soft) !important; outline: none !important;
}
.form-control::placeholder { color: oklch(0.7 0 0 / 0.55) !important; }
.form-control:disabled, .form-control[readonly] { background-color: var(--nx-card) !important; opacity: .7; }
.input-group-text { color: var(--nx-mut) !important; }
.input-group > .form-control:not(:last-child), .input-group > .input-group-prepend > .input-group-text { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; }
.input-group > .form-control:not(:first-child), .input-group > .input-group-append > .input-group-text, .input-group > .input-group-append > .btn { border-top-left-radius: 0 !important; border-bottom-left-radius: 0 !important; }
label, .col-form-label, .control-label { color: var(--nx-fg); font-weight: 500; }
.select2-dropdown, .select2-results__option, .chosen-drop { background: var(--nx-card) !important; color: var(--nx-fg) !important; border-color: var(--nx-line) !important; }
.select2-container--default .select2-results__option--highlighted[aria-selected], .select2-results__option--highlighted { background: var(--nx-acc-soft) !important; color: var(--nx-fg) !important; }
.select2-container--default .select2-selection--single .select2-selection__rendered { color: var(--nx-fg) !important; }
.select2-search__field { background: oklch(0.12 0 0) !important; color: var(--nx-fg) !important; }
option { background: var(--nx-card); color: var(--nx-fg); }
input[type=file]::file-selector-button { background: var(--nx-card2) !important; color: var(--nx-fg) !important; border: 1px solid var(--nx-line2) !important; border-radius: 999px !important; padding: .35rem .9rem !important; margin-right: .75rem; cursor: pointer; }
.custom-control-label::before { background-color: oklch(0.12 0 0); border-color: var(--nx-line2); }
.custom-control-input:checked ~ .custom-control-label::before { background-color: var(--nx-acc); border-color: var(--nx-acc); }
input[type=checkbox], input[type=radio] { accent-color: var(--nx-acc); }

/* buttons — pill shaped like neverix.net */
.btn { border-radius: 999px !important; font-weight: 500 !important; font-size: 14px; padding: .45rem 1.1rem; box-shadow: none !important; }
.btn-sm, .btn-group-sm > .btn { padding: .28rem .8rem; font-size: 13px; }
.btn-group > .btn { border-radius: 0 !important; }
.btn-group > .btn:first-child { border-top-left-radius: 999px !important; border-bottom-left-radius: 999px !important; }
.btn-group > .btn:last-child, .btn-group > .dropdown-toggle:last-child { border-top-right-radius: 999px !important; border-bottom-right-radius: 999px !important; }
.btn-primary, .btn-info { background: var(--nx-acc) !important; border-color: var(--nx-acc) !important; color: #fff !important; }
.btn-primary:hover, .btn-info:hover { opacity: .9; }
.btn-success { background: oklch(0.62 0.15 150) !important; border-color: oklch(0.62 0.15 150) !important; color: #fff !important; }
.btn-danger { background: oklch(0.6 0.2 25) !important; border-color: oklch(0.6 0.2 25) !important; color: #fff !important; }
.btn-warning { background: oklch(0.78 0.15 80) !important; border-color: oklch(0.78 0.15 80) !important; color: oklch(0.2 0 0) !important; }
.btn-secondary, .btn-light, .btn-white, .btn-default, .btn-dark, .btn-outline-secondary, .btn-outline-dark, .btn-outline-light, .btn-outline-primary, .btn-outline-info {
  background: transparent !important; border: 1px solid var(--nx-line2) !important; color: var(--nx-fg) !important;
}
.btn-secondary:hover, .btn-light:hover, .btn-white:hover, .btn-default:hover, .btn-dark:hover, .btn-outline-secondary:hover, .btn-outline-dark:hover, .btn-outline-light:hover, .btn-outline-primary:hover, .btn-outline-info:hover {
  border-color: oklch(1 0 0 / 0.4) !important; background: oklch(1 0 0 / 0.04) !important;
}
.btn-outline-danger { background: transparent !important; color: var(--nx-bad) !important; border-color: oklch(0.7 0.19 25 / 0.5) !important; }
.btn-outline-success { background: transparent !important; color: var(--nx-ok) !important; border-color: oklch(0.78 0.18 150 / 0.5) !important; }
.btn.active, .btn:active { background: var(--nx-acc-soft) !important; border-color: var(--nx-acc) !important; }
.btn-link { color: var(--nx-acc) !important; background: none !important; border: 0 !important; }

/* alerts */
.alert { border-radius: 14px !important; border: 1px solid var(--nx-line) !important; background: var(--nx-card) !important; color: var(--nx-fg) !important; }
.alert-info, .alert-primary { background: var(--nx-acc-soft) !important; border-color: oklch(0.66 0.18 245 / 0.35) !important; }
.alert-success { background: oklch(0.78 0.18 150 / 0.1) !important; border-color: oklch(0.78 0.18 150 / 0.35) !important; }
.alert-warning { background: oklch(0.82 0.15 80 / 0.1) !important; border-color: oklch(0.82 0.15 80 / 0.35) !important; }
.alert-danger { background: oklch(0.7 0.19 25 / 0.12) !important; border-color: oklch(0.7 0.19 25 / 0.4) !important; }
.alert a { color: var(--nx-fg) !important; text-decoration: underline; text-underline-offset: 3px; }
.alert .alert-link { color: var(--nx-fg) !important; }

/* badges / pills */
.badge { border-radius: 999px !important; font-weight: 500 !important; padding: .3em .7em; }
.badge-primary, .badge-info { background: var(--nx-acc-soft) !important; color: oklch(0.8 0.12 245) !important; }
.badge-success { background: oklch(0.78 0.18 150 / 0.14) !important; color: var(--nx-ok) !important; }
.badge-warning { background: oklch(0.82 0.15 80 / 0.14) !important; color: var(--nx-warn) !important; }
.badge-danger { background: oklch(0.7 0.19 25 / 0.15) !important; color: var(--nx-bad) !important; }
.badge-secondary, .badge-light, .badge-dark { background: oklch(1 0 0 / 0.08) !important; color: var(--nx-fg) !important; }

/* tabs / pills nav */
.nav-tabs { border-bottom: 1px solid var(--nx-line) !important; }
.nav-tabs .nav-link { color: var(--nx-mut) !important; border: 0 !important; border-bottom: 2px solid transparent !important; background: transparent !important; border-radius: 0 !important; }
.nav-tabs .nav-link:hover { color: var(--nx-fg) !important; }
.nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link { color: var(--nx-fg) !important; border-bottom-color: var(--nx-fg) !important; }
.nav-pills .nav-link { color: var(--nx-mut) !important; border-radius: 999px !important; }
.nav-pills .nav-link.active { background: var(--nx-acc-soft) !important; color: var(--nx-fg) !important; }

/* breadcrumbs & misc */
.breadcrumb { background: transparent !important; padding-left: 0; }
.breadcrumb-item, .breadcrumb-item a { color: var(--nx-mut) !important; }
.breadcrumb-item.active { color: var(--nx-fg) !important; }
.progress { background: oklch(1 0 0 / 0.08) !important; border-radius: 999px; }
.progress-bar { background: var(--nx-acc) !important; }
.tooltip-inner { background: var(--nx-card2) !important; color: var(--nx-fg) !important; border: 1px solid var(--nx-line); border-radius: 8px; }

/* graphs are rendered PNGs on white — frame them */
img[src*="grapher"], img[src*="/statistics/"], img[src*="smokeping"] { border-radius: 10px; border: 1px solid var(--nx-line); background: #fff; max-width: 100%; height: auto; }

/* footer */
footer.footer, footer.footer.bg-dark { background: var(--nx-bg) !important; border-top: 1px solid var(--nx-line); }
footer.footer, footer.footer a.text-light, footer.footer .text-light { color: var(--nx-mut) !important; }
footer.footer a.text-light:hover { color: var(--nx-fg) !important; }

/* login / auth pages */
.tw\:bg-white { background: var(--nx-card) !important; }
.tw\:text-gray-700, .tw\:text-gray-800, .tw\:text-gray-900, .tw\:text-gray-600 { color: var(--nx-fg) !important; }
.tw\:text-gray-500, .tw\:text-gray-400 { color: var(--nx-mut) !important; }
.tw\:border-gray-200, .tw\:border-gray-300, .tw\:border-gray-400 { border-color: var(--nx-line) !important; }
.tw\:shadow, .tw\:shadow-md, .tw\:shadow-lg { box-shadow: none !important; }

/* Tailwind / generic light surfaces used by IXP Manager components */
.tw\:bg-gray-50, .tw\:bg-gray-200, .tw\:bg-blue-50, .tw\:bg-blue-100 { background: var(--nx-card) !important; }

/* make every remaining light box readable */
.jumbotron, .bg-light { color: var(--nx-fg) !important; }

/* Mobile */
@media (max-width: 767px) {
  .table-responsive, .tab-content, .card-body { overflow-x: auto; }
  .alert > .d-flex > .text-center:first-child { display: none; }
}
/* buttons and badges never wrap per letter */
.btn, .badge { white-space: nowrap; }
input[type=file]::file-selector-button:hover { border-color: oklch(1 0 0 / 0.4) !important; }

/* fix: dropdowns must be opaque and above page content */
header, header .navbar, nav.navbar { position: relative; z-index: 1030 !important; }
header .navbar.fixed-top, header .fixed-top { position: fixed !important; }
.dropdown-menu { background-color: oklch(0.18 0 0) !important; z-index: 1050 !important; opacity: 1 !important; backdrop-filter: none !important; }
.card h3, .card .h3, .card-header h3 { font-size: 1.05rem !important; margin-bottom: .75rem !important; }
.card-body { padding: 1.25rem !important; }

/* ---- apple-design pass ---- */
h1, .h1 { line-height: 1.08; letter-spacing: -0.03em; }
h2, .h2 { line-height: 1.15; letter-spacing: -0.02em; }
h3, .h3, h4, .h4 { line-height: 1.3; letter-spacing: -0.01em; }
small, .small, .badge, .dropdown-header { letter-spacing: 0.01em; }
/* instant press feedback */
.btn { transition: transform 100ms ease-out, opacity .15s, border-color .15s, background-color .15s !important; }
.btn:active { transform: scale(0.97); }
.btn, .page-link { -webkit-tap-highlight-color: transparent; }
/* translucent nav: scroll-edge shadow instead of a hard 1px divider */
header .navbar, nav.navbar { border-bottom: 0 !important; box-shadow: 0 1px 0 oklch(1 0 0 / 0.05), 0 12px 24px -16px oklch(0 0 0 / 0.8) !important; }
/* dropdowns materialize from their trigger */
.dropdown-menu.show { transform-origin: top left; animation: nx-pop 200ms cubic-bezier(0.32, 0.72, 0, 1) both; }
.dropdown-menu-right.show, .dropdown-menu-end.show { transform-origin: top right; }
@keyframes nx-pop { from { opacity: 0; transform: scale(0.96) translateY(-4px); filter: blur(4px); } to { opacity: 1; transform: none; filter: none; } }
.modal.fade .modal-dialog { transition: transform 300ms cubic-bezier(0.32, 0.72, 0, 1), opacity 200ms ease; transform: scale(0.96); opacity: 0; }
.modal.show .modal-dialog { transform: none; opacity: 1; }
/* inline validation states */
.form-control.is-invalid, .was-validated .form-control:invalid { border-color: oklch(0.7 0.19 25 / 0.8) !important; }
.invalid-feedback { color: oklch(0.75 0.17 25) !important; }
.form-control.is-valid { border-color: oklch(0.78 0.18 150 / 0.6) !important; }
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: 1ms !important; transition-duration: 1ms !important; }
  .btn:active { transform: none; }
}
@media (prefers-reduced-transparency: reduce) {
  header .navbar, nav.navbar { backdrop-filter: none !important; background: var(--nx-bg) !important; }
}
@media (prefers-contrast: more) {
  :root { --nx-line: oklch(1 0 0 / 0.45); --nx-line2: oklch(1 0 0 / 0.6); --nx-mut: oklch(0.85 0 0); }
  header .navbar, nav.navbar { background: var(--nx-bg) !important; backdrop-filter: none !important; border-bottom: 1px solid oklch(1 0 0 / 0.5) !important; }
}

/* legacy tailwind grey text (member detail cards etc.) — readable on dark */
[class*="tw:text-grey-darkest"], [class*="tw:text-grey-darker"], [class*="tw:text-gray-darker"], [class*="tw:text-black"] { color: var(--nx-fg) !important; }
[class*="tw:text-grey-dark"]:not([class*="tw:text-grey-darker"]):not([class*="tw:text-grey-darkest"]), .tw\:text-grey, [class*="tw:text-grey-light"], [class*="tw:text-gray-dark"]:not([class*="darker"]) { color: var(--nx-mut) !important; }
p[class*="tw:text-grey-dark"][class*="tw:text-sm"]:not([class*="darker"]) { font-size: 12px !important; text-transform: uppercase; letter-spacing: .06em; margin-bottom: .25rem; }
[class*="tw:bg-grey-lightest"], [class*="tw:bg-grey-lighter"], [class*="tw:bg-white"] { background: var(--nx-card) !important; }
[class*="tw:border-grey"] { border-color: var(--nx-line) !important; }

/* admin side menu: dark active item instead of the stock white bar */
#side-navbar { background: var(--nx-bg) !important; border-color: var(--nx-line) !important; }
#side-navbar li.active, #side-navbar li.active > a, #side-navbar li.active .nav-link {
  background: oklch(1 0 0 / 0.07) !important; color: var(--nx-fg) !important; border-radius: 8px;
}
#side-navbar li.active { border-right: 0 !important; box-shadow: inset 2px 0 0 var(--nx-acc); }
#side-navbar li.active > a, #side-navbar li.active .nav-link { font-weight: 600; }
#side-navbar .nav-link { color: var(--nx-mut) !important; }
#side-navbar .nav-link:hover { color: var(--nx-fg) !important; background: oklch(1 0 0 / 0.04) !important; border-radius: 8px; }
#side-navbar .nav-sub-menu-item:not(.active) .nav-link { color: var(--nx-mut) !important; }
#side-navbar li { border-right: 0 !important; }
#side-navbar li:hover { background: oklch(1 0 0 / 0.04) !important; color: var(--nx-fg) !important; border-radius: 8px; }
#side-navbar li.active:hover { background: oklch(1 0 0 / 0.07) !important; }
