@font-face{font-family:IBM Plex Sans;src:url(/fonts/ibm-plex-sans-latin.woff2)format("woff2");font-weight:100 700;font-style:normal;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/fonts/ibm-plex-mono-latin.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}:root,[data-theme=white]{--bg:#f7f7f7;--surface:#fff;--text:#111;--text-muted:#666;--border:#e0e0e0;--accent:#111}[data-theme=black]{--bg:#0f0f0f;--surface:#1a1a1a;--text:#ededed;--text-muted:#888;--border:#2a2a2a;--accent:#ededed}[data-theme=blue]{--bg:#000;--surface:#000;--text:#5cb8ff;--text-muted:#4d87bd;--border:#1d4a75;--accent:#8ad3ff}[data-theme=green]{--bg:#000;--surface:#000;--text:#46e07a;--text-muted:#3f9e63;--border:#1f5636;--accent:#6bff9e}[data-theme=red]{--bg:#000;--surface:#000;--text:#ff6f6b;--text-muted:#c06a68;--border:#5e2a28;--accent:#ff9d96}:root{--font-sans:"IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;--font-mono:"IBM Plex Mono", "SF Mono", "Fira Code", "Consolas", monospace;--gutter:clamp(1.25rem, 4vw, 4rem);--nav-h:3.25rem;--measure:68rem;--measure-inner:calc(var(--measure) - var(--gutter) * 2)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--text);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;font-size:1rem;line-height:1.65}h1{letter-spacing:-.025em;font-size:clamp(2rem,1.5rem + 2vw,3rem);font-weight:700;line-height:1.15}h2{letter-spacing:-.015em;font-size:clamp(1.25rem,1.1rem + .6vw,1.625rem);font-weight:600;line-height:1.25}h3{font-size:clamp(1.0625rem,1rem + .25vw,1.1875rem);font-weight:600;line-height:1.35}p+p{margin-top:.75rem}a{color:var(--text);text-underline-offset:3px;text-decoration:underline;text-decoration-color:var(--border);transition:text-decoration-color .15s}a:hover{text-decoration-color:var(--text-muted)}.container{width:100%;max-width:var(--measure);padding:0 var(--gutter);margin-inline:auto}.site-header{justify-content:flex-end;padding:1.5rem 0 0;display:flex}.portfolio-hero{padding:clamp(2.5rem,5vw,5rem) 0 clamp(2rem,3vw,3rem)}.portfolio-hero .name{letter-spacing:-.03em;font-size:clamp(2rem,1.4rem + 2.4vw,3.25rem);font-weight:700}.portfolio-hero .role{color:var(--text-muted);margin-top:.5rem;font-size:clamp(1rem,.94rem + .3vw,1.25rem)}.section{border-top:1px solid var(--border);padding:clamp(2.5rem,4vw,4.25rem) 0}.section h2{margin-bottom:2rem}.card-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,18rem),1fr));gap:1rem;display:grid}.card{border:1px solid var(--border);background:var(--surface);aspect-ratio:1;border-radius:3px;flex-direction:column;padding:1.5rem;display:flex}.card:has(.project-more[open]),.card--flow{aspect-ratio:auto}.card--flow .card-foot{margin-top:0;margin-bottom:.875rem}.card--flow .project-body{padding-top:0}.project-title{margin-bottom:.25rem;font-size:1.0625rem;font-weight:600}.project-tagline{color:var(--text-muted);margin-bottom:.875rem;font-size:.9375rem}.project-tags,.card-foot{margin-top:auto}.card-sub{color:var(--text-muted);margin-bottom:.875rem;font-size:.9375rem}.card-period{font-family:var(--font-mono);color:var(--text-muted);font-size:.725rem}.project-body{padding-top:.875rem;font-size:.9375rem;line-height:1.7}.project-more{border-top:1px solid var(--border);margin-top:.875rem;padding-top:.875rem}.project-more>summary{cursor:pointer;color:var(--text-muted);align-items:center;gap:.45em;font-size:.875rem;font-weight:500;list-style:none;transition:color .15s;display:inline-flex}.project-more>summary::-webkit-details-marker{display:none}.project-more>summary:hover{color:var(--text)}.project-more>summary:after{content:"+";font-family:var(--font-mono)}.project-more[open]>summary:after{content:"−"}.project-tags{flex-wrap:wrap;gap:.375rem;margin-bottom:.875rem;display:flex}.tag{font-family:var(--font-mono);color:var(--text-muted);border:1px solid var(--border);border-radius:2px;padding:.2em .55em;font-size:.725rem}.project-link{font-size:.875rem;font-weight:500}.project-meta{flex-wrap:wrap;align-items:center;gap:1rem;display:flex}.project-status{font-family:var(--font-mono);color:var(--text-muted);align-items:center;gap:.45em;font-size:.75rem;display:inline-flex}.project-status:before{content:"";border:1px solid var(--text-muted);border-radius:50%;width:5px;height:5px}.skills-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,14rem),1fr));gap:2rem;display:grid}.skill-group-label{letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);margin-bottom:.625rem;font-size:.725rem;font-weight:700}.skill-list{flex-wrap:wrap;gap:.375rem;list-style:none;display:flex}.experience-entry{border-bottom:1px solid var(--border);padding:1.5rem 0}.experience-entry:first-child{padding-top:0}.experience-entry:last-child{border-bottom:none}.experience-header{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:1rem;margin-bottom:.25rem;display:flex}.experience-role{font-size:1rem;font-weight:600}.experience-period{color:var(--text-muted);white-space:nowrap;font-size:.8125rem}.experience-company{color:var(--text-muted);margin-bottom:.5rem;font-size:.9375rem}.experience-desc{font-size:.9375rem}.experience-list,.plain-list{flex-direction:column;gap:.45rem;font-size:.9375rem;line-height:1.6;list-style:none;display:flex}.experience-list>li,.plain-list>li{padding-left:1.1em;position:relative}.experience-list>li:before,.plain-list>li:before{content:"–";color:var(--text-muted);position:absolute;left:0}.connect-links{flex-wrap:wrap;align-items:center;gap:.6rem 1.5rem;display:flex}.icon{flex:none;width:1.15em;height:1.15em}.icon-link{align-items:center;gap:.5em;display:inline-flex}.icon-only{color:var(--text-muted);margin:-.3rem;padding:.3rem;text-decoration:none;transition:color .15s}.icon-only:hover{color:var(--text)}.icon-only .icon{width:1.3em;height:1.3em}.elsewhere{margin-top:clamp(1.5rem,3vw,2.25rem)}.elsewhere-label{letter-spacing:.12em;text-transform:uppercase;color:var(--text-muted);margin-bottom:.625rem;font-size:.6875rem;font-weight:700}.elsewhere-links{flex-wrap:wrap;align-items:center;gap:clamp(1rem,2vw,1.75rem);font-size:1.0625rem;display:flex}.resume-links{flex-wrap:wrap;gap:clamp(1rem,2vw,1.75rem);display:flex}.console{flex-direction:column;align-items:center;gap:.625rem;margin-top:clamp(2.5rem,4vw,4rem);display:flex}.console-row{align-items:center;gap:.6rem;display:flex}.console-copy{background:var(--surface);border:1px solid var(--border);color:var(--text-muted);cursor:pointer;border-radius:2px;justify-content:center;align-items:center;padding:.5em;transition:color .15s,border-color .15s;display:inline-flex}.console-copy:hover,.console-copy:focus-visible{color:var(--text);border-color:var(--text-muted)}.console-copy .icon{width:1.05rem;height:1.05rem}.no-js .console-copy{display:none}.console-cmd{font-family:var(--font-mono);color:var(--text-muted);user-select:all;font-size:.8125rem}.console-status{color:var(--text-muted);min-height:1.2em;font-size:.75rem}.theme-toggle{border:1px solid var(--border);color:var(--text-muted);cursor:pointer;font-family:var(--font-mono);background:0 0;border-radius:2px;padding:.35em .8em;font-size:.725rem;transition:color .15s,border-color .15s}.theme-toggle:hover{color:var(--text);border-color:var(--text-muted)}.site-footer{border-top:1px solid var(--border);text-align:center;color:var(--text-muted);margin-top:1rem;padding:2rem 0 3rem;font-size:.8125rem}@media (width<=600px){.skills-grid{grid-template-columns:repeat(2,1fr);gap:1.5rem}.card{aspect-ratio:auto}}.shell-portrait{padding-bottom:clamp(1.25rem,3vw,2rem)}.portrait{background-color:var(--surface);background-position:50% 35%;background-repeat:no-repeat;background-size:cover;height:clamp(200px,34vh,380px)}:root .portrait,[data-theme=white] .portrait{background-image:url(/portraits/st-john-s.jpg)}[data-theme=black] .portrait{background-image:url(/portraits/black.png)}[data-theme=blue] .portrait{background-image:url(/portraits/cybe.jpg)}[data-theme=green] .portrait{background-image:url(/portraits/programm.jpg)}[data-theme=red] .portrait{background-image:url(/portraits/red-team.webp)}[data-theme=black] .portrait{background-color:#000;background-position:50%;background-size:contain}.shell-nav .container{align-items:center;gap:1.5rem;display:flex}.shell-nav .site-nav{flex:1;min-width:0}.site-nav-list{min-height:var(--nav-h);flex-wrap:wrap;align-items:center;gap:0 clamp(1rem,3vw,2rem);list-style:none;display:flex}.site-nav-list a{color:var(--text-muted);border-bottom:2px solid #0000;padding:.9rem 0;font-size:.9375rem;text-decoration:none;transition:color .15s;display:inline-block}.site-nav-list a:hover{color:var(--text)}.site-nav-list a[aria-current=page]{color:var(--text);border-bottom-color:var(--accent);font-weight:600}.site-nav-resume{margin-left:auto}.site-nav-resume .resume-links{gap:1rem}.theme-picker{flex:none;display:flex}.theme-cycle{border:1px solid var(--border);cursor:pointer;font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.1em;color:var(--text-muted);background:0 0;border-radius:2px;padding:.4rem .7rem;font-size:.7rem;transition:color .15s,border-color .15s;display:inline-block}.theme-cycle:hover{color:var(--text);border-color:var(--text-muted)}.no-js .theme-picker{display:none}@media (width<=600px){.site-nav-list{gap:0 1.1rem}.site-nav-list a{padding:.7rem 0;font-size:.875rem}.site-nav-resume{width:100%;margin-left:0;padding-bottom:.6rem}}.section--first,.section--lead{border-top:none;padding-top:0}.lead{text-wrap:pretty;max-width:62ch;font-size:clamp(1.05rem,2vw,1.3rem);line-height:1.6}.empty-note{color:var(--text-muted);font-size:.9375rem}.writeup-list{flex-direction:column;gap:2rem;display:flex}.writeup{border-bottom:1px solid var(--border);padding-bottom:2rem}.writeup:last-child{border-bottom:none;padding-bottom:0}.writeup-title{font-size:1.0625rem;font-weight:600}.writeup-date{font-family:var(--font-mono);color:var(--text-muted);font-size:.75rem}.writeup-tagline{color:var(--text-muted);margin-top:.35rem;font-size:.9375rem}
