:root{
--bg:#0f1117;--surface:#171a22;--surface-2:#1f2330;--surface-3:#252a39;
--line:#2a2f3d;--ink:#e8eaf0;--muted:#9aa1b4;
--brand:#7c6cff;--brand-2:#9d8bff;--brand-dark:#6355e6;--brand-deep:#5346d6;
--logo:#14b8a6;--logo-2:#2dd4bf;
--green:#34d399;--amber:#fbbf24;--red:#f87171;--slate:#94a3b8;
--radius:14px;--shadow:0 1px 2px rgba(0,0,0,.4),0 10px 30px rgba(0,0,0,.35);
--topbar-h:63px;
}
:root[data-bs-theme="light"]{
--bg:#f4f5f8;--surface:#ffffff;--surface-2:#eef0f5;--surface-3:#e4e7ee;
--line:#d8dce4;--ink:#1c2230;--muted:#5b6474;
--green:#059669;--amber:#b45309;--red:#dc2626;--slate:#475569;
--shadow:0 1px 2px rgba(16,24,40,.06),0 10px 30px rgba(16,24,40,.08);
}
*{box-sizing:border-box;}
body{margin:0;background:var(--bg);color:var(--ink);
font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;}
a{color:var(--brand-2);}
code{color:#d6c9ff;background:rgba(124,108,255,.12);padding:1px 6px;border-radius:5px;}
.text-secondary{color:var(--muted)!important;}
.brand-mark{width:38px;height:38px;border-radius:11px;display:grid;place-items:center;font-weight:800;font-size:20px;color:#fff;background:linear-gradient(135deg,var(--logo-2),var(--logo));box-shadow:0 6px 16px rgba(124,108,255,.4);}
.brand-text{font-weight:700;font-size:20px;color:var(--ink);line-height:1;}
.brand-text small{display:block;font-size:11px;font-weight:600;color:var(--muted);letter-spacing:.14em;text-transform:uppercase;}
.app-main{min-width:0;display:flex;flex-direction:column;min-height:100vh;}
.topbar{display:flex;align-items:center;gap:14px;padding:12px 28px;background:var(--surface);border-bottom:1px solid var(--line);position:fixed;top:0;left:0;right:0;z-index:1030;}
.app-main{padding-top:var(--topbar-h);}
.topbar-brand{display:flex;align-items:center;gap:10px;text-decoration:none;flex-shrink:0;}
.topbar-nav{display:flex;align-items:center;gap:6px;}
.topbar-nav a{display:flex;align-items:center;gap:8px;padding:9px 14px;border-radius:10px;color:var(--muted);text-decoration:none;font-weight:600;font-size:14.5px;transition:background .15s,color .15s;}
.topbar-nav a i{font-size:17px;}
.topbar-nav a:hover{background:var(--surface-2);color:var(--ink);}
.topbar-nav a.active{background:linear-gradient(135deg,var(--brand-dark),var(--brand-deep));color:#fff;box-shadow:0 6px 16px rgba(124,108,255,.3);}
/* Marketplace connection-failed alert (shows only when ci_status = error). */
.topbar-nav a.nav-conn-error{color:var(--red);border:1px solid var(--red);}
.topbar-nav a.nav-conn-error:hover{background:rgba(248,113,113,.16);color:var(--red);}
.topbar-nav a.nav-conn-error.active{background:var(--red);color:#fff;border-color:var(--red);box-shadow:0 6px 16px rgba(248,113,113,.35);}
/* Settings shortcut — sits in the header nav next to Help but keeps its pill
   shape and slate tint (background/border come from .task-toggle-settings in
   sync_progress.css). Scoped under .topbar-nav so it beats the flat nav-link
   look; placed after the nav rules above so its :hover wins on equal specificity. */
.topbar-nav a.task-toggle-settings{border-radius:999px;color:var(--ink);}
.topbar-nav a.task-toggle-settings:hover{background:rgba(148,163,184,.26);color:var(--ink);}
/* Channel switcher — top-left chip that shows the current marketplace and drops
   down to switch shops or open the hub (replaces the old Home link + right-side
   switcher). Styled to sit next to the brand as the one channel-name display. */
.topbar-switcher{flex-shrink:0;}
.topbar-switcher-toggle{display:flex;align-items:center;gap:8px;padding:7px 12px;border-radius:10px;color:var(--ink);text-decoration:none;font-weight:700;font-size:14.5px;background:var(--surface-2);border:1px solid var(--line);transition:background .15s,color .15s;}
.topbar-switcher-toggle:hover{background:var(--surface);color:var(--ink);}
.topbar-switcher-toggle .switcher-mark{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:6px;background:linear-gradient(135deg,var(--brand-dark),var(--brand-deep));color:#fff;font-size:14px;flex-shrink:0;}
.topbar-switcher-toggle .switcher-name{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.user-chip{display:flex;align-items:center;gap:10px;background:var(--surface-2);border:1px solid var(--line);border-radius:40px;padding:5px 12px 5px 5px;color:var(--ink);font-weight:600;font-size:14px;}
.avatar{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;color:#fff;font-weight:700;font-size:13px;text-transform:uppercase;background:linear-gradient(135deg,var(--brand-2),var(--brand-dark));}
.content{padding:28px;}
.lst-wrap{display:grid;grid-template-columns:250px 1fr;gap:20px;align-items:start;}
.lst-rail{position:sticky;top:calc(var(--topbar-h) + 20px);max-height:calc(100vh - var(--topbar-h) - 32px);overflow-y:auto;scrollbar-width:thin;}
.lst-rail .panel{padding:14px;}
.lst-statuses .lst-status{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;border-radius:9px;color:var(--muted);text-decoration:none;font-size:14px;font-weight:500;}
.lst-statuses .lst-status:hover{background:var(--surface-2);color:var(--ink);}
.lst-statuses .lst-status.active{background:linear-gradient(135deg,var(--brand-dark),var(--brand-deep));color:#fff;}
.lst-count{font-size:12px;font-weight:700;background:var(--surface-3);border:1px solid var(--line);border-radius:20px;padding:1px 9px;color:var(--ink);}
.lst-statuses .lst-status.active .lst-count{background:rgba(255,255,255,.18);border-color:transparent;color:#fff;}
.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px;}
.panel-head{display:flex;align-items:center;gap:12px;margin-bottom:14px;}
.panel-head h2{font-size:16px;font-weight:700;margin:0;}
.table{color:var(--ink);--bs-table-bg:transparent;--bs-table-color:var(--ink);border-color:var(--line);}
.table thead th{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);border-bottom:1px solid var(--line);font-weight:600;}
.table td,.table th{border-color:var(--line);}
.table tbody tr:hover{background:var(--surface-2);}
.table td{vertical-align:middle;}
.stat-card{position:relative;overflow:hidden;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px 20px;}
.stat-label{color:var(--muted);font-size:13px;font-weight:600;}
.stat-value{font-size:30px;font-weight:800;margin-top:4px;color:var(--ink);}
.stat-icon{position:absolute;right:14px;top:16px;font-size:30px;opacity:.16;}
.badge-status{text-transform:capitalize;font-weight:600;padding:.4em .7em;border-radius:7px;border:1px solid transparent;}
.status-connected,.status-active{background:rgba(52,211,153,.16);color:#6ee7b7;border-color:rgba(52,211,153,.3);}
.status-draft{background:rgba(251,191,36,.16);color:#fcd34d;border-color:rgba(251,191,36,.3);}
.status-submitted,.status-info{background:rgba(96,165,250,.16);color:#93c5fd;border-color:rgba(96,165,250,.3);}
.status-error{background:rgba(248,113,113,.16);color:#fca5a5;border-color:rgba(248,113,113,.3);}
.status-disconnected{background:rgba(148,163,184,.16);color:#cbd5e1;border-color:rgba(148,163,184,.3);}
.badge-app{background:rgba(124,108,255,.18);color:#c4b8ff;border:1px solid rgba(124,108,255,.35);font-weight:700;}
.badge.bg-secondary{background:var(--surface-3)!important;color:var(--ink);border:1px solid var(--line);}
.search-box{position:relative;}
.search-box i{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--muted);}
.search-box input{padding-left:34px;}
.form-control{background:var(--surface-2);border-color:var(--line);color:var(--ink);}
/* Selects keep their drop-down chevron: the old `background:` SHORTHAND wiped
   Bootstrap's own background-image, so every select rendered with no arrow and
   read as a plain button. Set the colour and the arrow explicitly instead, one
   per theme, so the chevron is always visible against the field. */
.form-select{background-color:var(--surface-2);border-color:var(--line);color:var(--ink);
background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%239aa1b4' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
background-repeat:no-repeat;background-position:right .6rem center;background-size:14px 11px;
padding-right:2.1rem;cursor:pointer;}
:root[data-bs-theme="light"] .form-select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%235b6474' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");}
.form-control:focus,.form-select:focus{background-color:var(--surface-2);color:var(--ink);border-color:var(--brand-2);box-shadow:0 0 0 .2rem rgba(124,108,255,.2);}
.form-control::placeholder{color:#6b7d84;}
.form-control:disabled{background:var(--surface);color:var(--muted);}
.input-group-text{background:var(--surface-3);border-color:var(--line);color:var(--muted);}
.form-switch .form-check-input:checked{background-color:var(--brand);border-color:var(--brand);}
.modal-content{background:var(--surface);border:1px solid var(--line);border-radius:16px;color:var(--ink);}
.modal-header,.modal-footer{border-color:var(--line);}
.dropdown-menu{background:var(--surface-2);border:1px solid var(--line);}
.dropdown-item{color:var(--ink);}
.dropdown-item:hover{background:var(--surface-3);color:var(--ink);}
.dropdown-item-text{color:var(--muted);}
.btn-primary{background:var(--brand-dark);border-color:var(--brand-dark);color:#fff;}
.btn-primary:hover{background:var(--brand-deep);border-color:var(--brand-deep);color:#fff;}
.btn-outline-primary{color:var(--brand-2);border-color:rgba(124,108,255,.5);}
.btn-outline-primary:hover{background:var(--brand-dark);border-color:var(--brand-dark);color:#fff;}
.btn-outline-secondary{color:var(--ink);border-color:var(--line);}
.btn-outline-secondary:hover{background:var(--surface-3);border-color:var(--line);color:var(--ink);}
.btn-success{background:var(--green);border-color:var(--green);color:#052e1a;}
.btn-success:hover{background:#28b98a;border-color:#28b98a;color:#052e1a;}
.toast{background:var(--surface-3);color:var(--ink);border:1px solid var(--line);}
.tooltip-inner{background:#000;color:#fff;}
hr{border-color:var(--line);}
@media (max-width:991.98px){
.topbar{padding:10px 16px;gap:10px;}
.content{padding:18px;}
.lst-wrap{grid-template-columns:1fr;}
.lst-rail{position:static;max-height:none;overflow-y:visible;}
}
[data-bs-theme="light"] code{color:#5a4bd6;background:rgba(124,108,255,.1);}
[data-bs-theme="light"] .status-connected,[data-bs-theme="light"] .status-active{color:#065f46;}
[data-bs-theme="light"] .status-draft{color:#92400e;}
[data-bs-theme="light"] .status-submitted,[data-bs-theme="light"] .status-info{color:#1e40af;}
[data-bs-theme="light"] .status-error{color:#991b1b;}
[data-bs-theme="light"] .status-disconnected{color:#334155;}
[data-bs-theme="light"] .badge-app{color:#4f46e5;}
.theme-picker{margin-top:2px;}
.theme-picker .theme-opt{flex:1;font-size:12px;font-weight:600;padding:5px 4px;}
.theme-picker .theme-opt i{font-size:13px;}
.theme-opt.active{background:var(--brand);border-color:var(--brand);color:#fff;}
.theme-opt.active:hover{background:var(--brand-dark);border-color:var(--brand-dark);color:#fff;}
