/* Design Read: portfolio for studios and small brands in Indonesia and abroad,
   editorial grid language, ENERGY 3 / RHYTHM 3 / MOTION 2.
   Motif: six-column hairline grid + annotated hotspots.
   Accent #0000fe: name, hover/active, hotspots, and the full-bleed Contact page only. */

:root {
  --paper: #f4f3ee;
  --ink: #0c0c0f;
  --mute: #5d5d66;
  --line: rgba(12, 12, 15, .13);
  --accent: #0000fe;
  --accent-text: #0000fe;
  --on-accent: #ffffff;
  --focus: #0000fe;
  --serif: "Instrument Serif", "Times New Roman", serif;
  --sans: "Schibsted Grotesk", system-ui, sans-serif;
  --nav-h: 46px;
  --ease: cubic-bezier(.2, .7, .2, 1);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --paper: #0a0a0f; --ink: #efeee9; --mute: #9b9ba6;
    --line: rgba(239, 238, 233, .14); --accent-text: #7a7aff; --focus: #7a7aff;
  }
}
:root[data-theme="dark"] {
  --paper: #0a0a0f; --ink: #efeee9; --mute: #9b9ba6;
  --line: rgba(239, 238, 233, .14); --accent-text: #7a7aff; --focus: #7a7aff;
}
/* Contact is the one full-bleed accent moment, in both themes */
:root[data-route="contact"] {
  --paper: #0000fe; --ink: #f4f3ee; --mute: #cfcfff;
  --line: rgba(244, 243, 238, .28); --accent-text: #ffffff; --focus: #ffffff;
}

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
  margin: 0; background: var(--paper); color: var(--ink);
  font: 400 15px/1.5 var(--sans);
  transition: background-color .5s var(--ease), color .5s var(--ease);
  overflow-x: hidden;
}
img { display: block; max-width: 100%; height: auto; }
a { color: inherit; }
button { font: inherit; color: inherit; background: none; border: 0; padding: 0; }
a, button, summary, label[for] { cursor: pointer; }
button:disabled { cursor: not-allowed; }
:focus-visible { outline: 2px solid var(--focus); outline-offset: 3px; }
::selection { background: var(--accent); color: var(--on-accent); }
[hidden] { display: none !important; }
main:focus { outline: none; }

.skip { position: fixed; left: 12px; top: -60px; z-index: 100; background: var(--ink); color: var(--paper); padding: 10px 14px; transition: top .2s; }
.skip:focus { top: 8px; }

/* six-column hairline grid */
.gridlines {
  position: fixed; inset: 0; z-index: 0; pointer-events: none;
  background-image: linear-gradient(to right, var(--line) 1px, transparent 1px);
  background-size: calc(100% / 6) 100%;
  border-right: 1px solid var(--line);
}
.js .gridlines { animation: draw calc(1.3s * var(--spd, 1)) var(--ease) both; }
@keyframes draw { from { clip-path: inset(0 0 100% 0); } to { clip-path: inset(0); } }

.g { display: grid; grid-template-columns: repeat(6, 1fr); }
.g > * { margin-inline: 6px; min-width: 0; }

main, .foot { position: relative; z-index: 1; }

/* nav */
.nav { position: fixed; inset: 0 0 auto 0; height: var(--nav-h); z-index: 30; background: var(--paper); transition: background-color .5s var(--ease); }
.nav__g { height: 100%; align-items: center; font-size: 13px; font-weight: 500; }
.nav__logo { grid-column: 1 / 3; text-decoration: none; }
.nav__links { display: contents; }
.nav__links a { position: relative; text-decoration: none; justify-self: start; margin-inline: 6px; padding: 12px 0; }
.nav__links a:nth-child(1) { grid-column: 3; }
.nav__links a:nth-child(2) { grid-column: 4; }
.nav__links a:nth-child(3) { grid-column: 5; }
.nav__links a::after { content: ""; position: absolute; left: 0; right: 0; bottom: 9px; height: 2px; background: var(--accent-text); transform: scaleX(0); transform-origin: left; transition: transform .35s var(--ease); }
.nav__links a:hover::after, .nav__links a[aria-current="page"]::after { transform: scaleX(1); }
.nav__clock { grid-column: 6; grid-row: 1; justify-self: end; background: var(--ink); color: var(--paper); font-size: 12px; font-weight: 500; padding: 3px 8px; font-variant-numeric: tabular-nums; white-space: nowrap; font-family: var(--sans); }

.theme { position: fixed; right: 12px; bottom: 12px; z-index: 40; width: 44px; height: 44px; display: grid; place-items: center; background: var(--ink); color: var(--paper); transition: background-color .2s, color .2s; }
.theme:hover { background: var(--accent); color: var(--on-accent); }

.follow { position: fixed; left: 0; top: 0; z-index: 50; pointer-events: none; background: var(--accent); color: var(--on-accent); font-size: 13px; font-weight: 500; padding: 7px 12px; opacity: 0; transform: translate3d(-100px, -100px, 0); transition: opacity .2s; white-space: nowrap; }
.follow.on { opacity: 1; }

/* reveal */
.js .rv { opacity: 0; transform: translateY(14px); transition: opacity calc(.8s * var(--spd, 1)) var(--ease), transform calc(.8s * var(--spd, 1)) var(--ease); }
.js .rv.in { opacity: 1; transform: none; }

/* masked line reveal for big type */
.ln { display: block; overflow: hidden; padding-bottom: .06em; }
.ln > span { display: block; }
.js .ln > span { transform: translateY(108%); transition: transform calc(1.1s * var(--spd, 1)) var(--ease); }
.js .is-in .ln > span { transform: none; }
.js .is-in .ln--2 > span { transition-delay: .12s; }

.view { min-height: 100svh; padding-top: var(--nav-h); }

/* HERO */
.hero { padding-top: clamp(28px, 6vh, 64px); }
.hero__name { margin: 0; font: 400 calc(clamp(56px, 13vw, 260px) * var(--name-scale, 1))/.86 var(--serif); letter-spacing: -.025em; padding-inline: 6px; }
.hero__name em { color: var(--accent-text); font-style: italic; }
.ln--2 { padding-left: calc(100% / 3 * 1); }
.hero__row { margin-top: clamp(20px, 4vw, 56px); align-items: start; }
.hero__meta { grid-column: 1 / 3; font-size: 13px; color: var(--mute); max-width: 26ch; margin-top: 0; margin-bottom: 0; }
.hero__photo { grid-column: 3 / 5; margin-block: 0; margin-inline: 6px; overflow: hidden; background: #111; }
.hero__photo img { width: 100%; height: auto; aspect-ratio: 2 / 3; object-fit: cover; }
.js .hero__photo { clip-path: inset(100% 0 0 0); transition: clip-path calc(1.3s * var(--spd, 1)) var(--ease) .25s; }
.js .is-in .hero__photo { clip-path: inset(0); }
.hero__txt { grid-column: 5 / 7; align-self: end; display: grid; gap: 20px; }
.lede { margin: 0; font: 400 clamp(22px, 2.5vw, 38px)/1.12 var(--serif); letter-spacing: -.005em; }
.textlink { justify-self: start; font-size: 14px; font-weight: 500; text-decoration: none; border-bottom: 2px solid var(--accent-text); padding-bottom: 2px; transition: color .2s; }
.textlink:hover { color: var(--accent-text); }
.textlink--inv:hover { color: var(--ink); opacity: .7; }

/* WORK */
.work { padding: clamp(96px, 18vh, 200px) 0 clamp(80px, 14vh, 160px); scroll-margin-top: var(--nav-h); }
.work__head { align-items: end; margin-bottom: clamp(40px, 8vh, 96px); }
.work__title { grid-column: 1 / 3; margin: 0; font: 400 clamp(40px, 6vw, 96px)/.9 var(--serif); letter-spacing: -.02em; }
.work__note { grid-column: 5 / 7; margin-block: 0; font-size: 13px; color: var(--mute); }

.rows { display: block; }
.row { display: block; text-decoration: none; position: relative; margin-bottom: var(--gap, 14vh); transition: opacity .35s var(--ease); }
.row__label { display: flex; gap: 10px; align-items: baseline; padding: 0 6px 8px; font-size: 12px; color: var(--mute); transition: color .2s; }
.row__label b { font-weight: 500; color: inherit; }
.row__tiles { align-items: start; }
.row:hover, .row:focus-visible { outline: 1px solid var(--accent-text); outline-offset: 8px; }
.row:hover .row__label, .row:focus-visible .row__label { color: var(--accent-text); }
@media (hover: hover) { .rows:has(.row:hover) .row:not(:hover) { opacity: .28; } }

/* tiles */
.tile { position: relative; overflow: hidden; aspect-ratio: var(--ar, 4 / 5); background: var(--bg, #ddd); color: var(--fg, #000); display: grid; place-items: center; container-type: inline-size; }
.tile img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: var(--pos, 50% 50%); transform-origin: var(--pos, 50% 50%); transform: scale(var(--z, 1)); transition: transform 1s var(--ease); }
.row:hover .tile img { transform: scale(calc(var(--z, 1) * 1.05)); }
.tile__word { font: 400 var(--fs, 20cqw)/.9 var(--serif); letter-spacing: -.02em; text-align: center; padding: 8cqw; }
.tile__word em { font-style: italic; }
.tile--stripes { background-image: repeating-linear-gradient(135deg, var(--fg) 0 var(--w, 7px), transparent var(--w, 7px) calc(var(--w, 7px) * 2)); }
.tile--dots { background-image: radial-gradient(var(--fg) 34%, transparent 36%); background-size: var(--w, 16px) var(--w, 16px); }
.tile--blocks::before, .tile--blocks::after { content: ""; position: absolute; }
.tile--blocks::before { width: 54%; height: 46%; left: 10%; top: 12%; background: var(--fg); }
.tile--blocks::after { width: 42%; height: 42%; right: 10%; bottom: 12%; background: var(--fg2, var(--fg)); }
.tile--ring::before { content: ""; width: 64%; aspect-ratio: 1; border-radius: 50%; background: var(--fg); }
.tile--ring::after { content: ""; position: absolute; width: 28%; aspect-ratio: 1; border-radius: 50%; background: var(--bg); }
.tile--ui .ui { width: 46%; aspect-ratio: 9 / 17; background: var(--fg); border-radius: 12cqw; padding: 5cqw 4cqw; display: grid; align-content: start; gap: 3.5cqw; }
.tile--ui .ui i { display: block; height: 7cqw; background: var(--bg); border-radius: 2cqw; opacity: .9; }
.tile--ui .ui i:first-child { height: 15cqw; opacity: 1; }
.tile--ui .ui i:nth-child(3) { width: 62%; }
.tile--ui .ui i:last-child { background: var(--fg2, var(--bg)); height: 9cqw; margin-top: auto; }

/* ABOUT */
.about { padding-top: clamp(20px, 4vh, 40px); padding-bottom: 80px; }
.about__head { align-items: baseline; margin-bottom: 8px; }
.about__title { grid-column: 1 / 3; margin: 0; font: 400 clamp(40px, 6vw, 96px)/.9 var(--serif); letter-spacing: -.02em; }
.about__hint { grid-column: 5 / 7; margin-block: 0; font-size: 13px; color: var(--mute); }

.stage { position: relative; }
.stage__photo { margin: 0 0 0 calc(100% / 3 + 6px); width: calc(100% / 3 - 12px); overflow: hidden; background: #111; }
.stage__photo img { width: 100%; height: auto; aspect-ratio: 2 / 3; object-fit: cover; }
.js .stage__photo { clip-path: inset(0 0 100% 0); transition: clip-path calc(1.2s * var(--spd, 1)) var(--ease); }
.js .is-in .stage__photo { clip-path: inset(0); }
.stage__lines { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; overflow: visible; }
.stage__lines path { fill: none; stroke: var(--ink); stroke-width: 1; transition: stroke .2s; }
.js .stage__lines path { stroke-dasharray: var(--len); stroke-dashoffset: var(--len); transition: stroke-dashoffset calc(1s * var(--spd, 1)) var(--ease) var(--d, 0s), stroke .2s; }
.js .is-in .stage__lines path { stroke-dashoffset: 0; }
.stage__lines path.on { stroke: var(--accent-text); stroke-width: 1.5; }

.dot { position: absolute; width: 44px; height: 44px; margin: -22px 0 0 -22px; display: grid; place-items: center; z-index: 3; }
.dot i { width: 11px; height: 11px; border-radius: 50%; background: var(--ink); box-shadow: 0 0 0 3px var(--paper); transition: transform .25s var(--ease), background-color .2s; }
.js .dot i { transform: scale(0); }
.js .is-in .dot i { transform: scale(1); transition-delay: .6s; }
.dot:hover i, .dot.on i { background: var(--accent); transform: scale(1.5); transition-delay: 0s; }

.lab { position: absolute; top: var(--t); width: calc(100% / 3); }
.lab--l { left: 0; padding-left: 6px; padding-right: 36px; }
.lab--r { left: calc(100% / 3 * 2); padding-right: 6px; padding-left: 36px; }
.lab__in { display: grid; gap: 6px; transition: color .2s; }
.lab__cap { font-size: 12px; color: var(--mute); }
.lab__txt { margin: 0; font: 400 clamp(17px, 1.6vw, 24px)/1.15 var(--serif); }
.lab__btn { justify-self: start; border: 1px solid var(--ink); padding: 8px 14px; font-size: 13px; font-weight: 500; text-decoration: none; background: var(--paper); transition: background-color .2s, color .2s, border-color .2s; }
.lab__btn:hover, .lab.on .lab__btn { background: var(--accent); color: var(--on-accent); border-color: var(--accent); }
.lab.on .lab__cap { color: var(--accent-text); }
.lab.on .lab__txt { color: var(--accent-text); }
.js .lab { opacity: 0; transition: opacity .6s var(--ease) 1.1s; }
.js .is-in .lab { opacity: 1; }

/* CONTACT */
.contact { padding: clamp(24px, 6vh, 64px) 0 100px; }
.contact__g { align-items: start; row-gap: 28px; }
.contact__title { grid-column: 1 / 5; grid-row: 1; margin: 0; font: 400 clamp(88px, 21vw, 380px)/.84 var(--serif); letter-spacing: -.03em; }
.contact__title em { font-style: italic; }
.contact__lede { grid-column: 1 / 3; grid-row: 2; margin-block: 0; font: 400 clamp(20px, 2vw, 30px)/1.14 var(--serif); max-width: 24ch; }
.contact__actions { grid-column: 3 / 5; grid-row: 2; display: grid; gap: 18px; justify-items: start; }
.bigbtn { display: inline-block; background: var(--ink); color: var(--paper); font-weight: 500; font-size: 16px; text-decoration: none; padding: 18px 26px; transition: transform .3s var(--ease), background-color .2s; }
.bigbtn:hover { transform: translate(-4px, -4px); box-shadow: 4px 4px 0 var(--ink); background: var(--paper); color: var(--ink); outline: 1px solid var(--ink); }
.contact__photo { grid-column: 5 / 7; grid-row: 1 / 3; margin-block: 0; background: var(--accent); overflow: hidden; }
.contact__photo img { width: 100%; aspect-ratio: 2 / 3; object-fit: cover; filter: grayscale(1) contrast(1.25); mix-blend-mode: lighten; }

/* PROJECT */
.proj { padding: clamp(24px, 5vh, 56px) 0 40px; }
.proj__g { align-items: start; }
.proj__meta { grid-column: 1 / 3; position: sticky; top: calc(var(--nav-h) + 24px); display: grid; gap: 18px; font-size: 13px; }
.proj__meta dl { margin: 0; display: grid; gap: 14px; }
.proj__meta dt { color: var(--mute); font-size: 12px; }
.proj__meta dd { margin: 2px 0 0; }
.proj__title { margin: 0 0 8px; font: 400 clamp(40px, 5.4vw, 88px)/.9 var(--serif); letter-spacing: -.02em; }
.proj__body { margin: 0; max-width: 40ch; }
.proj__tag { display: inline-block; justify-self: start; border: 1px solid var(--line); padding: 4px 10px; font-size: 12px; color: var(--mute); }
.proj__tag--real { color: var(--accent-text); border-color: var(--accent-text); }
.proj__tiles { grid-column: 3 / 7; display: grid; gap: 12px; }
.proj__nav { margin-top: clamp(64px, 12vh, 140px); padding-bottom: 20px; align-items: center; font-size: 13px; font-weight: 500; }
.proj__nav a { text-decoration: none; padding: 10px 0; }
.proj__nav a:hover { color: var(--accent-text); }
.proj__prev { grid-column: 1; }
.proj__all { grid-column: 3 / 5; }
.proj__next { grid-column: 6; justify-self: end; }

.foot { padding: 28px 0 76px; font-size: 12px; color: var(--mute); }
.foot__g { align-items: center; }
.foot__copy { grid-column: 1 / 4; margin-block: 0; }
.foot__top { grid-column: 6; justify-self: end; font-size: 12px; color: inherit; padding: 10px 0; text-decoration: underline; text-underline-offset: 3px; }
.foot__top:hover { color: var(--ink); }

/* INTERACTION LAYER */
.progress { position: fixed; left: 0; right: 0; top: var(--nav-h); height: 2px; z-index: 31; background: var(--accent-text); transform: scaleX(var(--p, 0)); transform-origin: left; pointer-events: none; }

.hero__photo { position: relative; touch-action: pan-y; }
.hero__photo.lens-on { cursor: crosshair; }
.lens { position: absolute; inset: 0; background: var(--accent); clip-path: circle(var(--r, 0px) at var(--x, 50%) var(--y, 50%)); pointer-events: none; }
.lens img { width: 100%; height: 100%; object-fit: cover; filter: grayscale(1) contrast(1.3); mix-blend-mode: lighten; }
.hero__hint { position: absolute; left: 10px; bottom: 10px; font-size: 12px; font-weight: 500; background: var(--paper); color: var(--ink); padding: 3px 8px; transition: opacity .3s; pointer-events: none; }
.hero__photo.lens-on .hero__hint { opacity: 0; }

.ch { display: inline-block; will-change: transform; }

.filters-row { align-items: center; margin-bottom: clamp(32px, 6vh, 64px); }
.filters { grid-column: 1 / 6; display: flex; flex-wrap: wrap; gap: 8px; }
.chip { border: 1px solid var(--line); padding: 8px 14px; font-size: 13px; font-weight: 500; min-height: 40px; transition: background-color .2s, color .2s, border-color .2s; }
.chip:hover { border-color: var(--accent-text); color: var(--accent-text); }
.chip[aria-pressed="true"] { background: var(--ink); color: var(--paper); border-color: var(--ink); }
.filters__count { grid-column: 6; justify-self: end; margin-block: 0; font-size: 12px; color: var(--mute); font-variant-numeric: tabular-nums; }

.row .tile { translate: calc(var(--px, 0) * var(--k, 0) * 9px) 0; transition: translate .5s var(--ease); }
.row.out { opacity: 0; transform: translateY(12px); }

.dot i { scale: calc(1 + var(--near, 0) * .9); }

.tilebtn { display: block; padding: 0; text-align: left; }
.tilebtn .tile { transition: transform .5s var(--ease); }
.tilebtn:hover .tile { transform: scale(.985); }

.lb { border: 0; padding: 0; background: transparent; max-width: none; max-height: none; width: 100vw; height: 100svh; color: var(--ink); }
.lb[open] { display: grid; grid-template-rows: 1fr auto; place-items: center; }
.lb::backdrop { background: color-mix(in srgb, var(--paper) 94%, transparent); }
.lb__stage { display: grid; place-items: center; padding: 56px 16px 0; width: 100%; min-height: 0; }
.lb__stage .tile { max-width: 100%; box-shadow: none; }
.lb__x { position: absolute; top: 12px; right: 12px; background: var(--ink); color: var(--paper); padding: 10px 16px; font-size: 13px; font-weight: 500; min-height: 44px; }
.lb__x:hover { background: var(--accent); color: var(--on-accent); }
.lb__bar { display: flex; gap: 24px; align-items: center; justify-content: center; padding: 16px 16px 24px; font-size: 13px; font-weight: 500; font-variant-numeric: tabular-nums; }
.lb__bar button { padding: 10px 16px; min-height: 44px; border: 1px solid var(--line); }
.lb__bar button:hover { border-color: var(--accent-text); color: var(--accent-text); }

/* MOBILE: three columns */
@media (max-width: 760px) {
  :root { --nav-h: 76px; }
  .gridlines { background-size: calc(100% / 3) 100%; }
  .nav__g { grid-template-columns: repeat(3, 1fr); grid-template-rows: 1fr 1fr; align-items: center; }
  .nav__logo { grid-column: 1 / 3; grid-row: 1; }
  .nav__clock { grid-column: 3; grid-row: 1; }
  .nav__links a:nth-child(1) { grid-column: 1; grid-row: 2; }
  .nav__links a:nth-child(2) { grid-column: 2; grid-row: 2; }
  .nav__links a:nth-child(3) { grid-column: 3; grid-row: 2; }
  .nav__g { align-content: center; }

  .g { grid-template-columns: repeat(3, 1fr); }
  .hero__name { font-size: calc(18vw * var(--name-scale, 1)); }
  .ln--2 { padding-left: 6%; }
  .hero__row { row-gap: 28px; }
  .hero__meta { grid-column: 1 / 4; max-width: none; }
  .hero__photo { grid-column: 1 / 4; }
  .hero__txt { grid-column: 1 / 4; }
  .work__title { grid-column: 1 / 3; }
  .work__note { grid-column: 1 / 4; grid-row: 2; margin-top: 12px; }
  .work__head { align-items: start; }
  .row { margin-bottom: 10vh; }
  .row__tiles { grid-template-columns: repeat(3, 1fr); row-gap: 12px; }
  .row__tiles > .tile { grid-column: auto !important; }
  .row__tiles > .tile:nth-child(3n + 1):nth-last-child(1) { grid-column: 1 / 3 !important; }

  .filters { grid-column: 1 / 4; }
  .filters__count { grid-column: 1 / 4; grid-row: 2; justify-self: start; margin-top: 12px; }
  .about__title { grid-column: 1 / 3; }
  .about__hint { grid-column: 1 / 4; grid-row: 2; margin-top: 8px; }
  .stage { counter-reset: n; padding: 0 6px; display: grid; gap: 20px; }
  .stage__photo { margin: 0; width: 100%; position: relative; }
  .stage__lines { display: none; }
  .dot { counter-increment: n; }
  .dot i { width: 24px; height: 24px; display: grid; place-items: center; background: var(--accent); }
  .dot i::before { content: counter(n); color: var(--on-accent); font-size: 12px; font-weight: 600; font-style: normal; }
  .lab { position: static; width: auto; padding: 0 !important; counter-increment: m; }
  .lab__cap::before { content: counter(m) ". "; }
  .lab__txt { font-size: 22px; }
  .lab.on { outline: 1px solid var(--accent-text); outline-offset: 8px; }

  .contact__title { grid-column: 1 / 4; font-size: 30vw; }
  .contact__lede { grid-column: 1 / 4; grid-row: 3; max-width: none; }
  .contact__actions { grid-column: 1 / 4; grid-row: 4; }
  .contact__photo { grid-column: 2 / 4; grid-row: 2; }

  .proj__meta { grid-column: 1 / 4; position: static; }
  .proj__tiles { grid-column: 1 / 4; margin-top: 28px; }
  .proj__prev { grid-column: 1; }
  .proj__all { grid-column: 2; justify-self: center; }
  .proj__next { grid-column: 3; }
  .foot__copy { grid-column: 1 / 3; }
  .foot__top { grid-column: 3; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition-duration: .01ms !important; transition-delay: 0s !important; }
  .js .rv, .js .ln > span, .js .hero__photo, .js .stage__photo, .js .lab { opacity: 1; transform: none; clip-path: none; }
  .js .stage__lines path { stroke-dashoffset: 0; }
  .js .dot i { transform: scale(1); }
  .lens, .progress { display: none; }
}

/* dashboard-driven switches (set on <html> by main.js) */
html[data-lines="off"] .gridlines { display: none; }
html[data-stagger="off"] .ln--2 { padding-left: 0; }
@media (hover: hover) { html[data-dim="off"] .rows:has(.row:hover) .row:not(:hover) { opacity: 1; } }
html[data-intro="off"] .ln > span, html[data-intro="off"] .hero__photo, html[data-intro="off"] .stage__photo,
html[data-intro="off"] .lab, html[data-intro="off"] .rv { transition: none !important; transform: none !important; clip-path: none !important; opacity: 1 !important; }
html[data-intro="off"] .gridlines { animation: none; }
html[data-intro="off"] .stage__lines path { stroke-dashoffset: 0 !important; transition: none !important; }
html[data-intro="off"] .dot i { transform: scale(1) !important; transition: none !important; }
.empty { padding: 40px 6px; font: 400 clamp(22px, 2.4vw, 34px)/1.15 var(--serif); max-width: 22ch; }
.empty small { display: block; margin-top: 10px; font: 400 13px/1.4 var(--sans); color: var(--mute); }

/* HERO MOTION VARIANTS: <html data-hero="rise|blinds|ink|scan|drift">.
   Intro keyframes run only until .hero gets .played, so live edits never replay them. */
.hero__name .ln { white-space: nowrap; }
.blinds { position: absolute; inset: 0; display: none; pointer-events: none; }
.blinds i { flex: 1; background: var(--paper); transform-origin: top; transform: scaleY(0); margin-right: -1px; }

/* blinds: eight paper strips retract from the centre out */
html[data-hero="blinds"] .blinds { display: flex; }
html.js[data-hero="blinds"] .hero__photo { clip-path: none; transition: none; }
html.js[data-hero="blinds"] #v-home:not(.is-in) .blinds i { transform: scaleY(1); }
html[data-hero="blinds"] .is-in .hero:not(.played) .blinds i { animation: blindOut calc(1s * var(--spd, 1)) var(--ease) calc((.2s + var(--j) * .09s) * var(--spd, 1)) backwards; }
@keyframes blindOut { from { transform: scaleY(1); } to { transform: scaleY(0); } }

/* ink: letters climb in one by one, a blue bar sweeps through the italic line */
html.js[data-hero="ink"] .hero__name .ln > span { transform: none; transition: none; }
html.js[data-hero="ink"] .hero__name .ch { transform: translateY(112%); }
html.js[data-hero="ink"] .is-in .hero__name .ch { transform: none; }
html[data-hero="ink"] .is-in .hero:not(.played) .hero__name .ch { animation: chIn calc(.95s * var(--spd, 1)) var(--ease) calc((.1s + var(--i) * .045s) * var(--spd, 1)) backwards; }
@keyframes chIn { from { transform: translateY(112%); } to { transform: none; } }
html.js[data-hero="ink"] .hero__photo { clip-path: inset(0 100% 0 0); transition: clip-path calc(1.1s * var(--spd, 1)) var(--ease) calc(.5s * var(--spd, 1)); }
html.js[data-hero="ink"] .is-in .hero__photo { clip-path: inset(0); }
html[data-hero="ink"] .hero__name .ln--2 > span { position: relative; width: fit-content; }
html[data-hero="ink"] .hero__name .ln--2 > span::after { content: ""; position: absolute; inset: 0; background: var(--accent); transform: scaleX(0); transform-origin: left; pointer-events: none; }
html[data-hero="ink"] .is-in .hero:not(.played) .hero__name .ln--2 > span::after { animation: inkBar calc(1.3s * var(--spd, 1)) cubic-bezier(.7, 0, .2, 1) calc(.55s * var(--spd, 1)) both; }
@keyframes inkBar {
  0% { transform: scaleX(0); transform-origin: left; }
  48% { transform: scaleX(1); transform-origin: left; }
  52% { transform: scaleX(1); transform-origin: right; }
  100% { transform: scaleX(0); transform-origin: right; }
}

/* scan: a blue duotone proof of the photo is wiped away by a scan line */
html.js[data-hero="scan"] .hero__photo { clip-path: none; transition: none; }
html.js[data-hero="scan"] #v-home:not(.is-in) .lens { clip-path: inset(0); }
html[data-hero="scan"] .is-in .hero:not(.played) .lens { animation: scanWipe calc(1.5s * var(--spd, 1)) cubic-bezier(.65, 0, .25, 1) calc(.3s * var(--spd, 1)) backwards; }
@keyframes scanWipe { from { clip-path: inset(0); } to { clip-path: inset(100% 0 0 0); } }
html[data-hero="scan"] .hero__photo::after { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 2px; background: var(--accent-text); opacity: 0; pointer-events: none; }
html[data-hero="scan"] .is-in .hero:not(.played) .hero__photo::after { animation: scanLine calc(1.5s * var(--spd, 1)) cubic-bezier(.65, 0, .25, 1) calc(.3s * var(--spd, 1)) backwards; }
@keyframes scanLine { 0% { top: 0; opacity: 1; } 98% { opacity: 1; } 100% { top: calc(100% - 2px); opacity: 0; } }

/* drift: after the rise, the two name lines slide apart and the photo lags as you scroll */
html[data-hero="drift"] .hero__name .ln:first-child { translate: calc(var(--dp, 0) * -14vw) 0; }
html[data-hero="drift"] .hero__name .ln--2 { translate: calc(var(--dp, 0) * 14vw) 0; }
html[data-hero="drift"] .hero__meta { translate: 0 calc(var(--dp, 0) * -24px); }
html[data-hero="drift"] .hero__photo { translate: 0 calc(var(--dp, 0) * -56px); }
html[data-hero="drift"] .hero__txt { translate: 0 calc(var(--dp, 0) * 36px); }

/* intro off + reduced motion: no covers, no hidden letters, no drift */
html[data-intro="off"] .hero .ch { transform: none !important; animation: none !important; }
html[data-intro="off"] .blinds { display: none !important; }
html[data-intro="off"] .hero__name .ln--2 > span::after, html[data-intro="off"] .hero__photo::after { display: none; }
html[data-intro="off"] #v-home:not(.is-in) .lens { clip-path: circle(0 at 50% 50%) !important; }
html[data-intro="off"] .hero .lens { animation: none !important; }
@media (prefers-reduced-motion: reduce) {
  .hero .ch { transform: none !important; }
  .blinds, .hero__name .ln--2 > span::after, .hero__photo::after { display: none !important; }
  html[data-hero] .hero, html[data-hero] .hero * { translate: none !important; }
  html.js[data-hero="ink"] .hero__photo { clip-path: none; }
  #v-home:not(.is-in) .lens { clip-path: circle(0 at 50% 50%) !important; }
}

/* HERO PHOTO EFFECTS (toggled from the dashboard) */
.hero__photo .trail { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
.xhair { position: absolute; inset: 0; pointer-events: none; opacity: 0; transition: opacity .2s; mix-blend-mode: difference; }
.xhair i { position: absolute; left: 0; top: 0; background: #fff; }
.xhair .xh { width: 100%; height: 1px; }
.xhair .xv { height: 100%; width: 1px; }
.xr { position: absolute; left: 0; top: 0; pointer-events: none; opacity: 0; transition: opacity .2s; background: var(--accent); color: var(--on-accent); font-size: 12px; font-weight: 500; padding: 3px 8px; white-space: nowrap; font-variant-numeric: tabular-nums; }
.hero__photo.xh-on .xhair, .hero__photo.xh-on .xr { opacity: 1; }
.hero__photo[data-xh="off"] .xhair, .hero__photo[data-xh="off"] .xr { display: none; }
.hero__photo[data-par="on"] > img, .hero__photo[data-par="on"] .lens img { scale: 1.08; translate: calc(var(--mx, 0) * -14px) calc(var(--my, 0) * -14px); }
.develop { position: absolute; inset: 0; z-index: 5; width: 100%; height: 100%; opacity: 0; cursor: pointer; }
.develop:focus-visible { opacity: 1; outline: 2px solid var(--focus); outline-offset: -4px; }
.develop[aria-pressed="true"] { cursor: zoom-out; }
@media (prefers-reduced-motion: reduce) {
  .hero__photo .trail, .xhair, .xr, .develop { display: none !important; }
  .hero__photo[data-par="on"] > img, .hero__photo[data-par="on"] .lens img { scale: none; translate: none; }
}

/* published content: hide the default text until content.json answers, so it never flashes */
html.loading #main, html.loading .foot { opacity: 0; }
html #main, html .foot { transition: opacity .25s; }
