@font-face{font-family:'Display';font-style:normal;font-weight:900;font-display:block;
  src:url(inter900.woff2) format('woff2')}
/* DM Sans 700, the /score/ button face, subset to the four label strings only.
   Change a label's text and you may need to re-subset (see SITE-HANDOFF.md). */
@font-face{font-family:'Label';font-style:normal;font-weight:700;font-display:swap;
  src:url(dmsans700.woff2) format('woff2')}

:root{
  --cream:#F4F2EE;
  --label:#FBF9F4;
  --blue:#0A66C2;
  --navy:#08213F;
}

*,*::before,*::after{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;overflow:hidden;
  -webkit-tap-highlight-color:transparent;
  overscroll-behavior:none;
  background:var(--cream);
  color:var(--blue);
  font-family:"Helvetica Neue",Helvetica,Arial,system-ui,sans-serif;
  -webkit-font-smoothing:antialiased;
}
a{text-decoration:none;color:inherit}

/* print grain, lighter than the red page so the cream stays clean */
#grain{
  position:fixed;inset:-50%;z-index:60;pointer-events:none;opacity:.09;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E");
  animation:grain 1.1s steps(3) infinite;mix-blend-mode:multiply;
}
@keyframes grain{0%{transform:translate(0,0)}33%{transform:translate(-3%,2%)}66%{transform:translate(2%,-3%)}100%{transform:translate(0,0)}}

.stage{position:relative;height:100vh;height:100dvh;display:grid;place-items:center}

/* ---------- the cover lockup: big head, name tucked under the chin ---------- */
.lockup{
  --head:min(76vh, 58vw, 820px);
  --name:min(18vh, 12vw, 210px);
  position:relative;z-index:10;
  display:flex;flex-direction:column;align-items:center;
  transform:translate3d(calc(var(--px,0px)*.25),calc(var(--py,0px)*.25),0);
  transition:transform .55s cubic-bezier(.2,.8,.2,1);
}
.portrait{
  width:var(--head);aspect-ratio:1;position:relative;z-index:1;
  opacity:0;transition:opacity .8s ease;
}
.portrait.ready{opacity:1}
.rig{position:absolute;inset:0}
.heads{position:absolute;inset:0;transform-origin:50% 62%;will-change:transform}
.heads img{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:contain;opacity:0;transition:opacity .06s linear;
}
.heads img.on{opacity:1}

.name{
  /* the name sits IN FRONT of the portrait, so it can tuck up into the chin
     without ever being covered. Deepest frame (L1) reaches 0.972 of the box. */
  position:relative;z-index:2;
  margin:calc(var(--head) * -0.085) 0 0;
  font-family:'Display',"Helvetica Neue",Helvetica,Arial,sans-serif;
  font-weight:900;letter-spacing:-.055em;line-height:.86;
  font-size:var(--name);
  color:var(--blue);
  padding-right:.05em;  /* negative tracking eats the last letter's edge */
  pointer-events:none;user-select:none;white-space:nowrap;
}

/* ---------- cover-line labels ---------- */
.orbit{position:absolute;inset:0;margin:0;padding:0;list-style:none;z-index:20;pointer-events:none}
.node{
  position:absolute;pointer-events:auto;
  animation:float 9s ease-in-out infinite;animation-delay:var(--fd);
}
@keyframes float{0%,100%{margin-top:0}50%{margin-top:-10px}}  /* margin, not transform: transform is taken by tilt + hover */

.btn{
  display:block;
  background:var(--label);color:var(--blue);
  font-family:'Label',"Helvetica Neue",Helvetica,Arial,sans-serif;
  font-weight:700;font-size:clamp(15px,1.45vw,21px);letter-spacing:-.015em;line-height:1.2;
  padding:13px 22px 12px;border-radius:2px;
  border:2px solid var(--blue);
  box-shadow:7px 8px 0 var(--blue);
  transform:rotate(var(--rot));
  touch-action:manipulation;white-space:nowrap;
  transition:transform .18s cubic-bezier(.2,1.4,.4,1), box-shadow .18s, background .18s, color .18s;
}
/* hover fills the label, so no label is filled at rest */
@media (hover:hover){
  .btn:hover{
    background:var(--blue);color:var(--label);
    transform:rotate(0deg) scale(1.07) translate(-2px,-3px);
    box-shadow:10px 12px 0 var(--navy);
  }
}
.btn:active{background:var(--blue);color:var(--label);box-shadow:4px 5px 0 var(--navy)}

/* LinkedIn is the secondary action: smaller label, lighter shadow */
.n3 .btn{font-size:clamp(13px,1.15vw,17px);padding:10px 17px 9px;box-shadow:4px 5px 0 var(--blue)}
@media (hover:hover){.n3 .btn:hover{box-shadow:6px 7px 0 var(--navy)}}
.n3 .btn:active{box-shadow:2px 3px 0 var(--navy)}

/* desktop: labels hug the silhouette (hair spans ~0.11-0.88 of the box), never the face */
.n1{right:calc(50% + var(--head) * .42); top:calc(var(--head) * .26)}
.n2{left: calc(50% + var(--head) * .49); top:calc(var(--head) * .60)}
.n3{left: calc(50% + var(--head) * .37); top:calc(var(--head) * .03)}
.n4{right:calc(50% + var(--head) * .47); top:calc(var(--head) * .64)}

/* ---------- phones & portrait tablets: labels drop below the name ---------- */
@media (max-width:820px) and (orientation:portrait){
  .lockup{
    --head:min(84vw, 46vh, 520px);
    --name:min(18.5vw, 9vh, 120px);
  }
  .orbit{
    position:static;z-index:20;
    display:flex;flex-wrap:wrap;justify-content:center;
    gap:18px 16px;max-width:92vw;
    margin-top:clamp(20px, 4vh, 40px);
  }
  .node{position:relative;inset:auto}
  .n3{flex-basis:100%;display:flex;justify-content:center}
  .name{margin-top:calc(var(--head) * -0.02)}  /* a little air under the chin on phones */
  .btn{font-size:15px;padding:12px 16px 11px;min-height:44px;box-shadow:5px 6px 0 var(--blue)}
  .btn:active{box-shadow:3px 4px 0 var(--navy)}
  .n3 .btn{font-size:13px;padding:12px 14px 11px;min-height:44px;box-shadow:3px 4px 0 var(--blue)}
}

@media (min-width:600px) and (max-width:820px) and (orientation:portrait){
  .btn{font-size:19px;padding:14px 22px 13px;box-shadow:7px 8px 0 var(--blue)}
  .n3 .btn{font-size:16px;padding:12px 18px 11px;box-shadow:4px 5px 0 var(--blue)}
}

/* short landscape phones: shrink, keep labels at the sides */
@media (max-height:500px) and (orientation:landscape){
  .lockup{--head:min(66vh, 40vw); --name:min(17vh, 11vw)}
  .btn{font-size:13px;padding:11px 14px 10px;min-height:40px;box-shadow:4px 5px 0 var(--blue)}
  .n3 .btn{font-size:12px;padding:10px 12px 9px;min-height:38px;box-shadow:3px 3px 0 var(--blue)}
}

@media (prefers-reduced-motion:reduce){.node{animation:none}.lockup{transition:none}#grain{animation:none}}
