:root{
  color-scheme:light;
  --bg:#eef3fb;
  --bg-soft:#f6f8fc;
  --surface:#ffffff;
  --surface-2:#f8fafc;
  --ink:#121826;
  --ink-soft:#283247;
  --muted:#687386;
  --line:#dce3ee;
  --line-strong:#cbd5e1;
  --primary:#6047f5;
  --primary-strong:#4c35d8;
  --blue:#1f73f1;
  --success:#10a66a;
  --success-bg:#e7f8f0;
  --danger:#e02d4f;
  --danger-bg:#fff0f3;
  --warning:#d97706;
  --info-bg:#eef4ff;
  --focus:0 0 0 4px rgba(96,71,245,.16);
  --radius:12px;
  --radius-lg:18px;
  --shadow:0 1px 2px rgba(15,23,42,.05),0 16px 40px rgba(30,41,59,.08);
  --shadow-sm:0 1px 2px rgba(15,23,42,.06);
}
html.dark{
  color-scheme:dark;
  --bg:#0d1220;
  --bg-soft:#111827;
  --surface:#151d2d;
  --surface-2:#101827;
  --ink:#f6f8fc;
  --ink-soft:#d9e1ee;
  --muted:#9aa7bb;
  --line:#253149;
  --line-strong:#34425d;
  --primary:#7b68ff;
  --primary-strong:#6c55f2;
  --blue:#5d9cff;
  --success:#35d090;
  --success-bg:#113526;
  --danger:#ff5f7d;
  --danger-bg:#3a1621;
  --warning:#f6b44b;
  --info-bg:#17243d;
  --shadow:0 1px 2px rgba(0,0,0,.28),0 18px 44px rgba(0,0,0,.22);
  --shadow-sm:0 1px 2px rgba(0,0,0,.24);
}
*{box-sizing:border-box}
[hidden]{display:none!important}
html{min-height:100%}
body{
  margin:0;
  min-height:100%;
  font:15px/1.5 Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
  color:var(--ink);
  background:
    linear-gradient(180deg,rgba(96,71,245,.055),transparent 360px),
    var(--bg);
}
body,button,input,select{letter-spacing:0}
a{color:inherit;text-decoration:none}
button,input,select{font:inherit}
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:0;box-shadow:var(--focus)}
.wrap{max-width:1420px;margin:0 auto;padding:42px 28px 84px}
.muted{color:var(--muted)}
.small{font-size:13px}
.center{text-align:center}
.right{text-align:right}
.green{color:var(--success)}
.violet{color:var(--primary)}
.eyebrow{
  margin:0 0 6px;
  color:var(--muted);
  font-size:12px;
  font-weight:800;
  letter-spacing:.08em;
  text-transform:uppercase;
}
h1,h2,h3{color:var(--ink);line-height:1.12}
h1{font-size:34px;margin:0 0 8px}
h2{font-size:24px;margin:0}
h3{font-size:18px;margin:0}
code{font-family:"SFMono-Regular",Consolas,monospace}

/* Header */
.topbar{
  position:sticky;
  top:0;
  z-index:30;
  display:grid;
  grid-template-columns:auto auto auto;
  align-items:center;
  justify-content:center;
  gap:42px;
  padding:12px 28px;
  background:color-mix(in srgb,var(--surface) 92%,transparent);
  border-bottom:1px solid var(--line);
  backdrop-filter:saturate(180%) blur(16px);
}
.topbar-left{
  display:flex;
  align-items:center;
  gap:12px;
  justify-self:start;
}
.brand-lockup{display:flex;align-items:center;min-width:132px;max-width:146px;padding:0;width:max-content;overflow:hidden}
html.dark .brand-lockup{background:white;border:1px solid rgba(203,213,225,.75);border-radius:10px;padding:5px 8px}
.brand-lockup img{display:block;width:132px!important;max-width:132px!important;height:auto!important;max-height:38px!important;object-fit:contain}
.menu-toggle{
  display:none;
  align-items:center;
  justify-content:center;
  width:38px;
  height:38px;
  min-width:38px;
  background:var(--surface);
  border:1px solid var(--line);
  border-radius:10px;
  color:var(--ink);
  cursor:pointer;
  padding:0;
  font-size:18px;
  line-height:1;
  transition:background .15s,border-color .15s;
}
.menu-toggle:hover{background:var(--surface-2);border-color:var(--line-strong)}
.menu-toggle svg{width:20px;height:20px;display:block}
.main-nav{display:flex;align-items:center;justify-content:center;gap:4px}
.main-nav a{
  color:var(--muted);
  font-weight:700;
  padding:8px 12px;
  border-radius:10px;
  transition:background .15s,color .15s;
}
.main-nav a:hover,.main-nav a.active{color:var(--ink);background:var(--surface-2)}
.top-actions{display:flex;align-items:center;justify-self:start;gap:10px}

/* Mobile Drawer (Isolated Fullscreen Overlay) */
.mobile-drawer{
  position:fixed;
  inset:0;
  z-index:9999;
}
.mobile-drawer[hidden]{display:none!important}
.drawer-backdrop{
  position:fixed;
  inset:0;
  background:rgba(8,12,22,.68);
  backdrop-filter:blur(4px);
  animation:drawerFadeIn .2s ease-out;
}
.drawer-panel{
  position:fixed;
  top:0;
  left:0;
  bottom:0;
  width:min(300px,82vw);
  background:var(--surface);
  border-right:1px solid var(--line);
  box-shadow:0 10px 40px rgba(0,0,0,.45);
  display:flex;
  flex-direction:column;
  z-index:10000;
  animation:drawerSlideIn .25s cubic-bezier(.16,1,.3,1);
}
@keyframes drawerFadeIn{from{opacity:0}to{opacity:1}}
@keyframes drawerSlideIn{from{transform:translateX(-100%)}to{transform:translateX(0)}}
.drawer-header{
  display:flex;
  align-items:center;
  justify-content:space-between;
  padding:16px 20px;
  border-bottom:1px solid var(--line);
  flex-shrink:0;
}
.drawer-nav{
  flex:1;
  overflow-y:auto;
  padding:16px 12px;
  display:flex;
  flex-direction:column;
  gap:4px;
}
.drawer-nav a{
  display:flex;
  align-items:center;
  gap:12px;
  padding:12px 14px;
  border-radius:10px;
  color:var(--muted);
  font-weight:700;
  font-size:15px;
  text-decoration:none;
  transition:background .15s,color .15s;
}
.drawer-nav a:hover,.drawer-nav a.active{
  color:var(--ink);
  background:var(--surface-2);
}
.drawer-footer{
  padding:16px 20px;
  border-top:1px solid var(--line);
  flex-shrink:0;
}
.foot{
  display:flex;
  justify-content:space-between;
  gap:20px;
  max-width:1420px;
  margin:0 auto;
  padding:0 28px 26px;
  color:var(--muted);
  font-size:13px;
}

/* Buttons */
.btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  min-height:40px;
  border:1px solid var(--line-strong);
  background:var(--surface);
  color:var(--ink);
  padding:9px 15px;
  border-radius:10px;
  font-weight:800;
  font-size:14px;
  cursor:pointer;
  transition:background .16s,border-color .16s,transform .12s,box-shadow .16s,color .16s;
  box-shadow:var(--shadow-sm);
  white-space:nowrap;
}
.btn:hover{background:var(--surface-2);border-color:var(--line-strong);transform:translateY(-1px)}
.btn:active{transform:translateY(0)}
.btn.sm{min-height:34px;padding:6px 11px;font-size:13px}
.btn.block{width:100%}
.btn.primary{background:var(--primary);border-color:var(--primary);color:white}
.btn.primary:hover{background:var(--primary-strong);border-color:var(--primary-strong)}
.btn.secondary{background:var(--surface);color:var(--ink-soft)}
.btn.ghost{background:transparent;box-shadow:none}
.btn.danger{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 32%,var(--line))}
.btn.danger:hover{background:var(--danger-bg)}
.btn.danger.solid{background:var(--danger);border-color:var(--danger);color:white}
.btn.danger.solid:hover{background:#c91f40;border-color:#c91f40}
.btn.disabled,.btn:disabled{opacity:.52;cursor:not-allowed;transform:none;background:var(--surface-2);color:var(--muted)}
.btn.icon{width:40px;min-width:40px;padding:0;font-size:18px}

/* Forms */
label{display:block;margin:14px 0;color:var(--muted);font-size:13px;font-weight:800}
label input,label select{
  display:block;
  width:100%;
  margin-top:7px;
  padding:11px 13px;
  border:1px solid var(--line);
  border-radius:10px;
  background:var(--surface-2);
  color:var(--ink);
  min-height:44px;
  transition:border-color .15s,box-shadow .15s,background .15s;
}
label input:focus,label select:focus{border-color:var(--primary);box-shadow:var(--focus);outline:0;background:var(--surface)}
label.check{display:flex;align-items:flex-start;gap:10px;font-weight:800;color:var(--ink);line-height:1.3}
label.check input{width:18px;height:18px;min-height:0;margin:0;flex:0 0 auto}
.password-field{position:relative;display:block}
.password-field input{padding-right:72px}
.password-field button{
  position:absolute;
  right:6px;
  top:13px;
  border:0;
  border-left:1px solid var(--line);
  background:transparent;
  color:var(--primary);
  font-weight:800;
  padding:6px 10px;
  cursor:pointer;
}
.addon-row{display:flex;align-items:stretch}
.addon-row input{border-top-right-radius:0;border-bottom-right-radius:0}
.addon{
  display:flex;
  align-items:center;
  padding:0 14px;
  margin-top:7px;
  min-height:44px;
  background:var(--info-bg);
  border:1px solid var(--line);
  border-left:none;
  border-radius:0 10px 10px 0;
  color:var(--muted);
  font-weight:800;
}

/* Auth */
.auth-shell{
  min-height:calc(100vh - 100px);
  display:grid;
  grid-template-columns:minmax(0,1.05fr) minmax(360px,.7fr);
  gap:30px;
  align-items:center;
}
.auth-visual{
  padding:38px;
  border:1px solid var(--line);
  border-radius:24px;
  background:linear-gradient(135deg,var(--surface),var(--bg-soft));
  box-shadow:var(--shadow);
}
.auth-logo{display:block;width:190px!important;max-width:190px!important;height:auto!important;max-height:56px!important;object-fit:contain;margin-bottom:42px;background:white;border:1px solid rgba(203,213,225,.75);border-radius:14px;padding:10px 12px}
.auth-visual h1{max-width:640px;font-size:48px;margin-bottom:14px}
.auth-visual p{max-width:620px;color:var(--muted);font-size:18px}
.auth-metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:36px}
.auth-metrics div{border:1px solid var(--line);border-radius:14px;background:var(--surface);padding:16px}
.auth-metrics b{display:block;font-size:20px;color:var(--primary)}
.auth-metrics span{display:block;color:var(--muted);font-size:13px;margin-top:4px}
.card.auth{margin:0;padding:30px;max-width:none}
.auth-mark{display:block;width:52px!important;height:52px!important;object-fit:contain;margin-bottom:18px}
.card.auth h2{font-size:28px;margin-bottom:8px}
.alert{border-radius:12px;padding:12px 14px;margin:16px 0;font-weight:800}
.alert.danger{background:var(--danger-bg);color:var(--danger);border:1px solid color-mix(in srgb,var(--danger) 28%,var(--line))}

/* Layout primitives */
.page-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:24px;gap:18px;flex-wrap:wrap}
.page-head p.muted{margin:0;font-size:16px}
.head-actions{display:flex;gap:10px;align-items:center}
.card{
  background:var(--surface);
  border:1px solid var(--line);
  border-radius:var(--radius-lg);
  padding:24px;
  box-shadow:var(--shadow);
  margin-bottom:24px;
}
.row-between{display:flex;justify-content:space-between;align-items:flex-start;gap:18px}
.section-head{margin-bottom:18px}
.section-head p.muted{margin:6px 0 0}
.cards-3{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
.account-grid .card{min-height:330px}

/* KPIs and resources */
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin-bottom:24px}
.kpi{
  background:var(--surface);
  border:1px solid var(--line);
  border-radius:var(--radius-lg);
  padding:20px;
  box-shadow:var(--shadow-sm);
}
.kpi span{display:block;color:var(--muted);font-weight:800}
.kpi b{display:block;margin:6px 0 2px;font-size:34px;line-height:1}
.kpi em{display:block;color:var(--muted);font-size:13px;font-style:normal}
.resources h3{margin:0 0 16px}
.bars{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin-top:18px}
.bar-head{display:flex;justify-content:space-between;font-weight:800;margin-bottom:8px}
.track{height:7px;background:var(--bg-soft);border:1px solid var(--line);border-radius:99px;overflow:hidden}
.fill{height:100%;background:linear-gradient(90deg,var(--success),var(--blue))}
.skeleton-bars{margin-top:18px}
.skeleton{height:64px;border-radius:12px;background:linear-gradient(90deg,var(--surface-2),color-mix(in srgb,var(--surface-2) 65%,var(--line)),var(--surface-2));background-size:220% 100%;animation:shimmer 1.15s infinite}
@keyframes shimmer{to{background-position:-220% 0}}

/* Tables */
.table-shell{
  overflow-x:auto;
  background:var(--surface);
  border:1px solid var(--line);
  border-radius:var(--radius-lg);
  box-shadow:var(--shadow);
}
.table-shell.compact{box-shadow:none}
.grid{width:100%;border-collapse:separate;border-spacing:0;min-width:860px}
.grid th{
  text-align:left;
  color:var(--muted);
  font-size:12px;
  text-transform:uppercase;
  letter-spacing:.07em;
  padding:15px 18px;
  border-bottom:1px solid var(--line);
  background:color-mix(in srgb,var(--surface) 88%,var(--surface-2));
}
.grid td{padding:17px 18px;border-bottom:1px solid var(--line);vertical-align:middle}
.grid tr:last-child td{border-bottom:none}
.grid tbody tr:hover{background:color-mix(in srgb,var(--surface-2) 65%,transparent)}
.grid.embedded{min-width:860px}
.action-cell{white-space:nowrap}
.action-cell .btn{margin-left:6px}
.repo-url-cell{max-width:360px;word-break:break-word}

/* Badges */
.pill{display:inline-flex;align-items:center;border-radius:999px;background:var(--info-bg);color:var(--primary);padding:3px 10px;font-size:12px;font-weight:900}
.tag{display:inline-flex;align-items:center;border-radius:999px;background:#ffe8ef;color:#c0264d;padding:3px 10px;font-size:12px;font-weight:900;margin:2px 4px 2px 0}
.tag.neutral{background:var(--surface-2);color:var(--muted);border:1px solid var(--line)}
.tag.info{background:var(--info-bg);color:var(--blue)}
.status{display:inline-flex;align-items:center;border-radius:999px;padding:4px 10px;font-size:12px;font-weight:900}
.status::before{content:"";width:8px;height:8px;border-radius:50%;margin-right:7px;background:currentColor}
.s-running{background:var(--success-bg);color:var(--success)}
.s-running::before{box-shadow:0 0 0 0 rgba(16,166,106,.7);animation:livePulse 2s infinite}
@keyframes livePulse{
  0%{box-shadow:0 0 0 0 rgba(16,166,106,.7)}
  70%{box-shadow:0 0 0 6px rgba(16,166,106,0)}
  100%{box-shadow:0 0 0 0 rgba(16,166,106,0)}
}
.s-creating,.s-deleting{background:var(--info-bg);color:var(--primary)}
.s-error{background:var(--danger-bg);color:var(--danger)}
.s-stopped,.s-missing{background:var(--surface-2);color:var(--muted)}

/* Instance detail */
.instance-hero h1{font-size:32px;word-break:break-word}
.error-box{
  margin:20px 0 0;
  background:var(--danger-bg);
  color:var(--danger);
  border:1px solid color-mix(in srgb,var(--danger) 24%,var(--line));
  padding:14px;
  border-radius:12px;
  white-space:pre-wrap;
  overflow:auto;
  max-height:260px;
  font-size:12px;
}
.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px 46px;margin:22px 0}
.detail-grid span{display:block;margin-bottom:4px;color:var(--muted);font-size:13px;font-weight:800}
.detail-grid b{display:block;font-size:16px}
.linked-repos{border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:20px 0;margin:20px 0}
.repo-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px;margin-top:14px}
.repo-card{min-width:0;border:1px solid var(--line);border-radius:14px;background:var(--surface-2);padding:16px}
.repo-card.repo-missing{border-color:color-mix(in srgb,var(--danger) 34%,var(--line));background:var(--danger-bg)}
.repo-title b{font-size:16px;word-break:break-word}
.repo-state{border-radius:999px;background:var(--info-bg);color:var(--primary);font-size:12px;font-weight:900;padding:4px 9px;white-space:nowrap}
.repo-missing .repo-state{background:var(--danger-bg);color:var(--danger)}
.repo-card dl{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:14px 0 0}
.repo-card dt{color:var(--muted);font-size:11px;font-weight:900;letter-spacing:.06em;text-transform:uppercase}
.repo-card dd{margin:2px 0 0;font-weight:900;word-break:break-word}
.repo-url{word-break:break-all;margin:12px 0 0}
.action-groups{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:20px}
.action-groups section{border:1px solid var(--line);border-radius:14px;background:var(--surface-2);padding:14px}
.action-groups h3{font-size:13px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin-bottom:10px}
.actions{display:flex;flex-wrap:wrap;gap:9px}
.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.stat-grid-3{grid-template-columns:repeat(3,1fr);margin:16px 0 24px}
.stat{border:1px solid var(--line);border-radius:14px;background:var(--surface-2);padding:17px}
.stat b{display:block;font-size:26px;line-height:1.05}
.stat span,.stat em{display:block;color:var(--muted);font-size:13px;font-style:normal;margin-top:3px}
.storage-summary{margin-top:16px}
.storage-summary b,.section-label{display:block;text-transform:uppercase;letter-spacing:.07em;font-size:12px;margin:0 0 12px}
/* On-demand backup: status banner + downloadable history rows */
.backup-status{display:flex;align-items:center;gap:9px;margin:6px 0 14px;padding:10px 14px;border-radius:10px;font-size:14px;border:1px solid var(--line)}
.backup-status .backup-dot{width:9px;height:9px;border-radius:50%;flex:none;background:currentColor}
.backup-status.working{background:var(--surface-2);color:var(--muted)}
.backup-status.working .backup-dot{animation:livePulse 1.6s infinite}
.backup-status.done{background:var(--success-bg);color:var(--success)}
.backup-status.error{background:var(--danger-bg);color:var(--danger)}
.backup-list{list-style:none;padding:0;margin:0}
.backup-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:9px 0;border-bottom:1px solid var(--line);font-size:13px}
.backup-row:last-child{border-bottom:0}
.backup-row .backup-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;color:var(--muted)}
.split-track{height:10px;background:var(--surface-2);border:1px solid var(--line);border-radius:999px;overflow:hidden;display:flex;margin:12px 0}
.split-track span{background:var(--primary)}
.split-track i{background:#16a085}
.dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin:0 6px 0 14px}
.dot:first-child{margin-left:0}
.violet-bg{background:var(--primary)}
.green-bg{background:#16a085}
.logs{
  background:#0b1020;
  color:#dce6f5;
  border:1px solid #26314d;
  padding:16px;
  border-radius:12px;
  max-height:430px;
  overflow:auto;
  font-size:12px;
  white-space:pre-wrap;
}

/* Filters, empty, repos */
.filters{display:flex;align-items:center;gap:9px;margin:0 0 16px;flex-wrap:wrap}
.filter-chip{
  border:1px solid transparent;
  border-radius:999px;
  background:var(--surface);
  color:var(--muted);
  font-weight:900;
  padding:5px 13px;
  cursor:pointer;
}
.filter-chip.active{color:var(--ink);box-shadow:var(--shadow-sm)}
.filter-chip:not(.active){border-color:#ff5c7a;background:transparent;color:#e23d62}
.empty-state{border:1px dashed var(--line-strong);border-radius:14px;padding:18px;background:var(--surface-2)}
.empty-state p{margin:4px 0 0}
.repo-form{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;align-items:end}
.repo-form .btn{grid-column:1/-1;justify-self:start}
.key-row{display:flex;align-items:center;gap:10px;background:#0b1020;border:1px solid #26314d;border-radius:12px;padding:14px;overflow:hidden}
.key{color:#9cf1c8;font-size:13px;word-break:break-all;flex:1}

/* Modal 3-Tier Architecture */
.modal-backdrop{
  position:fixed;
  inset:0;
  background:rgba(8,12,22,.65);
  display:flex;
  align-items:center;
  justify-content:center;
  padding:16px;
  z-index:999;
  backdrop-filter:blur(6px);
  animation:modalFadeIn .18s ease-out;
  overflow-y:auto;
}
@keyframes modalFadeIn{from{opacity:0}to{opacity:1}}
.modal{
  background:var(--surface);
  border:1px solid var(--line);
  border-radius:20px;
  padding:0;
  width:100%;
  max-width:640px;
  max-height:min(88dvh,760px);
  display:flex;
  flex-direction:column;
  box-shadow:0 24px 70px rgba(0,0,0,.32);
  overflow:hidden;
  animation:modalPop .2s cubic-bezier(.16,1,.3,1);
  margin:auto;
}
@keyframes modalPop{from{transform:scale(.96);opacity:0}to{transform:scale(1);opacity:1}}
.modal > form,
.modal > .modal-form{
  display:flex;
  flex-direction:column;
  flex:1 1 auto;
  min-height:0;
  overflow:hidden;
  margin:0;
}
.modal-header{
  display:flex;
  align-items:center;
  justify-content:space-between;
  padding:18px 24px 14px;
  border-bottom:1px solid var(--line);
  flex-shrink:0;
}
.modal-header h2{margin:0;font-size:20px}
.modal-close,
.modal-close-btn{
  background:transparent;
  border:0;
  color:var(--muted);
  font-size:20px;
  line-height:1;
  padding:6px 10px;
  border-radius:8px;
  cursor:pointer;
  transition:background .15s,color .15s;
}
.modal-close:hover,
.modal-close-btn:hover{background:var(--surface-2);color:var(--ink)}
.modal-body{
  flex:1 1 auto;
  min-height:0;
  overflow-y:auto;
  overscroll-behavior:contain;
  padding:20px 24px;
  scrollbar-width:thin;
  scrollbar-color:var(--line-strong) transparent;
}
.modal-body::-webkit-scrollbar{width:6px}
.modal-body::-webkit-scrollbar-track{background:transparent}
.modal-body::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:99px}
.modal-footer{
  display:flex;
  align-items:center;
  justify-content:flex-end;
  gap:10px;
  padding:14px 24px;
  background:var(--surface-2);
  border-top:1px solid var(--line);
  flex-shrink:0;
}
.shell-modal{max-width:840px}
.shell-modal .modal-body{padding:18px 24px}
.shell-modal .logs{min-height:220px;margin-top:14px}
.modal fieldset{border:1px solid var(--line);border-radius:12px;padding:14px;margin:12px 0}
.modal legend{font-size:12px;color:var(--muted);font-weight:800;padding:0 8px;text-transform:uppercase;letter-spacing:.05em}
.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}

/* Responsive Form Grid */
.form-grid{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:12px 16px;
}
.form-grid label{margin:0}
.form-full,
.col-span-2{
  grid-column:1/-1;
}

/* Toast */
#toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%) translateY(18px);background:#0b1020;color:white;padding:12px 18px;border-radius:12px;opacity:0;transition:.22s;z-index:99;font-weight:800;box-shadow:0 14px 42px rgba(2,6,23,.25)}
#toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

@media(max-width:1100px){
  .auth-shell{grid-template-columns:1fr}
  .auth-visual h1{font-size:38px}
  .kpis{grid-template-columns:repeat(2,1fr)}
  .action-groups{grid-template-columns:repeat(2,1fr)}
  .cards-3{grid-template-columns:1fr}
}
@media(max-width:820px){
  .topbar{display:flex;justify-content:space-between;align-items:center;padding:10px 16px;gap:12px}
  .topbar-left{display:flex;align-items:center;gap:10px}
  .menu-toggle{display:inline-flex}
  .main-nav{display:none}
  .brand-lockup{max-width:130px}
  .brand-lockup img{width:115px!important;max-width:115px!important}
  .top-actions{margin-left:auto;gap:8px}
  .wrap{padding:20px 14px 64px}
  .foot{display:block;padding:0 16px 22px}
  .head-actions{width:100%;justify-content:flex-start;flex-wrap:wrap}
  .bars,.repo-form,.detail-grid,.stat-grid,.stat-grid-3{grid-template-columns:1fr}
  .auth-visual{display:none}
  .auth-shell{min-height:calc(100vh - 80px)}
  .kpis{grid-template-columns:1fr}
  .action-groups{grid-template-columns:1fr}
  .row-between{flex-direction:column}
  .modal{max-height:calc(100dvh - 20px);border-radius:16px;margin:auto}
  .modal-header{padding:14px 18px 12px}
  .modal-body{padding:14px 18px}
  .modal-footer{display:flex;flex-direction:column-reverse;gap:8px;padding:12px 18px}
  .modal-footer .btn{width:100%;min-height:42px}
  .form-grid{grid-template-columns:1fr}
  .col-span-2,
  .form-full{grid-column:auto}
  .actions{align-items:stretch}
  .actions .btn{width:100%}
}
@media(max-width:768px){
  .table-shell{border-radius:14px;border:none;background:transparent;box-shadow:none;overflow-x:visible}
  .responsive-table{display:block;min-width:0;width:100%}
  .responsive-table thead{display:none}
  .responsive-table tbody{display:block;width:100%}
  .responsive-table tr{
    display:block;
    background:var(--surface);
    border:1px solid var(--line);
    border-radius:14px;
    padding:14px 16px;
    margin-bottom:14px;
    box-shadow:var(--shadow-sm);
  }
  .responsive-table tr:hover{background:var(--surface)}
  .responsive-table td{
    display:flex;
    justify-content:space-between;
    align-items:center;
    padding:8px 0;
    border-bottom:1px solid var(--line);
    font-size:13.5px;
    text-align:right;
    word-break:break-word;
  }
  .responsive-table td:last-child{border-bottom:none;padding-bottom:2px}
  .responsive-table td::before{
    content:attr(data-label);
    font-size:11px;
    font-weight:800;
    color:var(--muted);
    text-transform:uppercase;
    letter-spacing:.06em;
    text-align:left;
    flex-shrink:0;
    margin-right:12px;
  }
  .responsive-table td:empty{display:none}
  .responsive-table .action-cell{
    margin-top:10px;
    padding-top:12px;
    border-top:1px solid var(--line);
    display:flex;
    justify-content:flex-end;
    gap:8px;
    flex-wrap:wrap;
  }
  .responsive-table .action-cell::before{display:none}
  .responsive-table .action-cell .btn{margin-left:0;flex:1;min-height:36px}
  /* .grid.embedded sets min-width:860 at a higher specificity than .responsive-table —
     override it here so the stacked cards can actually shrink to the viewport */
  .grid.embedded.responsive-table{min-width:0}
  /* a hidden row (e.g. the webhook panel) must stay hidden — the block display above
     would otherwise reveal it */
  .responsive-table tr[hidden]{display:none}
  /* rich cells (URL, modules) read better full-width, label above the value */
  .responsive-table td.cell-block{display:block;text-align:left}
  .responsive-table td.cell-block::before{display:block;margin:0 0 6px}
  .mod-chips{max-width:100%}
  /* webhook config panel: attach it under its repo card, full width, no label */
  .responsive-table tr.webhook-row{margin-top:-14px;border-top-left-radius:0;border-top-right-radius:0;padding-top:6px}
  .responsive-table .webhook-cell{display:block;text-align:left;padding:6px 0 2px}
  .responsive-table .webhook-cell::before{display:none}
  .webhook-panel .wh-grid{grid-template-columns:1fr}
  /* empty state: a plain centered block, not a bordered pseudo-card row */
  .responsive-table tr.empty-row{border:none;background:transparent;box-shadow:none;padding:0}
  .responsive-table tr.empty-row td{display:block;text-align:center;border:none;padding:0}
  .responsive-table tr.empty-row td::before{display:none}
  /* audit: the expandable detail panel attaches under its row card, full width */
  .responsive-table tr.audit-detail{margin-top:-14px;border-top-left-radius:0;border-top-right-radius:0;padding-top:6px}
  .responsive-table td.audit-detail-cell{display:block;text-align:left;padding:6px 0 2px}
  .responsive-table td.audit-detail-cell::before{display:none}
  .kv{grid-template-columns:1fr}
  .audit-when .t-time{display:inline;margin-left:6px}
}
@media(max-width:520px){
  h1{font-size:28px}
  .card{padding:18px;border-radius:16px}
  .card.auth{padding:24px}
  .auth-logo{width:160px!important;max-width:160px!important}
  .btn{width:100%}
  .top-actions .btn{width:auto}
  .repo-card dl{grid-template-columns:1fr}
}

/* ── Customer app (multi-tenant P1) ── */
.card.auth .auth-brand{display:flex;justify-content:center;margin-bottom:20px}
.card.auth .auth-brand img{display:block;width:150px;height:auto;max-height:44px;object-fit:contain}
html.dark .card.auth .auth-brand img{background:#fff;border:1px solid rgba(203,213,225,.6);border-radius:12px;padding:8px 12px}
.app-topbar .app-account{justify-self:center;font-weight:800;color:var(--ink)}
/* focused customer auth card (operator login uses .auth-shell instead) */
.card.auth{max-width:430px;margin:7vh auto;padding:34px 34px 30px}
@media(max-width:520px){.card.auth{margin:3vh auto;padding:26px 22px}}

/* ── search input + pager (audit, instances) ── */
.search-input{min-width:280px;max-width:360px;padding:9px 13px;border:1px solid var(--line);
  border-radius:10px;background:var(--surface-2);color:var(--ink);min-height:40px}
.search-input:focus{border-color:var(--primary);box-shadow:var(--focus);outline:0;background:var(--surface)}
.pager{display:flex;align-items:center;justify-content:flex-end;gap:10px;margin-top:16px}
.tag.neutral{background:var(--surface-2);color:var(--muted)}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}

/* ── Audit log ── */
.audit-grid td{padding:13px 16px}
.audit-grid th{padding:12px 16px}
.audit-when{white-space:nowrap}
.audit-when .t-date{font-weight:600}
.audit-when .t-time{display:block;margin-top:1px}
.audit-action{display:inline-flex;align-items:center;gap:9px;font-weight:600}
.cat-dot{width:8px;height:8px;border-radius:50%;flex:none;background:var(--muted)}
.cat-auth{background:#7c5cff}.cat-instance{background:#3b82f6}.cat-account{background:#d97706}
.cat-repo{background:#0d9488}.cat-backup{background:#16a34a}.cat-system{background:#64748b}
.detail-toggle{display:inline-flex;align-items:center;gap:6px;max-width:100%;
  background:var(--surface-2);border:1px solid var(--line);color:var(--ink);
  font-size:12.5px;border-radius:8px;padding:5px 10px;cursor:pointer;min-height:32px}
.detail-toggle:hover{border-color:var(--primary)}
.detail-toggle:focus-visible{outline:0;box-shadow:var(--focus)}
.detail-toggle .chev{font-size:10px;color:var(--muted);transition:transform .15s}
.detail-toggle[aria-expanded="true"] .chev{transform:rotate(180deg)}
.audit-grid td.audit-detail-cell{background:var(--surface-2);padding:14px 18px}
.kv{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px 24px;margin:0}
.kv>div{display:flex;flex-direction:column;gap:2px;min-width:0}
.kv dt{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:800}
.kv dd{margin:0;font-size:13px;color:var(--ink);overflow-wrap:anywhere}

/* Repositories table — long names/URLs/branches + expandable module list */
.repo-name{margin-right:8px;overflow-wrap:anywhere}
.branch-name{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;overflow-wrap:anywhere}
.repo-url-cell{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;overflow-wrap:anywhere;word-break:break-word}
.mod-list>summary{display:inline-flex;align-items:center;gap:8px;cursor:pointer;list-style:none;
  font-size:13px;color:var(--muted);border-radius:8px;padding:2px 4px;margin-left:-4px}
.mod-list>summary::-webkit-details-marker{display:none}
.mod-list>summary::after{content:"▾";font-size:11px;color:var(--muted);transition:transform .15s}
.mod-list[open]>summary::after{transform:rotate(180deg)}
.mod-list>summary:focus-visible{outline:0;box-shadow:var(--focus)}
.mod-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px;max-width:560px}
.mod-chip{font-family:ui-monospace,monospace;font-size:11.5px;background:var(--surface-2);
  border:1px solid var(--line);color:var(--ink);border-radius:6px;padding:2px 7px;overflow-wrap:anywhere}

/* auto-update webhook panel (repos page) */
.webhook-row>td{background:var(--surface-2);padding:16px 18px}
.webhook-panel{display:block}
.webhook-panel .wh-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:8px 0}
.webhook-panel .wh-grid input{width:100%;font-family:ui-monospace,monospace;font-size:12px}
.webhook-panel .row-gap{display:flex;gap:8px;margin-top:10px}
.dot-on{color:var(--green,#16a34a);font-size:11px;vertical-align:middle}

/* per-instance deploy history (auto-update timeline) */
.deploy-filters{display:flex;gap:8px;margin:4px 0 14px}
.deploy-day{font-size:11px;font-weight:600;letter-spacing:.05em;color:var(--muted);margin:14px 0 8px}
.deploy-item{display:flex;gap:12px;padding:0 0 4px}
.deploy-dot{flex:none;width:26px;height:26px;border-radius:50%;display:grid;place-items:center;font-size:13px;color:#fff;background:var(--muted)}
.deploy-dot.running{background:var(--green,#16a34a)}
.deploy-dot.error{background:var(--danger,#dc2626)}
.deploy-dot.working{background:var(--violet,#7c3aed)}
.deploy-body{flex:1;min-width:0;background:var(--surface-2);border-radius:10px;padding:12px 14px;margin-bottom:10px}
.deploy-top{display:flex;align-items:center;gap:8px}
.deploy-msg{margin:6px 0 4px;font-weight:500}
.deploy-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.deploy-meta code{font-size:12px;background:var(--surface);padding:1px 6px;border-radius:5px}
