STADIUM ELITE Build: first-goal-browser-guidance-2026-09-13 CURRENT EXPERIENCE First Goal is the default: a 75-second attacking challenge, starting in Barcelona possession near Madrid's box. Move into the gold circle, complete a real teammate reception, then take a shot. Each objective awards points immediately. The first Barcelona goal ends the run; otherwise it ends after 75 visible, unpaused seconds, including restarts. Missed/lost attacks reset after a short delay. Opposing outfield players hold their starting shape until the first shot, giving the introductory pass room to succeed. This is a guided attacking challenge, not Full Match difficulty. Full Match remains available on entry and the result screen, with six active minutes by default and optional 10/15-minute settings. Full Match movement, ball physics, fouls/cards/falls and offside remain shared with the existing game. Results offer personal best, immediate replay, a date-based daily starting layout, opt-in leaderboard saving and a downloadable/shareable result card. Scores: movement 100, completed pass 200, shot 200, goal 500, plus 10 per whole second remaining. Personal best is local to the browser/viewer ID; online submission uses the host leaderboard. There is no entry signup wall. The documented host SDK does not expose a signup-opening API, so no unsupported signup button is invented. Daily layout changes on UTC dates; ordinary match AI is not a deterministic competitive simulation. LITE ENTRY AND PERFORMANCE In-app browser advice appears only inside pause/settings or results, after measured readiness of at least 12 seconds or three consecutive active-play samples below 20 FPS. It never overlays live play or appears in ordinary browsers. Open in Browser explains the app-menu action and copies the host share URL where available; browsers do not expose a universal external-browser launch API. A new browser starts a new run. Not Now dismisses advice for the page session. Touch/in-app entry starts at the low device budget, with two contextual touch buttons and a single queued play tap. One device-matched athlete model downloads, not all three. Each model references one shared JPEG; its vertex and skeleton data are unchanged. Higher models load only on an explicit quality selection, and a failed primary model retries three times before trying an alternate rig. The pitch renders before model parsing. Model parsing remains on the main thread after that first pitch frame. Ordered application scripts are bundled as app.js, with a deferred local Three library and boot script. Low already disabled dynamic shadows before this release; that behavior is preserved, not presented as a new fix. Gerald's 45 existing recordings use one local indexed MP3 atlas. Lite startup defers full audio fetch/decode until a later input after eight seconds, a goal, or explicit sound request. A minimal trusted-gesture context unlock is retained for mobile audio. Goal speech and actual passer/shooter/scorer routing remain supported. ERROR SCOPE A zero-width joystick no longer divides by zero and contaminates simulation coordinates. Renderer dimensions remain positive during transient viewport changes. Boot stops on game-owned script failures but does not turn an unrelated injected host-script error into an inert game. External integration errors remain reported. M_ID is absent from application source, and no application WebView postMessage bridge exists. Production M_ID, Safari, failed-load and WebView incident root causes are NOT confirmed without stacks and failing URLs. Chromium fault injection is not physical Safari/WebView certification. Historical engineering notes below describe earlier stages. Where they differ from CURRENT EXPERIENCE above, the current section governs. Ball rolling correction: stronger grass resistance is applied on every grounded physics substep, smoothly reducing speed toward rest with no minimum-speed floor. Rolling spin decays with translation; bounce damping also reduces tangential spin. Body/post deflections and controlled receptions now discard incompatible pre-contact spin instead of letting it feed speed back into a slowed ball. Air drag, gravity and vertical bounce restitution remain unchanged. Through-ball launch estimates use the same updated ground law, preserving the existing distance gauge rather than a separate friction rule. Measured unobstructed 14 m/s pass: stopping time/distance changed from 7.08s/40.06m to 4.32s/24.38m. A 31 m/s shot with 4 m/s lift changed from 10.49s/103.48m to 6.88s/75.70m. These are fixed-step solver measurements, not a claim of measured real-grass calibration. Player loading: each model and skin retries independently up to three times, with 350ms and 900ms backoff and fresh-cache retries. A single usable rig is sufficient for kickoff; unavailable or still-loading detail uses that rig and its embedded skin. Higher-detail geometry and roster skins arrive without restarting the match. Exhausted optional assets are listed in settings, not a blocking screen. Only when all three model files fail all attempts does startup show their exact URLs, decode/request stages and errors. Per-attempt deadlines are 20, 30 and 45 seconds; the old global player cutoff no longer races these retries. Compatibility: player JPEGs use HTMLImageElement rather than ImageBitmap options; optional audio uses gesture-unlocked Web Audio and MP3 effects. Storage/audio refusal does not need to stop play. This is recovery hardening tested by Chromium fault injection, not a locally verified Safari fix. The user's Safari results were intermittent, and WebKit is unavailable in the test environment. Gerald's existing 45 respectful, upbeat clips remain unchanged. Soccer contact correction: ordinary running contact and clean standing ball wins no longer trigger falls. Falls occur with the existing illegal sliding-tackle contact whistle, rather than relative running speed alone. Reckless fouls earn yellow immediately, dangerous slides retain red, and three lesser fouls since the last card earn a persistent-fouling yellow. A second yellow dismisses. Counts are per player, shared across teams, preserved across restarts, and reset for a new match. A short foul countdown explains the deliberate clock stoppage, followed by Pass to play, Shoot for a penalty, or an automatic Real Madrid restart. Gerald commentary: all 23 match-event phrases now use ElevenLabs Gerald - Exciting Older Voice, with 22 additional roster-name clips. Calls identify the actual passer, shooter or scorer supplied by gameplay, with cooldowns to avoid constant repetition. Goal calls can be followed by the scorer's name. The complete 45-clip set is bundled locally, approximately 1.03 MB. This replaces the earlier George/Rachel set and first-kickoff review. Running and kicking: explicit planted-foot and lifted-swing trajectories replace the short shuffling stride. Foot travel and cadence respond to movement speed. Kicks have a backswing, ball-contact phase and follow-through while keeping the original simulation contact timing. Visible players use foot IK in Low graphics as well as higher presets. Falls: contact impulses tip the upper body into an articulated fall rather than translating every joint equally. Real body-first sliding contact triggers the existing referee decision, fall and recovery. Fallen players cannot move, receive or tackle; recovery is a procedural blend, not a captured get-up animation. No persistent injury or substitution system is added. Startup: the document finishes loading before expensive scene construction. Shader compilation and the first geometry/texture upload complete before match readiness and queued kickoff. The loading indicator stays visible until that first frame is ready. This addresses blocking startup work; physical-device loading times are not certified. The requested Gerald stock voice is used throughout the playable match, not only in a separate audition. It is not a clone or impersonation of a professional commentator. Live commentary: 45 local ElevenLabs Turbo v2.5 speech clips call kickoff, possession, passes, shots, saves, both teams' goals, restarts, offside, fouls, penalties, cards, halftime and full time. Settings offer Live, Key moments only and Off, plus separate commentary volume. Calls do not overlap. Major events interrupt lesser calls, the crowd ducks beneath speech, and pause, master mute, focus loss or hiding the tab discard stale commentary. No runtime voice service, microphone or external request is needed. Loose-ball recovery: exactly one eligible automated outfield chaser is assigned per team, independently of the last touch. A small selection margin avoids constant chaser switching. Chasers can reach live touchline and corner balls and do not stop at tactical arrival zones; other players retain their tactical roles. Actively steering the selected player overrides their automatic chase. Goalkeepers retain their independent saving behavior. Motion and render load: player and ball transforms interpolate between fixed physics steps. Smaller body bob reduces exaggerated shaking. Visible athletes animate every rendered frame when delivery falls below 45 FPS, rather than freezing poses across several slow frames. Bone turns no longer repeatedly decompose full world matrices. Detailed 120k geometry is reserved for true closeups; LOD uses actual render pixels. Auto can reduce 3D resolution to 65 percent under sustained overload, without shrinking HTML text or controls. Manual presets retain an 85 percent floor. Shaders warm before kickoff; bounded catch-up supports up to six 60Hz steps after slow frames. These changes do not establish physical-device frame-rate acceptance. Scan-style follow-up: a new 300k-triangle generated source based on a photographic-style T-pose reference replaces the prior athlete. Locally bound to the working skeleton, with 120k/36k/11k runtime LODs, own 2048px atlases, smoother skin-tone masking, fabric-aware kit shading, chest crests and back names/numbers. Celebration is asymmetrical rather than an arms-out bind-like pose; closeup camera follows the scorer's facing and hides selection markers. This is generated likeness, not a real scan, professional motion capture or verified FIFA/PES parity. Replacement footballer: a new generated mesh now has a locally repaired rig, welded/smoothed surface, transferred and blended skin weights, and its own 2048px roster-tone texture atlases. All players use the replacement, with roughly 120,000/36,000/11,000 triangle LODs. The known skeleton preserves actions, falls, headers and goal celebrations. Goal framing is closer to show the face, hands and kit folds. The model is a generic athlete, not a scanned likeness of named players or a claim of FIFA/PES parity. Player visibility follow-up: closer, screen-height-aware Broadcast framing makes the active footballer larger on portrait phones, short landscape screens and laptops. Nearby players use the highest existing skinned-mesh detail, physically based materials on all graphics levels, and animation updates every rendered frame within 22m. Tactical retains the wider overview. This improves readability and presentation, not professional scanned-player likeness or FIFA/PES visual parity. Through-ball follow-up: hold W longer to send it farther, from an estimated 8m on a tap to 65m at 1.5 seconds. Release to kick. Long holds can overhit runners or go out of play. Aim stays on the chosen direction even near a touchline; no homing or automatic stopping at a teammate. Controller Y/Triangle and optional Full-touch Through use the same charge. The gauge estimates unobstructed turf travel, not guaranteed completion. Ball control follow-up: shorter, more frequent dribble touches keep the ball near the feet, with faster ordinary reception settling and a more forgiving 1.16m ground pickup envelope below 22m/s. Faster balls retain the previous smaller envelope and hard-shot deflections. The ball still integrates independently between foot touches; the same rules apply to both teams. In matched unobstructed sprint tests, average ball distance decreased from 1.01m to 0.68m, and running distance from 0.85m to 0.57m. Penalty tests cover defending slide fouls inside the penalty area, including the goal area, both teams, both halves and boundary lines. Mobile follow-up: two contextual action buttons, outer-stick sprint, one pause/menu, compact scoreboard, optional Full controls. Central event banners replaced by bottom status text. Broadcast is default. Latest changes: impulse-based dribble contacts and momentum-preserving receptions; sliding/rolling friction and quadratic airborne drag; consistent through-ball turf behavior. Attackers evaluate carrying lanes, progressive passes, onside runs and cutbacks. Shot-lane checks no longer treat the goalkeeper as an outfield blocker. Defenders no longer brake while pursuing running attackers or drain stamina while standing. Human defenders use timed tackles rather than automatic proximity steals. Stadium flags now animate in shaders, and static stadium local matrices are cached. Commentary is now included following the later speech request. The supplied PRD is used for a workshop completion audit, not included as a game asset. Real Safari/Firefox performance and human Hard-mode acceptance remain open. Startup recovery: missing required scripts, exhausted essential-model retries and initialization errors show Reload match instead of silently failing. A graphics-context loss stops play and clock progression; reload begins a new match. A 45-second scene-initialization watchdog is suspended while the player loader owns its per-asset retry deadlines and canceled when ready. Latest candidate: stronger pursuit and unique goal-side marking, interception-aware attacking decisions, persistent Easy/Normal/Hard, player names only in the lower-left selection panel when switching, and constant pitch exposure through kickoff. Hard chooses full-speed pursuit using the same 8.7 m/s maximum and sprint fatigue as the human player. No ball-physics speed multiplier or teleporting defenders. H or HELP: input-adaptive controls and skippable first-play lesson. M: read score, time, selected player and ball zone. F + direction: body feint while in possession. Touch: More, Feint. Controller: right-stick flick or click. Feints keep the same collision radius and do not teleport the player. Match awareness: recent event log, major/possession/muted announcement modes and on-demand status. This is not certified nonvisual competitive play. Gamepad reconnect, focus loss and pause cancel held actions; release sticks and buttons to neutral before continuing. Help and event panels support D-pad navigation. Hardware DualSense verification is still required. See CHANGELOG.txt for measured candidate results and unresolved PRD acceptance, especially Safari and real-device performance. Spoken commentary is included and can be disabled independently of stadium sound. Open index.html through a static web server. All runtime assets are bundled locally; no network services, accounts or build step are required. Play as FC Barcelona against Real Madrid at a procedural Camp Nou. Keyboard Arrow keys: move and aim S: short pass / standing tackle / passing header Hold D and release: shot. Tap D at a loose aerial ball: volley below 1.5 m or header above it Hold W and release: through ball, estimated 8 to 65 metre distance gauge; full power at 1.5 seconds, overhits possible E or Shift: sprint Hold Q or C when starting D: finesse shot Q defending or Tab: switch player Left Ctrl or Caps Lock held: protect / defensive jockey. E is reserved for sprint Hold A and release: loft / cross. A without possession: sliding tackle F + direction: feint. T: strategy. H: help. M: match status. Escape: pause Space: enter match, resume pause, continue after goal; shooting alias during play S puts the ball into play at a stationary kickoff Touch Simple is the default: one joystick, two contextual action buttons and Pause. With possession: Pass and Shoot. Without possession: Switch and Tackle. Push the joystick to its outer edge to sprint. Hold Shoot for power. Near a loose aerial ball, Shoot attempts a volley/header and Pass attempts a passing header. Pause opens sound, help, strategy and settings. Full touch controls are optional in settings, restoring More, Through, Loft/Slide, Close/Jockey, Sprint and Feint. Full mode keeps separate Switch. Sliding tackles commit forward and recover before another action. Match event notices now appear as a small bottom status line, not a central banner. Controller Left stick: move and aim A / Cross: short pass / standing tackle / passing header Xbox X / PlayStation Circle: shoot / volley / header Hold Y / Triangle and release: through ball; longer hold sends farther, full power at 1.5 seconds Xbox B / PlayStation Square: loft / cross / sliding tackle RB / R1: finesse when attacking, switch when defending LT / L2: protect / jockey. RT / R2: sprint LB / L1: strategy Right-stick flick: feint. Sprint + flick: knock on into space Start / Options: pause. A / Cross: resume or continue Connect a standard-mapped controller, then press a button. PlayStation IDs use Circle/Square; other standard IDs use Xbox X/B. Reconnect and pause require neutral sticks/buttons before play. Synthetic APIs are tested, not physical controllers. Duration and camera Six minutes remains the default. Settings offer 6, 10 and 15 active-play minutes; the next match uses 90 / chosen-minutes football seconds per real active second. Restarts, pause and celebrations do not advance the match clock. Duration does not scale simulation steps, movement, actions, physics, input sampling or rendering. No optional Measured pace is offered yet because its tuning has not passed playtests. Broadcast is the default camera by request; closer Player focus and Tactical remain selectable. Airborne framing uses only current ball height/velocity, modest lead and exponential smoothing. Player mesh detail follows projected size. These improve visibility but do not establish FIFA/PES visual parity or real-device performance acceptance. Goalkeepers track incoming shots, react and dive, catch softer shots, parry harder shots, smother close dribblers and distribute after catches. They remain beatable when out of position. Fast shots and passes use swept collision checks; goalposts and crossbars can deflect shots. The ball uses a regulation 11 cm radius. Settings include Auto, Low, High and Ultra high graphics, three match cameras, afternoon/golden-hour/floodlit lighting, volume and mute. Mute and graphics choices persist locally. Simple mobile Pause opens a full-screen, scrollable settings panel with a sticky Resume button. Desktop and Full touch mode retain the compact pause card; explicit settings reserve a side panel on wide screens or bottom panel on portrait. The page adapts to portrait and landscape. Mobile Auto uses capped rendering resolution, soft contact shadows and screen-size-selected player geometry. Player LODs share one animated skeleton per athlete: roughly 120,000 triangles for nearby players above 95 projected render pixels, 36,000 at medium distance and 11,000 below 26 pixels, with hysteresis to avoid switching chatter. Low retains detailed nearby footballers. Low crowd uses baked stand sections; High uses 16 varied cutouts in separately culled stadium sectors and adds simple instanced bodies only close to the camera. High and Ultra use one directional light with 512px and 1024px local shadow maps for nearby players, while distant players retain contact shadows. A single optional finishing pass adds mild sharpening, bloom and colour grading; it is disabled on Low and software rendering. Vignette is limited to goals. Turf uses one tiled colour material, a subtle normal map, broad mowing stripes and filtered field markings, with no individual grass blades. Running cadence follows velocity; the goal camera remains close-up. Goals show a close-up celebration: tap Continue Match, press Space/Enter, or use controller A/Cross to resume. These are scalable rendering budgets, not a verified 60 FPS claim on physical phones. Team strategy can be changed in settings, with T, or by tapping the plan label in play. Balanced keeps shape and support; Possession creates short passing triangles; Counter holds a deeper block and makes forward transition runs; High press pushes the cover line up. Both sides use coordinated pressing, zonal back and midfield lines with local marking, overlapping fullbacks, support runs and equal AI speed limits. Real Madrid switches toward pressing when behind and counterattacking when ahead. Close control keeps the ball nearer at a slower speed; CHIP gives it real height and remains interceptable. Mechanics: analog stick distance controls speed. Passes scale their pace with distance and lead moving teammates. Kicks have a short windup before foot contact (pass 0.10 seconds, shot 0.16, chip 0.17), followed by a recovery pose. A pass or shot pressed just before a receiver controls the ball is buffered for 0.25 seconds. Fast, awkward receptions can spill rather than stick automatically. Tackles have timed reach and body shielding: front-on contact pokes a loose ball, while a defender cannot steal through the carrier from behind. Both sides use the same tackle rules. Jockey keeps the torso facing the ball during lateral or backward movement. Running and kicks include a two-bone foot-placement correction, not captured professional animation. This is an independent playable football prototype, not an official FC Barcelona, Real Madrid, EA or LaLiga product. Team crests are used to identify the clubs. Player labels identify the lineup; the generated athlete model is not a likeness of individual players. Kickoffs, corners, goal kicks and throw-ins wait for a pass. Players and match time remain stationary during setup. Away restarts happen automatically after preparation. Throw-ins start above the head and follow a real ball arc. The first whole-ball boundary crossing determines the restart. Shots can aim to either side with up/down movement, and default to the side away from the keeper. Roster-specific light, tan, brown and dark skin use separate local texture atlases, including faces, arms, hands and exposed knees. The base texture no longer emits pale light. These are appearance variations, not individual face likenesses. Two teammates stand inside the centre circle for the opening pass. Natural movement update: defenders contain the ball carrier while a second defender covers a passing lane. Supporting midfielders step out of blocked passing lanes. Players react at staggered intervals, slow down as they reach their positions, stand when set, avoid nearby teammates and look toward play. Corrected mirrored away-team lateral lanes so defenders do not cross the pitch to swap sides after kickoff. This remains procedural movement, not professional motion capture or individual human likeness. Adaptive performance: Auto starts from renderer, touch, memory and CPU hints, then measures active frame delivery. Two slow windows reduce effects before resolution. Six good windows restore clarity before detail, with cooldowns to prevent rapid quality changes. Manual presets retain their chosen effects. Auto may reduce linear resolution to 65 percent of the device pixel budget after sustained overload; manual presets keep an 85 percent floor. Text and touch controls remain at native CSS size. Low uses a baked 1024px crowd atlas over stand sections instead of thousands of instances; software devices retain reduced stadium materials and no multisample antialiasing, but footballers now use physical materials on every device. Hardware devices additionally retain player cloth normal maps. Player mesh detail follows projected size. The 60 hardware-desktop / 30 touch-or-software targets are not guarantees; physical-device minimums remain unverified. Browser compatibility: the match uses standard WebGL 2, Pointer Events, Web Audio and Gamepad APIs, with no Chromium-only runtime API. Firefox with WebGL 2 and hardware acceleration is intended to work. Missing memory/GPU information uses conservative defaults. Blocked controller access or unavailable audio does not stop keyboard/touch play. Firefox itself was not available in the test environment, so Firefox execution is not claimed verified. Serve the bundle through HTTP(S), not file://; controller access may require HTTPS/localhost and a button press. A WebGL 2 failure explains the acceleration requirement. Rules implemented: ball possession, passing, through balls, shooting, tackles, keeper saves, goals, throw-ins, corners, goal kicks, offside, halftime and full time. Offside snapshots positions at a teammate's touch and whistles on an offside receiver's touch or nearby challenge. Direct throw-ins, corners and goal kicks are exempt. Defender rebounds and saves retain the phase; controlled defensive possession starts a new phase. Offside gives an indirect free kick and a direct goal is rejected until another player touches. Positions use player centres and proximity involvement, not body-part VAR or goalkeeper sightline adjudication. Sliding contact now has simplified referee decisions: body-first contact awards a direct free kick, or a penalty inside the defending penalty area. Reckless slides receive yellow; excessive closing speed or a forceful slide from behind receives red. A second yellow sends the player off. Safe ball-first and missed slides remain live. Both teams use the same geometry/speed checks. Dismissed players leave play, selection, passing, marking, offside and restart selection for the rest of the match. Fewer than seven players abandons the match. Match events/status retain card details. A brief impact knockdown is shown during a stopped clock; this is not a persistent injury diagnosis, treatment or substitution system. No advantage, handball, shirt-pulling, referee character animation or complete IFAB adjudication is claimed. Ball physics: gravity, air drag, modest spin curvature, energy-losing bounces, turf rolling resistance and visible rolling spin. Illegal sliding contact can knock an outfield player down and stops play for a foul. Ordinary running contact and clean standing tackles do not trigger falls. A fixed-step articulated particle solver drives the skeleton during the fall, then blends back to standing. Fallen players cannot move, receive or tackle until recovered. Restarts reset falls. This is an arcade ragdoll, not full rigid-body anatomy or professional motion capture. Accessibility: larger, higher-contrast match text, 44px minimum touch action targets, simplified default mobile controls, native keyboard focus and polite event announcements. Settings offer Readable and Larger text, saved locally. Portrait and landscape remain playable without rotating the device. Stadium detail update: 42 separate Mindblown sponsor panels use consistent physical proportions and alternate dark/white backgrounds. A squarer seating footprint clears the pitch corners. 48 Barcelona banners, 28 waving crest flags, dark under-tier recesses, textured concrete, under-banner light fixtures and 28 seated photographers add stadium detail on all presets. Aisles use metre-based widths rather than widening at the centre of the stands. Keeper dive and jump timers continue recovering during goals. Assets: locally generated rigged footballer and seated crowd, procedural stadium, bundled ambientCG Grass004 photographic colour/normal maps, generated ElevenLabs crowd/ball/whistle effects, local Three.js runtime. Team crests sourced from Wikimedia Commons. See ASSET-CREDITS.txt. Grass generation was attempted but rejected by the image service; the shipped material is photographic, not generated.