/* Total Veteran motion layer: reveals, hero motifs, reading progress. */
.tvr{opacity:0;transform:translateY(16px)}
.tvr.in{opacity:1;transform:none;transition:opacity .7s cubic-bezier(.2,.7,.2,1),transform .7s cubic-bezier(.2,.7,.2,1)}
.eyebrow.tvk:before,.k.tvk:before{content:"";display:inline-block;width:0;height:2px;background:var(--brass);vertical-align:middle;margin-right:0;transition:width .6s .15s cubic-bezier(.2,.7,.2,1),margin .6s .15s}
.eyebrow.tvk.in:before,.k.tvk.in:before{width:22px;margin-right:10px}

/* hero motif host */
.tvm{display:block;width:100%;max-width:440px;margin:40px 0 0;color:var(--brass);pointer-events:auto}
.tvm svg{display:block;width:100%;height:auto;overflow:visible}
.tvm text{font-family:var(--disp);font-variation-settings:"wdth" 102}
.tvm .lb{font-size:15px;font-weight:650}
.tvm .sm{font-size:12.5px;font-weight:500;opacity:.75}
.tvm-host{position:relative}
.tvm .draw{fill:none}
.tvm .pop{opacity:0;transform:scale(.6);transform-box:fill-box;transform-origin:center;transition:opacity .5s,transform .6s cubic-bezier(.3,1.6,.5,1)}
.tvm .pop.on{opacity:1;transform:none}
.tvm .fade{opacity:0;transition:opacity .7s}
.tvm .fade.on{opacity:1}
.tvm .drift{animation:tvmDrift 26s linear infinite}
.tvm .drift2{animation:tvmDrift 38s linear infinite reverse}
@keyframes tvmDrift{from{transform:translateX(0)}to{transform:translateX(-200px)}}
.tvm .pulse{transform-box:fill-box;transform-origin:center;animation:tvmPulse 2.4s ease-out infinite}
@keyframes tvmPulse{0%{opacity:.85;transform:scale(1)}100%{opacity:0;transform:scale(2.8)}}
.tvm .node{cursor:pointer}
.tvm .node:hover .ring,.tvm .node:focus .ring{stroke-width:3}
.tvm .node:focus{outline:none}
.tvm .node:focus-visible .ring{stroke:#fff}
.tvm .chip{opacity:0;transform:translateY(10px);transition:opacity .6s,transform .6s cubic-bezier(.2,.7,.2,1)}
.tvm .chip.on{opacity:1;transform:none}
.tvm .poly{transition:all 1.2s cubic-bezier(.4,0,.2,1)}

/* dark heroes vs light heroes */
.sp-hero .tvm,.hero-right .tvm{color:var(--brass)}
.j-hero .tvm{color:var(--forest)}

@media (min-width:1200px){
  .sp-hero .tvm{position:absolute;right:0;top:64px;width:min(440px,34vw);margin:0}
  .sp-hero .tvm-app{width:min(400px,30vw);top:40px}
  .j-hero .tvm{position:absolute;right:0;top:20px;width:400px;margin:0}
}
.hero-right .tvm{margin:0 0 28px;max-width:420px}
@media (min-width:981px){
  .hero-right .tvm{position:absolute;top:44px;left:40px;right:40px;width:auto;margin:0}
}

/* full-bleed backgrounds for centred heroes */
.art-hero,.research-hero{position:relative;overflow:hidden}
.art-hero>*:not(.tvbg),.research-hero>*:not(.tvbg){position:relative;z-index:1}
.tvbg{position:absolute;inset:0;pointer-events:none;z-index:0}
.tvbg svg,.tvbg canvas{width:100%;height:100%;display:block}

/* manual */
.bookwrap .book.tvtilt{transition:transform .25s ease-out}
.parts.tvspine{position:relative}
.parts.tvspine:before{content:"";position:absolute;left:-28px;top:0;width:2px;height:var(--fill,0%);background:var(--brass);transition:height .25s linear}
.parts.tvspine li .pn{transition:color .4s}
.parts.tvspine li.lit .pn{color:var(--forest)}

/* reading progress */
.tvprog{position:fixed;left:0;top:0;height:3px;width:100%;transform-origin:0 50%;transform:scaleX(0);background:var(--brass);z-index:100;pointer-events:none}

@media (max-width:980px){.parts.tvspine:before{left:-14px}}
@media (max-width:620px){.parts.tvspine:before{display:none}.tvm{max-width:100%}}
@media (prefers-reduced-motion:reduce){
  .tvr{opacity:1!important;transform:none!important}
  .tvm .drift,.tvm .drift2,.tvm .pulse{animation:none}
  .tvm .pop,.tvm .fade,.tvm .chip{opacity:1;transform:none;transition:none}
}
@media print{.tvr{opacity:1!important;transform:none!important}.tvm,.tvbg,.tvprog{display:none}}
