@font-face{font-family:Poppins;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/poppins-devanagari-500-normal.BIdkeU1p.woff2) format("woff2"),url(/_astro/poppins-devanagari-500-normal.DMPDjHtT.woff) format("woff");unicode-range:U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+20F0,U+25CC,U+A830-A839,U+A8E0-A8FF,U+11B00-11B09}@font-face{font-family:Poppins;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/poppins-latin-ext-500-normal.CK-6C4Hw.woff2) format("woff2"),url(/_astro/poppins-latin-ext-500-normal.CgAe2rWW.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Poppins;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/poppins-latin-500-normal.C8OXljZJ.woff2) format("woff2"),url(/_astro/poppins-latin-500-normal.DGXqpDMm.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Poppins;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/poppins-devanagari-600-normal.STEjXBNN.woff2) format("woff2"),url(/_astro/poppins-devanagari-600-normal.ClASKHrr.woff) format("woff");unicode-range:U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+20F0,U+25CC,U+A830-A839,U+A8E0-A8FF,U+11B00-11B09}@font-face{font-family:Poppins;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/poppins-latin-ext-600-normal.CAhIAdZj.woff2) format("woff2"),url(/_astro/poppins-latin-ext-600-normal.Df5ffKXP.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Poppins;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/poppins-latin-600-normal.zEkxB9Mr.woff2) format("woff2"),url(/_astro/poppins-latin-600-normal.BJdTmd5m.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Poppins;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/poppins-devanagari-700-normal.O-jipLrW.woff2) format("woff2"),url(/_astro/poppins-devanagari-700-normal.fHs-vx92.woff) format("woff");unicode-range:U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+20A8,U+20B9,U+20F0,U+25CC,U+A830-A839,U+A8E0-A8FF,U+11B00-11B09}@font-face{font-family:Poppins;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/poppins-latin-ext-700-normal.cby-RkWa.woff2) format("woff2"),url(/_astro/poppins-latin-ext-700-normal.DctTR6Tg.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Poppins;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/poppins-latin-700-normal.Qrb0O0WB.woff2) format("woff2"),url(/_astro/poppins-latin-700-normal.BVuQR_eA.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-cyrillic-ext-400-normal.xuaO2J-f.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-ext-400-normal.DMdlQ8Kv.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-cyrillic-400-normal.BSMlKf0J.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-400-normal.CEL4l2ZJ.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-vietnamese-400-normal.BulugwFq.woff2) format("woff2"),url(/_astro/ibm-plex-mono-vietnamese-400-normal.DDuiU_S-.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-ext-400-normal.BmRBH3aV.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-400-normal.D3D2R8hC.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-cyrillic-ext-500-normal.BqneJy0T.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-ext-500-normal.BIfNGwUT.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-cyrillic-500-normal.Bq9vWWag.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-500-normal.Ael50iVv.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-vietnamese-500-normal.DZ4AoWbu.woff2) format("woff2"),url(/_astro/ibm-plex-mono-vietnamese-500-normal.C8zxqsMH.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-latin-ext-500-normal.CAhNIIs5.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-500-normal.CZ70TYgx.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{color-scheme:dark;--color-background: #151312;--color-surface: rgba(255, 255, 255, .05);--color-surface-strong: rgba(255, 255, 255, .09);--color-surface-solid: #1f1d1c;--color-border: rgba(255, 255, 255, .09);--color-border-strong: rgba(255, 255, 255, .18);--color-foreground: #ffffff;--color-foreground-2: #b3abab;--color-muted-foreground: #8f8888;--color-dim: #9c9393;--color-orange: #f46c38;--color-orange-strong: #ff7d4a;--color-lime: #c5ff41;--color-on-bright: #151312;--color-ring: #ffffff;--color-status-ok: #c5ff41;--color-status-wip: #f46c38;--font-display: "Poppins", system-ui, sans-serif;--font-body: "Inter Variable", "Inter", system-ui, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, "Cascadia Code", Menlo, monospace;--text-xs: .75rem;--text-sm: .875rem;--text-base: 1rem;--text-lg: 1.125rem;--text-xl: 1.375rem;--text-2xl: 1.75rem;--text-3xl: 2.25rem;--text-display: clamp(2.25rem, 6vw, 3.25rem);--text-hero: clamp(2.5rem, 7vw, 3.75rem);--space-xs: .25rem;--space-sm: .5rem;--space-md: 1rem;--space-lg: 1.5rem;--space-xl: 2rem;--space-2xl: 3rem;--space-3xl: 4.5rem;--space-4xl: 6rem;--radius-sm: 8px;--radius: 16px;--radius-lg: 24px;--column: 47rem;--column-wide: 60rem;--gutter: clamp(1.25rem, 4vw, 2rem);--ease: cubic-bezier(.2, .7, .2, 1);--dur-fast: .15s;--dur: .22s;--paper: var(--color-background);--paper-raised: var(--color-surface-solid);--paper-sunk: var(--color-background);--ink: var(--color-foreground);--ink-soft: var(--color-foreground-2);--muted: var(--color-muted-foreground);--accent: var(--color-orange);--accent-ink: var(--color-orange);--accent-2: var(--color-lime);--accent-2-ink: var(--color-lime);--amber: var(--color-orange);--rule: var(--color-border);--rule-strong: var(--color-border-strong);--code-bg: var(--color-surface-solid);--font-sans: var(--font-body)}*,*:before,*:after{box-sizing:border-box}html{background:var(--color-background);color:var(--color-foreground);font-family:var(--font-body);font-size:16px;line-height:1.65;-webkit-text-size-adjust:100%;text-rendering:optimizeLegibility;scroll-behavior:smooth}body{margin:0;min-height:100dvh;display:flex;flex-direction:column}main{flex:1;width:100%;max-width:calc(var(--column) + 2 * var(--gutter));margin:0 auto;padding:7.5rem var(--gutter) var(--space-4xl)}main.wide{max-width:calc(var(--column-wide) + 2 * var(--gutter))}:focus-visible{outline:2px solid var(--color-ring);outline-offset:3px;border-radius:var(--radius-sm)}::selection{background:var(--color-orange);color:var(--color-on-bright)}h1,h2,h3,h4{font-family:var(--font-display);font-weight:700;line-height:1.15;letter-spacing:-.01em;color:var(--color-foreground);text-wrap:balance}h1{font-size:var(--text-3xl);margin:0 0 var(--space-md)}h2{font-size:var(--text-xl);margin:var(--space-2xl) 0 var(--space-md)}h3{font-size:var(--text-lg);font-weight:600;margin:var(--space-xl) 0 var(--space-sm)}p{margin:0 0 1.15rem;max-width:68ch}a{color:var(--color-foreground);text-decoration:underline;text-decoration-color:var(--color-border-strong);text-decoration-thickness:1px;text-underline-offset:.2em;transition:color var(--dur-fast) var(--ease),text-decoration-color var(--dur-fast) var(--ease)}a:hover{color:var(--color-orange);text-decoration-color:var(--color-orange)}strong{font-weight:600;color:var(--color-foreground)}hr{border:0;border-top:1px solid var(--color-border);margin:var(--space-2xl) 0}ul,ol{padding-left:1.3rem;margin:0 0 1.15rem}li{margin-bottom:.35rem}li::marker{color:var(--color-orange)}blockquote{margin:var(--space-lg) 0;padding:var(--space-md) var(--space-lg);background:var(--color-surface);border-radius:var(--radius);color:var(--color-foreground-2)}.display{font-family:var(--font-display);font-weight:700;font-size:var(--text-display);line-height:1.02;letter-spacing:-.01em;text-transform:uppercase;text-align:center;margin:0 0 var(--space-xl)}.display span{display:block}.display .dim{color:var(--color-dim)}code{font-family:var(--font-mono);font-size:.86em;background:var(--color-surface);padding:.05em .4em;border-radius:6px;color:var(--color-foreground)}pre{background:var(--color-surface-solid);border:1px solid var(--color-border);border-radius:var(--radius);padding:var(--space-md) var(--space-lg);overflow-x:auto;font-size:.85rem;line-height:1.55;margin:0 0 var(--space-lg)}pre code{background:none;padding:0;font-size:inherit;color:inherit}.astro-code{background-color:var(--color-surface-solid)!important}.label{font-family:var(--font-body);font-size:var(--text-xs);font-weight:500;text-transform:uppercase;letter-spacing:.1em;color:var(--color-muted-foreground)}.tag{display:inline-block;font-size:var(--text-xs);font-weight:500;color:var(--color-foreground-2);background:var(--color-surface);border-radius:999px;padding:.2rem .7rem;white-space:nowrap;line-height:1.5}.site-header{position:fixed;top:1rem;left:0;right:0;z-index:50;display:flex;justify-content:center;padding:0 var(--gutter);pointer-events:none}.pill{pointer-events:auto;display:flex;align-items:center;gap:.25rem;padding:.35rem;border-radius:999px;background:#151312b8;border:1px solid var(--color-border-strong);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 10px 30px #00000059}.pill a{display:inline-flex;align-items:center;gap:.45rem;min-width:2.75rem;min-height:2.75rem;padding:0 .9rem;border-radius:999px;color:var(--color-foreground-2);font-size:var(--text-sm);font-weight:500;white-space:nowrap;text-decoration:none;transition:background var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease)}.pill a svg{width:18px;height:18px;flex-shrink:0}.pill a:hover{background:var(--color-surface-strong);color:var(--color-foreground)}.pill a[aria-current=page]{background:var(--color-foreground);color:var(--color-on-bright)}.pill .sep{width:1px;height:1.5rem;background:var(--color-border-strong);margin:0 .25rem}.pill .lang{padding:0 .75rem;font-size:var(--text-xs);letter-spacing:.08em;color:var(--color-muted-foreground)}.pill .lang.on{color:var(--color-foreground);font-weight:600}@media(max-width:640px){.site-header{top:.5rem;padding:0 .5rem}.pill{flex-wrap:wrap;justify-content:center;max-width:100%;border-radius:18px;gap:0}.pill a{min-width:0;padding:0 .5rem;font-size:.8rem}.pill a svg{display:none}.pill .lang{padding:0 .5rem}.pill .sep{margin:0}}@media(max-width:359px){.pill a{padding:0 .35rem;font-size:.75rem}.pill .lang{padding:0 .35rem}}.site-footer{border-top:1px solid var(--color-border)}.site-footer .inner{max-width:calc(var(--column) + 2 * var(--gutter));margin:0 auto;padding:var(--space-xl) var(--gutter) var(--space-2xl);display:flex;justify-content:space-between;gap:var(--space-md);flex-wrap:wrap;font-size:var(--text-sm);color:var(--color-muted-foreground)}.site-footer a{color:var(--color-foreground-2);text-decoration:none}.site-footer a:hover{color:var(--color-orange)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:3rem;padding:.7rem 1.5rem;border-radius:999px;font-family:var(--font-body);font-size:var(--text-sm);font-weight:600;text-decoration:none;cursor:pointer;border:1px solid transparent;transition:background var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease),border-color var(--dur-fast) var(--ease),transform var(--dur-fast) var(--ease)}.btn:active{transform:scale(.98)}.btn.primary{background:var(--color-orange);color:var(--color-on-bright)}.btn.primary:hover{background:var(--color-orange-strong);color:var(--color-on-bright)}.btn.secondary{background:var(--color-surface);color:var(--color-foreground);border-color:var(--color-border-strong)}.btn.secondary:hover{background:var(--color-surface-strong);color:var(--color-foreground)}.btn.lime{background:var(--color-lime);color:var(--color-on-bright)}.btn.lime:hover{background:#d4ff6b;color:var(--color-on-bright)}.btn.block{width:100%}.hero{text-align:center;padding-top:var(--space-md)}.hero .portrait{display:block;width:min(100%,260px);height:auto;aspect-ratio:4 / 5;object-fit:cover;object-position:center top;border-radius:var(--radius);margin:0 auto var(--space-xl);background:var(--color-orange)}.hero h1{font-size:var(--text-3xl);margin:0 0 var(--space-sm)}.hero .tagline{color:var(--color-foreground-2);font-size:var(--text-lg);max-width:34rem;margin:0 auto var(--space-2xl);text-wrap:pretty}.hero .role{font-family:var(--font-display);font-weight:700;font-size:var(--text-hero);line-height:1;text-transform:uppercase;letter-spacing:-.01em;margin:0 0 var(--space-lg)}.hero .intro{color:var(--color-foreground-2);font-size:var(--text-lg);max-width:30rem;margin:0 auto var(--space-xl);text-wrap:balance}.hero .actions{display:flex;justify-content:center;gap:var(--space-md);flex-wrap:wrap}.hero .dansk{color:var(--color-muted-foreground);font-size:var(--text-sm);max-width:44ch;margin:var(--space-xl) auto 0}.stats{display:grid;grid-template-columns:repeat(3,auto);justify-content:center;gap:var(--space-lg) var(--space-3xl);margin:var(--space-3xl) 0;padding:0;list-style:none;text-align:center}.stats li{margin:0}.stats .n{display:block;font-family:var(--font-display);font-weight:700;font-size:clamp(2.5rem,6vw,3.5rem);line-height:1;letter-spacing:-.02em;margin-bottom:var(--space-sm)}.stats .l{display:block;font-size:var(--text-sm);color:var(--color-foreground-2);line-height:1.35;max-width:9rem;margin:0 auto}@media(max-width:560px){.stats{grid-template-columns:1fr;gap:var(--space-xl)}}.focus{display:grid;gap:var(--space-md);margin:0 0 var(--space-3xl)}.focus-card{position:relative;display:block;padding:var(--space-xl) calc(var(--space-xl) + 3.25rem) var(--space-xl) var(--space-xl);min-height:100%;border-radius:var(--radius-lg);text-decoration:none;color:var(--color-on-bright);overflow:hidden;transition:transform var(--dur) var(--ease)}.focus-card.orange{background:var(--color-orange);color:#fff}.focus-card.lime{background:var(--color-lime)}.focus-card:hover{transform:translateY(-2px);color:inherit}.focus-card svg.icon{width:36px;height:36px;margin-bottom:var(--space-2xl);display:block}.focus-card h3{font-family:var(--font-display);font-weight:700;font-size:var(--text-2xl);line-height:1.1;text-transform:uppercase;margin:0 0 var(--space-sm);color:inherit;max-width:14ch}.focus-card p{margin:0;max-width:34ch;opacity:.9;font-size:var(--text-sm);color:inherit;padding-bottom:.5rem}.focus-card .arrow{position:absolute;right:var(--space-xl);bottom:var(--space-xl);width:2.75rem;height:2.75rem;border-radius:12px;border:1.5px solid currentColor;display:grid;place-items:center;transition:transform var(--dur) var(--ease)}.focus-card .arrow svg{width:20px;height:20px}.focus-card:hover .arrow{transform:translate(3px,-3px)}.focus-card .backdrop{position:absolute;inset:0;pointer-events:none;opacity:.16}@media(min-width:720px){.focus{grid-template-columns:1fr 1fr}}.home-section{padding:var(--space-3xl) 0 0}.home-section .more{text-align:center;margin-top:var(--space-xl)}.project-list{list-style:none;padding:0;margin:0;display:grid;gap:var(--space-md)}.project-card{position:relative;display:grid;grid-template-columns:6rem 1fr;gap:var(--space-lg);align-items:center;padding:var(--space-md);border-radius:var(--radius-lg);background:var(--color-surface);transition:background var(--dur-fast) var(--ease)}.project-card:hover,.project-card:focus-within{background:var(--color-surface-strong)}.project-card .card-thumb{display:block;width:6rem;aspect-ratio:1;border-radius:var(--radius-sm);overflow:hidden;background:var(--color-surface-solid);line-height:0}.project-card .card-thumb img{width:100%;height:100%;object-fit:cover;display:block}.project-card .card-thumb.placeholder{display:grid;place-items:center;font-family:var(--font-display);font-weight:700;font-size:var(--text-xl);color:var(--color-muted-foreground);line-height:1}.project-card .body{min-width:0}.project-card .meta{display:flex;align-items:center;gap:var(--space-sm) var(--space-md);flex-wrap:wrap;margin-bottom:.3rem;font-size:var(--text-xs);color:var(--color-muted-foreground)}.project-card .flag{font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--color-orange)}.project-card .meta .spacer{display:none}.status{display:inline-flex;align-items:center;gap:.4rem;font-size:var(--text-xs);color:var(--color-muted-foreground);white-space:nowrap}.status .led{width:7px;height:7px;border-radius:50%;background:var(--color-muted-foreground);flex-shrink:0}.status[data-status=working] .led{background:var(--color-status-ok)}.status[data-status=in-progress] .led{background:var(--color-status-wip)}.project-card h3{margin:0 0 .25rem;font-family:var(--font-display);font-weight:600;font-size:var(--text-lg);line-height:1.25;letter-spacing:0}.project-card h3 a{color:var(--color-foreground);text-decoration:none}.project-card h3 a:after{content:"";position:absolute;inset:0;border-radius:var(--radius-lg)}.project-card p{margin:0 0 var(--space-sm);color:var(--color-foreground-2);font-size:var(--text-sm);line-height:1.5;max-width:60ch;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.project-card .tags{display:flex;flex-wrap:wrap;gap:.3rem;position:relative;z-index:1}.project-card .go{position:absolute;right:var(--space-lg);top:50%;transform:translateY(-50%);width:20px;height:20px;color:var(--color-muted-foreground);transition:color var(--dur-fast) var(--ease),transform var(--dur-fast) var(--ease)}.project-card:hover .go{color:var(--color-orange);transform:translate(3px,-50%)}@media(max-width:560px){.project-card{grid-template-columns:4.5rem 1fr;gap:var(--space-md)}.project-card .card-thumb{width:4.5rem;align-self:start}.project-card p{-webkit-line-clamp:3}.project-card .go{display:none}}.filter-bar{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-sm);margin:0 0 var(--space-xl)}.filter-bar button{font-family:var(--font-body);font-size:var(--text-sm);font-weight:500;color:var(--color-foreground-2);background:var(--color-surface);border:1px solid transparent;border-radius:999px;padding:.45rem .95rem;min-height:2.5rem;cursor:pointer;transition:background var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease)}.filter-bar button:hover{background:var(--color-surface-strong);color:var(--color-foreground)}.filter-bar button[aria-pressed=true]{background:var(--color-lime);color:var(--color-on-bright)}.filter-bar .filter-sep{width:1px;align-self:stretch;background:var(--color-border-strong);margin:0 var(--space-xs)}.timeline{list-style:none;margin:0;padding:0;display:grid;gap:var(--space-md)}.timeline li{margin:0;padding:var(--space-lg);border-radius:var(--radius-lg);background:var(--color-surface);display:grid;grid-template-columns:1fr auto;gap:var(--space-sm) var(--space-lg);align-items:start}.timeline h3{margin:0;font-size:var(--text-lg);font-weight:600}.timeline .when{font-size:var(--text-sm);color:var(--color-muted-foreground);white-space:nowrap;padding-top:.2rem}.timeline p{grid-column:1 / -1;margin:0;color:var(--color-foreground-2);font-size:var(--text-sm)}@media(max-width:480px){.timeline li{grid-template-columns:1fr}.timeline .when{white-space:normal;padding:0}}.tools{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-md)}.tools li{margin:0;display:flex;align-items:center;gap:var(--space-md);padding:var(--space-md);border-radius:var(--radius);background:var(--color-surface)}.tools .glyph{width:3rem;height:3rem;border-radius:var(--radius-sm);background:var(--color-surface-strong);display:grid;place-items:center;flex-shrink:0;color:var(--color-foreground)}.tools .glyph svg{width:22px;height:22px}.tools .name{display:block;font-weight:600;line-height:1.3}.tools .use{display:block;font-size:var(--text-sm);color:var(--color-muted-foreground)}@media(min-width:720px){.tools{grid-template-columns:repeat(3,1fr)}}@media(max-width:420px){.tools{grid-template-columns:1fr}}.terms{display:grid;gap:var(--space-md)}.term{padding:var(--space-lg);border-radius:var(--radius-lg);background:var(--color-surface)}.term.current{outline:1.5px solid var(--color-lime)}.term-head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-md);flex-wrap:wrap;margin:0 0 var(--space-md);font-size:var(--text-lg);font-weight:600}.term-head .sem{font-family:var(--font-body);font-size:var(--text-sm);font-weight:500;color:var(--color-muted-foreground)}.course-list{list-style:none;margin:0;padding:0;display:grid}.course-list li{display:grid;grid-template-columns:3.75rem minmax(0,1fr) auto;gap:var(--space-md);align-items:baseline;padding:.55rem 0;border-top:1px solid var(--color-border);margin:0}.course-list .code{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--color-orange);text-decoration:none}.course-list a.code:hover{text-decoration:underline;text-underline-offset:.2em}.course-list .ctitle{font-size:var(--text-base)}.course-list .ects{font-size:var(--text-xs);color:var(--color-muted-foreground);white-space:nowrap}.course-list .ects:after{content:" ECTS"}.term .note{margin:var(--space-md) 0 0;font-size:var(--text-sm);color:var(--color-muted-foreground)}.term-summary{text-align:center;color:var(--color-foreground-2);margin:0 auto var(--space-xl)}.contact{text-align:center}.contact p{margin:0 auto var(--space-xl);color:var(--color-foreground-2);max-width:36rem}.contact .links{display:flex;justify-content:center;gap:var(--space-lg);flex-wrap:wrap;margin-top:var(--space-lg);font-size:var(--text-sm)}.page-head{text-align:center;margin-bottom:var(--space-2xl)}.page-head .label{display:block;margin-bottom:var(--space-md)}.page-head h1{font-size:var(--text-display);text-transform:uppercase;line-height:1.02;letter-spacing:-.01em;margin:0 0 var(--space-md)}.page-head .lede{color:var(--color-foreground-2);font-size:var(--text-lg);line-height:1.5;max-width:38rem;margin:0 auto;text-wrap:pretty}.page-head .tags{display:flex;flex-wrap:wrap;justify-content:center;gap:.35rem;margin-top:var(--space-md)}.about-layout{display:grid;grid-template-columns:1fr;gap:var(--space-xl)}.about-main{padding:var(--space-xl);border-radius:var(--radius-lg);background:var(--color-surface)}.about-main>:first-child{margin-top:0}.about-main h2{font-size:var(--text-lg);margin-top:var(--space-xl)}.about-main p{max-width:62ch}@media(min-width:820px){.about-layout{grid-template-columns:16rem minmax(0,1fr);align-items:start}.about-aside{position:sticky;top:6rem}}.profile-card{padding:var(--space-md);border-radius:var(--radius-lg);background:var(--color-surface)}.profile-card .pc-tag{display:none}.profile-card .pc-photo{display:block;width:100%;height:auto;aspect-ratio:4 / 5;object-fit:cover;object-position:center top;border-radius:var(--radius)}.profile-card .pc-name{font-size:var(--text-lg);margin:var(--space-md) 0 .1rem}.profile-card .pc-role{font-size:var(--text-sm);color:var(--color-foreground-2);margin:0 0 var(--space-md)}.profile-card .pc-info{margin:0;display:grid;gap:var(--space-sm)}.profile-card .pc-info>div{display:grid;gap:.1rem;padding-top:var(--space-sm);border-top:1px solid var(--color-border)}.profile-card .pc-info dt{font-size:var(--text-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--color-muted-foreground)}.profile-card .pc-info dd{margin:0;font-size:var(--text-sm);line-height:1.45}.profile-card .pc-info dd.accent{color:var(--color-lime)}.repo-stats{margin:0 0 var(--space-xl);padding:var(--space-md) var(--space-lg);border-radius:var(--radius);background:var(--color-surface);display:grid;grid-template-columns:1fr auto;gap:var(--space-md) var(--space-xl);align-items:center}.repo-stats .rs-head{display:flex;align-items:baseline;gap:var(--space-md);flex-wrap:wrap}.repo-stats .rs-tag{font-size:var(--text-xs);letter-spacing:.1em;text-transform:uppercase;color:var(--color-muted-foreground)}.repo-stats .rs-link{font-family:var(--font-mono);font-size:var(--text-sm);text-decoration:none;white-space:nowrap}.repo-stats .rs-grid{display:flex;gap:var(--space-xl);flex-wrap:wrap}.repo-stats .rs-stat{display:flex;align-items:baseline;gap:.45rem}.repo-stats .rs-num{font-family:var(--font-display);font-size:var(--text-base);font-weight:600;font-variant-numeric:tabular-nums}.repo-stats .rs-label{font-size:var(--text-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--color-muted-foreground)}.repo-stats .rs-solo{align-items:center}.repo-stats .rs-solo-avatar{width:22px;height:22px;border-radius:50%}.repo-stats .rs-people{grid-column:1 / -1;display:flex;align-items:center;gap:var(--space-sm);padding-top:var(--space-md);border-top:1px solid var(--color-border)}.repo-stats .rs-avatars{display:flex}.repo-stats .rs-avatars a{display:block;margin-left:-6px;line-height:0}.repo-stats .rs-avatars a:first-child{margin-left:0}.repo-stats .rs-avatars img{width:24px;height:24px;border-radius:50%;border:2px solid var(--color-background);background:var(--color-background)}.repo-stats .rs-people-label{font-size:var(--text-xs);color:var(--color-foreground-2)}@media(max-width:640px){.repo-stats{grid-template-columns:1fr}}article.writeup{counter-reset:sec}article.writeup>h2{counter-increment:sec;margin-top:var(--space-3xl);display:grid;grid-template-columns:2.5rem 1fr;gap:var(--space-sm);align-items:baseline;font-size:var(--text-xl)}article.writeup>h2:before{content:counter(sec,decimal-leading-zero);font-family:var(--font-mono);font-weight:400;font-size:var(--text-sm);color:var(--color-orange)}article.writeup>h3{margin-top:var(--space-xl)}article.writeup img{max-width:100%;height:auto;border-radius:var(--radius)}article.writeup figure{margin:var(--space-xl) 0}article.writeup figure img,article.writeup figure video{display:block;width:100%}article.writeup figure video{height:auto;border-radius:var(--radius);background:#000}article.writeup figure figcaption{font-size:var(--text-sm);line-height:1.5;color:var(--color-muted-foreground);margin-top:var(--space-sm);max-width:62ch}article.writeup .img-pair{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm)}article.writeup .img-pair img{aspect-ratio:3 / 4;object-fit:cover;object-position:center}article.writeup .board-photos{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-md);align-items:center;justify-items:center}article.writeup .board-photos img{border-radius:0;background:transparent;width:auto;max-width:100%;max-height:420px}article.writeup .fig-row{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-sm);align-items:start}@media(max-width:480px){article.writeup .img-pair,article.writeup .board-photos,article.writeup .fig-row{grid-template-columns:1fr}}article.writeup figure.diagram{overflow-x:auto;padding-bottom:var(--space-xs)}article.writeup figure.diagram svg{display:block;width:100%;min-width:560px;height:auto}article.writeup .embed-frame{position:relative;height:560px;overflow:hidden;border-radius:var(--radius);background:var(--color-surface-solid)}article.writeup .embed-frame iframe{width:100%;height:100%;border:0}article.writeup .video-frame{position:relative;aspect-ratio:16 / 9;overflow:hidden;border-radius:var(--radius)}article.writeup .video-frame.vertical{aspect-ratio:9 / 16;max-width:360px;margin:0 auto}article.writeup .video-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0}article.writeup table{border-collapse:collapse;width:100%;font-size:var(--text-sm);margin:0 0 var(--space-lg)}article.writeup th,article.writeup td{border-bottom:1px solid var(--color-border);padding:.5rem .75rem .5rem 0;text-align:left;vertical-align:top}article.writeup th{font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.08em;color:var(--color-muted-foreground);font-weight:500}article.writeup td{font-variant-numeric:tabular-nums}.media-placeholder{border:1px dashed var(--color-border-strong);border-radius:var(--radius);padding:var(--space-2xl) var(--space-lg);text-align:center;font-size:var(--text-sm);color:var(--color-muted-foreground);margin:var(--space-xl) 0}.back-link{display:inline-block;margin-top:var(--space-2xl);font-size:var(--text-sm)}.cv-actions{display:flex;justify-content:center;gap:var(--space-md);flex-wrap:wrap;margin-top:var(--space-lg)}.cv-block{margin-top:var(--space-2xl)}.cv-block h2{margin:0 0 var(--space-md);font-size:var(--text-xl)}.cv-block>p{max-width:70ch}.cv-projects,.cv-list{list-style:none;padding:0;margin:0;display:grid;gap:var(--space-md)}.cv-projects>li,.cv-list>li{margin:0;padding:var(--space-lg);border-radius:var(--radius-lg);background:var(--color-surface)}.cv-list.compact>li{padding:var(--space-md) var(--space-lg)}.cv-head{display:flex;justify-content:space-between;align-items:baseline;gap:var(--space-sm) var(--space-lg);flex-wrap:wrap}.cv-head h3{margin:0;font-size:var(--text-lg);font-weight:600}.cv-head h3 a{text-decoration:none}.cv-head h3 a:hover{color:var(--color-orange)}.cv-kind,.cv-when{font-size:var(--text-sm);color:var(--color-muted-foreground);white-space:nowrap}.cv-org{color:var(--color-foreground-2);font-size:var(--text-sm);margin-top:.15rem}.cv-note{color:var(--color-foreground-2);font-size:var(--text-sm);margin:var(--space-sm) 0 0;max-width:70ch}.cv-block>.cv-note{margin:0 0 var(--space-md)}.cv-projects>li>ul{margin:var(--space-sm) 0 0;padding-left:1.1rem;display:grid;gap:.4rem}.cv-projects>li>ul li{margin:0;color:var(--color-foreground-2);font-size:var(--text-sm);line-height:1.55}.cv-more{text-align:center;margin:var(--space-lg) 0 0;font-size:var(--text-sm)}.cv-skills{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-md)}.cv-skills>div{padding:var(--space-lg);border-radius:var(--radius-lg);background:var(--color-surface)}.cv-skills h3{margin:0 0 var(--space-sm);font-size:var(--text-base);font-weight:600}.cv-skills ul{margin:0;padding-left:1.1rem}.cv-skills li{font-size:var(--text-sm);color:var(--color-foreground-2);margin-bottom:.3rem}@media(max-width:640px){.cv-skills{grid-template-columns:1fr}.cv-kind,.cv-when{white-space:normal}}.section-rule{margin:var(--space-2xl) 0 var(--space-md)}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}}.hero-compact{display:grid;grid-template-columns:112px 1fr;gap:2rem;align-items:center;text-align:left}.hero-compact .portrait{width:112px;margin:0}.hero-compact h1{font-size:clamp(1.65rem,5vw,2.25rem)}.hero-compact .intro{font-size:1rem;margin:0 0 .75rem;max-width:42ch;text-wrap:pretty}.hero-compact .availability{color:var(--color-foreground-2);font-size:.875rem;margin:0 0 1rem}.hero-compact .actions{justify-content:flex-start}#work.home-section{padding-top:2.5rem;margin-bottom:3rem}#work .display{text-align:left;font-size:1.6rem;margin-bottom:1.5rem}#work .display span{display:inline}#work .display .dim{margin-left:.25em}.project-card.visual{display:flex;flex-direction:column;align-items:stretch;gap:1.25rem;padding:1rem}.project-card.visual .card-thumb{width:100%;aspect-ratio:3 / 2;align-self:stretch}.project-card.visual .card-thumb img{object-fit:contain}.project-card.visual .body{padding:0 .25rem .5rem}.project-card.visual h3{font-size:1.375rem;padding-right:1.5rem}.project-card.visual p{display:block;max-width:none}.project-card.visual .go{top:auto;bottom:1.75rem}.project-source{margin:-1rem 0 2rem;text-align:center;font-size:.875rem}.print-name,.print-contact{display:none}@media(max-width:560px){.hero-compact{grid-template-columns:64px 1fr;gap:1rem;align-items:start}.hero-compact .portrait{width:64px}.hero-compact .actions{flex-wrap:wrap;gap:.5rem}.hero-compact .btn{padding:.6rem .8rem;font-size:.8rem}.project-card.visual h3{font-size:1.2rem}}@media print{@page{size:A4;margin:12mm 14mm}:root{color-scheme:light}html,body{background:#fff!important;color:#151515!important;font-size:9pt;line-height:1.35}*{color:#151515!important;background:transparent!important;box-shadow:none!important;text-shadow:none!important}.site-header,.site-footer,.cv-actions,.cv-more,.screen-only{display:none!important}main{max-width:none;margin:0;padding:0!important}.print-name{display:inline}.print-contact{display:block;margin:0 0 2mm;font-size:9pt}.page-head{padding:0;margin:0 0 5mm;text-align:left}.page-head h1{font-size:22pt;margin:0 0 2mm}.page-head .lede{text-align:left;margin:0;max-width:none;font-size:9pt}.cv-block{margin:4mm 0 0;padding:0}.cv-block h2{font-size:12pt;margin:0 0 2mm;break-after:avoid}.cv-block h3{font-size:9pt}.cv-block p{margin:1mm 0 2mm}.cv-projects,.cv-list{gap:2mm}.cv-projects>li,.cv-list>li,.cv-skills>div{padding:2mm 0;border:0;border-radius:0;break-inside:avoid}.cv-projects>li:nth-child(n+5){display:none}.cv-skills{display:grid;grid-template-columns:1fr 1fr;gap:1mm 5mm}.cv-skills ul,.cv-projects ul{margin:1mm 0}.cv-head{gap:3mm}.cv-block a{text-decoration:none}.cv-block.contact{margin-top:4mm;text-align:left}}.term{min-width:0}.course-list .ctitle{overflow-wrap:anywhere}
