@@ -203,6 +203,7 @@ onUnmounted(() => {
203203 < a href= " /" class = " nav-brand" >< PythinkerMascot : width= " 26" : height= " 32" / >< span> Pythinker Code< / span>< / a>
204204 < div class = " nav-actions" >
205205 < div class = " nav-links" >
206+ < a href= " #desktop" > Desktop< / a>
206207 < a href= " https://pymodel.github.io/pythinker-code/" target= " _blank" rel= " noopener" > Docs< / a>
207208 < a href= " https://github.com/PyModel/pythinker-code" target= " _blank" rel= " noopener" >< img src= " /brand/github.svg" alt= " " width= " 16" height= " 16" / > GitHub< / a>
208209 < a href= " https://www.npmjs.com/package/@pymodel/pythinker-code" target= " _blank" rel= " noopener" >< img src= " /brand/npm.svg" alt= " " width= " 16" height= " 16" / > npm< / a>
@@ -214,6 +215,7 @@ onUnmounted(() => {
214215 < / button>
215216 < Transition name= " mobile-menu" >
216217 < div v- show= " menuOpen" class = " mobile-menu-panel" >
218+ < a href= " #desktop" @click= " closeMenu(false)" > Desktop< / a>
217219 < a href= " https://pymodel.github.io/pythinker-code/" target= " _blank" rel= " noopener" @click= " closeMenu(false)" > Docs< / a>
218220 < a href= " https://github.com/PyModel/pythinker-code" target= " _blank" rel= " noopener" @click= " closeMenu(false)" >< img src= " /brand/github.svg" alt= " " width= " 16" height= " 16" / > GitHub< / a>
219221 < a href= " https://www.npmjs.com/package/@pymodel/pythinker-code" target= " _blank" rel= " noopener" @click= " closeMenu(false)" >< img src= " /brand/npm.svg" alt= " " width= " 16" height= " 16" / > npm< / a>
@@ -255,6 +257,25 @@ onUnmounted(() => {
255257 < / div>
256258 < / header>
257259
260+ < section id= " desktop" class = " section container desktop-showcase" aria- labelledby= " desktop-title" >
261+ < div class = " desktop-showcase-media reveal" >
262+ < video autoplay muted loop playsinline preload= " metadata" poster= " /pythinker_desktop.png" aria- label= " Pythinker Desktop app" >
263+ < source src= " /pythinker_desktop.webm" type= " video/webm" / >
264+ < img src= " /pythinker_desktop.webp" alt= " Pythinker Desktop showing an AI coding session" / >
265+ < / video>
266+ < img class = " desktop-showcase-still" src= " /pythinker_desktop.webp" alt= " Pythinker Desktop showing an AI coding session" / >
267+ < / div>
268+ < div class = " desktop-showcase-copy reveal" >
269+ < p class = " eyebrow" > Desktop app< / p>
270+ < h2 id= " desktop-title" class = " display-md" > Pythinker Desktop< / h2>
271+ < p class = " desktop-showcase-lead" > The agent in a native macOS app, with sidebar sessions, live activity, and auto- updates.< / p>
272+ < div class = " desktop-showcase-actions" >
273+ < a class = " button button-primary" href= " https://github.com/PyModel/pythinker-code/releases/latest" target= " _blank" rel= " noopener" > Download for macOS< / a>
274+ < span class = " desktop-showcase-note" > Auto- updates included · Apple Silicon< / span>
275+ < / div>
276+ < / div>
277+ < / section>
278+
258279 < div class = " works-with" aria- label= " Works with leading AI models" >
259280 < span class = " works-with-label" > Works with < / span>
260281 < div class = " works-with-marquee" aria- hidden= " true" >
@@ -731,6 +752,65 @@ onUnmounted(() => {
731752 margin-inline: auto;
732753}
733754
755+ .desktop-showcase {
756+ display: grid;
757+ grid-template-columns: 3fr 2fr;
758+ align-items: center;
759+ gap: 48px;
760+ }
761+
762+ .desktop-showcase-media {
763+ width: 100%;
764+ max-width: 100%;
765+ min-width: 0;
766+ overflow: hidden;
767+ aspect-ratio: 2048 / 1300;
768+ border: 1px solid var(--hairline);
769+ border-radius: var(--r-lg);
770+ background: var(--terminal-bg);
771+ box-shadow: var(--shadow-terminal);
772+ }
773+
774+ .desktop-showcase-media video,
775+ .desktop-showcase-media video > img,
776+ .desktop-showcase-media > img {
777+ display: block;
778+ width: 100%;
779+ max-width: 100%;
780+ height: 100%;
781+ object-fit: cover;
782+ }
783+
784+ .desktop-showcase-still {
785+ display: none !important;
786+ }
787+
788+ .desktop-showcase-copy {
789+ display: flex;
790+ flex-direction: column;
791+ gap: 20px;
792+ align-items: flex-start;
793+ }
794+
795+ .desktop-showcase-lead {
796+ color: var(--ink-muted);
797+ font-size: 16px;
798+ line-height: 1.6;
799+ }
800+
801+ .desktop-showcase-actions {
802+ display: flex;
803+ flex-wrap: wrap;
804+ align-items: center;
805+ gap: 16px;
806+ }
807+
808+ .desktop-showcase-note {
809+ color: var(--ink-subtle);
810+ font-size: 13px;
811+ line-height: 1.5;
812+ }
813+
734814.works-with {
735815 display: flex;
736816 width: 100%;
@@ -1665,7 +1745,8 @@ onUnmounted(() => {
16651745@media (max - width : 899px ) {
16661746 .quickstart - grid,
16671747 .docs - grid,
1668- .vscode - grid {
1748+ .vscode - grid,
1749+ .desktop - showcase {
16691750 grid- template- columns: 1fr ;
16701751 }
16711752
@@ -1825,6 +1906,14 @@ onUnmounted(() => {
18251906}
18261907
18271908@media (prefers - reduced - motion : reduce ) {
1909+ .desktop - showcase- media video {
1910+ display: none;
1911+ }
1912+
1913+ .desktop - showcase- media .desktop - showcase- still {
1914+ display: block ! important;
1915+ }
1916+
18281917 .works - with - track {
18291918 animation: none;
18301919 }
0 commit comments