@@ -10,9 +10,18 @@ function updateNavState() {
1010 const bgCameraY = Math .min (scrollY * 0.58 , window .innerHeight * 0.7 );
1111 const bgOpacity = Math .max (1 - scrollY / (window .innerHeight * 0.95 ), 0 );
1212
13- document .documentElement .style .setProperty (" --sd-nav-progress" , progress .toFixed (3 ));
14- document .documentElement .style .setProperty (" --sd-hero-bg-camera-y" , ` ${(- bgCameraY ).toFixed (1 )}px ` );
15- document .documentElement .style .setProperty (" --sd-hero-bg-opacity" , bgOpacity .toFixed (3 ));
13+ document .documentElement .style .setProperty (
14+ " --sd-nav-progress" ,
15+ progress .toFixed (3 ),
16+ );
17+ document .documentElement .style .setProperty (
18+ " --sd-hero-bg-camera-y" ,
19+ ` ${(- bgCameraY ).toFixed (1 )}px ` ,
20+ );
21+ document .documentElement .style .setProperty (
22+ " --sd-hero-bg-opacity" ,
23+ bgOpacity .toFixed (3 ),
24+ );
1625 document .documentElement .classList .toggle (" sd-nav-scrolled" , progress > 0.02 );
1726}
1827
@@ -24,7 +33,10 @@ onMounted(() => {
2433
2534onBeforeUnmount (() => {
2635 window .removeEventListener (" scroll" , updateNavState );
27- document .documentElement .classList .remove (" sd-home-active" , " sd-nav-scrolled" );
36+ document .documentElement .classList .remove (
37+ " sd-home-active" ,
38+ " sd-nav-scrolled" ,
39+ );
2840 document .documentElement .style .removeProperty (" --sd-nav-progress" );
2941 document .documentElement .style .removeProperty (" --sd-hero-bg-camera-y" );
3042 document .documentElement .style .removeProperty (" --sd-hero-bg-opacity" );
@@ -41,7 +53,11 @@ async function copyCommand() {
4153 textarea .select ();
4254 const copiedViaSelection = document .execCommand (" copy" );
4355 textarea .remove ();
44- if (! copiedViaSelection && typeof navigator !== " undefined" && navigator .clipboard ) {
56+ if (
57+ ! copiedViaSelection &&
58+ typeof navigator !== " undefined" &&
59+ navigator .clipboard
60+ ) {
4561 await navigator .clipboard .writeText (command );
4662 }
4763 } catch {
@@ -61,19 +77,27 @@ async function copyCommand() {
6177 <h1 id =" simdeck-title" >SimDeck</h1 >
6278 <p >Simulator Superpowers for you and your fleet of agents</p >
6379 <div class =" sd-command-wrap" aria-label =" Install and start SimDeck" >
64- <pre class =" sd-command" ><code ><span >npm i -g simdeck@latest</span ><span >simdeck</span ></code ></pre >
80+ <pre
81+ class =" sd-command"
82+ ><code ><span >npm i -g simdeck@latest</span ><span >simdeck</span ></code ></pre >
6583 <button
6684 class =" sd-copy"
6785 type =" button"
68- :aria-label =" copied ? 'Copied SimDeck install command' : 'Copy SimDeck install command'"
86+ :aria-label ="
87+ copied
88+ ? 'Copied SimDeck install command'
89+ : 'Copy SimDeck install command'
90+ "
6991 :data-copied =" copied ? 'true' : 'false'"
7092 @click =" copyCommand"
7193 >
7294 <svg viewBox =" 0 0 24 24" aria-hidden =" true" >
7395 <path v-if =" copied" d =" m5 12 4 4 10-10" />
7496 <template v-else >
7597 <path d =" M9 9h10v10H9z" />
76- <path d =" M5 15H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1" />
98+ <path
99+ d =" M5 15H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1"
100+ />
77101 </template >
78102 </svg >
79103 </button >
@@ -91,8 +115,8 @@ async function copyCommand() {
91115 <section class =" sd-story" aria-labelledby =" simdeck-story" >
92116 <div class =" sd-story-head sd-reveal" >
93117 <h2 id =" simdeck-story" >
94- SimDeck does not get in the way. It makes the way for agents to work without dividing your
95- attention.
118+ SimDeck does not get in the way. It makes the way for agents to work
119+ without dividing your attention.
96120 </h2 >
97121 </div >
98122
@@ -102,9 +126,11 @@ async function copyCommand() {
102126 <div class =" sd-moment-copy" >
103127 <h3 >Live Simulator, where your work already happens</h3 >
104128 <p >
105- Open Simulator side by side in your favorite IDE or agent orchestrator. Supported in VS Code,
106- Codex, Cursor, Claude Code, and more. Simulators run headlessly in the background for agents to
107- operate on while you stay focused on what matters in the current context.
129+ Open Simulator side by side in your favorite IDE or agent
130+ orchestrator. Supported in VS Code, Codex, Cursor, Claude Code,
131+ and more. Simulators run headlessly in the background for agents
132+ to operate on while you stay focused on what matters in the
133+ current context.
108134 </p >
109135 </div >
110136 <figure class =" sd-shot sd-shot-image sd-shot-ide" >
@@ -120,9 +146,9 @@ async function copyCommand() {
120146 <div class =" sd-moment-copy" >
121147 <h3 >Pull request previews for mobile apps</h3 >
122148 <p >
123- GitHub Actions can build the app, boot a simulator, and stream the session back through
124- SimDeck. Review a mobile PR like a web preview: open it, tap around, and merge with actual
125- confidence.
149+ GitHub Actions can build the app, boot a simulator, and stream the
150+ session back through SimDeck. Review a mobile PR like a web
151+ preview: open it, tap around, and merge with actual confidence.
126152 </p >
127153 </div >
128154 <figure class =" sd-shot sd-shot-image sd-shot-pr-image" >
@@ -138,8 +164,9 @@ async function copyCommand() {
138164 <div class =" sd-moment-copy" >
139165 <h3 >Remote simulator access without the screen-share lag</h3 >
140166 <p >
141- WebRTC carries the live stream to browsers, teammates, and SimDeck Studio on iOS. Pair
142- once, then drive the simulator from wherever the work is happening.
167+ WebRTC carries the live stream to browsers, teammates, and SimDeck
168+ Studio on iOS. Pair once, then drive the simulator from wherever
169+ the work is happening.
143170 </p >
144171 </div >
145172 <figure class =" sd-shot sd-shot-remote-card" >
@@ -155,11 +182,15 @@ async function copyCommand() {
155182 <div class =" sd-moment-copy" >
156183 <h3 >A CLI your agents can actually trust</h3 >
157184 <p >
158- Boot, install, launch, tap, type, describe, screenshot, record, and assert. Stable commands
159- and clear JSON errors turn simulators into end-to-end test rigs for every agent in your fleet.
185+ Boot, install, launch, tap, type, describe, screenshot, record,
186+ and assert. Stable commands and clear JSON errors turn simulators
187+ into end-to-end test rigs for every agent in your fleet.
160188 </p >
161189 </div >
162- <div class =" sd-shot sd-shot-cli" aria-label =" Screenshot placeholder for SimDeck CLI automation" >
190+ <div
191+ class =" sd-shot sd-shot-cli"
192+ aria-label =" Screenshot placeholder for SimDeck CLI automation"
193+ >
163194 <div class =" sd-cli-lines" aria-hidden =" true" >
164195 <span >$ simdeck boot "iPhone 17"</span >
165196 <span >$ simdeck install app.app</span >
@@ -175,8 +206,9 @@ async function copyCommand() {
175206 <div >
176207 <h2 >Don't switch context. Give the simulator a URL.</h2 >
177208 <p >
178- Run it headlessly on your Mac, stream it into your editor or pull request, and let agents tap,
179- type, inspect, screenshot, and verify without taking over your screen.
209+ Run it headlessly on your Mac, stream it into your editor or pull
210+ request, and let agents tap, type, inspect, screenshot, and verify
211+ without taking over your screen.
180212 </p >
181213 </div >
182214 <a href =" /guide/quick-start" >Start with the quick start</a >
0 commit comments