:root{--text:#f4f1eb;--text-soft:#d2cdc4;--text-muted:#c4bdb3;--line:#f4f1eb2e;--accent:#f0e2c8;--accent-wash:#f0e2c8;--accent-bg:#5c5348;--paper:#3c4146;--ivory:#2a2e32;--logo:#fff;--dust:#17191b;--dust-light:#24282c;--dust-deep:#121416;--glint:#ffffff0f;--vein:transparent;--tray:#34393e;--watermark:#8d949b;--stamp:#101214;--on-stamp:#f4f1eb;--stroke:#d9d3c8;--shadow:#08090a;color:var(--text);background:var(--dust);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;font-family:Manrope,Segoe UI,sans-serif}:root[data-theme=ash]{--text:#1c2428;--text-soft:#3d4a52;--text-muted:#4e5d67;--line:#1c242829;--accent:#24566a;--accent-wash:#d4e3e8;--accent-bg:#d4e3e8;--paper:#f6f7f8;--ivory:#eef1f2;--logo:#fff;--dust:#d4dadc;--dust-light:#e5eaec;--dust-deep:#c2c9cc;--glint:#ffffffc7;--vein:transparent;--tray:#e3e8ea;--watermark:#f4f6f7;--stamp:#1c2428;--on-stamp:#f3f6f7;--stroke:#1c2428;--shadow:#1c2428}:root[data-theme=linen]{--text:#2b241c;--text-soft:#4a4034;--text-muted:#5e5142;--line:#2b241c29;--accent:#6b4a2e;--accent-wash:#ead9c4;--accent-bg:#ead9c4;--paper:#fbf6ee;--ivory:#f3ebe0;--logo:#fff;--dust:#e3d6c4;--dust-light:#efe4d4;--dust-deep:#d2c3ad;--glint:#fff8eebf;--vein:transparent;--tray:#efe3d2;--watermark:#f6f0e6;--stamp:#2b241c;--on-stamp:#f7f1e8;--stroke:#2b241c;--shadow:#2b241c}:root[data-theme=marble]{--text:#243038;--text-soft:#3c4a52;--text-muted:#5b6a72;--line:#24303829;--accent:#1a564c;--accent-wash:#d7ebe6;--accent-bg:#d7ebe6;--paper:#fbfaf7;--ivory:#f4f2ee;--logo:#fff;--dust:#d8d4ce;--dust-light:#e8e6e1;--dust-deep:#c9c5be;--glint:#ffffffb8;--vein:#ffffff8c;--tray:#eceae4;--watermark:#f7f6f3;--stamp:#243038;--on-stamp:#f7f6f2;--stroke:#243038;--shadow:#243038}*{box-sizing:border-box}body{margin:0}button,a{font:inherit}h1,h2,h3,p,ul,ol{margin:0}.sr-only{clip:rect(0, 0, 0, 0);border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.page{background:linear-gradient(118deg, transparent 0 46%, var(--vein) 50%, transparent 54%), radial-gradient(circle at 12% 8%, var(--glint), transparent 32%), linear-gradient(160deg, var(--dust-light) 0%, var(--dust-deep) 100%);flex-direction:column;align-items:center;min-height:100vh;padding:3rem 3.4rem calc(2.4rem + 20px);display:flex}.edge{z-index:0;color:var(--watermark);letter-spacing:.28em;pointer-events:none;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;margin:0;font-family:IBM Plex Mono,ui-monospace,monospace;font-size:.68rem;display:flex;position:fixed}.edge span{white-space:nowrap}.edge-top,.edge-bottom{height:2.4rem;left:0;right:0;overflow:hidden}.edge-top{top:0}.edge-bottom{bottom:0}.edge-left,.edge-right{width:2.4rem;top:0;bottom:0}.edge-left{left:0}.edge-right{right:0}.edge-left span{transform:rotate(-90deg)}.edge-right span{transform:rotate(90deg)}html{scroll-behavior:smooth;overflow-x:clip}.card{z-index:1;background:var(--ivory);border:1px solid var(--stroke);width:min(980px,100%);box-shadow:10px 12px 0 var(--shadow);margin-top:auto;margin-bottom:auto;padding:clamp(1.5rem,4vw,3.25rem);position:relative}.langs,.menu{align-items:center;display:flex}.stage{grid-template-rows:auto 1fr;grid-template-columns:max-content minmax(0,1fr);align-items:stretch;gap:1.5rem 2.5rem;display:grid}.mark{box-sizing:border-box;border:1px solid var(--stamp);background:var(--stamp);text-align:center;width:8.5rem;height:8.5rem;color:var(--on-stamp);letter-spacing:-.04em;text-transform:none;flex-direction:column;grid-area:1/1;justify-content:center;align-self:start;align-items:center;gap:.45rem;margin:0;padding:.7rem;font-family:Fraunces,Georgia,serif;font-size:3.15rem;font-weight:640;line-height:.8;display:flex}.mark:after{content:"";background:var(--accent-wash);width:1.15rem;height:1.5px}.identity{text-align:right;grid-area:1/2/span 2;place-self:end}.identity .langs{justify-content:flex-end;margin-bottom:.85rem}.role,.block h2,.sheet>h2,.subhead,.open-for,.tray-handle,.langs button{letter-spacing:.14em;text-transform:uppercase;font-family:IBM Plex Mono,ui-monospace,monospace;font-size:.75rem;font-weight:500}.logo{z-index:1;object-fit:contain;background:var(--logo);border:2px solid var(--stroke);border-radius:50%;width:2.5rem;height:2.5rem;position:relative}.palette{z-index:5;position:fixed;bottom:3.15rem;right:3.15rem}.palette-face{border:1px solid var(--stroke);background:var(--paper);cursor:pointer;width:1.7rem;height:1.7rem;padding:.22rem;display:grid}.palette-face:focus-visible,.palette-choice:focus-visible{outline:1.5px solid var(--accent);outline-offset:2px}.palette-pop{z-index:4;transform-origin:100% 100%;opacity:0;visibility:hidden;pointer-events:none;padding-bottom:.35rem;transition:opacity .32s,transform .32s,visibility .32s;position:absolute;bottom:calc(100% - 1px);right:0;transform:translateY(8px)}.palette.is-open .palette-pop{opacity:1;visibility:visible;pointer-events:auto;transform:translateY(0)}.palette-list{border:1px solid var(--stroke);background:var(--paper);min-width:8.75rem;box-shadow:3px 3px 0 var(--shadow);flex-direction:column;gap:.1rem;padding:.3rem;display:flex}.palette-choice{white-space:nowrap;width:100%;color:var(--text);cursor:pointer;letter-spacing:.08em;text-transform:uppercase;text-align:left;background:0 0;border:0;align-items:center;gap:.45rem;padding:.28rem .4rem;font-family:IBM Plex Mono,ui-monospace,monospace;font-size:.72rem;font-weight:500;display:flex}.palette-choice:hover,.palette-choice[aria-checked=true]{color:var(--accent)}.swatch{border:1px solid var(--swatch-stroke);grid-template-rows:1fr 1fr 3px;width:100%;height:100%;display:grid}.palette-choice .swatch{flex:none;width:.95rem;height:.95rem}.swatch span:first-child{background:var(--swatch-dust)}.swatch span:nth-child(2){background:var(--swatch-card)}.swatch span:nth-child(3){background:var(--swatch-accent)}.swatch-ash{--swatch-dust:#d4dadc;--swatch-card:#eef1f2;--swatch-accent:#24566a;--swatch-stroke:#1c2428}.swatch-linen{--swatch-dust:#e3d6c4;--swatch-card:#f3ebe0;--swatch-accent:#6b4a2e;--swatch-stroke:#2b241c}.swatch-graphite{--swatch-dust:#1c1e21;--swatch-card:#3c4146;--swatch-accent:#f0e2c8;--swatch-stroke:#d9d3c8}.swatch-marble{--swatch-dust:#e4e1dc;--swatch-card:#fbfaf7;--swatch-accent:#1a564c;--swatch-stroke:#243038}.langs{view-transition-name:langs;gap:.35rem}::view-transition-old(root){animation-duration:.16s;animation-timing-function:ease-out}::view-transition-new(root){animation-duration:.16s;animation-timing-function:ease-out}.langs button{border:1px solid var(--stroke);color:var(--text);cursor:pointer;background:0 0;padding:.35rem .55rem}.langs button[aria-pressed=true]{background:var(--stamp);color:var(--on-stamp)}.langs button:focus-visible{outline:1.5px solid var(--accent);outline-offset:2px}.identity h1{letter-spacing:-.05em;flex-direction:column;font-family:Fraunces,Georgia,serif;font-size:clamp(3.2rem,8vw,6.2rem);font-weight:640;line-height:.84;display:flex}.role{margin-top:1rem}.motto{background:var(--paper);max-width:34rem;color:var(--text);border:1px solid var(--stroke);text-align:left;margin:1.15rem 0 0 auto;padding:.9rem 1rem;font-family:Fraunces,Georgia,serif;font-size:1.15rem;line-height:1.4}.menu{border:0;flex-direction:column;grid-area:2/1;align-self:end;align-items:flex-start;gap:.45rem;margin:0;padding:0}.menu button{color:var(--text);cursor:pointer;text-align:left;letter-spacing:-.02em;background:0 0;border:0;padding:.15rem 0 .28rem;font-family:Fraunces,Georgia,serif;font-size:1.35rem;font-weight:560;line-height:1.15;position:relative}.menu button:after{content:"";background:var(--accent);width:1.15rem;height:1.5px;transition:width .32s;position:absolute;bottom:0;left:0}.menu button:hover,.menu button[aria-pressed=true],.menu button:focus-visible{color:var(--accent)}.menu button:hover:after,.menu button[aria-pressed=true]:after,.menu button:focus-visible:after{width:100%}.menu button:focus-visible{outline:none}.sheet-panel{grid-template-rows:0fr;transition:grid-template-rows .42s;display:grid}.sheet-panel.open{grid-template-rows:1fr}.sheet-panel-inner{min-height:0;overflow:hidden}.sheet{border:1px solid var(--stroke);background:var(--paper);opacity:0;margin-top:1.75rem;padding:1.25rem 1.3rem 1.4rem;transition:opacity .42s,transform .42s;transform:translateY(8px)}.sheet-panel.open .sheet{opacity:1;transform:none}.sheet>h2{margin-bottom:.85rem}.block{margin-top:1.6rem}.sheet>.block:first-child{margin-top:0}#experience{color:var(--text-soft)}#experience .block h2,#experience .stack-tech h2,#experience .stack-langs h2,#experience .stop{color:var(--text)}.block h2,.block h3{margin-bottom:.45rem}.subhead{color:var(--text-muted);margin-top:1.25rem;margin-bottom:.85rem}.about p{max-width:38rem;margin:0 0 .85rem;font-size:1.15rem;line-height:1.45}.about p:last-child{margin-bottom:0}.about .accent{color:var(--accent);background:var(--accent-bg);-webkit-box-decoration-break:clone;box-decoration-break:clone;padding:.04em .18em;font-weight:600}.plain{padding:0;list-style:none}.plain li{border-top:1px solid var(--line);padding:.7rem 0;line-height:1.45}.entry-list{padding:0;list-style:none}.entry-list>*{border-top:1px solid var(--line);padding:.5rem 0}.entry-head{justify-content:space-between;align-items:baseline;gap:.85rem;display:flex}.entry-head strong{letter-spacing:-.02em;min-width:0;color:var(--text-soft);font-family:Fraunces,Georgia,serif;font-size:1.05rem;font-weight:560;line-height:1.2}.entry-meta{letter-spacing:.12em;color:var(--text-muted);flex-shrink:0;font-family:IBM Plex Mono,ui-monospace,monospace;font-size:.72rem;font-weight:500}.entry-body{color:var(--text-muted);margin-top:.22rem;font-size:.92rem;font-weight:400;line-height:1.4}.chips{flex-wrap:wrap;gap:.28rem;margin:.28rem 0 0;padding:0;list-style:none;display:flex}.chips li{border:1px solid var(--stroke);padding:.18rem .42rem;font-family:IBM Plex Mono,ui-monospace,monospace;font-size:.72rem;font-weight:400;line-height:1.3}.stack-board{grid-template-columns:minmax(0,1fr) 12.5rem;align-items:start;column-gap:1.5rem;display:grid}.stack-tech{min-width:0}.stack-langs{border-left:1px solid var(--line);min-width:0;padding-left:1.25rem}.stack-tech h2,.stack-langs h2{margin:0 0 .45rem}.tray{border:1px solid var(--stroke);background:var(--tray)}.tray-handle{background:var(--stamp);width:100%;color:var(--on-stamp);cursor:pointer;text-align:left;border:0;justify-content:space-between;gap:1rem;padding:.95rem 1rem;display:flex}.tray-panel{grid-template-rows:0fr;transition:grid-template-rows .28s;display:grid}.tray.open .tray-panel{grid-template-rows:1fr}.tray-panel-inner{overflow:hidden}.projects{margin:0;padding:.85rem 1rem .4rem;list-style:none}.stop{background:0 0;grid-template-columns:2.5rem 1fr;column-gap:.85rem;display:grid;position:relative}.rail{grid-area:1/1/-1;align-self:start}.logo{display:block}.path{background:var(--stroke);pointer-events:none;width:2px;margin-left:-1px;position:absolute;top:2.5rem;bottom:0;left:1.25rem}.project-handle{width:100%;min-width:0;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex-direction:column;grid-column:2;align-items:stretch;padding:0;display:flex}.project-static{cursor:default}.project-handle:focus-visible{outline:none}.stop-head{color:var(--text);flex-wrap:wrap;align-items:baseline;transition:color .22s;display:flex}.stop:not(.static) .project-handle:hover .stop-head,.project-handle:focus-visible .stop-head{color:var(--accent)}.project-handle strong,.city{letter-spacing:-.02em;text-transform:none;color:inherit;overflow-wrap:anywhere;font-family:Fraunces,Georgia,serif;font-size:1.05rem;font-style:normal;font-weight:560;line-height:1.2}.city:before{content:", "}.stop-meta{color:var(--accent);margin-top:.28rem;font-size:.78rem;line-height:1.35}.project-handle em{box-sizing:border-box;border:0;border-top:1px solid var(--line);min-height:0;color:var(--text-soft);overflow-wrap:anywhere;background:0 0;margin-top:.15rem;margin-bottom:.85rem;padding:.28rem 0 0;font-size:.92rem;font-style:normal;line-height:1.4;display:block}.project-panel{grid-column:2;grid-template-rows:0fr;transition:grid-template-rows .4s;display:grid}.project-panel.open{grid-template-rows:1fr}.project-panel-inner{min-height:0;overflow:hidden}.project-body{opacity:0;background:0 0;gap:1.25rem;margin:.45rem 0 .85rem;padding:0;transition:opacity .35s;display:grid}.project-body.split{grid-template-columns:1fr 1fr;align-items:start;column-gap:1.5rem}.project-body.split>section+section{border-left:1px solid var(--line);padding-left:1.25rem}.project-panel.open .project-body{opacity:1}@keyframes lang-in{0%{opacity:0}to{opacity:1}}@supports not selector(::view-transition-old(root)){.card[data-lang-swap] .identity h1,.card[data-lang-swap] .role,.card[data-lang-swap] .motto,.card[data-lang-swap] .menu,.card[data-lang-swap] .sheet{animation:.16s ease-out lang-in}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.palette.is-open .palette-pop{transform:none}.project-panel,.project-body,.palette-pop,.menu button:after,.sheet-panel,.sheet,.stop-head,.tray-panel,.board-row{transition:none}.card[data-lang-swap] .identity h1,.card[data-lang-swap] .role,.card[data-lang-swap] .motto,.card[data-lang-swap] .menu,.card[data-lang-swap] .sheet{animation:none}::view-transition-group(*){animation:none!important}::view-transition-old(*){animation:none!important}::view-transition-new(*){animation:none!important}}.project-body h3{letter-spacing:-.02em;text-transform:none;color:var(--accent);margin:0 0 .28rem;font-family:Fraunces,Georgia,serif;font-size:1.05rem;font-weight:560;line-height:1.2}.project-body ul{margin:0;padding:0;list-style:none}.project-body li{border-top:1px solid var(--line);margin-top:0;padding:.35rem 0;font-size:.92rem;line-height:1.4}.contact{gap:1.5rem;display:grid}.roles{padding:0;list-style:none}.board{flex-direction:column;min-width:0;display:flex}.board-row{border-top:1px solid var(--line);color:var(--text);letter-spacing:0;overflow-wrap:anywhere;grid-template-columns:7.5rem minmax(0,1fr);align-items:baseline;column-gap:.85rem;padding:.5rem 0;font-family:Manrope,Segoe UI,sans-serif;font-size:.92rem;font-weight:400;line-height:1.4;text-decoration:none;display:grid}.board-label{color:var(--text-muted);letter-spacing:.12em;text-transform:uppercase;font-family:IBM Plex Mono,ui-monospace,monospace;font-size:.72rem;font-weight:500}.board-value{min-width:0;font-weight:400;transition:color .22s,font-weight .22s}.board-row:hover .board-value,.board-row:focus-visible .board-value{color:var(--accent);font-weight:600}.board-row:focus-visible{outline:none}@media (width<=520px){.board-row{grid-template-columns:1fr;row-gap:.15rem}}.roles{flex-wrap:wrap;gap:.45rem;margin-top:.7rem;display:flex}.roles li{border:1px solid var(--accent);color:var(--accent);padding:.18rem .42rem;font-family:IBM Plex Mono,ui-monospace,monospace;font-size:.72rem;font-weight:400;line-height:1.3}.tray-handle:hover,.tray-handle:focus-visible{color:var(--accent-wash)}.tray-handle:focus-visible{outline:1.5px solid var(--accent-wash);outline-offset:-5px}@media (width<=900px){.edge{letter-spacing:.14em;font-size:.56rem}.page{padding:2.4rem calc(2.4rem + 12px) calc(2.4rem + 20px)}}@media (width<=720px){.stage{grid-template-rows:auto;grid-template-columns:1fr}.mark,.menu,.identity{grid-column:1}.mark{grid-row:1}.identity{grid-row:2;place-self:end stretch;width:100%;min-width:0;max-width:100%;container-type:inline-size}.identity h1,.motto,.role{width:100%;max-width:100%}.identity h1{font-size:clamp(1.45rem,10.5cqi,3.2rem)}.identity h1 span{min-width:0;max-width:100%}.menu{grid-row:3}.card{box-shadow:6px 6px 0 var(--shadow)}.tray-handle{flex-direction:column}.stack-board{grid-template-columns:1fr;row-gap:1.25rem}.stack-langs{border-left:0;border-top:1px solid var(--line);padding-top:.85rem;padding-left:0}.project-body.split{grid-template-columns:1fr}.project-body.split>section+section{border-left:0;border-top:1px solid var(--line);padding-top:.85rem;padding-left:0}}@media (width<=520px){.page{padding:1.75rem calc(.85rem + 8px) calc(2.4rem + 20px)}.edge-left,.edge-right{width:.85rem}.palette{bottom:2.95rem;right:1.4rem}.card{padding:1rem}.stage{gap:1rem}.sheet{margin-top:1.15rem;padding:.9rem .85rem 1rem}.projects{padding:.75rem .7rem .35rem}}@media print{.page{background:#fff;padding:0}.langs,.palette,.edge{display:none}.card,.tray-panel{box-shadow:none;grid-template-rows:1fr;margin:0}}
