/* Control Tower only. Shared Fovian styles come from Desktop Bridge/desktop_bridge/ui/app.css,
   served at /assets/shared/app.css (one copy, owner 20 Oct 2026). */
/* ---------- Control Tower additions ---------- */
.tower{display:grid;grid-template-columns:240px minmax(0,1fr);min-height:100vh}
.side{border-right:1px solid var(--line-soft);padding:22px 16px;display:flex;flex-direction:column;gap:4px;background:#191919;position:sticky;top:0;height:100vh}
.side .brand{margin-bottom:2px}
.side .product{font-size:12px;color:var(--muted);margin:0 0 18px 38px}
.side a.nav{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:6px;color:var(--text-2);text-decoration:none}
.side a.nav[aria-current=page]{background:var(--raised);color:var(--text-strong)}
.side a.nav:hover{color:var(--text)}
.side .badge{margin-left:auto;font-size:11px;background:var(--warn);color:#111;border-radius:999px;padding:0 7px;font-weight:700}
.side .foot{margin-top:auto;font-size:12px;color:var(--muted);display:flex;flex-direction:column;gap:10px}
.tmain{padding:24px 32px 48px;min-width:0;margin:0;max-width:none;width:100%}
.thead{display:flex;align-items:center;gap:12px;margin-bottom:20px;flex-wrap:wrap}
.thead h1{font-size:22px;margin:0;color:var(--text-strong);font-weight:600}
.thead .right{margin-left:auto;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.toolbar{display:flex;gap:8px;flex-wrap:wrap;align-items:flex-end;margin-bottom:12px}
.toolbar .grow{flex:1;min-width:200px}
.form-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;align-items:end}
.secret{font:12px ui-monospace,Menlo,monospace;background:var(--raised);border:1px solid var(--line);border-radius:6px;padding:10px;word-break:break-all;color:var(--text)}
.sub-strong{color:var(--text-strong);font-weight:600}
.row-actions{display:flex;gap:6px;justify-content:flex-end;flex-wrap:wrap}
.hidden-by-role{display:none!important}
@media(max-width:1000px){.tower{grid-template-columns:1fr}.side{position:static;height:auto;flex-direction:row;flex-wrap:wrap;align-items:center}.side .product{display:none}.side .foot{margin:0 0 0 auto;flex-direction:row;align-items:center}.side .foot > :not(#lock){display:none}.form-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
.mt{margin-top:14px}
/* one app: the Bridge dashboard as a section of the console */
body.read-only .staff-only,body.read-only #refreshNow{display:none!important}
body.on-dashboard .tmain{padding:0}
.dash-view .alerts{margin:16px}
.dash-frame{display:block;width:100%;height:100vh;border:0;background:var(--bg)}
.dash-frame[hidden]{display:none}
.product-choice{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.product-choice .choice{display:flex;flex-direction:column;align-items:flex-start;gap:3px;padding:12px 14px;border:1px solid var(--line);border-radius:8px;background:var(--raised);color:var(--text-2);cursor:pointer;text-align:left}
.product-choice .choice b{color:var(--text-strong);font-size:14px}
.product-choice .choice span{font-size:12px}
.product-choice .choice[aria-checked=true]{border-color:var(--text-strong);background:#303030}
/* the card keeps one size whichever product is chosen */
#gateIntro{line-height:1.5;min-height:4.5em}
.product-choice .choice{min-height:72px;justify-content:flex-start}
.side .nav-group{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:14px 12px 4px}
/* menu: home link, collapse toggle, Control Tower sign-in for read-only visitors (owner, 19 Oct 2026) */
.read-only-only{display:none!important}
body.read-only a.nav.read-only-only{display:flex!important}
body.read-only .nav-group.read-only-only{display:block!important}
.side-top{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:2px}
.side-toggle{width:28px;height:28px;padding:0;display:grid;place-items:center;flex:none}
@media(min-width:1001px){
  .tower.collapsed{grid-template-columns:56px minmax(0,1fr)}
  .tower.collapsed .side{padding:22px 8px;align-items:center}
  .tower.collapsed .side>:not(.side-top){display:none!important}
  .tower.collapsed .side-top{flex-direction:column;gap:14px}
  .tower.collapsed .wordmark{display:none}
  .tower.collapsed .side-toggle svg{transform:rotate(180deg)}
}
@media(max-width:1000px){.side-toggle{display:none}}
/* keyless read-only: nothing to sign out of; the logo returns to sign-in */
body.read-only #lock{display:none!important}
/* viewer tokens: Metrics only (the server refuses the rest); Sign out stays, it is a real sign-in */
body.metrics-only .staff-only,body.metrics-only #refreshNow{display:none!important}
body.metrics-only a.nav.read-only-only{display:flex!important}
body.metrics-only .nav-group.read-only-only{display:block!important}
/* Metrics status in the left menu: wraps rather than overflowing */
#connection{white-space:normal;max-width:100%;line-height:1.35;height:auto;min-height:28px;padding-top:4px;padding-bottom:4px}
/* one app bell, top of the left menu (owner, 20 Oct 2026) */
.app-bell{position:relative;width:28px;height:28px;padding:0;display:grid;place-items:center;flex:none;margin-left:auto}
.app-bell .bell-count{position:absolute;top:-6px;right:-7px;min-width:16px;height:16px;padding:0 4px;border-radius:999px;background:var(--note,#666);color:#111;font-size:10px;font-weight:700;display:grid;place-items:center}
.app-bell.has-unread .bell-count{background:#9aa0a6}
.app-bell.has-serious .bell-count{background:var(--warn)}
.app-bell-panel{position:fixed;z-index:60;width:min(500px,calc(100vw - 32px));max-height:80vh;overflow:auto}
.bell-group{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:12px 4px 6px}
@media(max-width:1000px){.app-bell-panel{left:16px!important;top:64px!important}}
.field.check{flex-direction:row;align-items:center;gap:8px;align-self:end;min-height:var(--control-h,40px);font-size:13px;color:var(--text-2,inherit);cursor:pointer}
/* Metrics source in the menu: the one showing is marked; aria-current still marks the page */
.side a.nav.metrics-source[aria-current=page]:not(.source-on){background:none;color:var(--text-2)}
#collectorHint{grid-column:span 2;margin:0}
#buildGo{grid-column:-2 / -1}
