/* ==========================================================================
   TRETA — base: reset, tokens, language, chrome (loader/header/grain/cursor/chud)
   Load first. Section styles live in their own files (see CLAUDE.md map).
   ========================================================================== */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
button,input,select,textarea{font:inherit;color:inherit}
ul,ol{list-style:none}

/* ---- design tokens ---- */
:root{
  --w:#FFFFFF;
  --paper:#F7F3ED;
  --ink2:#101418;
  --gr:#7A7F87;
  --gr2:#C8CBCF;
  --hl:#EAE8E4;
  --tr:#8C1014;         /* Treta red, from the logo */
  --tr2:#B3181D;
  --blu:#1D3B5A;        /* deep engineering blue */
  --blu-d:#12283F;      /* reviews chapter */
  --blu-t:#EFF3F8;      /* cool tint */
  --amb:#C98D2E;        /* drafting brass / amber */
  --amb-l:#E4B65C;
  --f-disp:"Fraunces",Georgia,serif;
  --f-body:"Archivo","Helvetica Neue",sans-serif;
  --f-mono:"Instrument Sans","Helvetica Neue",sans-serif;
  --f-dev:"Noto Serif Devanagari",serif;
  --gut:clamp(20px,4.5vw,72px);
  --ease:cubic-bezier(.62,.05,.01,.99);
}

/* ---- lenis ---- */
html.lenis,html.lenis body{height:auto}
.lenis:not(.lenis-autoToggle).lenis-stopped{overflow:clip}
.lenis [data-lenis-prevent],.lenis [data-lenis-prevent-wheel],.lenis [data-lenis-prevent-touch],
.lenis [data-lenis-prevent-vertical],.lenis [data-lenis-prevent-horizontal]{overscroll-behavior:contain}
.lenis.lenis-smooth iframe{pointer-events:none}
.lenis.lenis-autoToggle{transition-property:overflow;transition-duration:1ms;transition-behavior:allow-discrete}
.lenis.lenis-smooth{scroll-behavior:auto!important}
.lenis.lenis-smooth [data-lenis-prevent]{overscroll-behavior:contain}
.lenis.lenis-stopped{overflow:hidden}

/* ---- base ---- */
body{background:var(--w);color:var(--ink2);font-family:var(--f-body);font-weight:400;line-height:1.6;overflow-x:hidden}
::selection{background:var(--tr);color:var(--w)}
h1,h2,h3{font-weight:inherit}
a{text-decoration:none}
img{max-width:100%;display:block}
:focus-visible{outline:2px solid var(--tr);outline-offset:3px}
.hd :focus-visible,.mnav :focus-visible{outline-color:currentColor}

/* ---- language toggle ---- */
.tr-ne{display:none}
body.lang-ne .tr-ne{display:revert}
body.lang-ne .tr-en{display:none}
/* Devanagari renders visually larger than Latin at the same size — keep all
   Nepali text 10% smaller than its English counterpart. em = relative to each
   element's own size, so this scales with every heading/body size automatically.
   Full-element Nepali headings (h2.tr-ne etc.) out-specify this and carry their
   own 90% size next to the English rule in their section file. */
.tr-ne{font-family:var(--f-dev);font-size:.9em}

/* ---- big-heading reveal masks ----
   SplitText builds one .sl-mask wrapper per line with inline overflow:clip,
   sized to the line box. With the tight display line-heights, that box crops
   Latin descenders (y, g, p) at the bottom and Devanagari shirorekha / top
   matras at the top. Padding widens the clip box on both edges; equal negative
   margins pull the layout back to the original position, so nothing shifts.
   em-based, so it scales with every heading size in both EN and NE. */
.sl-mask{padding-top:.34em;margin-top:-.34em;padding-bottom:.3em;margin-bottom:-.3em}

/* ---- mono micro-label ---- */
.lbl{font-family:var(--f-mono);font-size:.64rem;letter-spacing:.14em;text-transform:uppercase;color:var(--gr);font-weight:500}
.lbl .no{color:var(--tr)}
.lbl.blu .no{color:var(--blu)}
.lbl.amb .no{color:var(--amb)}
.lbl.wht{color:rgba(255,255,255,.55)}
.lbl.wht .no{color:var(--amb-l)}

/* ---- reveal scaffolding ---- */
[data-split]{visibility:hidden}
[data-split].on{visibility:visible}
.no-motion [data-split]{visibility:visible}
[data-rv]{opacity:0;transform:translateY(26px)}
.no-motion [data-rv]{opacity:1;transform:none}
[data-swap]{position:relative}

/* ============================ preloader ============================ */
.ldr{position:fixed;inset:0;z-index:300;background:var(--w);display:flex;align-items:center;justify-content:center;flex-direction:column;gap:18px}
.ldr .ldr-t{font-family:var(--f-dev);font-weight:600;font-size:clamp(2.6rem,8vw,6rem);line-height:1.16;color:var(--ink2);display:flex;overflow:hidden;padding-top:.16em}
.ldr .ldr-t span{display:inline-block;transform:translateY(120%)}
.ldr .ldr-n{font-family:var(--f-mono);font-size:.7rem;letter-spacing:.2em;color:var(--gr)}
.ldr .ldr-n b{color:var(--tr);font-weight:500}
.no-motion .ldr{display:none}

/* ============================ header ============================ */
.hd{position:fixed;inset:0 0 auto 0;z-index:120;display:flex;align-items:center;justify-content:space-between;
  padding:22px var(--gut);mix-blend-mode:difference;color:#fff;pointer-events:none}
.hd *{pointer-events:auto}
.hd .hd-brand{font-family:var(--f-disp);font-weight:560;font-size:1.05rem;letter-spacing:.01em;color:#fff;display:flex;align-items:baseline;gap:10px}
.hd .hd-brand i{font-style:normal;font-family:var(--f-mono);font-size:.58rem;letter-spacing:.22em;opacity:.65}
.hd nav{display:flex;gap:clamp(16px,2.6vw,34px);align-items:center}
.hd nav a{color:#fff;font-family:var(--f-mono);font-size:.66rem;letter-spacing:.14em;text-transform:uppercase;position:relative;padding:4px 0}
.hd nav a::after{content:"";position:absolute;left:0;bottom:0;height:1px;width:100%;background:#fff;transform:scaleX(0);transform-origin:right;transition:transform .45s var(--ease)}
.hd nav a:hover::after{transform:scaleX(1);transform-origin:left}
.hd .hd-lang{display:flex;gap:2px;font-family:var(--f-mono);font-size:.66rem;letter-spacing:.1em}
.hd .hd-lang button{appearance:none;border:0;background:none;color:#fff;opacity:.45;cursor:pointer;font:inherit;padding:4px 5px;text-transform:uppercase}
.hd .hd-lang button.on{opacity:1;text-decoration:underline;text-underline-offset:4px}
.hd .hd-start{border:1px solid rgba(255,255,255,.7);border-radius:99px;padding:8px 18px!important}
.hd .hd-start::after{display:none}
.hd .hd-start:hover{color:#000}
.hd .hd-start:not(.bfill):hover{background:#fff}
.hd .hd-start:active{background:#fff;color:#000}
.hd .hd-start .fillc{background:#fff}
@media(max-width:840px){.hd nav a.hd-link{display:none}}
@media(max-width:840px){.hd{padding:18px var(--gut)}}

/* burger (mobile only) */
.hd-burger{display:none;appearance:none;border:0;background:none;cursor:pointer;width:34px;height:30px;position:relative;padding:0}
.hd-burger i{position:absolute;left:4px;right:4px;height:1.5px;background:#fff;transition:transform .4s var(--ease),top .4s var(--ease),opacity .3s}
.hd-burger i:nth-child(1){top:10px}
.hd-burger i:nth-child(2){top:19px}
.hd-burger.open i:nth-child(1){top:14.5px;transform:rotate(45deg)}
.hd-burger.open i:nth-child(2){top:14.5px;transform:rotate(-45deg)}
@media(max-width:840px){.hd-burger{display:block}}
@media(max-width:420px){.hd .hd-start{display:none}}

/* full-screen mobile menu (sits under the difference-blend header) */
.mnav{position:fixed;inset:0;z-index:118;background:var(--paper);display:flex;flex-direction:column;
  justify-content:center;padding:90px var(--gut) 110px;visibility:hidden;opacity:0;
  transition:opacity .45s var(--ease),visibility 0s .45s}
.mnav.open{visibility:visible;opacity:1;transition:opacity .45s var(--ease)}
.mnav .mn-links{display:flex;flex-direction:column;gap:2px}
.mnav .mn-links a{display:flex;align-items:baseline;gap:16px;color:var(--ink2);padding:10px 0;
  border-bottom:1px solid var(--hl);font-family:var(--f-disp);font-weight:410;letter-spacing:-.015em;
  font-size:clamp(1.9rem,8.4vw,3.2rem);line-height:1.1;transform:translateY(24px);opacity:0;
  transition:transform .6s var(--ease),opacity .6s var(--ease)}
body.lang-ne .mnav .mn-links a{line-height:1.35}
.mnav.open .mn-links a{transform:none;opacity:1}
.mnav .mn-links a:nth-child(1){transition-delay:.06s}.mnav .mn-links a:nth-child(2){transition-delay:.11s}
.mnav .mn-links a:nth-child(3){transition-delay:.16s}.mnav .mn-links a:nth-child(4){transition-delay:.21s}
.mnav .mn-links a:nth-child(5){transition-delay:.26s}.mnav .mn-links a:nth-child(6){transition-delay:.31s}
.mnav .mn-links a i{font-style:normal;font-family:var(--f-mono);font-size:.6rem;letter-spacing:.16em;color:var(--tr)}
.mnav .mn-foot{position:absolute;left:var(--gut);right:var(--gut);bottom:34px;display:flex;justify-content:space-between;gap:14px;flex-wrap:wrap}
@media(min-width:841px){.mnav{display:none}}
html.mnav-lock,html.mnav-lock body{overflow:hidden}

/* ---- grain — subtle film texture ---- */
.grain{position:fixed;inset:-100%;z-index:200;pointer-events:none;opacity:.05;
  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' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  animation:grain 8s steps(10) infinite}
@keyframes grain{
  0%,100%{transform:translate(0,0)}10%{transform:translate(-5%,-8%)}20%{transform:translate(-12%,4%)}
  30%{transform:translate(6%,-14%)}40%{transform:translate(-4%,12%)}50%{transform:translate(-10%,6%)}
  60%{transform:translate(12%,0)}70%{transform:translate(0,10%)}80%{transform:translate(-14%,0)}90%{transform:translate(8%,4%)}}
.no-motion .grain{animation:none}

/* ---- custom cursor: dot + trailing ring ---- */
.cur,.cur-ring{position:fixed;top:0;left:0;z-index:400;pointer-events:none;border-radius:50%;will-change:transform}
.cur{width:8px;height:8px;background:var(--tr);margin:-4px 0 0 -4px}
.cur-ring{width:38px;height:38px;margin:-19px 0 0 -19px;border:1px solid var(--ink2);opacity:.5;
  display:flex;align-items:center;justify-content:center;
  transition:width .35s var(--ease),height .35s var(--ease),margin .35s var(--ease),opacity .3s,border-color .3s,background .3s}
.cur-ring.grow{width:70px;height:70px;margin:-35px 0 0 -35px;opacity:.9;border-color:var(--tr);background:rgba(140,16,20,.06)}
.cur-ring.dark{border-color:#fff}
/* contextual label chip — <i> injected by fx.js, text from data-cur */
.cur-ring i{font-family:var(--f-mono);font-style:normal;font-weight:500;font-size:.5rem;letter-spacing:.22em;
  color:#fff;opacity:0;transform:scale(.5);transition:opacity .25s,transform .35s var(--ease);text-indent:.22em}
.cur-ring.lblc{width:74px;height:74px;margin:-37px 0 0 -37px;opacity:1;border-color:transparent;background:rgba(140,16,20,.92)}
.cur-ring.lblc i{opacity:1;transform:scale(1)}
@media (hover:none),(pointer:coarse){.cur,.cur-ring{display:none}}
.no-motion .cur,.no-motion .cur-ring{display:none}

/* ---------- cross-document view transitions (home ↔ insights) ----------
   Progressive enhancement: browsers without @view-transition ignore all of
   this and navigate normally. base.css loads on every rendered page, so the
   opt-in applies site-wide. */
@media (prefers-reduced-motion:no-preference){
  @view-transition{navigation:auto}
  ::view-transition-old(root){animation:vt-out .3s var(--ease) both}
  ::view-transition-new(root){animation:vt-in .55s var(--ease) both}
}
@keyframes vt-out{to{opacity:0;transform:translateY(-16px)}}
@keyframes vt-in{from{opacity:0;transform:translateY(18px)}}

/* ==========================================================================
   Interaction grammar — shared hover/HUD utilities.
   DOM for .roll/.bfill/.cur-ring i is built at runtime in fx.js;
   .chud state is driven from main.js.
   ========================================================================== */

/* ---- rolling text hover ---- */
.roll .rmsk{display:inline-block;position:relative;overflow:hidden;vertical-align:top}
.roll .rin{display:block;transition:transform .55s var(--ease)}
.roll .rin2{position:absolute;left:0;top:100%;width:100%}
@media(hover:hover){.roll:hover .rin{transform:translateY(-100%)}}
.no-motion .roll .rin{transition:none}

/* ---- directional circle fill for pill CTAs ---- */
.bfill{position:relative;overflow:hidden;isolation:isolate}
.bfill .fillc{position:absolute;top:0;left:0;width:12px;height:12px;border-radius:50%;
  background:var(--tr);transform:scale(0);pointer-events:none;z-index:-1;will-change:transform}

/* ---- header hide on scroll-down / return on scroll-up ---- */
.hd{transition:transform .6s var(--ease)}
.hd.hd-hide{transform:translateY(-110%)}

/* ---- chapter HUD — fixed section readout (desktop, motion path only) ---- */
.chud{position:fixed;left:var(--gut);bottom:24px;z-index:110;
  display:flex;align-items:center;gap:8px;pointer-events:none;
  font-family:var(--f-mono);font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;
  color:#fff;mix-blend-mode:difference;opacity:0;transition:opacity .6s var(--ease)}
.chud.on{opacity:.85}
.chud .chud-m{display:inline-block;overflow:hidden}
.chud b,.chud i{display:block;font-weight:400;font-style:normal;will-change:transform}
.chud .chud-sep{opacity:.5}
.chud .tr-ne{font-family:var(--f-dev);font-size:.78rem;letter-spacing:.06em;text-transform:none}
@media(max-width:840px){.chud{display:none}}
