:root{--paper:#e8e1d0;--paper-2:#ddd3b8;--paper-edge:#c8bc9c;--ink:#1a1a1a;--ink-soft:#2c2620;--ink-mute:#5a4f3f;--rule:#1a1a1a;--accent:#7d5a3a;--stamp:#b32a1f;--coffee:#6b4423;--gold:#a08858;--serif:var(--font-dm-serif,"DM Serif Display"),"Playfair Display",Georgia,serif;--serif-body:var(--font-crimson,"Crimson Pro"),"EB Garamond",Georgia,serif;--cond:var(--font-anton,"Anton"),"Oswald",Impact,sans-serif;--cond-2:var(--font-oswald,"Oswald"),Impact,sans-serif;--mono:var(--font-mono,"JetBrains Mono"),"Courier New",monospace;--texture-strength:0.55;--anim-speed:1;--nav-safe-bottom:112px}.night{--paper:#1a1814;--paper-2:#211e18;--paper-edge:#0f0d0a;--ink:#e8e1d0;--ink-soft:#d0c5a7;--ink-mute:#8a7e62;--rule:#e8e1d0;--accent:#c8a370;--stamp:#e85a4f;--coffee:#3a2818;--gold:#c8a370}*{box-sizing:border-box;margin:0;padding:0}body,html{height:100%;background:var(--paper);color:var(--ink);font-family:var(--serif-body);font-size:16px;overflow:hidden}body{position:relative;overscroll-behavior:none}::selection{background:var(--stamp);color:var(--paper)}.paper-texture{position:absolute;inset:0;pointer-events:none;z-index:1;opacity:var(--texture-strength);background-image:radial-gradient(circle at 13% 27%,rgba(107,68,35,.18) .5px,transparent 1.4px),radial-gradient(circle at 67% 88%,rgba(107,68,35,.14) .5px,transparent 1.4px),radial-gradient(circle at 91% 14%,rgba(107,68,35,.16) .5px,transparent 1.4px),radial-gradient(circle at 33% 64%,rgba(0,0,0,.1) .4px,transparent 1.2px),radial-gradient(circle at 8% 81%,rgba(107,68,35,.12) .4px,transparent 1.2px),radial-gradient(ellipse 70% 40% at 50% 20%,rgba(160,136,88,.1),transparent 70%),radial-gradient(ellipse 50% 35% at 80% 90%,rgba(107,68,35,.08),transparent 70%);background-size:7px 7px,11px 11px,13px 13px,5px 5px,9px 9px,100% 100%,100% 100%;mix-blend-mode:multiply}.night .paper-texture{mix-blend-mode:screen;opacity:calc(var(--texture-strength) * .6)}.paper-fold{position:absolute;top:0;bottom:0;left:50%;width:1px;background:linear-gradient(180deg,transparent,rgba(107,68,35,.1) 20%,rgba(107,68,35,.1) 80%,transparent);pointer-events:none;z-index:2}#root{position:fixed;inset:0;background:var(--paper)}.stage{position:relative;width:100%;height:100%;overflow:hidden}.pages{display:flex;flex-direction:row;height:100%;width:max-content;will-change:transform;transition:transform calc(.55s / var(--anim-speed)) cubic-bezier(.86,0,.07,1)}.page{width:100vw;height:100vh;padding:22px max(44px,calc((100vw - 1280px) / 2)) var(--nav-safe-bottom);flex-shrink:0;overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain;scroll-padding-bottom:var(--nav-safe-bottom)}.masthead,.page{position:relative}.masthead{display:grid;grid-template-columns:1fr auto 1fr;align-items:end;grid-gap:24px;gap:24px;padding-bottom:8px;border-bottom:3px solid var(--ink);margin-bottom:6px}.masthead:after{content:"";position:absolute;left:0;right:0;bottom:-7px;height:1px;background:var(--ink)}.mast-left,.mast-right{font-family:var(--mono);font-size:10.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-soft);line-height:1.4}.mast-right{text-align:right}.mast-left strong,.mast-right strong{font-weight:700}.mast-title{font-family:var(--serif);font-size:clamp(48px,6vw,78px);line-height:.88;letter-spacing:-.02em;text-align:center;font-weight:400;font-style:italic;white-space:nowrap}.mast-title .reg{font-size:clamp(10px,1vw,14px);letter-spacing:.4em;display:block;margin-top:6px;font-style:normal;text-indent:.4em;white-space:normal}.mast-strap,.mast-title .reg{font-family:var(--mono);color:var(--ink-soft)}.mast-strap{display:flex;align-items:center;justify-content:space-between;flex-wrap:nowrap;font-size:clamp(8.5px,.7vw,10.5px);letter-spacing:.06em;text-transform:uppercase;padding:4px 0;border-bottom:1px solid var(--ink);white-space:nowrap;overflow:hidden}.mast-strap>span{display:inline-block;padding:0 6px}.mast-strap>span+span{border-left:1px solid var(--ink-mute)}.kicker{font-family:var(--mono);font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--stamp);font-weight:700;margin-bottom:4px}.headline-xl{font-size:clamp(70px,9.5vw,180px);line-height:.82;letter-spacing:-.02em;color:var(--ink)}.headline-l,.headline-xl{font-family:var(--cond);text-transform:uppercase;font-weight:400}.headline-l{font-size:clamp(40px,5vw,84px);line-height:.88;letter-spacing:-.01em}.headline-m{font-family:var(--cond);font-size:clamp(28px,3vw,42px);line-height:.94;text-transform:uppercase;letter-spacing:0}.deck{font-family:var(--serif);font-size:clamp(20px,1.8vw,28px);line-height:1.15;font-style:italic;font-weight:400;color:var(--ink-soft)}.byline{font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute)}.body-text{font-family:var(--serif-body);font-size:14.5px;line-height:1.45;text-align:justify;-webkit-hyphens:auto;hyphens:auto;color:var(--ink)}.body-text p+p{text-indent:1.2em}.drop-cap:first-letter{font-family:var(--cond);font-size:5.6em;line-height:.82;float:left;padding:6px 8px 0 0;font-weight:400;color:var(--ink);text-transform:uppercase}.cols-2{column-count:2;column-gap:24px}.cols-2,.cols-3{column-rule:1px solid var(--ink-mute)}.cols-3{column-count:3;column-gap:20px}.cols-4{column-count:4;column-gap:18px;column-rule:1px solid var(--ink-mute)}.rule-thick{border-top:4px double var(--ink);padding-top:6px}.rule-thin{border-top:1px solid var(--ink);padding-top:4px}.stamp{display:inline-block;padding:6px 14px 5px;border:3px solid var(--stamp);color:var(--stamp);font-family:var(--cond-2);font-weight:700;text-transform:uppercase;letter-spacing:.08em;font-size:14px;transform:rotate(-7deg);background:transparent;opacity:.86;position:relative;filter:contrast(1.05)}.stamp:before{content:"";position:absolute;inset:-1px;border:1px solid var(--stamp);opacity:.4;pointer-events:none}.stamp-round{width:110px;height:110px;border:3px solid var(--stamp);border-radius:50%;display:flex;align-items:center;justify-content:center;text-align:center;font-family:var(--cond-2);font-weight:700;text-transform:uppercase;color:var(--stamp);font-size:13px;letter-spacing:.06em;line-height:1;transform:rotate(-12deg);padding:8px;background:transparent}.coffee-stain{position:absolute;width:200px;height:200px;pointer-events:none;opacity:.32;mix-blend-mode:multiply;background:radial-gradient(circle at 50% 50%,transparent 38%,var(--coffee) 41%,transparent 44%),radial-gradient(circle at 50% 50%,transparent 50%,rgba(107,68,35,.6) 53%,transparent 56%),radial-gradient(ellipse 60% 50% at 40% 60%,rgba(107,68,35,.4),transparent 70%),radial-gradient(ellipse 40% 35% at 70% 35%,rgba(107,68,35,.3),transparent 70%);filter:blur(.3px)}.night .coffee-stain{mix-blend-mode:screen;opacity:.18}.halftone{background-color:var(--paper-2);background-image:radial-gradient(circle,var(--ink) 22%,transparent 23%);background-size:5px 5px;position:relative;overflow:hidden}.halftone:after{content:attr(data-caption);position:absolute;left:0;right:0;bottom:0;padding:6px 10px;font-family:var(--mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.12em;color:var(--paper);background:rgba(26,26,26,.92)}.halftone-gradient{background:radial-gradient(circle at 50% 35%,var(--paper-2) 0,var(--ink-soft) 90%),radial-gradient(circle,transparent 30%,hsla(43,34%,86%,.6) 33%);background-size:100% 100%,6px 6px}.nav-strip{position:fixed;bottom:0;left:0;right:0;height:48px;padding:0 24px;display:flex;align-items:center;justify-content:space-between;background:var(--paper);border-top:3px solid var(--ink);font-family:var(--mono);font-size:11px;text-transform:uppercase;letter-spacing:.12em;z-index:50}.nav-strip:before{content:"";position:absolute;left:0;right:0;top:-7px;height:1px;background:var(--ink)}.nav-pages{gap:0}.nav-page,.nav-pages{display:flex;align-items:center}.nav-page{padding:0 14px;height:32px;color:var(--ink-mute);cursor:pointer;background:transparent;border:none;font-family:var(--mono);font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;position:relative;transition:color .15s}.nav-page:hover{color:var(--ink)}.nav-page.active{color:var(--ink);font-weight:700}.nav-page.active:after{content:"";position:absolute;left:8px;right:8px;bottom:4px;height:2px;background:var(--stamp)}.nav-page .num{font-size:9px;opacity:.5;margin-right:6px}.nav-arrow{width:36px;height:32px;display:flex;align-items:center;justify-content:center;background:var(--ink);color:var(--paper);border:none;cursor:pointer;font-family:var(--cond-2);font-size:18px;transition:background .15s}.nav-arrow:hover{background:var(--stamp)}.nav-arrow:disabled{opacity:.3;cursor:not-allowed}.nav-edition{display:flex;align-items:center;gap:16px;color:var(--ink-soft)}.glitch-overlay{position:fixed;inset:0;pointer-events:none;z-index:999;opacity:0}.glitch-overlay.firing{animation:glitchFire calc(.55s / var(--anim-speed)) steps(6) forwards}@keyframes glitchFire{0%{opacity:0;transform:translateX(0)}15%{opacity:1;transform:translateX(-8px);filter:hue-rotate(20deg)}30%{opacity:1;transform:translateX(12px);filter:hue-rotate(-15deg)}50%{opacity:.7;transform:translateX(-4px)}75%{opacity:.4;transform:translateX(2px)}to{opacity:0;transform:translateX(0)}}.tear-overlay{position:fixed;inset:0;pointer-events:none;z-index:998;background:var(--paper);-webkit-clip-path:polygon(0 0,0 100%,0 100%,0 0);clip-path:polygon(0 0,0 100%,0 100%,0 0);opacity:0}.tear-overlay.firing{animation:tearFire calc(.55s / var(--anim-speed)) ease-in-out forwards}@keyframes tearFire{0%{opacity:0;-webkit-clip-path:polygon(0 0,0 0,0 100%,0 100%);clip-path:polygon(0 0,0 0,0 100%,0 100%)}40%{opacity:1;-webkit-clip-path:polygon(0 0,60% 4%,55% 100%,0 100%);clip-path:polygon(0 0,60% 4%,55% 100%,0 100%)}60%{opacity:1;-webkit-clip-path:polygon(40% 0,100% 2%,100% 100%,35% 100%);clip-path:polygon(40% 0,100% 2%,100% 100%,35% 100%)}to{opacity:0;-webkit-clip-path:polygon(100% 0,100% 0,100% 100%,100% 100%);clip-path:polygon(100% 0,100% 0,100% 100%,100% 100%)}}.ad-box{border:3px solid var(--ink);padding:12px 14px;font-family:var(--serif-body);position:relative;background:var(--paper)}.ad-box.ad-double{border-style:double;border-width:6px}.ad-box.ad-bold{border-width:5px}.ad-box .ad-title{font-family:var(--cond);font-size:22px;text-transform:uppercase;line-height:.95;margin-bottom:4px}.ad-box .ad-body{font-size:13px;line-height:1.35}.ad-box .ad-foot{margin-top:8px;font-family:var(--mono);font-size:9px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-mute);border-top:1px dashed var(--ink-mute);padding-top:4px}.proj{display:grid;grid-template-columns:220px 1fr auto;grid-gap:18px;gap:18px;padding:14px 0;border-bottom:1px solid var(--ink);align-items:start}.proj:first-child{border-top:4px double var(--ink);padding-top:14px}.proj-img{height:130px;border:1px solid var(--ink)}.proj-num{font-family:var(--mono);font-size:11px;letter-spacing:.16em;color:var(--ink-mute);margin-bottom:4px}.proj-title{font-family:var(--cond);font-size:38px;line-height:.94;text-transform:uppercase;margin-bottom:4px}.proj-deck{font-family:var(--serif);font-style:italic;font-size:17px;line-height:1.2;color:var(--ink-soft);margin-bottom:8px}.proj-meta{display:flex;gap:14px;font-family:var(--mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-mute)}.article-title-link{color:inherit;text-decoration:none;transition:color .15s,border-color .15s}.article-title-link:hover{color:var(--stamp);border-color:var(--stamp)}.proj-link{font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink);text-decoration:none;border-bottom:1px solid var(--ink);padding-bottom:1px;transition:color .15s,border-color .15s}.proj-link:hover{color:var(--stamp);border-color:var(--stamp)}.proj-tags{display:flex;flex-direction:column;gap:4px;align-items:flex-end;font-family:var(--mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase}.proj-tags .tag{padding:2px 6px;border:1px solid var(--ink)}.stack-grid{display:grid;grid-template-columns:repeat(6,1fr);grid-gap:0;gap:0;border-top:4px double var(--ink);border-left:1px solid var(--ink)}.stack-cell{border-right:1px solid var(--ink);border-bottom:1px solid var(--ink);padding:14px;min-height:110px;display:flex;flex-direction:column;justify-content:space-between;position:relative}.stack-cell .skill{font-family:var(--cond);font-size:22px;line-height:.95;text-transform:uppercase}.stack-cell .level{font-family:var(--mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-mute)}.stack-cell .level-bar{height:6px;background:var(--paper-2);margin-top:6px;position:relative;border:1px solid var(--ink)}.stack-cell .level-bar>i{position:absolute;inset:0 auto 0 0;background:var(--ink);display:block}.timeline{border-top:4px double var(--ink)}.timeline-row{display:grid;grid-template-columns:110px 1fr 280px;grid-gap:24px;gap:24px;padding:14px 0;border-bottom:1px solid var(--ink)}.timeline-row .year{font-family:var(--cond);font-size:48px;line-height:.9}.timeline-row .role{font-family:var(--cond);font-size:26px;text-transform:uppercase;line-height:1;margin-bottom:2px}.timeline-row .company{font-family:var(--serif);font-style:italic;font-size:16px;color:var(--ink-soft);margin-bottom:8px}.timeline-row .desc{font-family:var(--serif-body);font-size:13.5px;line-height:1.4}.timeline-row .side{font-size:10px;letter-spacing:.1em;color:var(--ink-mute);line-height:1.6}.strip-widget,.timeline-row .side{font-family:var(--mono);text-transform:uppercase}.strip-widget{display:grid;grid-template-columns:repeat(4,1fr);border:1px solid var(--ink);font-size:10.5px;letter-spacing:.08em}.strip-widget>div{padding:6px 10px;border-right:1px solid var(--ink);display:flex;gap:6px;align-items:center}.strip-widget>div:last-child{border-right:none}.strip-widget .lbl{color:var(--ink-mute)}.strip-widget .val{color:var(--ink);font-weight:700}.strip-widget .up{color:#1a6e2f}.night .strip-widget .up{color:#5fb872}.strip-widget .down{color:var(--stamp)}.charge{border:3px solid var(--ink);padding:14px;position:relative;background:var(--paper)}.charge-title{font-family:var(--cond);font-size:18px;text-transform:uppercase;border-bottom:2px solid var(--ink);padding-bottom:4px;margin-bottom:10px}.charge-art{height:220px;border:1px dashed var(--ink-mute);display:grid;place-items:center;font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;color:var(--ink-mute);text-transform:uppercase;position:relative;background:repeating-linear-gradient(45deg,transparent,transparent 12px,rgba(107,68,35,.07) 0,rgba(107,68,35,.07) 24px)}.charge-caption{font-family:var(--serif);font-style:italic;font-size:13px;margin-top:8px;color:var(--ink-soft)}.charge-art-clickable{transition:transform .25s ease,box-shadow .25s ease}.charge-art-clickable:focus-visible,.charge-art-clickable:hover{transform:scale(1.01);box-shadow:0 6px 22px rgba(0,0,0,.18);outline:none}.charge-hover-hint{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(20,14,8,.55);color:#fff;font-family:var(--cond,var(--mono));font-size:13px;letter-spacing:.18em;text-transform:uppercase;opacity:0;transition:opacity .2s ease;pointer-events:none;z-index:2}.charge-art-clickable:focus-visible .charge-hover-hint,.charge-art-clickable:hover .charge-hover-hint{opacity:1}.form-classified{border:3px solid var(--ink);padding:18px}.form-row{display:grid;grid-template-columns:110px 1fr;grid-gap:12px;gap:12px;align-items:baseline;padding:8px 0;border-bottom:1px solid var(--ink)}.form-row label{font-family:var(--cond);font-size:16px;text-transform:uppercase}.form-row input,.form-row textarea{border:none;background:transparent;font-family:var(--mono);font-size:12px;color:var(--ink);width:100%;outline:none;border-bottom:1px dashed var(--ink-mute);padding:4px 0;text-transform:uppercase;letter-spacing:.04em}.form-row textarea{min-height:60px;resize:vertical}.form-submit{margin-top:12px;width:100%;background:var(--ink);color:var(--paper);border:none;padding:14px;font-family:var(--cond);font-size:22px;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;transition:background .15s}.form-submit:hover{background:var(--stamp)}.hint{position:fixed;bottom:56px;right:16px;font-family:var(--mono);font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-mute);z-index:40;opacity:.55;pointer-events:none;background:var(--paper);padding:4px 8px;border:1px dashed var(--ink-mute)}.hint b{color:var(--ink)}.print-btn{background:var(--stamp);color:var(--paper);border:none;padding:6px 10px;font-family:var(--cond-2);font-weight:700;font-size:11px;letter-spacing:.12em;text-transform:uppercase;cursor:pointer;transition:filter .15s,transform .15s;display:inline-flex;align-items:center;gap:6px;border:2px solid var(--stamp)}.print-btn:hover{filter:brightness(1.15);transform:rotate(-1deg)}@media (max-width:820px){.page{--nav-safe-bottom:92px;padding:14px 14px var(--nav-safe-bottom);overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch}.paper-fold{display:none}.masthead{grid-template-columns:1fr;gap:4px;text-align:center;padding-bottom:6px}.mast-left,.mast-right{display:none}.mast-title{font-size:40px!important}.mast-title .reg{font-size:7.5px!important;letter-spacing:.18em!important;margin-top:2px}.mast-strap{font-size:7.5px!important;flex-wrap:wrap;gap:0;padding:3px 0;justify-content:center}.mast-strap>span{padding:0 4px}.mast-strap>span:nth-child(4),.mast-strap>span:nth-child(5){display:none}.headline-xl{font-size:clamp(48px,13vw,78px)!important}.headline-l{font-size:clamp(34px,9vw,56px)!important}.headline-m{font-size:clamp(22px,6vw,30px)!important}.deck{font-size:15px!important}.body-text{font-size:13px}.cols-2,.cols-3,.cols-4{column-count:1!important;column-rule:none!important}.page>div[style*=grid-template-columns],.page>div[style*=gridTemplateColumns]{display:block!important;height:auto!important;min-height:0}.page>div>aside,.page>div>div{margin-bottom:16px}.proj{display:grid!important;grid-template-columns:1fr!important;grid-template-areas:"img" "body" "tags";grid-gap:8px;gap:8px}.proj>:first-child{grid-area:img;height:160px!important}.proj>:nth-child(2){grid-area:body}.proj>:nth-child(3){grid-area:tags;flex-direction:row!important;flex-wrap:wrap;align-items:flex-start!important}.proj-title{font-size:28px}.proj-deck{font-size:14px}.timeline-row{grid-template-columns:70px 1fr!important;gap:10px}.timeline-row .side{display:none}.timeline-row .year{font-size:32px}.timeline-row .role{font-size:20px}.stack-grid{grid-template-columns:repeat(2,1fr)}.stack-cell{min-height:90px;padding:10px}.stack-cell .skill{font-size:17px}.halftone{min-height:140px}.form-row{grid-template-columns:1fr!important;gap:4px}.strip-widget{grid-template-columns:repeat(2,1fr)}.strip-widget>div:nth-child(2){border-right:none}.strip-widget>div:nth-child(odd){border-right:1px solid var(--ink)}.nav-strip{height:48px;padding:0 8px;gap:6px}.nav-pages{flex:1 1;overflow-x:auto;overflow-y:hidden;scrollbar-width:none}.nav-pages::-webkit-scrollbar{display:none}.nav-page{padding:0 8px;font-size:9px;letter-spacing:.05em;white-space:nowrap;flex-shrink:0}.nav-page .num{font-size:8px;margin-right:4px}.nav-edition{font-size:9px;gap:6px}.nav-edition span:not(:last-child){display:none}.nav-arrow{width:30px;height:28px;font-size:14px}.hint{font-size:8px;bottom:52px}.twk-panel{width:calc(100vw - 16px)!important;right:8px!important;left:8px!important;bottom:56px!important;max-height:60vh!important}.stamp-round{width:78px;height:78px;font-size:10px}}@media print{@page{size:A3 portrait;margin:8mm}body,html{overflow:visible!important;height:auto!important;background:#fff!important;color:#000!important;font-size:11pt}body{-webkit-print-color-adjust:exact;print-color-adjust:exact}body.night{--paper:#fefefe;--paper-2:#f0ecdf;--ink:#0a0a0a;--ink-soft:#222;--ink-mute:#555;--rule:#0a0a0a;--accent:#7d5a3a;--stamp:#a52a1a}#root{position:static!important;background:#fff}.stage{overflow:visible!important;height:auto!important}.pages{display:block!important;transform:none!important;transition:none!important}.page,.pages{width:100%!important}.page{height:auto!important;min-height:0!important;padding:0 0 10mm!important;page-break-after:always;break-after:page;overflow:visible!important}.page:last-child{page-break-after:avoid;break-after:avoid}.page>div,.page>div>aside,.page>div>div{height:auto!important;max-height:none!important;overflow:visible!important}.glitch-overlay,.hint,.nav-strip,.paper-fold,.tear-overlay,.twk-panel{display:none!important}.paper-texture{opacity:.25!important}.coffee-stain{opacity:.18!important}.stamp,.stamp-round{border-color:var(--stamp)!important;color:var(--stamp)!important}.body-text p{orphans:3;widows:3}h1,h2,h3,h4{break-after:avoid;page-break-after:avoid}}