@font-face{font-family:fira sans;font-weight:400;font-display:swap;src:url(/fonts/fira-sans-400.woff2)format("woff2")}@font-face{font-family:fira sans;font-weight:500;font-display:swap;src:url(/fonts/fira-sans-500.woff2)format("woff2")}@font-face{font-family:fira sans;font-weight:600;font-display:swap;src:url(/fonts/fira-sans-600.woff2)format("woff2")}@font-face{font-family:fira sans;font-weight:700;font-display:swap;src:url(/fonts/fira-sans-700.woff2)format("woff2")}@font-face{font-family:fira sans;font-weight:800;font-display:swap;src:url(/fonts/fira-sans-800.woff2)format("woff2")}@font-face{font-family:fira sans;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/fira-sans-400-italic.woff2)format("woff2")}@font-face{font-family:fira sans;font-style:italic;font-weight:700;font-display:swap;src:url(/fonts/fira-sans-700-italic.woff2)format("woff2")}@font-face{font-family:jetbrains mono;font-weight:400;font-display:swap;src:url(/fonts/jetbrains-mono-400.woff2)format("woff2")}@font-face{font-family:jetbrains mono;font-weight:500;font-display:swap;src:url(/fonts/jetbrains-mono-500.woff2)format("woff2")}@font-face{font-family:jetbrains mono;font-weight:700;font-display:swap;src:url(/fonts/jetbrains-mono-700.woff2)format("woff2")}:root{--ink-900:#0a0a0a;--ink-800:#171717;--ink-700:#262626;--ink-600:#3f3f3f;--ink-500:#6b6b6b;--ink-400:#9a9a9a;--ink-300:#c9c9c9;--ink-200:#e4e4e4;--ink-100:#f2f2f2;--paper:#fff;--canvas:#e2f5f6;--pitch:#cdeef0;--cyan:#00d9e0;--cyan-dark:#00a7ac;--green:#00ce00;--uhh-blue:#009cd1;--uhh-red:#e2001a;--font-sans:"Fira Sans",system-ui,-apple-system,"Segoe UI",sans-serif;--font-mono:"JetBrains Mono",ui-monospace,Menlo,Consolas,monospace;--focus:0 0 0 3px color-mix(in srgb,var(--cyan) 55%,transparent)}*,*::before,*::after{box-sizing:border-box}body{margin:0;display:flex;flex-direction:column;min-height:100vh;min-height:100dvh;font:1rem/1.55 var(--font-sans);color:var(--ink-800);background:var(--canvas);-webkit-font-smoothing:antialiased}main{flex:1 0 auto}h1,h2,h3,h4{font-family:var(--font-sans);color:var(--ink-900);line-height:1.15;letter-spacing:-.02em;font-weight:700;margin:1.4em 0 .5em;text-wrap:balance}h1{font-size:clamp(1.9rem,4vw,2.75rem);font-weight:800;margin-top:0}h2{font-size:1.75rem}h3{font-size:1.375rem}h4{font-size:1.125rem}p{margin:0 0 1em;text-wrap:pretty}a{color:var(--uhh-blue);text-decoration:none;font-weight:500}a:hover{color:var(--cyan-dark);text-decoration:underline;text-underline-offset:2px}:focus-visible{outline:none;box-shadow:var(--focus);border-radius:3px}::selection{background:var(--cyan);color:var(--ink-900)}code,kbd,pre{font-family:var(--font-mono);font-size:.92em}code{background:var(--ink-100);padding:.1em .35em;border-radius:3px}pre{background:var(--ink-900);color:#eee;padding:16px;border-radius:8px;overflow:auto}pre code{background:0 0;padding:0}img,iframe,video{max-width:100%;height:auto}iframe{border:2px solid var(--ink-900);border-radius:8px}.wrap{max-width:1120px;margin:0 auto;padding:0 28px}.eyebrow,.meta,.badge{font-family:var(--font-mono)}.eyebrow{font-size:.75rem;font-weight:500;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-500)}.meta{font-size:.75rem;color:var(--ink-500)}.meta a{font-weight:500}.site-header{position:sticky;top:0;z-index:20;background:rgba(255,255,255,.94);backdrop-filter:blur(8px);border-bottom:2px solid var(--ink-900)}.site-header .wrap{display:flex;align-items:center;gap:20px;min-height:68px;flex-wrap:wrap;padding-top:6px;padding-bottom:6px}.logo{display:inline-flex;align-items:center;gap:10px;color:var(--ink-900);font-weight:800;font-size:1rem;letter-spacing:-.01em;line-height:1}.logo:hover{text-decoration:none;color:var(--ink-900)}.logo img{width:30px;height:30px;object-fit:contain}.logo b{color:var(--cyan-dark);font-weight:800}.nav{display:flex;flex-wrap:wrap;gap:2px;flex:1;align-items:center}.nav a{font-size:.875rem;font-weight:500;padding:8px 12px;border-radius:5px;color:var(--ink-700)}.nav a:hover{background:var(--ink-100);text-decoration:none;color:var(--ink-900)}.nav a.on{background:var(--cyan);color:var(--ink-900)}.lang{font-family:var(--font-mono);font-size:.75rem;font-weight:500;padding:6px 10px;border:1.5px solid var(--ink-900);border-radius:5px;color:var(--ink-900)}.lang:hover{text-decoration:none}.nav .lang{margin-left:auto;padding:4px}.dd{position:relative}.dd summary{list-style:none;cursor:pointer;font-size:.875rem;font-weight:500;padding:8px 12px;border-radius:5px;color:var(--ink-700)}.dd summary::-webkit-details-marker{display:none}.dd summary::after{content:"▾";margin-left:5px;font-size:.7em}.dd summary:hover,.dd[open] summary{background:var(--ink-100);color:var(--ink-900)}.dd-menu{position:absolute;top:calc(100% + 6px);left:0;z-index:30;min-width:190px;background:var(--paper);border:2px solid var(--ink-900);border-radius:8px;box-shadow:4px 4px 0 var(--ink-900);padding:6px;display:flex;flex-direction:column}.dd-menu a{padding:8px 10px;border-radius:5px;font-size:.875rem;color:var(--ink-800)}.dd-menu a:hover{background:var(--cyan);text-decoration:none;color:var(--ink-900)}.btn{display:inline-flex;align-items:center;height:32px;padding:0 14px;border:2px solid var(--ink-900);border-radius:5px;background:var(--ink-900);color:var(--paper);font-weight:600;font-size:.875rem}.btn:hover{background:var(--ink-700);color:var(--paper);text-decoration:none}.btn:active{transform:translateY(1px)}.btn.outline{background:0 0;color:var(--ink-900)}.btn.outline:hover{background:var(--ink-100);color:var(--ink-900)}.btn.accent{background:var(--cyan);color:var(--ink-900)}.btn.accent:hover{background:var(--cyan-dark);color:var(--ink-900)}.btn.lg{height:48px;padding:0 22px;font-size:1rem}.hero{position:relative;isolation:isolate;overflow:hidden;border-bottom:2px solid var(--ink-900);background:repeating-linear-gradient(90deg,rgba(255,255,255,.28) 0 90px,transparent 90px 180px),var(--pitch)}.hero .eyebrow{color:var(--ink-600)}.hero h1 em{color:var(--cyan-dark)}.hero .wrap{display:grid;grid-template-columns:1.25fr 1fr;gap:48px;align-items:center;padding-top:64px;padding-bottom:56px}.hero h1{font-size:clamp(2.2rem,5vw,3.6rem);line-height:1.02;margin:12px 0 20px}.hero h1 em{font-style:normal}.hero p.lead{font-size:1.125rem;color:var(--ink-700);max-width:520px;margin-bottom:28px}.hero .cta{display:flex;gap:12px;flex-wrap:wrap}.hero .btn.outline{background:var(--paper)}.hero::before{content:"";position:absolute;z-index:-1;left:0;top:50%;width:315px;height:660px;margin-top:-330px;pointer-events:none;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='315' height='660' fill='none' stroke='white' stroke-opacity='.9' stroke-width='4'%3E%3Crect x='-6' y='60' width='231' height='540'/%3E%3Crect x='-6' y='202.5' width='96' height='255'/%3E%3Cpath d='M225 213.1A135 135 0 0 1 225 446.9'/%3E%3Ccircle cx='157.5' cy='330' r='5' fill='white' fill-opacity='.9' stroke='none'/%3E%3C/svg%3E")no-repeat}@media(max-width:1100px){.hero::before{display:none}}.hero .wrap>div:first-child{position:relative}.hero .wrap>div:first-child::before{content:"";position:absolute;z-index:-1;inset:-60px -80px;pointer-events:none;background:radial-gradient(closest-side,rgba(255,255,255,.85),rgba(255,255,255,.55) 55%,rgba(255,255,255,0))}.mascot{position:relative;justify-self:center;padding:28px;border:2px solid var(--ink-900);border-radius:12px;background:var(--paper);box-shadow:6px 6px 0 var(--ink-900)}.mascot::before,.mascot::after{content:"";position:absolute;z-index:-1;pointer-events:none}.mascot::before{left:50%;top:-100vh;bottom:-100vh;width:4px;margin-left:-2px;background:rgba(255,255,255,.9)}.mascot::after{left:50%;top:50%;width:440px;height:440px;margin:-220px 0 0 -220px;border:4px solid rgba(255,255,255,.9);border-radius:50%}.mascot img{display:block;width:210px;height:210px;object-fit:contain}.section{padding:56px 0}.section-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:28px;flex-wrap:wrap}.section-head h2{margin:0;font-size:2rem;display:flex;align-items:center;gap:12px}.section-head h2::before{content:"";width:14px;height:14px;border-radius:3px;background:var(--cyan);box-shadow:3px 3px 0 var(--ink-900)}.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}.card{display:flex;flex-direction:column;background:var(--paper);border:1px solid var(--ink-200);border-radius:12px;box-shadow:0 2px 8px rgba(10,10,10,8%);overflow:hidden;color:inherit;transition:box-shadow .2s,transform .2s}.card:hover{text-decoration:none;box-shadow:4px 4px 0 var(--ink-900);transform:translate(-1px,-1px);color:inherit}.card .bar{height:8px;background:var(--cyan)}.card:nth-child(3n+2) .bar{background:var(--green)}.card:nth-child(3n) .bar{background:var(--ink-900)}.card .thumb{aspect-ratio:16/9;object-fit:cover;width:100%;border-bottom:1px solid var(--ink-200);background:var(--ink-100)}.card .body{padding:20px;display:flex;flex-direction:column;flex:1}.card h3{font-size:1.1875rem;line-height:1.2;margin:10px 0 8px}.card p{font-size:.875rem;color:var(--ink-500);margin:0 0 14px;flex:1}.card .more{font-family:var(--font-mono);font-size:.75rem;font-weight:500;color:var(--cyan-dark)}.badge{display:inline-block;font-size:.6875rem;font-weight:500;letter-spacing:.08em;text-transform:uppercase;padding:3px 8px;border-radius:3px;line-height:1;background:var(--cyan);color:var(--ink-900)}.badge.ink{background:var(--ink-900);color:var(--paper)}.pager{display:flex;justify-content:center;gap:20px;align-items:center;margin-top:36px;font-family:var(--font-mono);font-size:.8125rem}.article{max-width:884px;margin:40px auto 0;padding:64px 88px 80px;background:var(--paper);border:1px solid var(--ink-200);border-radius:12px;box-shadow:0 2px 8px rgba(10,10,10,6%);border-top:6px solid var(--cyan)}.article .content{font-size:1.0625rem;line-height:1.7;color:var(--ink-800)}.article .content h2{font-size:1.6rem}.article .content h3{font-size:1.3rem}.article .meta-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:14px}.article .hero-img{width:100%;border:2px solid var(--ink-900);border-radius:12px;margin:0 0 28px}.content img{border-radius:6px}.content a img{border:0}.content blockquote{margin:1.2em 0;padding:4px 0 4px 18px;border-left:4px solid var(--cyan)}.content table{border-collapse:collapse;display:block;overflow-x:auto}.content td,.content th{border:1px solid var(--ink-300);padding:6px 10px;text-align:left}.content th{background:var(--ink-100)}.alignleft{float:left;margin:0 18px 10px 0}.alignright{float:right;margin:0 0 10px 18px}.aligncenter{display:block;margin:0 auto;text-align:center}figure{margin:1.2em 0}figcaption{font-size:.8125rem;color:var(--ink-500);margin-top:6px}.ngg-galleryoverview,.wppa-container,.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;clear:both}.ngg-gallery-thumbnail-box{margin:0}.ngg-gallery-thumbnail img,.gallery img{width:100%;aspect-ratio:4/3;object-fit:contain;background:var(--ink-100)}.tags{display:flex;gap:8px;flex-wrap:wrap;margin-top:32px;padding-top:22px;border-top:1px solid var(--ink-200)}.tag{font-family:var(--font-mono);font-size:.75rem;padding:4px 10px;border:1.5px solid var(--ink-900);border-radius:999px;color:var(--ink-900);background:var(--paper)}.tag:hover{background:var(--cyan);text-decoration:none;color:var(--ink-900)}.comments{margin-top:48px;padding-top:24px;border-top:2px solid var(--ink-900)}.comment{border-left:3px solid var(--ink-300);padding-left:14px;margin:18px 0;font-size:.9375rem}.comment.reply{margin-left:28px}.list{list-style:none;padding:0;margin:0}.list li{display:flex;gap:14px;padding:10px 0;border-bottom:1px solid var(--ink-200)}.list time{font-family:var(--font-mono);font-size:.75rem;color:var(--ink-500);flex:none;padding-top:4px}.page-title{padding-top:40px;padding-bottom:24px}.page-title h1{margin-bottom:.4em}.page-title .grid{margin-top:28px}.site-footer{margin-top:56px;flex-shrink:0;background:var(--ink-900);color:var(--paper);border-top:8px solid var(--cyan)}.site-footer .wrap{padding-top:36px;padding-bottom:28px;display:flex;gap:32px;justify-content:space-between;flex-wrap:wrap;align-items:flex-start}.site-footer .logo{color:var(--paper)}.site-footer .logo b{color:var(--cyan)}.site-footer p{font-size:.8125rem;color:var(--ink-400);max-width:300px;margin:14px 0 0}.site-footer nav{display:flex;flex-direction:column;gap:4px}.site-footer nav a{color:var(--ink-300);font-size:.875rem}.site-footer .legal{border-top:1px solid var(--ink-700);font-family:var(--font-mono);font-size:.6875rem;color:var(--ink-500);padding:14px 0}@media(max-width:860px){.hero .wrap{grid-template-columns:1fr;padding-top:36px}.mascot{display:none}.grid{grid-template-columns:1fr 1fr}}@media(max-width:940px){.article{margin:24px 16px 0;padding:48px 48px 64px}}@media(max-width:560px){.grid{grid-template-columns:1fr}.wrap{padding:0 16px}.article{margin:0;padding:28px 16px 48px;border-radius:0;border-left:0;border-right:0}.alignleft,.alignright{float:none;margin:0 auto 10px;display:block}}.older{margin-top:48px;font-size:1.25rem}.lang{padding:4px;line-height:0}.lang svg{width:22px;height:15px;display:block;border-radius:2px}.lang img{display:block;border-radius:2px;width:22px;height:16px;object-fit:cover}.lang{border:0}.nav .lang:hover{background:0 0}.lang:hover img{box-shadow:0 0 0 2px var(--cyan)}.chips{display:flex;gap:8px;flex-wrap:wrap;margin:-8px 0 24px}.ngg-left{float:left;margin:0 18px 10px 0}.ngg-right{float:right;margin:0 0 10px 18px}.ngg-center{margin:0 auto 10px;display:block;text-align:center}.ngg-gallery-singlepic-image img{display:block;max-width:100%;height:auto}.content::after{content:"";display:block;clear:both}.wp-caption.alignnone{display:inline-block;vertical-align:top;margin-right:12px}.wp-block-gallery,.blocks-gallery-grid{display:flex;flex-wrap:wrap;gap:8px;list-style:none;padding:0;margin:1em 0;clear:both}.wp-block-gallery>figure,.blocks-gallery-item{flex:1 1 calc(33.333% - 8px);min-width:150px;margin:0}.wp-block-gallery{align-items:flex-start}.wp-block-gallery img{width:100%;height:auto;display:block}.photos{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:8px;margin-top:24px}.photos img{width:100%;aspect-ratio:4/3;object-fit:contain;background:var(--ink-100);border-radius:6px;display:block}.photos a:hover img{outline:3px solid var(--cyan)}.albums{margin-top:24px}.crumbs{margin:0 0 8px}.lead-sm{color:var(--ink-600)}dialog#lb{border:2px solid var(--ink-900);border-radius:12px;padding:12px;max-width:min(96vw,1200px);background:var(--paper)}dialog#lb::backdrop{background:rgba(10,10,10,.8)}dialog#lb img{max-width:100%;max-height:80vh;display:block;margin:0 auto}dialog#lb button{position:absolute;right:10px;top:6px;font-size:1.6rem;border:0;background:0 0;cursor:pointer}dialog#lb p{margin:8px 0 0;text-align:center;font-size:.875rem;color:var(--ink-600)}.site-footer .legal{display:flex;justify-content:space-between;align-items:center}.site-footer .rss{color:var(--ink-300);line-height:0}.site-footer .rss:hover{color:var(--cyan)}.members{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin:20px 0 32px;clear:both}.member{border:1px solid var(--ink-200);border-radius:12px;box-shadow:0 2px 8px rgba(10,10,10,8%);overflow:hidden;background:var(--paper)}.member img,.member .avatar{display:block;width:100%;aspect-ratio:4/5;object-fit:cover;object-position:top;border-radius:0;background:var(--ink-100)}.member .avatar{display:flex;align-items:center;justify-content:center;font:800 2.5rem var(--font-sans);color:var(--ink-400)}.member h3{font-size:1.125rem;margin:14px 16px 4px}.member p{margin:0 16px 6px;font-size:.875rem;color:var(--ink-600)}.member .role{color:var(--ink-900);font-weight:500}.member .since{font-family:var(--font-mono);font-size:.6875rem;color:var(--ink-500);margin-bottom:14px}@media(max-width:860px){.members{grid-template-columns:repeat(2,1fr)}}@media(max-width:520px){.members{grid-template-columns:1fr}}.dd summary.on{background:var(--cyan);color:var(--ink-900)}.sponsors{display:flex;flex-wrap:wrap;gap:20px;align-items:center;margin:20px 0 32px}.sponsors a{display:flex;align-items:center;justify-content:center;min-width:180px;height:100px;padding:14px 20px;border:1px solid var(--ink-200);border-radius:12px;background:var(--paper);transition:box-shadow .2s}.sponsors a:hover{box-shadow:4px 4px 0 var(--ink-900)}.sponsors img{max-height:70px;max-width:220px;width:auto;object-fit:contain}figure figcaption p{margin:0}.content iframe{width:100%}.pubs{list-style:none;padding:0;margin:16px 0 32px}.pubs.lines li{padding:10px 0;border-bottom:1px solid var(--ink-200)}.pubs li{margin:0}.pub{padding:16px 0;border-bottom:1px solid var(--ink-200)}.pub p{margin:0 0 4px}.pub-authors{font-weight:700;color:var(--ink-900)}.pub-title{font-size:1.0625rem}.pub-venue{font-family:var(--font-mono);font-size:.8125rem;color:var(--ink-600)}.pub-bib{margin-top:6px}.pub-bib summary{cursor:pointer;font-family:var(--font-mono);font-size:.75rem;color:var(--cyan-dark)}.pub-bib pre{font-size:.75rem;overflow:auto}.nav-toggle{display:none;margin-left:auto;order:2;width:40px;height:36px;border:1.5px solid var(--ink-900);border-radius:5px;background:0 0;cursor:pointer;position:relative}.nav-toggle span,.nav-toggle span::before,.nav-toggle span::after{position:absolute;left:9px;right:9px;height:2px;background:var(--ink-900);content:"";transition:transform .15s}.nav-toggle span{top:16px}.nav-toggle span::before{left:0;right:0;top:-6px}.nav-toggle span::after{left:0;right:0;top:6px}.nav-toggle[aria-expanded=true] span{background:0 0}.nav-toggle[aria-expanded=true] span::before{transform:translateY(6px)rotate(45deg)}.nav-toggle[aria-expanded=true] span::after{transform:translateY(-6px)rotate(-45deg)}@media(max-width:1000px){.site-header .wrap{gap:0 10px;min-height:0;align-content:flex-start}.logo{min-height:56px}.nav-toggle{display:block}.nav-toggle{margin-left:auto}.nav{display:none;align-items:stretch;order:4;flex-basis:100%;flex-direction:column;flex-wrap:nowrap;padding:6px 0 10px}.nav.open{display:flex}.nav .lang{margin:6px 0 0 12px;align-self:flex-start}.nav a,.dd summary{display:block;padding:10px 12px}.dd-menu{position:static;box-shadow:none;border:0;border-left:3px solid var(--cyan);border-radius:0;margin:0 0 4px 12px;padding:0 0 0 6px;min-width:0}}