/* The homepage gallery hero (Nov 14 2026). Everything is scoped to .gx or .hero.gx-on so nothing else on the site moves.
   templates/gallery.html is the markup, js/gallery.js the drawing. Without WebGL the header loses .gx-on and the photo hero shows. */
.hero.gx-on{height:100vh;height:100svh;min-height:620px;max-height:1240px;background:#efece6;color:#fff}
.hero.gx-on .hero__slide,.hero.gx-on .hero__film,.hero.gx-on .hero__scrim{display:none}
.hero.gx-on .hero__body{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;margin:0;padding:0}
.hero.gx-on>.nav{position:relative;z-index:8}
.gx{display:none}
.hero.gx-on .gx{display:block;position:absolute;inset:0;z-index:0;overflow:hidden;font-family:var(--sans);color:var(--ink);
  background:radial-gradient(ellipse 70% 62% at 50% 44%,#fbf9f4 0%,#f5f2ec 50%,#e6e1d7 100%)}
.gx-wall{position:absolute;left:0;right:0;top:0;height:76%;pointer-events:none;will-change:height;
  background:radial-gradient(ellipse 62% 78% at 50% 46%,#2b3f5c 0%,#1e2e46 46%,#111b2b 100%);box-shadow:0 10px 22px -8px rgba(10,16,30,.28)}
.gx-wall:after{content:"";position:absolute;left:0;right:0;bottom:0;height:3px;background:linear-gradient(180deg,#d9bb74 0%,#a8843f 60%,#6f5424 100%)}
.gx-night{position:absolute;inset:0;opacity:0;transition:opacity 1.4s ease;pointer-events:none;background:radial-gradient(ellipse 46% 58% at 50% 38%,#232a36 0%,#141922 48%,#0a0d12 100%)}
.hero.gx-release .gx-night{opacity:1}
.gx-gl{position:absolute;inset:0;width:100%;height:100%;display:block;touch-action:pan-y;cursor:grab;opacity:0;transition:opacity .9s ease}
.hero.gx-ready .gx-gl{opacity:1}
.gx-gl.on-card{cursor:pointer}
.gx-gl.dragging{cursor:grabbing}
.gx-vignette{position:absolute;inset:0;z-index:4;pointer-events:none;opacity:0;transition:opacity .8s ease .2s;background:linear-gradient(0deg,rgba(8,10,14,.72) 0%,rgba(8,10,14,.18) 46%,rgba(8,10,14,0) 64%),linear-gradient(180deg,rgba(8,10,14,.45),rgba(8,10,14,0) 18%)}
.hero.gx-viewing .gx-vignette{opacity:1}
.gx-ui{position:absolute;z-index:5;transition:opacity .6s ease,color 1.2s ease}
.hero.gx-viewing .gx-hide-on-view{opacity:0;pointer-events:none}
.gx p{margin:0}
.gx-top{left:var(--gutter);right:var(--gutter);top:126px;opacity:0;pointer-events:none;color:var(--paper,#fbf9f4)}
.hero.gx-release .gx-top{opacity:1}
.gx-eyebrow{margin:0 0 12px!important;font-size:12px;font-weight:500;letter-spacing:.24em;text-transform:uppercase;color:var(--gold-lite)}
.gx-title{font-family:var(--serif);font-weight:400;font-size:56px;line-height:1.02;letter-spacing:-.015em;max-width:12ch}
.gx-sub{margin-top:10px!important;font-family:var(--serif);font-size:19px;opacity:.82}
.gx-ctrls{left:var(--gutter);right:var(--gutter);top:0;display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap;will-change:transform;color:#fbf9f4}
.gx-motto{font-family:var(--serif);font-size:24px;line-height:1;letter-spacing:-.005em;color:#fbf9f4}
.gx-motto em{font-style:italic;color:var(--gold-lite)}
.gx-galline{display:flex;align-items:center;gap:14px;font-size:11.5px;font-weight:500;letter-spacing:.2em;text-transform:uppercase}
.gx-sep{color:rgba(251,249,244,.32);letter-spacing:0}
.gx-viewall{color:inherit;text-decoration:underline;text-underline-offset:7px;text-decoration-color:var(--gold-lite)}
.gx-viewall:hover{color:var(--gold-lite)}
.hero.gx-release .gx-ctrls,.hero.gx-release .gx-sold{opacity:0;pointer-events:none}
.gx-sold{left:var(--gutter);right:var(--gutter);top:0;display:flex;align-items:center;gap:14px;pointer-events:none;will-change:transform}
.gx-sold:before{content:"";width:28px;height:2px;background:#1e2e46;flex:none}
.gx-k{font-size:10.5px;font-weight:500;letter-spacing:.2em;text-transform:uppercase;color:var(--ink)}
.gx-d{font-family:var(--serif);font-style:italic;font-size:15px;color:var(--grey)}
.gx-sold:after{content:"";flex:1;height:1px;background:#d8cfbe}
.gx-panel{left:var(--gutter);bottom:56px;max-width:560px;opacity:0;transform:translateY(16px);pointer-events:none;transition:opacity .7s ease .35s,transform .7s ease .35s;color:#fbf9f4}
.hero.gx-viewing .gx-panel{opacity:1;transform:none;pointer-events:auto}
.gx-pname{font-family:var(--serif);font-weight:400;font-size:64px;line-height:1;letter-spacing:-.015em;text-shadow:0 2px 30px rgba(0,0,0,.35)}
.gx-facts{margin-top:14px!important;font-family:var(--serif);font-size:20px;text-shadow:0 1px 18px rgba(0,0,0,.45)}
.gx-price{margin-top:16px!important;font-family:var(--serif);font-size:36px;color:var(--gold-lite);text-shadow:0 1px 18px rgba(0,0,0,.45)}
.gx-credit{margin-top:10px!important;font-size:10.5px;font-weight:500;letter-spacing:.2em;text-transform:uppercase;color:rgba(251,249,244,.86)}
.gx-pressline{margin-top:12px!important;max-width:520px;font-family:var(--serif);font-style:italic;font-size:17px;color:rgba(251,249,244,.9)}
.gx-pressline:before{content:"In the press  ";font-family:var(--sans);font-style:normal;font-size:10.5px;font-weight:500;letter-spacing:.2em;text-transform:uppercase;color:var(--gold-lite)}
.gx-pressline:empty,.gx-credit:empty,.gx-price:empty,.gx-facts:empty{display:none}
.gx-row{display:flex;flex-wrap:wrap;align-items:center;gap:22px;margin-top:24px}
.gx-back{background:none;border:0;padding:0;color:#fbf9f4;font:500 12px/1 var(--sans);letter-spacing:.22em;text-transform:uppercase;text-decoration:underline;text-underline-offset:7px;cursor:pointer}
.gx-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);margin:0;padding:0}
.gx a:focus-visible,.gx button:focus-visible{outline:2px solid var(--gold);outline-offset:3px}
@media (max-width:900px){
  .gx-title{font-size:38px}.gx-top{top:84px}.gx-pname{font-size:40px}.gx-panel{bottom:40px;right:20px}
  .gx-d{display:none}.gx-ctrls{gap:8px}.gx-motto{font-size:19px}
  .hero.gx-on{height:min(100svh,740px);min-height:600px}
}
