:root{--paper: #fdfcf8;--page-bg: #ebe7de;--ink: #26241f;--ink-soft: #5b5750;--ink-muted: #918b80;--rule: rgba(38, 36, 31, .11);--rule-strong: rgba(38, 36, 31, .22);--accent: #4f6350;--accent-deep: #3c4d3d;--on-accent: #fdfcf8;--second: #b4653f;--good: #2f6b4f;--font-display: "Literata", Georgia, "Times New Roman", serif;--font-serif: "Literata", Georgia, "Times New Roman", serif;--font-sans: "Space Grotesk", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--pad: 9px;--measure-pad: clamp(20px, 6vw, 52px);--corner: clamp(17px, 2.2vw, 24px);color-scheme:light}@media(min-width:46rem){:root{--pad: 44px}}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--page-bg);color:var(--ink);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}img{max-width:100%;height:auto}h1,h2,h3,p,ul,ol,dl,dd,figure,blockquote{margin:0}a{color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:2px}.page{display:flex;justify-content:center;padding:var(--pad);min-height:100dvh}.sheet{position:relative;width:100%;max-width:38rem;min-height:calc(100dvh - 2 * var(--pad));padding:clamp(30px,7vw,66px) var(--measure-pad) clamp(34px,7vw,58px);background:var(--paper);box-shadow:0 1px 2px #22201c0d,0 30px 60px -34px #22201c66}.page--letter{height:100dvh;min-height:0;overflow:hidden}.page--letter .sheet{height:100%;min-height:0;padding:0;overflow:hidden}.sheet--enter{animation:sheetIn .48s cubic-bezier(.2,.8,.3,1) both}@keyframes sheetIn{0%{opacity:0;transform:translateY(14px) scale(.992)}}.reveal{animation:revealIn .52s cubic-bezier(.2,.8,.3,1) both;animation-delay:calc(var(--i, 0) * 55ms)}@keyframes revealIn{0%{opacity:0;transform:translateY(10px)}}.btn{display:inline-flex;align-items:center;gap:10px;padding:12px 18px;border:1px solid transparent;border-radius:3px;font-family:var(--font-sans);font-size:12px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;line-height:1;text-decoration:none;white-space:nowrap;cursor:pointer;transition:background-color .16s ease,border-color .16s ease,color .16s ease,transform .16s ease}.btn--primary{background:var(--accent);color:var(--on-accent)}.btn--primary:hover{background:var(--accent-deep);transform:translateY(-1px)}.btn--primary[data-state=done]{background:var(--good)}.btn--primary[data-state=error]{background:var(--second)}.btn--ghost{color:var(--ink-soft);border-color:var(--rule-strong)}.btn--ghost:hover{border-color:var(--accent);color:var(--accent);transform:translateY(-1px)}.opening{display:grid;grid-template-rows:auto 1fr;place-items:center;cursor:pointer;animation:sheetIn .48s cubic-bezier(.2,.8,.3,1) both}.opening__bar{justify-self:stretch;display:flex;align-items:baseline;justify-content:space-between;gap:14px;padding:var(--corner) var(--corner) 0;font-family:var(--font-sans);font-size:10.5px;font-weight:500;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-muted)}.opening__date{white-space:nowrap}.opening--leaving{animation:openingOut .34s ease-in both}.opening__stage{display:flex;flex-direction:column;align-items:flex-start;gap:clamp(26px,5vw,38px);padding:var(--measure-pad)}.opening__art{align-self:center;width:145px;max-width:100%;animation:fadeUp .62s 80ms ease-out both}.opening__art img,.opening__art-reserved{display:block;width:100%;aspect-ratio:3 / 4;object-fit:cover;border-radius:2px}.opening__art-reserved{display:grid;place-items:center;background:#ded9cf;font-size:10px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-muted)}.opening__steps{display:flex;flex-direction:column;gap:11px;padding:0;list-style:none}.opening__step{display:flex;align-items:center;gap:12px;font-size:12.5px;letter-spacing:.03em;color:var(--ink-muted);transition:opacity .3s ease,color .3s ease}.opening__step[data-state=waiting]{opacity:0}.opening__step[data-state=active]{color:var(--ink)}.opening__step-mark{width:7px;height:7px;flex:0 0 auto;border:1px solid var(--accent);transition:background-color .3s ease,opacity .3s ease}.opening__step[data-state=done] .opening__step-mark{background:var(--accent);opacity:.45}.opening__step[data-state=active] .opening__step-mark{background:var(--accent);animation:pulse 1.4s ease-in-out infinite}.opening__dots i{font-style:normal;opacity:0}.opening__step[data-state=active] .opening__dots i:first-child{opacity:1}.opening__step[data-state=active] .opening__dots i:nth-child(2){animation:ellipsis2 1.5s steps(1,end) infinite}.opening__step[data-state=active] .opening__dots i:nth-child(3){animation:ellipsis3 1.5s steps(1,end) infinite}@keyframes ellipsis2{0%{opacity:0}33.3%{opacity:1}}@keyframes ellipsis3{0%{opacity:0}66.6%{opacity:1}}@keyframes openingOut{to{opacity:0;transform:translateY(-6px)}}@keyframes pulse{50%{opacity:.35}}@keyframes fadeUp{0%{opacity:0;transform:translateY(8px)}}.letter{display:flex;flex-direction:column}.letter__bar{display:flex;align-items:baseline;justify-content:space-between;gap:16px;flex:0 0 auto;padding:var(--corner) var(--corner) calc(var(--corner) - 2px);border-bottom:1px solid var(--rule)}.letter__bar-title{font-family:var(--font-sans);font-size:10.5px;font-weight:500;letter-spacing:.16em;text-transform:uppercase;line-height:1.2;color:var(--ink-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.letter__scroll{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:clamp(20px,4vw,34px) var(--measure-pad) clamp(24px,5vw,40px)}.letter__sender,.letter__to{display:flex;flex-direction:column;font-family:var(--font-serif);font-size:13px;font-style:normal;line-height:1.6;color:var(--ink-soft)}.letter__sender{align-items:flex-end;text-align:right}.letter__sender-name,.letter__to-name{margin-bottom:3px;font-family:var(--font-sans);font-size:11px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--ink)}.letter__to{margin-top:34px}.letter__dateline{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:10px;margin-top:26px;font-family:var(--font-serif);font-style:italic;font-size:13px;color:var(--ink-soft)}.letter__re{margin-top:26px;font-size:11px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-muted)}.letter__salutation{margin-top:26px;font-family:var(--font-serif);font-size:17px}.letter__body{margin-top:18px;font-family:var(--font-serif);font-size:16px;line-height:1.72}.letter__lead,.letter__p{margin-bottom:1.1em;text-wrap:pretty}.letter__lead{font-size:17px}.letter__h{margin:2em 0 .8em;font-family:var(--font-sans);font-size:11px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-soft)}.letter__list{margin:0 0 1.2em;padding-left:1.15em;list-style:none}.letter__list li{position:relative;margin-bottom:.45em}.letter__list li:before{content:"—";position:absolute;left:-1.15em;color:var(--second)}ol.letter__list{counter-reset:letter-list}ol.letter__list li:before{counter-increment:letter-list;content:counter(letter-list) ".";font-size:.85em}.letter__quote{margin:1.5em 0;padding-left:18px;border-left:2px solid rgba(138,51,36,.4);font-style:italic}.letter__quote cite{display:block;margin-top:.4em;font-size:13px;font-style:normal;color:var(--ink-muted)}.letter__aside{margin:1.4em 0;font-size:14px;line-height:1.7;color:var(--ink-soft)}.letter__figure{margin:1.9em 0;text-align:center}.letter__photo{position:relative;overflow:hidden;max-width:min(100%,300px);margin:0 auto;background:var(--rule)}.letter__figure--right .letter__photo,.letter__figure--left .letter__photo{max-width:100%}.letter__photo:before{content:"";position:absolute;inset:0;background-image:var(--placeholder);background-size:cover;background-position:center;filter:blur(12px);transform:scale(1.15);transition:opacity .42s ease}.letter__photo[data-loaded=true]:before{opacity:0}.letter__figure .letter__photo img{position:relative;display:block;width:100%;height:auto;opacity:0;transition:opacity .42s ease}.letter__photo[data-loaded=true] img{opacity:1}.letter__figure figcaption{margin-top:.7em;font-family:var(--font-serif);font-size:13px;font-style:italic;line-height:1.5;color:var(--ink-muted)}.letter__reserved{display:grid;place-items:center;width:min(250px,68%);margin:0 auto;background:#d9d5cd;font-family:var(--font-sans);font-size:10px;font-weight:500;letter-spacing:.18em;text-transform:uppercase;color:#1f222066}.letter__reserved--portrait{aspect-ratio:4 / 5}.letter__reserved--landscape{aspect-ratio:3 / 2;width:min(420px,100%)}.letter__reserved--square{aspect-ratio:1}.letter__figure--photo img,.letter__figure--photo .letter__reserved{border:10px solid #fff;outline:1px solid var(--rule);box-shadow:0 8px 22px -14px #1f222080}@media(min-width:32rem){.letter__figure--right,.letter__figure--left{width:42%;max-width:224px;text-align:left}.letter__figure--right{float:right;margin:.4em 0 1.4em 2em}.letter__figure--left{float:left;margin:.4em 2em 1.4em 0}.letter__figure--right img,.letter__figure--left img,.letter__figure--right .letter__reserved,.letter__figure--left .letter__reserved{width:100%}}.letter__body:after{content:"";display:block;clear:both}.letter__rule{width:55%;height:1px;margin:2.2em auto;border:0;background:linear-gradient(90deg,transparent,var(--rule-strong),transparent)}.letter__body code{padding:.12em .36em;border-radius:3px;background:#1f22200e;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.84em}.letter__body a{color:var(--accent);text-decoration-color:#2a3a5759;text-underline-offset:3px}.letter__signoff{clear:both;margin-top:2.4em;font-family:var(--font-serif);text-align:right}.letter__valediction{font-size:16px}.letter__name{margin-top:.35em;font-family:var(--font-display);font-size:20px;font-weight:400;line-height:1.2}.letter__ps{margin-top:1.7em;font-size:13.5px;line-height:1.7;text-align:left;color:var(--ink-soft)}.letter__ps-mark{margin-right:.5em;font-family:var(--font-sans);font-size:10.5px;font-weight:600;letter-spacing:.12em;color:var(--ink)}.letter__foot{display:flex;align-items:center;justify-content:space-between;gap:14px;flex:0 0 auto;padding:var(--corner);border-top:1px solid var(--rule)}.letter__folio{font-family:var(--font-sans);font-size:10.5px;font-weight:500;letter-spacing:.16em;text-transform:uppercase;white-space:nowrap;color:var(--ink-muted)}.cv-sheet{padding:0}.cv-sheet__nav{display:flex;gap:12px;justify-content:space-between;padding:var(--corner);border-bottom:1px solid var(--rule)}.cv-sheet__body{padding:clamp(24px,5vw,40px) var(--measure-pad) clamp(30px,6vw,52px)}.cv-sheet__nav .btn{flex:0 1 12rem;justify-content:center;gap:8px;padding:10px 14px;font-size:10.5px;letter-spacing:.09em}.cv__head{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px 24px}.cv__id{flex:1 1 auto;min-width:0}.cv__name{font-family:var(--font-display);font-size:clamp(27px,5.8vw,34px);font-weight:700;letter-spacing:-.02em;line-height:1.1}.cv__headline{margin-top:4px;font-size:13.5px;color:var(--ink-soft)}.cv__details{flex:0 0 auto;margin-left:auto;display:flex;flex-direction:column;align-items:flex-end;padding-top:5px;gap:1px;font-size:12px;font-style:normal;line-height:1.55;text-align:right;color:var(--ink-soft)}.cv__links{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px}.cv__details a{text-decoration:none;border-bottom:1px solid var(--rule-strong)}.cv__details a:hover{color:var(--accent)}.cv__summary{margin-top:20px;font-family:var(--font-serif);font-size:15px;line-height:1.68}.cv__summary p+p,.cv__rolesummary p+p{margin-top:.55em}.cv__section{margin-top:34px}.cv__h{padding-bottom:7px;margin-bottom:18px;border-bottom:1px solid var(--rule);font-family:var(--font-sans);font-size:11px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-soft)}.cv__role{margin-bottom:22px}.cv__role:last-child{margin-bottom:0}.cv__rolehead{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:2px 14px}.cv__roletitle{font-size:14.5px;font-weight:600;line-height:1.35}.cv__rolecompany{display:block;font-weight:400;color:var(--ink-soft)}.cv__period{font-size:12px;color:var(--ink-muted);white-space:nowrap}.cv__place:before{content:"·";margin:0 .4em}.cv__rolesummary{margin:6px 0 7px;font-size:13.5px;line-height:1.6;color:var(--ink-soft)}.cv__highlights{padding-left:1.05em;list-style:none;font-size:13.5px;line-height:1.62}.cv__highlights li{position:relative;margin-bottom:4px}.cv__highlights li:before{content:"–";position:absolute;left:-1.05em;color:var(--ink-muted)}.cv__techintro{font-family:var(--font-serif);font-size:14px;line-height:1.6;color:var(--ink-soft)}.cv__techlist{margin-top:8px;font-size:13.5px;line-height:1.7}.cv__skills{display:grid;gap:12px}.cv__skillgroup{display:grid;gap:2px 18px}.cv__skillgroup dt{font-size:11px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-muted)}.cv__skillgroup dd{font-size:13.5px;line-height:1.6}@media(min-width:34rem){.cv__skillgroup{grid-template-columns:11rem 1fr;align-items:baseline}.cv__skillgroup dt{padding-top:2px}}.cv__edu{margin-bottom:12px}.cv__degree{font-size:14px;font-weight:600;line-height:1.35}.cv__school{display:block;font-weight:400;color:var(--ink-soft)}.cv__note{margin-top:3px;font-size:12.5px;font-style:italic;color:var(--ink-soft)}.notfound{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;text-align:center}.notfound__code{font-family:var(--font-serif);font-size:40px;font-weight:600;color:var(--ink-muted)}.notfound__msg{font-family:var(--font-serif);font-size:16px;color:var(--ink-soft)}.notfound__msg code{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.85em}@media print{:root{--pad: 0px}body{background:#fff}.page,.page--letter{display:block;height:auto;min-height:0;padding:0;overflow:visible}.sheet,.page--letter .sheet{max-width:none;height:auto;min-height:0;padding:0;border:0;box-shadow:none;animation:none;overflow:visible}.letter__scroll{padding:0;overflow:visible}.letter__bar{padding:0 0 12px}.opening,.cv-sheet__nav,.letter__foot{display:none}.reveal{animation:none}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-delay:0ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}
