vibetunnel/web/public/index.html
Mario Zechner 7c92eb5bdb Implement black theme, mobile improvements, and fit-to-width toggle
- Apply consistent black theme across all components with colored borders
- Add animated VibeTunnel logo with rainbow scrolling gradient
- Implement comprehensive mobile input controls with Ctrl+Alpha overlay
- Add fit-to-width toggle button in session view header with scroll preservation
- Enhance mobile experience with proper viewport handling and keyboard positioning
- Update button styling to use black backgrounds with colored borders throughout
- Resize scroll-to-bottom button for better mobile accessibility

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-18 10:16:04 +02:00

96 lines
No EOL
3.1 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover, user-scalable=no">
<title>VibeTunnel - Terminal Multiplexer</title>
<meta name="description" content="Interactive terminal sessions in your browser with real-time streaming and mobile support">
<!-- PWA and mobile optimizations -->
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="theme-color" content="#1e1e1e">
<!-- Favicon -->
<link rel="shortcut icon" href="/favicon.ico">
<!-- Styles -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@xterm/xterm@5.5.0/css/xterm.css" />
<link href="bundle/output.css" rel="stylesheet">
<!-- Mobile viewport and address bar handling -->
<style>
html, body {
margin: 0;
padding: 0;
width: 100%;
height: 100vh;
height: calc(var(--vh, 1vh) * 100); /* Dynamic viewport height for mobile */
overscroll-behavior-y: none; /* Prevent pull-to-refresh */
-webkit-overflow-scrolling: touch;
}
/* Prevent pull-to-refresh only on specific elements */
body {
-webkit-touch-callout: none;
-webkit-tap-highlight-color: transparent;
}
/* Only disable touch-action on terminal components */
vibe-terminal {
touch-action: none;
}
/* Ensure app takes full viewport */
vibetunnel-app {
display: block;
width: 100%;
min-height: 100%;
}
</style>
<!-- Import Maps -->
<script type="importmap">
{
"imports": {
"lit": "https://cdn.skypack.dev/lit",
"lit/": "https://cdn.skypack.dev/lit/"
}
}
</script>
</head>
<body class="m-0 p-0" style="background: black;">
<vibetunnel-app></vibetunnel-app>
<!-- Mobile viewport height fix -->
<script>
// Handle dynamic viewport height for mobile browsers
function setViewportHeight() {
const vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
}
// Set initial height
setViewportHeight();
// Update on resize and orientation change
window.addEventListener('resize', setViewportHeight);
window.addEventListener('orientationchange', () => {
setTimeout(setViewportHeight, 100);
});
// Force full-screen behavior
window.addEventListener('load', () => {
// Scroll to top to hide address bar
setTimeout(() => {
window.scrollTo(0, 1);
setTimeout(() => window.scrollTo(0, 0), 10);
}, 10);
});
</script>
<script type="module" src="bundle/client-bundle.js"></script>
</body>
</html>