@import"https://fonts.googleapis.com/css2?family=Caveat:wght@400;500&family=Newsreader:ital,opsz,wght@0,6..72,400;0,6..72,500;0,6..72,600;1,6..72,400&display=swap";*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--color-bg: #faf9f7;--color-bg-subtle: #f3f1ed;--color-text: #1a1a1a;--color-text-secondary: #6b6b6b;--color-text-tertiary: #999999;--color-accent: #5a5a5a;--color-accent-hover: #4a4a4a;--color-border: #e5e3df;--color-border-subtle: #eeece8;--orb-color: 90, 90, 90;--font-serif: "Newsreader", Georgia, serif;--font-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--space-xs: .25rem;--space-sm: .5rem;--space-md: .875rem;--space-lg: 1.25rem;--space-xl: 1.75rem;--space-2xl: 2.5rem;--space-3xl: 3rem;--space-4xl: 4rem;--max-width: 760px;--nav-height: 4rem;--transition-fast: .15s ease;--transition-base: .25s ease}[data-theme=dark]{--color-bg: #1a1918;--color-bg-subtle: #252321;--color-text: #f5f3f0;--color-text-secondary: #a8a5a0;--color-text-tertiary: #7a7672;--color-accent: #9a9a9a;--color-accent-hover: #ababab;--color-border: #3d3a36;--color-border-subtle: #2e2b28;--orb-color: 150, 150, 150}html{font-size:16px;scroll-behavior:smooth;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;padding:0}body{font-family:var(--font-sans);font-weight:400;line-height:1.7;color:var(--color-text);background-color:var(--color-bg);min-height:100vh;margin:0;padding:0}body:before{content:"";position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;opacity:.03;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");z-index:1000}h1,h2,h3,h4,h5,h6{font-family:var(--font-serif);font-weight:400;line-height:1.3;letter-spacing:-.01em}h1{font-size:2.75rem;line-height:1.15;letter-spacing:-.02em}h2{font-size:1.75rem;margin-bottom:var(--space-lg)}h3{font-size:1.25rem;margin-bottom:var(--space-md)}p{margin-bottom:var(--space-lg)}p:last-child{margin-bottom:0}a{color:var(--color-text);text-decoration:underline;text-decoration-color:var(--color-border);text-underline-offset:3px;transition:text-decoration-color var(--transition-fast)}a:hover{text-decoration-color:var(--color-accent)}strong{font-weight:500}em{font-style:italic}small{font-size:.875rem;color:var(--color-text-secondary)}.container{width:100%;max-width:var(--max-width);margin:0 auto;padding:0 var(--space-xl)}main{padding:var(--space-xl) 0 var(--space-3xl);min-height:calc(100vh - var(--nav-height))}nav{position:sticky;top:0;height:var(--nav-height);display:flex;align-items:center;background:var(--color-bg);border-bottom:1px solid var(--color-border-subtle);z-index:100;margin:0}nav .container{display:flex;justify-content:space-between;align-items:center}.nav-brand{font-family:var(--font-serif);font-size:1.125rem;text-decoration:none;color:var(--color-text)}.nav-links{display:flex;gap:var(--space-lg);list-style:none}.nav-link{font-family:var(--font-sans);font-size:.875rem;font-weight:400;color:var(--color-text-secondary);text-decoration:none;transition:color var(--transition-fast);letter-spacing:.01em}.nav-link:hover,.nav-link.active{color:var(--color-text)}.nav-link:before{content:"/";opacity:.4;margin-right:1px}.page-header{margin-bottom:var(--space-xl)}.page-title{margin-bottom:var(--space-md)}.page-description{color:var(--color-text-secondary);font-size:1.0625rem}.section{margin-bottom:var(--space-2xl)}.section:last-child{margin-bottom:0}.section-title{font-family:var(--font-serif);font-size:1rem;font-weight:400;font-style:italic;text-transform:none;letter-spacing:0;color:var(--color-text-secondary);margin-bottom:var(--space-lg)}.card{padding:var(--space-lg);background:var(--color-bg-subtle);border-radius:8px;margin-bottom:var(--space-md)}.item{padding:var(--space-lg) 0;border-bottom:1px solid var(--color-border-subtle)}.item:first-child{padding-top:0}.item:last-child{border-bottom:none;padding-bottom:0}.item-title{font-family:var(--font-serif);font-size:1.125rem;margin-bottom:var(--space-xs)}.item-meta{font-size:.875rem;color:var(--color-text-secondary);margin-bottom:var(--space-sm)}.item-description{color:var(--color-text-secondary);font-size:.9375rem}.tags{display:flex;gap:var(--space-sm);flex-wrap:wrap}.tag{font-size:.75rem;font-weight:500;color:var(--color-text-secondary);background:var(--color-bg-subtle);padding:var(--space-xs) var(--space-sm);border-radius:4px;text-decoration:none;transition:background var(--transition-fast),color var(--transition-fast)}.tag:hover{background:var(--color-border);color:var(--color-text)}.post-list{display:flex;flex-direction:column}.post-item{display:block;padding:var(--space-lg) 0;border-bottom:1px solid var(--color-border-subtle);text-decoration:none;transition:opacity var(--transition-fast)}.post-item:hover{opacity:.7}.post-item:first-child{padding-top:0}.post-item:last-child{border-bottom:none}.post-date{font-size:.8125rem;color:var(--color-text-tertiary);font-variant-numeric:tabular-nums;margin-bottom:var(--space-xs)}.post-title{font-family:var(--font-serif);font-size:1.25rem;color:var(--color-text);margin-bottom:var(--space-sm)}.post-excerpt{font-size:.9375rem;color:var(--color-text-secondary);line-height:1.6}.post-tag{display:inline-block;font-size:.6875rem;font-weight:500;text-transform:uppercase;letter-spacing:.05em;color:var(--color-accent);margin-left:var(--space-sm)}.now-section{margin-bottom:var(--space-2xl)}.now-updated{font-size:.8125rem;color:var(--color-text-tertiary);margin-bottom:var(--space-2xl)}.now-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-md)}.now-card{padding:var(--space-lg);background:var(--color-bg-subtle);border-radius:8px}.now-card.full-width{grid-column:1 / -1}.now-card-title{font-family:var(--font-sans);font-size:.75rem;font-weight:500;text-transform:uppercase;letter-spacing:.08em;color:var(--color-text-tertiary);margin-bottom:var(--space-md)}.now-card-content{font-size:1rem}.now-card-content p{margin-bottom:var(--space-sm)}.publication{padding:var(--space-lg) 0;border-bottom:1px solid var(--color-border-subtle)}.publication:first-child{padding-top:0}.publication:last-child{border-bottom:none}.publication-title{font-family:var(--font-serif);font-size:1.125rem;margin-bottom:var(--space-xs);line-height:1.4}.publication-authors{font-size:.875rem;color:var(--color-text-secondary);margin-bottom:var(--space-xs)}.publication-venue{font-size:.8125rem;color:var(--color-text-tertiary);font-style:italic}.publication-links{margin-top:var(--space-sm);display:flex;gap:var(--space-md)}.publication-link{font-size:.8125rem;color:var(--color-accent);text-decoration:none}.publication-link:hover{text-decoration:underline}.timeline{position:relative}.timeline-item{position:relative;padding-left:var(--space-xl);padding-bottom:var(--space-xl)}.timeline-item:last-child{padding-bottom:0}.timeline-item:before{content:"";position:absolute;left:0;top:8px;width:6px;height:6px;border-radius:50%;background:var(--color-accent)}.timeline-item:after{content:"";position:absolute;left:2.5px;top:18px;bottom:0;width:1px;background:var(--color-border)}.timeline-item:last-child:after{display:none}.timeline-date{font-size:.8125rem;color:var(--color-text-tertiary);margin-bottom:var(--space-xs)}.timeline-title{font-family:var(--font-serif);font-size:1.125rem;margin-bottom:var(--space-xs)}.timeline-org{font-size:.9375rem;color:var(--color-text-secondary);margin-bottom:var(--space-sm)}.timeline-description{font-size:.9375rem;color:var(--color-text-secondary)}footer{padding:var(--space-lg) 0;border-top:1px solid var(--color-border-subtle);margin-top:var(--space-2xl);position:relative}footer:before{content:"•";position:absolute;top:0;left:50%;transform:translate(-50%,-50%);font-family:var(--font-serif);font-size:.75rem;color:var(--color-border);background:var(--color-bg);padding:0 var(--space-md)}footer .container{display:flex;justify-content:space-between;align-items:center}.footer-text{font-size:.8125rem;color:var(--color-text-tertiary);font-family:var(--font-serif);font-style:italic;letter-spacing:.02em}.footer-links{display:flex;gap:var(--space-lg)}.footer-link{font-size:.8125rem;color:var(--color-text-tertiary);text-decoration:none;transition:color var(--transition-fast)}.intro{margin-bottom:var(--space-3xl)}.intro-greeting{font-family:var(--font-sans);font-size:.75rem;color:var(--color-text-tertiary);margin-bottom:var(--space-md);display:flex;align-items:center;gap:var(--space-sm)}.intro-greeting .coordinates{font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;letter-spacing:.03em}.intro-title{font-family:var(--font-serif);font-size:3rem;font-weight:400;margin-bottom:var(--space-lg);letter-spacing:-.02em}.intro-bio{font-size:1.125rem;color:var(--color-text-secondary);line-height:1.75;max-width:580px}.intro-bio strong{color:var(--color-text)}.status{display:inline-flex;align-items:center;gap:var(--space-sm);font-size:.875rem;color:var(--color-text-secondary);margin-top:var(--space-lg);padding:var(--space-sm) var(--space-md);background:linear-gradient(135deg,#4ade8014,#4ade8005);border-radius:100px;border:1px solid rgba(74,222,128,.15)}.status-dot{width:8px;height:8px;border-radius:50%;background:#4ade80;position:relative}.status-dot:after{content:"";position:absolute;inset:-3px;border-radius:50%;border:1px solid rgba(74,222,128,.4);animation:statusPulse 2s ease-in-out infinite}@keyframes statusPulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.6);opacity:0}}.quick-links{display:flex;gap:var(--space-lg);margin-top:var(--space-lg);flex-wrap:wrap}.quick-link{font-size:.9375rem;color:var(--color-text-secondary);text-decoration:none;display:flex;align-items:center;gap:var(--space-sm);transition:color var(--transition-fast)}.quick-link:hover{color:var(--color-text)}.quick-link:after{content:"→";font-size:.875rem;opacity:0;transform:translate(-4px);transition:opacity var(--transition-fast),transform var(--transition-fast)}.quick-link:hover:after{opacity:1;transform:translate(0)}.prose{line-height:1.8}.prose h2{margin-top:var(--space-2xl);margin-bottom:var(--space-md)}.prose h3{margin-top:var(--space-xl)}.prose ul,.prose ol{margin-bottom:var(--space-lg);padding-left:var(--space-xl)}.prose li{margin-bottom:var(--space-sm)}.prose blockquote{border-left:2px solid var(--color-accent);padding-left:var(--space-lg);margin:var(--space-xl) 0;font-style:italic;color:var(--color-text-secondary)}.prose code{font-family:IBM Plex Mono,monospace;font-size:.9em;background:var(--color-bg-subtle);padding:2px 6px;border-radius:3px}.prose pre{background:var(--color-text);color:var(--color-bg);padding:var(--space-lg);border-radius:8px;overflow-x:auto;margin:var(--space-xl) 0}.prose pre code{background:none;padding:0}.prose table{width:100%;border-collapse:collapse;margin:var(--space-xl) 0;font-size:.9rem}.prose th,.prose td{padding:var(--space-sm) var(--space-md);text-align:left;border-bottom:1px solid var(--color-border)}.prose th{font-weight:500;color:var(--color-text);background:var(--color-bg-subtle);font-size:.8rem;text-transform:uppercase;letter-spacing:.03em}.prose td{color:var(--color-text-secondary)}.prose tr:hover td{background:var(--color-bg-subtle)}.prose td strong{color:var(--color-text)}@media(max-width:640px){.prose table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}.prose th,.prose td{padding:var(--space-xs) var(--space-sm);font-size:.8rem}}.prose img{max-width:100%;height:auto;margin:var(--space-xl) 0;border-radius:4px}@media(max-width:640px){html{font-size:16px}.container{padding:0 var(--space-lg)}h1{font-size:2rem}.intro-title{font-size:2.25rem}.nav-brand{font-size:1rem;white-space:nowrap}.nav-links{gap:var(--space-sm)}.nav-link{font-size:.8125rem}.now-grid{grid-template-columns:1fr}footer .container{flex-direction:column;gap:var(--space-md);text-align:center}.quick-links{flex-direction:column;gap:var(--space-md)}}::selection{background:var(--color-accent);color:#fff}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}@view-transition{navigation:auto}@keyframes fadeInUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}main{animation:fadeInUp .5s ease-out}.section{animation:fadeInUp .5s ease-out backwards}.section:nth-child(1){animation-delay:.1s}.section:nth-child(2){animation-delay:.2s}.section:nth-child(3){animation-delay:.3s}.section:nth-child(4){animation-delay:.4s}.nav-link{position:relative}.nav-link:after{content:"";position:absolute;left:0;bottom:-2px;width:0;height:1px;background:var(--color-accent);transition:width .3s ease}.nav-link:hover:after,.nav-link.active:after{width:100%}.card{transition:background .2s ease,transform .2s ease}.card:hover{background:var(--color-border-subtle);transform:rotate(-.5deg)}.now-card{transition:background .2s ease,transform .2s ease}.now-card:hover{background:var(--color-border-subtle);transform:rotate(-.5deg)}.timeline-title{transition:color .2s ease}.timeline-item:hover .timeline-title{color:var(--color-accent)}.publication-link{transition:color .15s ease}.publication-link:hover{color:var(--color-accent-hover)}.status-dot{position:relative}.status-dot:before{content:"";position:absolute;inset:-4px;border-radius:50%;background:#4ade804d;animation:statusRing 2s ease-in-out infinite}@keyframes statusRing{0%,to{transform:scale(1);opacity:.4}50%{transform:scale(1.5);opacity:0}}.footer-link{transition:color .15s ease}.footer-link:hover{color:var(--color-text)}.intro-title{animation:titleReveal .8s ease-out}@keyframes titleReveal{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.intro-greeting{animation:fadeInUp .6s ease-out .2s backwards}.do-item h3{transition:color .2s ease}.do-item:hover h3{color:var(--color-accent)}body:after{content:"";position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;background:radial-gradient(ellipse 80% 50% at 50% -20%,rgba(90,90,90,.04) 0%,transparent 60%),radial-gradient(ellipse 60% 40% at 100% 100%,rgba(90,90,90,.03) 0%,transparent 50%);z-index:-1}.status{position:relative;overflow:hidden}.status:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(74,222,128,.1),transparent);animation:statusShimmer 3s ease-in-out infinite}@keyframes statusShimmer{0%{left:-100%}50%,to{left:100%}}.timeline:before{content:"";position:absolute;left:2.5px;top:0;bottom:0;width:1px;background:linear-gradient(to bottom,var(--color-accent),var(--color-border) 20%,var(--color-border) 80%,transparent);transform:scaleY(0);transform-origin:top;animation:timelineReveal 1s ease-out .5s forwards}@keyframes timelineReveal{to{transform:scaleY(1)}}.footer-text{position:relative}.reveal{opacity:0;transform:translateY(20px);transition:opacity .6s ease,transform .6s ease}.reveal.revealed{opacity:1;transform:translateY(0)}::selection{background:var(--color-accent);color:#fff;text-shadow:none}::-moz-selection{background:var(--color-accent);color:#fff;text-shadow:none}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{background:var(--color-bg)}::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--color-accent)}*{scrollbar-width:thin;scrollbar-color:var(--color-border) var(--color-bg)}:focus-visible{outline:2px solid var(--color-accent);outline-offset:3px;border-radius:2px}@media print{body:before,body:after{display:none!important}*{animation:none!important;transition:none!important}}html{transition:background-color .3s ease}body,nav,.card,.now-card{transition:background-color .3s ease,color .3s ease,border-color .3s ease}[data-theme=dark] .card:hover,[data-theme=dark] .now-card:hover{background:#2e2b28}[data-theme=dark] .prose pre{background:#0f0e0e}[data-theme=dark] .prose code{background:var(--color-bg-subtle)}[data-theme=dark] body:before{opacity:.02;filter:invert(1)}[data-theme=dark] body:after{background:radial-gradient(ellipse 80% 50% at 50% -20%,rgba(150,150,150,.06) 0%,transparent 60%),radial-gradient(ellipse 60% 40% at 100% 100%,rgba(150,150,150,.04) 0%,transparent 50%)}[data-theme=dark] ::selection{background:var(--color-accent);color:var(--color-bg)}[data-theme=dark] ::-webkit-scrollbar-track{background:var(--color-bg)}[data-theme=dark] ::-webkit-scrollbar-thumb{background:var(--color-border)}.theme-toggle{background:none;border:none;padding:var(--space-xs);cursor:pointer;color:var(--color-text-secondary);transition:color var(--transition-fast),transform var(--transition-fast);display:flex;align-items:center;justify-content:center;border-radius:4px;margin-left:var(--space-md)}.theme-toggle:hover{color:var(--color-text);transform:rotate(15deg)}.theme-toggle svg{width:18px;height:18px}.theme-toggle .sun-icon{display:none}.theme-toggle .moon-icon,[data-theme=dark] .theme-toggle .sun-icon{display:block}[data-theme=dark] .theme-toggle .moon-icon{display:none}[data-theme=dark] .spotify-wrapper{background:#121212}@media(max-width:480px){.nav-brand{font-size:.9375rem}.nav-link:before{display:none}.nav-link{font-size:.75rem}.nav-links{gap:var(--space-sm)}.theme-toggle{margin-left:var(--space-xs)}}.skip-link{position:fixed;top:-40px;left:0;background:var(--color-accent);color:#fff;padding:var(--space-sm) var(--space-md);z-index:1000;text-decoration:none;font-size:.875rem;transition:top .2s ease}.skip-link:focus{top:0}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.prose p strong,.intro-bio strong{background:linear-gradient(to bottom,transparent 60%,rgba(90,90,90,.12) 60%);padding:0 2px;margin:0 -2px}[data-theme=dark] .prose p strong,[data-theme=dark] .intro-bio strong{background:linear-gradient(to bottom,transparent 60%,rgba(150,150,150,.15) 60%)}footer:before{color:var(--color-accent)}.tag{border:1px solid transparent;transition:background var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast)}.tag:hover{border-color:#5a5a5a4d}[data-theme=dark] .tag:hover{border-color:#9696964d}.timeline-item:hover .timeline-date{color:var(--color-accent)}.timeline-date{transition:color .2s ease}.work-venue{background:#5a5a5a0f;padding:2px 6px;border-radius:3px;margin-left:.25em}[data-theme=dark] .work-venue{background:#96969614}a[href^=http]:not([href*="johannesroth.com"]):after{content:" ↗";font-size:.75em;color:var(--color-accent);opacity:.6;transition:opacity .2s ease}a[href^=http]:not([href*="johannesroth.com"]):hover:after{opacity:1}a.nav-link[href^=http]:after,a.nav-brand[href^=http]:after,a.footer-link[href^=http]:after,a.quick-link[href^=http]:after,a.work-item[href^=http]:after,a.publication-link[href^=http]:after,a.post-item[href^=http]:after,a.featured-item[href^=http]:after,a.paper-entry[href^=http]:after,a.tool-item[href^=http]:after{content:none}.prose>p:first-of-type{position:relative;padding-left:1rem}.prose>p:first-of-type:before{content:"";position:absolute;left:0;top:.5em;bottom:.5em;width:2px;background:linear-gradient(to bottom,var(--color-accent),transparent);border-radius:1px}.page-description{position:relative}.page-description:first-letter{color:var(--color-accent);font-weight:500}.quick-link:hover{color:var(--color-accent)}.post-tag{position:relative}.nav-link.active{color:var(--color-accent)}.intro-greeting .coordinates{color:var(--color-text-tertiary)}.prose th{border-bottom:2px solid var(--color-accent);border-bottom-color:#5a5a5a4d}[data-theme=dark] .prose th{border-bottom-color:#9696964d}.prose blockquote{background:#5a5a5a08;padding:var(--space-md) var(--space-lg);border-radius:0 4px 4px 0}[data-theme=dark] .prose blockquote{background:#9696960a}.prose pre{border-top:2px solid var(--color-accent)}hr,.divider{border:none;height:1px;background:linear-gradient(to right,transparent,var(--color-accent),transparent);opacity:.3;margin:var(--space-2xl) 0}.prose ul li::marker{color:var(--color-accent)}.prose ol li::marker{color:var(--color-accent);font-weight:500}.page-wrapper[data-astro-cid-sckkx6r4]{position:relative}.particles-canvas[data-astro-cid-sckkx6r4]{position:absolute;top:0;left:50%;transform:translate(-50%);width:100vw;height:100%;pointer-events:none;z-index:0}.page-wrapper[data-astro-cid-sckkx6r4]>[data-astro-cid-sckkx6r4]:not(.particles-canvas){position:relative;z-index:1}@media(prefers-reduced-motion:reduce){.particles-canvas[data-astro-cid-sckkx6r4]{display:none}}
