tide-commander 0.66.2 → 0.67.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/README.md +5 -2
  2. package/dist/assets/icons/apple-touch-icon.png +0 -0
  3. package/dist/assets/icons/favicon-16x16.png +0 -0
  4. package/dist/assets/icons/favicon-32x32.png +0 -0
  5. package/dist/assets/icons/favicon.ico +0 -0
  6. package/dist/assets/icons/icon-192.png +0 -0
  7. package/dist/assets/icons/icon-512.png +0 -0
  8. package/dist/assets/landing/tc-icon.png +0 -0
  9. package/dist/assets/landing-Dh2c2T6f.css +1 -0
  10. package/dist/assets/{main-hKDljNT8.js → main-Dg1wfA5W.js} +78 -78
  11. package/dist/assets/{main-D54qodDF.css → main-flegxlsj.css} +1 -1
  12. package/dist/index.html +6 -3
  13. package/dist/locales/de/config.json +1 -0
  14. package/dist/locales/en/config.json +1 -0
  15. package/dist/locales/es/config.json +1 -0
  16. package/dist/locales/fr/config.json +1 -0
  17. package/dist/locales/hi/config.json +1 -0
  18. package/dist/locales/it/config.json +1 -0
  19. package/dist/locales/ja/config.json +1 -0
  20. package/dist/locales/pt/config.json +1 -0
  21. package/dist/locales/ru/config.json +1 -0
  22. package/dist/locales/zh-CN/config.json +1 -0
  23. package/dist/src/packages/landing/index.html +12 -9
  24. package/dist/src/packages/server/claude/backend.js +8 -2
  25. package/dist/src/packages/server/codex/backend.js +7 -2
  26. package/dist/src/packages/server/routes/agents.js +29 -1
  27. package/dist/src/packages/server/routes/config.js +1 -1
  28. package/dist/src/packages/server/services/system-prompt-service.js +38 -0
  29. package/package.json +1 -1
  30. package/dist/assets/landing-Dtk9M_cY.css +0 -1
  31. /package/dist/assets/{landing-DdrW9aMA.js → landing-Dpofz3Fo.js} +0 -0
package/dist/index.html CHANGED
@@ -17,13 +17,16 @@
17
17
  <meta name="apple-mobile-web-app-capable" content="yes" />
18
18
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
19
19
  <meta name="apple-mobile-web-app-title" content="Tide CMD" />
20
- <link rel="apple-touch-icon" href="/assets/icons/icon-192.png" />
20
+ <link rel="icon" type="image/x-icon" href="/assets/icons/favicon.ico" />
21
+ <link rel="icon" type="image/png" sizes="32x32" href="/assets/icons/favicon-32x32.png" />
22
+ <link rel="icon" type="image/png" sizes="16x16" href="/assets/icons/favicon-16x16.png" />
23
+ <link rel="apple-touch-icon" sizes="180x180" href="/assets/icons/apple-touch-icon.png" />
21
24
  <title>Tide Commander</title>
22
- <script type="module" crossorigin src="/assets/main-hKDljNT8.js"></script>
25
+ <script type="module" crossorigin src="/assets/main-Dg1wfA5W.js"></script>
23
26
  <link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-B5Qt9EMX.js">
24
27
  <link rel="modulepreload" crossorigin href="/assets/vendor-react-uS-d4TUT.js">
25
28
  <link rel="modulepreload" crossorigin href="/assets/vendor-three-4iQNXcoo.js">
26
- <link rel="stylesheet" crossorigin href="/assets/main-D54qodDF.css">
29
+ <link rel="stylesheet" crossorigin href="/assets/main-flegxlsj.css">
27
30
  </head>
28
31
  <body>
29
32
  <div id="app"></div>
@@ -183,6 +183,7 @@
183
183
  "2dView": "2D-Ansichtsmodus",
184
184
  "voiceAssistant": "Sprachassistent",
185
185
  "tts": "Text-zu-Sprache",
186
+ "echoPrompt": "Echo Prompt",
186
187
  "hint": "Diese Funktionen sind experimentell und können sich ändern"
187
188
  },
188
189
  "areas": {
@@ -183,6 +183,7 @@
183
183
  "2dView": "2D View Mode",
184
184
  "voiceAssistant": "Voice Assistant",
185
185
  "tts": "Text to Speech",
186
+ "echoPrompt": "Echo Prompt",
186
187
  "hint": "These features are experimental and may change"
187
188
  },
188
189
  "areas": {
@@ -183,6 +183,7 @@
183
183
  "2dView": "Modo de vista 2D",
184
184
  "voiceAssistant": "Asistente de voz",
185
185
  "tts": "Texto a voz",
186
+ "echoPrompt": "Echo Prompt",
186
187
  "hint": "Estas funciones son experimentales y pueden cambiar"
187
188
  },
188
189
  "areas": {
@@ -183,6 +183,7 @@
183
183
  "2dView": "Mode vue 2D",
184
184
  "voiceAssistant": "Assistant vocal",
185
185
  "tts": "Synthèse vocale",
186
+ "echoPrompt": "Echo Prompt",
186
187
  "hint": "Ces fonctionnalités sont expérimentales et peuvent changer"
187
188
  },
188
189
  "areas": {
@@ -183,6 +183,7 @@
183
183
  "2dView": "2D दृश्य मोड",
184
184
  "voiceAssistant": "वॉइस असिस्टेंट",
185
185
  "tts": "टेक्स्ट टू स्पीच",
186
+ "echoPrompt": "Echo Prompt",
186
187
  "hint": "ये सुविधाएं प्रायोगिक हैं और बदल सकती हैं"
187
188
  },
188
189
  "areas": {
@@ -183,6 +183,7 @@
183
183
  "2dView": "Modalità vista 2D",
184
184
  "voiceAssistant": "Assistente vocale",
185
185
  "tts": "Sintesi vocale",
186
+ "echoPrompt": "Echo Prompt",
186
187
  "hint": "Queste funzionalità sono sperimentali e potrebbero cambiare"
187
188
  },
188
189
  "areas": {
@@ -183,6 +183,7 @@
183
183
  "2dView": "2Dビューモード",
184
184
  "voiceAssistant": "音声アシスタント",
185
185
  "tts": "テキスト読み上げ",
186
+ "echoPrompt": "Echo Prompt",
186
187
  "hint": "これらの機能は実験的であり、変更される可能性があります"
187
188
  },
188
189
  "areas": {
@@ -183,6 +183,7 @@
183
183
  "2dView": "Modo de Visualizacao 2D",
184
184
  "voiceAssistant": "Assistente de Voz",
185
185
  "tts": "Texto para Fala",
186
+ "echoPrompt": "Echo Prompt",
186
187
  "hint": "Estes recursos sao experimentais e podem mudar"
187
188
  },
188
189
  "areas": {
@@ -183,6 +183,7 @@
183
183
  "2dView": "Режим 2D-вида",
184
184
  "voiceAssistant": "Голосовой помощник",
185
185
  "tts": "Синтез речи",
186
+ "echoPrompt": "Echo Prompt",
186
187
  "hint": "Эти функции экспериментальные и могут измениться"
187
188
  },
188
189
  "areas": {
@@ -183,6 +183,7 @@
183
183
  "2dView": "2D 视图模式",
184
184
  "voiceAssistant": "语音助手",
185
185
  "tts": "文字转语音",
186
+ "echoPrompt": "Echo Prompt",
186
187
  "hint": "这些功能是实验性的,可能会发生变化"
187
188
  },
188
189
  "areas": {
@@ -28,8 +28,11 @@
28
28
  <meta name="twitter:description" content="Command multiple Claude Code and Codex AI agents from an RTS-inspired 3D battlefield." />
29
29
  <meta name="twitter:image" content="https://tidecommander.com/assets/landing/preview-3d.png" />
30
30
 
31
- <!-- Favicon (wave emoji) -->
32
- <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🌊</text></svg>" />
31
+ <!-- Favicon -->
32
+ <link rel="icon" type="image/x-icon" href="/assets/icons/favicon.ico" />
33
+ <link rel="icon" type="image/png" sizes="32x32" href="/assets/icons/favicon-32x32.png" />
34
+ <link rel="icon" type="image/png" sizes="16x16" href="/assets/icons/favicon-16x16.png" />
35
+ <link rel="apple-touch-icon" sizes="180x180" href="/assets/icons/apple-touch-icon.png" />
33
36
 
34
37
  <!-- Fonts -->
35
38
  <link rel="preconnect" href="https://fonts.googleapis.com" />
@@ -67,16 +70,16 @@
67
70
  "runtimePlatform": "Node.js"
68
71
  }
69
72
  </script>
70
- <script type="module" crossorigin src="/assets/landing-DdrW9aMA.js"></script>
73
+ <script type="module" crossorigin src="/assets/landing-Dpofz3Fo.js"></script>
71
74
  <link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-B5Qt9EMX.js">
72
- <link rel="stylesheet" crossorigin href="/assets/landing-Dtk9M_cY.css">
75
+ <link rel="stylesheet" crossorigin href="/assets/landing-Dh2c2T6f.css">
73
76
  </head>
74
77
  <body>
75
78
  <!-- Navigation -->
76
79
  <nav class="nav" id="nav">
77
80
  <div class="nav-content">
78
81
  <a href="#" class="nav-logo">
79
- <span class="logo-emoji">🌊</span>
82
+ <img src="/assets/landing/tc-icon.png" alt="Tide Commander" class="logo-icon" width="28" height="28" />
80
83
  <span class="logo-text">Tide Commander</span>
81
84
  </a>
82
85
  <div class="nav-links" id="nav-links">
@@ -130,9 +133,9 @@
130
133
  Get Started
131
134
  <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
132
135
  </a>
133
- <a href="#demo" class="btn btn-secondary btn-lg">
134
- Watch Demo
135
- <svg class="icon" viewBox="0 0 24 24" fill="currentColor"><polygon points="5,3 19,12 5,21"/></svg>
136
+ <a href="/app" class="btn btn-secondary btn-lg">
137
+ Try Demo
138
+ <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M8 12h8M12 8l4 4-4 4"/></svg>
136
139
  </a>
137
140
  </div>
138
141
 
@@ -697,7 +700,7 @@
697
700
  <div class="footer-grid">
698
701
  <div class="footer-brand">
699
702
  <div class="footer-logo">
700
- <span class="logo-emoji">🌊</span>
703
+ <img src="/assets/landing/tc-icon.png" alt="Tide Commander" class="logo-icon" width="24" height="24" />
701
704
  <span>Tide Commander</span>
702
705
  </div>
703
706
  <p class="footer-tagline">Visual multi-agent orchestrator for Claude Code & Codex</p>
@@ -7,7 +7,7 @@ import * as fs from 'fs';
7
7
  import * as os from 'os';
8
8
  import { createLogger, sanitizeUnicode } from '../utils/index.js';
9
9
  import { TIDE_COMMANDER_APPENDED_PROMPT } from '../prompts/tide-commander.js';
10
- import { getSystemPrompt } from '../services/system-prompt-service.js';
10
+ import { getSystemPrompt, isEchoPromptEnabled } from '../services/system-prompt-service.js';
11
11
  const log = createLogger('Backend');
12
12
  // Track tool_use_id to tool_name mapping for matching tool_result events
13
13
  // This is a module-level map that persists across parseEvent calls
@@ -457,7 +457,13 @@ export class ClaudeBackend {
457
457
  */
458
458
  formatStdinInput(prompt) {
459
459
  // Sanitize prompt to remove invalid Unicode surrogates that break JSON
460
- const sanitizedPrompt = sanitizeUnicode(prompt);
460
+ let sanitizedPrompt = sanitizeUnicode(prompt);
461
+ // Echo Prompt: duplicate the user message for improved attention coverage.
462
+ // On the second pass every token can attend to every other token.
463
+ if (isEchoPromptEnabled()) {
464
+ log.log(` Echo prompt enabled - duplicating user message (${sanitizedPrompt.length} chars)`);
465
+ sanitizedPrompt = sanitizedPrompt + '\n\n---\n\n' + sanitizedPrompt;
466
+ }
461
467
  return JSON.stringify({
462
468
  type: 'user',
463
469
  message: {
@@ -3,6 +3,7 @@ import * as os from 'os';
3
3
  import * as path from 'path';
4
4
  import { CodexJsonEventParser } from './json-event-parser.js';
5
5
  import { TIDE_COMMANDER_APPENDED_PROMPT } from '../prompts/tide-commander.js';
6
+ import { isEchoPromptEnabled } from '../services/system-prompt-service.js';
6
7
  function shouldPassCodexModel(model) {
7
8
  if (!model)
8
9
  return false;
@@ -24,13 +25,17 @@ function buildCodexPrompt(config) {
24
25
  }
25
26
  injectedSections.push(TIDE_COMMANDER_APPENDED_PROMPT);
26
27
  if (injectedSections.length === 0) {
27
- return userPrompt;
28
+ return isEchoPromptEnabled() ? userPrompt + '\n\n---\n\n' + userPrompt : userPrompt;
28
29
  }
30
+ // Echo Prompt: duplicate the user message for improved attention coverage
31
+ const echoedUserPrompt = isEchoPromptEnabled()
32
+ ? userPrompt + '\n\n---\n\n' + userPrompt
33
+ : userPrompt;
29
34
  return [
30
35
  'Follow all instructions below for this task.',
31
36
  ...injectedSections,
32
37
  '## User Request',
33
- userPrompt,
38
+ echoedUserPrompt,
34
39
  ].join('\n\n');
35
40
  }
36
41
  export class CodexBackend {
@@ -12,7 +12,7 @@ import { getClaudeProjectDir } from '../data/index.js';
12
12
  // Session listing is done inline for performance
13
13
  import { createLogger } from '../utils/logger.js';
14
14
  import { buildCustomAgentConfig } from '../websocket/handlers/command-handler.js';
15
- import { getSystemPrompt, setSystemPrompt, clearSystemPrompt } from '../services/system-prompt-service.js';
15
+ import { getSystemPrompt, setSystemPrompt, clearSystemPrompt, isEchoPromptEnabled, setEchoPromptEnabled } from '../services/system-prompt-service.js';
16
16
  const log = createLogger('Routes');
17
17
  const router = Router();
18
18
  function runCommandWithTimeout(command, args, timeoutMs, cwd) {
@@ -454,4 +454,32 @@ router.delete('/system-settings/prompt', (_req, res) => {
454
454
  res.status(500).json({ error: err.message });
455
455
  }
456
456
  });
457
+ // GET /api/system-settings/echo-prompt - Get echo prompt setting
458
+ router.get('/system-settings/echo-prompt', (_req, res) => {
459
+ try {
460
+ const enabled = isEchoPromptEnabled();
461
+ res.json({ enabled });
462
+ }
463
+ catch (err) {
464
+ log.error(' Failed to get echo prompt setting:', err);
465
+ res.status(500).json({ error: err.message });
466
+ }
467
+ });
468
+ // POST /api/system-settings/echo-prompt - Update echo prompt setting
469
+ router.post('/system-settings/echo-prompt', (req, res) => {
470
+ try {
471
+ const { enabled } = req.body;
472
+ if (typeof enabled !== 'boolean') {
473
+ res.status(400).json({ error: 'enabled must be a boolean' });
474
+ return;
475
+ }
476
+ setEchoPromptEnabled(enabled);
477
+ log.log(` Echo prompt setting updated: enabled=${enabled}`);
478
+ res.json({ success: true, enabled });
479
+ }
480
+ catch (err) {
481
+ log.error(' Failed to set echo prompt setting:', err);
482
+ res.status(500).json({ error: err.message });
483
+ }
484
+ });
457
485
  export default router;
@@ -97,7 +97,7 @@ const CONFIG_CATEGORIES = [
97
97
  id: 'system-settings',
98
98
  name: 'System Settings',
99
99
  description: 'Global system prompt and settings',
100
- files: ['system-prompt.json'],
100
+ files: ['system-prompt.json', 'echo-prompt-setting.json'],
101
101
  sourceDir: 'data',
102
102
  },
103
103
  ];
@@ -77,3 +77,41 @@ export function clearSystemPrompt() {
77
77
  export function hasSystemPrompt() {
78
78
  return fs.existsSync(SYSTEM_PROMPT_FILE);
79
79
  }
80
+ // ============================================================================
81
+ // Echo Prompt Setting
82
+ // ============================================================================
83
+ const ECHO_PROMPT_FILE = path.join(DATA_DIR, 'echo-prompt-setting.json');
84
+ /**
85
+ * Check if echo prompt is enabled
86
+ */
87
+ export function isEchoPromptEnabled() {
88
+ ensureDataDir();
89
+ try {
90
+ if (fs.existsSync(ECHO_PROMPT_FILE)) {
91
+ const data = JSON.parse(fs.readFileSync(ECHO_PROMPT_FILE, 'utf-8'));
92
+ return data.enabled;
93
+ }
94
+ }
95
+ catch (error) {
96
+ log.error(` Failed to load echo prompt setting: ${error.message}`);
97
+ }
98
+ return false;
99
+ }
100
+ /**
101
+ * Set echo prompt enabled/disabled
102
+ */
103
+ export function setEchoPromptEnabled(enabled) {
104
+ ensureDataDir();
105
+ const data = {
106
+ enabled,
107
+ updatedAt: Date.now(),
108
+ };
109
+ try {
110
+ fs.writeFileSync(ECHO_PROMPT_FILE, JSON.stringify(data, null, 2), 'utf-8');
111
+ log.log(` Echo prompt setting updated: enabled=${enabled}`);
112
+ }
113
+ catch (error) {
114
+ log.error(` Failed to save echo prompt setting: ${error.message}`);
115
+ throw error;
116
+ }
117
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tide-commander",
3
- "version": "0.66.2",
3
+ "version": "0.67.1",
4
4
  "description": "Visual multi-agent orchestrator and manager for Claude Code with 3D/2D interface",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1 +0,0 @@
1
- :root{--bg-primary: #0a0a0f;--bg-secondary: #12121a;--bg-tertiary: #1a1a25;--bg-card: #15151f;--text-primary: #ffffff;--text-secondary: #a0a0b0;--text-muted: #606070;--accent-primary: #6366f1;--accent-secondary: #8b5cf6;--accent-tertiary: #06b6d4;--accent-gradient: linear-gradient(135deg, #6366f1 0%, #8b5cf6 50%, #06b6d4 100%);--success: #22c55e;--warning: #f59e0b;--error: #ef4444;--border: rgba(255, 255, 255, .08);--border-hover: rgba(255, 255, 255, .15);--font-sans: "Inter", -apple-system, BlinkMacSystemFont, sans-serif;--font-mono: "JetBrains Mono", "Fira Code", monospace;--shadow-sm: 0 2px 8px rgba(0, 0, 0, .3);--shadow-md: 0 4px 20px rgba(0, 0, 0, .4);--shadow-lg: 0 8px 40px rgba(0, 0, 0, .5);--shadow-glow: 0 0 40px rgba(99, 102, 241, .3);--radius-sm: 6px;--radius-md: 10px;--radius-lg: 16px;--radius-xl: 24px}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;scroll-padding-top:80px}body{font-family:var(--font-sans);background:var(--bg-primary);color:var(--text-primary);line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:hidden}@media(max-width:768px){body,input,textarea,select{font-size:16px}}a{color:inherit;text-decoration:none}img{max-width:100%;height:auto;display:block}code{font-family:var(--font-mono)}.container{max-width:1200px;margin:0 auto;padding:0 1.5rem}.gradient-text{background:var(--accent-gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.icon{width:1.25em;height:1.25em;vertical-align:middle;flex-shrink:0}.reveal{opacity:0;transform:translateY(30px);transition:opacity .6s ease,transform .6s ease}.reveal.revealed{opacity:1;transform:translateY(0)}.reveal.revealed .bento-card:nth-child(2){transition-delay:.1s}.reveal.revealed .bento-card:nth-child(3){transition-delay:.2s}.btn{display:inline-flex;align-items:center;gap:.5rem;padding:.75rem 1.5rem;font-size:.9375rem;font-weight:500;font-family:var(--font-sans);border-radius:var(--radius-md);border:none;cursor:pointer;transition:all .2s ease;white-space:nowrap}.btn-primary{background:var(--accent-gradient);color:#fff;box-shadow:var(--shadow-glow)}.btn-primary:hover{transform:translateY(-2px);box-shadow:0 0 60px #6366f166}.btn-secondary{background:var(--bg-tertiary);color:var(--text-primary);border:1px solid var(--border)}.btn-secondary:hover{background:var(--bg-card);border-color:var(--border-hover)}.btn-outline{background:transparent;color:var(--text-primary);border:1px solid var(--border)}.btn-outline:hover{background:var(--bg-tertiary);border-color:var(--border-hover)}.btn-lg{padding:1rem 2rem;font-size:1rem}.btn-sm{padding:.5rem 1rem;font-size:.8125rem}.nav{position:fixed;top:0;left:0;right:0;z-index:100;background:#0a0a0fcc;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-bottom:1px solid transparent;transition:border-color .3s,background .3s}.nav.scrolled{border-bottom-color:var(--border);background:#0a0a0ff2}.nav-content{max-width:1200px;margin:0 auto;padding:0 1.5rem;height:60px;display:flex;align-items:center;justify-content:space-between}@media(max-width:768px){.nav-content{height:56px;padding:0 1rem}}.nav-logo{display:flex;align-items:center;gap:.5rem;font-weight:600;font-size:1.125rem;z-index:101}.logo-emoji{font-size:1.5rem;line-height:1}.nav-links{display:flex;align-items:center;gap:2rem}.nav-links a:not(.btn){color:var(--text-secondary);font-size:.9375rem;transition:color .2s;position:relative}.nav-links a:not(.btn):hover,.nav-links a:not(.btn).active{color:var(--text-primary)}.nav-links a:not(.btn).active:after{content:"";position:absolute;bottom:-4px;left:0;right:0;height:2px;background:var(--accent-gradient);border-radius:1px}.hamburger{display:none;flex-direction:column;gap:5px;background:none;border:none;cursor:pointer;padding:8px;z-index:101}.hamburger span{display:block;width:24px;height:2px;background:var(--text-primary);transition:all .3s;border-radius:1px}.hamburger.open span:nth-child(1){transform:rotate(45deg) translate(5px,5px)}.hamburger.open span:nth-child(2){opacity:0}.hamburger.open span:nth-child(3){transform:rotate(-45deg) translate(5px,-5px)}.hero{position:relative;min-height:100vh;display:flex;align-items:center;padding:6rem 0 4rem;overflow:hidden}.hero-bg{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0}.grid-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(rgba(255,255,255,.02) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.02) 1px,transparent 1px);background-size:60px 60px;mask-image:radial-gradient(ellipse at center,black 0%,transparent 70%);-webkit-mask-image:radial-gradient(ellipse at center,black 0%,transparent 70%)}.glow{position:absolute;border-radius:50%;filter:blur(100px);opacity:.4;animation:float 8s ease-in-out infinite}.glow-1{top:10%;left:20%;width:400px;height:400px;background:var(--accent-primary)}.glow-2{top:40%;right:10%;width:300px;height:300px;background:var(--accent-secondary);animation-delay:-3s}.glow-3{bottom:10%;left:40%;width:350px;height:350px;background:var(--accent-tertiary);animation-delay:-5s}@keyframes float{0%,to{transform:translate(0)}33%{transform:translate(30px,-30px)}66%{transform:translate(-20px,20px)}}.hero-inner{position:relative;z-index:1;max-width:1200px;margin:0 auto;padding:0 1.5rem;display:grid;grid-template-columns:1fr 1.2fr;gap:4rem;align-items:center}.hero-badge{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:var(--bg-tertiary);border:1px solid var(--border);border-radius:100px;font-size:.8125rem;color:var(--text-secondary);margin-bottom:1.5rem}.badge-dot{width:8px;height:8px;background:var(--success);border-radius:50%;animation:pulse 2s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.hero-title{font-size:clamp(2.5rem,5vw,3.75rem);font-weight:800;line-height:1.1;margin-bottom:1.5rem;letter-spacing:-.02em}.hero-subtitle{font-size:1.2rem;color:var(--text-secondary);margin-bottom:2rem;line-height:1.7}.hero-actions{display:flex;gap:1rem;margin-bottom:1.5rem;flex-wrap:wrap}.install-snippet{display:inline-flex;align-items:center;gap:.5rem;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-md);padding:.625rem 1rem;margin-bottom:2.5rem}.install-snippet code{color:var(--success);font-size:.9375rem}.hero-stats{display:flex;gap:3rem}.stat{display:flex;flex-direction:column}.stat-value{font-size:1.75rem;font-weight:700;background:var(--accent-gradient);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.stat-label{font-size:.8125rem;color:var(--text-muted)}.hero-visual{position:relative}.browser-frame{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-lg),0 0 80px #6366f11a}.browser-bar{display:flex;align-items:center;gap:8px;padding:.625rem 1rem;background:var(--bg-tertiary);border-bottom:1px solid var(--border)}.dot{width:12px;height:12px;border-radius:50%}.dot.red{background:#ff5f56}.dot.yellow{background:#ffbd2e}.dot.green{background:#27ca40}.browser-url{margin-left:8px;font-size:.75rem;color:var(--text-muted);font-family:var(--font-mono)}.browser-frame img{width:100%;display:block}.social-bar{padding:1.5rem 0;background:var(--bg-secondary);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}.social-bar-inner{display:flex;align-items:center;justify-content:center;gap:1.5rem;flex-wrap:wrap}.social-bar-inner a{display:flex;align-items:center;transition:opacity .2s}.social-bar-inner a:hover{opacity:.8}.social-divider{width:1px;height:20px;background:var(--border)}.built-with{font-size:.8125rem;color:var(--text-muted);font-style:italic}.the-problem{padding:5rem 0}.problem-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem;margin-bottom:2rem}.problem-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-md);padding:1.5rem;text-align:center;transition:all .3s ease}.problem-card:hover{border-color:#ef44444d;transform:translateY(-3px)}.problem-icon{font-size:2rem;display:block;margin-bottom:.75rem}.problem-card p{color:var(--text-secondary);font-size:.9375rem;font-style:italic;line-height:1.5}.problem-answer{text-align:center;font-size:1.125rem;color:var(--text-secondary);max-width:700px;margin:0 auto;line-height:1.7}.problem-answer strong{color:var(--text-primary)}.section-header{text-align:center;margin-bottom:3rem}.section-tag{display:inline-block;padding:.25rem 1rem;background:#6366f11a;border:1px solid rgba(99,102,241,.3);border-radius:100px;font-size:.8125rem;font-weight:500;color:var(--accent-primary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:1rem}.section-header h2{font-size:clamp(1.75rem,4vw,2.5rem);font-weight:700;margin-bottom:1rem}.section-header p{font-size:1.125rem;color:var(--text-secondary);max-width:600px;margin:0 auto}.features{padding:6rem 0;background:var(--bg-secondary)}.bento-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:1.25rem}.bento-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:1.75rem;transition:all .3s ease}.bento-card:hover{border-color:var(--border-hover);transform:translateY(-3px);box-shadow:var(--shadow-md)}.bento-full{grid-column:span 6}.bento-half{grid-column:span 3}.bento-third{grid-column:span 2}.feature-emoji{font-size:2rem;display:block;margin-bottom:.75rem}.bento-card h3{font-size:1.25rem;font-weight:600;margin-bottom:.5rem}.bento-card p{color:var(--text-secondary);font-size:.9375rem;line-height:1.6}.bento-card code{background:#6366f126;padding:.125rem .375rem;border-radius:4px;font-size:.8125rem;color:var(--accent-tertiary)}.bento-card kbd{display:inline-block;padding:.1rem .35rem;background:var(--bg-primary);border:1px solid var(--border);border-radius:3px;font-family:var(--font-mono);font-size:.75rem;color:var(--text-secondary)}.bento-full{display:grid;grid-template-columns:1fr 1.5fr;gap:0;padding:0;overflow:hidden}.bento-full .bento-card-content{padding:2.5rem;display:flex;flex-direction:column;justify-content:center}.bento-full .bento-card-image img{width:100%;height:100%;object-fit:cover}.feature-pills{display:flex;gap:.5rem;flex-wrap:wrap;margin-top:1rem}.pill{padding:.25rem .75rem;background:#6366f11a;border:1px solid rgba(99,102,241,.2);border-radius:100px;font-size:.75rem;color:var(--accent-primary)}.controls-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:.75rem;margin-top:1.25rem}.control-hint{display:flex;align-items:center;gap:.5rem}.control-hint kbd{display:inline-block;padding:.25rem .5rem;background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:.75rem;min-width:40px;text-align:center}.control-hint span{color:var(--text-muted);font-size:.8125rem}.boss-visual{display:flex;flex-direction:column;align-items:center;gap:.5rem;margin-top:1.5rem;padding:1rem;background:var(--bg-tertiary);border-radius:var(--radius-md)}.boss-node{padding:.375rem 1rem;border-radius:100px;font-size:.8125rem;font-weight:500}.boss-node.boss{background:#f59e0b33;border:1px solid rgba(245,158,11,.4);color:var(--warning)}.boss-node.worker{background:#6366f11a;border:1px solid rgba(99,102,241,.3);color:var(--accent-primary);font-size:.75rem}.boss-lines{display:flex;gap:2rem;position:relative}.boss-line{width:2px;height:20px;background:var(--border)}.boss-workers{display:flex;gap:.5rem}.buildings-gallery{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:4px}.buildings-gallery img{width:100%;height:100%;object-fit:cover;opacity:.85;transition:opacity .3s}.buildings-gallery img:first-child{grid-row:span 2}.buildings-gallery img:hover{opacity:1}.bento-mobile-remote{grid-column:span 6;display:grid;grid-template-columns:1fr auto;align-items:center;gap:2rem;padding:2.5rem;background:linear-gradient(135deg,#8b5cf614,#3b82f614);border:1px solid rgba(139,92,246,.2)}.mobile-remote-content{max-width:500px}.mobile-remote-content h3{font-size:1.5rem;margin:.75rem 0 .5rem}.mobile-remote-content p{font-size:1rem;line-height:1.6;color:#ffffffb3}.mobile-remote-image{width:220px;flex-shrink:0}.mobile-remote-image img{width:100%;border-radius:16px;border:2px solid rgba(139,92,246,.3);box-shadow:0 8px 32px #8b5cf626;transition:transform .3s ease,box-shadow .3s ease}.mobile-remote-image img:hover{transform:scale(1.03);box-shadow:0 12px 40px #8b5cf640}.bento-image-card{padding:0;overflow:hidden;display:flex;flex-direction:column}.bento-image-card .bento-text{padding:1.75rem 1.75rem 1rem}.bento-image-card .bento-card-image{flex:1;overflow:hidden}.bento-image-card .bento-card-image img{width:100%;height:100%;object-fit:cover;object-position:top;opacity:.85;transition:opacity .3s}.bento-image-card:hover .bento-card-image img{opacity:1}.views{padding:6rem 0}.views-tabs{display:flex;justify-content:center;gap:.5rem;margin-bottom:2rem}.view-tab{display:flex;align-items:center;gap:.5rem;padding:.75rem 1.5rem;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text-secondary);font-family:var(--font-sans);font-size:.9375rem;font-weight:500;cursor:pointer;transition:all .2s}.view-tab:hover{border-color:var(--border-hover);color:var(--text-primary)}.view-tab.active{background:var(--bg-tertiary);border-color:var(--accent-primary);color:var(--text-primary);box-shadow:0 0 20px #6366f126}.view-tab-icon{font-size:1.25rem}.views-display{max-width:960px;margin:0 auto}.view-pane{display:none}.view-pane.active{display:block;animation:fadeIn .3s ease}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.view-desc{text-align:center;color:var(--text-secondary);font-size:.9375rem;margin-top:1.25rem;max-width:600px;margin-left:auto;margin-right:auto}.agent-classes{padding:6rem 0;background:var(--bg-secondary)}.classes-showcase{display:grid;grid-template-columns:1fr 1fr;gap:3rem;align-items:center;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:3rem;transition:border-color .3s}.classes-showcase:hover{border-color:var(--accent-primary)}.classes-showcase-text h3{font-size:1.5rem;font-weight:700;margin-bottom:.75rem}.classes-showcase-text p{font-size:1rem;line-height:1.7;color:var(--text-muted);margin-bottom:1.25rem}.classes-features-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.6rem}.classes-features-list li{font-size:.9rem;color:#ffffffbf;padding-left:1.5rem;position:relative}.classes-features-list li:before{content:"✓";position:absolute;left:0;color:var(--accent-secondary);font-weight:700}.classes-showcase-image{display:flex;justify-content:center}.classes-showcase-image img{max-width:100%;border-radius:12px;border:1px solid rgba(139,92,246,.2);box-shadow:0 8px 32px #0000004d;transition:transform .3s ease,box-shadow .3s ease}.classes-showcase-image img:hover{transform:scale(1.02);box-shadow:0 12px 40px #8b5cf633}.classes-showcase+.classes-showcase{margin-top:2rem}.demo{padding:6rem 0}.video-wrapper{max-width:900px;margin:0 auto}.video-container{position:relative;width:100%;padding-top:56.25%;background:var(--bg-secondary);border-radius:var(--radius-lg);overflow:hidden;border:1px solid var(--border);box-shadow:var(--shadow-lg),0 0 60px #6366f11a;cursor:pointer}.video-container img,.video-container iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:none}.video-thumb{object-fit:cover;transition:opacity .3s}.video-container:hover .video-thumb{opacity:.85}.video-play-btn{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:none;border:none;cursor:pointer;opacity:.9;transition:opacity .2s,transform .2s;z-index:1}.video-container:hover .video-play-btn{opacity:1;transform:translate(-50%,-50%) scale(1.1)}.how-it-works{padding:6rem 0;background:var(--bg-secondary)}.steps{max-width:700px;margin:0 auto;display:flex;flex-direction:column;align-items:stretch}.step{display:flex;gap:1.5rem;align-items:flex-start}.step-number{width:48px;height:48px;min-width:48px;display:flex;align-items:center;justify-content:center;background:var(--accent-gradient);border-radius:50%;font-size:1.25rem;font-weight:700}.step-content{flex:1;padding-bottom:.5rem}.step-content h3{font-size:1.25rem;font-weight:600;margin-bottom:.375rem}.step-content p{color:var(--text-secondary);font-size:.9375rem}.step-connector{width:2px;height:32px;background:var(--border);margin-left:23px}.terminal-mock{margin-top:.75rem;background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-md);padding:.75rem 1rem;font-family:var(--font-mono);font-size:.875rem}.terminal-mock .prompt{color:var(--accent-primary);margin-right:.5rem}.terminal-mock code{color:var(--success)}.tech-stack{padding:6rem 0}.tech-grid{display:flex;justify-content:center;gap:.75rem;flex-wrap:wrap;margin-bottom:3rem}.tech-card{display:flex;align-items:center;gap:.5rem;padding:.75rem 1.25rem;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-md);transition:all .3s;font-size:.9375rem}.tech-card:hover{border-color:var(--border-hover);transform:translateY(-2px)}.tech-icon{font-size:1.5rem}.architecture{max-width:700px;margin:0 auto;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);padding:2rem;text-align:center}.architecture img{margin:0 auto;max-width:100%}.cta{padding:6rem 0;background:linear-gradient(180deg,var(--bg-secondary) 0%,var(--bg-primary) 100%)}.cta-content{text-align:center;max-width:700px;margin:0 auto}.cta-content h2{font-size:clamp(1.75rem,4vw,2.5rem);font-weight:700;margin-bottom:1rem}.cta-content>p{font-size:1.125rem;color:var(--text-secondary);margin-bottom:2rem}.install-box{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-lg);padding:1.5rem;margin-bottom:2rem}.install-row{display:flex;align-items:center;justify-content:center;gap:.75rem}.install-row code{font-size:1.25rem;color:var(--success)}.install-alt{display:block;margin-top:.75rem;font-size:.8125rem;color:var(--text-muted)}.install-alt code{color:var(--text-secondary);font-size:.8125rem}.cta-actions{display:flex;justify-content:center;gap:1rem;flex-wrap:wrap;margin-bottom:1.5rem}.cta-trust{font-size:.9375rem;color:var(--text-secondary);margin-bottom:.75rem;letter-spacing:.01em}.cta-req{font-size:.8125rem;color:var(--text-muted)}.cta-req a{color:var(--accent-tertiary);text-decoration:underline;text-underline-offset:2px}.copy-btn{display:flex;align-items:center;background:none;border:none;color:var(--text-muted);cursor:pointer;padding:.375rem;border-radius:var(--radius-sm);transition:all .2s}.copy-btn:hover{color:var(--text-primary);background:var(--bg-tertiary)}.copy-btn .check-icon{display:none;color:var(--success)}.copy-btn.copied .copy-icon{display:none}.copy-btn.copied .check-icon{display:block}.footer{padding:4rem 0 2rem;border-top:1px solid var(--border)}.footer-grid{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:3rem;margin-bottom:3rem}.footer-logo{display:flex;align-items:center;gap:.5rem;font-weight:600;font-size:1rem;margin-bottom:.75rem}.footer-logo .logo-emoji{font-size:1.25rem}.footer-tagline{font-size:.875rem;color:var(--text-secondary);margin-bottom:.5rem}.footer-built{font-size:.8125rem;color:var(--text-muted);font-style:italic}.footer-col{display:flex;flex-direction:column;gap:.625rem}.footer-col h5{font-size:.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-primary);margin-bottom:.25rem}.footer-col a{color:var(--text-secondary);font-size:.875rem;transition:color .2s}.footer-col a:hover{color:var(--text-primary)}.footer-bottom{padding-top:2rem;border-top:1px solid var(--border);text-align:center}.footer-bottom p{font-size:.8125rem;color:var(--text-muted)}.expandable-img{cursor:zoom-in;transition:opacity .2s}.expandable-img:hover{opacity:.85}.lightbox-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;background:#000000e6;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .25s ease}.lightbox-overlay.active{opacity:1;pointer-events:auto}.lightbox-inner{position:relative;max-width:95vw;max-height:92vh}.lightbox-img{display:block;max-width:95vw;max-height:90vh;border-radius:var(--radius-md);box-shadow:0 8px 60px #0009;transform:scale(.95);transition:transform .25s ease}.lightbox-overlay.active .lightbox-img{transform:scale(1)}.lightbox-close{position:absolute;top:-40px;right:0;background:none;border:none;color:var(--text-secondary);cursor:pointer;padding:6px;border-radius:50%;transition:color .2s,background .2s;display:flex;align-items:center;justify-content:center}.lightbox-close:hover{color:var(--text-primary);background:#ffffff1a}@media(max-width:1024px){.container{padding:0 1.5rem}.hero-inner{grid-template-columns:1fr;gap:2.5rem;text-align:center}.hero-content{max-width:100%;margin:0 auto}.hero-title{font-size:clamp(2rem,5vw,3rem)}.hero-subtitle{font-size:1.0625rem;max-width:600px;margin:0 auto 1.5rem}.hero-actions{justify-content:center;flex-wrap:wrap}.install-snippet{margin:0 auto 2rem}.hero-stats{justify-content:center;flex-wrap:wrap}.hero-visual{max-width:100%;margin:0 auto}.the-problem,.features,.views,.agent-classes,.demo,.how-it-works,.cta{padding:4rem 0}.section-header{margin-bottom:2.5rem}.bento-grid{gap:1.125rem}.bento-full{grid-template-columns:1fr}.bento-full .bento-card-content{padding:2rem}.bento-full .bento-card-image{min-height:280px}.bento-full .bento-card-image img{max-height:300px}.buildings-gallery{grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr}.buildings-gallery img:first-child{grid-row:span 2}.bento-mobile-remote{grid-template-columns:1fr 280px;gap:2rem}.mobile-remote-image{width:100%;max-width:280px}.controls-grid{grid-template-columns:repeat(2,1fr)}.classes-showcase{grid-template-columns:1fr;gap:2rem;padding:2.25rem}.footer{padding:3.5rem 0 2rem}.footer-grid{grid-template-columns:repeat(2,1fr);gap:2.5rem}}@media(max-width:768px){.container{padding:0 1.25rem}.problem-grid{grid-template-columns:1fr;gap:.875rem}.problem-card{padding:1.25rem}.problem-answer{font-size:1.0625rem}.hamburger{display:flex}.nav-links{position:fixed;top:0;right:0;bottom:0;width:100%;max-width:320px;background:var(--bg-secondary);border-left:1px solid var(--border);flex-direction:column;align-items:flex-start;padding:4.5rem 1.5rem 2rem;gap:1.125rem;transform:translate(100%);transition:transform .3s ease;z-index:100;overflow-y:auto}.nav-links.open{transform:translate(0)}.nav-links a:not(.btn){font-size:1rem;min-height:44px;display:flex;align-items:center}.nav-links .btn{width:100%;justify-content:center;min-height:44px}.hero{padding:4.5rem 0 2rem;min-height:auto}.hero-inner{grid-template-columns:1fr;gap:2rem}.hero-content{max-width:100%}.hero-title{font-size:2rem}.hero-subtitle{font-size:.9375rem;margin-bottom:1.5rem}.hero-actions{flex-direction:column;gap:.75rem}.btn-lg{min-height:44px}.install-snippet{flex-direction:column;gap:.5rem;margin:0 auto 2rem}.hero-stats{flex-direction:column;gap:1rem;align-items:flex-start;width:100%}.hero-visual{max-width:100%}.the-problem,.features,.views,.agent-classes,.demo,.how-it-works,.cta{padding:3.5rem 0}.section-header{margin-bottom:2.5rem}.section-header h2{font-size:1.75rem}.section-header p{font-size:1rem}.bento-grid{grid-template-columns:1fr;gap:1.125rem}.bento-full,.bento-half,.bento-third{grid-column:span 1}.bento-full{grid-template-columns:1fr;padding:0}.bento-full .bento-card-content{padding:2rem}.bento-card{padding:1.5rem}.bento-card h3{font-size:1.125rem}.feature-emoji{font-size:1.75rem}.bento-image-card{flex-direction:column}.bento-image-card .bento-text{padding:1.5rem}.bento-image-card .bento-card-image{height:200px}.bento-full .bento-card-image img{max-height:250px}.controls-grid{grid-template-columns:repeat(2,1fr);gap:.75rem}.buildings-gallery{grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:3px}.buildings-gallery img:first-child{grid-row:span 2}.bento-mobile-remote{grid-template-columns:1fr;text-align:center;gap:1.5rem}.mobile-remote-content{max-width:100%}.mobile-remote-image{width:180px;margin:0 auto}.feature-pills{margin-top:.875rem}.views-tabs{flex-direction:column;align-items:stretch;gap:.625rem;max-width:100%}.view-tab{padding:.75rem 1.25rem;min-height:44px}.classes-showcase{grid-template-columns:1fr;padding:1.75rem;gap:1.5rem}.classes-showcase-text h3{font-size:1.25rem}.classes-showcase-text p{font-size:.9375rem}.classes-features-list li{font-size:.875rem}.step{gap:1.25rem}.step-number{width:44px;height:44px;min-width:44px}.step-content h3{font-size:1.125rem}.terminal-mock{font-size:.8125rem}.cta-content h2{font-size:1.75rem}.install-box{padding:1.25rem}.install-row{flex-direction:column;align-items:flex-start}.cta-actions{flex-direction:column;gap:.875rem}.footer{padding:3rem 0 1.5rem}.footer-grid{grid-template-columns:1fr;gap:2rem}.footer-col{gap:.75rem}}@media(max-width:480px){.container{padding:0 1rem}body{font-size:16px}.hero{padding:5rem 0 2rem;min-height:auto}.hero-title{font-size:1.75rem;margin-bottom:1rem}.hero-subtitle{font-size:.9375rem;margin-bottom:1.5rem}.hero-badge{margin-bottom:1rem;font-size:.75rem}.hero-actions{flex-direction:column;width:100%;gap:.75rem;margin-bottom:1.25rem}.btn-lg{width:100%;justify-content:center;padding:.875rem 1.5rem;font-size:.9375rem}.btn{min-height:44px;padding:.625rem 1.25rem}.install-snippet{flex-direction:column;width:100%;margin-bottom:1.5rem;padding:.75rem}.install-snippet code{font-size:.8125rem;word-break:break-word}.copy-btn{flex-shrink:0;padding:.25rem}.hero-stats{flex-direction:column;gap:1rem;align-items:flex-start;width:100%}.stat{width:100%;text-align:left}.stat-value{font-size:1.5rem}.the-problem,.features,.views,.agent-classes,.demo,.how-it-works,.cta{padding:3rem 0}.section-header{margin-bottom:2rem}.section-header h2{font-size:1.5rem}.section-header p{font-size:.9375rem}.problem-grid{grid-template-columns:1fr;gap:.75rem}.problem-card{padding:1.25rem}.problem-icon{font-size:1.75rem;margin-bottom:.5rem}.problem-card p{font-size:.875rem}.problem-answer{font-size:1rem;padding:0 1rem}.bento-grid{grid-template-columns:1fr;gap:1rem}.bento-full,.bento-half,.bento-third,.bento-mobile-remote{grid-column:span 1!important}.bento-card{padding:1.25rem}.bento-card h3{font-size:1.125rem}.bento-card p{font-size:.875rem}.feature-emoji{font-size:1.75rem;margin-bottom:.5rem}.bento-full{grid-template-columns:1fr;padding:0}.bento-full .bento-card-content{padding:1.5rem}.bento-full .bento-card-image,.bento-full .bento-card-image img{max-height:200px}.bento-image-card{flex-direction:column}.bento-image-card .bento-text{padding:1.25rem}.bento-image-card .bento-card-image{height:150px}.controls-grid{grid-template-columns:1fr;gap:.5rem;margin-top:1rem}.control-hint{padding:.75rem;background:var(--bg-primary);border-radius:var(--radius-sm);border:1px solid var(--border)}.control-hint kbd{min-width:35px;font-size:.7rem}.control-hint span{font-size:.75rem}.boss-visual{padding:.75rem;gap:.25rem}.boss-node{padding:.3rem .75rem;font-size:.7rem}.boss-lines{gap:1rem}.boss-line{height:15px}.buildings-gallery{grid-template-columns:1fr;grid-template-rows:auto;gap:2px}.buildings-gallery img{max-height:150px}.buildings-gallery img:first-child{grid-row:auto}.bento-mobile-remote{grid-template-columns:1fr;text-align:center;gap:1.5rem;padding:1.5rem}.mobile-remote-content{max-width:100%}.mobile-remote-content h3{font-size:1.25rem;margin:.5rem 0}.mobile-remote-content p{font-size:.875rem;line-height:1.5}.mobile-remote-image{width:140px;margin:0 auto}.feature-pills{gap:.35rem;flex-wrap:wrap;margin-top:.75rem}.pill{font-size:.7rem;padding:.2rem .6rem}.views-tabs{flex-direction:column;align-items:stretch;gap:.5rem;max-width:100%}.view-tab{padding:.625rem 1rem;font-size:.875rem;min-height:44px}.view-tab-icon{font-size:1rem}.classes-showcase{grid-template-columns:1fr;padding:1.25rem;gap:1.25rem}.classes-showcase-text h3{font-size:1.25rem}.classes-showcase-text p{font-size:.875rem}.classes-features-list li{font-size:.85rem;padding-left:1.25rem}.classes-showcase-image{display:block}.classes-showcase-image img,.steps{max-width:100%}.step{gap:1rem}.step-number{width:40px;height:40px;min-width:40px;font-size:1.125rem}.step-connector{margin-left:19px}.step-content h3{font-size:1.1rem}.step-content p{font-size:.875rem}.terminal-mock{font-size:.75rem;padding:.5rem .75rem}.cta-content h2{font-size:1.5rem}.cta-content>p{font-size:1rem}.install-box{padding:1rem}.install-row{flex-direction:column;align-items:flex-start;gap:.5rem}.install-row code{font-size:.875rem;word-break:break-word}.install-alt{font-size:.75rem;margin-top:.5rem}.install-alt code{font-size:.75rem}.cta-actions{flex-direction:column;gap:.75rem}.cta-trust{font-size:.875rem}.cta-req{font-size:.75rem}.footer{padding:2.5rem 0 1.5rem}.footer-grid{grid-template-columns:1fr;gap:1.5rem}.footer-logo{font-size:.95rem}.footer-col h5{font-size:.75rem}.footer-col a{font-size:.8125rem}.nav-content{padding:0 1rem}.nav-logo{font-size:1rem}.logo-emoji{font-size:1.25rem}.nav-links{width:240px;padding:4.5rem 1.5rem 1.5rem;gap:1rem}.nav-links a:not(.btn){font-size:1rem}.lightbox-img{border-radius:var(--radius-sm)}.lightbox-close{top:-32px}.copy-btn{min-height:40px;min-width:40px}}