:root{color-scheme:light dark;--color-white:#fafafa;--color-black:#1B1B1B;--color-logo-light:var(--color-black);--color-accent:#A65D4E;--color-border:#e0e0e0;--color-bg-alt:#f5f5f5;--color-primary:#005ea5;--color-footer-text:#5d5d5d;--color-footer-link:#8F4E42;--hero-overlay-opacity:40%}@font-face{font-family:Raleway;font-style:normal;font-weight:400 700;font-display:swap;src:url(../fonts/raleway-400-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Raleway;font-style:normal;font-weight:400 700;font-display:swap;src:url(../fonts/raleway-400.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Raleway;font-style:italic;font-weight:400 700;font-display:swap;src:url(../fonts/raleway-400i-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Raleway;font-style:italic;font-weight:400 700;font-display:swap;src:url(../fonts/raleway-400i.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:libre baskerville;font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/libre-baskerville-400-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:libre baskerville;font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/libre-baskerville-400.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:libre baskerville;font-style:italic;font-weight:400;font-display:swap;src:url(../fonts/libre-baskerville-400i-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:libre baskerville;font-style:italic;font-weight:400;font-display:swap;src:url(../fonts/libre-baskerville-400i.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:libre baskerville;font-style:normal;font-weight:700;font-display:swap;src:url(../fonts/libre-baskerville-700-ext.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:libre baskerville;font-style:normal;font-weight:700;font-display:swap;src:url(../fonts/libre-baskerville-700.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}[hidden]{display:none!important}body{font-family:raleway,sans-serif;font-weight:400;background:var(--color-white);color:var(--color-black);margin:0;font-size:larger}h1,h2{font-family:raleway,sans-serif;font-weight:400}a{color:var(--color-accent)}a:hover{color:var(--color-accent);text-decoration:underline}.skip-link{position:absolute;left:1rem;top:-100%;z-index:2000;padding:.65rem .9rem;color:var(--color-black);background:var(--color-white);text-decoration:none;border-radius:3px;border:2px solid var(--color-accent)}.skip-link:focus,.skip-link:focus-visible{top:1rem;outline:none}.nav-card,.nav-card:hover{color:var(--color-black);text-decoration:none;opacity:1}.site-header{background:var(--color-white);position:sticky;top:0;z-index:1000;will-change:transform;box-shadow:0 2px 12px transparent;transition:box-shadow .3s ease}.site-header.scrolled{box-shadow:0 2px 16px rgba(0,0,0,.2)}.header-inner{display:flex;align-items:center;justify-content:space-between;padding:.75rem 0;transition:padding .3s ease}.container.header-inner{width:90%;margin-left:auto;margin-right:auto}.logo{display:flex;align-items:center}.logo .logo-text__title,.logo .logo-text__subtitle{transition:color .2s ease}.logo:hover .logo-text__title,.logo:hover .logo-text__subtitle{color:var(--color-accent)}.logo .logo-text__title{font-family:libre baskerville,serif;display:block;margin:0;color:var(--color-logo-light);font-size:26px;transition:color .2s ease,font-size .3s ease}.logo .logo-text__subtitle{font-family:raleway,sans-serif;font-weight:400;display:block;font-size:14px;color:var(--color-logo-light);margin:0;line-height:1.3;transition:color .2s ease,font-size .3s ease}.logo a:hover .logo-svg g,.logo a:hover .logo-svg path{fill:var(--color-accent)}.logo-svg{display:flex;margin-right:1em;overflow:hidden;transition:height .3s ease;height:80px}.logo-svg svg{height:80px;width:auto;will-change:transform;transition:height .3s ease,transform .3s ease}.logo-svg svg g,.logo-svg svg path{fill:var(--color-logo-light);transition:fill .2s ease}.logo-text{display:flex;align-items:center;gap:1rem;transform:translateY(-15px);transition:transform .3s ease,gap .3s ease}.menu-toggle{display:none;background:0 0;border:none;font-size:2.5rem;cursor:pointer;line-height:1;transition:color .2s ease}.menu-toggle:hover{color:var(--color-accent)}nav ul{display:flex;list-style:none;gap:2rem}nav a{text-decoration:none;letter-spacing:2px;color:var(--color-black)}nav a:hover{text-decoration:none}nav a.active,nav a.ancestor{color:var(--color-accent)}nav li.has-dropdown{position:relative}nav .nav-disclosure{display:flex;align-items:stretch;gap:.1rem}nav .nav-disclosure__link{display:inline-flex;align-items:center}nav .nav-disclosure__toggle{display:inline-flex;align-items:center;justify-content:center;min-width:2rem;padding:0 .35rem;border:0;background:0 0;color:var(--color-black);cursor:pointer}nav .nav-disclosure__toggle:hover{color:var(--color-accent)}nav .nav-disclosure__toggle:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}nav .nav-disclosure__caret{display:inline-block;width:.6rem;height:.6rem;border-right:2px solid;border-bottom:2px solid;transform:rotate(45deg)translateY(-.08rem);transform-origin:center;transition:transform .3s ease}nav .nav-disclosure__toggle[aria-expanded=true] .nav-disclosure__caret{transform:rotate(225deg)translateY(-.02rem)}nav .dropdown{display:none;position:absolute;top:100%;left:50%;transform:translateX(-50%);background:var(--color-white);border:1px solid #e0e0e0;border-top:3px solid var(--color-accent);min-width:200px;flex-direction:column;gap:0;padding:8px 0;z-index:200}nav .dropdown:not([hidden]){display:flex}nav .dropdown li{width:100%}nav .dropdown a{display:block;padding:8px 20px;letter-spacing:.05em;white-space:nowrap;font-size:.875rem}nav .dropdown a:hover{color:var(--color-accent)}nav .dropdown a.active{color:var(--color-accent);font-weight:700}.site-header.scrolled .header-inner{padding:.3rem 0}.site-header.scrolled .logo-svg{height:48px}.site-header.scrolled .logo-svg svg{height:48px}.site-header.scrolled .logo-text{flex-direction:column;align-items:flex-start;gap:.1rem;transform:none}.site-header.scrolled .logo-text__title{font-size:18px}.site-header.scrolled .logo-text__subtitle{font-size:11px}@media(max-width:1100px){.logo-text{flex-direction:column;align-items:flex-start;gap:.1rem;transform:none}}@media(max-width:900px){.menu-toggle{display:block}#nav-menu{display:none;position:absolute;top:100%;right:0;left:0;background:var(--color-white);border-top:1px solid #ccc;z-index:100;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}#nav-menu.active{display:block;max-height:calc(100dvh - 100%)}#nav-menu ul{flex-direction:column;gap:0;padding:0;margin:0}#nav-menu li a{display:block;padding:.75rem 1.5rem;border-bottom:1px solid #eee}#nav-menu .nav-disclosure{display:grid;grid-template-columns:minmax(0,1fr)auto;gap:0}#nav-menu .nav-disclosure__link,#nav-menu .nav-disclosure__toggle{border-bottom:1px solid #eee}#nav-menu .nav-disclosure__toggle{min-width:3.5rem}nav .dropdown{position:static;transform:none;box-shadow:none;border:none;border-top:none;background:#f5f5f5;padding:0;min-width:0}nav .dropdown:not([hidden]){display:flex}nav .dropdown a{padding:.65rem 2.5rem;font-size:.875rem;letter-spacing:.05em}}.hero{height:clamp(120px,25vw,275px);position:relative;overflow:hidden;display:flex;align-items:center;transform:translateZ(0);justify-content:center}.hero::before{content:'';position:absolute;inset:-10%;background:50%/cover no-repeat;animation:hero-pan 30s ease-in-out infinite alternate;z-index:0}.hero::after{content:'';position:absolute;inset:0;background:rgba(0,0,0,var(--hero-overlay-opacity));z-index:2}.hero--page{min-height:clamp(60px,10vw,120px);height:auto;padding:16px 0}.hero--page::after{content:'';position:absolute;inset:0;background:rgba(0,0,0,var(--hero-overlay-opacity));z-index:2}.hero--page::before{animation:none;background-position:var(--hero-pos,center)}.hero--page .hero-overlay h1{font-size:clamp(1.5rem,6vw,3.5rem);letter-spacing:.05em;text-align:center}@media(prefers-reduced-motion:reduce){.hero::before{animation:none}}#particles-js{position:absolute;inset:0;z-index:1;pointer-events:none}#particles-js canvas{display:block;width:100%!important;height:100%!important}.hero-overlay{position:relative;z-index:3}@keyframes hero-pan{0%{transform:scale(1.1)translate(0,0)}100%{transform:scale(1.25)translate(-3%,-2%)}}.hero-title{display:flex;align-items:center;gap:1.8em}.hero-logo{display:flex}.hero-logo svg{height:clamp(4rem,18vw,14rem);width:auto}.hero-logo svg g,.hero-logo svg path{fill:#fff}.hero-overlay h1{font-size:clamp(1.875rem,8.75vw,6.25rem);color:#fff;font-family:libre baskerville,serif}.container{width:75%;margin:40px auto}.section-block{display:flow-root;margin-bottom:60px}.section-block h2{position:relative;margin-left:20px;padding-bottom:25px}.section-block h2:not(:first-child){margin-top:50px}.section-block h2::before{content:'';position:absolute;left:-35px;top:5px;width:10px;height:55px;background:var(--color-accent)}.section-block h2 .mdi{color:var(--color-accent);font-size:1.2em;vertical-align:middle;margin-right:.3em}.section-block h3{position:relative;margin-left:20px;margin-top:1.2em;margin-bottom:.3em;font-size:1.3rem}.section-block h3::before{content:'';position:absolute;left:-35px;top:6px;width:10px;height:10px;background:var(--color-accent)}.section-block p{position:relative;margin-left:20px}.float-image{width:min(100%,var(--float-image-width,320px));margin:0 0 1rem 1.5rem}.float-image--left{float:left;margin:0 1.5rem 1rem 0}.float-image--right{float:right}.float-image img{display:block;width:100%;height:auto}.float-image__caption{margin-top:.5rem;font-size:.9rem;line-height:1.4;color:#666}@media(max-width:700px){.float-image{float:none;width:100%;margin:0 0 1rem}}.subsection-logo{display:inline-flex;vertical-align:middle;margin-right:.3em}.subsection-logo svg{height:1.2em;width:auto}.subsection-logo svg g,.subsection-logo svg path{fill:var(--color-accent)}.nav-card__icon.subsection-logo{margin-right:0}.nav-card__icon.subsection-logo svg{width:1.8rem;height:1.8rem}.stats-bar{background:var(--color-black);padding:16px 24px;margin-bottom:40px;border-radius:2px}.stats-bar__inner{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;text-align:center}@media(max-width:700px){.stats-bar__inner{grid-template-columns:repeat(2,1fr)}}.stats-bar__item{display:flex;flex-direction:column;gap:2px;padding:8px 0}.stats-bar__value{font-family:libre baskerville,serif;font-size:clamp(1.2rem,2vw,1.8rem);color:var(--color-accent);line-height:1}.stats-bar__label{font-family:raleway,sans-serif;font-size:.7rem;letter-spacing:.1em;text-transform:uppercase;color:#fafafa}.nav-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:24px;margin-bottom:60px}@media(max-width:900px){.nav-cards{grid-template-columns:repeat(2,1fr)}}@media(max-width:500px){.nav-cards{grid-template-columns:1fr}}.nav-card{display:flex;flex-direction:column;padding:28px 24px;border:1px solid #e0e0e0;border-top:4px solid var(--color-accent);border-radius:2px;text-decoration:none;color:var(--color-black);transition:box-shadow .2s ease,transform .2s ease}.nav-card:hover{box-shadow:0 4px 16px rgba(0,0,0,.2);transform:translateY(-2px);color:var(--color-black);opacity:1}.nav-card__inline-image{display:block;width:100%;max-height:56px;object-fit:contain;object-position:left center;margin-top:6px;margin-bottom:10px}.nav-card__icon{font-size:2.4rem;color:var(--color-accent);margin-bottom:12px}.nav-card__title{font-family:raleway,sans-serif;font-weight:700;font-size:1rem;letter-spacing:.05em;margin:0 0 10px}.nav-card__blurb{font-size:.875rem;color:#555;margin:0 0 16px;line-height:1.5}.nav-card__link{margin-top:auto;font-size:.8rem;letter-spacing:.05em;color:var(--color-accent);font-weight:700}.nav-cards--image{grid-template-columns:repeat(auto-fill,minmax(260px,260px));justify-content:start}@media(max-width:900px){.nav-cards--image{grid-template-columns:repeat(auto-fill,minmax(240px,240px))}}@media(max-width:500px){.nav-cards--image{grid-template-columns:1fr}}.nav-card--image{padding:0;overflow:hidden}.nav-card--image .nav-card__image{display:block;width:100%;aspect-ratio:4/3;object-fit:contain;object-position:center;background:var(--color-bg-alt);border-bottom:1px solid var(--color-border)}.nav-card--image .nav-card__title{margin:0;padding:16px 20px}.section-split{display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:start;margin-bottom:60px}@media(max-width:900px){.section-split{grid-template-columns:1fr}}.section-split__content{margin-bottom:0}.section-split__nav{display:flex;flex-direction:column;gap:12px}.section-split__nav .nav-card{flex-direction:row;align-items:flex-start;gap:16px;padding:16px 20px}.section-split__nav .nav-card__icon{font-size:1.8rem;margin-bottom:0;flex-shrink:0;margin-top:3px}.section-split__nav .nav-card__body{display:flex;flex-direction:column;flex:1}.section-split--partner{grid-template-columns:minmax(0,1fr)minmax(240px,40%)}@media(max-width:1100px){.section-split--partner{gap:32px;grid-template-columns:minmax(0,1fr)minmax(220px,34%)}}.partner-media{border:1px solid var(--color-border);border-top:4px solid var(--color-accent);border-radius:2px;background:var(--color-bg-alt);padding:24px}.partner-media--float{float:right;width:min(100%,clamp(220px,34vw,420px));margin:0 0 1.25rem 1.5rem}.section-block__terms{clear:both}@media(max-width:700px){.partner-media--float{float:none;width:100%;margin:0 0 1rem}}.partner-media img{display:block;width:100%;max-height:420px;object-fit:contain;object-position:center}.pull-quote{background:var(--color-accent);padding:48px 0}.pull-quote__inner{width:75%;margin:0 auto}.pull-quote blockquote{font-family:libre baskerville,serif;font-style:italic;font-size:clamp(1.1rem,2.5vw,1.6rem);color:var(--color-white);margin:0;line-height:1.6;border:none;padding:0}.logo-strip{background:#f0f0f0;border-top:1px solid #ddd;padding:32px 0}.logo-strip__social,.logo-strip__inner,.logo-strip__footer,.logo-strip__copyright{width:75%;margin:0 auto}.logo-strip__copyright,.logo-strip__footer,.logo-strip__label{font-size:.8rem;letter-spacing:.08em;text-transform:uppercase;color:var(--color-footer-text);white-space:normal;overflow-wrap:anywhere}.logo-strip__inner{display:flex;align-items:center;gap:40px;flex-wrap:wrap}.logo-strip__social{margin-bottom:1rem}.logo-strip__social-link{display:inline-flex;align-items:center;gap:.5rem;color:var(--color-footer-link);font-size:.85rem;letter-spacing:.05em;text-transform:uppercase;text-decoration:none;white-space:normal;overflow-wrap:anywhere}.logo-strip__social-link .mdi{font-size:1.2rem}.logo-strip__social-link:hover{color:var(--color-footer-link);text-decoration:underline}.logo-strip__footer{margin-top:3rem}.logo-strip__footer p{margin:0;color:var(--color-footer-text);line-height:1.5;text-transform:none;letter-spacing:normal}.logo-strip__footer a{color:var(--color-footer-link)}.logo-strip__footer a:hover{color:var(--color-footer-link)}.logo-strip__footer-links{width:75%;margin:1.5rem auto 0}.logo-strip__footer-link{display:inline-block;font-size:.8rem;letter-spacing:.05em;color:var(--color-footer-link);text-decoration:none;white-space:normal;overflow-wrap:anywhere}.logo-strip__footer-link:hover{text-decoration:underline}.logo-strip__copyright{margin-top:.5rem}.logo-strip__logos{display:flex;align-items:center;gap:40px;flex-wrap:wrap}.logo-strip__img{height:48px;width:auto;display:block;filter:grayscale(100%)opacity(.6);transition:filter .2s ease}.logo-strip__img--ukri{height:40px}.logo-strip__img--uob{height:56px}.logo-strip__img:hover{filter:grayscale(0%)opacity(1)}.breadcrumb{margin-bottom:12px}.breadcrumb ol{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;align-items:center;font-size:.8rem;color:#888}.breadcrumb li{display:flex;align-items:center}.breadcrumb li:not(:last-child)::after{content:'/';margin:0 6px;color:#ccc}.breadcrumb li[aria-current=page]{color:var(--color-accent)}.breadcrumb a{color:#666;text-decoration:none}.breadcrumb a:hover{color:var(--color-accent);text-decoration:underline}.article-title-bar{padding:20px 24px}.article-title-bar .article-title{font-family:libre baskerville,serif;font-size:clamp(1.2rem,2.5vw,2rem);color:#c9705f;margin:0 0 4px;line-height:1.2}.article-title-bar .article-date{color:#fafafa;font-family:raleway,sans-serif;font-size:.75rem;letter-spacing:.08em;text-transform:uppercase;margin:0}.article-date{font-size:.9rem;color:#666;margin-bottom:1.5rem;margin-top:0}.news-item{position:relative;margin-bottom:20px}.news-item .square{position:absolute;left:-15px;top:6px;width:10px;height:10px;background:var(--color-accent)}.team-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:24px;margin:32px 0 60px}@media(max-width:900px){.team-cards{grid-template-columns:repeat(2,1fr)}}@media(max-width:500px){.team-cards{grid-template-columns:1fr}}.team-card{border:1px solid #e0e0e0;border-top:4px solid var(--color-accent);border-radius:2px;overflow:hidden}.team-card__photo-frame{width:100%;aspect-ratio:1/1;overflow:hidden}.team-card__photo{width:100%;height:100%;object-fit:cover;display:block}.team-card__photo--placeholder{background:#e8e8e8;display:flex;align-items:center;justify-content:center}.team-card__photo--placeholder .mdi{font-size:4rem;color:#bbb}.team-card__body{padding:20px}.team-card__body p{margin-left:0}.team-card__name{font-family:raleway,sans-serif;font-size:1.1rem;color:var(--color-black);margin:0 0 4px}.team-card__role{font-family:raleway,sans-serif;font-size:.75rem;letter-spacing:.08em;text-transform:uppercase;color:var(--color-accent);margin:0 0 12px}.team-card__bio{font-size:.875rem;color:#555;line-height:1.5;margin:0}.case-study-list{display:flex;flex-direction:column;gap:16px;margin-top:2rem}.case-study-card{display:block;padding:24px 28px;border:1px solid var(--color-border,#ddd);border-radius:4px;text-decoration:none;color:var(--color-black);transition:box-shadow .2s ease,transform .2s ease}.case-study-card:hover{box-shadow:0 4px 16px black;transform:translateY(-2px);color:var(--color-black);opacity:1}.case-study-card__title{font-family:libre baskerville,serif;font-size:1.15rem;font-weight:700;margin:0 0 10px;color:var(--color-black)}.case-study-card__ext-icon{font-size:.9rem;vertical-align:middle;color:#888;margin-left:4px}.case-study-card__blurb{font-size:.9rem;color:#555;line-height:1.6;margin:0 0 12px}.case-study-card__link{font-size:.8rem;letter-spacing:.05em;color:var(--color-accent);font-weight:700}.case-study-card--with-image{display:flex;align-items:stretch;gap:20px;padding:20px}@media(max-width:900px){.case-study-card--with-image{flex-direction:column}}.case-study-card__body{flex:1;min-width:0}.case-study-card__media{flex:0 0 clamp(180px,24vw,260px);width:clamp(180px,24vw,260px);border-radius:2px;overflow:hidden}@media(max-width:900px){.case-study-card__media{flex:none;width:100%;max-width:100%}}.case-study-card__image{display:block;width:100%;height:100%;object-fit:cover;aspect-ratio:16/11}.repo-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;list-style:none;padding:0;margin-top:1.5rem}@media(max-width:700px){.repo-grid{grid-template-columns:1fr}}.repo-grid__item{margin:0}.repo-card{display:flex;flex-direction:column;gap:.8rem;border:1px solid #d0d7de;border-radius:8px;padding:16px;color:#24292f;background:linear-gradient(180deg,#fff 0%,#fbfdff 100%);transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}.repo-card:hover,.repo-card:focus-within{transform:translateY(-1px);box-shadow:0 8px 20px rgba(31,35,40,.1);border-color:#8c959f;color:#24292f;opacity:1}.repo-card__head{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.repo-card__icon{color:#57606a;font-size:1.8rem}.repo-card__path{margin:0;font-size:.95rem;color:#0969da}.repo-card__path strong{font-weight:700}.repo-card__host{display:inline-flex;align-items:center;gap:.28rem;margin-left:auto;font-size:.78rem;letter-spacing:.08em;font-weight:700;border:1px solid #d8dee4;border-radius:999px;padding:.16rem .45rem;color:#57606a;background:#f6f8fa}.repo-card__host .mdi{font-size:.9rem;line-height:1}.repo-card__host--github{color:#1f2328;border-color:#afb8c1}.repo-card__host--gitlab{color:#9f4000;border-color:#ffb998;background:#fff8f3}.repo-card__description{margin:0;font-size:.9rem;line-height:1.5;color:#57606a}.repo-card__title-link{display:inline-flex;width:fit-content;font-size:.85rem;font-weight:700;color:#0969da;text-decoration:none}.repo-card__title-link:hover,.repo-card__title-link:focus-visible{text-decoration:underline}.repo-card__meta{display:flex;flex-wrap:wrap;gap:.45rem;margin-top:auto}.repo-card__chip{display:inline-flex;align-items:center;gap:.25rem;font-size:.75rem;color:#57606a;background:#f6f8fa;border:1px solid #d8dee4;border-radius:999px;padding:.18rem .5rem;white-space:nowrap;text-decoration:none}.repo-card__chip--lang::before{content:"";width:.52rem;height:.52rem;border-radius:50%;background:#d29922;display:inline-block}.repo-card__chip--visit{margin-left:auto;color:#0969da;border-color:#bfdcff;background:#f2f8ff}.repo-card__chip--visit:hover,.repo-card__chip--visit:focus-visible{text-decoration:underline}.pub-year{border:1px solid var(--color-border,#ddd);border-radius:4px;margin-bottom:1rem}.pub-year__summary{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;cursor:pointer;list-style:none;background:var(--color-bg-alt,#f5f5f5);border-radius:4px;user-select:none}.pub-year__summary::-webkit-details-marker{display:none}.pub-year__summary::before{content:"";display:inline-block;width:.6rem;height:.6rem;border-right:2px solid;border-bottom:2px solid;transform:rotate(-45deg)translateY(-.08rem);transform-origin:center;transition:transform .3s ease;flex-shrink:0}.pub-year[open]>.pub-year__summary::before{transform:rotate(45deg)translateY(-.02rem)}.pub-year__label{font-family:libre baskerville,serif;font-size:1.1rem;font-weight:700;color:var(--color-black)}.pub-year__count{font-size:.85rem;color:#666}.pub-list{list-style:decimal;padding:1rem 1rem 1rem 2.5rem;margin:0}.pub-item{font-size:.9rem;line-height:1.6;padding:.4rem 0;color:#333}.pub-item__doi{display:inline-block;font-size:.82rem;color:var(--color-primary,#005ea5);word-break:break-all}.pub-item__doi::before{content:" "}.spec-card{float:right;margin:0 0 1.5rem 2rem;width:270px;border:1px solid #ddd;border-radius:6px;overflow:hidden;font-size:.85rem;clear:right}@media(max-width:700px){.spec-card{float:none;width:100%;margin:0 0 1.5rem}}.spec-card__header{background:var(--color-black);color:var(--color-white);padding:.65rem 1rem;display:flex;align-items:center;gap:.5rem}.spec-card__header .mdi{font-size:1.1rem;opacity:.8}.spec-card__title{font-family:libre baskerville,serif;font-size:.9rem;font-weight:700}.spec-card__subtitle{font-size:.78rem;opacity:.7;margin-left:auto;font-style:italic}.spec-card__body{margin:0}.spec-card__row{display:flex;justify-content:space-between;align-items:baseline;gap:.75rem;padding:.35rem 1rem;border-bottom:1px solid #eee}.spec-card__row:last-child{border-bottom:none}.spec-card__row:nth-child(even){background:#f8f8f8}.spec-card__row dt{color:#666;flex-shrink:0}.spec-card__row dd{margin:0;font-weight:700;color:var(--color-black);text-align:right}@media(prefers-color-scheme:dark){:root{--color-white:#1e1e1e;--color-black:#e0e0e0;--color-accent:#C9705F;--color-border:#383838;--color-bg-alt:#262626;--color-primary:#4a9edd;--color-logo-dark:#e0e0e0;--color-footer-text:#bdbdbd;--color-footer-link:#e8b1a5;--hero-overlay-opacity:55%}.hero{border-top:1px solid rgba(255,255,255,.12);border-bottom:1px solid rgba(255,255,255,.12)}.hero-overlay h1,.hero-logo svg g,.hero-logo svg path{color:#e0e0e0;fill:#e0e0e0}.logo-text__title,.logo-text__subtitle{color:var(--color-logo-dark)}.logo-svg svg g,.logo-svg svg path{fill:var(--color-logo-dark)}nav .dropdown{border-color:#383838;background:#262626}#nav-menu{border-top-color:#383838}#nav-menu li a{border-bottom-color:#2e2e2e}.stats-bar{background:#252525}.stats-bar__label{color:#c8c8c8}.nav-card{border-color:#383838}.nav-card__blurb{color:#999}.logo-strip{background:#252525;border-top-color:#383838}.logo-strip__label{color:var(--color-footer-text)}.logo-strip__social-link{color:var(--color-footer-link)}.breadcrumb{color:#777}.breadcrumb li::after{color:#444}.breadcrumb a{color:#9a9a9a}.article-date{color:#888}.float-image__caption{color:#9a9a9a}.team-card{border-color:#383838}.team-card__photo--placeholder{background:#2e2e2e}.team-card__photo--placeholder .mdi{color:#555}.team-card__bio{color:#999}.case-study-card__blurb{color:#999}.repo-card{border-color:#383838;background:linear-gradient(180deg,#262626 0%,#222 100%);color:#e0e0e0}.repo-card:hover,.repo-card:focus-within{border-color:#646464;color:#e0e0e0;box-shadow:0 8px 20px rgba(0,0,0,.35)}.repo-card__icon,.repo-card__description,.repo-card__host,.repo-card__chip{color:#b8b8b8}.repo-card__path,.repo-card__title-link,.repo-card__chip--visit{color:#8ec2ff}.repo-card__host,.repo-card__chip{border-color:#4b4b4b;background:#2d2d2d}.repo-card__host--github{color:#d5d5d5;border-color:#666}.repo-card__host--gitlab{color:#ffbf9e;border-color:#8a5a41;background:#312620}.repo-card__chip--lang::before{background:#f5b14f}.repo-card__chip--visit{border-color:#2e5d87;background:#1f2d38}.pub-year__count{color:#9a9a9a}.pub-item{color:#ccc}.spec-card{border-color:#383838}.spec-card__header{background:#252525}.spec-card__title{color:#e0e0e0}.spec-card__subtitle{color:#e0e0e0}.spec-card__header .mdi{color:#e0e0e0}.spec-card__row{border-bottom-color:#2e2e2e}.spec-card__row:nth-child(even){background:#222}.spec-card__row dt{color:#9a9a9a}}