PageSourceSearch

https://ent-website-gamma.vercel.app/_next/static/immutable/chunks/3op-mkkdjhap3.js

js ent-website-gamma.vercel.app collected 2026-10-03 05:53:13 UTC 29,693 bytes, 283 lines download raw bytes

1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,12240,e=>{"use strict";var t=e.i(43476);e.s(["JsonLd",0,function({data:e}){return(0,t.jsx)("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:JSON.stringify(e).replace(/</g,"\\u003c")}})}],12240)},2486,e=>{"use strict";var t=e.i(43476),a=e.i(71645),r=e.i(11274);let n=`#version 300 es
2precision highp float;
3
4in vec2 v_uv;
5out vec4 outColor;
6
7uniform vec2 u_res;      /* device px */
8uniform float u_time;
9uniform float u_intro;   /* 0 to 1, LINEAR: the easing is per cell, below */
10uniform float u_cell;    /* device px, the grid */
11uniform vec3 u_dot;
12/* ── ITERATION SWITCH, 2026-09-18 ─────────────────────────────────────────
13   ?rail=1 to ?rail=7 swaps the scatter for one of seven candidate textures
14   so they can be judged on the live page rather than on a board. (No
15   backticks in this comment: it lives inside a template literal.)
16   0 (the default, and any unknown value) is the shipped scatter, untouched.
17   Trial scaffolding: once a texture is chosen it becomes the only path and
18   this switch goes. */
19uniform int u_variant;
20uniform float u_dpr;     /* device px per CSS px */
21uniform float u_side;    /* 0 = left rail, 1 = right rail */
22
23
24float hash1(vec2 p) {
25  return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);
26}
27
28/* 8x8 Bayer threshold, 0..63, from the bit-reversed interleave of x and y. */
29int bayer8(ivec2 q) {
30  int x = q.x & 7;
31  int y = q.y & 7;
32  int z = x ^ y;
33  return ((z & 1) << 5) | ((y & 1) << 4) | ((z & 2) << 2) | ((y & 2) << 1) | ((z & 4) >> 1) | ((y & 4) >> 2);
34}
35
36/* Every candidate arrives the same way: a soft top-down wipe over the intro,
37   so the trial rails still take part in the fold rather than popping. */
38float arrive() {
39  return clamp((u_intro - 0.5 * v_uv.y) / 0.5, 0.0, 1.0);
40}
41
42vec4 candidate(vec2 p) {
43  vec2 c = p / u_dpr;                 /* CSS px */
44  vec3 ink = vec3(0.102);             /* --r3-text #1a1a1a */
45  vec3 olive = vec3(0.337, 0.396, 0.243); /* --r3-text-brand #56653e */
46  float a = 0.0;
47  vec3 col = ink;
48  /* 0 at the hairline (content side), 1 at the outer edge of the rail. */
49  float outward = u_side < 0.5 ? 1.0 - v_uv.x : v_uv.x;
50
51  if (u_variant == 1) {
52    /* Ledger rules: a hairline every 8px, every fifth one darker. */
53    float y = mod(c.y, 8.0);
54    if (y < 1.0 / u_dpr * 1.01) {
55      bool major = mod(floor(c.y / 8.0), 5.0) < 0.5;
56      a = major ? 0.11 : 0.055;
57    }
58  } else if (u_variant == 2) {
59    /* Dot register: a 1px dot on a 6px grid. */
60    vec2 g = mod(c, 6.0);
61    if (abs(g.x - 3.0) < 0.5 && abs(g.y - 3.0) < 0.5) a = 0.16;
62  } else if (u_variant == 3 || u_variant == 7) {
63    /* Dither fade: ordered Bayer on 2px cells, dense at the outer edge and
64       gone at the hairline. 7 is the same in the brand olive. */
65    ivec2 q = ivec2(floor(c / 2.0));
66    float thr = float(bayer8(q)) / 64.0;
67    float t = outward * outward * (u_variant == 7 ? 0.8 : 0.9);
68    if (t > thr) {
69      a = u_variant == 7 ? 0.42 : 0.34;
70      if (u_variant == 7) col = olive;
71    }
72  } else if (u_variant == 4) {
73    /* Diagonal hatch: 45 degree hairlines on a 7px pitch. */
74    float d = mod(c.x + c.y, 7.0);
75    if (d < 0.75) a = 0.10;
76  } else if (u_variant == 5) {
77    /* Paper tooth: device-pixel flecks, no shape, no grid. */
78    vec2 px = floor(p);
79    float h = hash1(px + 9.0);
80    if (h < 0.10) a = 0.10 + 0.14 * hash1(px + 4.0);
81  } else if (u_variant == 6) {
82    /* Ruler ticks: a dotted spine down the middle, a tick every 40px, a long
83       one every 200. */
84    float mid = u_res.x / u_dpr * 0.5;
85    if (abs(c.x - mid) < 0.5 && mod(c.y, 4.0) < 1.0) a = 0.22;
86    float ty = mod(c.y, 40.0);
87    if (ty < 1.0) {
88      bool long_ = mod(floor(c.y / 40.0), 5.0) < 0.5;
89      float len = long_ ? 18.0 : 8.0;
90      if (abs(c.x - mid) < len * 0.5) a = long_ ? 0.35 : 0.18;
91    }
92  }
93
94  a *= arrive();
95  return vec4(col * a, a);
96}
97
98/* ── THE FIELD ─────────────────────────────────────────────────────────────
99   Returns premultiplied colour for one fragment of the scatter. */
100vec4 field(vec2 p) {
101  vec2 cell = floor(p / u_cell);
102  vec2 inCell = (p - cell * u_cell) / u_cell;   /* 0..1 within the cell */
103
104  float h = hash1(cell);
105
106  /* Sparse: only some cells carry a dot at all, which is what gives the comp
107     its patchy, scattered look rather than an even halftone.
108
109     0.18, not 0.42. The first pass used 0.42 and the rails photographed as two
110     dense grey bands competing with the headline. In the comp this is barely
111     there: a light scatter you notice on the second look.
112
113     0.34, up from 0.18. Two changes compounded into an invisible field: the
114     cell went 11px -> 5px (so any given patch has ~4.8x the cells but each
115     dot is a quarter the area) AND the alpha was cut to match.
116
117     0.425, up from 0.34. life below takes cells all the way out and brings
118     them back, which costs about a fifth of the standing ink. Occupancy pays it
119     back so the MEAN density of the rail is where it was measured: 7.242 per
120     mille against the previous build's 7.218, on the left rail at 1600 x 900
121     dpr 2. The gate for this is ink coverage, not a pixel diff, because the
122     whole point of the change is that the pixels move.
123
124     0.32, down from 0.425 (2026-09-14, "the side grids seems too much to me
125     ... keep it for show and not take too much attention"). Measured against
126     the comp's own gutter rectangles (Rectangle 7 / Rectangle 10 in frame
127     215:13881, rendered at native 1440 x 11072): the comp carries 66.40 marks
128     per mille at a luminance threshold of 252 and the 0.425 build carried
129     85.79, so the count was about 30 percent over the source. This brings the
130     count back under the comp while the alpha cut below does the heavier
131     lifting, because the count was never the main offender. */
132  if (h > 0.32) {
133    return vec4(0.0);
134  }
135
136  /* Below the cull on purpose: 57 percent of fragments never get here, and a
137     hash is a sin call. */
138  float h2 = hash1(cell + 17.3);
139  float h3 = hash1(cell + 5.1);
140  float h4 = hash1(cell + 91.7);
141  float h5 = hash1(cell + 63.2);
142
143  /* ARRIVAL, PER CELL. This was one front sweeping down the rail, which reads
144     as a wipe: a moving edge with everything behind it already final. Each cell
145     now has its own start and its own duration, so the field assembles out of
146     nothing as scatter. A light top-down term survives in delay so the rail
147     still fills from the top rather than at random. */
148  float delay = 0.14 * v_uv.y + 0.34 * h3;
149  float dur = 0.22 + 0.26 * h2;
150  float tIn = clamp((u_intro - delay) / dur, 0.0, 1.0);
151  if (tIn <= 0.0) {
152    return vec4(0.0);
153  }
154  float appear = 1.0 - pow(1.0 - tIn, 3.0);
155  /* The overshoot rides on SIZE, not on ink. A dot that flashes brighter than
156     its resting alpha reads as a blink; a dot that arrives 30 percent large and
157     settles reads as landing. */
158  float pop = 1.0 + 0.30 * sin(3.14159 * tIn) * (1.0 - tIn);
159
160  /* VARIANCE AT REST. The old term moved every dot on the same 0.6 rad/s sine
161     at 12 percent, which averages into a field that photographs frozen. Each
162     cell now has its own rate and its own bias: the low-bias cells only
163     breathe, the high-bias ones go all the way out and come back, so the
164     scatter slowly re-deals itself instead of holding one arrangement. Periods
165     run 18 to 48 seconds, far too slow to catch in the act and far too slow to
166     read as twinkling.
167
168     Spread widened from 0.10 + 0.34 to 0.045 + 0.62 (2026-09-14, "make animate
169     variably"). The old band put every cell between 14 and 63 seconds, which
170     is a wide enough range on paper but narrow enough in practice that
171     neighbouring cells stayed roughly in step and the rail read as one slow
172     breath. The new band runs 10 to 140 seconds, so a cell beside a cell can
173     be an order of magnitude apart in period. That is what makes the field
174     look re-dealt rather than pulsed: the eye cannot find a common beat. */
175  float rate = 0.045 + 0.62 * h4;
176  float wave = 0.5 + 0.5 * sin(u_time * rate + 6.2831 * h5);
177  /* Bias spread widened from 0.54 to 0.80 (2026-09-11, "more variable ...
178     idle states"). At the old spread almost every cell sat in the band where
179     life never leaves the middle, so the rail breathed as a whole and
180     photographed as one flat tone. Across a wider spread the extremes
181     separate: some cells now hold near solid, some drop out entirely and
182     return, and only the middle band breathes. Same mean ink, far more
183     variance between neighbours, which is what reads as alive when nothing is
184     moving fast enough to see.
185
186     Widened again to -0.32 + 0.86 (2026-09-14), for the same note. A wider
187     spread puts more cells at the two ends: more that sit out entirely for a
188     stretch and come back, more that simply hold. Both are what stops the
189     field reading as a single dimmer being turned. */
190  float bias = -0.32 + 0.86 * h3;
191  float life = smoothstep(0.0, 0.38, wave - bias);
192  if (life <= 0.0) {
193    return vec4(0.0);
194  }
195
196  /* Dots sit slightly off-centre per cell so the field does not read as a grid. */
197  vec2 jitter = vec2(h2, hash1(cell + 41.7)) * 0.34 - 0.17;
198  vec2 toCentre = inCell - (vec2(0.5) + jitter);
199
200  /* NO POINTER TERM. The field used to grow and green every dot within ~65
201     CSS px of the cursor ("i didnt fuckin ask this hover animation",
202     2026-09-11), then handed the cursor response to a pair of beetles, which
203     went on 2026-09-16 (see the header). The rail is purely ambient now. */
204  float radius = 0.17 * (0.70 + 0.56 * h2) * pop * mix(0.82, 1.0, life);
205  /* ── BLOCKS AND CROSSES ─────────────────────────────────────────────────
206     2026-09-18: "make it more like blocks and random cross". Two marks now:
207
208       block  a crisp square, about a fifth larger than the old dot so it
209              reads as a block rather than a speck; roughly two thirds of
210              the marks.
211       cross  a plus sign: two thin bars through the same centre, the arms
212              1.6x the block's half-width, the bar a third of it. The other
213              third of the marks, chosen per cell by hash so the mix is
214              scattered, not striped.
215
216     Both keep the half-pixel feather so they do not crawl on resize. */
217  float d;
218  if (hash1(cell + 27.9) < 0.34) {
219    float arm = radius * 1.6;
220    float bar = max(radius * 0.36, 0.045);
221    vec2 a = abs(toCentre);
222    float horizontal = max(a.x - arm, a.y - bar);
223    float vertical = max(a.y - arm, a.x - bar);
224    d = min(horizontal, vertical) + radius;
225  } else {
226    d = max(abs(toCentre.x), abs(toCentre.y)) / 1.2;
227  }
228  float mask = 1.0 - smoothstep(radius - 0.06, radius + 0.06, d);
229  if (mask <= 0.0) {
230    return vec4(0.0);
231  }
232
233  vec3 col = u_dot;
234  /* ALPHA SET BY LOOKING, NOT BY ARITHMETIC. The first 5px pass reasoned that
235     ~4.8x the cells needed ~1/5 the alpha. That is right for total ink and
236     wrong for perception: each dot became a quarter of its old AREA *and* a
237     fifth of its old opacity, so no individual dot cleared the threshold of
238     being visible and the rail photographed as blank paper.
239
240     0.26 + 0.40, up from 0.17 + 0.23 (2026-09-11, "brighten the blocks"). The
241     spec calls the gutters "sparse, subtle by intent" and this is a deliberate
242     override of that line, asked for directly. The RANGE widens more than the
243     floor does: the point is that the blocks stop reading as one uniform dust
244     and start having loud cells and quiet cells, which is the other half of
245     the same note ("make it more variable"). Judged on a DPR-2 crop.
246
247     0.12 + 0.34, down from 0.26 + 0.40 (2026-09-14, "too much ... not take too
248     much attention"). This is the lever that actually mattered, and measuring
249     the comp is what identified it. Against Rectangle 7 / Rectangle 10 in
250     215:13881 at native resolution, the comp's DARKEST gutter pixel is
251     luminance 236: the source scatter is a whisper that never approaches real
252     ink. The 0.26 + 0.40 build reached 154, which is five times the depth
253     below white, and that weight is what read as "too much" far more than the
254     count did. The floor drops by more than half and the ceiling by a sixth,
255     so the ratio between a quiet cell and a loud one goes from 2.5x to 3.7x:
256     the field recedes AND gets more internal contrast, which is the pair the
257     note asks for. It is deliberately not taken all the way to the comp's 236,
258     because that value was already tried on 2026-09-11 and the verdict was
259     that the rails were "not visible at all". Judged on a DPR-2 crop and on
260     ink coverage, not arithmetic. */
261  /* 0.08 + 0.24, down from 0.12 + 0.34 (2026-09-18, "dim this down a little
262     more"). Same ratio between quiet and loud cells, a third less weight. */
263  float alpha = mask * appear * life * (0.08 + 0.24 * h2);
264  alpha = clamp(alpha, 0.0, 1.0);
265
266  return vec4(col * alpha, alpha);
267}
268
269void main() {
270  vec2 p = v_uv * u_res;
271  outColor = u_variant == 0 ? field(p) : candidate(p);
272}`,i=[.4,.4,.4],o=1/12;function s({canvas:e}){let t,a,i=(0,r.createQuadProgram)(e,n);if(!i)return null;let{gl:o,program:l}=i;return o.enable(o.BLEND),o.blendFunc(o.ONE,o.ONE_MINUS_SRC_ALPHA),{gl:o,u:{res:o.getUniformLocation(l,"u_res"),time:o.getUniformLocation(l,"u_time"),intro:o.getUniformLocation(l,"u_intro"),cell:o.getUniformLocation(l,"u_cell"),dot:o.getUniformLocation(l,"u_dot"),variant:o.getUniformLocation(l,"u_variant"),dpr:o.getUniformLocation(l,"u_dpr"),side:o.getUniformLocation(l,"u_side")},painted:-1,variant:function(e){let t=e.parentElement?.dataset.railVariant;if(void 0===t)return null;let a=Number.parseInt(t,10);return Number.isInteger(a)&&a>=0&&a<=7?a:null}(e)??(Number.isInteger(a=null===(t=new URLSearchParams(window.location.search).get("rail"))?1:Number.parseInt(t,10))&&a>=0&&a<=7?a:1),side:+!!e.parentElement?.classList.contains("r3-rails-right")}}function l(e,t){let{gl:a,u:r}=e,{elapsed:n,width:s,height:l,dpr:d}=t;(n<1.9||!(n-e.painted<o))&&(e.painted=n,a.viewport(0,0,a.drawingBufferWidth,a.drawingBufferHeight),a.clearColor(0,0,0,0),a.clear(a.COLOR_BUFFER_BIT),a.uniform2f(r.res,s*d,l*d),a.uniform1f(r.time,n),a.uniform1f(r.cell,5*d),a.uniform3f(r.dot,...i),a.uniform1i(r.variant,e.variant),a.uniform1f(r.dpr,d),a.uniform1f(r.side,e.side),a.uniform1f(r.intro,Math.min(n/1.5,1)),a.drawArrays(a.TRIANGLES,0,6))}function d({side:e,fold:i=!1,variant:o}){let h=(0,r.useCanvasLoop)({setup:s,draw:l,settleAfter:1.7,keepAlive:!0,version:n}),c=function(e){let[t]=(0,a.useState)(()=>{if(!e)return null;let t=performance.getEntriesByType("paint").find(e=>"first-contentful-paint"===e.name),a=t?performance.now()-t.startTime:0;return a>740?null:Math.max(0,360-a)});return t}(i);return(0,t.jsx)("div",{ref:h,"aria-hidden":!0,className:`r3-rails r3-rails-${e}${null===c?"":" r3-fold-draw"}`,"data-rail-variant":o,style:null===c?void 0:{animationDelay:`${c}ms`}})}function h(){let[e,t]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{let e=window.matchMedia("(min-width: 1024px)"),a=()=>t(e.matches);return a(),e.addEventListener("change",a),()=>e.removeEventListener("change",a)},[]),e}e.s(["R3DotRails",0,function({fold:e=!1}={}){return h()?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(d,{side:"left",fold:e}),(0,t.jsx)(d,{side:"right",fold:e})]}):null},"R3RailPreview",0,function({variant:e}){return h()?(0,t.jsx)(d,{side:"left",variant:e}):null}])},1977,e=>{"use strict";var t=e.i(71645);function a(){return"1"===new URLSearchParams(window.location.search).get("still")}let r=()=>()=>{},n=()=>!1;e.s(["isStill",0,a,"useIsStill",0,function(){return(0,t.useSyncExternalStore)(r,a,n)}])},11274,e=>{"use strict";var t=e.i(71645),a=e.i(1977);e.s(["createQuadProgram",0,function(e,t){let a=e.getContext("webgl2",{alpha:!0,antialias:!1,premultipliedAlpha:!0,preserveDrawingBuffer:!1,powerPreference:"low-power"});if(!a)return null;let r=`#version 300 es
273  const vec2 verts[6] = vec2[6](
274    vec2(-1.0, -1.0), vec2(1.0, -1.0), vec2(-1.0, 1.0),
275    vec2(-1.0,  1.0), vec2(1.0, -1.0), vec2(1.0, 1.0)
276  );
277  out vec2 v_uv;
278  void main() {
279    vec2 p = verts[gl_VertexID];
280    /* Flip Y so v_uv matches CSS coordinates: 0 at the top. */
281    v_uv = vec2(p.x * 0.5 + 0.5, 0.5 - p.y * 0.5);
282    gl_Position = vec4(p, 0.0, 1.0);
283  }`,n=(e,t)=>{let r=a.createShader(e);return r?(a.shaderSource(r,t),a.compileShader(r),a.getShaderParameter(r,a.COMPILE_STATUS))?r:(a.deleteShader(r),null):null},i=n(a.VERTEX_SHADER,r),o=n(a.FRAGMENT_SHADER,t);
283if(!i||!o)return null;let s=a.createProgram();return s&&(a.attachShader(s,i),a.attachShader(s,o),a.linkProgram(s),a.deleteShader(i),a.deleteShader(o),a.getProgramParameter(s,a.LINK_STATUS))?(a.useProgram(s),{gl:a,program:s}):null},"useCanvasLoop",0,function({setup:e,draw:r,settleAfter:n=1/0,keepAlive:i=!1,trackPointer:o=!1,pointerHold:s=0,startMargin:l="10% 0px",version:d=""}){let h=(0,t.useRef)(null),c=(0,t.useRef)(e),u=(0,t.useRef)(r);return(0,t.useEffect)(()=>{c.current=e,u.current=r}),(0,t.useEffect)(()=>{let e=h.current;if(!e)return;let t=document.createElement("canvas");t.style.display="block",t.style.width="100%",t.style.height="100%",t.style.visibility="hidden",e.appendChild(t);let r=c.current({canvas:t});if(null===r)return void t.remove();let d=()=>{e.dataset.canvas="live",t.style.visibility=""},m=()=>{delete e.dataset.canvas,t.style.visibility="hidden"},f=0,p=0,v=1,g=null,w=null,b=!1,x=0,y=0,k=1/0,_=0,E=null,R=0,T=!1,S=!1,N=()=>{let a=e.getBoundingClientRect();x=a.left,y=a.top;let r=Math.min(window.devicePixelRatio||1,2),n=Math.max(1,Math.round(a.width)),i=Math.max(1,Math.round(a.height));(n!==f||i!==p||r!==v)&&(f=n,p=i,t.width=Math.round(n*(v=r)),t.height=Math.round(i*v),S=!1)},A=e=>{let t=null===E?0:Math.min((e-E)/1e3,1/15);E=e,_+=t,k+=t,N(),w&&(g={x:w.x-x,y:w.y-y},s>0&&!b&&g.x>=-s&&g.y>=-s&&g.x<=f+s&&g.y<=p+s&&(k=0));let a=null===g?0:Math.max(0,1-k/.7);if(u.current(r,{elapsed:_,width:f,height:p,dpr:v,pointer:g,pointerFade:
283a}),d(),a<=0&&(g=null,w=null),!i&&_>=n&&a<=0){S=!0,R=0;return}R=requestAnimationFrame(A)},L=()=>{R||!T||S||(E=null,R=requestAnimationFrame(A))},I=()=>{R&&(cancelAnimationFrame(R),R=0)},j=(0,a.isStill)(),q=j||window.matchMedia("(prefers-reduced-motion: reduce)").matches;if(j)return N(),_=Number.isFinite(n)?n:1,u.current(r,{elapsed:_,width:f,height:p,dpr:v,pointer:null,pointerFade:0}),d(),S=!0,()=>{t.remove(),m()};let M=e=>{e.preventDefault(),I(),m()},C=()=>{let e=c.current({canvas:t});if(null!==e){if(Object.assign(r,e),q){N(),_=Number.isFinite(n)?n:1,u.current(r,{elapsed:_,width:f,height:p,dpr:v,pointer:null,pointerFade:0}),d(),S=!0;return}S=!1,_=0,E=null,L()}};t.addEventListener("webglcontextlost",M),t.addEventListener("webglcontextrestored",C);let P=new IntersectionObserver(e=>{if(!(T=e.some(e=>e.isIntersecting)))return void I();if(q){N(),_=Number.isFinite(n)?n:1,u.current(r,{elapsed:_,width:f,height:p,dpr:v,pointer:null,pointerFade:0}),d(),S=!0;return}L()},{rootMargin:l});P.observe(e);let O=new ResizeObserver(()=>{(N(),q||S)?u.current(r,{elapsed:_,width:f,height:p,dpr:v,pointer:null,pointerFade:0}):L()});O.observe(e);let B=t=>{let a=e.getBoundingClientRect();w={x:t.clientX,y:t.clientY},g={x:t.clientX-a.left,y:t.clientY-a.top},b=!1,k=0,q||(S=!1,L())},F=e=>{null===e.relatedTarget&&(b=!0,k=.7)};return o&&!q&&(window.addEventListener("pointermove",B,{passive:!0}),window.addEventListener("pointerout",F,{passive:!0})),()=>{I(),P.disconnect(),O.disconnect(),o&&!q&&(window.removeEventListener("pointermove",B),window.removeEventListener("pointerout",F)),t.removeEventListener("webglcontextlost",M),t.removeEventListener("webglcontextrestored",C),t.remove(),m()}},[n,i,o,s,l,d]),h}])},54805,e=>{"use strict";var t=e.i(71645),a=e.i(1977);let r={threshold:.12,rootMargin:"0px 0px -5% 0px"};e.s(["R3_REVEAL_OBSERVER",0,r,"useR3Reveal",0,function(){(0,t.useEffect)(()=>{let e=window.matchMedia("(prefers-reduced-motion: reduce)").matches,t=e=>e.setAttribute("data-r3-reveal","in"),n=(0,a.isStill)();if(e||n){let e=e=>e.querySelectorAll("[data-r3-reveal]").forEach(t);e(document);let a=n?new MutationObserver(()=>e(document)):null;return a?.observe(document.body,{childList:!0,subtree:!0}),()=>a?.disconnect()}let i=new IntersectionObserver(e=>{for(let a of e)a.isIntersecting&&(t(a.target),i.unobserve(a.target))},r),o=e=>{if("in"!==e.getAttribute("data-r3-reveal")){if((e=>{for(let t=e.parentElement;t&&t!==document.body;t=t.parentElement){let e=getComputedStyle(t).overflowX;if("auto"===e||"scroll"===e)return!0}return!1})(e)||(e=>{let t=e.getBoundingClientRect();if(0===t.height)return!1;let a=.95*window.innerHeight;return(Math.min(t.bottom,a)-Math.max(t.top,0))/t.height>=r.threshold})(e))return void t(e);e.setAttribute("data-r3-reveal","pending"),i.observe(e)}},s=e=>{e instanceof Element&&e.hasAttribute("data-r3-reveal")&&o(e),e.querySelectorAll("[data-r3-reveal]").forEach(o)};s(document);let l=new MutationObserver(e=>{for(let t of e)for(let e of t.addedNodes)e.nodeType===Node.ELEMENT_NODE&&s(e)});return l.observe(document.body,{childList:!0,subtree:!0}),()=>{i.disconnect(),l.disconnect()}},[])}])},18210,e=>{"use strict";var t=e.i(43476),a=e.i(71645),r=e.i(12240),n=e.i(57444);let i=[{index:"01",question:"What is the world model?",answer:"One graph of your codebase and the work around it: the code, the pull requests, the review threads, the incidents and the sessions your agents run. Every product reads from that one index instead of keeping a private copy. That is why a review can cite the specific past incident a diff would re-create."},{index:"02",question:"What does the Model Router actually do?",answer:"It picks a model per turn, not per project. Each turn is scored against a quality floor you set, and the cheapest model that clears it does the work, while anything that does not clear it escalates. The saving comes out of the routing, never out of the answer.",link:{label:"How the router decides",href:"/model-router"}},{index:"03",question:"Where do the $0.18 and $0.41 numbers come from?",answer:"They are cost per verified bug found, measured in our 2026 benchmark, not a blended token price. The task set, the method and the per-model results are all published. Read it and disagree with it if the method does not hold for your co
283debase.",link:{label:"Read the benchmark report",href:"/entelligence-benchmark-report-2026"}},{index:"04",question:"What can I actually measure once it is on?",answer:"Cost per session and per merged pull request, which model handled what share of turns, review coverage across your repos, and how often a past incident is cited before it repeats. Every figure is broken out per repo and per team, so the numbers belong to a codebase rather than to an average."},{index:"05",question:"Do I have to change how my team works?",answer:"No. It connects to the repos and pull requests you already have, and the reviews and the routing happen inside that flow. Nobody has to open a new tool for the index to start building."},{index:"06",question:"Is this a surveillance tool for managers?",answer:"No. The measurements are about the work, cost per session, review coverage, incidents that repeat, and not about ranking people. Access is role based, and the point of the memory is that the next engineer does not have to relearn what the last one already paid for."},{index:"07",question:"Is my code safe?",answer:"SOC 2 Type II and GDPR, no training on customer code, secrets encrypted at rest, and role-based access. Your code is only ever used for your own organization. If that is still not enough, self-hosted and bring-your-own-key deployments are both supported."},{index:"08",question:"How much does it cost to start?",answer:"You can sign up, connect a repo and watch the world model build without talking to anyone first. Paid plans are banded by team size and the number of reviews you run each month, and enterprise is scoped with you. The current numbers live on the pricing page, where they stay correct.",link:{label:"See pricing",href:"/pricing"}}];function o({id:e,titleId:a="r3-faq-title",title:i,sub:l,aside:d,entries:h,schema:c=!1}){return(0,t.jsxs)("section",{id:e,"aria-labelledby":a,className:"relative border-t border-r3-border-subtle px-6 py-16 sm:px-8 sm:py-[4.5rem] lg:px-12 lg:py-20",children:[c?(0,t.jsx)(r.JsonLd,{data:(0,n.faqJsonLd)(h.map(({question:e,answer:t})=>({question:e,answer:t})))}):null,(0,t.jsxs)("div",{className:"mx-auto grid max-w-[74rem] gap-10 lg:grid-cols-[420fr_732fr] lg:gap-x-8",children:[(0,t.jsxs)("div",{className:"lg:pt-6","data-r3-reveal":"",style:{"--r3-reveal-i":0},children:[(0,t.jsx)("h2",{id:a,className:"r3-display text-[1.625rem] leading-[1.12] tracking-[-0.026em] text-balance text-r3-text sm:text-[1.7921rem] sm:leading-[1.1]",children:i}),l?(0,t.jsx)("p",{className:"mt-4 max-w-[23.75rem] text-[1rem] leading-[1.625] font-medium tracking-[-0.01em] text-pretty text-r3-text-muted",children:l}):null,d?(0,t.jsx)("div",{className:"mt-6",children:d}):null]}),(0,t.jsx)("ul",{className:"border-b border-r3-border-brand",children:h.map((e,a)=>(0,t.jsx)(s,{entry:e,revealIndex:a+1},e.index))})]})]})}function s({entry:e,revealIndex:r}){let[n,i]=(0,a.useState)(!1),o=(0,a.useId)(),l=`${o}-q`,d=`${o}-a`;return(0,t.jsxs)("li",{className:"not-first:border-t not-first:border-r3-border-brand","data-r3-reveal":"",style:{"--r3-reveal-i":r},children:[(0,t.jsxs)("button",{type:"button",id:l,"aria-expanded":n,"aria-controls":d,"data-interaction":"faq_open","data-interaction-item":e.index,onClick:()=>i(e=>!e),className:"group flex min-h-[3.5rem] w-full cursor-pointer items-start gap-3 py-4 text-left transition-colors duration-[180ms] hover:bg-r3-surface-brand focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-r3-text-brand sm:px-3",children:[(0,t.jsx)("span",{className:"mt-1 w-8 shrink-0 text-right font-r3-mono text-[0.875rem] leading-4 font-bold text-r3-text-brand",children:e.index}),(0,t.jsx)("span",{className:"flex-1 text-[1rem] leading-6 font-semibold text-r3-text-brand",children:e.question}),(0,t.jsx)("span",{"aria-hidden":!0,className:`mt-1 shrink-0 text-r3-text-muted transition-[transform,color] duration-[240ms] ease-[cubic-bezier(0.16,1,0.3,1)] group-hover:text-r3-text-brand motion-reduce:transition-none ${n?"rotate-45":"rotate-0"}`,children:(0,t.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",focu
283sable:"false",children:(0,t.jsx)("path",{d:"M2.5 8h11M8 2.5v11",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})})]}),(0,t.jsx)("div",{className:"grid transition-[grid-template-rows] duration-[420ms] ease-[cubic-bezier(0.16,1,0.3,1)] motion-reduce:transition-none",style:{gridTemplateRows:n?"1fr":"0fr"},children:(0,t.jsx)("div",{id:d,role:"region","aria-labelledby":l,inert:!n,className:"overflow-hidden",children:(0,t.jsxs)("div",{className:"pr-7 pb-5 pl-11 sm:pl-14",children:[(0,t.jsx)("p",{className:"max-w-[38rem] text-[0.9375rem] leading-[1.65] text-pretty text-r3-text-secondary",children:e.answer}),e.link?(0,t.jsxs)("a",{href:e.link.href,className:"mt-2 -my-3 inline-flex items-center gap-1 py-3 text-[0.875rem] font-semibold text-r3-text-brand","data-r3-dash-host":"",children:[(0,t.jsx)("span",{className:"r3-dash-link",children:e.link.label}),(0,t.jsx)("span",{"aria-hidden":!0,children:"→"})]}):null]})})})]})}e.s(["Faq",0,function(){return(0,t.jsx)(o,{id:"home-faq",title:(0,t.jsx)(t.Fragment,{children:"What you’d ask before pointing this at your co
283debase."}),sub:(0,t.jsx)(t.Fragment,{children:"Got a question we missed? We’re one message away."}),entries:i,schema:!0})},"R3FaqBlock",0,o],18210)},15843,e=>{"use strict";var t=e.i(54805);e.s(["R3RevealRuntime",0,function(){return(0,t.useR3Reveal)(),null}])},70337,20711,e=>{"use strict";var t=e.i(43476),a=e.i(57688),r=e.i(59476);function n(e,t,a=80){let i;if(!(0,r.isImageKitUrl)(e))return e;if((0,r.shouldPreserveOriginal)(e)){let t;if(!(0,r.isImageKitUrl)(e)||!(0,r.shouldPreserveOriginal)(e))return e;try{t=new URL(e)}catch{return e}if(t.pathname.includes("/tr:orig")||/(^|,)orig-true(,|$)/.test(t.searchParams.get("tr")||""))return e;let a=t.pathname.split("/").filter(Boolean);if(a.length<2)return e;let n=a[0],i=a.slice(1).join("/");return t.pathname=`/${n}/tr:orig-true/${i}`,t.toString()}try{i=new URL(e)}catch{return e}if(i.pathname.includes("/tr:"))return e;let o=i.pathname.split("/").filter(Boolean);if(o.length<2)return e;let s=o[0],l=o.slice(1).join("/"),d=Math.max(1,Math.min(Math.round(t),1920)),h=Math.max(1,Math.min(Math.round(a),100)),c=i.searchParams.get("tr");i.searchParams.delete("tr");let u=`tr:${c?`${c}:`:""}w-${d},q-${h},f-auto`;return i.pathname=`/${s}/${u}/${l}`,i.toString()}function i({src:e,width:t,quality:a}){return n(e,t,a??80)}e.s(["imageKitLoader",0,i,"withImageKitTransform",0,n],20711),e.s(["Media",0,function({alt:e,decorative:n=!1,...o}){let s="string"==typeof o.src?o.src:null;return(0,t.jsx)(a.default,{...o,...s&&(0,r.isImageKitUrl)(s)&&!o.loader?{loader:i}:{},unoptimized:o.unoptimized??(s?(0,r.shouldPreserveOriginal)(s):void 0),alt:n?"":e?.trim()??"",...n?{"aria-hidden":!0}:{}})}],70337)},57444,e=>{"use strict";e.i(36156).siteConfig.url,e.s(["faqJsonLd",0,function(e){return{"@context":"https://schema.org","@type":"FAQPage",mainEntity:e.map(e=>({"@type":"Question",name:e.question,acceptedAnswer:{"@type":"Answer",text:e.answer}}))}}])}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.