| author | |
| committer | |
| log | b2e15185aee22bfdee78806f2734b0a4de9c2c77 |
| tree | 0414bd9c03cab9393a23501079dcbeb6147fe0a7 |
| parent | 84aebb72f306f17bed680e1241dab9ab8e8df741 |
| signature | Signed by PGP key B5690EEEBB952194 |
36 files changed, 1678 insertions(+), 0 deletions(-)
apps/marketing/public/95/providers/antigravity-320.webp created| Binary files /dev/null and b/apps/marketing/public/95/providers/antigravity-320.webp differ |
apps/marketing/public/95/providers/antigravity-640.webp created| Binary files /dev/null and b/apps/marketing/public/95/providers/antigravity-640.webp differ |
apps/marketing/public/95/providers/antigravity-960.webp created| Binary files /dev/null and b/apps/marketing/public/95/providers/antigravity-960.webp differ |
apps/marketing/public/95/providers/claude-code-320.webp created| Binary files /dev/null and b/apps/marketing/public/95/providers/claude-code-320.webp differ |
apps/marketing/public/95/providers/claude-code-640.webp created| Binary files /dev/null and b/apps/marketing/public/95/providers/claude-code-640.webp differ |
apps/marketing/public/95/providers/claude-code-960.webp created| Binary files /dev/null and b/apps/marketing/public/95/providers/claude-code-960.webp differ |
apps/marketing/public/95/providers/codex-320.webp created| Binary files /dev/null and b/apps/marketing/public/95/providers/codex-320.webp differ |
apps/marketing/public/95/providers/codex-640.webp created| Binary files /dev/null and b/apps/marketing/public/95/providers/codex-640.webp differ |
apps/marketing/public/95/providers/codex-960.webp created| Binary files /dev/null and b/apps/marketing/public/95/providers/codex-960.webp differ |
apps/marketing/public/95/providers/cursor-320.webp created| Binary files /dev/null and b/apps/marketing/public/95/providers/cursor-320.webp differ |
apps/marketing/public/95/providers/cursor-640.webp created| Binary files /dev/null and b/apps/marketing/public/95/providers/cursor-640.webp differ |
apps/marketing/public/95/providers/cursor-960.webp created| Binary files /dev/null and b/apps/marketing/public/95/providers/cursor-960.webp differ |
apps/marketing/public/95/providers/grok-320.webp created| Binary files /dev/null and b/apps/marketing/public/95/providers/grok-320.webp differ |
apps/marketing/public/95/providers/grok-640.webp created| Binary files /dev/null and b/apps/marketing/public/95/providers/grok-640.webp differ |
apps/marketing/public/95/providers/grok-960.webp created| Binary files /dev/null and b/apps/marketing/public/95/providers/grok-960.webp differ |
apps/marketing/public/95/providers/opencode-320.webp created| Binary files /dev/null and b/apps/marketing/public/95/providers/opencode-320.webp differ |
apps/marketing/public/95/providers/opencode-640.webp created| Binary files /dev/null and b/apps/marketing/public/95/providers/opencode-640.webp differ |
apps/marketing/public/95/providers/opencode-960.webp created| Binary files /dev/null and b/apps/marketing/public/95/providers/opencode-960.webp differ |
apps/marketing/public/95/t3-code-concepts/t3-code-chrome.webp created| Binary files /dev/null and b/apps/marketing/public/95/t3-code-concepts/t3-code-chrome.webp differ |
apps/marketing/public/95/t3-code-concepts/t3-code-desktop.webp created| Binary files /dev/null and b/apps/marketing/public/95/t3-code-concepts/t3-code-desktop.webp differ |
apps/marketing/public/95/t3-code-concepts/t3-code-lime-320.webp created| Binary files /dev/null and b/apps/marketing/public/95/t3-code-concepts/t3-code-lime-320.webp differ |
apps/marketing/public/95/t3-code-concepts/t3-code-lime-640.webp created| Binary files /dev/null and b/apps/marketing/public/95/t3-code-concepts/t3-code-lime-640.webp differ |
apps/marketing/public/95/t3-code-concepts/t3-code-lime.webp created| Binary files /dev/null and b/apps/marketing/public/95/t3-code-concepts/t3-code-lime.webp differ |
apps/marketing/public/95/t3-code-concepts/t3-code-nightly-clouds-320.webp created| Binary files /dev/null and b/apps/marketing/public/95/t3-code-concepts/t3-code-nightly-clouds-320.webp differ |
apps/marketing/public/95/t3-code-concepts/t3-code-nightly-clouds-640.webp created| Binary files /dev/null and b/apps/marketing/public/95/t3-code-concepts/t3-code-nightly-clouds-640.webp differ |
apps/marketing/public/95/t3-code-concepts/t3-code-nightly-clouds.webp created| Binary files /dev/null and b/apps/marketing/public/95/t3-code-concepts/t3-code-nightly-clouds.webp differ |
apps/marketing/public/95/t3-code-concepts/t3-code-nightly-foil-320.webp created| Binary files /dev/null and b/apps/marketing/public/95/t3-code-concepts/t3-code-nightly-foil-320.webp differ |
apps/marketing/public/95/t3-code-concepts/t3-code-nightly-foil-640.webp created| Binary files /dev/null and b/apps/marketing/public/95/t3-code-concepts/t3-code-nightly-foil-640.webp differ |
apps/marketing/public/95/t3-code-concepts/t3-code-nightly-foil.webp created| Binary files /dev/null and b/apps/marketing/public/95/t3-code-concepts/t3-code-nightly-foil.webp differ |
apps/marketing/public/95/t3-code-concepts/t3-code-nightly-lavender-320.webp created| Binary files /dev/null and b/apps/marketing/public/95/t3-code-concepts/t3-code-nightly-lavender-320.webp differ |
apps/marketing/public/95/t3-code-concepts/t3-code-nightly-lavender-640.webp created| Binary files /dev/null and b/apps/marketing/public/95/t3-code-concepts/t3-code-nightly-lavender-640.webp differ |
apps/marketing/public/95/t3-code-concepts/t3-code-nightly-lavender.webp created| Binary files /dev/null and b/apps/marketing/public/95/t3-code-concepts/t3-code-nightly-lavender.webp differ |
apps/marketing/src/components/RetroBox.astro created+23| ... | ... | @@ -0,0 +1,23 @@ |
| 1 | --- | |
| 2 | interface Props { | |
| 3 | image: string; | |
| 4 | alt: string; | |
| 5 | sizes: string; | |
| 6 | eager?: boolean; | |
| 7 | } | |
| 8 | ||
| 9 | const { image, alt, sizes, eager = false } = Astro.props; | |
| 10 | const base = `/95/t3-code-concepts/${image}`; | |
| 11 | --- | |
| 12 | ||
| 13 | <img | |
| 14 | src={`${base}-640.webp`} | |
| 15 | srcset={`${base}-320.webp 320w, ${base}-640.webp 640w, ${base}.webp 960w`} | |
| 16 | {sizes} | |
| 17 | {alt} | |
| 18 | width="960" | |
| 19 | height="1200" | |
| 20 | loading={eager ? "eager" : "lazy"} | |
| 21 | fetchpriority={eager ? "high" : "auto"} | |
| 22 | decoding="async" | |
| 23 | /> |
apps/marketing/src/components/RetroIcon.astro created+57| ... | ... | @@ -0,0 +1,57 @@ |
| 1 | --- | |
| 2 | interface Props { | |
| 3 | name: "computer" | "disk" | "globe" | "bin" | "folder" | "cursor"; | |
| 4 | size?: number; | |
| 5 | } | |
| 6 | ||
| 7 | const { name, size = 32 } = Astro.props; | |
| 8 | --- | |
| 9 | ||
| 10 | <svg width={size} height={size} viewBox="0 0 32 32" fill="none" shape-rendering="crispEdges" aria-hidden="true"> | |
| 11 | {name === "computer" && <> | |
| 12 | <path fill="#000" d="M3 2h25v22H3zM10 24h11v3h7v4H3v-4h7z" /> | |
| 13 | <path fill="#c0c0c0" d="M3 2h23v20H3zM12 22h7v5h7v2H4v-2h8z" /> | |
| 14 | <path fill="#fff" d="M3 2h23v2H5v18H3zM4 27h22v1H4z" /> | |
| 15 | <path fill="#808080" d="M6 5h17v14H6zM5 20h20v2H5z" /> | |
| 16 | <path fill="#000080" d="M8 7h15v10H8z" /> | |
| 17 | <path fill="#51e5cf" d="M9 8h13v2H9zM9 11h5v4H9z" /> | |
| 18 | <path fill="#fff" d="M16 11h5v1h-5zM16 14h4v1h-4z" /> | |
| 19 | <path fill="#baff00" d="M21 20h2v1h-2z" /> | |
| 20 | </>} | |
| 21 | {name === "disk" && <> | |
| 22 | <path fill="#000" d="M3 2h23l4 4v24H3z" /> | |
| 23 | <path fill="#4747b8" d="M3 2h22l3 3v23H3z" /> | |
| 24 | <path fill="#9c9cff" d="M3 2h2v26H3zM5 2h20v2H5z" /> | |
| 25 | <path fill="#c0c0c0" d="M8 3h14v9H8z" /> | |
| 26 | <path fill="#fff" d="M8 3h2v9H8z" /> | |
| 27 | <path fill="#000" d="M17 4h4v6h-4z" /> | |
| 28 | <path fill="#fff" d="M7 16h17v12H7z" /> | |
| 29 | <path fill="#ff65b3" d="M7 16h17v3H7z" /> | |
| 30 | <path fill="#808080" d="M10 21h11v1H10zM10 24h8v1h-8z" /> | |
| 31 | </>} | |
| 32 | {name === "globe" && <> | |
| 33 | <path fill="#000" d="M11 1h10v2h5v5h3v16h-4v5h-5v2H10v-3H5v-5H2V10h3V5h6z" /> | |
| 34 | <path fill="#5353dd" d="M11 2h9v2h5v5h3v13h-4v5h-5v3h-8v-3H6v-5H3V11h3V6h5z" /> | |
| 35 | <path fill="#80ffff" d="M11 3h8v2h-7v3H8v5H5v-3h2V6h4z" /> | |
| 36 | <path fill="#00ba80" d="M14 5h7v4h4v5h-6v-3h-5zM7 13h7v3h6v4h-4v6h-5v-5H7zM23 21h3v3h-3z" /> | |
| 37 | <path fill="#baff00" d="M14 5h6v2h-6zM7 13h6v2H7z" /> | |
| 38 | </>} | |
| 39 | {name === "bin" && <> | |
| 40 | <path fill="#000" d="M6 8h21v3h-2v18H8V11H6zM10 3h12v3h5v3H5V6h5z" /> | |
| 41 | <path fill="#c0c0c0" d="M7 10h17v18H9V13H7zM7 6h17v3H7zM12 3h7v3h-7z" /> | |
| 42 | <path fill="#fff" d="M9 11h2v15H9zM7 6h17v1H7zM13 12h2v13h-2zM18 12h2v13h-2z" /> | |
| 43 | <path fill="#808080" d="M15 12h2v13h-2zM20 12h2v13h-2zM11 27h13v2H11z" /> | |
| 44 | <path fill="#2f986b" d="M13 15h7v2h-4v2h-3zM12 20h3v2h5v2h-8zM20 18h2v4h-2z" /> | |
| 45 | </>} | |
| 46 | {name === "folder" && <> | |
| 47 | <path fill="#000" d="M2 6h12v3h15v20H2z" /> | |
| 48 | <path fill="#e3ba3f" d="M2 6h11v3h14v18H2z" /> | |
| 49 | <path fill="#fff4a0" d="M2 6h11v2H4v18H2z" /> | |
| 50 | <path fill="#fff4a0" d="M5 13h25v3h-2v6h-2v5H3v-8h2z" /> | |
| 51 | <path fill="#e3ba3f" d="M6 15h23v1h-2v6h-2v4H5v-7h1z" /> | |
| 52 | </>} | |
| 53 | {name === "cursor" && <> | |
| 54 | <path fill="#000" d="M5 1h3v3h3v3h3v3h3v3h3v3h3v3h3v4H16l5 8h-7l-5-9-4 4z" /> | |
| 55 | <path fill="#fff" d="M7 5v16l4-4 6 12h2l-6-12h10z" /> | |
| 56 | </>} | |
| 57 | </svg> |
apps/marketing/src/pages/95.astro created+354| ... | ... | @@ -0,0 +1,354 @@ |
| 1 | --- | |
| 2 | import RetroIcon from "../components/RetroIcon.astro"; | |
| 3 | import RetroBox from "../components/RetroBox.astro"; | |
| 4 | import { GITHUB_REPOSITORY_URL, MARKETING_STATS } from "../lib/site"; | |
| 5 | import "../styles/retro.css"; | |
| 6 | ||
| 7 | const agents = [ | |
| 8 | { | |
| 9 | name: "Claude Code", | |
| 10 | slug: "claude-code", | |
| 11 | caption: "Now with manners.", | |
| 12 | artwork: "Cream and orange software box with a bow-tied desktop computer and a gold PLEASE sticker.", | |
| 13 | }, | |
| 14 | { | |
| 15 | name: "Codex", | |
| 16 | slug: "codex", | |
| 17 | caption: "Some assembly automated.", | |
| 18 | artwork: "Silver and green software box with a robot hand stacking glowing code blocks.", | |
| 19 | }, | |
| 20 | { | |
| 21 | name: "Cursor", | |
| 22 | slug: "cursor", | |
| 23 | caption: "Point. Click. Question everything.", | |
| 24 | artwork: "Black and chrome software box with an enormous silver arrow and lightning bolts.", | |
| 25 | }, | |
| 26 | { | |
| 27 | name: "Grok", | |
| 28 | slug: "grok", | |
| 29 | caption: "Adult supervision sold separately.", | |
| 30 | artwork: "Black and red software box with a spacecraft and an UH OH sticker.", | |
| 31 | }, | |
| 32 | { | |
| 33 | name: "OpenCode", | |
| 34 | slug: "opencode", | |
| 35 | caption: "Please copy this floppy.", | |
| 36 | artwork: "Purple shareware box with floppy disks spilling from an open carton.", | |
| 37 | }, | |
| 38 | { | |
| 39 | name: "Antigravity", | |
| 40 | slug: "antigravity", | |
| 41 | caption: "System requirement: no gravity.", | |
| 42 | artwork: "Blue and violet software box with a floating chrome triangle and metallic spheres.", | |
| 43 | }, | |
| 44 | ]; | |
| 45 | const userDigits = MARKETING_STATS.users.replaceAll(",", "").padStart(7, "0").split(""); | |
| 46 | --- | |
| 47 | ||
| 48 | <!doctype html> | |
| 49 | <html lang="en"> | |
| 50 | <head> | |
| 51 | <meta charset="UTF-8" /> | |
| 52 | <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |
| 53 | <meta name="description" content="Introducing T3 Code. All your coding agents in one happy little window. Free, open source, and available without six CD-ROMs." /> | |
| 54 | <meta name="theme-color" content="#000000" /> | |
| 55 | <link rel="icon" href="/favicon.ico" sizes="48x48" /> | |
| 56 | <title>T3 Code '95 | The future is now. Like, right now.</title> | |
| 57 | </head> | |
| 58 | <body> | |
| 59 | <a class="skip-link retro-button" href="#main-content">Skip to the sales pitch</a> | |
| 60 | ||
| 61 | <nav class="desktop-icons" aria-label="Desktop shortcuts"> | |
| 62 | <a href="/" class="desktop-icon"><RetroIcon name="computer" /><span>My Computer</span></a> | |
| 63 | <a href="/download" class="desktop-icon"><RetroIcon name="disk" /><span>Install T3 Code</span></a> | |
| 64 | <a href={GITHUB_REPOSITORY_URL} class="desktop-icon"><RetroIcon name="globe" /><span>Network<br />Neighborhood</span></a> | |
| 65 | <button type="button" class="desktop-icon" data-dialog="recycle"><RetroIcon name="bin" /><span>Bad Ideas</span></button> | |
| 66 | </nav> | |
| 67 | ||
| 68 | <div class="desktop"> | |
| 69 | <div class="browser-window raised" id="sales-window"> | |
| 70 | <header class="window-title" id="window-title" tabindex="0" aria-label="Move browser window. Drag or use arrow keys. Double-click to maximize."> | |
| 71 | <span class="window-name"><RetroIcon name="globe" size={18} /><span>T3 Code '95 - Internet Explorer</span></span> | |
| 72 | <div class="window-controls"> | |
| 73 | <button class="retro-button window-control" type="button" id="minimize" aria-label="Minimize window"><span aria-hidden="true">_</span></button> | |
| 74 | <button class="retro-button window-control" type="button" id="maximize" aria-label="Maximize window" aria-pressed="false"><span class="maximize-icon" aria-hidden="true"></span></button> | |
| 75 | <button class="retro-button window-control" type="button" data-dialog="close" aria-label="Close window"><span aria-hidden="true">×</span></button> | |
| 76 | </div> | |
| 77 | </header> | |
| 78 | ||
| 79 | <nav class="browser-menu" aria-label="Page navigation"> | |
| 80 | <a href="#nightly"><u>N</u>ightly</a> | |
| 81 | <a href="#features"><u>F</u>eatures</a> | |
| 82 | <a href="#agents"><u>A</u>gents</a> | |
| 83 | <a href="#order"><u>O</u>rder now</a> | |
| 84 | <a href={GITHUB_REPOSITORY_URL}><u>S</u>ource</a> | |
| 85 | <button type="button" data-dialog="help"><u>H</u>elp</button> | |
| 86 | </nav> | |
| 87 | ||
| 88 | <div class="address-bar"> | |
| 89 | <span>Address</span> | |
| 90 | <div class="address-field sunken"><RetroIcon name="globe" size={16} /><span>https://t3.codes/95</span></div> | |
| 91 | <a class="retro-button address-go" href="/">Go <span aria-hidden="true">↗</span></a> | |
| 92 | </div> | |
| 93 | ||
| 94 | <main id="main-content" tabindex="0"> | |
| 95 | <section class="hero" aria-labelledby="hero-title"> | |
| 96 | <div class="hero-copy"> | |
| 97 | <h1 id="hero-title">All your agents.<br />One happy<br /><span>little window.</span></h1> | |
| 98 | <p class="hero-explanation">Your coding agents in one free, open-source app.<br />You bring the subscriptions. We bring the buttons.</p> | |
| 99 | <div class="platform-line"><span>AVAILABLE FOR</span><strong>Windows</strong><b>·</b><strong>macOS</strong><b>·</b><strong>Linux</strong></div> | |
| 100 | </div> | |
| 101 | ||
| 102 | <div class="edition-packages" aria-label="Choose Stable or Nightly"> | |
| 103 | <a class="hero-package" href="/download" aria-label="Download T3 Code stable"> | |
| 104 | <RetroBox image="t3-code-lime" alt="T3 Code in a lime and teal software box." sizes="(max-width: 620px) 38vw, 170px" eager /> | |
| 105 | <span class="retro-button edition-download">Get Stable <span aria-hidden="true">↗</span></span> | |
| 106 | </a> | |
| 107 | <a class="hero-package nightly-package" id="nightly" href={`${GITHUB_REPOSITORY_URL}/releases?q=nightly&expanded=true`} aria-label="Download T3 Code Nightly preview builds"> | |
| 108 | <RetroBox image="t3-code-nightly-clouds" alt="T3 Code Nightly in a navy box with violet clouds." sizes="(max-width: 620px) 38vw, 170px" eager /> | |
| 109 | <span class="retro-button edition-download">Get Nightly <span aria-hidden="true">↗</span></span> | |
| 110 | </a> | |
| 111 | </div> | |
| 112 | </section> | |
| 113 | ||
| 114 | <section class="agents-section" id="agents" aria-labelledby="agents-title"> | |
| 115 | <div class="section-heading"><h2 id="agents-title">Bring your favorite agents.</h2></div> | |
| 116 | <div class="agent-list"> | |
| 117 | {agents.map((agent, index) => ( | |
| 118 | <figure class="agent"> | |
| 119 | <img | |
| 120 | class="agent-box" | |
| 121 | src={`/95/providers/${agent.slug}-640.webp`} | |
| 122 | srcset={[320, 640, 960].map((width) => `/95/providers/${agent.slug}-${width}.webp ${width}w`).join(", ")} | |
| 123 | sizes="auto, (max-width: 620px) 43vw, (max-width: 1100px) 27vw, 280px" | |
| 124 | alt={agent.artwork} | |
| 125 | width="640" | |
| 126 | height="800" | |
| 127 | loading={index < 3 ? "eager" : "lazy"} | |
| 128 | decoding="async" | |
| 129 | /> | |
| 130 | <figcaption> | |
| 131 | <h3>{agent.name}</h3> | |
| 132 | <p>{agent.caption}</p> | |
| 133 | </figcaption> | |
| 134 | </figure> | |
| 135 | ))} | |
| 136 | </div> | |
| 137 | <p class="agents-note">Use the providers and subscriptions you already have. Provider charges still apply.</p> | |
| 138 | <p class="agents-note">Parody packaging. No actual boxes for sale.</p> | |
| 139 | </section> | |
| 140 | ||
| 141 | <section class="features-section" id="features" aria-labelledby="features-title"> | |
| 142 | <div class="section-heading"><h2 id="features-title">Inside every copy.</h2></div> | |
| 143 | <div class="feature-grid"> | |
| 144 | <article class="feature-window raised"> | |
| 145 | <div class="feature-titlebar"><span>01_multitasking.exe</span><span aria-hidden="true">■</span></div> | |
| 146 | <div class="feature-body"><RetroIcon name="computer" size={38} /><h3>More agents.<br />Less window aerobics.</h3><p>Run agents side by side. Keep your threads, terminals, and diffs together. Reclaim your Alt-Tab finger.</p></div> | |
| 147 | </article> | |
| 148 | <article class="feature-window raised"> | |
| 149 | <div class="feature-titlebar"><span>02_remote_access.exe</span><span aria-hidden="true">■</span></div> | |
| 150 | <div class="feature-body"><RetroIcon name="globe" size={38} /><h3>Your computer.<br />Now over there.</h3><p>Connect from the web, desktop, or mobile. Your agents keep working on your machine. You may approach the couch.</p></div> | |
| 151 | </article> | |
| 152 | <article class="feature-window raised"> | |
| 153 | <div class="feature-titlebar"><span>03_source_code.txt</span><span aria-hidden="true">■</span></div> | |
| 154 | <div class="feature-body"><RetroIcon name="folder" size={38} /><h3>We left the<br />source code in.</h3><p>Read it. Change it. Fork the whole thing. It's MIT licensed, because your tools should actually be yours.</p><a class="feature-tag" href={GITHUB_REPOSITORY_URL}>View source <span aria-hidden="true">↗</span></a></div> | |
| 155 | </article> | |
| 156 | <article class="feature-window raised"> | |
| 157 | <div class="feature-titlebar"><span>04_terminal.exe</span><span aria-hidden="true">■</span></div> | |
| 158 | <div class="feature-body"><RetroIcon name="computer" size={38} /><h3>A terminal.<br />Right where you work.</h3><p>Run commands alongside your agents. Keep the output with the project.</p></div> | |
| 159 | </article> | |
| 160 | <article class="feature-window raised"> | |
| 161 | <div class="feature-titlebar"><span>05_changes.diff</span><span aria-hidden="true">■</span></div> | |
| 162 | <div class="feature-body"><RetroIcon name="folder" size={38} /><h3>See what<br />actually changed.</h3><p>Inspect file diffs and review the work before you ship it.</p></div> | |
| 163 | </article> | |
| 164 | <article class="feature-window raised"> | |
| 165 | <div class="feature-titlebar"><span>06_checkpoint.bak</span><span aria-hidden="true">■</span></div> | |
| 166 | <div class="feature-body"><RetroIcon name="disk" size={38} /><h3>A way<br />back.</h3><p>Use turn checkpoints to inspect changes and restore earlier work.</p></div> | |
| 167 | </article> | |
| 168 | </div> | |
| 169 | </section> | |
| 170 | ||
| 171 | <section class="order-section" id="order" aria-labelledby="order-title"> | |
| 172 | <div class="order-pitch"><h2 id="order-title">For just <span>0 easy payments</span><br />of absolutely nothing.</h2><p>Get the app. Keep your subscriptions.</p><a class="retro-button primary-cta" href="/download"><RetroIcon name="disk" size={25} /><span>GET T3 CODE. IT'S FREE.</span><span aria-hidden="true">→</span></a><p class="offer-note">T3 Code is free. Your AI provider may charge for use.</p></div> | |
| 173 | <div class="run-window raised"><div class="window-title"><span>Run</span><RetroIcon name="computer" size={18} /></div><div class="run-body"><p>Too cool for an installer?</p><label for="run-command">Type this in your terminal.</label><div class="command-row"><input id="run-command" class="sunken" value="npx t3" readonly spellcheck="false" aria-label="Terminal command" /><button type="button" class="retro-button" id="copy-command">Copy</button></div><p class="command-feedback" id="command-feedback" role="status">Node.js required. Modem optional.</p><div class="run-divider"></div><b>System requirements</b><ul><li>A modern computer</li><li>A supported coding agent</li><li>A dream, ideally a small one</li></ul><p class="requirements-note">Does not actually run on Windows 95.</p></div></div> | |
| 174 | </section> | |
| 175 | ||
| 176 | <section class="faq-section" aria-labelledby="faq-title"> | |
| 177 | <h2 id="faq-title">Questions</h2> | |
| 178 | <details><summary>Wait. Is this a real product?</summary><p>Yes. T3 Code is a real, free, open-source app used by {MARKETING_STATS.users} developers. The packaging is a joke. The app is not. <a href="/">Visit the regular website.</a></p></details> | |
| 179 | <details><summary>Does this replace my Claude or Codex subscription?</summary><p>No. T3 Code connects to the coding agents you already use. Keep your provider accounts and subscriptions. T3 Code gives you one app to work with them.</p></details> | |
| 180 | <details><summary>Will it run on Windows 95?</summary><p>Absolutely not. We brought back the look, not the driver problems. <a href="/download">Get a build for a current version of Windows, macOS, or Linux.</a></p></details> | |
| 181 | <details><summary>Where do I mail my check?</summary><p>Please do not mail us a check for zero dollars. Just download the app. The entire accounts department is a download button.</p></details> | |
| 182 | </section> | |
| 183 | ||
| 184 | <footer class="site-footer"> | |
| 185 | <div class="visitor-counter"><div class="counter-digits" aria-label={`${MARKETING_STATS.users} users`}>{userDigits.map((digit) => <span aria-hidden="true">{digit}</span>)}</div><span>developers use T3 Code.</span></div> | |
| 186 | <p>© {new Date().getFullYear()} T3 Tools Inc.</p> | |
| 187 | <nav aria-label="Footer"><a href="/">Back to the present</a><a href={GITHUB_REPOSITORY_URL}>GitHub</a><a href="/privacy-policy">Privacy</a><a href="/terms-of-service">Terms</a></nav> | |
| 188 | </footer> | |
| 189 | </main> | |
| 190 | ||
| 191 | <div class="browser-status"><span class="sunken">Done.</span><span class="sunken"><RetroIcon name="globe" size={14} /> Internet</span><span class="resize-grip" aria-hidden="true"></span></div> | |
| 192 | </div> | |
| 193 | ||
| 194 | <div class="minimized-message" id="minimized-message" hidden><RetroIcon name="computer" size={64} /><h1>The future is minimized.</h1><p>Your productivity is one click away.</p><button type="button" class="retro-button" data-restore>Restore T3 Code '95</button></div> | |
| 195 | </div> | |
| 196 | ||
| 197 | <div class="taskbar raised"> | |
| 198 | <details class="start-menu" id="start-menu"><summary class="retro-button start-button"><span class="start-mark" aria-hidden="true"><i></i><i></i><i></i><i></i></span>Start</summary><nav class="start-panel raised" aria-label="Start menu"><div class="start-brand">T3 CODE <b>95</b></div><div><a href="/download"><RetroIcon name="disk" size={24} />Install T3 Code</a><button type="button" data-restore><RetroIcon name="computer" size={24} />Restore the future</button><a href={GITHUB_REPOSITORY_URL}><RetroIcon name="folder" size={24} />Explore source code</a><a href="/"><RetroIcon name="globe" size={24} />Return to the present</a></div></nav></details> | |
| 199 | <span class="taskbar-divider" aria-hidden="true"></span> | |
| 200 | <button class="task-button sunken" type="button" data-restore><RetroIcon name="globe" size={20} /><span>T3 Code '95</span></button> | |
| 201 | <div class="taskbar-clock sunken"><span aria-hidden="true">◷</span><span>4:04 PM</span></div> | |
| 202 | </div> | |
| 203 | ||
| 204 | <dialog class="retro-dialog raised" id="sales-dialog" aria-labelledby="dialog-title" aria-describedby="dialog-message"><div class="window-title"><span id="dialog-title">T3 Code '95</span><button type="button" class="retro-button window-control" data-dismiss aria-label="Close dialog">×</button></div><div class="dialog-content"><RetroIcon name="computer" size={42} /><p id="dialog-message"></p></div><div class="dialog-actions"><button class="retro-button" type="button" data-dismiss autofocus>OK, fine.</button><a class="retro-button" href="/download">Get T3 Code</a></div></dialog> | |
| 205 | ||
| 206 | <script> | |
| 207 | const salesWindow = document.querySelector<HTMLElement>("#sales-window"); | |
| 208 | const minimizedMessage = document.querySelector<HTMLElement>("#minimized-message"); | |
| 209 | const minimizeButton = document.querySelector<HTMLButtonElement>("#minimize"); | |
| 210 | const maximizeButton = document.querySelector<HTMLButtonElement>("#maximize"); | |
| 211 | const startMenu = document.querySelector<HTMLDetailsElement>("#start-menu"); | |
| 212 | const taskButton = document.querySelector<HTMLButtonElement>(".task-button"); | |
| 213 | const titleBar = document.querySelector<HTMLElement>("#window-title"); | |
| 214 | const taskbar = document.querySelector<HTMLElement>(".taskbar"); | |
| 215 | let windowX = 0; | |
| 216 | let windowY = 0; | |
| 217 | ||
| 218 | // Keep the entire window above the taskbar, including after a viewport resize. | |
| 219 | function moveWindow(x: number, y: number) { | |
| 220 | if (!salesWindow || document.body.classList.contains("maximized")) return; | |
| 221 | const rect = salesWindow.getBoundingClientRect(); | |
| 222 | const originX = rect.left - windowX; | |
| 223 | const originY = rect.top - windowY; | |
| 224 | const bottom = taskbar?.getBoundingClientRect().top ?? window.innerHeight; | |
| 225 | windowX = Math.max(-originX, Math.min(x, window.innerWidth - rect.width - originX)); | |
| 226 | windowY = Math.max(-originY, Math.min(y, bottom - rect.height - originY)); | |
| 227 | salesWindow.style.setProperty("--window-x", `${windowX}px`); | |
| 228 | salesWindow.style.setProperty("--window-y", `${windowY}px`); | |
| 229 | } | |
| 230 | ||
| 231 | function toggleMaximize() { | |
| 232 | if (!maximizeButton) return; | |
| 233 | const maximized = document.body.classList.toggle("maximized"); | |
| 234 | maximizeButton.setAttribute("aria-pressed", String(maximized)); | |
| 235 | maximizeButton.setAttribute("aria-label", maximized ? "Restore window size" : "Maximize window"); | |
| 236 | if (!maximized) moveWindow(windowX, windowY); | |
| 237 | } | |
| 238 | ||
| 239 | if (titleBar && salesWindow) { | |
| 240 | let drag: { pointerId: number; startX: number; startY: number; x: number; y: number } | undefined; | |
| 241 | ||
| 242 | titleBar.addEventListener("pointerdown", (event) => { | |
| 243 | if (!event.isPrimary || event.button !== 0 || document.body.classList.contains("maximized")) return; | |
| 244 | if (event.target instanceof Element && event.target.closest("button")) return; | |
| 245 | drag = { pointerId: event.pointerId, startX: event.clientX, startY: event.clientY, x: windowX, y: windowY }; | |
| 246 | titleBar.focus({ preventScroll: true }); | |
| 247 | titleBar.setPointerCapture(event.pointerId); | |
| 248 | titleBar.classList.add("dragging"); | |
| 249 | }); | |
| 250 | titleBar.addEventListener("pointermove", (event) => { | |
| 251 | if (!drag || event.pointerId !== drag.pointerId) return; | |
| 252 | moveWindow(drag.x + event.clientX - drag.startX, drag.y + event.clientY - drag.startY); | |
| 253 | }); | |
| 254 | const stopDrag = () => { | |
| 255 | drag = undefined; | |
| 256 | titleBar.classList.remove("dragging"); | |
| 257 | }; | |
| 258 | titleBar.addEventListener("pointerup", stopDrag); | |
| 259 | titleBar.addEventListener("pointercancel", stopDrag); | |
| 260 | titleBar.addEventListener("lostpointercapture", stopDrag); | |
| 261 | titleBar.addEventListener("dblclick", (event) => { | |
| 262 | if (event.target instanceof Element && event.target.closest("button")) return; | |
| 263 | toggleMaximize(); | |
| 264 | }); | |
| 265 | titleBar.addEventListener("keydown", (event) => { | |
| 266 | if (event.target !== titleBar || event.altKey || event.ctrlKey || event.metaKey) return; | |
| 267 | const step = event.shiftKey ? 1 : 10; | |
| 268 | switch (event.key) { | |
| 269 | case "ArrowLeft": moveWindow(windowX - step, windowY); break; | |
| 270 | case "ArrowRight": moveWindow(windowX + step, windowY); break; | |
| 271 | case "ArrowUp": moveWindow(windowX, windowY - step); break; | |
| 272 | case "ArrowDown": moveWindow(windowX, windowY + step); break; | |
| 273 | default: return; | |
| 274 | } | |
| 275 | event.preventDefault(); | |
| 276 | }); | |
| 277 | } | |
| 278 | ||
| 279 | window.addEventListener("resize", () => { | |
| 280 | if (!salesWindow?.hidden) moveWindow(windowX, windowY); | |
| 281 | }); | |
| 282 | ||
| 283 | minimizeButton?.addEventListener("click", () => { | |
| 284 | if (!salesWindow || !minimizedMessage) return; | |
| 285 | salesWindow.hidden = true; | |
| 286 | minimizedMessage.hidden = false; | |
| 287 | taskButton?.focus(); | |
| 288 | }); | |
| 289 | ||
| 290 | document.querySelectorAll<HTMLButtonElement>("[data-restore]").forEach((button) => { | |
| 291 | button.addEventListener("click", () => { | |
| 292 | if (!salesWindow || !minimizedMessage) return; | |
| 293 | salesWindow.hidden = false; | |
| 294 | minimizedMessage.hidden = true; | |
| 295 | if (startMenu) startMenu.open = false; | |
| 296 | moveWindow(windowX, windowY); | |
| 297 | minimizeButton?.focus({ preventScroll: true }); | |
| 298 | }); | |
| 299 | }); | |
| 300 | ||
| 301 | maximizeButton?.addEventListener("click", toggleMaximize); | |
| 302 | ||
| 303 | const messages = { | |
| 304 | recycle: { title: "Recycle Bin", message: "Contents: 47 abandoned side projects, 12 startup ideas, and one very ambitious TODO comment. T3 Code cannot fix your commitment issues. But it can help you ship." }, | |
| 305 | close: { title: "Close the future?", message: "You are about to return to a world with too many terminal windows. Are you sure? Our sales department would prefer that you download T3 Code." }, | |
| 306 | help: { title: "Windows Help", message: "It looks like you're trying to ship software. Have you tried putting all your coding agents in one app? Click Get T3 Code. No paperclip will follow you home." }, | |
| 307 | }; | |
| 308 | const dialog = document.querySelector<HTMLDialogElement>("#sales-dialog"); | |
| 309 | const dialogTitle = document.querySelector<HTMLElement>("#dialog-title"); | |
| 310 | const dialogMessage = document.querySelector<HTMLElement>("#dialog-message"); | |
| 311 | ||
| 312 | document.querySelectorAll<HTMLButtonElement>("[data-dialog]").forEach((button) => { | |
| 313 | button.addEventListener("click", () => { | |
| 314 | const kind = button.dataset.dialog; | |
| 315 | if (!dialog || !dialogTitle || !dialogMessage) return; | |
| 316 | if (kind !== "recycle" && kind !== "close" && kind !== "help") return; | |
| 317 | dialogTitle.textContent = messages[kind].title; | |
| 318 | dialogMessage.textContent = messages[kind].message; | |
| 319 | dialog.showModal(); | |
| 320 | }); | |
| 321 | }); | |
| 322 | document.querySelectorAll<HTMLButtonElement>("[data-dismiss]").forEach((button) => { | |
| 323 | button.addEventListener("click", () => dialog?.close()); | |
| 324 | }); | |
| 325 | ||
| 326 | document.addEventListener("keydown", (event) => { | |
| 327 | if (event.key === "Escape" && startMenu?.open) { | |
| 328 | startMenu.open = false; | |
| 329 | startMenu.querySelector("summary")?.focus(); | |
| 330 | } | |
| 331 | }); | |
| 332 | document.addEventListener("click", (event) => { | |
| 333 | if (startMenu?.open && event.target instanceof Node && !startMenu.contains(event.target)) { | |
| 334 | startMenu.open = false; | |
| 335 | } | |
| 336 | }); | |
| 337 | ||
| 338 | const copyButton = document.querySelector<HTMLButtonElement>("#copy-command"); | |
| 339 | const command = document.querySelector<HTMLInputElement>("#run-command"); | |
| 340 | const feedback = document.querySelector<HTMLElement>("#command-feedback"); | |
| 341 | copyButton?.addEventListener("click", async () => { | |
| 342 | if (!command || !feedback) return; | |
| 343 | try { | |
| 344 | await navigator.clipboard.writeText(command.value); | |
| 345 | feedback.textContent = "Copied! Paste it in your terminal. Welcome to the future."; | |
| 346 | } catch { | |
| 347 | command.focus(); | |
| 348 | command.select(); | |
| 349 | feedback.textContent = "Select and copy the command, then paste it in your terminal."; | |
| 350 | } | |
| 351 | }); | |
| 352 | </script> | |
| 353 | </body> | |
| 354 | </html> |
apps/marketing/src/styles/retro.css created+1244| ... | ... | @@ -0,0 +1,1244 @@ |
| 1 | /* This page has its own document so the retro styles do not affect other pages. */ | |
| 2 | :root { | |
| 3 | color-scheme: dark; | |
| 4 | font-family: Tahoma, Verdana, Arial, sans-serif; | |
| 5 | color: #fff; | |
| 6 | background: #000; | |
| 7 | --silver: #c0c0c0; | |
| 8 | --yellow: #eaff00; | |
| 9 | --pink: #ff79bd; | |
| 10 | --navy: #000080; | |
| 11 | } | |
| 12 | ||
| 13 | * { | |
| 14 | box-sizing: border-box; | |
| 15 | } | |
| 16 | body { | |
| 17 | margin: 0; | |
| 18 | min-width: 320px; | |
| 19 | height: 100dvh; | |
| 20 | overflow: hidden; | |
| 21 | } | |
| 22 | button, | |
| 23 | input { | |
| 24 | font: inherit; | |
| 25 | } | |
| 26 | button, | |
| 27 | a, | |
| 28 | summary { | |
| 29 | -webkit-tap-highlight-color: transparent; | |
| 30 | } | |
| 31 | button, | |
| 32 | summary { | |
| 33 | cursor: pointer; | |
| 34 | } | |
| 35 | button { | |
| 36 | color: inherit; | |
| 37 | } | |
| 38 | a { | |
| 39 | color: inherit; | |
| 40 | } | |
| 41 | button { | |
| 42 | border-radius: 0; | |
| 43 | } | |
| 44 | svg { | |
| 45 | flex-shrink: 0; | |
| 46 | } | |
| 47 | [hidden] { | |
| 48 | display: none !important; | |
| 49 | } | |
| 50 | :focus-visible { | |
| 51 | outline: 2px dashed var(--pink); | |
| 52 | outline-offset: 4px; | |
| 53 | } | |
| 54 | section { | |
| 55 | scroll-margin-top: 24px; | |
| 56 | } | |
| 57 | .skip-link { | |
| 58 | position: fixed; | |
| 59 | top: -80px; | |
| 60 | left: 12px; | |
| 61 | z-index: 100; | |
| 62 | } | |
| 63 | .skip-link:focus { | |
| 64 | top: 12px; | |
| 65 | } | |
| 66 | .raised { | |
| 67 | border: 2px solid; | |
| 68 | border-color: #fff #333 #333 #fff; | |
| 69 | box-shadow: | |
| 70 | inset -1px -1px #808080, | |
| 71 | inset 1px 1px #dfdfdf; | |
| 72 | } | |
| 73 | .sunken { | |
| 74 | border: 2px solid; | |
| 75 | border-color: #808080 #fff #fff #808080; | |
| 76 | box-shadow: inset 1px 1px #000; | |
| 77 | } | |
| 78 | .retro-button { | |
| 79 | display: inline-flex; | |
| 80 | align-items: center; | |
| 81 | justify-content: center; | |
| 82 | gap: 9px; | |
| 83 | border: 2px solid; | |
| 84 | border-color: #fff #000 #000 #fff; | |
| 85 | box-shadow: | |
| 86 | inset -1px -1px #808080, | |
| 87 | inset 1px 1px #dfdfdf; | |
| 88 | padding: 8px 16px; | |
| 89 | background: var(--silver); | |
| 90 | color: #000; | |
| 91 | text-decoration: none; | |
| 92 | font-size: 12px; | |
| 93 | font-weight: 700; | |
| 94 | } | |
| 95 | .retro-button:active { | |
| 96 | border-color: #000 #fff #fff #000; | |
| 97 | box-shadow: inset 1px 1px #808080; | |
| 98 | } | |
| 99 | .retro-button:hover { | |
| 100 | background: #d7d7d7; | |
| 101 | } | |
| 102 | .desktop { | |
| 103 | position: fixed; | |
| 104 | inset: 0 0 42px; | |
| 105 | z-index: 1; | |
| 106 | max-width: 1280px; | |
| 107 | margin: 0 auto; | |
| 108 | padding: 28px 30px 40px 112px; | |
| 109 | pointer-events: none; | |
| 110 | } | |
| 111 | .desktop-icons { | |
| 112 | position: absolute; | |
| 113 | top: 37px; | |
| 114 | left: max(10px, calc((100vw - 1280px) / 2 + 10px)); | |
| 115 | width: 83px; | |
| 116 | display: grid; | |
| 117 | gap: 29px; | |
| 118 | } | |
| 119 | .desktop-icon { | |
| 120 | display: flex; | |
| 121 | flex-direction: column; | |
| 122 | align-items: center; | |
| 123 | gap: 7px; | |
| 124 | border: 0; | |
| 125 | background: none; | |
| 126 | color: #fff; | |
| 127 | text-align: center; | |
| 128 | text-decoration: none; | |
| 129 | font-size: 11px; | |
| 130 | line-height: 1.4; | |
| 131 | padding: 3px 0; | |
| 132 | } | |
| 133 | .desktop-icon:hover span, | |
| 134 | .desktop-icon:focus-visible span { | |
| 135 | background: var(--navy); | |
| 136 | } | |
| 137 | .browser-window { | |
| 138 | display: flex; | |
| 139 | flex-direction: column; | |
| 140 | height: 100%; | |
| 141 | min-height: 0; | |
| 142 | padding: 3px; | |
| 143 | background: var(--silver); | |
| 144 | pointer-events: auto; | |
| 145 | transform: translate(var(--window-x, 0px), var(--window-y, 0px)); | |
| 146 | } | |
| 147 | .browser-window > :not(main) { | |
| 148 | flex-shrink: 0; | |
| 149 | } | |
| 150 | #window-title { | |
| 151 | cursor: grab; | |
| 152 | touch-action: none; | |
| 153 | user-select: none; | |
| 154 | } | |
| 155 | #window-title.dragging { | |
| 156 | cursor: grabbing; | |
| 157 | } | |
| 158 | #window-title:focus-visible { | |
| 159 | outline-offset: -2px; | |
| 160 | } | |
| 161 | .window-title { | |
| 162 | display: flex; | |
| 163 | align-items: center; | |
| 164 | justify-content: space-between; | |
| 165 | gap: 12px; | |
| 166 | min-height: 27px; | |
| 167 | padding: 3px 4px 3px 6px; | |
| 168 | background: linear-gradient(90deg, #000080, #2253a4); | |
| 169 | color: #fff; | |
| 170 | font-size: 12px; | |
| 171 | font-weight: 700; | |
| 172 | } | |
| 173 | .window-name { | |
| 174 | min-width: 0; | |
| 175 | display: flex; | |
| 176 | align-items: center; | |
| 177 | gap: 7px; | |
| 178 | } | |
| 179 | .window-name > span { | |
| 180 | overflow: hidden; | |
| 181 | white-space: nowrap; | |
| 182 | text-overflow: ellipsis; | |
| 183 | } | |
| 184 | .window-controls { | |
| 185 | display: flex; | |
| 186 | gap: 3px; | |
| 187 | } | |
| 188 | .window-control { | |
| 189 | width: 20px; | |
| 190 | height: 20px; | |
| 191 | min-width: 20px; | |
| 192 | padding: 0; | |
| 193 | font: | |
| 194 | 700 18px Arial, | |
| 195 | sans-serif; | |
| 196 | } | |
| 197 | .window-control:first-child { | |
| 198 | font-size: 17px; | |
| 199 | } | |
| 200 | .maximize-icon { | |
| 201 | width: 10px; | |
| 202 | height: 10px; | |
| 203 | border: 1px solid #000; | |
| 204 | border-top-width: 3px; | |
| 205 | } | |
| 206 | .browser-menu { | |
| 207 | display: flex; | |
| 208 | align-items: center; | |
| 209 | gap: 2px; | |
| 210 | padding: 3px 4px; | |
| 211 | color: #000; | |
| 212 | } | |
| 213 | .browser-menu > a, | |
| 214 | .browser-menu > button { | |
| 215 | padding: 5px 8px; | |
| 216 | border: 0; | |
| 217 | background: none; | |
| 218 | text-decoration: none; | |
| 219 | font-size: 11px; | |
| 220 | } | |
| 221 | .browser-menu > a:hover, | |
| 222 | .browser-menu > button:hover { | |
| 223 | color: #fff; | |
| 224 | background: var(--navy); | |
| 225 | } | |
| 226 | .address-bar { | |
| 227 | display: flex; | |
| 228 | align-items: center; | |
| 229 | gap: 9px; | |
| 230 | padding: 4px 7px 9px; | |
| 231 | color: #000; | |
| 232 | font-size: 11px; | |
| 233 | } | |
| 234 | .address-field { | |
| 235 | display: flex; | |
| 236 | align-items: center; | |
| 237 | gap: 7px; | |
| 238 | flex: 1; | |
| 239 | padding: 4px 6px; | |
| 240 | background: #fff; | |
| 241 | min-width: 0; | |
| 242 | } | |
| 243 | .address-field > span { | |
| 244 | overflow: hidden; | |
| 245 | text-overflow: ellipsis; | |
| 246 | white-space: nowrap; | |
| 247 | } | |
| 248 | .address-go { | |
| 249 | align-self: stretch; | |
| 250 | padding: 2px 9px; | |
| 251 | font-weight: 400; | |
| 252 | } | |
| 253 | main { | |
| 254 | flex: 1; | |
| 255 | min-height: 0; | |
| 256 | overflow: auto; | |
| 257 | overscroll-behavior: contain; | |
| 258 | border: 2px solid; | |
| 259 | border-color: #555 #fff #fff #555; | |
| 260 | background: #000; | |
| 261 | } | |
| 262 | main::-webkit-scrollbar { | |
| 263 | width: 16px; | |
| 264 | height: 16px; | |
| 265 | } | |
| 266 | main::-webkit-scrollbar-track, | |
| 267 | main::-webkit-scrollbar-corner { | |
| 268 | background: #dfdfdf; | |
| 269 | } | |
| 270 | main::-webkit-scrollbar-thumb { | |
| 271 | border: 2px solid; | |
| 272 | border-color: #fff #333 #333 #fff; | |
| 273 | background: var(--silver); | |
| 274 | box-shadow: inset -1px -1px #808080; | |
| 275 | } | |
| 276 | .hero { | |
| 277 | display: grid; | |
| 278 | grid-template-columns: 1.1fr 1fr; | |
| 279 | align-items: center; | |
| 280 | padding: 16px 35px 20px; | |
| 281 | gap: 8px; | |
| 282 | } | |
| 283 | .hero h1 { | |
| 284 | font-size: clamp(36px, 3.4vw, 48px); | |
| 285 | letter-spacing: -2px; | |
| 286 | } | |
| 287 | .hero .hero-explanation { | |
| 288 | margin: 14px 0 0; | |
| 289 | } | |
| 290 | .edition-packages { | |
| 291 | display: grid; | |
| 292 | grid-template-columns: repeat(2, minmax(0, 1fr)); | |
| 293 | gap: 16px; | |
| 294 | align-items: end; | |
| 295 | } | |
| 296 | .hero-package { | |
| 297 | display: block; | |
| 298 | width: min(100%, 170px); | |
| 299 | margin: 0 auto; | |
| 300 | text-decoration: none; | |
| 301 | } | |
| 302 | .hero-package > img { | |
| 303 | display: block; | |
| 304 | width: 100%; | |
| 305 | height: auto; | |
| 306 | } | |
| 307 | .hero-package > .edition-download { | |
| 308 | display: flex; | |
| 309 | justify-content: center; | |
| 310 | padding: 6px 8px; | |
| 311 | margin-top: 4px; | |
| 312 | font-size: 11px; | |
| 313 | background: var(--yellow); | |
| 314 | } | |
| 315 | .nightly-package > .edition-download { | |
| 316 | background: #c9bdff; | |
| 317 | } | |
| 318 | h1 { | |
| 319 | margin: 0; | |
| 320 | font: | |
| 321 | 900 clamp(40px, 4.7vw, 62px)/0.99 Arial, | |
| 322 | Helvetica, | |
| 323 | sans-serif; | |
| 324 | letter-spacing: -3.3px; | |
| 325 | } | |
| 326 | h1 > span { | |
| 327 | color: var(--yellow); | |
| 328 | } | |
| 329 | .hero-explanation { | |
| 330 | max-width: 360px; | |
| 331 | margin: 0 0 23px; | |
| 332 | font-size: 12px; | |
| 333 | line-height: 1.7; | |
| 334 | color: #c0c0c0; | |
| 335 | } | |
| 336 | .primary-cta { | |
| 337 | padding: 13px 17px; | |
| 338 | gap: 12px; | |
| 339 | background: var(--yellow); | |
| 340 | border-color: #ffffd1 #737c00 #737c00 #ffffd1; | |
| 341 | box-shadow: | |
| 342 | inset -1px -1px #a3b000, | |
| 343 | inset 1px 1px #ffffbd; | |
| 344 | font: | |
| 345 | 900 13px Arial, | |
| 346 | sans-serif; | |
| 347 | letter-spacing: 0.3px; | |
| 348 | } | |
| 349 | .primary-cta > span:last-child { | |
| 350 | font-size: 22px; | |
| 351 | margin-left: 8px; | |
| 352 | } | |
| 353 | .primary-cta:hover { | |
| 354 | background: #f2ff73; | |
| 355 | } | |
| 356 | .platform-line { | |
| 357 | display: flex; | |
| 358 | margin-top: 16px; | |
| 359 | flex-wrap: wrap; | |
| 360 | align-items: center; | |
| 361 | gap: 11px; | |
| 362 | font-size: 10px; | |
| 363 | } | |
| 364 | .platform-line > span { | |
| 365 | font: | |
| 366 | 8px "Courier New", | |
| 367 | monospace; | |
| 368 | color: #ababab; | |
| 369 | letter-spacing: 0.5px; | |
| 370 | } | |
| 371 | .platform-line > strong { | |
| 372 | font-weight: 400; | |
| 373 | } | |
| 374 | .platform-line > b { | |
| 375 | color: #656565; | |
| 376 | } | |
| 377 | .box-95 { | |
| 378 | position: absolute; | |
| 379 | right: 9px; | |
| 380 | bottom: -6px; | |
| 381 | font: | |
| 382 | italic 900 75px Arial, | |
| 383 | sans-serif; | |
| 384 | color: var(--yellow); | |
| 385 | letter-spacing: -6px; | |
| 386 | } | |
| 387 | .agents-section { | |
| 388 | padding: 14px 35px 24px; | |
| 389 | border-top: 1px solid #363636; | |
| 390 | border-bottom: 1px solid #363636; | |
| 391 | } | |
| 392 | .agent-list { | |
| 393 | display: grid; | |
| 394 | grid-template-columns: repeat(3, minmax(0, 1fr)); | |
| 395 | gap: 26px 20px; | |
| 396 | margin: 10px 0 24px; | |
| 397 | } | |
| 398 | .agent { | |
| 399 | min-width: 0; | |
| 400 | margin: 0; | |
| 401 | text-align: center; | |
| 402 | } | |
| 403 | .agent-box { | |
| 404 | display: block; | |
| 405 | width: 100%; | |
| 406 | max-width: 200px; | |
| 407 | height: auto; | |
| 408 | margin: 0 auto; | |
| 409 | object-fit: contain; | |
| 410 | } | |
| 411 | .agents-section > .section-heading { | |
| 412 | margin-bottom: 0; | |
| 413 | } | |
| 414 | .agent > figcaption { | |
| 415 | padding: 12px 4px 0; | |
| 416 | border-top: 3px ridge #777; | |
| 417 | } | |
| 418 | .agent h3 { | |
| 419 | margin: 0 0 6px; | |
| 420 | font-size: 14px; | |
| 421 | } | |
| 422 | .agent p { | |
| 423 | max-width: 27ch; | |
| 424 | margin: 0 auto; | |
| 425 | color: var(--yellow); | |
| 426 | font: | |
| 427 | 11px/1.5 "Courier New", | |
| 428 | monospace; | |
| 429 | } | |
| 430 | .agents-note { | |
| 431 | margin: 0; | |
| 432 | color: #aaa; | |
| 433 | font: | |
| 434 | 9px/1.5 "Courier New", | |
| 435 | monospace; | |
| 436 | } | |
| 437 | .features-section { | |
| 438 | padding: 33px 35px 38px; | |
| 439 | } | |
| 440 | .section-heading { | |
| 441 | display: flex; | |
| 442 | justify-content: space-between; | |
| 443 | align-items: baseline; | |
| 444 | gap: 20px; | |
| 445 | margin-bottom: 21px; | |
| 446 | } | |
| 447 | .section-heading h2 { | |
| 448 | font: | |
| 449 | 900 20px/1.2 Arial, | |
| 450 | sans-serif; | |
| 451 | letter-spacing: -0.6px; | |
| 452 | margin: 0; | |
| 453 | } | |
| 454 | .section-heading h2 > span { | |
| 455 | color: var(--yellow); | |
| 456 | } | |
| 457 | .section-heading > span { | |
| 458 | font: | |
| 459 | 8px/1.5 "Courier New", | |
| 460 | monospace; | |
| 461 | color: #aaa; | |
| 462 | text-align: right; | |
| 463 | } | |
| 464 | .feature-grid { | |
| 465 | display: grid; | |
| 466 | grid-template-columns: repeat(3, 1fr); | |
| 467 | gap: 15px; | |
| 468 | } | |
| 469 | .feature-window { | |
| 470 | min-width: 0; | |
| 471 | padding: 3px; | |
| 472 | background: var(--silver); | |
| 473 | } | |
| 474 | .feature-titlebar { | |
| 475 | display: flex; | |
| 476 | justify-content: space-between; | |
| 477 | gap: 5px; | |
| 478 | padding: 5px 6px; | |
| 479 | background: #393939; | |
| 480 | font: | |
| 481 | 9px "Courier New", | |
| 482 | monospace; | |
| 483 | } | |
| 484 | .feature-body { | |
| 485 | background: #0b0b0b; | |
| 486 | padding: 18px 15px 17px; | |
| 487 | display: flex; | |
| 488 | flex-direction: column; | |
| 489 | align-items: flex-start; | |
| 490 | height: calc(100% - 21px); | |
| 491 | } | |
| 492 | .feature-body h3 { | |
| 493 | font: | |
| 494 | 700 18px/1.15 Arial, | |
| 495 | sans-serif; | |
| 496 | margin: 16px 0 12px; | |
| 497 | letter-spacing: -0.3px; | |
| 498 | } | |
| 499 | .feature-body p { | |
| 500 | margin: 0 0 22px; | |
| 501 | color: #c0c0c0; | |
| 502 | font-size: 11px; | |
| 503 | line-height: 1.7; | |
| 504 | } | |
| 505 | .feature-tag { | |
| 506 | display: block; | |
| 507 | margin-top: auto; | |
| 508 | color: var(--yellow); | |
| 509 | font: | |
| 510 | 700 8px/1.6 "Courier New", | |
| 511 | monospace; | |
| 512 | letter-spacing: 0.3px; | |
| 513 | text-decoration: none; | |
| 514 | } | |
| 515 | a.feature-tag { | |
| 516 | text-decoration: underline; | |
| 517 | text-underline-offset: 3px; | |
| 518 | } | |
| 519 | .order-section { | |
| 520 | position: relative; | |
| 521 | display: grid; | |
| 522 | grid-template-columns: 1.35fr 1fr; | |
| 523 | gap: 45px; | |
| 524 | padding: 32px 35px; | |
| 525 | border-top: 1px solid #546124; | |
| 526 | border-bottom: 1px solid #546124; | |
| 527 | background: #121707; | |
| 528 | align-items: center; | |
| 529 | } | |
| 530 | .order-pitch h2 { | |
| 531 | font: | |
| 532 | 900 30px/1.1 Arial, | |
| 533 | sans-serif; | |
| 534 | letter-spacing: -1px; | |
| 535 | margin: 15px 0 12px; | |
| 536 | } | |
| 537 | .order-pitch h2 > span { | |
| 538 | color: var(--yellow); | |
| 539 | } | |
| 540 | .order-pitch > p { | |
| 541 | font-size: 11px; | |
| 542 | line-height: 1.6; | |
| 543 | margin: 0 0 23px; | |
| 544 | } | |
| 545 | .order-pitch .offer-note { | |
| 546 | color: #b9bea9; | |
| 547 | font: | |
| 548 | 9px/1.7 "Courier New", | |
| 549 | monospace; | |
| 550 | margin: 13px 0 0; | |
| 551 | } | |
| 552 | .run-window { | |
| 553 | padding: 3px; | |
| 554 | background: var(--silver); | |
| 555 | color: #000; | |
| 556 | } | |
| 557 | .run-window .window-title { | |
| 558 | min-height: 23px; | |
| 559 | font-size: 11px; | |
| 560 | } | |
| 561 | .run-body { | |
| 562 | padding: 14px 13px; | |
| 563 | font-size: 11px; | |
| 564 | } | |
| 565 | .run-body > p:first-child { | |
| 566 | margin: 0 0 14px; | |
| 567 | font-weight: 700; | |
| 568 | } | |
| 569 | .run-body label { | |
| 570 | font-size: 10px; | |
| 571 | } | |
| 572 | .command-row { | |
| 573 | display: flex; | |
| 574 | gap: 7px; | |
| 575 | margin-top: 7px; | |
| 576 | } | |
| 577 | .command-row input { | |
| 578 | width: 0; | |
| 579 | min-width: 0; | |
| 580 | flex: 1; | |
| 581 | border-radius: 0; | |
| 582 | padding: 7px 8px; | |
| 583 | background: #fff; | |
| 584 | color: #000; | |
| 585 | font: | |
| 586 | 700 15px "Courier New", | |
| 587 | monospace; | |
| 588 | } | |
| 589 | .command-row button { | |
| 590 | padding: 5px 12px; | |
| 591 | } | |
| 592 | .command-feedback { | |
| 593 | min-height: 27px; | |
| 594 | margin: 8px 0 10px; | |
| 595 | font: | |
| 596 | 9px/1.5 "Courier New", | |
| 597 | monospace; | |
| 598 | } | |
| 599 | .run-divider { | |
| 600 | border-top: 1px solid #808080; | |
| 601 | border-bottom: 1px solid #fff; | |
| 602 | margin: 0 0 13px; | |
| 603 | } | |
| 604 | .run-body > b { | |
| 605 | font-size: 10px; | |
| 606 | } | |
| 607 | .run-body ul { | |
| 608 | padding-left: 17px; | |
| 609 | margin: 7px 0 10px; | |
| 610 | font-size: 10px; | |
| 611 | line-height: 1.8; | |
| 612 | } | |
| 613 | .requirements-note { | |
| 614 | font: | |
| 615 | 8px "Courier New", | |
| 616 | monospace; | |
| 617 | margin-bottom: 0; | |
| 618 | } | |
| 619 | .faq-section { | |
| 620 | padding: 34px 35px; | |
| 621 | } | |
| 622 | .faq-section > h2 { | |
| 623 | margin: 0 0 20px; | |
| 624 | color: var(--pink); | |
| 625 | font: | |
| 626 | 700 11px "Courier New", | |
| 627 | monospace; | |
| 628 | } | |
| 629 | .faq-section > details { | |
| 630 | border-top: 1px dotted #626262; | |
| 631 | } | |
| 632 | .faq-section > details:last-child { | |
| 633 | border-bottom: 1px dotted #626262; | |
| 634 | } | |
| 635 | .faq-section summary { | |
| 636 | padding: 13px 2px; | |
| 637 | font-size: 12px; | |
| 638 | } | |
| 639 | .faq-section summary::marker { | |
| 640 | color: var(--yellow); | |
| 641 | } | |
| 642 | .faq-section details p { | |
| 643 | margin: 0; | |
| 644 | padding: 0 20px 16px; | |
| 645 | color: #c0c0c0; | |
| 646 | font-size: 11px; | |
| 647 | line-height: 1.7; | |
| 648 | max-width: 740px; | |
| 649 | } | |
| 650 | .faq-section a { | |
| 651 | color: var(--yellow); | |
| 652 | text-underline-offset: 3px; | |
| 653 | } | |
| 654 | .site-footer { | |
| 655 | margin: 0 35px; | |
| 656 | padding: 25px 0 27px; | |
| 657 | text-align: center; | |
| 658 | border-top: 1px solid #363636; | |
| 659 | } | |
| 660 | .visitor-counter { | |
| 661 | display: flex; | |
| 662 | align-items: center; | |
| 663 | justify-content: center; | |
| 664 | flex-wrap: wrap; | |
| 665 | gap: 12px; | |
| 666 | font: | |
| 667 | 9px "Courier New", | |
| 668 | monospace; | |
| 669 | color: #c0c0c0; | |
| 670 | } | |
| 671 | .counter-digits { | |
| 672 | display: inline-flex; | |
| 673 | gap: 2px; | |
| 674 | padding: 3px; | |
| 675 | border: 2px inset #666; | |
| 676 | background: #141414; | |
| 677 | } | |
| 678 | .counter-digits > span { | |
| 679 | display: block; | |
| 680 | padding: 2px 4px; | |
| 681 | background: #252b1a; | |
| 682 | color: var(--yellow); | |
| 683 | font: | |
| 684 | 700 15px "Courier New", | |
| 685 | monospace; | |
| 686 | } | |
| 687 | .site-footer > p { | |
| 688 | color: #b0b0b0; | |
| 689 | font: | |
| 690 | 9px/1.6 "Courier New", | |
| 691 | monospace; | |
| 692 | margin: 0 0 10px; | |
| 693 | } | |
| 694 | .site-footer nav { | |
| 695 | display: flex; | |
| 696 | flex-wrap: wrap; | |
| 697 | gap: 18px; | |
| 698 | justify-content: center; | |
| 699 | font: | |
| 700 | 9px "Courier New", | |
| 701 | monospace; | |
| 702 | } | |
| 703 | .site-footer nav a { | |
| 704 | color: var(--pink); | |
| 705 | text-underline-offset: 3px; | |
| 706 | } | |
| 707 | .browser-status { | |
| 708 | display: flex; | |
| 709 | align-items: stretch; | |
| 710 | gap: 4px; | |
| 711 | height: 24px; | |
| 712 | padding-top: 4px; | |
| 713 | color: #000; | |
| 714 | font-size: 10px; | |
| 715 | } | |
| 716 | .browser-status > span { | |
| 717 | display: flex; | |
| 718 | align-items: center; | |
| 719 | gap: 4px; | |
| 720 | padding: 2px 4px; | |
| 721 | } | |
| 722 | .browser-status > span:first-child { | |
| 723 | flex: 1; | |
| 724 | } | |
| 725 | .browser-status > span:nth-child(2) { | |
| 726 | min-width: 120px; | |
| 727 | } | |
| 728 | .resize-grip { | |
| 729 | width: 13px; | |
| 730 | background: repeating-linear-gradient(135deg, transparent 0 2px, #808080 2px 3px, #fff 3px 4px); | |
| 731 | clip-path: polygon(100% 0, 100% 100%, 0 100%); | |
| 732 | } | |
| 733 | .taskbar { | |
| 734 | position: fixed; | |
| 735 | z-index: 10; | |
| 736 | left: 0; | |
| 737 | right: 0; | |
| 738 | bottom: 0; | |
| 739 | min-height: 40px; | |
| 740 | padding: 3px 5px; | |
| 741 | background: var(--silver); | |
| 742 | color: #000; | |
| 743 | display: flex; | |
| 744 | align-items: center; | |
| 745 | gap: 8px; | |
| 746 | } | |
| 747 | .start-menu { | |
| 748 | position: relative; | |
| 749 | } | |
| 750 | .start-button { | |
| 751 | gap: 7px; | |
| 752 | padding: 4px 8px; | |
| 753 | min-height: 30px; | |
| 754 | font-size: 14px; | |
| 755 | list-style: none; | |
| 756 | } | |
| 757 | .start-button::-webkit-details-marker { | |
| 758 | display: none; | |
| 759 | } | |
| 760 | .start-mark { | |
| 761 | display: grid; | |
| 762 | grid-template-columns: 8px 8px; | |
| 763 | gap: 2px; | |
| 764 | transform: skewY(-8deg); | |
| 765 | } | |
| 766 | .start-mark i { | |
| 767 | width: 8px; | |
| 768 | height: 8px; | |
| 769 | background: #f3433c; | |
| 770 | } | |
| 771 | .start-mark i:nth-child(2) { | |
| 772 | background: #75b53c; | |
| 773 | } | |
| 774 | .start-mark i:nth-child(3) { | |
| 775 | background: #347be3; | |
| 776 | } | |
| 777 | .start-mark i:nth-child(4) { | |
| 778 | background: #ffe348; | |
| 779 | } | |
| 780 | .start-panel { | |
| 781 | position: absolute; | |
| 782 | bottom: calc(100% + 5px); | |
| 783 | left: -1px; | |
| 784 | display: flex; | |
| 785 | width: 253px; | |
| 786 | padding: 3px; | |
| 787 | background: var(--silver); | |
| 788 | } | |
| 789 | .start-brand { | |
| 790 | writing-mode: vertical-rl; | |
| 791 | transform: rotate(180deg); | |
| 792 | background: #808080; | |
| 793 | color: #dedede; | |
| 794 | padding: 12px 8px; | |
| 795 | font: | |
| 796 | 900 18px Arial, | |
| 797 | sans-serif; | |
| 798 | white-space: nowrap; | |
| 799 | } | |
| 800 | .start-brand b { | |
| 801 | color: #fff; | |
| 802 | } | |
| 803 | .start-panel > div:last-child { | |
| 804 | flex: 1; | |
| 805 | } | |
| 806 | .start-panel a, | |
| 807 | .start-panel button { | |
| 808 | display: flex; | |
| 809 | align-items: center; | |
| 810 | gap: 10px; | |
| 811 | padding: 12px 10px; | |
| 812 | width: 100%; | |
| 813 | background: none; | |
| 814 | border: 0; | |
| 815 | color: #000; | |
| 816 | text-decoration: none; | |
| 817 | font-size: 11px; | |
| 818 | text-align: left; | |
| 819 | } | |
| 820 | .start-panel a:hover, | |
| 821 | .start-panel button:hover { | |
| 822 | background: var(--navy); | |
| 823 | color: #fff; | |
| 824 | } | |
| 825 | .taskbar-divider { | |
| 826 | align-self: stretch; | |
| 827 | border-left: 1px solid #808080; | |
| 828 | border-right: 1px solid #fff; | |
| 829 | } | |
| 830 | .task-button { | |
| 831 | display: flex; | |
| 832 | align-items: center; | |
| 833 | gap: 8px; | |
| 834 | background: #d7d7d7; | |
| 835 | color: #000; | |
| 836 | padding: 3px 8px; | |
| 837 | min-height: 29px; | |
| 838 | min-width: 170px; | |
| 839 | font-size: 11px; | |
| 840 | font-weight: 700; | |
| 841 | text-align: left; | |
| 842 | } | |
| 843 | .taskbar-clock { | |
| 844 | margin-left: auto; | |
| 845 | display: flex; | |
| 846 | align-items: center; | |
| 847 | justify-content: center; | |
| 848 | gap: 9px; | |
| 849 | padding: 4px 10px; | |
| 850 | min-height: 29px; | |
| 851 | font-size: 11px; | |
| 852 | white-space: nowrap; | |
| 853 | } | |
| 854 | .taskbar-clock > span:first-child { | |
| 855 | font-size: 16px; | |
| 856 | } | |
| 857 | .maximized .desktop { | |
| 858 | max-width: none; | |
| 859 | padding: 0; | |
| 860 | } | |
| 861 | .maximized .browser-window { | |
| 862 | transform: none; | |
| 863 | } | |
| 864 | .maximized #window-title { | |
| 865 | cursor: default; | |
| 866 | } | |
| 867 | .minimized-message { | |
| 868 | height: 100%; | |
| 869 | pointer-events: auto; | |
| 870 | display: flex; | |
| 871 | flex-direction: column; | |
| 872 | align-items: center; | |
| 873 | justify-content: center; | |
| 874 | gap: 15px; | |
| 875 | text-align: center; | |
| 876 | } | |
| 877 | .minimized-message h1 { | |
| 878 | font: | |
| 879 | 700 25px Arial, | |
| 880 | sans-serif; | |
| 881 | letter-spacing: -0.5px; | |
| 882 | } | |
| 883 | .minimized-message p { | |
| 884 | font: | |
| 885 | 12px "Courier New", | |
| 886 | monospace; | |
| 887 | margin: 0 0 10px; | |
| 888 | } | |
| 889 | .retro-dialog { | |
| 890 | width: min(440px, calc(100vw - 32px)); | |
| 891 | padding: 3px; | |
| 892 | background: var(--silver); | |
| 893 | color: #000; | |
| 894 | } | |
| 895 | .retro-dialog::backdrop { | |
| 896 | background: #000b; | |
| 897 | } | |
| 898 | .dialog-content { | |
| 899 | display: flex; | |
| 900 | align-items: center; | |
| 901 | gap: 20px; | |
| 902 | padding: 22px 20px 13px; | |
| 903 | } | |
| 904 | .dialog-content > p { | |
| 905 | font-size: 12px; | |
| 906 | line-height: 1.7; | |
| 907 | margin: 0; | |
| 908 | } | |
| 909 | .dialog-actions { | |
| 910 | display: flex; | |
| 911 | justify-content: flex-end; | |
| 912 | gap: 8px; | |
| 913 | padding: 8px 16px 17px; | |
| 914 | } | |
| 915 | ||
| 916 | @media (min-width: 1450px) { | |
| 917 | .maximized .hero { | |
| 918 | grid-template-columns: 1fr 1fr; | |
| 919 | padding-left: 65px; | |
| 920 | padding-right: 65px; | |
| 921 | } | |
| 922 | .maximized h1 { | |
| 923 | font-size: 76px; | |
| 924 | } | |
| 925 | } | |
| 926 | ||
| 927 | @media (max-width: 1100px) { | |
| 928 | .desktop { | |
| 929 | padding-left: 98px; | |
| 930 | padding-right: 15px; | |
| 931 | } | |
| 932 | .hero { | |
| 933 | padding-left: 25px; | |
| 934 | padding-right: 25px; | |
| 935 | } | |
| 936 | h1 { | |
| 937 | font-size: 47px; | |
| 938 | letter-spacing: -2.6px; | |
| 939 | } | |
| 940 | .order-section { | |
| 941 | gap: 23px; | |
| 942 | } | |
| 943 | .order-pitch h2 { | |
| 944 | font-size: 27px; | |
| 945 | } | |
| 946 | .feature-grid { | |
| 947 | gap: 10px; | |
| 948 | } | |
| 949 | .feature-body { | |
| 950 | padding: 15px 11px; | |
| 951 | } | |
| 952 | } | |
| 953 | ||
| 954 | @media (max-width: 820px) { | |
| 955 | .desktop { | |
| 956 | padding: 14px 12px; | |
| 957 | } | |
| 958 | .desktop-icons { | |
| 959 | display: none; | |
| 960 | } | |
| 961 | .hero { | |
| 962 | grid-template-columns: 1.1fr 0.9fr; | |
| 963 | gap: 0; | |
| 964 | padding-top: 29px; | |
| 965 | } | |
| 966 | h1 { | |
| 967 | font-size: 44px; | |
| 968 | } | |
| 969 | .hero-explanation { | |
| 970 | max-width: 295px; | |
| 971 | } | |
| 972 | .primary-cta { | |
| 973 | font-size: 11px; | |
| 974 | gap: 7px; | |
| 975 | padding: 12px; | |
| 976 | } | |
| 977 | .primary-cta > span:last-child { | |
| 978 | margin-left: 3px; | |
| 979 | } | |
| 980 | .section-heading { | |
| 981 | display: block; | |
| 982 | } | |
| 983 | .section-heading > span { | |
| 984 | display: block; | |
| 985 | text-align: left; | |
| 986 | margin-top: 8px; | |
| 987 | } | |
| 988 | .agents-section, | |
| 989 | .features-section, | |
| 990 | .order-section, | |
| 991 | .faq-section { | |
| 992 | padding-left: 25px; | |
| 993 | padding-right: 25px; | |
| 994 | } | |
| 995 | .site-footer { | |
| 996 | margin-left: 25px; | |
| 997 | margin-right: 25px; | |
| 998 | } | |
| 999 | .feature-body h3 { | |
| 1000 | font-size: 16px; | |
| 1001 | } | |
| 1002 | .taskbar-clock { | |
| 1003 | margin-left: auto; | |
| 1004 | } | |
| 1005 | } | |
| 1006 | ||
| 1007 | @media (max-width: 620px) { | |
| 1008 | .browser-menu { | |
| 1009 | flex-wrap: wrap; | |
| 1010 | } | |
| 1011 | .hero-package { | |
| 1012 | width: min(100%, 160px); | |
| 1013 | } | |
| 1014 | .edition-packages { | |
| 1015 | width: 100%; | |
| 1016 | margin-top: 12px; | |
| 1017 | } | |
| 1018 | .desktop { | |
| 1019 | padding: 9px 7px; | |
| 1020 | } | |
| 1021 | .window-name { | |
| 1022 | font-size: 10px; | |
| 1023 | } | |
| 1024 | .window-controls { | |
| 1025 | gap: 2px; | |
| 1026 | } | |
| 1027 | .browser-menu { | |
| 1028 | gap: 0; | |
| 1029 | } | |
| 1030 | .browser-menu > a, | |
| 1031 | .browser-menu > button { | |
| 1032 | padding: 6px 7px; | |
| 1033 | font-size: 10px; | |
| 1034 | } | |
| 1035 | .address-bar { | |
| 1036 | padding: 3px 4px 7px; | |
| 1037 | gap: 6px; | |
| 1038 | font-size: 10px; | |
| 1039 | } | |
| 1040 | .address-go { | |
| 1041 | font-size: 10px; | |
| 1042 | } | |
| 1043 | .hero { | |
| 1044 | display: flex; | |
| 1045 | flex-direction: column; | |
| 1046 | align-items: stretch; | |
| 1047 | padding: 29px 20px 15px; | |
| 1048 | } | |
| 1049 | h1 { | |
| 1050 | font-size: clamp(41px, 10.5vw, 63px); | |
| 1051 | letter-spacing: -2.5px; | |
| 1052 | } | |
| 1053 | .hero-explanation { | |
| 1054 | max-width: 420px; | |
| 1055 | font-size: 11px; | |
| 1056 | } | |
| 1057 | .primary-cta { | |
| 1058 | font-size: 12px; | |
| 1059 | padding: 12px 15px; | |
| 1060 | gap: 10px; | |
| 1061 | } | |
| 1062 | .platform-line { | |
| 1063 | font-size: 9px; | |
| 1064 | gap: 9px; | |
| 1065 | } | |
| 1066 | .agents-section, | |
| 1067 | .features-section, | |
| 1068 | .order-section, | |
| 1069 | .faq-section { | |
| 1070 | padding: 25px 20px; | |
| 1071 | } | |
| 1072 | .agent-list { | |
| 1073 | grid-template-columns: repeat(2, minmax(0, 1fr)); | |
| 1074 | gap: 22px 12px; | |
| 1075 | margin-top: 20px; | |
| 1076 | } | |
| 1077 | .agent h3 { | |
| 1078 | font-size: 13px; | |
| 1079 | } | |
| 1080 | .agent p { | |
| 1081 | font-size: 10px; | |
| 1082 | } | |
| 1083 | .agents-note { | |
| 1084 | font-size: 8px; | |
| 1085 | } | |
| 1086 | .section-heading h2 { | |
| 1087 | font-size: 20px; | |
| 1088 | } | |
| 1089 | .section-heading h2 > span { | |
| 1090 | display: block; | |
| 1091 | } | |
| 1092 | .feature-grid { | |
| 1093 | grid-template-columns: 1fr; | |
| 1094 | gap: 17px; | |
| 1095 | } | |
| 1096 | .feature-body { | |
| 1097 | padding: 17px; | |
| 1098 | height: auto; | |
| 1099 | } | |
| 1100 | .feature-body h3 { | |
| 1101 | font-size: 21px; | |
| 1102 | margin-top: 13px; | |
| 1103 | } | |
| 1104 | .feature-body p { | |
| 1105 | font-size: 12px; | |
| 1106 | margin-bottom: 18px; | |
| 1107 | } | |
| 1108 | .feature-tag { | |
| 1109 | font-size: 9px; | |
| 1110 | } | |
| 1111 | .feature-titlebar { | |
| 1112 | font-size: 10px; | |
| 1113 | } | |
| 1114 | .order-section { | |
| 1115 | grid-template-columns: 1fr; | |
| 1116 | gap: 25px; | |
| 1117 | } | |
| 1118 | .order-pitch h2 { | |
| 1119 | font-size: 29px; | |
| 1120 | } | |
| 1121 | .order-pitch > p { | |
| 1122 | font-size: 11px; | |
| 1123 | } | |
| 1124 | .run-body { | |
| 1125 | padding: 16px; | |
| 1126 | } | |
| 1127 | .command-feedback { | |
| 1128 | min-height: 15px; | |
| 1129 | } | |
| 1130 | .faq-section h2 { | |
| 1131 | font-size: 10px; | |
| 1132 | line-height: 1.5; | |
| 1133 | } | |
| 1134 | .faq-section summary { | |
| 1135 | font-size: 11px; | |
| 1136 | line-height: 1.5; | |
| 1137 | } | |
| 1138 | .site-footer { | |
| 1139 | margin-left: 20px; | |
| 1140 | margin-right: 20px; | |
| 1141 | } | |
| 1142 | .visitor-counter { | |
| 1143 | font-size: 8px; | |
| 1144 | } | |
| 1145 | .site-footer > p { | |
| 1146 | font-size: 8px; | |
| 1147 | } | |
| 1148 | .site-footer nav { | |
| 1149 | font-size: 8px; | |
| 1150 | gap: 15px; | |
| 1151 | } | |
| 1152 | .browser-status { | |
| 1153 | font-size: 8px; | |
| 1154 | height: 26px; | |
| 1155 | } | |
| 1156 | .browser-status > span:nth-child(2) { | |
| 1157 | min-width: 67px; | |
| 1158 | } | |
| 1159 | .browser-status > span:first-child { | |
| 1160 | white-space: nowrap; | |
| 1161 | overflow: hidden; | |
| 1162 | } | |
| 1163 | .resize-grip { | |
| 1164 | display: none !important; | |
| 1165 | } | |
| 1166 | .taskbar { | |
| 1167 | gap: 6px; | |
| 1168 | } | |
| 1169 | .task-button { | |
| 1170 | min-width: 0; | |
| 1171 | flex: 1; | |
| 1172 | max-width: 170px; | |
| 1173 | } | |
| 1174 | .taskbar-clock { | |
| 1175 | padding: 4px 7px; | |
| 1176 | gap: 5px; | |
| 1177 | font-size: 10px; | |
| 1178 | } | |
| 1179 | .dialog-content { | |
| 1180 | padding: 19px 13px 10px; | |
| 1181 | gap: 12px; | |
| 1182 | } | |
| 1183 | } | |
| 1184 | ||
| 1185 | @media (max-width: 620px) { | |
| 1186 | .hero { | |
| 1187 | padding-top: 14px; | |
| 1188 | padding-bottom: 14px; | |
| 1189 | } | |
| 1190 | .hero h1 { | |
| 1191 | font-size: 30px; | |
| 1192 | } | |
| 1193 | .hero-package { | |
| 1194 | max-width: 120px; | |
| 1195 | } | |
| 1196 | .hero .platform-line { | |
| 1197 | display: none; | |
| 1198 | } | |
| 1199 | .agents-section { | |
| 1200 | padding-top: 14px; | |
| 1201 | } | |
| 1202 | .agents-section .agent-list { | |
| 1203 | margin-top: 8px; | |
| 1204 | } | |
| 1205 | } | |
| 1206 | ||
| 1207 | @media (min-width: 821px) and (max-height: 820px) { | |
| 1208 | .hero { | |
| 1209 | padding-top: 10px; | |
| 1210 | padding-bottom: 12px; | |
| 1211 | } | |
| 1212 | .hero h1 { | |
| 1213 | font-size: 40px; | |
| 1214 | } | |
| 1215 | .hero-package { | |
| 1216 | max-width: 140px; | |
| 1217 | } | |
| 1218 | .agent-box { | |
| 1219 | max-width: 180px; | |
| 1220 | } | |
| 1221 | .agents-section { | |
| 1222 | padding-top: 8px; | |
| 1223 | } | |
| 1224 | } | |
| 1225 | ||
| 1226 | @media (max-width: 360px) { | |
| 1227 | .hero-package { | |
| 1228 | max-width: 110px; | |
| 1229 | } | |
| 1230 | .hero, | |
| 1231 | .agents-section, | |
| 1232 | .features-section, | |
| 1233 | .order-section, | |
| 1234 | .faq-section { | |
| 1235 | padding-left: 14px; | |
| 1236 | padding-right: 14px; | |
| 1237 | } | |
| 1238 | .primary-cta { | |
| 1239 | font-size: 10px; | |
| 1240 | } | |
| 1241 | .taskbar-clock > span:first-child { | |
| 1242 | display: none; | |
| 1243 | } | |
| 1244 | } |