@font-face{font-family:IBM Plex Mono Local;src:url(/fonts/IBMPlexMono-Regular.ttf) format("truetype");font-style:normal;font-weight:400;font-display:swap}@font-face{font-family:Inter Local;src:url(/fonts/Inter-VariableFont_opsz,wght.ttf) format("truetype");font-style:normal;font-weight:100 900;font-display:swap}:root{--font-mono: "IBM Plex Mono Local", "IBM Plex Mono", "Consolas", monospace;--font-sans: "Inter Local", "Inter", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--paper: #000;--ink: #fff;--ink-muted: rgb(255 255 255 / 68%);--line: rgb(255 255 255 / 28%);--grid-line: rgb(255 255 255 / 14%);--surface: rgb(0 0 0 / 74%);--panel: #000;--subtle-line: rgb(255 255 255 / 18%);--link-line: rgb(255 255 255 / 34%)}:root[data-theme=day]{--paper: #fff;--ink: #000;--ink-muted: rgb(0 0 0 / 68%);--line: rgb(0 0 0 / 28%);--grid-line: rgb(0 0 0 / 14%);--surface: rgb(0 0 0 / 7%);--panel: #fff;--subtle-line: rgb(0 0 0 / 18%);--link-line: rgb(0 0 0 / 34%)}:root[data-theme=eclipse]{--paper: #111217;--ink: #e7ebf4;--ink-muted: rgb(231 235 244 / 66%);--line: rgb(151 166 199 / 36%);--grid-line: rgb(165 178 208 / 18%);--surface: rgb(10 11 14 / 56%);--panel: #141720;--subtle-line: rgb(151 166 199 / 24%);--link-line: rgb(151 166 199 / 44%)}*,*:before,*:after{box-sizing:border-box}html,body,#app{min-height:100%}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font-sans);overflow-x:hidden;transition:background-color .22s ease,color .22s ease}.page{position:relative;min-height:100vh}.abstract-layer{position:fixed;inset:0;pointer-events:none;z-index:0}.shape{position:absolute;border:1px solid var(--line)}.circle{border-radius:50%}.circle-a{width:min(46vw,520px);aspect-ratio:1;left:-8vw;top:-10vh;animation:drift 20s ease-in-out infinite alternate}.circle-b{width:min(36vw,400px);aspect-ratio:1;right:-8vw;bottom:10vh;animation:drift 26s ease-in-out infinite alternate-reverse}.stripe{height:1px;width:58vw;background:var(--line);border:0}.stripe-a{left:18vw;top:32vh;rotate:-24deg}.stripe-b{left:8vw;top:70vh;rotate:18deg}.grid{width:30vw;height:36vh;border:0;right:10vw;top:18vh;background-image:repeating-linear-gradient(0deg,transparent,transparent 29px,var(--grid-line) 30px),repeating-linear-gradient(90deg,transparent,transparent 29px,var(--grid-line) 30px)}.content{position:relative;z-index:1;max-width:1120px;margin:0 auto;padding:40px 24px 56px;display:grid;gap:28px}.utility-row{display:flex;justify-content:space-between;align-items:flex-start;gap:24px;position:relative;z-index:100}.nav-wrap{display:grid;gap:10px}.page-indicator{margin:0;font-family:var(--font-sans);font-size:.68rem;font-weight:560;text-transform:uppercase;letter-spacing:.12em;color:var(--ink-muted)}.section-nav{display:flex;gap:8px;flex-wrap:wrap}.section-link{border:1px solid var(--line);background:transparent;color:var(--ink-muted);padding:7px 10px;font-family:var(--font-sans);font-size:.67rem;font-weight:560;text-transform:uppercase;letter-spacing:.1em;cursor:pointer;transition:color .14s ease,background-color .14s ease,border-color .14s ease}.section-link:hover{color:var(--ink);border-color:var(--ink)}.section-link.is-active{background:var(--ink);color:var(--paper);border-color:var(--ink)}.theme-switcher{display:flex;align-items:center;position:relative;z-index:30}.theme-dropdown{position:relative;min-width:210px}.theme-dropdown.is-open{z-index:40}.theme-trigger{width:100%;border:1px solid var(--line);background:var(--panel);color:var(--ink);font-family:var(--font-mono);font-size:.74rem;font-weight:400;letter-spacing:.1em;text-transform:uppercase;padding:9px 11px;cursor:pointer;transition:background-color .16s ease,border-color .16s ease;display:inline-flex;align-items:center;justify-content:space-between;gap:10px}.theme-trigger:hover{background:color-mix(in srgb,var(--ink) 7%,transparent)}.theme-menu{position:absolute;top:calc(100% + 6px);right:0;width:100%;border:1px solid var(--line);background:var(--paper);padding:5px;display:grid;gap:4px;z-index:50;box-shadow:0 8px 20px #00000038}.theme-option{border:1px solid transparent;background:transparent;color:var(--ink);font-family:var(--font-mono);font-size:.74rem;font-weight:400;letter-spacing:.1em;text-transform:uppercase;padding:8px 9px;cursor:pointer;transition:background-color .16s ease,color .16s ease;display:inline-flex;align-items:center;gap:8px;text-align:left}.theme-option:hover{background:var(--surface)}.theme-option.is-active{background:var(--ink);color:var(--paper);border-color:var(--ink)}.theme-icon{width:26px;height:26px;display:inline-block;flex:0 0 auto}.theme-name{line-height:1}:root[data-theme=day] .theme-icon{filter:invert(1)}.theme-option.is-active .theme-icon{filter:invert(1)}:root[data-theme=day] .theme-option.is-active .theme-icon{filter:invert(0)}.theme-caret{font-size:.62rem;color:var(--ink-muted);transition:transform .16s ease}.theme-dropdown.is-open .theme-caret{transform:rotate(180deg)}.page-shell{border-top:1px solid var(--line);padding-top:24px;display:grid;gap:20px;min-height:min(72vh,760px)}.page-header{max-width:940px}.kicker{margin:0 0 16px;font-size:.8rem;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-muted);font-family:var(--font-sans);font-weight:560}h1,h2,h3,p,ul{margin:0}h1{font-size:clamp(1.8rem,4vw,3.2rem);line-height:1.1;letter-spacing:.01em;text-transform:uppercase;font-weight:640}h2{font-size:.82rem;text-transform:uppercase;letter-spacing:.16em;color:var(--ink-muted);font-family:var(--font-sans);font-weight:560}.lede{margin-top:18px;max-width:62ch;color:var(--ink-muted);font-size:.95rem;line-height:1.7}.page-section{border-top:1px solid var(--line);padding-top:16px;display:grid;gap:14px}.panel-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.panel-card{border:1px solid var(--line);background:var(--surface);padding:16px;display:grid;gap:8px}.panel-card h3{font-size:1.02rem;text-transform:uppercase;letter-spacing:.05em;font-weight:620}.panel-card p{color:var(--ink-muted);line-height:1.6}.snapshot-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.snapshot-item{border:1px solid var(--line);background:var(--surface);padding:14px}.snapshot-value{font-family:var(--font-sans);font-weight:640;font-size:1.5rem;line-height:1}.snapshot-label{margin-top:7px;color:var(--ink-muted);line-height:1.45;font-size:.88rem}.project-list{display:grid;gap:14px}.project-card{border:1px solid var(--line);background:var(--surface);display:flex;flex-direction:column;animation:reveal .62s cubic-bezier(.18,.8,.2,1) both;animation-delay:var(--delay, 0ms);overflow:hidden}.project-content{padding:18px;display:grid;gap:10px}.project-meta{display:flex;gap:16px;font-family:var(--font-mono);font-size:.75rem;color:var(--ink-muted);letter-spacing:.08em;text-transform:uppercase}.project-media{width:100%;height:224px;background:color-mix(in srgb,var(--line) 20%,transparent);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:center;color:var(--ink-muted);font-family:var(--font-mono);font-size:.75rem;letter-spacing:.1em;text-transform:uppercase;overflow:hidden}.project-media img{width:100%;height:100%;object-fit:cover}.project-actions{display:flex;gap:12px;margin-top:14px;flex-wrap:wrap}.project-action-btn{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;border:1px solid var(--line);background:var(--surface);color:var(--ink);font-family:var(--font-sans);font-size:.82rem;text-decoration:none;border-radius:4px;transition:background-color .16s ease,border-color .16s ease}.project-action-btn:hover{background:color-mix(in srgb,var(--ink) 7%,transparent);border-color:var(--subtle-line)}.project-action-btn img,.project-action-btn svg{width:16px;height:16px}:root[data-theme=day] .project-action-btn img[src="/github.svg"]{filter:invert(1)}.project-card h3{font-size:clamp(1.15rem,2.5vw,1.7rem);text-transform:uppercase;letter-spacing:.02em;font-weight:620}.project-summary,.project-role,.project-outcome{color:var(--ink-muted);line-height:1.62}.stack-list{list-style:none;padding:0;margin:2px 0;display:flex;flex-wrap:wrap;gap:8px}.stack-list li{border:1px solid var(--line);padding:4px 8px;font-family:var(--font-mono);font-size:.7rem;text-transform:uppercase;letter-spacing:.08em}.blog-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.blog-post{border:1px solid var(--line);background:var(--surface);padding:16px;display:grid;gap:10px;animation:reveal .62s cubic-bezier(.18,.8,.2,1) both;animation-delay:var(--delay, 0ms)}.blog-meta{color:var(--ink-muted);font-family:var(--font-mono);font-size:.73rem;letter-spacing:.1em;text-transform:uppercase}.blog-post h3{font-size:clamp(1rem,2vw,1.28rem);line-height:1.3;text-transform:uppercase;letter-spacing:.03em;font-weight:620}.blog-post p{color:var(--ink-muted);line-height:1.6}.tag-list{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:7px}.tag-list li{border:1px solid var(--line);padding:3px 7px;font-family:var(--font-mono);font-size:.66rem;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);transition:color .14s ease,border-color .14s ease}.tag-list li:hover{color:var(--ink);border-color:var(--subtle-line)}.tag-list a{display:flex;align-items:center;gap:6px;color:inherit;text-decoration:none}.contact-icon{width:14px;height:14px}:root[data-theme=day] .contact-icon{filter:invert(1)}.hero-layout{display:grid;grid-template-columns:1.4fr 1fr;gap:56px;align-items:start}@media(max-width:860px){.hero-layout{grid-template-columns:1fr;gap:32px}}.hero-media{align-self:start}.hero-media img{width:90%;height:auto;display:block;border:1px solid var(--line);padding:12px;background:var(--surface)}.hero-actions{display:flex;gap:16px;flex-wrap:wrap}.hero-action-btn{display:inline-flex;align-items:center;gap:10px;padding:10px 18px;border:1px solid var(--ink);background:var(--ink);color:var(--paper);font-family:var(--font-sans);font-size:.9rem;font-weight:560;text-decoration:none;transition:background-color .16s ease,color .16s ease}.hero-action-btn:hover{background:transparent;color:var(--ink)}.hero-action-icon{width:18px;height:18px;filter:invert(1)}.hero-action-btn:hover .hero-action-icon{filter:invert(0)}:root[data-theme=day] .hero-action-icon{filter:invert(0)}:root[data-theme=day] .hero-action-btn:hover .hero-action-icon{filter:invert(1)}.hero-secondary-btn{display:inline-flex;align-items:center;gap:10px;padding:10px 18px;border:1px solid var(--line);background:transparent;color:var(--ink);font-family:var(--font-sans);font-size:.9rem;font-weight:560;text-decoration:none;transition:background-color .16s ease,border-color .16s ease}.hero-secondary-btn:hover{background:var(--surface);border-color:var(--ink)}.hero-secondary-icon{width:18px;height:18px}:root[data-theme=day] .hero-secondary-icon{filter:invert(1)}.about-copy{border:1px solid var(--line);background:var(--surface);padding:18px;display:grid;gap:12px}.about-copy p{color:var(--ink-muted);line-height:1.7}.capability-list{display:grid;gap:10px}.capability{border:1px solid var(--line);background:var(--surface);padding:14px;display:grid;gap:6px}.capability h3{font-size:.9rem;text-transform:uppercase;letter-spacing:.08em;font-family:var(--font-sans);font-weight:620;color:var(--ink)}.capability p{color:var(--ink-muted);line-height:1.62}.timeline{display:grid;gap:10px}.timeline-item{border:1px solid var(--line);background:var(--surface);padding:14px;display:grid;gap:6px}.timeline-period{font-family:var(--font-mono);font-size:.72rem;text-transform:uppercase;letter-spacing:.1em;color:var(--ink-muted)}.timeline-item h3{text-transform:uppercase;letter-spacing:.03em;font-size:1rem}.timeline-item p{color:var(--ink-muted);line-height:1.6}.now-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.now-card{border:1px solid var(--line);background:var(--surface);padding:16px;display:grid;gap:10px;animation:reveal .62s cubic-bezier(.18,.8,.2,1) both;animation-delay:var(--delay, 0ms)}.now-card h3{font-size:.95rem;text-transform:uppercase;letter-spacing:.08em;font-family:var(--font-sans);font-weight:620}.now-card ul{margin:0;padding-left:16px;display:grid;gap:8px;color:var(--ink-muted);line-height:1.6}.contact-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.contact-card{border:1px solid var(--line);background:var(--surface);padding:16px;display:grid;gap:14px}.contact-list{display:grid;gap:10px}.contact-list p{display:flex;flex-wrap:wrap;gap:18px;padding-bottom:8px;border-bottom:1px solid var(--subtle-line);font-family:var(--font-sans)}.contact-list span{color:var(--ink-muted);text-transform:uppercase;letter-spacing:.12em;font-size:.74rem;font-family:var(--font-mono)}.contact-models{list-style:none;padding:0;margin:0;display:grid;gap:10px}.contact-models li{border-left:2px solid var(--ink);padding-left:12px;color:var(--ink-muted);line-height:1.65}.icon-credit{color:var(--ink-muted);font-size:.72rem;line-height:1.5}a{color:var(--ink);text-underline-offset:4px;text-decoration-color:var(--link-line)}a:hover{text-decoration-color:var(--ink)}.reveal{animation:reveal .7s cubic-bezier(.18,.8,.2,1) both;animation-delay:var(--delay, 0ms)}@keyframes reveal{0%{opacity:0;transform:translateY(22px)}to{opacity:1;transform:translateY(0)}}@keyframes drift{0%{transform:translateZ(0) scale(1)}to{transform:translate3d(2vw,-2vh,0) scale(1.04)}}@media(max-width:920px){.content{padding-top:64px;gap:24px}.utility-row{flex-direction:column;gap:14px}.theme-switcher,.theme-dropdown{width:100%}.theme-trigger,.theme-option{justify-content:flex-start;padding:9px 10px}.theme-icon{width:22px;height:22px}.panel-grid,.snapshot-grid,.blog-list,.about-grid,.now-grid,.contact-grid{grid-template-columns:1fr}.stripe{width:84vw}.grid{width:54vw;right:-6vw}}.cert-list{display:grid;gap:0}.cert-card{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:20px;padding:20px 0;border-bottom:1px solid var(--subtle-line);animation:reveal .62s cubic-bezier(.18,.8,.2,1) both;animation-delay:var(--delay, 0ms)}.cert-card:first-child{padding-top:0}.cert-card:last-child{border-bottom:none}.cert-icon{width:44px;height:44px;border:1px solid var(--line);background:var(--surface);display:flex;align-items:center;justify-content:center;color:var(--ink-muted);flex-shrink:0}.cert-detail{display:grid;gap:2px;min-width:0}.cert-detail h3{font-size:.95rem;font-weight:600;text-transform:none;letter-spacing:0;line-height:1.4}.cert-issuer{font-size:.85rem;color:var(--ink-muted)}.cert-date{font-family:var(--font-mono);font-size:.73rem;color:var(--ink-muted);letter-spacing:.06em;margin-top:2px!important}.cert-link{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border:1px solid var(--line);background:var(--surface);color:var(--ink);font-family:var(--font-sans);font-size:.78rem;text-decoration:none;white-space:nowrap;transition:background-color .16s ease,border-color .16s ease}.cert-link:hover{background:color-mix(in srgb,var(--ink) 7%,transparent);border-color:var(--subtle-line);text-decoration:none}@media(max-width:600px){.cert-card{grid-template-columns:auto 1fr;gap:14px}.cert-link{grid-column:1 / -1;justify-self:start}}.experience-section{border-top:1px solid var(--line);padding-top:20px;display:grid;gap:20px}.experience-list{display:grid;gap:0}.experience-item{display:grid;grid-template-columns:160px 1fr;gap:24px;padding:16px 0;border-bottom:1px solid var(--subtle-line)}.experience-item:last-child{border-bottom:none}.experience-period{font-family:var(--font-mono);font-size:.78rem;color:var(--ink-muted);padding-top:2px}.experience-detail h3{font-size:.95rem;font-weight:600;text-transform:none;letter-spacing:0;line-height:1.4}.experience-company{font-size:.85rem;color:var(--ink-muted);margin-top:2px!important}.experience-desc{font-size:.88rem;color:var(--ink-muted);line-height:1.6;margin-top:8px!important}@media(max-width:600px){.experience-item{grid-template-columns:1fr;gap:4px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}html{scroll-behavior:auto}}.ascii-loader{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;font-family:var(--font-mono);color:var(--ink);background:var(--bg)}.ascii-loader pre{margin:0;min-width:9ch;font-size:.95rem;line-height:1.4;letter-spacing:1px}.ascii-loader span{font-size:.75rem;color:var(--ink-muted)}
