shellphone 0.3.0

Pipe CLI commands to a secure mobile web terminal
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
  <title>shellphone</title>
  <link rel="stylesheet" href="/assets/terminal.css">
  <style>
    * { margin: 0; padding: 0; box-sizing: border-box; }
    html, body { height: 100%; background: #1e1e2e; overflow: hidden; }
    #terminal { width: 100%; position: absolute; top: 0; bottom: 0; }
    #status {
      position: fixed; top: 0; left: 0; right: 0;
      padding: 4px 12px;
      font-family: monospace; font-size: 12px;
      color: #cdd6f4; background: #313244;
      z-index: 10;
    }
    #status.connected { background: #1e6640; }
    #status.error { background: #8b2525; }
    #status.reconnecting { background: #7c5a00; }
    #toolbar {
      display: none;
      position: fixed; bottom: 0; left: 0; right: 0;
      background: #313244; border-top: 1px solid #45475a;
      padding: 6px 4px; z-index: 10;
      gap: 3px;
      justify-content: center;
    }
    #toolbar button {
      background: #45475a; color: #cdd6f4; border: none; border-radius: 4px;
      font-family: monospace; font-size: 14px;
      height: 40px;
      padding: 0;
      flex: 1 1 0;
      -webkit-tap-highlight-color: transparent;
      touch-action: manipulation;
    }
    #toolbar button:active { background: #585b70; }
    #toolbar .spacer { width: 6px; flex-shrink: 0; }
  </style>
</head>
<body>
  <div id="status">Connecting...</div>
  <div id="terminal"></div>
  <div id="toolbar">
    <button data-key="Escape">Esc</button>
    <button data-key="Tab">Tab</button>
    <div class="spacer"></div>
    <button data-key="ArrowUp">&uarr;</button>
    <button data-key="ArrowDown">&darr;</button>
    <button data-key="ArrowLeft">&larr;</button>
    <button data-key="ArrowRight">&rarr;</button>
    <button data-key="Enter">Enter</button>
  </div>

  <script type="module" src="/assets/terminal.js"></script>
</body>
</html>