/* Mona Sans, served from this site (variable: weight 200–900, width 75–125%), in three subsets */
@font-face { font-family: "Mona Sans"; font-style: normal; font-weight: 200 900; font-stretch: 75% 125%; font-display: swap; src: url("../assets/fonts/mona-sans-latin.woff2") format("woff2"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: "Mona Sans"; font-style: normal; font-weight: 200 900; font-stretch: 75% 125%; font-display: swap; src: url("../assets/fonts/mona-sans-latin-ext.woff2") format("woff2"); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: "Mona Sans"; font-style: normal; font-weight: 200 900; font-stretch: 75% 125%; font-display: swap; src: url("../assets/fonts/mona-sans-vietnamese.woff2") format("woff2"); unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; }

/* TopLeft — the film's frame: tokens, the stage, the rooms, the nav and the chapter rail.
   Nothing here animates by time: every value that moves is written per frame from the scroll. */
:root {
  --font: "Mona Sans", ui-sans-serif, system-ui, sans-serif;
  --sf: -apple-system, "SF Pro Text", "SF Pro Display", system-ui, sans-serif;
  --sfr: ui-rounded, "SF Pro Rounded", -apple-system, system-ui, sans-serif;
  /* the page's ink is written per frame (light rooms → deep green-black, night rooms → mint-white) */
  --ink-rgb: 20, 33, 26;
  --ink: rgb(var(--ink-rgb));
  --soft: 0.8;
  --ink-2: rgba(var(--ink-rgb), 0.74);
  --ink-3: rgba(var(--ink-rgb), 0.6);
  --line: rgba(var(--ink-rgb), 0.13);
  --chip: rgba(var(--ink-rgb), 0.06);
  /* the segmented thumb is the brand green, never the CTA's black */
  --thumb: #2c8a4b;
  --thumb-ink: #ffffff;
  --brand: #4bbc6b;
  --brand-ink: #1f7a3f;
  --mint: #f3f7f3;
  --sage: #eaf2ec;
  --cream: #f6f1e0;
  --night: #0b1310;
  --q-green: #94e399;
  --q-yellow: #fee184;
  --q-red: #fe9092;
  color-scheme: light;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html { background: var(--mint); }
body { font-family: var(--font); color: var(--ink); background: var(--mint); -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; }
img { display: block; }
::selection { background: rgba(75, 188, 107, 0.32); color: inherit; }
:focus-visible { outline: 2px solid var(--brand-ink); outline-offset: 3px; border-radius: 8px; }
html { scrollbar-width: none; }
html::-webkit-scrollbar { display: none; }

.skip { position: fixed; left: 16px; top: -60px; z-index: 50; padding: 10px 16px; border-radius: 999px; background: var(--ink); color: #fff; }
.skip:focus { top: 16px; }
#runway { width: 1px; }
/* the words of the film, for screen readers and anyone without the film: a plain outline */
.sr { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; }

/* ——— nav ——— */
.nav {
  position: fixed; inset: 0 0 auto; z-index: 40; height: 68px; padding: 0 clamp(24px, 3.4vw, 56px);
  display: flex; align-items: center; gap: 22px; color: rgb(var(--nav-rgb, 20, 33, 26));
}
.nav-mark { display: inline-flex; align-items: center; gap: 9px; font-weight: 700; font-size: 15px; letter-spacing: -0.01em; opacity: 0.86; }
.nav-mark:hover { opacity: 1; }
.nav-logo { display: grid; grid-template-columns: 1fr 1fr; gap: 2px; width: 16px; height: 16px; }
.nav-logo i { border-radius: 3px; background: currentColor; opacity: 0.32; }
.nav-logo i:first-child { opacity: 1; background: var(--brand); }
.nav-sep { width: 1px; height: 18px; background: currentColor; opacity: 0.18; }
.nav-app { display: inline-flex; align-items: center; gap: 10px; font-weight: 720; font-size: 16px; letter-spacing: -0.01em; }
.nav-app img { width: 26px; height: 26px; border-radius: 7px; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.14); }
.nav-get { margin-left: auto; display: inline-flex; align-items: center; gap: 8px; height: 36px; padding: 0 16px; border-radius: 999px; font-size: 14px; font-weight: 640;
  color: rgb(var(--nav-rgb, 20, 33, 26)); background: rgba(var(--nav-rgb, 20, 33, 26), 0.08); box-shadow: inset 0 0 0 1px rgba(var(--nav-rgb, 20, 33, 26), 0.14); }
.nav-get:hover { background: rgba(var(--nav-rgb, 20, 33, 26), 0.13); }
.nav-get svg { width: 15px; height: 15px; }

/* ——— the stage ——— */
.stage { position: fixed; inset: 0; overflow: hidden; }
.rooms, .room, .gl, .glass-layer, .air, .words { position: absolute; inset: 0; }
.gl { z-index: 2; }
.glass-layer { z-index: 3; pointer-events: none; }
.air { z-index: 4; pointer-events: none; }
.words { z-index: 5; pointer-events: none; }
.words > * { pointer-events: auto; }

/* the HTML on a device's glass */
.glass { position: absolute; left: 0; top: 0; transform-origin: 0 0; overflow: hidden; visibility: hidden; contain: layout paint; backface-visibility: hidden; }
.glass-in { position: absolute; inset: 0; }
.glass-island { position: absolute; left: 0; top: 11px; z-index: 29; width: 126px; height: 37px; border-radius: 19px; background: #000; opacity: 0; pointer-events: none; }
.glass-punch { position: absolute; left: 0; top: 13px; z-index: 29; width: 12px; height: 12px; border-radius: 50%; background: #000; box-shadow: inset 0 0 0 1.5px #16171b; opacity: 0; pointer-events: none; }
.glass-duo .glass-crease { position: absolute; top: 0; bottom: 0; width: 14px; z-index: 28; pointer-events: none; }
.glass-duo-left .glass-crease { right: 0; background: linear-gradient(to left, rgba(0, 0, 0, 0.16), rgba(0, 0, 0, 0)); }
.glass-duo-right .glass-crease { left: 0; background: linear-gradient(to right, rgba(0, 0, 0, 0.16), rgba(0, 0, 0, 0)); }
.app-duo-half { right: auto; bottom: auto; }
.glass-sheen { position: absolute; inset: -10% -60%; pointer-events: none; z-index: 30; background: linear-gradient(112deg, transparent 40%, rgba(255, 255, 255, 0.08) 47%, rgba(255, 255, 255, 0.02) 52%, transparent 58%); }
.app { position: absolute; inset: 0; overflow: hidden; font-family: var(--sf); transform-origin: 0 0; }
.mp { position: absolute; left: 0; top: 0; transform-origin: 0 0; }

/* ——— rooms: each opens out of the device with a feathered iris (mask written per frame) ——— */
.room { visibility: hidden; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; }
.room > i, .room > b { position: absolute; inset: 0; }
.room-day { background: linear-gradient(172deg, #f5f8f4 0%, #eef4ef 52%, #f6f2e4 100%); visibility: visible; }
.room-day > i { background: radial-gradient(ellipse 52% 60% at 70% 46%, rgba(148, 227, 153, 0.2), transparent 70%), radial-gradient(ellipse 60% 40% at 0% 100%, rgba(254, 225, 132, 0.16), transparent 70%); }
/* the four corners: a wash of the corner in focus (its opacity and colour are set per frame) */
.room-corners { background: linear-gradient(172deg, #f5f8f4, #eff4ef 55%, #f6f2e4); }
.room-corners > i { background: radial-gradient(ellipse 50% 58% at 68% 50%, rgb(var(--wash, 148, 227, 153)), transparent 70%); opacity: var(--wash-a, 0.3); }
.room-capture { background: linear-gradient(170deg, #f1f7f1, #e6f2e8 60%, #f3f1e3); }
.room-capture > i { background: radial-gradient(ellipse 46% 60% at 70% 52%, rgba(52, 199, 89, 0.16), transparent 70%); }
/* horizons: the sky follows the horizon out, from morning to a night full of stars (--warm, --night per frame) */
.room-horizons { background: linear-gradient(176deg, #fbf7e8 0%, #f1f6ef 46%, #e9f1ea 100%); }
.room-horizons > i { background: radial-gradient(ellipse 120% 70% at 60% 105%, #f6c58e 0%, #f2d9b0 34%, rgba(246, 230, 200, 0) 72%), linear-gradient(180deg, #f3ead6, #f6e4c8 70%, #f3cfa2); opacity: var(--warm, 0); }
.room-horizons > b { background: radial-gradient(ellipse 110% 80% at 62% 112%, #1d3a33 0%, #0f1f1b 46%, #070d0c 100%); opacity: var(--night, 0); -webkit-mask-image: var(--nmask, none); mask-image: var(--nmask, none); }
.room-horizons canvas { position: absolute; inset: 0; width: 100%; height: 100%; opacity: var(--stars, 0); -webkit-mask-image: var(--nmask, none); mask-image: var(--nmask, none); }
.room-history { background: linear-gradient(170deg, #eef6ef, #e2efe5 60%, #eef2e6); }
.room-history > i { background: radial-gradient(ellipse 50% 60% at 30% 50%, rgba(152, 222, 190, 0.28), transparent 70%); }
.room-desk { background: linear-gradient(176deg, #f6f3ea 0%, #f1f3ec 50%, #eaf0ea 100%); }
.room-desk > i { background: radial-gradient(ellipse 55% 60% at 32% 46%, rgba(255, 255, 255, 0.7), transparent 70%), radial-gradient(ellipse 50% 50% at 100% 100%, rgba(148, 227, 153, 0.14), transparent 70%); }
.room-ahead { background: linear-gradient(172deg, #f2f6f1, #e9f1ea 55%, #f4f1e6); }
.room-ahead > i { background: radial-gradient(ellipse 52% 56% at 34% 50%, rgba(254, 225, 132, 0.14), transparent 70%); }
.room-menubar { background: linear-gradient(176deg, #f3f5f2, #ebf1ec 60%, #f2efe6); }
.room-menubar > b { background: radial-gradient(ellipse 90% 80% at 30% 40%, #18231e 0%, #0d1512 60%, #080d0b 100%); -webkit-mask-image: var(--dmask, none); mask-image: var(--dmask, none); }
.room-every { background: linear-gradient(172deg, #f4f7f3, #edf2ee 55%, #f5f1e4); }
.room-every > i { background: radial-gradient(ellipse 50% 56% at 66% 48%, rgba(255, 255, 255, 0.75), transparent 70%); }
.room-every > b { background: radial-gradient(ellipse 100% 80% at 60% 60%, #1a1d1f 0%, #0c0e10 70%); opacity: var(--tv, 0); }
.room-pricing { background: linear-gradient(172deg, #f6f3e6, #eff4ec 55%, #e9f1ea); }
.room-pricing > i { background: radial-gradient(ellipse 50% 55% at 36% 50%, rgba(148, 227, 153, 0.18), transparent 70%); }
.room-close { background: #f6f1e0; }
.room-close > i { background: radial-gradient(ellipse 60% 55% at 50% 42%, rgba(255, 255, 255, 0.85), transparent 70%); }

/* ——— the chapters, along the bottom ——— */
.rail {
  position: absolute; left: 50%; bottom: 18px; z-index: 6; transform: translateX(-50%);
  display: flex; gap: 20px; padding: 8px 14px; visibility: hidden; color: rgb(var(--rail-rgb, 20, 33, 26));
}
.rail button { position: relative; padding: 4px 0 8px; font-size: 12.5px; font-weight: 600; white-space: nowrap; opacity: 0.56; }
.rail button i { position: absolute; left: 0; right: 0; bottom: 0; height: 2px; border-radius: 1px; background: currentColor; transform-origin: 0 50%; transform: scaleX(0); }
.rail button[aria-current="true"], .rail button:hover { opacity: 1; }

/* ——— the stage while a long jump fades it out and in ——— */
.stage.jumping { opacity: 0; }
