[hidden]{display:none!important}
:root{
  --glass:rgba(255,255,255,.85);
  --header-bg:#d3374a; --header-text:#fff; --page-bg:#fff; --text:#5e1821; --muted:#6f5d5f;
  --border:#e4dadb; --soft:#f8f5f5; --gold:#b8892b; --radius:14px; --shadow:0 2px 12px rgba(27,6,8,.08);
  --header-h:96px; --foot-h:46px; --news-h:44px; --ev-h:46px;
  --panel:#fff; --hover:#f6eff0; --chip:#f0e9e9; --chip-text:#452b2e; --link:#881f2b; --stage-bg:#ffffff; --head-col:#d3374a;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-padding-top:var(--header-h)}
body{font-family:Inter,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;background:var(--page-bg);color:var(--text);line-height:1.45;padding-top:var(--header-h);min-height:100vh}
a{color:var(--link)}
/* ---- header: mirrors AI in Management readings site ---- */
.site-header{position:fixed;top:0;left:0;right:0;z-index:1000;color:var(--header-text);box-shadow:0 2px 16px rgba(0,0,0,.35);
  background-color:var(--header-bg);background-image:url("cardiff-banner-photo.webp");background-size:cover;background-position:center center;background-repeat:no-repeat;min-height:var(--header-h);overflow:hidden}
/* digital decay: the photo is pre-rendered (make_banner.py) as a left->right mosaic that turns into 1s and 0s; the ::before layer is a sparse set of brighter digits that pulses (compositor-only opacity) */
.site-header::before,.site-header::after{content:"";position:absolute;inset:0;pointer-events:none;z-index:0}
.site-header::before{background:url("cardiff-banner-bits.webp") center center/cover no-repeat;opacity:.3;animation:bitspulse 8s ease-in-out infinite;will-change:opacity}
.site-header::after{background:linear-gradient(90deg,rgba(27,6,8,0) 0,rgba(27,6,8,.10) 55%,rgba(27,6,8,.22) 100%)}
html.dark .site-header::after{background:linear-gradient(90deg,rgba(27,9,11,.22) 0,rgba(27,9,11,.34) 50%,rgba(27,9,11,.5) 100%)}
html.dark .site-header::before{filter:brightness(.8)}
@keyframes bitspulse{0%,100%{opacity:.12}50%{opacity:.62}}
@media (prefers-reduced-motion:reduce){.site-header::before{animation:none;opacity:.3}}
.header-inner{position:relative;z-index:1;margin:0 auto;padding:1.1rem 1.5rem;display:flex;align-items:center;justify-content:space-between;gap:1.5rem;flex-wrap:wrap;min-height:var(--header-h)}
.header-titles{display:flex;flex-direction:column;align-items:flex-start;gap:.4rem}
.lozenge{display:inline-block;background:var(--header-bg);color:#fff;border-radius:999px;padding:.12em .45em;line-height:1.15;box-decoration-break:clone;-webkit-box-decoration-break:clone}
.header-titles h1{font-size:1.55rem;font-weight:700;letter-spacing:.02em;line-height:1.15}
.header-titles .subheader{font-size:.95rem;font-weight:500}
.header-credit{text-align:right;font-size:.9rem;line-height:1.4;flex-shrink:0;display:flex;flex-direction:column;align-items:flex-end;gap:.35rem}
.header-credit a{color:#fff;text-decoration:none;font-weight:500}
.header-credit .uni-switch a.us-opt{font-weight:700}
.header-credit .uni-switch a.us-opt:hover{text-decoration:none}
.header-credit a:hover{text-decoration:underline}
.header-credit .site-url{font-size:.8rem}
/* Gen-AI disclaimer: small white note, bottom-right of the bar, two rows; faint dark-blue scrim + shadow keep it legible on the banner; never takes clicks */
.gen-note{position:absolute;right:1.5rem;bottom:2px;z-index:1;margin:0;padding:1px 7px;display:flex;flex-direction:column;align-items:flex-end;text-align:right;font-size:10px;line-height:1.2;font-weight:500;color:#fff;
  background:rgba(27,6,8,.5);border-radius:6px;text-shadow:0 1px 2px rgba(0,0,0,.9),0 0 3px rgba(0,0,0,.7);pointer-events:none;user-select:none;white-space:nowrap}
html.dark .gen-note{background:rgba(27,9,11,.6)}

/* ---- app layout (landscape) ---- */
.app{display:grid;grid-template-columns:290px minmax(0,1fr) 340px;grid-template-rows:minmax(0,1fr);
  grid-template-areas:"left centre right";gap:10px;padding:10px 12px 6px;height:calc(100vh - var(--header-h) - var(--news-h) - var(--ev-h));min-height:640px}
.left{grid-area:left;display:flex;flex-direction:column;gap:10px;min-height:0}
.right{grid-area:right;display:flex;flex-direction:column;gap:10px;min-height:0}
.centre{grid-area:centre;display:flex;flex-direction:column;min-height:0;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);background:var(--panel)}
.box{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);display:flex;flex-direction:column;min-height:0;overflow:hidden}
#faculty-box{flex:1 1 0;min-height:112px}  /* fills all the left-column space under the type buttons; its list scrolls inside */
#papers-box{flex:1 1 auto}
#explore-box{flex:0 0 auto}
.box-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;padding:9px 12px 7px;border-bottom:1px solid var(--border);background:var(--soft)}
.box-head h2,.types-head h2{font-size:.8rem;text-transform:uppercase;letter-spacing:.08em;font-weight:700;color:var(--head-col)}
.hint{font-size:.72rem;color:var(--muted)}
.box-body{overflow:auto;padding:6px 6px 10px;font-size:.83rem;min-height:0;flex:1}
.x{border:0;background:none;font-size:1.3rem;line-height:1;cursor:pointer;color:var(--muted)}

/* faculty + college lists */
.row{display:flex;align-items:center;gap:6px;width:100%;border:0;background:none;text-align:left;padding:5px 7px;border-radius:8px;cursor:pointer;font:inherit;color:inherit}
.row:hover{background:var(--hover)}
.row.active{background:var(--header-bg);color:#fff}
.row.active .count{background:#fff;color:var(--header-bg)}
.row .lbl{flex:1;min-width:0}
.row .count{font-size:.72rem;font-weight:600;background:var(--chip);color:var(--chip-text);border-radius:999px;padding:1px 7px}
.row.div{font-weight:600}
.row.dept{padding-left:24px;font-size:.8rem;color:var(--muted)}
.row.dept.active{color:#fff}
.caret{width:14px;display:inline-block;color:var(--muted);font-size:.7rem;transition:transform .15s}
.open>.row .caret{transform:rotate(90deg)}
.depts{display:none}
.open>.depts{display:block}
.row.all{font-weight:700}
.kinds{display:flex;gap:3px}
.kind{width:8px;height:8px;border-radius:50%}
.k-hosted{background:#d3374a}.k-partner{background:#b8892b}.k-people{background:#b49ea1}

/* toolbar */
.toolbar{display:flex;align-items:center;gap:8px;padding:7px 10px;border-bottom:1px solid var(--border);flex-wrap:wrap;position:relative;z-index:5;background:var(--panel)}
.search-wrap{position:relative;flex:1;min-width:180px;max-width:380px}
#search{width:100%;padding:7px 11px;border:1px solid var(--border);border-radius:999px;font:inherit;font-size:.85rem;background:var(--panel);color:var(--text)}
#search:focus{outline:2px solid #0b4f9c33;border-color:#881f2b}
.search-results{position:absolute;top:110%;left:0;right:0;background:var(--panel);border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 30px rgba(27,6,8,.18);max-height:340px;overflow:auto;z-index:50}
.search-results button{display:block;width:100%;text-align:left;border:0;background:none;padding:7px 10px;font:inherit;font-size:.82rem;cursor:pointer;color:var(--text)}
.search-results button:hover,.search-results button.hl{background:var(--hover)}
.search-results small{color:var(--muted)}
.filter-chip{display:inline-flex;align-items:center;gap:6px;background:var(--header-bg);color:#fff;border-radius:999px;padding:4px 6px 4px 11px;font-size:.78rem;max-width:420px}
.filter-chip span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.filter-chip button{border:0;background:#fff;color:var(--header-bg);border-radius:50%;width:18px;height:18px;cursor:pointer;font-weight:700;line-height:18px;padding:0}
.toolbar-right{display:flex;align-items:center;gap:8px;margin-left:auto}
.toggle{font-size:.78rem;color:var(--muted);display:inline-flex;align-items:center;gap:4px;cursor:pointer;white-space:nowrap}
.btn{background:var(--header-bg);color:#fff;text-decoration:none;font-size:.78rem;font-weight:600;padding:6px 11px;border-radius:999px;white-space:nowrap;border:1px solid var(--header-bg)}
.btn:hover{background:#3f1318}
.btn.ghost{background:var(--panel);color:var(--head-col);border-color:var(--border)}

/* stage */
.stage{position:relative;flex:1;min-height:0;background:var(--stage-bg)}
#graph{position:absolute;inset:0}
#labels{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:2}
.lab{position:absolute;transform:translate(-50%,-140%);white-space:nowrap;font-size:9.35px;font-weight:600;color:var(--text);background:var(--glass);border-radius:5.1px;padding:.85px 5.1px;pointer-events:auto;cursor:pointer;user-select:none;border:1px solid rgba(27,6,8,.08)}
.lab.div{font-size:10.6px;font-weight:700;background:#d3374a;color:#fff;border:0}
.lab.col{color:#7a5a12;border-color:#e6d3a8}
.lab.org{font-weight:500;font-size:8.9px}
.lab.sel{background:#b8892b;color:#fff;border:0}
.zoom-controls{position:absolute;left:12px;top:auto;bottom:10px;display:flex;flex-direction:row;gap:4px;z-index:4}   /* v14: bottom-left, one small row (2D and 3D) */
.zoom-controls button{width:26px;height:26px;padding:0;line-height:1;border-radius:50%;border:1px solid var(--border);background:var(--panel);box-shadow:var(--shadow);font-size:.95rem;cursor:pointer;color:var(--head-col)}
.zoom-controls button:hover{background:var(--hover)}
#spin{font-size:.7rem;font-weight:700}
.stage-meta{position:absolute;right:12px;bottom:10px;max-width:calc(100% - 250px);text-align:right;z-index:3;font-size:.72rem;color:var(--muted);background:var(--glass);padding:3px 8px;border-radius:8px;pointer-events:none}
.loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:.95rem;background:var(--stage-bg);z-index:6}

/* type segments */
/* ---- VIEW AI BY TYPE: colour-coded buttons, top of the left column ---- */
#types-box{flex:0 0 auto}
#types-box .box-head{padding:6px 10px}
.types-body{padding:5px 8px 6px;display:flex;flex-direction:column;gap:5px}
.seg-all{border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:999px;font:inherit;font-size:.72rem;font-weight:600;padding:2px 10px;cursor:pointer}
.seg-all:hover{background:var(--hover)}
.seg-all.active{background:var(--header-bg);color:#fff}
.segments{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px}
.seg{--c:#888;--ct:#fff;display:flex;align-items:center;gap:6px;min-height:30px;border:2px solid transparent;border-radius:8px;background:var(--c);color:var(--ct);padding:2px 7px;text-align:left;cursor:pointer;font:inherit;position:relative;overflow:hidden;transition:transform .12s, box-shadow .12s, opacity .12s}
.seg:hover{transform:translateY(-1px);box-shadow:0 3px 10px rgba(27,6,8,.28)}
.seg:focus-visible{outline:2px solid var(--link);outline-offset:1px}
.seg .t{font-size:.72rem;font-weight:700;line-height:1.12;flex:1;min-width:0}
.seg .n{font-size:.78rem;font-weight:800;line-height:1;flex-shrink:0;background:rgba(255,255,255,.28);color:inherit;border-radius:999px;padding:3px 7px;min-width:28px;text-align:center}
.seg[data-lt="1"] .n{background:rgba(0,0,0,.14)}
.seg.active{border-color:#d3374a;box-shadow:0 0 0 2px #fff,0 0 0 4px #d3374a;transform:none}
.seg.active::before{content:"✓";font-weight:900;font-size:.8rem;flex-shrink:0}
.seg.dim{opacity:.4}
/* former colour-key functions: small isolate buttons under the type buttons */
.iso-box{border-top:1px solid var(--border);padding-top:4px}
.iso-box h3{font-size:.64rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:0 0 3px;font-weight:700}
.iso-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:3px}
.ib{display:flex;align-items:center;gap:5px;border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:7px;padding:3px 6px;font:inherit;font-size:.66rem;font-weight:600;line-height:1.15;cursor:pointer;text-align:left;min-height:23px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ib:hover:not(:disabled){background:var(--hover)}
.ib:focus-visible{outline:2px solid var(--link);outline-offset:1px}
.ib .star{width:11px;height:11px;flex-shrink:0;clip-path:polygon(50% 0,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%)}
.ib .ln{width:16px;height:3px;border-radius:2px;flex-shrink:0}
.ib.on{background:#d3374a;color:#fff;border-color:#d3374a}
.ib.off{opacity:.5}
.ib.all{color:var(--link);font-weight:700;justify-content:center}
.ib.all:disabled{opacity:.4;cursor:default}
html.dark .ib.on{background:#f3e8e9;color:#d3374a;border-color:#f3e8e9}
html.dark .seg.active{border-color:#fff;box-shadow:0 0 0 2px var(--dk-panel),0 0 0 4px #fff}

/* detail + list */
.detail h3{font-size:1rem;line-height:1.25;margin:2px 2px 6px}
.idtag{font-family:ui-monospace,Menlo,monospace;font-size:.72rem;background:var(--chip);border-radius:6px;padding:1px 6px;color:var(--chip-text)}
.badge{display:inline-block;font-size:.7rem;font-weight:600;color:#fff;border-radius:999px;padding:1px 8px;margin:2px 3px 2px 0}
.kv{margin:6px 2px;font-size:.8rem}
.kv b{display:block;font-size:.68rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:700}
.links{margin:6px 2px;display:flex;flex-direction:column;gap:3px}
.links a{font-size:.78rem;word-break:break-all;text-decoration:none}
.links a:hover{text-decoration:underline}
.links a.primary{font-weight:600}
.rel{display:flex;flex-wrap:wrap;gap:4px;margin:4px 2px}
.rel button{border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:999px;font:inherit;font-size:.72rem;padding:2px 8px;cursor:pointer;text-align:left}
.rel button:hover{background:var(--hover)}
.intro p{margin:4px 4px 8px;font-size:.82rem}
.intro ul{margin:0 4px 8px 22px;font-size:.8rem}
.stat{display:flex;gap:8px;margin:6px 4px 10px}
.stat div{flex:1;background:var(--soft);border-radius:10px;padding:6px 8px}
.stat b{display:block;font-size:1.2rem}
.stat span{font-size:.7rem;color:var(--muted)}
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px;vertical-align:middle}

/* tooltip */
.tooltip{position:fixed;z-index:900;max-width:360px;background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:12px;box-shadow:0 10px 34px rgba(27,6,8,.22);padding:10px 12px;font-size:.78rem;pointer-events:none}
.tooltip h4{font-size:.88rem;line-height:1.25;margin-bottom:3px}
.tooltip .kv{margin:3px 0}
.tooltip .links a{font-size:.72rem}
.tooltip .pinhint{margin-top:5px;font-size:.68rem;color:var(--muted)}
.credit-foot{display:flex;align-items:center;justify-content:center;gap:5px;font-size:.72rem;color:var(--muted);white-space:nowrap;overflow:hidden}

/* responsive */
@media (max-width:1180px){ .app{grid-template-columns:250px minmax(0,1fr) 290px} }
@media (max-width:860px){
  body{overflow:auto}
  .header-inner{padding:.85rem 1rem}.header-titles h1{font-size:1.2rem}
  .header-credit{text-align:left;width:100%;align-items:flex-start;flex-direction:row}
  .header-credit{flex-wrap:wrap;max-width:100%}.header-credit .uni-switch{flex-wrap:wrap;max-width:100%;border-radius:14px}
  .credit-row{justify-content:flex-start;flex-wrap:wrap}
  .gen-note{position:relative;right:auto;bottom:auto;margin:0 1rem 6px auto;width:max-content;max-width:calc(100% - 2rem);white-space:normal}
  .app{display:flex;flex-direction:column;height:auto;min-height:0}
  .centre{order:1;height:64vh}.left{order:3}.right{order:4}
  .box{max-height:60vh}
  .toolbar-right{margin-left:0}
  .credit-foot{white-space:normal;height:auto;padding:8px;text-align:center}
}

/* ---- header extras: RELOAD + theme toggle ---- */
.subheader{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.reload-btn{background:#c2410c;color:#fff;font:inherit;font-weight:800;font-size:.78rem;letter-spacing:.08em;border:2px solid #fff;border-radius:999px;padding:.22em .9em;cursor:pointer;box-shadow:0 2px 10px rgba(0,0,0,.35)}
.reload-btn:hover{background:#d4500f}.reload-btn.busy{opacity:.7;cursor:progress}
.theme-btn{background:var(--header-bg);color:#fff;border:1px solid rgba(255,255,255,.7);border-radius:999px;font:inherit;font-size:.78rem;font-weight:700;padding:.25em .9em;cursor:pointer;white-space:nowrap}
.theme-btn:hover{background:#3f1318}
/* ---- news crawler ---- */
.news-bar{display:flex;align-items:center;gap:10px;height:calc(var(--news-h) - 8px);margin:8px 12px 0;background:#000;color:#fff;border-radius:14px;padding:0 6px 0 8px;overflow:hidden;box-shadow:0 2px 10px rgba(0,0,0,.18)}
.news-label{flex-shrink:0;background:#fff;color:#000;font-weight:800;font-size:.7rem;letter-spacing:.1em;border-radius:999px;padding:3px 10px}
.news-count{flex-shrink:0;color:#fff;font-weight:700;font-size:.72rem;white-space:nowrap;padding:2px 9px;border:1px solid rgba(255,255,255,.55);border-radius:999px}
.news-viewport{flex:1;overflow:hidden;position:relative;mask-image:linear-gradient(90deg,transparent,#000 2%,#000 98%,transparent)}
.news-track{display:inline-flex;white-space:nowrap;animation:crawl var(--crawl-s,160s) linear infinite;will-change:transform}
.news-bar:hover .news-track{animation-play-state:paused}
@keyframes crawl{from{transform:translateX(0)}to{transform:translateX(-50%)}}
.news-item{font-size:.84rem;padding-right:42px;color:#fff}
.news-item .nd{color:#ddccce;font-weight:600;margin-right:6px}
.news-item a{color:#e66876;font-weight:600;text-decoration:none}
.news-item a:hover{text-decoration:underline;color:#ef9fa8}
.news-item .ns{color:#b19ea0;font-size:.75rem;margin-left:6px}
/* ---- Saïd button ---- */
.said-btn{background:#3d0a10;color:#fff;border:1px solid #3d0a10;border-radius:999px;font:inherit;font-size:.78rem;font-weight:700;padding:6px 13px;cursor:pointer;white-space:nowrap}
.said-btn:hover{background:#641922}
.said-btn.active{box-shadow:0 0 0 3px #b8892b;background:#641922}
/* ---- compact explore box ---- */
.explore-body{padding:6px 8px 8px;font-size:.78rem}
.explore-body .stat{margin:0 0 4px;gap:6px}
.explore-body .stat div{padding:4px 6px;text-align:center}
.explore-body .stat b{font-size:1rem}
.explore-body .stat span{font-size:.66rem}
.explore-body .tip1{color:var(--muted);font-size:.72rem;line-height:1.35}
.explore-body ul{margin:6px 0 0 16px;font-size:.74rem}
.howto-btn{border:0;background:none;color:var(--link);font:inherit;font-size:.72rem;font-weight:600;cursor:pointer}
/* ---- popups (node + news) ---- */
.popup{position:fixed;z-index:950;background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:12px;box-shadow:0 14px 40px rgba(27,6,8,.28);font-size:.78rem;display:flex;flex-direction:column}
.popup .pop-body{overflow:auto;padding:10px 12px 12px;min-height:0}
.pop-x{position:absolute;top:6px;right:6px;width:26px;height:26px;border-radius:50%;border:1px solid var(--border);background:var(--panel);color:var(--text);font-size:1.05rem;line-height:22px;cursor:pointer;z-index:2;font-weight:700}
.pop-x:hover{background:#d1495b;color:#fff;border-color:#d1495b}
.node-pop{width:370px;max-height:min(64vh,560px)}
.node-pop h4{font-size:.92rem;line-height:1.25;margin:0 30px 4px 0}
.node-pop .kv{margin:5px 0}
.node-pop .links a{font-size:.74rem}
.news-pop{width:340px;max-height:min(50vh,420px);z-index:960;border-color:#e66876}
.news-pop h5{font-size:.78rem;margin:0 30px 6px 0;text-transform:uppercase;letter-spacing:.06em}
.news-pop ul{list-style:none}
.news-pop li{padding:6px 0;border-top:1px solid var(--hover)}
.news-pop .nd{display:block;font-size:.68rem;color:var(--muted);font-weight:600}
.news-pop a{color:#c33142;font-weight:600;text-decoration:none}
.news-pop a:hover{text-decoration:underline}
.news-btn{background:#000;color:#e66876;border:1px solid #e66876;border-radius:999px;font:inherit;font-size:.72rem;font-weight:700;padding:3px 10px;cursor:pointer;margin:6px 6px 0 0}
.news-btn:hover{background:#e66876;color:#000}
.chipbtn{border:1px solid var(--border);background:var(--panel);color:var(--link);border-radius:999px;font:inherit;font-size:.72rem;padding:1px 8px;margin:2px 3px 2px 0;cursor:pointer}
.chipbtn:hover{background:var(--hover)}
button.badge{border:0;cursor:pointer;font:inherit;font-size:.7rem;font-weight:600}
.pop-actions{display:flex;flex-wrap:wrap;align-items:center;gap:4px;margin-top:6px}
.tooltip .newsflag{display:inline-block;margin-left:6px;font-size:.66rem;font-weight:700;color:#000;background:#e66876;border-radius:999px;padding:0 6px}
/* ---- footer ---- */
.site-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 14px 10px;min-height:var(--foot-h);flex-wrap:wrap}
.site-foot .credit-foot{justify-content:flex-start}
.downloads{display:flex;gap:8px}
/* ---- dark mode ---- */
html.dark{color-scheme:dark;/* very-dark-blue palette: NO black backgrounds in dark mode */
  --dk-deep:#1b090b; --dk-page:#200a0d; --dk-panel:#2b0f13; --dk-soft:#331317; --dk-hover:#471d22; --dk-border:#68343a; --dk-chip:#532329; --dk-bar:#391217; --dk-pill:#892330;
  --header-bg:var(--dk-pill);--page-bg:var(--dk-page);--text:#f3e8e9;--muted:#c1a8ab;--border:var(--dk-border);--soft:var(--dk-soft);--panel:var(--dk-panel);--hover:var(--dk-hover);--chip:var(--dk-chip);--chip-text:#e7d8da;--link:#eb838f;--stage-bg:var(--dk-deep);--head-col:#f3e8e9;--glass:rgba(39,13,16,.84);--shadow:0 2px 12px rgba(21,5,7,.55)}
html.dark .row.active{background:#f3e8e9;color:var(--dk-deep)}
html.dark .row.active .count{background:var(--dk-deep);color:#f3e8e9}
html.dark .lab.div{background:#f3e8e9;color:#d3374a}
html.dark .lab.col{color:#f0c66b;border-color:#5b4a22}
html.dark .filter-chip{background:#f3e8e9;color:#d3374a}
html.dark .filter-chip button{background:var(--dk-deep);color:#fff}
html.dark .btn{background:#f3e8e9;color:#d3374a;border-color:#f3e8e9}
html.dark .btn.ghost{background:var(--panel);color:var(--text);border-color:var(--border)}
html.dark .seg-all.active{background:#f3e8e9;color:#d3374a}
html.dark .news-bar{background:var(--dk-bar);color:#fff;box-shadow:inset 0 0 0 1px #b26871,0 2px 10px rgba(21,5,7,.5)}
html.dark .news-label{background:#fff;color:#1b090b;box-shadow:none}
html.dark .news-item{color:#fff}
html.dark .news-item .nd{color:#e5cbce}
html.dark .news-item a{color:#ef9fa8}
html.dark .news-item a:hover{color:#f7ccd1}
html.dark .news-item .ns{color:#d0afb3}
html.dark .news-pop a{color:#eb838f}
html.dark .news-btn{background:var(--dk-panel)}
html.dark .news-btn:hover{background:#e66876;color:#1b090b}
html.dark .said-btn{background:#812d37;border-color:#d7808a}
html.dark .theme-btn{background:#f3e8e9;color:#d3374a}
html.dark .popup{box-shadow:0 14px 40px rgba(21,5,7,.7)}
html.dark .tooltip{box-shadow:0 10px 34px rgba(21,5,7,.7)}
html.dark .k-hosted{background:#f3e8e9}html.dark .k-people{background:#8a7073}
.home-title{cursor:pointer;transition:filter .15s}.home-title:hover{filter:brightness(1.35);text-decoration:underline;text-underline-offset:3px}.home-title:focus-visible{outline:2px solid #ff7a1a;outline-offset:2px}

/* ACADEMIC RESEARCH (papers) */
.papers-head{width:100%;border:0;border-bottom:1px solid var(--border);font:inherit;text-align:left;cursor:pointer;align-items:center;color:inherit}
.papers-head:hover{background:var(--hover)}
.papers-head .hint{margin-left:auto}
.papers-caret{font-size:.8rem;color:var(--muted);transition:transform .2s}
.papers-head{flex-wrap:wrap;row-gap:1px}
.papers-full{flex:0 0 100%;text-align:right;font-size:.62rem;font-weight:600;letter-spacing:.02em;white-space:nowrap;color:var(--muted);text-decoration:underline;text-underline-offset:2px;margin:1px 0 -3px}
.papers-head:hover .papers-full{text-decoration-thickness:2px}
.papers-tools{display:flex;flex-direction:column;gap:3px;padding:6px 10px;border-bottom:1px solid var(--border)}
.papers-tools input{width:100%;border:1px solid var(--border);border-radius:8px;padding:5px 8px;font:inherit;font-size:.78rem;background:var(--panel);color:var(--text)}
.papers-list{overflow:auto;padding:2px 0}
.paper{padding:7px 12px 8px;border-bottom:1px solid var(--border);font-size:.76rem;line-height:1.3;content-visibility:auto;contain-intrinsic-size:auto 80px}
.paper .pm{color:var(--muted);font-size:.68rem;margin-bottom:2px}
.paper .pm b{color:var(--text);font-weight:700}
.paper a.pt{color:var(--link);font-weight:650;text-decoration:none;display:block}
.paper a.pt:hover{text-decoration:underline}
.paper .pa{color:var(--muted);margin-top:2px}
.paper .ptags{margin-top:3px}
.paper .ptags .chipbtn{font-size:.66rem;padding:0 7px}
.paper.extra{display:none}.paper.extra.on{display:block}
.papers-more{display:block;width:calc(100% - 20px);margin:6px 10px 8px;border:1px dashed var(--border);background:none;color:var(--link);border-radius:8px;padding:5px;font:inherit;font-size:.74rem;cursor:pointer}
.papers-more:hover{background:var(--hover)}

.papers-head h2{white-space:nowrap}
/* collapsed ACADEMIC RESEARCH: compact previews so all 6 fit without scrolling */

/* Back to start (top-left of the universe window) */
.back-start{position:absolute;left:12px;top:8px;z-index:6;display:inline-flex;align-items:center;gap:4px;height:28px;padding:0 13px;border-radius:16px;border:1px solid var(--border);background:var(--panel);color:var(--head-col);box-shadow:var(--shadow);font:inherit;font-size:.78rem;font-weight:700;letter-spacing:.02em;cursor:pointer}
.back-start:hover{background:var(--hover)}
.back-start:focus-visible{outline:2px solid var(--link);outline-offset:2px}
html.dark .back-start{background:var(--soft);color:var(--text);border-color:var(--border)}
html.dark .back-start:hover{background:var(--hover)}

.lab:hover{filter:brightness(1.12);box-shadow:0 0 0 2px rgba(230,104,118,.55)}
.lab:focus-visible{outline:2px solid var(--link);outline-offset:2px}

/* docked details panel (right side of the universe window) */
#node-pop.side-panel{position:absolute;top:0;right:0;bottom:0;left:auto;width:clamp(300px,34%,470px);max-height:none;border-radius:0;border-width:0 0 0 1px;z-index:7;box-shadow:-10px 0 30px rgba(27,6,8,.14);display:flex;flex-direction:column;overflow:hidden}
#node-pop.side-panel[hidden]{display:none}
#node-pop.side-panel > .pop-body{flex:1 1 auto;overflow:auto;padding:12px 14px 14px}
#node-pop.side-panel > .pop-x{top:8px;right:10px}
#news-pop.news-in{position:relative;left:auto!important;top:auto!important;width:auto;max-height:48%;flex:0 0 auto;border-radius:0;border:0;border-top:2px solid #e66876;box-shadow:none;z-index:auto;background:var(--soft,var(--panel))}
#news-pop.news-in[hidden]{display:none}
#news-pop.news-in > .pop-body{overflow:auto;max-height:100%}
.stage.panel-open .stage-meta{right:calc(clamp(300px,34%,470px) + 12px);max-width:calc(100% - clamp(300px,34%,470px) - 250px)}
html.dark #node-pop.side-panel{box-shadow:-10px 0 30px rgba(21,5,7,.55);border-color:var(--border)}
html.dark #news-pop.news-in{border-top-color:#eb838f}

/* colour key items isolate their category */

/* ================= 2D / 3D toggle (header, left of the Dark/Light button) ================= */
.mode-btn{background:var(--header-bg);color:#fff;border:1px solid rgba(255,255,255,.7);border-radius:999px;font:inherit;font-size:.78rem;font-weight:700;padding:.2em .35em;cursor:pointer;white-space:nowrap;display:inline-flex;align-items:center;gap:.15em}
.mode-btn .m{border-radius:999px;padding:.05em .6em;transition:background .15s,color .15s}
.mode-btn .sl{opacity:.6}
.mode-btn .m.on{background:#fff;color:#d3374a}
.mode-btn:hover{background:#3f1318}.mode-btn:focus-visible{outline:2px solid #ff7a1a;outline-offset:2px}
html.dark .mode-btn{background:#f3e8e9;color:#d3374a}
html.dark .mode-btn .m.on{background:var(--dk-deep);color:#fff}
html.dark .mode-btn:hover{background:#fff}

/* ================= 2D org chart ================= */
.stage.v2d #graph{visibility:hidden;pointer-events:none}
.stage.v2d #labels,.stage.v2d #spin{display:none}
body.v2d .toggle-struct{display:none}
.chart2d{position:absolute;inset:0;z-index:1;--c-bg:#fff;--c-card:#fff;--c-text:#5e1821;--c-muted:#6f5d5f;--c-line:#a38c8e;--c-box:#faf7f7;--c-boxb:#e2d5d7;--c-head:#d3374a;--c-headt:#fff;--c-link:#881f2b;--c-gold:#b8892b;background:var(--c-bg)}
html.dark .chart2d{--c-bg:var(--dk-deep);--c-card:#3d171b;--c-text:#f3e8e9;--c-muted:#c1a8ab;--c-line:#a6747a;--c-box:#330f13;--c-boxb:#68343a;--c-head:#f3e8e9;--c-headt:#d3374a;--c-link:#eb838f;--c-gold:#f0c66b}
.c-view{position:absolute;inset:0;overflow:hidden;cursor:grab;touch-action:none;user-select:none}
.c-view.drag{cursor:grabbing}
.c-canvas{position:absolute;left:0;top:0;transform-origin:0 0;width:max-content;padding:18px;display:flex;align-items:flex-start;gap:70px;will-change:transform}
.c-canvas.anim{transition:transform .5s cubic-bezier(.2,.7,.2,1)}
.c-lines{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;overflow:visible;z-index:0}
.c-lines path{fill:none;stroke:var(--c-line);stroke-width:4;stroke-linejoin:round}
.c-main{position:relative;z-index:1;display:flex;flex-direction:column;align-items:stretch;gap:70px}
.c-rootrow{display:flex;justify-content:center}
.ov .c-rootrow{position:relative;top:calc(var(--lift,0px)*-1);left:var(--liftx,0px);z-index:2}
.hubbtn{font:inherit;cursor:pointer;border:0;text-align:left;color:inherit;background:none}
.hubbtn:hover{filter:brightness(1.12)}
.hubbtn:focus-visible{outline:3px solid #ff7a1a;outline-offset:2px}
.c-root{background:var(--c-head);color:var(--c-headt);font-weight:800;font-size:34px;letter-spacing:.04em;text-transform:uppercase;padding:14px 46px;border-radius:999px;text-align:center}
.c-band{position:relative;border:3px solid var(--c-line);border-radius:22px;padding:18px 22px 22px;background:var(--c-box)}
.band-title{font-size:26px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--c-muted);margin-bottom:14px}
.band-row{display:flex;gap:26px;align-items:flex-start}
.c-divs{display:flex;gap:26px;align-items:flex-start}
.unit{position:relative;display:flex;flex-direction:column;flex:0 0 auto}
.unit>.hd{background:var(--c-head);color:var(--c-headt);font-weight:800;font-size:23px;line-height:1.2;padding:12px 18px;border-radius:14px;display:flex;justify-content:space-between;align-items:center;gap:14px;width:100%}
.unit>.hd .n,.grp.dept>.hd .n,.col>.hd .n{font-size:.62em;font-weight:700;background:rgba(127,127,127,.28);border-radius:999px;padding:1px 10px;flex:0 0 auto}
.groups{position:relative;margin:0 0 0 14px;padding:12px 0 0 16px;border-left:3px solid var(--c-line);display:flex;flex-direction:column;gap:14px}
.groups.row{flex-direction:row;align-items:flex-start;border-left:0;margin:0;padding:12px 0 0}
.grp.dept{position:relative;border:2px solid var(--c-boxb);border-radius:12px;background:var(--c-box);padding:0 0 10px}
.groups:not(.row)>.grp.dept::before{content:"";position:absolute;left:-19px;top:22px;width:17px;border-top:3px solid var(--c-line)}
.groups.row>.grp.dept{margin-top:0}
.grp.dept>.hd{font-weight:700;font-size:16.5px;line-height:1.2;padding:8px 12px;border-radius:10px 10px 0 0;border-bottom:2px solid var(--c-boxb);color:var(--c-text);display:flex;justify-content:space-between;gap:10px;width:100%;background:rgba(127,127,127,.12)}
.cards{display:grid;gap:7px;padding:9px 10px 0;grid-template-columns:repeat(var(--cols,1),188px)}
.unit{width:calc(var(--cols,1)*195px + 36px)}.unit.multi{width:calc(var(--cols,1)*195px + 55px)}.unit.rowg{width:max-content}
.grp.dept{width:calc(var(--cols,1)*195px + 17px)}
.unit>.cards{padding:12px 0 0 0;margin-left:14px;border-left:3px solid var(--c-line);padding-left:16px}
.card{position:relative;background:color-mix(in srgb,var(--c) 9%,var(--c-card));border:1px solid var(--c-boxb);border-left:6px solid var(--c);border-radius:8px;padding:5px 7px 5px 8px;cursor:pointer;min-height:48px;display:flex;flex-direction:column;gap:1px;overflow:hidden}
.card:hover{box-shadow:0 0 0 2px var(--c);z-index:2}
.card:focus-visible{outline:3px solid #ff7a1a;outline-offset:1px}
.card .nm{font-size:11.5px;font-weight:600;line-height:1.22;color:var(--c-text);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.card .u{font-size:10px;line-height:1.25;color:var(--c-link);text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;width:fit-content;max-width:100%}
.card .u:hover{text-decoration:underline}
.card .also{font-size:9.5px;line-height:1.2;color:var(--c-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.card.sel{box-shadow:0 0 0 3px var(--c-gold);background:color-mix(in srgb,var(--c-gold) 22%,var(--c-card))}
.card.rel{box-shadow:0 0 0 2px var(--c-gold)}
.card.ref{border-style:dashed;border-left-style:solid}
.card .kd{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:4px;vertical-align:baseline}
.kd.k-hosted{background:#d3374a}.kd.k-partner{background:#b8892b}.kd.k-people{background:#b49ea1}
html.dark .kd.k-hosted{background:#f3e8e9}html.dark .kd.k-people{background:#8a7073}
.card.dim,.grp.dim,.unit.dim>.hd{opacity:.2}
.card.gone,.grp.gone,.unit.gone{display:none}
.card .nm .kd{margin-right:4px}
.b-inst{--c:var(--bc-inst)}.b-group{--c:var(--bc-group)}.b-prog{--c:var(--bc-prog)}.b-teach{--c:var(--bc-teach)}.b-serv{--c:var(--bc-serv)}.b-gov{--c:var(--bc-gov)}.b-part{--c:var(--bc-part)}.b-comm{--c:var(--bc-comm)}.b-soc{--c:var(--bc-soc)}
.c-colleges{position:relative;z-index:1;width:calc(2*210px + 70px);flex:0 0 auto;border:3px solid var(--c-gold);border-radius:22px;padding:16px 16px 18px;background:var(--c-box)}
.c-colleges>.hd{background:var(--c-gold);color:#fff;font-weight:800;font-size:26px;letter-spacing:.06em;text-transform:uppercase;padding:12px 18px;border-radius:14px;display:flex;justify-content:space-between;align-items:center;width:100%}
html.dark .c-colleges>.hd{color:#d3374a}
.c-colleges .sub{font-size:13px;color:var(--c-muted);padding:8px 4px 4px}
.col-list{columns:2 210px;column-gap:14px;padding-top:6px}
.col{break-inside:avoid;display:block;margin:0 0 14px;border:2px solid var(--c-boxb);border-radius:12px;background:var(--c-card)}
.col>.hd{display:flex;justify-content:space-between;gap:8px;font-weight:800;font-size:16px;line-height:1.2;padding:8px 10px;border-radius:10px 10px 0 0;background:color-mix(in srgb,var(--c-gold) 22%,var(--c-card));color:var(--c-text);width:100%;border-bottom:2px solid var(--c-boxb)}
.col>.cards{grid-template-columns:1fr;padding:8px}
.c-note{font-size:12px;color:var(--c-muted);margin-top:8px;padding:0 4px}
.chart2d .active-hub{outline:3px solid var(--c-gold)}
.unit.active>.hd,.grp.active>.hd,.col.active>.hd{box-shadow:0 0 0 3px var(--c-gold)}

/* ---- overview level: structure + counts + one coloured chip per organisation (zoom in for names and URLs) ---- */
.c-canvas.ov{gap:90px}
.ov .c-main{gap:60px}
.ov .c-root{font-size:64px;padding:16px 70px}
.ov .band-title{font-size:34px}
.ov .unit>.hd{font-size:34px;padding:12px 20px;border-radius:16px}
.ov .grp.dept>.hd{font-size:24px;padding:8px 12px}
.ov .grp.dept{width:250px}
.ov .unit{width:270px}.ov .unit.multi{width:calc(var(--dc,1)*266px + 6px)}.ov .unit.rowg{width:max-content}
.ov .c-divs,.ov .band-row{gap:30px}
.ov .groups:not(.row){display:grid;grid-template-columns:repeat(var(--dc,1),250px);gap:14px 16px;align-items:start}
.ov .groups:not(.row)>.grp.dept::before{display:none}
.ov .groups:not(.row){margin-left:0;border-left:0;padding-left:0;border-top:3px solid var(--c-line);margin-top:10px;padding-top:12px}
.ov .cards{display:flex;flex-wrap:wrap;gap:4px;padding:10px 12px 2px}
.ov .unit>.cards{width:250px;margin-left:0;padding-left:0;border-left:0;border-top:3px solid var(--c-line);margin-top:10px;padding-top:12px}
.ov .card{width:20px;height:20px;min-height:0;padding:0;border:0;border-radius:5px;background:var(--c);display:block}
.ov .card>*{display:none}
.ov .card.ref{background:color-mix(in srgb,var(--c) 22%,var(--c-card));border:3px solid var(--c)}
.ov .card.sel{box-shadow:0 0 0 4px var(--c-gold),0 0 0 7px var(--c-card);transform:scale(1.25);z-index:3}
.ov .card.rel{box-shadow:0 0 0 3px var(--c-gold)}
.ov .card:hover{box-shadow:0 0 0 3px var(--c-text);z-index:3}
.ov .c-colleges{width:calc(var(--cc,2)*250px + 70px)}
.ov .c-colleges>.hd{font-size:40px}
.ov .c-colleges .sub{font-size:20px}
.ov .col>.hd{font-size:26px}
.ov .col>.cards{padding:10px 12px}
.ov .col-list{columns:var(--cc,2) 240px}
.ov .grp.dept>.hd .n,.ov .unit>.hd .n,.ov .col>.hd .n{font-size:.75em}

/* expand the 2D chart over the whole page area below the header */
#zoom-full{font-size:.95rem}
.stage:not(.v2d) #zoom-full{display:none}
.stage.full{position:fixed;left:0;right:0;bottom:0;top:calc(var(--header-h) + var(--news-h));z-index:900;border-top:2px solid var(--border)}
body.stage-full{overflow:hidden}

/* 2D/3D + Dark/Light buttons live in the stage, top right (big, easy to tap) */
.stage-btns{position:absolute;top:8px;right:12px;z-index:6;display:flex;gap:6px;align-items:center;transition:right .2s}
.stage.panel-open .stage-btns{right:calc(clamp(300px,34%,470px) + 12px)}
.stage-btns .mode-btn,.stage-btns .theme-btn{position:static;transform:none;display:inline-flex;align-items:center;justify-content:center;gap:.35em;height:22px;font-size:.525rem;font-weight:800;letter-spacing:.02em;box-shadow:0 1px 5px rgba(27,6,8,.35);border-width:1px}   /* v12: half size (was 44px / 1.05rem) */
.stage-btns .mode-btn{padding:.1em .18em}
.stage-btns .mode-btn .m{padding:.18em .48em;font-size:.525rem}
.stage-btns .theme-btn{padding:0 .6em;min-width:3.6em}
.stage-btns .theme-btn .ic{font-size:.6rem;line-height:1}
html.dark .stage-btns .mode-btn,html.dark .stage-btns .theme-btn{border-color:var(--dk-deep);box-shadow:0 1px 6px rgba(21,5,7,.7),0 0 0 1px rgba(255,255,255,.35)}
@media (max-width:1440px){.stage.panel-open .stage-btns{flex-direction:column;align-items:flex-end;gap:6px}}   /* narrow stage + open panel: stack so the buttons never reach Back to start */
@media (max-width:760px){.stage-btns .mode-btn,.stage-btns .theme-btn{height:24px;font-size:.6rem}.stage-btns .mode-btn .m{font-size:.6rem;padding:.2em .55em}}   /* v12: half size, tap target kept >= 24px */

/* AI ACADEMIC RESEARCH: solid black strap, white text (light and dark) */
.papers-head{background:#000;color:#fff;border-bottom:0;padding:11px 14px 10px;border-radius:calc(var(--radius) - 1px) calc(var(--radius) - 1px) 0 0}
.papers-head h2{color:#fff}
.papers-head .hint{color:#e4d7d9}
.papers-head .papers-full{color:#fff}
.papers-head:hover{background:#1b1b1b}
.papers-head:focus-visible{outline:2px solid #ff7a1a;outline-offset:-3px}
html.dark .papers-head{background:var(--dk-bar);box-shadow:inset 0 0 0 1px #bf7c84}
html.dark .papers-head:hover{background:#4e1e23}
#papers-box .papers-list{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}
#papers-box .papers-list{padding-bottom:0}
#papers-box .papers-list .papers-more{margin:auto 10px 0}   /* pin Browse-all to the list bottom; no bottom margin so measured gap closes */

/* hub detail panel: one row per organisation, with its website link */
.rel.hubrows{display:flex;flex-direction:column;gap:6px;margin-top:8px}
.hubrow{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}
.hubrow button{flex:0 1 auto;max-width:100%;font-size:.8rem;padding:4px 10px}
.hubrow a.hl{font-size:.74rem;color:var(--accent,#ba2839);text-decoration:none;flex:0 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:48%}
.hubrow a.hl:hover{text-decoration:underline}

/* ---- below the fold: full list of every organisation ---- */
.full-list{margin:18px 14px 8px;border:1px solid var(--border);border-radius:12px;background:var(--panel);overflow:hidden}
.fl-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 14px;padding:12px 16px;border-bottom:1px solid var(--border);background:var(--soft)}
.fl-head h2{font-size:1.05rem;letter-spacing:.04em;text-transform:uppercase;margin:0}
.fl-count{font-weight:700;font-size:.85rem}
.fl-wrap{overflow-x:auto}
.fl-table{width:100%;border-collapse:collapse;font-size:.88rem}
.fl-table th,.fl-table td{text-align:left;padding:7px 14px;border-bottom:1px solid var(--border);vertical-align:top}
.fl-table thead th{position:sticky;top:0;background:var(--soft);font-size:.74rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.fl-table tbody th{font-weight:600}
.fl-table tbody tr:hover{background:var(--hover)}
.fl-table .dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:7px}
.fl-table a{color:var(--link);word-break:break-all}
.fl-name{font:inherit;font-weight:600;color:var(--text);background:none;border:0;padding:0;cursor:pointer;text-align:left;text-decoration:underline;text-decoration-color:var(--border);text-underline-offset:3px}
.fl-name:hover,.fl-name:focus-visible{text-decoration-color:currentColor}
.fl-table th:nth-child(1){width:30%}.fl-table th:nth-child(2){width:25%}.fl-table th:nth-child(4){width:110px}
.fl-id{font-family:ui-monospace,Menlo,monospace;font-size:.8rem;color:var(--muted);white-space:nowrap}

/* ---- Oxford AI events crawler (bottom): colours REVERSED relative to the black news crawler ---- */
.ev-bar{margin:4px 12px 6px;background:#fbf8f8;color:#d3374a;box-shadow:inset 0 0 0 1px #cfbdbf,0 2px 8px rgba(27,6,8,.08)}
.ev-bar .news-label{background:#000;color:#fff}
.ev-bar .news-item{color:#d3374a}
.ev-bar .news-item .nd{color:#56393c;font-weight:700}
.ev-bar .news-item a{color:#7e1d28;font-weight:700}
.ev-bar .news-item a:hover{color:#5d131c}
.ev-bar .news-item .ns{color:#644e51}
html.dark .ev-bar{background:var(--dk-deep);color:#fff;box-shadow:inset 0 0 0 1px #c2a5a8}
html.dark .ev-bar .news-label{background:#fff;color:#1b090b;box-shadow:none}
html.dark .ev-bar .news-item{color:#fff}
html.dark .ev-bar .news-item .nd{color:#ddccce}
html.dark .ev-bar .news-item a{color:#ef9fa8}
html.dark .ev-bar .news-item a:hover{color:#f7ccd1}
html.dark .ev-bar .news-item .ns{color:#c2aeb0}
/* audit-only rows (a department or college with no separate AI body identified in the coverage check): greyed, not clickable */
.row.dept.empty{opacity:.5;cursor:default;font-style:italic}
.row.dept.empty:hover{background:transparent}
.chart2d .col.empty{opacity:.55}
.chart2d .col.empty .nobody{font-size:.72rem;font-style:italic;color:var(--c-muted);padding:2px 4px}
/* university switch (header, next to the title) */
.title-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.title-row h1{margin:0}
/* university switch: right-hand side of the header, immediately left of the credit pill, on the same line (config-driven: one option per hub.json university) */
.credit-row{display:flex;align-items:center;justify-content:flex-end;gap:.55rem;flex-wrap:nowrap}
.uni-switch{display:inline-flex;align-items:center;gap:2px;padding:2px;border-radius:999px;background:var(--header-bg);border:1px solid rgba(255,255,255,.75);font-size:.68rem;font-weight:700;line-height:1}
.uni-switch .us-opt{color:#fff;text-decoration:none;padding:.34em .85em;border-radius:999px;white-space:nowrap;letter-spacing:.02em}
.uni-switch .us-opt:hover{background:rgba(255,255,255,.16)}
.uni-switch .us-opt.on{background:#fff;color:var(--header-bg);cursor:default}
.uni-switch .us-opt:focus-visible{outline:2px solid #ff7a1a;outline-offset:2px}
/* six-item switch: compact between 861px and 1400px so it still fits beside the credit on one row */
html.dark .uni-switch .us-opt.on{color:var(--dk-deep)}

/* ---- "About this data" note in the footer (per-university, optional) ---- */
.about-data{flex-basis:100%;font-size:.74rem;color:var(--muted);line-height:1.45;margin:2px 0 0}
.about-data summary{cursor:pointer;font-weight:600;color:var(--text);display:inline-block}
.about-data p{margin:6px 0 2px;max-width:1100px}

/* ---- per-university 2D layout (config web.chart2d; Imperial). inlineSide: the side column sits in the free space under the
   smaller faculties (the first faculty spans both rows); bandTop: those band units take their own top level inside the band box;
   big: larger type throughout. Oxford/Cambridge never get these classes. ---- */
.c-inline .c-divs{display:grid;grid-template-columns:repeat(var(--nu,6),max-content);grid-template-rows:auto auto;justify-content:start;align-items:start}
.c-inline .c-band{contain:inline-size}
.c-inline .c-divs>.unit{grid-row:1}
.c-inline .c-divs>.unit:nth-child(n+2){grid-column:auto}
.c-inline .c-divs>.unit:first-child{grid-row:1/span 2}
.c-inline .c-divs>.c-colleges{grid-row:2;grid-column:2/-1;width:auto;justify-self:stretch}
.c-inline .col-list,.c-inline.ov .col-list{columns:auto;display:flex;flex-wrap:wrap;gap:14px;align-items:flex-start}
.c-inline .col{margin:0;width:var(--colw,230px)}.c-inline.ov .col{width:var(--colw-ov,260px)}
.c-inline .band-row{flex-wrap:wrap}
.c-inline .band-row>.unit.rowg{max-width:100%}
.c-inline .groups.row{flex-wrap:wrap}
.c-inline .band-row>.band-top{flex:0 0 100%;width:100%}
.c-inline .band-row>.band-top>.groups.row{flex-wrap:wrap}
.c-big .c-root{font-size:44px}
.c-big .band-title{font-size:30px}
.c-big .unit>.hd{font-size:29px}
.c-big .grp.dept>.hd{font-size:20px}
.c-big .col>.hd{font-size:20px}
.c-big .c-colleges>.hd{font-size:32px}
.c-big .c-colleges .sub{font-size:17px}
.c-big .card .nm{font-size:14px}.c-big .card .u{font-size:12px}.c-big .card .also{font-size:11.5px}
.c-big .cards{grid-template-columns:repeat(var(--cols,1),220px)}
.c-big .unit{width:calc(var(--cols,1)*227px + 36px)}.c-big .unit.multi{width:calc(var(--cols,1)*227px + 55px)}.c-big .unit.rowg{width:max-content}
.c-big .grp.dept{width:calc(var(--cols,1)*227px + 17px)}
.c-big.ov .c-root{font-size:84px;padding:18px 80px}
.c-big.ov .band-title{font-size:44px}
.c-big.ov .unit>.hd{font-size:42px;padding:12px 16px;gap:10px}
.c-big.ov .grp.dept>.hd{font-size:31px}
.c-big.ov .grp.dept{width:340px}
.c-big.ov .unit{width:360px}.c-big.ov .unit.multi{width:calc(var(--dc,1)*356px + 6px)}.c-big.ov .unit.rowg{width:max-content}
.c-big.ov .groups:not(.row){grid-template-columns:repeat(var(--dc,1),340px)}
.c-big.ov .unit>.cards{width:340px}
.c-big.ov .c-colleges>.hd{font-size:48px}
.c-big.ov .c-colleges .sub{font-size:26px}
.c-big.ov .col>.hd{font-size:31px}
.c-big.ov .card{width:24px;height:24px}

/* ---- opt-in 2D options (config web.chart2d): sideBottom / rootFull / fillBand / huge (Edinburgh) ---- */
.c-sidebot .c-divs>.unit:first-child{grid-row:1}
.c-sidebot .c-divs{grid-template-rows:auto}
.c-sidebot .c-main>.c-colleges{width:auto;align-self:stretch;flex:0 0 auto}
.c-sidebot .col-list,.c-sidebot.ov .col-list{columns:auto;display:flex;flex-wrap:wrap;gap:14px;align-items:stretch}
.c-sidebot .col,.c-sidebot.ov .col{margin:0;width:auto;flex:var(--n,1) 1 var(--colw,230px);min-width:var(--colw,230px)}
.c-sidebot .col>.cards{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}
.c-rootfull .c-rootrow>.c-root{width:100%;text-align:center;justify-content:center}
.c-fillband .band-row,.c-inline.c-fillband .band-row{flex-wrap:nowrap}
.c-fillband .band-row>.unit,.c-fillband.ov .band-row>.unit,.c-fillband .band-row>.unit.rowg{flex:var(--ng,1) 1 0;width:auto;min-width:0}
.c-fillband .band-row .groups.row,.c-inline.c-fillband .groups.row{flex-wrap:nowrap}
.c-fillband .band-row .groups.row>.grp.dept,.c-fillband.ov .band-row .groups.row>.grp.dept{flex:1 1 0;width:auto;min-width:0}
.c-fillband .band-row .groups.row>.grp.dept>.cards,.c-fillband .band-row>.unit>.cards{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}
.c-huge .card .nm{font-size:16px}.c-huge .card .u{font-size:13.5px}.c-huge .card .also{font-size:12.5px}
.c-huge .unit>.hd{font-size:33px}.c-huge .grp.dept>.hd{font-size:23px}.c-huge .col>.hd{font-size:23px}
.c-huge .band-title{font-size:32px}.c-huge .c-root{font-size:50px}.c-huge .c-colleges>.hd{font-size:36px}.c-huge .c-colleges .sub{font-size:19px}

/* ---- v13 header (same grid as the hub and /research/): row 1 title | university switch (one black lozenge, two rows of up to five, spans rows 1-2) | the byline (removed 31 Oct);
   row 2 subtitle | (switch) | www.librairie.ai; row 3 - | Dark/Light slider | -; the two-line Gen AI note stays bottom-right below row 3 ---- */
.header-inner{display:grid;grid-template-columns:minmax(0,1fr) auto auto;grid-template-rows:auto auto auto;column-gap:.9rem;row-gap:.3rem;align-items:center;padding:.7rem 1.5rem 1.85rem;flex-wrap:nowrap;min-height:0}
.header-inner .header-titles,.header-inner .header-credit{display:contents}
.header-titles .title-row{grid-column:1;grid-row:1;align-self:center}
.header-titles .subheader{grid-column:1;grid-row:2;align-self:center}
.header-credit #uni-switch{grid-column:2;grid-row:1/span 2;align-self:center;justify-self:end}
.header-credit .credit-name{grid-column:3;grid-row:1;justify-self:end;align-self:center}
.header-credit .site-url{grid-column:3;grid-row:2;justify-self:end;align-self:center}
.header-credit .hdr-btns{grid-column:2;grid-row:3;justify-self:stretch;display:flex;justify-content:space-between;align-items:center;gap:.6rem}
.uni-switch{display:grid;grid-template-columns:repeat(var(--us-cols,7),auto);gap:2px;padding:3px;border-radius:14px;background:#000;border:1px solid rgba(255,255,255,.75);font-size:.68rem;font-weight:700;line-height:1}
.uni-switch .us-opt{text-align:center;padding:.27em .7em;letter-spacing:.02em}
.uni-switch .us-opt.on,html.dark .uni-switch .us-opt.on{background:#fff;color:#000}
.header-credit a.rs-jump{display:inline-block;white-space:nowrap;background:#000;color:#fff;border:1px solid #d4d4d4;border-radius:999px;font-size:.72rem;font-weight:700;padding:.2em .95em;line-height:1.35;text-decoration:none}
.header-credit a.rs-jump:hover{background:#262626;border-color:#fff;text-decoration:underline}
.rs-jump:focus-visible{outline:2px solid #fff;outline-offset:2px}
.theme-switch{display:inline-flex;align-items:center;gap:5px;background:rgba(0,0,0,.62);border:0;border-radius:999px;padding:3px 8px;color:#fff;font:inherit;font-size:.8rem;line-height:1;cursor:pointer}
.theme-switch .ts-ico{opacity:.55;transition:opacity .15s}
html:not(.dark) .theme-switch .ts-ico:first-child,html.dark .theme-switch .ts-ico:last-child{opacity:1}
.theme-switch .ts-track{position:relative;display:inline-block;width:30px;height:16px;border-radius:999px;background:#000;border:1px solid #d4d4d4;box-sizing:border-box}
.theme-switch .ts-knob{position:absolute;top:2px;left:2px;width:10px;height:10px;border-radius:50%;background:#fff;transition:transform .18s}
html.dark .theme-switch .ts-knob{transform:translateX(14px)}
.theme-switch:hover .ts-track{border-color:#fff}
.theme-switch:focus-visible{outline:2px solid #fff;outline-offset:3px;border-radius:999px}
@media (prefers-reduced-motion:reduce){.theme-switch .ts-knob{transition:none}}
/* round 2: the two-row switch is wider (grows leftwards), so between 1101px and ~1440px the one-line subtitle scales down with the free width instead of wrapping (bar height unchanged) */
@media (min-width:1101px){.header-titles .subheader{font-size:min(.95rem,max(.75rem,calc((100vw - 705px) * .0222)))}}
@media (min-width:861px) and (max-width:1100px){.header-titles h1{font-size:1.3rem}.header-titles .subheader{font-size:.82rem}.uni-switch .us-opt{padding:.27em .45em}}
@media (max-width:860px){
  .header-inner{grid-template-columns:minmax(0,1fr);grid-template-rows:none;row-gap:.45rem;padding:.85rem 1rem .4rem}
  .header-inner .header-titles>*,.header-inner .header-credit>*{grid-column:1!important;grid-row:auto!important;justify-self:start!important;align-self:center!important}
  .header-credit .hdr-btns{justify-content:flex-start;gap:.9rem}
  .uni-switch{font-size:10px}.uni-switch .us-opt{padding:.4em .45em}}

/* ---- v14 (26 Oct 2026): 2D layout options (config web.chart2d): rootUp / stretch / bandRows; the 'All' switch button a shade greyer ---- */
.c-rootup.ov .c-rootrow>.c-root{width:auto;white-space:nowrap}
.c-bandrows .band-row .groups.row{display:grid;grid-template-columns:repeat(var(--bgc,2),1fr);gap:14px 16px}
.c-bandrows .band-row .groups.row>.grp.dept{width:auto;min-width:0}
.c-stretch.ov .c-divs>.unit,.c-stretch.ov .c-divs>.unit.multi,.c-stretch.ov .band-row>.unit,.c-stretch.ov .band-row>.unit.rowg{width:auto}
.c-stretch.ov .c-divs{justify-content:normal}
.c-stretch.ov.c-inline .c-divs{grid-template-columns:repeat(var(--nu,6),auto)}
.c-stretch.ov:not(.c-inline) .c-divs>.unit{flex:1 1 auto}
.c-stretch.ov .band-row>.unit:not(.band-top){flex:1 1 0}
.c-stretch.ov.c-fillband .band-row>.unit{flex:var(--ng,1) 1 0}
.c-stretch.ov .groups:not(.row){grid-template-columns:repeat(var(--dc,1),1fr)}
.c-stretch.ov .groups.row>.grp.dept{flex:1 1 auto}
.c-stretch.ov .grp.dept,.c-stretch.ov .unit>.cards{width:auto}
.c-stretch.ov.c-inline:not(.c-sidebot) .col-list>.col{width:auto;flex:var(--n,1) 1 var(--colw-ov,260px)}
.uni-switch .us-opt.us-all{background:#3a3a3a}
.uni-switch .us-opt.us-all:hover{background:#4a4a4a}
.uni-switch .us-opt.us-all.on,html.dark .uni-switch .us-opt.us-all.on{background:#d4d4d4;color:#000}

/* mobile: the switch re-flows to 5 per row (two rows do not fit a phone) */
@media (max-width:700px){.uni-switch,.header-credit .uni-switch,.rp-credit .uni-switch{grid-template-columns:repeat(5,minmax(0,1fr))}.uni-switch .us-opt,.header-credit .uni-switch .us-opt,.rp-credit .uni-switch .us-opt{white-space:normal;padding-left:.15em;padding-right:.15em;line-height:1.1;min-width:0}}   /* r13: 36 options - five equal columns that always fit 390px; a long name (Open University, Oxford Brookes) wraps onto two lines */
@media (max-width:430px){.uni-switch,.header-credit .uni-switch,.rp-credit .uni-switch{font-size:9.2px}.uni-switch .us-opt,.header-credit .uni-switch .us-opt,.rp-credit .uni-switch .us-opt{letter-spacing:0}}
/* round 4 (16-option switch, 8+8): the switch is ~90px wider, so between 1101px and 1500px its options are a little tighter and the one-line subtitle scales with the remaining title width (bar height unchanged) */
@media (min-width:1101px){.header-titles .subheader{font-size:min(.95rem,max(.68rem,calc((100vw - 765px) * .0215)))}}
@media (min-width:1101px) and (max-width:1500px){.uni-switch .us-opt{padding:.27em .5em}}

/* ---- "Coverage audit" note in the footer (from the university's AI-directory report; optional, collapsed) ---- */
.coverage-audit .cov-group{font-size:.7rem;text-transform:uppercase;letter-spacing:.05em;margin:12px 0 5px;color:var(--text)}
.coverage-audit .cov-grid{display:grid;align-items:start;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:4px 14px;max-width:1400px}
.coverage-audit .cov-card summary{font-weight:500;color:var(--text)}
.coverage-audit .cov-card p{margin:3px 0 3px 12px}
.coverage-audit .cov-card .cov-lim{font-style:italic}
.coverage-audit .cov-src{margin:2px 0 6px 12px;padding-left:14px}
.coverage-audit .cov-src a{word-break:break-all}
.coverage-audit .cov-method{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:4px 18px;max-width:1400px}
.coverage-audit .cov-method h5{margin:6px 0 2px;font-size:.74rem}

/* ---- v16 header (Alex 26 Oct 23:22; hub, research/, every university site and its research/): the university switch is ONE black lozenge
   in FOUR balanced rows (columns = ceil(options / 4)); the new top row sits above the previous three; its right edge stays fixed and it grows leftwards as universities are added.
   No Aggregated research button on university homes (research/ still via hub). The Dark/Light slider is level with the fourth (bottom) row,
   the byline (removed 31 Oct) stays level with the same row as before (row 2); www.librairie.ai with the fourth. The four row tracks of the right-hand block
   are sized from the switch's own option height, so the centres line up exactly. ---- */
@media (min-width:861px){
  .header-inner{grid-template-rows:auto auto}
  .header-inner .header-right{display:contents}
  .header-inner .header-credit,.header-inner .rp-credit{--usf:.68rem;--ush:calc(var(--usf) * 1.54);display:grid!important;grid-column:2/span 2;grid-row:1/-1;align-self:center;justify-self:end;
    grid-template-columns:auto auto auto;grid-template-rows:calc(var(--ush) + 5px) calc(var(--ush) + 2px) calc(var(--ush) + 2px) calc(var(--ush) + 5px);column-gap:.7rem;row-gap:0;align-items:center;justify-items:end}
  .header-inner .header-credit #uni-switch,.header-inner .rp-credit #uni-switch{grid-column:2;grid-row:1/span 4;align-self:start;justify-self:end;font-size:var(--usf);gap:2px;padding:3px;border-width:1px;
    grid-template-columns:repeat(var(--us-cols4,6),auto)}
  .header-inner #uni-switch .us-opt{padding-top:.27em;padding-bottom:.27em;line-height:1}
  .header-inner .header-credit .hdr-btns,.header-inner .rp-credit .hdr-btns{display:contents}
  .header-inner .hdr-btns>a{grid-column:1;grid-row:1;justify-self:end;align-self:center;margin:0}
  .header-inner .hdr-btns>a.back-uni{grid-row:2}   /* v16: on a university research page the Back button takes the middle/All row */
  .header-inner .hdr-btns:has(.back-uni)>a{line-height:1.2;padding-top:1.5px;padding-bottom:1.5px}   /* v16: two stacked buttons fit the switch row pitch without touching */
  .header-inner .hdr-btns>.theme-switch{grid-column:1;grid-row:4;justify-self:end;align-self:center;margin:0}
  .header-inner .header-credit .credit-name,.header-inner .rp-credit .credit-name{grid-column:3;grid-row:2;align-self:center;justify-self:end}
  .header-inner .header-credit .site-url,.header-inner .rp-credit .site-url{grid-column:3;grid-row:4;align-self:center;justify-self:end}   /* r13: St Andrews moved to switch row 4 with 36 options; 21:19 (Alex): librairie.ai level with the St Andrews switch row, as on the hub */
}


/* ---- layout merge: college bottom dock / sidemany (Alex 27 Oct) ---- */
/* ---- many-college bottom strip (Alex 27 Oct 2026): 2–3 readable rows under the faculties;
   grid (not a one-row flex) so the strip does NOT force a huge chart width; faculties + stretch fill the panel. ---- */
.c-sidebot.c-sidemany .c-main{gap:28px}
.c-sidebot.c-sidemany .c-colleges{padding:14px 16px 16px;border-radius:18px;width:100%;box-sizing:border-box}
.c-sidebot.c-sidemany .c-colleges>.hd{font-size:24px;padding:10px 14px;border-radius:12px;letter-spacing:.04em}
.c-sidebot.c-sidemany .c-colleges .sub{display:none}   /* long legend eats height when 20+ colleges sit in the strip */
/* grid wraps to ~2–3 rows inside the faculty band width (does not inflate --colw min-widths across one long flex row) */
.c-sidebot.c-sidemany .col-list,.c-sidebot.c-sidemany.ov .col-list{
  display:grid!important;columns:auto;
  grid-template-columns:repeat(auto-fill,minmax(200px,1fr));
  gap:10px 12px;align-items:stretch;width:100%;
}
.c-sidebot.c-sidemany .col,.c-sidebot.c-sidemany.ov .col{
  margin:0;width:auto;min-width:0;flex:unset;
  display:flex;flex-direction:column;
}
.c-sidebot.c-sidemany .col>.hd{font-size:17px;padding:10px 10px;border-radius:10px;letter-spacing:.02em;justify-content:center;text-align:center}
.c-sidebot.c-sidemany .col>.cards{gap:4px;grid-template-columns:1fr;padding:6px 8px 8px}
.c-sidebot.c-sidemany .col.empty>.cards{display:none}   /* empty college = hub button only */
.c-sidebot.c-sidemany .col.empty{min-height:0}
/* sidemany-wrap: long faculty / college head labels wrap inside their box (no scrollWidth clip) */
.c-sidebot .unit>.hd,.c-sidebot .col>.hd,.c-sidebot .c-colleges>.hd{white-space:normal;overflow-wrap:anywhere;word-break:break-word;line-height:1.15}
.c-sidebot.c-sidemany .col>.hd span{display:inline}
/* overview: readable hubs (~12–18% of stage after fit); hide tiny org dots — count stays on the hub badge */
.c-sidebot.c-sidemany.ov .c-colleges>.hd{font-size:32px;padding:12px 16px}
.c-sidebot.c-sidemany.ov .col-list{
  grid-template-columns:repeat(auto-fill,minmax(240px,1fr));
  gap:12px 14px;
}
.c-sidebot.c-sidemany.ov .col>.hd{font-size:22px;padding:12px 10px;letter-spacing:.01em;min-height:3.1em;align-items:center}
.c-sidebot.c-sidemany.ov .col>.cards{display:none}
.c-sidebot.c-sidemany.ov .col.empty{min-width:0}

/* sideBottom + stretch: faculties must flex across the full main width (freed by moving colleges down) */
.c-stretch.ov.c-sidebot .c-divs{width:100%}
.c-stretch.ov.c-sidebot.c-inline .c-divs{grid-template-columns:repeat(var(--nu,6),minmax(0,1fr));justify-content:stretch}
.c-stretch.ov.c-sidebot .c-divs>.unit,.c-stretch.ov.c-sidebot .c-divs>.unit.multi{width:auto;min-width:0!important;justify-self:stretch;overflow:hidden;max-width:100%}
.c-stretch.ov.c-sidebot .c-divs>.unit>.hd,.c-stretch.ov.c-sidebot .c-divs .grp.dept>.hd{max-width:100%;box-sizing:border-box;overflow:hidden}
.c-stretch.ov.c-sidebot .c-divs .grp.dept{min-width:0!important;max-width:100%;overflow:hidden;box-sizing:border-box}
.c-stretch.ov.c-sidebot .c-divs .groups{min-width:0;max-width:100%;box-sizing:border-box}

.c-canvas.c-coldocked #c-colleges{display:none!important}
.c-col-dock{position:absolute;left:8px;right:8px;bottom:44px;z-index:8;display:flex;flex-direction:column;gap:4px;
  box-sizing:border-box;padding:6px 8px 7px;border:2px solid var(--c-gold);border-radius:12px;
  background:color-mix(in srgb,var(--c-gold) 14%,var(--c-box));box-shadow:0 4px 18px rgba(0,0,0,.16);
  pointer-events:auto;overflow:hidden}
.stage.panel-open .c-col-dock{right:calc(clamp(300px,34%,470px) + 12px)}
.stage.full .c-col-dock{bottom:52px}
.stage.has-col-dock .stage-meta{
  /* under the dock, right side of the zoom row — clear of +/− and of the dock/chart */
  top:auto; bottom:8px; left:auto; right:12px;
  max-width:min(420px, calc(100% - 200px)); text-align:right; white-space:nowrap;
  overflow:hidden; text-overflow:ellipsis;
  font-size:.62rem; padding:2px 6px; opacity:.9; z-index:7;
}
.stage.has-col-dock.panel-open .stage-meta{right:calc(clamp(300px,34%,470px) + 12px)}
.stage.full.has-col-dock .stage-meta{bottom:10px}
.c-col-dock .cd-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex:0 0 auto;
  background:var(--c-gold);color:#fff;font-weight:800;font-size:11px;letter-spacing:.05em;text-transform:uppercase;
  padding:3px 9px;border-radius:6px;line-height:1.2}
html.dark .c-col-dock .cd-head{color:#d3374a}
.c-col-dock .cd-head .cd-n{font-size:11px;background:rgba(0,0,0,.22);border-radius:999px;padding:0 7px}
/* --cd-cols set in JS for ~3 rows (Cambridge 31→11, Oxford 23→8); cells stay short-name readable */
.c-col-dock .cd-list{flex:1 1 auto;min-height:0;display:grid;
  grid-template-columns:repeat(var(--cd-cols,8),minmax(0,1fr));
  grid-auto-rows:1fr;
  gap:4px 5px;align-content:stretch;overflow:hidden}
.c-col-dock .cd-hub{display:flex;align-items:center;gap:0;
  border:1px solid color-mix(in srgb,var(--c-gold) 50%,var(--c-boxb));border-radius:6px;
  background:color-mix(in srgb,var(--c-gold) 14%,var(--c-card));color:var(--c-text);
  font:inherit;font-weight:700;font-size:10px;line-height:1.2;padding:4px 5px;text-align:left;cursor:pointer;
  min-height:0;min-width:0;overflow:hidden}
.c-col-dock .cd-hub:hover{border-color:var(--c-gold);background:color-mix(in srgb,var(--c-gold) 24%,var(--c-card))}
.c-col-dock .cd-hub.empty{opacity:.7;border-style:dashed}
.c-col-dock .cd-nm{flex:1 1 auto;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:10px;line-height:1.2}
.c-col-dock .cd-n{display:none}   /* count stays in title tooltip; badge ate name width */
html.dark .c-col-dock{background:color-mix(in srgb,var(--c-gold) 16%,#1d0d0f);box-shadow:0 4px 18px rgba(0,0,0,.4)}

/* UK AI Universe topsite back-link */
.topsite-link{margin:0 0 10px}.topsite-btn{display:inline-flex;align-items:center;gap:10px;padding:6px 12px 6px 6px;border-radius:999px;border:1.5px solid var(--border,currentColor);background:var(--card,transparent);color:var(--text,currentColor);text-decoration:none;font-weight:700;font-size:.84rem;line-height:1;box-shadow:0 1px 0 rgba(0,0,0,.04)}.topsite-btn:hover{opacity:.92;text-decoration:none;border-color:var(--text,currentColor)}.topsite-btn .topsite-logo{display:block;height:28px;width:auto;flex:0 0 auto}.topsite-btn .topsite-label{padding-right:4px}.topsite-btn.topsite-inline{padding:2px 8px 2px 4px;font-size:.78rem;gap:6px;vertical-align:middle}.topsite-btn.topsite-inline .topsite-logo{height:22px}

/* ---- v15 (Alex 27 Oct 2026): chart2d.colTint - colleges WITH content get a light tint of the university's colour (Cambridge pastel,
   Oxford sandstone); dark text on the tint in both themes so names stay readable. Empty (audited, no body) colleges keep the dashed style. ---- */
.c-col-dock.cd-tint .cd-hub:not(.empty){background:var(--col-tint);border-color:color-mix(in srgb,var(--col-tint) 70%,#000);color:#1d1a16}
.c-col-dock.cd-tint .cd-hub:not(.empty):hover{background:color-mix(in srgb,var(--col-tint) 82%,#000);border-color:color-mix(in srgb,var(--col-tint) 50%,#000)}
.c-col-dock.cd-tint .cd-hub:not(.empty) .cd-nm{color:#1d1a16}
.c-coltint .c-colleges .col:not(.empty)>.hd{background:var(--col-tint);color:#1d1a16;border-color:color-mix(in srgb,var(--col-tint) 70%,#000)}
.c-coltint .c-colleges .col:not(.empty)>.hd .n{background:rgba(0,0,0,.12);color:#1d1a16}
.c-coltint .c-colleges .col:not(.empty){background:color-mix(in srgb,var(--col-tint) 35%,var(--c-card))}
/* ---- v15: header subheader line never larger than the byline (removed 31 Oct) (.header-credit, .9rem): the same size wherever the title column has room,
   and still scaling down (one line, bar height unchanged) on narrower desktops ---- */
@media (min-width:1101px){.header-titles .subheader{font-size:min(.9rem,max(.68rem,calc((100vw - 765px) * .0215)))}}
@media (min-width:861px) and (max-width:1100px){.header-titles .subheader{font-size:.82rem}}
/* ---- v15 (Alex 27 Oct 2026): chart2d.sideTop - the side tier (cross-faculty AI centres) is a centred strip under the root node, above the
   University-wide band (Birmingham, Cardiff, Essex, ... modelled on Durham). Headings wrap between words only (never mid-word), and boxes never
   shrink below their longest word, so nothing is clipped. ---- */
.c-sidetop .unit>.hd,.c-sidetop .col>.hd,.c-sidetop .grp.dept>.hd,.c-sidetop .c-colleges>.hd{overflow-wrap:normal;word-break:normal;hyphens:manual}
.c-sidetop .band-row>.unit,.c-sidetop.ov .band-row>.unit,.c-sidetop .band-row .groups.row>.grp.dept,.c-sidetop.ov .band-row .groups.row>.grp.dept{min-width:min-content}
.c-stretch.ov.c-sidetop.c-inline .c-divs{grid-template-columns:repeat(var(--nu,6),minmax(min-content,1fr))}
/* v15 sideTop: dept groups inside the faculty columns never shrink below their longest word (no clipped titles at any width) */
.c-stretch.ov.c-sidetop.c-sidebot .c-divs .grp.dept{min-width:min-content!important}
/* ---- batch-1836 (27 Oct): subheader = exactly the the byline (removed 31 Oct) size (.9rem) on desktop; King's/band-row labels never break mid-word ---- */
@media (min-width:861px){.header-titles .subheader{font-size:.9rem}}
.c-canvas.c-bandrows.c-sidebot .c-divs .unit>.hd,.c-canvas.c-bandrows.c-sidebot .c-divs .unit>.hd>span,.c-canvas.c-bandrows.c-sidebot .c-divs .grp.dept>.hd,.c-canvas.c-bandrows.c-sidebot .c-divs .grp.dept>.hd>span{overflow-wrap:normal;word-break:normal;hyphens:none;-webkit-hyphens:none}
.c-canvas.c-bandrows.c-huge.ov .c-divs>.unit>.hd{font-size:31px}
.c-canvas.c-bandrows.c-huge.ov .c-divs .grp.dept>.hd{font-size:24px}

/* 20:18: toggle knob centred vertically in its track */
.theme-switch .ts-knob{top:50%;margin-top:-5px}

/* ---- charts-2118 (Alex 21:18, 27 Oct 2026) ---- */
/* sideMid (Bath): the cross-faculty strip sits directly under the University-wide band, above the faculty rows; same word-safe rules as sideTop */
.c-sidemid .unit>.hd,.c-sidemid .col>.hd,.c-sidemid .grp.dept>.hd,.c-sidemid .c-colleges>.hd{overflow-wrap:normal;word-break:normal;hyphens:manual}
.c-sidemid .band-row>.unit,.c-sidemid.ov .band-row>.unit,.c-sidemid .band-row .groups.row>.grp.dept,.c-sidemid.ov .band-row .groups.row>.grp.dept{min-width:min-content}
.c-stretch.ov.c-sidemid.c-inline .c-divs{grid-template-columns:repeat(var(--nu,6),minmax(min-content,1fr))}
.c-stretch.ov.c-sidemid.c-sidebot .c-divs .grp.dept{min-width:min-content!important}
/* colHideEmpty (Cambridge): colleges with no AI body in the data are not shown (Oxford-style list of tinted colleges only) */
.c-colhide .c-colleges .col.empty{display:none}
/* divFont (Essex, Loughborough): faculty-row (lower box) text scaled to the size typical of the other universities */
.c-divf.ov .c-divs>.unit>.hd{font-size:calc(42px * var(--divf,1))!important}
.c-divf.ov .c-divs .grp.dept>.hd{font-size:calc(31px * var(--divf,1))!important}
.c-divf .c-divs .card .nm{font-size:calc(16px * var(--divf,1))!important}.c-divf .c-divs .card .u{font-size:calc(13.5px * var(--divf,1))!important}.c-divf .c-divs .card .also{font-size:calc(12.5px * var(--divf,1))!important}
/* fillW / bandRows (UCL, Glasgow): headings wrap between words only */
.c-bandrows .unit>.hd,.c-bandrows .col>.hd,.c-bandrows .grp.dept>.hd,.c-bandrows .c-colleges>.hd{overflow-wrap:normal;word-break:normal;hyphens:manual}
/* 21:20 (Alex): university switch panel = the hub's dark grey; All button a step lighter (as on the hub), active option stays white/black */
.header-credit #uni-switch,.rp-credit #uni-switch,.header-inner .header-credit #uni-switch,.header-inner .rp-credit #uni-switch{background:#3a3a3a}
.header-credit #uni-switch .us-opt.us-all:not(.on),.rp-credit #uni-switch .us-opt.us-all:not(.on){background:#555}
.header-credit #uni-switch .us-opt.us-all:not(.on):hover,.rp-credit #uni-switch .us-opt.us-all:not(.on):hover{background:#666}

/* ---- glasgow2 (27 Oct 2026, follow-up to Alex 21:18) ----
   wrapNotes: the long University-wide band title, the band groups and the side-strip note wrap to the chart instead of setting its width.
   autoCols: faculty columns size to their content (big faculties wider, small ones narrow); departments never narrower than their longest word.
   headPx: [faculty heading, department heading, side-strip heading] overview font sizes (pre-scale px). (Glasgow) */
.c-wrapnotes .band-title,.c-wrapnotes .c-colleges>.sub,.c-wrapnotes .band-row .groups.row>.grp.dept{contain:inline-size}
.c-canvas.c-autocols.c-inline .c-divs{grid-template-columns:repeat(var(--nu,6),minmax(min-content,auto))!important}
.c-stretch.ov.c-autocols.c-sidebot .c-divs .grp.dept{min-width:min-content!important}
.c-headpx.ov .c-divs>.unit>.hd{font-size:var(--hpu)!important}
.c-headpx.ov .c-divs .grp.dept>.hd{font-size:var(--hpd)!important;line-height:1.1}
.c-headpx.ov .c-colleges .col>.hd,.c-headpx.ov .c-colleges .unit>.hd,.c-headpx.ov .c-colleges>.hd{font-size:var(--hps)!important}
.c-headpx .unit>.hd,.c-headpx .col>.hd,.c-headpx .grp.dept>.hd,.c-headpx .c-colleges>.hd,.c-headpx .band-title{overflow-wrap:normal!important;word-break:normal!important;hyphens:manual!important}
/* Cambridge (colHideEmpty sites): Central University band headings wrap between words only - same no-break rules as King's (batch-1836) */
.c-canvas.c-colhide .c-band .unit>.hd,.c-canvas.c-colhide .c-band .unit>.hd>span,.c-canvas.c-colhide .c-band .grp.dept>.hd,.c-canvas.c-colhide .c-band .grp.dept>.hd>span{overflow-wrap:normal;word-break:normal;hyphens:none;-webkit-hyphens:none}

/* ---- durham2 (Alex 22:24, 27 Oct 2026): chart2d.noBreak - every chart heading wraps between words only and boxes never shrink below
   their longest word (Durham: full-width fillW layout) ---- */
.c-nobreak .unit>.hd,.c-nobreak .unit>.hd>span,.c-nobreak .grp.dept>.hd,.c-nobreak .grp.dept>.hd>span,.c-nobreak .col>.hd,.c-nobreak .c-colleges>.hd{overflow-wrap:normal!important;word-break:normal!important;hyphens:manual!important}
.c-nobreak .band-row>.unit,.c-nobreak .c-divs>.unit{min-width:min-content}

/* ---- r14 (Alex 28 Oct 13:13): university headers like the hub ----
   1) banner = the clean source photo (Lanczos upscale), no 1s-and-0s decay or pulsing bits layer (as the Edinburgh trial)
   2) switch panel styled exactly as the hub's (smaller font, sizes, spacing, #3A3A3A)  3) hub disclaimer, sized as on the hub, centred under the switch
   5) Dark/Light slider bottom right, level with the middle of the two note lines, right edge at the ".ai" of www.librairie.ai (exact positions: header script)
   6) www.librairie.ai level with the switch row holding "Queen's" (row 3 of 4 with 36 alphabetical options)
   7) "AI activity, tracked by AI" under the title as on the hub, then "<N> <Name> AI organisations tracked", single-spaced, starting at the title text */
.site-header::before{display:none!important;animation:none!important;background:none!important}
.site-header>.theme-switch{position:absolute;right:1.5rem;bottom:4px;z-index:3;margin:0;transform:none;padding:2px 6px;font-size:.72rem}
.site-header>.theme-switch .ts-track{height:12px;width:22px}.site-header>.theme-switch .ts-knob{width:10px;height:10px;top:50%;margin-top:-5px}
.site-header>.theme-switch .ts-ico{font-size:.7rem}
.site-header .gen-note,.site-header .gen-note *{font-weight:400;font-size:calc(10px - 1pt)}
.site-header .gen-note{line-height:1.2;padding:1px 7px;bottom:1px}
@media (min-width:701px){.site-header>.gen-note{align-items:center;text-align:center}}
@media (max-width:700px){.site-header>.theme-switch{position:relative;right:auto;bottom:auto;display:flex;width:max-content;margin:4px 1rem 4px auto}}
.header-titles p.hl1,.header-titles p.subheader{font-size:.95rem;font-weight:500;margin:0}
@media (min-width:701px){.header-titles p.hl1,.header-titles p.subheader{font-size:clamp(11px,calc((100vw - 790px) * .0255),.95rem)}}
@media (min-width:1240px){.header-titles p.hl1 .lozenge,.header-titles p.subheader .lozenge{white-space:nowrap}}
@media (min-width:861px){
  .header-inner{grid-template-rows:auto auto auto;row-gap:0;padding-bottom:2.05rem}
  .header-titles .title-row{grid-row:1;margin-bottom:.4rem}
  .header-titles p.hl1{grid-column:1;grid-row:2;align-self:start;display:flex}
  .header-titles p.subheader{grid-column:1;grid-row:3;align-self:start;margin-top:2px}
  .header-inner .header-credit,.header-inner .rp-credit{--usf:.625rem;--ush:calc(var(--usf) * 1.45);
    grid-template-rows:calc(var(--ush) + 5px) calc(var(--ush) + 0px) calc(var(--ush) + 0px) calc(var(--ush) + 3px)}
  .header-inner #uni-switch .us-opt,.header-inner .header-credit #uni-switch .us-opt{padding:.18em .42em;line-height:1;letter-spacing:0}
  .header-inner .rp-credit .credit-name,.header-inner .header-credit .credit-name{font-size:.72rem;padding:.12em .55em;line-height:1.15}
  .header-inner .rp-credit .site-url,.header-inner .header-credit .site-url{font-size:.72rem;padding:.12em .55em;line-height:1.15;grid-row:3}
}
.header-titles p.hl1 .lozenge,.header-titles p.subheader .lozenge{padding:.12em .5em;line-height:1.2}
@media (min-width:861px){.header-inner .header-credit .credit-name,.header-inner .rp-credit .credit-name{grid-row:1}}   /* r14: librairie.ai now on the Queen's row (3), so the byline (removed 31 Oct) moves up to the 'All' row to keep clear of it */
@media (max-width:860px){.header-titles p.subheader{margin-top:calc(2px - .45rem)}}   /* r14: single-spaced under 'AI activity, tracked by AI' */
@media (min-width:701px) and (max-width:860px){   /* r14: stacked header band: note and slider sit under the switch block, as on mobile */
  .site-header>.gen-note{position:relative;right:auto;bottom:auto;margin:0 1rem 6px auto;width:max-content;max-width:calc(100% - 2rem);white-space:normal;align-items:flex-end;text-align:right}
  .site-header>.theme-switch{position:relative;right:auto;bottom:auto;display:flex;width:max-content;margin:4px 1rem 4px auto}}
@media (min-width:861px) and (max-width:1240px){.header-inner .hdr-btns>a.back-uni{grid-column:2;grid-row:5;justify-self:start;align-self:start;margin-top:5px}}   /* r14: research/ Back button under the switch so the title column keeps its width */

/* ---- r22 (Alex 29 Oct 10:07): key to the small coloured squares in the overview org chart. Floats over the stage in the
   largest empty patch (placed by app.js placeKey), so no content block moves; colours = the site's type buckets */
.sq-key{--c-card:#fff;--c-text:#5e1821;position:absolute;z-index:4;max-width:53em;padding:5px 9px 6px;border-radius:8px;background:color-mix(in srgb,var(--c-card) 92%,transparent);border:1px solid var(--border);box-shadow:0 1px 6px rgba(27,6,8,.12);color:var(--c-text);line-height:1.25;pointer-events:none}
.sq-key[hidden]{display:none}
.sq-key.sk-tall{width:19.5em}
.sq-key.sk-strip{max-width:none;padding:3px 8px 4px}.sq-key.sk-strip .sk-h,.sq-key.sk-strip .sk-s{display:inline;margin:0 6px 0 0}.sq-key.sk-strip .sk-g{gap:1px 9px;margin-top:1px}
.sq-key.sk-two{width:28.5em}.sq-key.sk-two .sk-g{display:grid;grid-template-columns:1fr 1fr;gap:2px 8px}.sq-key.sk-two .sk-i{white-space:normal}.sq-key.sk-two .sk-ref{grid-column:1/-1}
.sq-key .sk-h{font-weight:800;font-size:1em;letter-spacing:.01em}
.sq-key .sk-s{font-size:.9em;color:var(--muted);margin:1px 0 3px}
.sq-key .sk-g{display:flex;flex-wrap:wrap;gap:2px 10px}
.sq-key.sk-tall .sk-g{flex-direction:column;gap:2px}
.sq-key .sk-i{display:inline-flex;align-items:center;gap:5px;font-size:.92em;white-space:nowrap}
.sq-key .sk-i i{flex:none;width:.95em;height:.95em;border-radius:2px;display:inline-block}
.sq-key .sk-ref{white-space:normal}
.sq-key .sk-ref i{box-sizing:border-box;background:color-mix(in srgb,var(--c) 22%,var(--c-card));border:2px solid var(--c)}
html.dark .sq-key{--c-card:#3d171b;--c-text:#f3e8e9;box-shadow:0 1px 8px rgba(0,0,0,.45)}
@media (min-width:861px){.site-header>.gen-note{transform:translateY(-1em)}}   /* r22 (Alex 10:08): note one line-height higher on desktop; slider kept where it was (header script) */
/* r22 fallback: compact 'Key' tab where no empty patch fits the full key; the key opens over the chart on hover / focus / tap */
.sq-key.sk-pill{padding:0;border:0;background:none;box-shadow:none;max-width:none;pointer-events:auto}
.sq-key .sk-tab{display:inline-flex;align-items:center;gap:5px;font:inherit;font-weight:700;font-size:1em;line-height:1;padding:3px 8px;border-radius:999px;cursor:pointer;color:var(--c-text);background:color-mix(in srgb,var(--c-card) 92%,transparent);border:1px solid var(--border);box-shadow:0 1px 6px rgba(27,6,8,.12);white-space:nowrap}
.sq-key .sk-mini{display:inline-flex;gap:1px}.sq-key .sk-mini i{width:.8em;height:.8em;border-radius:2px;display:inline-block}
.sq-key .sk-pop{display:none;position:absolute;left:0;top:calc(100% + 4px);width:max-content;max-width:min(30em,calc(100vw - 40px));padding:5px 9px 6px;border-radius:8px;background:var(--c-card);border:1px solid var(--border);box-shadow:0 2px 12px rgba(27,6,8,.25)}
.sq-key.sk-up .sk-pop{top:auto;bottom:calc(100% + 4px)}.sq-key.sk-rt .sk-pop{left:auto;right:0}
.sq-key.sk-pill:hover .sk-pop,.sq-key.sk-pill:focus-within .sk-pop,.sq-key.sk-pill.open .sk-pop{display:block}

/* r23 (Alex 29 Oct 10:43): news-ticker headlines all white (the light events bar keeps its dark links); hover = underline only */
.news-bar:not(.ev-bar) .news-item a,.news-bar:not(.ev-bar) .news-item a:hover,html.dark .news-bar:not(.ev-bar) .news-item a,html.dark .news-bar:not(.ev-bar) .news-item a:hover{color:#fff}
/* r23 (Alex 29 Oct 10:46): www.librairie.ai moves up one switch row, level with the Exeter…Liverpool row (row 2 of the 4-row switch; the same row on every site) */
@media (min-width:861px){.header-inner .header-credit .site-url,.header-inner .rp-credit .site-url{grid-row:2}}

/* r24 (Alex 29 Oct 11:20): the 2D org chart is static - no zoom/pan; +, -, fit and centre are 3D-only (the expand button stays); page scroll and touch scroll pass through */
.stage.v2d #zoom-in,.stage.v2d #zoom-out,.stage.v2d #zoom-fit,.stage.v2d #zoom-centre{display:none}
.c-view{cursor:default;touch-action:auto}
.c-view .card{cursor:pointer}

/* wsD (31 Oct): papers tier toggle - default peer-reviewed & arXiv; working papers / other preprints / datasets optional */
.tier-tg{display:inline-flex;flex:0 0 auto;border:1px solid var(--border);border-radius:999px;overflow:hidden;font-size:.7rem;line-height:1.2;vertical-align:middle}.tier-tg button{border:0;background:transparent;color:var(--text);font:inherit;font-weight:600;padding:3px 10px;cursor:pointer;white-space:nowrap}.tier-tg button+button{border-left:1px solid var(--border)}.tier-tg button[aria-pressed="true"]{background:#000;color:#fff}html.dark .tier-tg button[aria-pressed="true"]{background:#fff;color:#000}.tier-tg button:focus-visible{outline:2px solid currentColor;outline-offset:-2px}
.papers-tier{padding:5px 10px;border-bottom:1px solid var(--border)}

/* ===== r27 (Alex 29 Oct 17:33): Government-model header on every university site (appended after any per-site theme, so identical everywhere).
   Black lozenges; Union Jack at the left end of the title lozenge; the small black UK AI Universe section switch with its kicker;
   black Gen-AI note centred under the switch; universities listing as a white strip along the bottom of the header; black ticker. ===== */
.site-header .lozenge,.site-header .header-titles h1 .lozenge,.site-header .header-titles p .lozenge,.site-header .header-credit a.lozenge,html.dark .site-header .lozenge{background:#000!important;color:#fff}
@media (min-width:1101px){.header-titles h1{font-size:1.6rem;letter-spacing:.03em}}
.site-header .header-titles h1 .lozenge{padding:.12em 1.15em .12em .5em}
.site-header .header-titles h1 .lozenge::before{content:"";display:inline-block;width:.8em;height:.8em;margin-right:.34em;vertical-align:-.04em;background:url("uk-ai-icon.svg") no-repeat 50% 50%/contain}
/* section switch: black bar, 10px bold caps, current = white pill with black text; not-ready = 50%, unlinked */
#uni-switch.sec-switch{position:relative;overflow:visible}
#uni-switch.sec-switch,html.dark #uni-switch.sec-switch,.header-credit #uni-switch.sec-switch,.header-inner .header-credit #uni-switch.sec-switch{background:#000!important}
#uni-switch.sec-switch .us-opt{color:#fff}
#uni-switch.sec-switch .us-opt.us-all:not(.on),html.dark #uni-switch.sec-switch .us-opt.us-all:not(.on),.header-credit #uni-switch.sec-switch .us-opt.us-all:not(.on){background:#000!important}
#uni-switch.sec-switch .us-opt:not(.on):not(.us-blocked):hover{background:#333!important}
#uni-switch.sec-switch .us-opt.on,html.dark #uni-switch.sec-switch .us-opt.on{background:#fff!important;color:#000!important}
#uni-switch.sec-switch .us-opt.us-blocked{opacity:.5;cursor:default}
#uni-switch.sec-switch .us-opt.us-blocked:hover{background:#000!important}
#uni-switch.sec-switch::before{content:"THE UK AI UNIVERSE";position:absolute;left:50%;right:auto;transform:translateX(-50%);text-align:center;margin:0;bottom:calc(100% + 3px);font-size:max(8px,.8em);font-weight:700;letter-spacing:.14em;line-height:1;color:#fff;white-space:nowrap;pointer-events:none;
  padding-left:1.32em;background:url("uk-ai-icon.svg") no-repeat 0 50%/1em 1em;text-shadow:0 0 2px rgba(10,16,30,.95),0 0 6px rgba(10,16,30,.85),0 1px 2px rgba(10,16,30,.9)}
@media (max-width:860px){#uni-switch.sec-switch{margin-top:15px}}
/* Gen-AI note: opaque black, centred under the switch at its text width (header script); current wording kept */
.site-header>.gen-note,html.dark .site-header>.gen-note{background:#000!important;transform:none!important}
@media (min-width:861px){.site-header>.gen-note{position:absolute;right:auto;bottom:auto;z-index:2;margin:0;padding:1px 0;box-sizing:border-box;align-items:center;text-align:center;white-space:normal}}
/* universities strip: white band at the bottom of the header, like Government's department strip; the photo stops where it starts */
.site-header{background-origin:content-box;padding-bottom:56px}
.site-header .uni-bar{position:absolute;left:0;right:0;bottom:0;z-index:2;display:flex;flex-direction:row;flex-wrap:wrap;align-items:flex-start;gap:3px;margin:0;background:#fff;padding:7px 24px;box-sizing:border-box}
.site-header .uni-bar.balanced{flex-direction:column;flex-wrap:nowrap}
.site-header .uni-bar .gb-row{display:flex;flex-wrap:nowrap;gap:3px}
.site-header .uni-bar .gb-opt{display:inline-block;font:700 10.24px/1 Inter,system-ui,-apple-system,sans-serif;color:#1F2F4F;background:#fff;border:1px solid #1F2F4F;border-radius:999px;padding:.36em .7em;white-space:nowrap;text-decoration:none}
.site-header .uni-bar .gb-opt:hover,.site-header .uni-bar .gb-opt:focus-visible{background:#E8ECF4;color:#1F2F4F;text-decoration:none}
.site-header .uni-bar .gb-opt.on{background:#1F2F4F;color:#fff;border-color:#1F2F4F;cursor:default}
html.dark .site-header .uni-bar{background:var(--page-bg)}
html.dark .site-header .uni-bar .gb-opt{background:rgba(255,255,255,.06);color:#fff;border-color:rgba(255,255,255,.55)}
html.dark .site-header .uni-bar .gb-opt:hover{background:#fff;color:#1F2F4F}
html.dark .site-header .uni-bar .gb-opt.on{background:#fff;color:#1F2F4F;border-color:#fff}
/* r30 (Alex 30 Oct 10:39): the All pill is Union Jack red (#C8102E, from assets/uk-ai-icon.svg) with white text when not selected; black with white text when selected / hovered / clicked */
.site-header .uni-bar .gb-opt.gb-all,html.dark .site-header .uni-bar .gb-opt.gb-all{background:#C8102E;color:#fff;border-color:#C8102E}
.site-header .uni-bar .gb-opt.gb-all.on,.site-header .uni-bar .gb-opt.gb-all:hover,.site-header .uni-bar .gb-opt.gb-all:focus-visible,.site-header .uni-bar .gb-opt.gb-all:active,html.dark .site-header .uni-bar .gb-opt.gb-all.on,html.dark .site-header .uni-bar .gb-opt.gb-all:hover,html.dark .site-header .uni-bar .gb-opt.gb-all:focus-visible,html.dark .site-header .uni-bar .gb-opt.gb-all:active{background:#000;color:#fff;border-color:#000}
.site-header>.theme-switch{position:absolute;right:24px;bottom:4px;z-index:6!important}
@media (max-width:860px){.site-header>.theme-switch{position:absolute;right:12px;bottom:4px;margin:0}.site-header .uni-bar{padding:6px 84px 6px 12px}}
/* ticker: black, white label with black text, white headlines */
.news-bar:not(.ev-bar),html.dark .news-bar:not(.ev-bar){background:#000!important;box-shadow:0 2px 10px rgba(0,0,0,.18)}
.news-bar:not(.ev-bar) .news-label,html.dark .news-bar:not(.ev-bar) .news-label{background:#fff;color:#000}

/* BETA badge (30 Oct 2026): beta-badge.css (inlined last) sets .site-header{position:relative}; the university home header stays fixed (higher specificity) */
body.v2d .site-header{position:fixed}

@media (max-width:700px){.site-header .header-titles h1{margin-top:10px}}   /* BETA badge (30 Oct 2026): on phones the title starts below the badge (4px + 16px) */

/* Alex 30 Oct 22:02: THE UK AI UNIVERSE kicker links to the UK AI Universe page (transparent link over the ::before text) */
#uni-switch .us-kick{position:absolute;left:0;right:0;bottom:calc(100% + 1px);height:calc(max(8px,.8em) + 4px);display:block;z-index:2;cursor:pointer;background:transparent;padding:0;margin:0}#uni-switch:has(.us-kick:hover)::before{text-decoration:underline}

/* Alex 31 Oct 08:20: title reads UK UNIVERSITIES AI UNIVERSE: [UNIVERSITY]; first part links to the Universities home. Disclaimer box grown so it fully covers the text. */
.uu-title .uu-home,.uu-title .uu-home:visited,.uu-title a.home-title,.uu-title a.home-title:visited{color:inherit;text-decoration:none}.uu-title .uu-home:hover,.uu-title a.home-title:hover{text-decoration:underline;text-underline-offset:3px}
.site-header>.gen-note,html.dark .site-header>.gen-note{box-shadow:0 0 0 5px #000!important}
@media (min-width:861px){.uu-title:has(a.home-link){white-space:nowrap;font-size:.8em}}
@media (min-width:861px){.uu-title.uu-long:has(a.home-link){font-size:var(--uu-fs,.66em)}}

/* Alex 31 Oct 13:00: BETA · www.librairie.ai · light/dark slider share the bottom row (positions set by the hdr27 BETA script); on narrow screens the strip keeps a line free for them */
@media (max-width:860px){.site-header .uni-bar{padding:6px 12px 28px 12px}}
