/* ═══ Motion & interaction layer ═══ */

/* cross-document page transitions */
@view-transition{navigation:auto}
::view-transition-old(root){animation:vtOut .32s cubic-bezier(.4,0,1,1) both}
::view-transition-new(root){animation:vtIn .5s cubic-bezier(0,0,.2,1) both}
@keyframes vtOut{to{opacity:0;transform:translateY(-10px)}}
@keyframes vtIn{from{opacity:0;transform:translateY(14px)}}
nav,footer,#prog{view-transition-name:none}
/* the portrait keeps its identity across pages and morphs into place */
.arch img{view-transition-name:kw-portrait}
::view-transition-group(kw-portrait){animation-duration:.62s;
  animation-timing-function:cubic-bezier(.19,1,.22,1)}

/* ═══ INTRO ═══ */
html.js.loading{overflow:hidden}
.curtain{display:none}
html.js .curtain{display:block;position:fixed;inset:0;z-index:2000;pointer-events:none}
.cpanel{position:absolute;left:0;right:0;height:50.4%;background:#060605;
  transition:transform .6s cubic-bezier(.76,0,.24,1)}
.cpanel.t{top:0}.cpanel.b{bottom:0}
.curtain.out .cpanel.t{transform:translateY(-100%)}
.curtain.out .cpanel.b{transform:translateY(100%)}
.cstage{position:absolute;inset:0;display:grid;place-items:center;z-index:2;
  transition:opacity .26s ease-in,transform .26s ease-in}
.curtain.out .cstage{opacity:0;transform:translateY(-14px)}
.cmark{display:flex;flex-direction:column;align-items:center;gap:26px}
.cmark-w{width:74px;height:74px;position:relative;display:grid;place-items:center;
  font-family:var(--d);font-weight:600;font-size:31px;color:var(--ink);
  opacity:0;animation:cGlyph .38s var(--e) .2s forwards}
.cmark-w::before,.cmark-w::after{content:"";position:absolute;background:var(--bronze-2)}
.cmark-w::before{left:0;right:0;height:2px;top:0;transform:scaleX(0);transform-origin:left;
  animation:cDrawX .28s cubic-bezier(.76,0,.24,1) .04s forwards}
.cmark-w::after{left:0;right:0;height:2px;bottom:0;transform:scaleX(0);transform-origin:right;
  animation:cDrawX .28s cubic-bezier(.76,0,.24,1) .04s forwards}
.cmark-s{position:absolute;inset:0}
.cmark-s::before,.cmark-s::after{content:"";position:absolute;width:2px;background:var(--bronze-2);
  top:0;bottom:0;transform:scaleY(0)}
.cmark-s::before{left:0;transform-origin:top;animation:cDrawY .26s cubic-bezier(.76,0,.24,1) .24s forwards}
.cmark-s::after{right:0;transform-origin:bottom;animation:cDrawY .26s cubic-bezier(.76,0,.24,1) .24s forwards}
@keyframes cDrawX{to{transform:scaleX(1)}}
@keyframes cDrawY{to{transform:scaleY(1)}}
@keyframes cGlyph{to{opacity:1}}
.cname{display:flex;gap:.44em;font-family:var(--d);font-weight:600;font-size:11px;
  letter-spacing:.3em;text-transform:uppercase;color:var(--bronze-2)}
.cname i{font-style:normal;opacity:0;transform:translateY(8px);
  animation:cLtr .3s var(--e) forwards;animation-delay:calc(.4s + var(--i)*.021s)}
@keyframes cLtr{to{opacity:1;transform:none}}
.cmeter{display:flex;align-items:center;gap:14px;opacity:0;
  animation:cGlyph .28s var(--e) .62s forwards}
.cbar{width:190px;height:1px;background:rgba(245,242,236,.16);overflow:hidden}
.cbar i{display:block;height:100%;width:0;background:var(--bronze-2);
  transition:width .28s cubic-bezier(.2,.7,.2,1)}
.cpct{font-family:var(--s);font-size:10px;letter-spacing:.22em;color:#6E6759;
  font-variant-numeric:tabular-nums;min-width:34px}
.cline{position:absolute;left:0;right:0;top:50%;height:1px;background:var(--bronze-2);
  transform:scaleX(0);opacity:.5;z-index:3;
  transition:transform .34s cubic-bezier(.76,0,.24,1)}
.curtain.sweep .cline{transform:scaleX(1)}

/* hero cascade after the curtain */
html.entered .hero .fu{animation-play-state:running}
html.js .hero .fu{animation-play-state:paused}

/* ═══ blur-up ═══ */
.ph{position:relative;overflow:hidden;background:var(--paper-3)}
html.js .ph::before{content:"";position:absolute;inset:-4%;background-image:var(--lqip);
  background-size:cover;background-position:center;filter:blur(14px);transform:scale(1.06);
  transition:opacity .7s ease}
html.js .ph.ready::before{opacity:0}
.ph img{position:relative}
html.js .ph img{opacity:0;transition:opacity .8s cubic-bezier(.2,.7,.2,1)}
html.js .ph.ready img{opacity:1}

/* ═══ magnetic buttons ═══ */
.btn,.kbd{transition:background .45s var(--e),color .45s var(--e),border-color .45s var(--e),
  transform .35s cubic-bezier(.19,1.1,.3,1)}

/* ═══ word-level heading reveal ═══ */
.split{display:inline-block;overflow:hidden;vertical-align:bottom;padding-bottom:.06em}
.split>i{display:inline-block;font-style:normal}
html.js .split>i{transform:translateY(105%);
  animation:wordUp .72s cubic-bezier(.16,.84,.28,1) forwards;
  animation-delay:calc(var(--wd,0s) + var(--i)*.038s);animation-play-state:paused}
html.entered .split>i{animation-play-state:running}
@keyframes wordUp{to{transform:translateY(0)}}

/* ═══ hero scroll response ═══ */
@supports (animation-timeline: view()){
  .arch{animation:heroLift linear both;animation-timeline:view();
    animation-range:exit-crossing 0% exit 100%}
  @keyframes heroLift{to{transform:translateY(-26px) scale(.985);opacity:.72}}
}

/* ═══ perf ═══ */
.sec,.tick,.press,.qa{content-visibility:auto;contain-intrinsic-size:auto 640px}

/* ═══ cursor ═══ */
.cur{position:fixed;top:0;left:0;width:30px;height:30px;border:1px solid var(--bronze);
  border-radius:50%;pointer-events:none;z-index:1500;opacity:0;
  transition:width .34s var(--e),height .34s var(--e),opacity .4s,background .34s,border-color .34s}
.cur.live{opacity:.75}
.cur.grip{width:58px;height:58px;background:rgba(119,91,41,.12);border-color:transparent}
@media(pointer:coarse){.cur{display:none}}

#prog{position:fixed;top:0;left:0;height:2px;width:0;z-index:1400;
  background:linear-gradient(90deg,var(--bronze),var(--bronze-2))}

/* ═══ reveal ═══ */
.reveal{clip-path:inset(0 0 100% 0);transition:clip-path 1.15s cubic-bezier(.16,.84,.28,1)}
.reveal.in{clip-path:inset(0 0 0 0)}
@supports (animation-timeline: view()){
  .reveal{transition:none;animation:clipUp linear both;animation-timeline:view();
    animation-range:entry 2% cover 26%}
  @keyframes clipUp{from{clip-path:inset(0 0 100% 0)}to{clip-path:inset(0 0 0 0)}}}

/* ═══ ticker ═══ */
.tick{overflow:hidden;border-top:1px solid var(--rule-2);border-bottom:1px solid var(--rule-2);
  padding:17px 0;background:var(--paper-2);position:relative}
.tick::before,.tick::after{content:"";position:absolute;top:0;bottom:0;width:90px;z-index:2;
  pointer-events:none}
.tick::before{left:0;background:linear-gradient(90deg,var(--paper-2),transparent)}
.tick::after{right:0;background:linear-gradient(270deg,var(--paper-2),transparent)}
.tick-r{display:flex;width:max-content;animation:tickRun 52s linear infinite}
.tick:hover .tick-r{animation-play-state:paused}
@keyframes tickRun{to{transform:translateX(-50%)}}
.tick-r span{display:inline-flex;align-items:center;gap:26px;padding:0 26px;
  font-family:var(--d);font-weight:600;font-size:12px;letter-spacing:.24em;
  text-transform:uppercase;color:var(--stone);white-space:nowrap}
.tick-r span::after{content:"";width:4px;height:4px;background:var(--bronze);
  transform:rotate(45deg);flex-shrink:0}

/* ═══ palette ═══ */
.pal{position:fixed;inset:0;z-index:1600;display:none;background:rgba(6,6,5,.72);
  backdrop-filter:blur(9px);align-items:flex-start;justify-content:center;padding:13vh 18px 18px}
.pal.show{display:flex}
.pal-b{width:min(560px,100%);background:var(--paper-3);border:1px solid var(--rule-2);
  box-shadow:0 40px 90px -30px rgba(0,0,0,.8);animation:palIn .3s var(--e)}
@keyframes palIn{from{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:none}}
.pal-i{width:100%;background:transparent;border:0;border-bottom:1px solid var(--rule);
  padding:19px 22px;color:var(--ink);font-family:var(--d);font-weight:500;font-size:17px}
.pal-i:focus{outline:none}
.pal-i::placeholder{color:var(--stone-2)}
.pal-u{list-style:none;max-height:46vh;overflow:auto;padding:8px 0}
.pal-u li{padding:12px 22px;display:flex;justify-content:space-between;gap:16px;align-items:baseline;
  cursor:pointer;font-size:14.5px;color:var(--char)}
.pal-u li[aria-selected="true"]{background:var(--paper-2);color:var(--ink)}
.pal-u li span{font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--stone-2)}
.pal-hint{padding:11px 22px;border-top:1px solid var(--rule);font-size:10px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--stone-2);display:flex;gap:18px;flex-wrap:wrap}
.kbd{font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--stone);
  background:transparent;border:1px solid var(--rule-2);padding:8px 12px;cursor:pointer;
  font-family:var(--s)}
.kbd:hover{border-color:var(--bronze);color:var(--bronze)}
@media(max-width:1180px){.kbd{display:none}}

.top{position:fixed;right:22px;bottom:22px;z-index:1300;width:46px;height:46px;
  border:1px solid var(--bronze);background:var(--paper-2);display:grid;place-items:center;
  opacity:0;pointer-events:none;transition:opacity .45s var(--e),background .35s,border-color .35s;
  font-size:15px;color:var(--ink)}
.top.on{opacity:1;pointer-events:auto}
.top:hover{background:var(--bronze-2);color:var(--paper);border-color:var(--bronze-2)}

@media(prefers-reduced-motion:reduce){
  .curtain{display:none}html.loading{overflow:auto}
  .reveal{clip-path:none}.tick-r{animation:none}
  .split>i,.hero .fu{animation:none!important;opacity:1;transform:none}
  .ph img{opacity:1}.ph::before{opacity:0}
  ::view-transition-old(root),::view-transition-new(root){animation:none}
}