.cv .facts{margin-bottom:clamp(40px,6vw,70px)}.cv__chart{position:relative}.cvt__chart{position:relative;touch-action:pan-y;cursor:ew-resize;user-select:none;-webkit-user-select:none;border-radius:4px}.cvt__chart svg{overflow:visible}.cvt__grid{stroke:var(--rule);stroke-dasharray:2 4}.cvt__tick{font-family:var(--f-mono);font-size:11px;fill:var(--ink-3)}.cvt__lane{font-family:var(--f-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;fill:var(--ink-2)}.cvt__base{stroke:var(--rule-2);stroke-width:1}.cvt__band{fill:#ff003512;transition:x .15s}.cvt__bar rect{opacity:.8;transition:opacity .25s}.cvt__bar.is-on rect{opacity:1}.cvt__barlabel{font-family:var(--f-mono);font-size:10.5px;letter-spacing:.03em;fill:var(--midnight);pointer-events:none}.cvt__barlabel.is-light{fill:var(--paper)}.cvt__pub{fill:var(--yellow);opacity:.85;transition:opacity .2s,transform .2s;transform-box:fill-box;transform-origin:center}.cvt__pub--journal{fill:var(--orange)}.cvt__pub--conference{fill:var(--cherry)}.cvt__pub--thesis{fill:var(--midnight)}.cvt__pub.is-on{opacity:1;transform:scale(1.18)}.cvt__star{fill:var(--cherry);opacity:.75;transition:opacity .2s}.cvt__star.is-on{opacity:1}.cvt__ex{fill:var(--sky);opacity:.85;transition:opacity .2s}.cvt__ex.is-on{opacity:1}.cvt__cursor line{stroke:var(--cherry);stroke-width:1.6;stroke-dasharray:4 3}.cvt__cursor rect{fill:var(--cherry)}.cvt__cursor text{font-family:var(--f-mono);font-size:11.5px;fill:#fff}.cvt__legend{list-style:none;display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:12px;font-family:var(--f-mono);font-size:11px;color:var(--ink-2)}.cvt__legend li{display:flex;align-items:center;gap:6px}.cvt__legend i{width:10px;height:10px;border-radius:2px}.cvt__year{display:grid;grid-template-columns:auto 1fr;gap:clamp(20px,4vw,56px);margin-top:34px;padding:clamp(20px,3vw,32px);background:var(--card);border:1px solid var(--rule);box-shadow:var(--shadow);border-radius:4px;position:relative}.cvt__year:before{content:"";position:absolute;left:22px;right:22px;top:-6px;height:12px;background:radial-gradient(circle,var(--paper-2) 0 3.6px,var(--rule-2) 3.6px 4.4px,transparent 4.9px) 0 0 / 22px 12px repeat-x}.cvt__yearnum{display:flex;flex-direction:column;align-items:flex-start}.cvt__yearnum .hand{font-size:24px;color:var(--cherry);line-height:1}.cvt__yearnum b{font-family:var(--f-display);font-weight:400;font-size:clamp(54px,7vw,92px);line-height:.9;letter-spacing:-.02em;font-variant-numeric:tabular-nums}.cvt__cols{display:grid;grid-template-columns:1fr 1fr;gap:clamp(18px,3vw,40px);min-height:150px}.cvt__cols h4{margin-bottom:10px}.cvt__roles,.cvt__pubs{list-style:none;display:grid;gap:10px}.cvt__roles li{padding-left:12px;border-left:3px solid var(--c)}.cvt__roles b{display:block;font-weight:600;font-size:16px;line-height:1.3}.cvt__roles span,.cvt__pubs small{display:block;font-size:14px;color:var(--ink-3);line-height:1.4}.cvt__pubs li{font-size:15.5px;line-height:1.35}.cvt__pubs a{text-decoration-color:var(--cherry)}.cvt__pubs a:hover{color:var(--cherry-ink)}.cvt__pubs small{font-family:var(--f-mono);font-size:11px;letter-spacing:.03em;margin-top:2px}@media (max-width: 760px){.cvt__year{grid-template-columns:1fr}.cvt__cols{grid-template-columns:1fr;min-height:0}}.xp-controls{display:grid;gap:12px;justify-items:center;margin:22px 0 28px}.xp-chips{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}.xp-types .chip{font-size:11px;padding:5px 10px 4px}.xp-anchor{position:relative;display:inline-flex;flex:none}.xp-anchor .note{left:calc(100% + 30px);bottom:calc(100% + 30px)}.xp-controls.has-note{margin-top:64px}@media (max-width: 760px){.xp-controls.has-note{margin-top:22px}}.xp-chips .chip.is-peek{border-color:var(--ink);background:color-mix(in srgb,var(--ink) 10%,transparent)}@media (max-width: 600px){.xp-chips{flex-wrap:nowrap;overflow-x:auto;justify-content:safe center;max-width:calc(100% + 2 * var(--pad, 20px));margin-inline:calc(var(--pad, 20px) * -1);padding:2px var(--pad, 20px) 8px;scrollbar-width:none}.xp-chips::-webkit-scrollbar{display:none}.xp-chips .chip{flex:none}}.xp-search{width:100%;max-width:420px;margin-top:10px}.xp-search input{width:100%;padding:10px 16px;border:1.5px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-family:var(--f-mono);font-size:13px}.xp-search input:focus{outline:2px dashed var(--cherry);outline-offset:2px}.xp{display:grid;gap:12px;min-width:0}.xp-modes{display:flex;padding:3px;border:1px solid var(--rule);border-radius:999px;background:var(--paper)}.xp-modes button{padding:6px 14px 5px;border-radius:999px;white-space:nowrap;font-family:var(--f-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);transition:background .2s,color .2s}.xp-modes button.is-on{background:var(--midnight);color:var(--paper)}.xp-modes button:not(.is-on):hover{color:var(--ink)}.xp-modes button:focus-visible{outline:2px dashed var(--cherry);outline-offset:2px}.xp-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 16px;min-height:36px;padding-left:4px}.xp-sub{font-family:var(--f-hand);font-weight:600;font-size:clamp(20px,1.6vw,24px);line-height:1.1;color:var(--ink-2)}.xp-bar__tools{display:flex;align-items:center;gap:10px;margin-left:auto}.xp-smodes{display:flex;gap:6px;opacity:0;visibility:hidden;transition:opacity .25s,visibility 0s .25s}.xp-smodes.is-on{opacity:1;visibility:visible;transition-delay:0s}.xp-smodes button{display:grid;place-items:center;width:32px;height:32px;border:1px solid var(--rule-2);border-radius:6px;background:var(--paper);color:var(--ink-3);transition:background .2s,color .2s,border-color .2s}.xp-smodes button:hover{color:var(--ink);border-color:var(--ink-3)}.xp-smodes button.is-on{background:var(--midnight);border-color:var(--midnight);color:var(--paper)}.xp-smodes button:focus-visible{outline:2px dashed var(--cherry);outline-offset:2px}.xp-smodes svg{width:18px;height:18px}.xp-smodes path{fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.xp-plot{position:relative;min-width:0}.xp-canvas{position:relative;touch-action:manipulation}.xp-canvas svg{display:block;overflow:visible}.xp-ground{stroke:var(--rule-2);stroke-width:1;transition:stroke .3s}.xp-plot.is-streams.is-zero .xp-ground{stroke:var(--ink-3);stroke-width:1.5}.xp-yearband{fill:#ff003514;pointer-events:none}.xp-yearhit{fill:transparent;cursor:pointer;outline:none;transition:fill .2s}.xp-yearhit:hover,.xp-yearhit:focus-visible{fill:#08275412}.xp-yearhit.is-on{fill:#ff00351f}.xp-yearhit:focus-visible{stroke:var(--cherry);stroke-dasharray:3 3}.xp-tick{font-family:var(--f-mono);font-size:11px;fill:var(--ink-3);transition:fill .2s}.xp-tick.is-hot{fill:var(--midnight)}.xp-tick.is-on{fill:var(--cherry-ink);font-weight:600}.xp-ygrid line{stroke:var(--rule);stroke-dasharray:2 5}.xp-ygrid text,.xp-zgrid text{font-family:var(--f-mono);font-size:10.5px;fill:var(--ink-3)}.xp-ygrid,.xp-zgrid{opacity:0;transition:opacity .4s}.xp-plot.is-units .xp-ygrid,.xp-plot.is-streams.is-zero .xp-zgrid{opacity:1}.xp-units,.xp-streams,.xp-garden{pointer-events:none}.xp-plot.is-units .xp-units,.xp-plot.is-streams .xp-streams,.xp-plot.is-flowers .xp-garden{pointer-events:auto}.xp-plot:not(.is-flowers) .xp-flowers *{pointer-events:none!important}.xp-unit{cursor:pointer;outline:none}.xp-unit__move{will-change:transform}.xp-unit__body{transition:opacity .4s,filter .4s}.xp-unit.is-off .xp-unit__body{opacity:.14;filter:grayscale(1)}.xp-unit.is-off{pointer-events:none}.xp-unit__ring{fill:var(--paper);stroke:var(--c);stroke-width:3;transition:stroke-width .2s}.xp-unit:focus-visible .xp-unit__ring,.xp-unit.is-focus .xp-unit__ring,.xp-unit.is-hot .xp-unit__ring{stroke-width:6}.xp-unit.is-focus .xp-unit__body{filter:drop-shadow(0 4px 7px rgba(8,39,84,.3))}.xp-unit:focus-visible .xp-unit__ring{stroke:var(--cherry)}.xp-unit__wash{opacity:0;transition:opacity .35s;pointer-events:none}.xp-plot.is-streams .xp-unit__wash{opacity:1}.xp-label{position:absolute;left:0;top:0;z-index:3;pointer-events:none;opacity:0;transition:opacity .18s}.xp-label.is-on{opacity:1}.xp-label span{position:absolute;left:22px;top:-20px;display:block;width:max-content;max-width:260px;padding:8px 12px 9px;border-left:3px solid var(--c);background:#f8f7f4f7;color:var(--midnight);box-shadow:0 10px 26px #08275438;transform:rotate(-1.5deg)}.xp-label.is-left span{left:auto;right:22px;transform:rotate(1.5deg)}.xp-label small{display:block;font-family:var(--f-mono);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:#08275499}.xp-label small.tap-hint{margin-top:4px;text-transform:none;letter-spacing:.02em;color:var(--cherry-ink)}.xp-label b{display:block;font-family:var(--f-display);font-weight:400;font-size:20px;line-height:1.1;margin-top:2px}.xp-layer{stroke:var(--card, #fff);stroke-width:.8;outline:none;cursor:pointer;transition:opacity .3s}.xp-layer.is-dim{opacity:.14}.xp-canvas:has(.xp-layer.is-hot) .xp-layer:not(.is-hot):not(.is-dim){opacity:.45}.xp-layer.is-hot{stroke:var(--midnight);stroke-width:1.2}.xp-layer.is-dim.is-hot{opacity:.5}.xp-layer:focus-visible{stroke:var(--cherry);stroke-width:2;stroke-dasharray:4 3}.xp-guide{stroke:var(--midnight);stroke-width:1;stroke-dasharray:2 3;pointer-events:none}.xp-stip{position:absolute;top:0;z-index:3;display:grid;gap:2px;padding:6px 9px 5px;border-radius:4px;background:var(--midnight);color:var(--paper);font-family:var(--f-mono);font-size:10.5px;letter-spacing:.04em;line-height:1.35;pointer-events:none;box-shadow:var(--shadow)}.xp-stip b{display:flex;align-items:center;gap:6px;font-weight:500}.xp-stip i{width:8px;height:8px;border-radius:50%;background:var(--c);flex:none;box-shadow:0 0 0 1px #f8f7f480}.xp-ridges text{font-family:var(--f-mono);font-size:10px;letter-spacing:.04em;fill:var(--ink-2);paint-order:stroke;stroke:var(--paper);stroke-width:3px;stroke-linejoin:round;pointer-events:none;opacity:0;transition:opacity .3s}.xp-plot.is-split .xp-ridges text{opacity:1;transition-delay:.3s}.xp-plot.is-split .xp-ridges text.is-dim{opacity:.35}.xp-grow{transform:scale(0);opacity:0;transition:transform .55s var(--ease),opacity .3s;transition-delay:calc(var(--i) * 30ms)}.xp-plot.is-flowers .xp-grow{transform:none;opacity:1;transition-duration:.9s,.4s;transition-delay:calc(.28s + var(--i) * 45ms)}.xp-hit{fill:transparent}.xp-fl{cursor:pointer}.xp-stem{fill:none;stroke:#78a815;stroke-linecap:round;transition:opacity .3s}.xp-leaf{fill:url(#xp-leaf);transition:opacity .3s}.xp-fl.is-off .xp-stem,.xp-fl.is-off .xp-leaf,.xp-fl.is-off .xp-core{opacity:.18}.xp-head{transition:transform .45s var(--ease)}.xp-fl.is-sel .xp-head{transform:scale(1.6)}.xp-petal{cursor:pointer;transition:opacity .3s}.xp-petal.is-off{opacity:.18}.xp-petal path{stroke:#ec4a92;stroke-width:1;stroke-linejoin:round;transition:transform .25s var(--ease),stroke .2s}.xp-petal .xp-sepal{fill:#78a815;stroke:#5f8c0c;stroke-width:.8}.xp-petal.is-hot path:not(.xp-sepal){stroke:var(--midnight);stroke-width:1.3;transform:translate(2.5px)}.xp-petal.is-picked path:not(.xp-sepal){stroke:var(--midnight);stroke-width:2}.xp-petal--bud.is-hot path:not(.xp-sepal){transform:translateY(-2px)}.xp-core{fill:url(#xp-core);pointer-events:none;transition:opacity .3s}.xp-ftip{position:absolute;z-index:3;display:flex;flex-direction:column;gap:1px;width:max-content;max-width:230px;margin-left:20px;padding:7px 13px 6px;border-radius:14px;background:#fff;box-shadow:0 6px 18px #0827542e;text-align:left;pointer-events:none;opacity:0;transform:translate(-6px,-50%);transition:opacity .18s,transform .22s var(--ease)}.xp-ftip:before{content:"";position:absolute;top:50%;left:-6px;width:12px;height:12px;background:#fff;border-radius:0 0 0 3px;transform:translateY(-50%) rotate(45deg)}.xp-ftip.is-on{opacity:1;transform:translateY(-50%)}.xp-ftip.is-flip{margin-left:-20px;transform:translate(calc(-100% + 6px),-50%)}.xp-ftip.is-flip.is-on{transform:translate(-100%,-50%)}.xp-ftip.is-flip:before{left:auto;right:-6px}.xp-ftip b{font-family:var(--f-hand);font-weight:700;font-size:21px;line-height:1.05;color:#e8459e}.xp-ftip small{font-family:var(--f-mono);font-size:10.5px;letter-spacing:.04em;color:#7fa80f}@media (prefers-reduced-motion: reduce){.xp-grow,.xp-head{transition:opacity .3s!important}.xp-layer,.xp-unit__wash{transition:none}}
