:root{--bg:#fff;--surface:#f7f7f9;--card:#fff;--text:#16161d;--muted:#5b5f6b;--border:#e6e7eb;--accent:#d81b60;--accent-soft:#fde7ef;--accent-text:#ad1457;--radius:16px;--shadow:0 1px 2px #1018280d;--font:ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--mono:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#0f1014;--surface:#16171d;--card:#181a20;--text:#ececf1;--muted:#a2a6b2;--border:#2a2c35;--accent:#f06292;--accent-soft:#3a1626;--accent-text:#f48fb1;color-scheme:dark}}:root[data-theme=dark]{--bg:#0f1014;--surface:#16171d;--card:#181a20;--text:#ececf1;--muted:#a2a6b2;--border:#2a2c35;--accent:#f06292;--accent-soft:#3a1626;--accent-text:#f48fb1;color-scheme:dark}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--text);font:16px/1.65 var(--font);margin:0}img{max-width:100%;height:auto;display:block}a{color:var(--accent-text);text-underline-offset:3px}a:hover{color:var(--accent)}h1,h2,h3{letter-spacing:-.02em;font-weight:700;line-height:1.2}h1{margin:0 0 .5rem;font-size:clamp(2rem,5vw,3rem)}h2{margin:0 0 1rem;font-size:1.5rem}h3{margin:0 0 .35rem;font-size:1.1rem}.container{width:min(1120px,100% - 32px);margin-inline:auto}.narrow{width:min(760px,100% - 32px);margin-inline:auto}.muted{color:var(--muted)}.small{font-size:.875rem}.skip{position:absolute;left:-9999px}.skip:focus{background:var(--card);z-index:10;border-radius:8px;padding:.5rem 1rem;top:16px;left:16px}section{padding:3rem 0}.section-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:1rem;margin-bottom:1.25rem;display:flex}.section-head h2{margin:0}.site-header{z-index:5;background:color-mix(in srgb, var(--bg) 88%, transparent);backdrop-filter:blur(10px);border-bottom:1px solid var(--border);position:sticky;top:0}.header-inner{align-items:center;gap:1.5rem;height:64px;display:flex}.brand{color:var(--text);white-space:nowrap;align-items:center;gap:.6rem;font-weight:700;text-decoration:none;display:inline-flex}.brand-mark{background:var(--accent);color:#fff;border-radius:8px;place-items:center;width:30px;height:30px;font-size:.95rem;display:grid}.site-header nav{flex:1;overflow-x:auto}.site-header nav ul{gap:.25rem;margin:0;padding:0;list-style:none;display:flex}.site-header nav a{color:var(--muted);white-space:nowrap;border-radius:8px;padding:.4rem .7rem;font-weight:500;text-decoration:none;display:block}.site-header nav a:hover,.site-header nav a[aria-current=page]{color:var(--text);background:var(--surface)}.header-tools{align-items:center;gap:.5rem;display:flex}.lang-switch{color:var(--muted);border:1px solid var(--border);border-radius:999px;padding:.35rem .6rem;font-size:.875rem;text-decoration:none}.theme-toggle{border:1px solid var(--border);width:34px;height:34px;color:var(--muted);cursor:pointer;background:0 0;border-radius:999px;place-items:center;display:grid}.site-footer{border-top:1px solid var(--border);color:var(--muted);margin-top:3rem;padding:2rem 0;font-size:.9rem}.footer-inner{flex-wrap:wrap;justify-content:space-between;gap:1rem;display:flex}.footer-inner ul{flex-wrap:wrap;gap:1rem;margin:0;padding:0;list-style:none;display:flex}.footer-inner a{color:var(--muted)}@media (width<=720px){.header-inner{flex-wrap:wrap;gap:.5rem 1rem;height:auto;padding:.6rem 0}.site-header nav{flex-basis:100%;order:3}.header-tools{margin-left:auto}}.hero{padding:4rem 0 2.5rem}.hero-inner{grid-template-columns:1fr auto;align-items:center;gap:2.5rem;display:grid}.hero-photo{border:4px solid var(--card);width:168px;height:168px;box-shadow:0 0 0 1px var(--border);object-fit:cover;border-radius:50%}.headline{color:var(--muted);margin:0 0 1.25rem;font-size:1.15rem}.bio{max-width:62ch}.pill{background:var(--accent-soft);color:var(--accent-text);border-radius:999px;align-items:center;gap:.4rem;padding:.3rem .75rem;font-size:.875rem;font-weight:600;display:inline-flex}.pill:before{content:"";background:currentColor;border-radius:50%;width:8px;height:8px}.actions{flex-wrap:wrap;gap:.75rem;margin-top:1.5rem;display:flex}.btn{border:1px solid var(--border);color:var(--text);background:var(--card);border-radius:999px;align-items:center;gap:.5rem;padding:.6rem 1.1rem;font-weight:600;text-decoration:none;display:inline-flex}.btn:hover{border-color:var(--accent);color:var(--accent-text)}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-primary:hover{color:#fff;filter:brightness(1.08)}.badges{flex-wrap:wrap;gap:.4rem;margin:1.25rem 0 0;padding:0;list-style:none;display:flex}.badge{border:1px solid var(--border);color:var(--muted);background:var(--card);border-radius:999px;padding:.2rem .6rem;font-size:.8rem}@media (width<=720px){.hero-inner{grid-template-columns:1fr}.hero-photo{order:-1;width:112px;height:112px}}.grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem;display:grid}.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);box-shadow:var(--shadow);flex-direction:column;text-decoration:none;transition:border-color .15s,transform .15s;display:flex;overflow:hidden}a.card:hover{border-color:var(--accent);color:var(--text);transform:translateY(-2px)}.card-img{aspect-ratio:16/9;object-fit:cover;background:var(--surface);width:100%}.card-body{flex-direction:column;flex:1;gap:.4rem;padding:1.1rem 1.2rem 1.3rem;display:flex}.card-body p{color:var(--muted);-webkit-line-clamp:3;-webkit-box-orient:vertical;margin:0;font-size:.925rem;display:-webkit-box;overflow:hidden}.card-meta{color:var(--muted);flex-wrap:wrap;align-items:center;gap:.5rem;font-size:.78rem;display:flex}.tag{text-transform:uppercase;letter-spacing:.06em;background:var(--accent-soft);color:var(--accent-text);border-radius:6px;padding:.15rem .45rem;font-size:.7rem;font-weight:700}.app-card{border-top:4px solid var(--app-color,var(--accent))}.app-status{color:var(--muted);margin-left:auto;font-size:.75rem;font-weight:600}.featured{grid-template-rows:auto auto;grid-template-columns:2fr 1fr;gap:1rem;display:grid}.featured .card:first-child{grid-row:span 2}@media (width<=860px){.featured{grid-template-columns:1fr}.featured .card:first-child{grid-row:auto}}.tiles{grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:.75rem;display:grid}.tile{border:1px solid var(--border);background:var(--card);color:var(--text);border-radius:12px;align-items:center;gap:.6rem;padding:.9rem 1rem;font-weight:600;text-decoration:none;display:flex}.tile:hover,.tile[aria-current=page]{border-color:var(--accent);color:var(--accent-text)}.tile-dot{background:var(--tile-color,var(--accent));border-radius:3px;flex:none;width:10px;height:10px}.post-list{border-top:1px solid var(--border);margin:0;padding:0;list-style:none}.post-list li a{border-bottom:1px solid var(--border);color:var(--text);grid-template-columns:auto 1fr auto;align-items:center;gap:1rem;padding:.9rem .25rem;text-decoration:none;display:grid}.post-list li a:hover .post-title{color:var(--accent-text)}.post-title{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.post-date{color:var(--muted);white-space:nowrap;font-size:.85rem}@media (width<=640px){.post-list li a{grid-template-columns:1fr;gap:.2rem}.post-title{white-space:normal}}.article-head{padding:3rem 0 1.5rem}.article-cover{border-radius:var(--radius);border:1px solid var(--border);margin:0 0 2rem}.prose{font-size:1.05rem}.prose h2{margin-top:2.2rem}.prose h3{margin-top:1.6rem}.prose pre{background:var(--surface);border:1px solid var(--border);font:.9rem/1.5 var(--mono);border-radius:12px;padding:1rem;overflow-x:auto}.prose code{font-family:var(--mono);background:var(--surface);border-radius:6px;padding:.1em .35em;font-size:.9em}.prose pre code{background:0 0;padding:0}.prose blockquote{border-left:4px solid var(--accent);color:var(--muted);margin:1.5rem 0;padding:.25rem 1.25rem}.prose img{border-radius:12px}.prose table{border-collapse:collapse;width:100%;display:block;overflow-x:auto}.prose th,.prose td{border:1px solid var(--border);text-align:left;padding:.5rem .75rem}.breadcrumb{color:var(--muted);margin-bottom:1rem;font-size:.875rem}.breadcrumb a{color:var(--muted)}.cv-head{grid-template-columns:auto 1fr auto;align-items:center;gap:1.5rem;padding:3rem 0 1rem;display:grid}.cv-head img{object-fit:cover;border-radius:50%;width:96px;height:96px}.cv-head h1{margin:0}.cv-contact{color:var(--muted);margin-top:.35rem;font-size:.9rem}.cv-section{border-top:1px solid var(--border);padding:1.5rem 0}.cv-section>h2{text-transform:uppercase;letter-spacing:.1em;color:var(--accent-text);font-size:.85rem}.cv-job{margin-bottom:1.6rem}.cv-job-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:1rem;display:flex}.cv-job-head h3{margin:0}.cv-dates{color:var(--muted);white-space:nowrap;font-size:.875rem;font-style:italic}.cv-company{color:var(--muted);font-weight:500}.cv-job ul{margin:.4rem 0 0;padding-left:1.2rem}.cv-job p{margin:.4rem 0 0}.cv-groups dt{font-weight:700}.cv-groups dd{color:var(--muted);margin:0 0 .8rem}@media (width<=720px){.cv-head{grid-template-columns:auto 1fr}.cv-head .btn{grid-column:1/-1;justify-self:start}}@media print{.site-header,.site-footer,.no-print{display:none!important}body{font-size:11pt}.cv-section{break-inside:avoid-page}}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.badges-compact{margin:.35rem 0 0}.badges-compact .badge{padding:.1rem .5rem;font-size:.72rem}.card-more{color:var(--accent-text);margin-top:auto;padding-top:.4rem;font-weight:600}.project-facts{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:.9rem 1.5rem;margin:1.5rem 0 0;padding:1rem 1.2rem;display:grid}.project-facts dt{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-size:.75rem;font-weight:700}.project-facts dd{margin:.15rem 0 0}.project-facts-wide{grid-column:1/-1}.project-screens{padding:2rem 0 0}.project-screens figure{margin:0 0 1.75rem}.project-screens img{border:1px solid var(--border);border-radius:12px}.project-screens figcaption{color:var(--muted);margin-top:.5rem;font-size:.875rem}.anchor-nav{flex-wrap:wrap;gap:.5rem;margin-top:1.25rem;display:flex}.anchor-nav .btn{padding:.45rem .95rem;font-size:.925rem}#projects,#publications{scroll-margin-top:6rem}.tips-tools{flex-direction:column;gap:.75rem;margin-bottom:1.5rem;display:flex}.tips-search{width:100%;max-width:560px;font:inherit;color:var(--text);background:var(--card);border:1px solid var(--border);border-radius:999px;padding:.7rem 1rem}.tips-search:focus{outline:2px solid var(--accent);outline-offset:1px;border-color:var(--accent)}.tips-types{flex-wrap:wrap;gap:.5rem;display:flex}.chip{font:inherit;border:1px solid var(--border);background:var(--card);color:var(--muted);cursor:pointer;border-radius:999px;padding:.35rem .85rem;font-size:.875rem;font-weight:600}.chip:hover{border-color:var(--accent);color:var(--accent-text)}.chip[aria-pressed=true]{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-text)}.tip-card[hidden]{display:none}.tip-downloads{padding:2rem 0 0;scroll-margin-top:6rem}.tip-downloads ul{border-top:1px solid var(--border);margin:0;padding:0;list-style:none}.tip-downloads li{border-bottom:1px solid var(--border);padding:.75rem .25rem}.tip-downloads li a{font-weight:600}.tip-downloads li p{margin:.25rem 0 0}.prose figure.diagram{-webkit-overflow-scrolling:touch;margin:1.5rem 0;overflow-x:auto}.prose figure.diagram svg{border:1px solid var(--border);background:#fff;border-radius:12px;width:100%;min-width:620px;height:auto;padding:.5rem;display:block}.prose figure.diagram figcaption{color:var(--muted);margin-top:.5rem;font-size:.875rem}
