
.app-header{position:sticky;top:0;z-index:60;height:58px;border-bottom:1px solid var(--border-primary);background:color-mix(in srgb,var(--bg-secondary) 94%,transparent);display:flex;align-items:center;justify-content:space-between;padding:0 14px 0 16px}.brand{display:inline-flex;align-items:center;gap:10px;font-weight:700;letter-spacing:-.015em}.brand img{width:28px;height:28px;object-fit:contain}.header-actions{display:flex;align-items:center;gap:7px}.connection-compact{padding:0 8px;height:32px;display:flex;align-items:center;border-right:1px solid var(--border-secondary);margin-right:2px}.mobile-menu{display:none}.app-shell{display:grid;grid-template-columns:220px minmax(0,1fr);min-height:calc(100vh - 58px)}.sidebar{position:sticky;top:58px;height:calc(100vh - 58px);background:var(--bg-sidebar);border-right:1px solid var(--border-primary);padding:14px 10px 12px;display:flex;flex-direction:column;transition:width var(--transition-fast);overflow:hidden}.sidebar-nav{display:grid;gap:3px}.nav-section-label{font-size:.64rem;text-transform:uppercase;letter-spacing:.11em;color:var(--text-muted);padding:8px 10px 7px}.nav-item{position:relative;display:flex;align-items:center;gap:10px;height:38px;padding:0 10px;border-radius:var(--radius-sm);color:var(--text-secondary);font-size:.8rem;white-space:nowrap;transition:background var(--transition-fast),color var(--transition-fast)}.nav-item:hover{background:var(--bg-hover);color:var(--text-primary)}.nav-item[aria-current="page"]{background:var(--accent-soft);color:var(--text-primary)}.nav-item[aria-current="page"]::before{content:"";position:absolute;left:-1px;top:8px;bottom:8px;width:2px;background:var(--accent);border-radius:2px}.nav-item .icon{color:var(--text-muted)}.nav-item[aria-current="page"] .icon{color:var(--accent-strong)}.sidebar-footer{margin-top:auto;padding-top:12px;border-top:1px solid var(--border-secondary)}.collapse-btn{width:100%;justify-content:flex-start}.app-shell[data-collapsed="true"]{grid-template-columns:64px minmax(0,1fr)}.app-shell[data-collapsed="true"] .sidebar{padding-inline:8px}.app-shell[data-collapsed="true"] .nav-section-label,.app-shell[data-collapsed="true"] .nav-label,.app-shell[data-collapsed="true"] .collapse-btn span{display:none}.app-shell[data-collapsed="true"] .nav-item{justify-content:center;padding:0}.app-shell[data-collapsed="true"] .collapse-btn{justify-content:center}.page{min-width:0;padding:24px clamp(18px,2.5vw,34px) 38px}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:20px}.page-title{font-size:1.35rem;letter-spacing:-.025em;margin:0 0 5px;font-weight:680}.page-subtitle{font-size:.8rem;color:var(--text-muted);margin:0;line-height:1.5}.page-actions{display:flex;gap:8px;align-items:center}.grid{display:grid;gap:14px}.overview-grid{grid-template-columns:minmax(0,1.15fr) minmax(280px,.85fr)}.stats-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.stat-block{padding:13px 14px;background:var(--bg-secondary);border:1px solid var(--border-secondary);border-radius:var(--radius-sm)}.stat-label{font-size:.68rem;text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted);margin-bottom:7px}.stat-value{font-size:1rem;font-weight:650;letter-spacing:-.01em}.stat-note{font-size:.72rem;color:var(--text-muted);margin-top:4px}.kv-list{display:grid}.kv-row{display:grid;grid-template-columns:minmax(120px,1fr) minmax(120px,1.2fr);gap:14px;padding:9px 0;border-bottom:1px solid var(--border-secondary);font-size:.78rem}.kv-row:last-child{border-bottom:0}.kv-row dt{color:var(--text-muted)}.kv-row dd{margin:0;text-align:right;color:var(--text-secondary)}.event-list{display:grid}.event-row{display:grid;grid-template-columns:82px 16px minmax(0,1fr);gap:8px;align-items:start;padding:9px 0;border-bottom:1px solid var(--border-secondary);font-size:.76rem}.event-row:last-child{border-bottom:0}.event-time{color:var(--text-muted);font-family:var(--font-mono);font-size:.7rem}.event-marker{width:6px;height:6px;border-radius:50%;background:var(--text-muted);margin-top:5px}.event-marker.success{background:var(--success)}.event-marker.warning{background:var(--warning)}.event-marker.info{background:var(--info)}.event-title{color:var(--text-primary)}.event-detail{color:var(--text-muted);margin-top:2px}.section-spacer{margin-top:14px}.toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px}.toolbar .search-control{min-width:220px;flex:1}.filter-chip{height:32px;padding:0 10px;font-size:.72rem;color:var(--text-secondary)}.filter-chip[aria-pressed="true"]{background:var(--accent-soft);border-color:color-mix(in srgb,var(--accent),var(--border-primary) 55%);color:var(--accent-strong)}.table-wrap{overflow:auto;border:1px solid var(--border-primary);border-radius:var(--radius-md);background:var(--bg-elevated)}table{width:100%;border-collapse:collapse;min-width:720px;font-size:.76rem}th{text-align:left;color:var(--text-muted);font-size:.68rem;text-transform:uppercase;letter-spacing:.07em;font-weight:700;background:var(--bg-secondary);position:sticky;top:0;z-index:2}th,td{padding:10px 12px;border-bottom:1px solid var(--border-secondary)}tbody tr{transition:background var(--transition-fast)}tbody tr:hover{background:var(--bg-hover)}tbody tr:last-child td{border-bottom:0}th.sortable{cursor:pointer;user-select:none}th.sortable::after{content:"";display:inline-block;margin-left:6px;border:3px solid transparent;border-top-color:var(--text-muted);transform:translateY(2px)}th.sortable[data-dir="asc"]::after{border-top-color:transparent;border-bottom-color:var(--accent);transform:translateY(-1px)}th.sortable[data-dir="desc"]::after{border-top-color:var(--accent)}.row-actions{display:flex;justify-content:flex-end}.table-name{font-weight:650;color:var(--text-primary)}.type-text{color:var(--text-secondary)}.logs-shell{display:grid;grid-template-rows:auto minmax(360px,calc(100vh - 260px));border:1px solid var(--border-primary);border-radius:var(--radius-md);background:var(--bg-elevated);overflow:hidden}.logs-toolbar{display:flex;align-items:center;gap:8px;padding:10px;border-bottom:1px solid var(--border-primary);background:var(--bg-secondary);flex-wrap:wrap}.logs-toolbar .control{height:32px}.log-levels{display:flex;gap:4px;flex-wrap:wrap}.log-view{overflow:auto;padding:8px 0;font-family:var(--font-mono);font-size:.72rem;line-height:1.55;background:var(--bg-primary)}.log-row{display:grid;grid-template-columns:90px 70px minmax(0,1fr) 34px;gap:8px;padding:5px 10px;border-left:2px solid transparent;align-items:start}.log-row:hover{background:var(--bg-hover)}.log-time{color:var(--text-muted)}.log-level{font-weight:700;letter-spacing:.02em}.log-level.info{color:var(--info)}.log-level.success{color:var(--success)}.log-level.warning{color:var(--warning)}.log-level.error{color:var(--danger)}.log-level.debug{color:var(--text-muted)}.log-message{color:var(--text-secondary);white-space:pre-wrap;word-break:break-word}.log-copy{width:28px;height:24px;opacity:.4}.log-row:hover .log-copy{opacity:1}.config-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:14px}.config-group{padding:15px}.config-group h2{font-size:.84rem;margin:0 0 4px}.config-group>p{font-size:.74rem;color:var(--text-muted);margin:0 0 16px;line-height:1.45}.setting-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:16px;align-items:center;padding:11px 0;border-top:1px solid var(--border-secondary)}.setting-row:first-of-type{border-top:0}.setting-name{font-size:.78rem;font-weight:600}.setting-desc{font-size:.71rem;color:var(--text-muted);margin-top:3px}.setting-control{min-width:130px}.runtime-banner{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid var(--border-primary);border-radius:var(--radius-md);background:var(--bg-elevated);margin-bottom:14px}.runtime-banner strong{font-size:.82rem}.runtime-banner p{margin:2px 0 0;font-size:.73rem;color:var(--text-muted)}.runtime-banner .status-dot{width:8px;height:8px}.drawer-backdrop{display:none}.tooltip{position:fixed;z-index:1300;padding:5px 7px;border-radius:var(--radius-xs);background:var(--text-primary);color:var(--bg-primary);font-size:.68rem;pointer-events:none;transform:translateY(-50%)}

/* Smooth desktop sidebar collapse / expand. */
.app-shell[data-sidebar-ready="true"]{
  transition:grid-template-columns 240ms cubic-bezier(.22,.7,.2,1);
}
.sidebar{
  width:100%;
  min-width:0;
  transition:padding 240ms cubic-bezier(.22,.7,.2,1),background-color 160ms ease,border-color 160ms ease;
}
.nav-section-label{
  display:block;
  max-height:34px;
  opacity:1;
  overflow:hidden;
  transform:translateX(0);
  transition:max-height 210ms cubic-bezier(.22,.7,.2,1),padding 210ms cubic-bezier(.22,.7,.2,1),opacity 140ms ease,transform 210ms cubic-bezier(.22,.7,.2,1);
}
.nav-item{
  justify-content:flex-start;
  transition:background var(--transition-fast),color var(--transition-fast),padding 240ms cubic-bezier(.22,.7,.2,1),gap 200ms ease;
}
.nav-label,.collapse-btn span{
  display:inline-block;
  max-width:150px;
  opacity:1;
  overflow:hidden;
  transform:translateX(0);
  transition:max-width 210ms cubic-bezier(.22,.7,.2,1),opacity 130ms ease,transform 210ms cubic-bezier(.22,.7,.2,1);
}
.collapse-btn .icon{transition:transform 240ms cubic-bezier(.22,.7,.2,1)}
.app-shell[data-collapsed="true"] .nav-section-label{
  display:block;
  max-height:0;
  padding-top:0;
  padding-bottom:0;
  opacity:0;
  transform:translateX(-5px);
}
.app-shell[data-collapsed="true"] .nav-label,
.app-shell[data-collapsed="true"] .collapse-btn span{
  display:inline-block;
  max-width:0;
  opacity:0;
  transform:translateX(-5px);
}
.app-shell[data-collapsed="true"] .nav-item{
  justify-content:flex-start;
  gap:0;
  padding-left:15px;
  padding-right:15px;
}
.app-shell[data-collapsed="true"] .collapse-btn{
  justify-content:flex-start;
  gap:0;
  padding-left:15px;
  padding-right:15px;
}
.app-shell[data-collapsed="true"] .collapse-btn .icon{transform:rotate(180deg)}


/* V1.6 — stable smooth sidebar and explicit settings control */
.app-header [data-settings-trigger]{display:inline-grid!important;place-items:center;width:36px;height:36px;min-width:36px;color:var(--text-secondary);overflow:visible}
.app-header [data-settings-trigger] .icon{display:block;width:19px;height:19px;color:currentColor}
.app-header [data-settings-trigger]:hover{color:var(--text-primary)}

.app-shell[data-sidebar-ready="true"]{transition:grid-template-columns 260ms cubic-bezier(.22,.7,.2,1)}
.sidebar{width:100%;min-width:0;transition:padding 260ms cubic-bezier(.22,.7,.2,1),background-color 160ms ease,border-color 160ms ease}
.sidebar-nav{min-width:0}
.nav-item{display:grid;grid-template-columns:20px minmax(0,1fr);align-items:center;justify-content:stretch;gap:10px;width:100%;padding:0 10px;transition:background var(--transition-fast),color var(--transition-fast),padding 260ms cubic-bezier(.22,.7,.2,1),gap 220ms ease,width 260ms cubic-bezier(.22,.7,.2,1),margin 260ms cubic-bezier(.22,.7,.2,1)}
.nav-item .icon{width:18px;height:18px;justify-self:center;flex:none}
.nav-label{display:block;min-width:0;max-width:150px;opacity:1;overflow:hidden;transform:translateX(0);transition:max-width 220ms cubic-bezier(.22,.7,.2,1),opacity 140ms ease,transform 220ms cubic-bezier(.22,.7,.2,1)}
.nav-section-label{display:block;max-height:34px;opacity:1;overflow:hidden;transform:translateX(0);transition:max-height 220ms cubic-bezier(.22,.7,.2,1),padding 220ms cubic-bezier(.22,.7,.2,1),opacity 140ms ease,transform 220ms cubic-bezier(.22,.7,.2,1)}
.collapse-btn{min-width:0;transition:padding 260ms cubic-bezier(.22,.7,.2,1),width 260ms cubic-bezier(.22,.7,.2,1),margin 260ms cubic-bezier(.22,.7,.2,1)}
.collapse-btn .icon{width:18px;height:18px;flex:none;transition:transform 260ms cubic-bezier(.22,.7,.2,1)}
.collapse-btn span{display:inline-block;max-width:150px;opacity:1;overflow:hidden;white-space:nowrap;transition:max-width 220ms cubic-bezier(.22,.7,.2,1),opacity 140ms ease,transform 220ms cubic-bezier(.22,.7,.2,1)}

.app-shell[data-collapsed="true"]{grid-template-columns:72px minmax(0,1fr)}
.app-shell[data-collapsed="true"] .sidebar{padding-inline:10px}
.app-shell[data-collapsed="true"] .nav-section-label{display:block;max-height:0;padding-top:0;padding-bottom:0;opacity:0;transform:translateX(-5px)}
.app-shell[data-collapsed="true"] .nav-item{grid-template-columns:20px 0fr;gap:0;width:44px;margin-inline:auto;padding-inline:12px}
.app-shell[data-collapsed="true"] .nav-label{display:block;max-width:0;opacity:0;transform:translateX(-5px)}
.app-shell[data-collapsed="true"] .collapse-btn{width:44px;margin-inline:auto;justify-content:center;padding-inline:12px;gap:0}
.app-shell[data-collapsed="true"] .collapse-btn span{display:inline-block;max-width:0;opacity:0;transform:translateX(-5px)}
.app-shell[data-collapsed="true"] .collapse-btn .icon{transform:rotate(180deg)}

/* V1.7 — soft dashboard route handoff */
#main-content{
  transform-origin:top center;
  will-change:opacity,transform,filter;
}
@media(prefers-reduced-motion:reduce){
  #main-content{will-change:auto}
}

/* V1.8 — Veyra Hub live bridge */
.runtime-connect-panel{grid-column:1/-1}
.pair-layout{display:grid;grid-template-columns:minmax(220px,.8fr) minmax(420px,1.2fr);gap:24px;align-items:end}
.pair-controls{display:grid;grid-template-columns:minmax(260px,1fr) auto auto;gap:8px;align-items:center}
.pair-key-input{width:100%;letter-spacing:.035em;text-transform:uppercase}
.pair-status{margin-top:12px;padding-top:11px;border-top:1px solid var(--border-secondary)}
.runtime-banner.is-live{border-color:color-mix(in srgb,var(--success) 28%,var(--border-primary));background:color-mix(in srgb,var(--success) 5%,var(--bg-elevated))}
.runtime-banner.is-live .status-dot{background:var(--success)}
.live-stats-panel{grid-column:1/-1}
.live-metric-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.compact-empty{min-height:150px}
.compact-empty .btn{margin-top:14px}
.status.warning .status-dot{background:var(--warning)}

@media(max-width:1050px){.pair-layout{grid-template-columns:1fr}.pair-controls{grid-template-columns:minmax(0,1fr) auto auto}.live-metric-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:700px){.pair-controls{grid-template-columns:1fr 1fr}.pair-key-input{grid-column:1/-1}.live-metric-grid{grid-template-columns:1fr}.runtime-connect-panel{grid-column:auto}}
