/* Little Mill — premium layer: cursor, grain, motion */

/* ---------- custom cursor ---------- */
html.has-cursor, html.has-cursor *{cursor:none !important}
.cur{position:fixed;top:0;left:0;z-index:9999;pointer-events:none;will-change:transform}
.cur-dot{width:8px;height:8px;border-radius:50%;background:var(--accent)}
.cur-ring{width:38px;height:38px;border:1.5px solid rgba(255,77,26,.55);border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  transition:width .3s cubic-bezier(.16,1,.3,1),height .3s cubic-bezier(.16,1,.3,1),background .3s,border-color .3s}
.cur-ring .cur-lbl{font-family:'Inter',sans-serif;font-weight:600;font-size:.6rem;letter-spacing:.14em;
  text-transform:uppercase;color:#fff;opacity:0;transition:opacity .2s}
.cur-ring.big{width:92px;height:92px;background:rgba(255,77,26,.95);border-color:transparent}
.cur-ring.big .cur-lbl{opacity:1}
@media (pointer:coarse){.cur{display:none}}

/* ---------- film grain ---------- */
.grain{position:fixed;inset:0;pointer-events:none;z-index:9990;opacity:.055;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  animation:grainShift 1.4s steps(4) infinite}
@keyframes grainShift{
  0%{transform:translate(0,0)}25%{transform:translate(-4%,3%)}
  50%{transform:translate(3%,-4%)}75%{transform:translate(-3%,-2%)}100%{transform:translate(0,0)}}

/* ---------- reveals ---------- */
.rv{opacity:0;transform:translateY(30px);transition:opacity 1s cubic-bezier(.16,1,.3,1),transform 1s cubic-bezier(.16,1,.3,1)}
.rv.in{opacity:1;transform:none}
.rv[data-d="1"]{transition-delay:.12s}.rv[data-d="2"]{transition-delay:.24s}.rv[data-d="3"]{transition-delay:.36s}

.lines .ln{display:block;overflow:hidden}
.lines .ln > span{display:block;transform:translateY(112%);transition:transform 1.1s cubic-bezier(.16,1,.3,1)}
.lines.in .ln:nth-child(1) > span{transition-delay:.05s}
.lines.in .ln:nth-child(2) > span{transition-delay:.16s}
.lines.in .ln:nth-child(3) > span{transition-delay:.27s}
.lines.in .ln > span{transform:none}

.imgmask{overflow:hidden}
.imgmask img,.imgmask video{transform:scale(1.12);transition:transform 1.6s cubic-bezier(.16,1,.3,1)}
.imgmask.in img,.imgmask.in video{transform:scale(1)}

/* ---------- serif accent ---------- */
.serif{font-family:'Instrument Serif',Georgia,serif;font-style:italic;font-weight:400;letter-spacing:0;text-transform:none}

/* ---------- marquee ---------- */
.marquee-wx{overflow:hidden;border-top:1px solid #1e1e1e;border-bottom:1px solid #1e1e1e;padding:18px 0;background:#0b0b0b}
.marquee-wx__track{display:flex;gap:0;width:max-content;animation:mq 36s linear infinite}
.marquee-wx span{font-family:var(--display);font-weight:900;text-transform:uppercase;white-space:nowrap;
  font-size:clamp(.95rem,1.4vw,1.25rem);letter-spacing:.12em;color:#3a3a3a;padding:0 28px;position:relative}
.marquee-wx span::after{content:"·";position:absolute;right:-7px;color:var(--accent)}
.marquee-wx .logo{display:inline-flex;align-items:center;padding:0 34px;opacity:.8;transition:opacity .3s}
.marquee-wx .logo:hover{opacity:1}
.marquee-wx .logo img{height:32px;width:auto;max-width:150px;object-fit:contain;display:block;filter:brightness(0) invert(1)}
.marquee-wx .logo--tall img{height:46px}
@keyframes mq{to{transform:translateX(-50%)}}

@media (prefers-reduced-motion:reduce){
  .rv,.lines .ln > span,.imgmask img{transition:none !important;opacity:1 !important;transform:none !important}
  .marquee-wx__track,.grain{animation:none}
}
